Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.17 KB | None | 0 0
  1. #define MAX_REMOVED_OBJECTS 500
  2.  
  3. enum ObjectRemoved
  4. {
  5. Model,
  6. Float:Location[3]
  7. }
  8.  
  9. new
  10. RemovedObject[MAX_REMOVED_OBJECTS][ObjectRemoved],
  11. g_SlotID = -1
  12. ;
  13.  
  14. stock IsPosInRangeOfPoint3D(Float:pos_x, Float:pos_y, Float:pos_z, Float:range, Float:range_x, Float:range_y, Float:range_z)
  15. {
  16. pos_x -= range_x;
  17. pos_y -= range_y;
  18. pos_z -= range_z;
  19. return ((pos_x * pos_x) + (pos_y * pos_y) + (pos_z * pos_z)) < (range * range);
  20. }
  21.  
  22. stock RemoveObject(modelid, Float:pos_x, Float:pos_y, Float:pos_z)
  23. {
  24. g_SlotID++;
  25. if(g_SlotID == MAX_REMOVED_OBJECTS)
  26. {
  27. printf("Error: Limit for removed objects is reached. Open your script and change \"MAX_REMOVED_OBJECTS\" definition to a bigger value if you want to have more removed objects.");
  28. g_SlotID--;
  29. return -1;
  30. }
  31. if(g_SlotID == 1000)
  32. {
  33. printf("SA-MP limit: There appears to be a limit of around 1000 lines/objects. There is no workaround.");
  34. g_SlotID--;
  35. return -1;
  36. }
  37. RemovedObject[g_SlotID][Model] = modelid;
  38. RemovedObject[g_SlotID][Location][0] = pos_x;
  39. RemovedObject[g_SlotID][Location][1] = pos_y;
  40. RemovedObject[g_SlotID][Location][2] = pos_z;
  41. return g_SlotID;
  42. }
  43.  
  44. stock GetNumberOfRemovedObjects()
  45. return (g_SlotID + 1);
  46.  
  47. stock IsObjectRemoved(modelid, Float:pos_x, Float:pos_y, Float:pos_z)
  48. {
  49. if(!GetNumberOfRemovedObjects())
  50. return false;
  51. for(new a = 0; a < GetNumberOfRemovedObjects(); a++)
  52. {
  53. if(modelid == RemovedObject[a][Model])
  54. {
  55. if(IsPosInRangeOfPoint3D(pos_x, pos_y, pos_z, 0.5, RemovedObject[a][Location][0], RemovedObject[a][Location][1], RemovedObject[a][Location][2]))
  56. return true;
  57. }
  58. }
  59. return false;
  60. }
  61.  
  62. stock AddSnowObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:d_stream = 200.0)
  63. {
  64. new
  65. object = CreateDynamicObject(modelid, (x + 0.075), (y + 0.15), (z + 0.15), rx, ry, rz, .streamdistance = d_stream);
  66. for(new a = 0; a < 30; a++)
  67. SetDynamicObjectMaterial(object, a, 17944, "lngblok_lae2", "white64bumpy");
  68. return object;
  69. }
  70.  
  71. stock IsPosInArea(Float:pos_x, Float:pos_y, Float:min_x, Float:min_y, Float:max_x, Float:max_y)
  72. {
  73. if(pos_x >= min_x && pos_x <= max_x
  74. && pos_y >= min_y && pos_y <= max_y)
  75. return true;
  76. return false;
  77. }
  78.  
  79. stock CreateSnowInArea(Float:min_x, Float:min_y, Float:max_x, Float:max_y, Float:max_z = 300.0, Float:min_obj_model_size = 30.0)
  80. {
  81. new
  82. count;
  83. for(new a = 0; a < SEARCH_DATA_SIZE; a++)
  84. {
  85. if(SearchData[a][SearchZ] > max_z)
  86. continue;
  87. if(!IsPosInArea(SearchData[a][SearchX], SearchData[a][SearchY], min_x, min_y, max_x, max_y))
  88. continue;
  89. if(GetColSphereRadius(SearchData[a][Search_Model]) < min_obj_model_size)
  90. continue;
  91. if(IsObjectRemoved(SearchData[a][Search_Model], SearchData[a][SearchX], SearchData[a][SearchY], SearchData[a][SearchZ]))
  92. continue;
  93. AddSnowObject(
  94. SearchData[a][Search_Model],
  95. SearchData[a][SearchX],
  96. SearchData[a][SearchY],
  97. SearchData[a][SearchZ],
  98. SearchData[a][SearchRX],
  99. SearchData[a][SearchRY],
  100. SearchData[a][SearchRZ],
  101. (100.0 + GetColSphereRadius(SearchData[a][Search_Model]))
  102. );
  103. count++;
  104. }
  105. printf("Total snow objects: %i", count);
  106. return true;
  107. }
  108.  
  109. stock PrintSnowForArea(Float:min_x, Float:min_y, Float:max_x, Float:max_y, Float:max_z = 300.0, Float:min_obj_model_size = 30.0)
  110. {
  111. new
  112. count;
  113. for(new a = 0; a < SEARCH_DATA_SIZE; a++)
  114. {
  115. if(SearchData[a][SearchZ] > max_z)
  116. continue;
  117. if(!IsPosInArea(SearchData[a][SearchX], SearchData[a][SearchY], min_x, min_y, max_x, max_y))
  118. continue;
  119. if(GetColSphereRadius(SearchData[a][Search_Model]) < min_obj_model_size)
  120. continue;
  121. if(IsObjectRemoved(SearchData[a][Search_Model], SearchData[a][SearchX], SearchData[a][SearchY], SearchData[a][SearchZ]))
  122. continue;
  123. printf("AddSnowObject(%i, %0.3f, %0.3f, %0.3f, %0.3f, %0.3f, %0.3f, %0.1f);",
  124. SearchData[a][Search_Model],
  125. SearchData[a][SearchX],
  126. SearchData[a][SearchY],
  127. SearchData[a][SearchZ],
  128. SearchData[a][SearchRX],
  129. SearchData[a][SearchRY],
  130. SearchData[a][SearchRZ],
  131. (100.0 + GetColSphereRadius(SearchData[a][Search_Model]))
  132. );
  133. count++;
  134. }
  135. printf("Total snow objects: %i", count);
  136. return true;
  137. }
  138.  
  139. stock IsPosInRangeOfPoint2D(Float:pos_x, Float:pos_y, Float:range, Float:range_x, Float:range_y)
  140. {
  141. pos_x -= range_x;
  142. pos_y -= range_y;
  143. return ((pos_x * pos_x) + (pos_y * pos_y)) < (range * range);
  144. }
  145.  
  146. stock CreateSnowInRange(Float:pos_x, Float:pos_y, Float:range, Float:max_z = 300.0, Float:min_obj_model_size = 30.0)
  147. {
  148. new
  149. count;
  150. for(new a = 0; a < SEARCH_DATA_SIZE; a++)
  151. {
  152. if(SearchData[a][SearchZ] > max_z)
  153. continue;
  154. if(!IsPosInRangeOfPoint2D(SearchData[a][SearchX], SearchData[a][SearchY], range, pos_x, pos_y))
  155. continue;
  156. if(GetColSphereRadius(SearchData[a][Search_Model]) < min_obj_model_size)
  157. continue;
  158. if(IsObjectRemoved(SearchData[a][Search_Model], SearchData[a][SearchX], SearchData[a][SearchY], SearchData[a][SearchZ]))
  159. continue;
  160. AddSnowObject(
  161. SearchData[a][Search_Model],
  162. SearchData[a][SearchX],
  163. SearchData[a][SearchY],
  164. SearchData[a][SearchZ],
  165. SearchData[a][SearchRX],
  166. SearchData[a][SearchRY],
  167. SearchData[a][SearchRZ],
  168. (100.0 + GetColSphereRadius(SearchData[a][Search_Model]))
  169. );
  170. count++;
  171. }
  172. printf("Total snow objects: %i", count);
  173. return true;
  174. }
  175.  
  176. stock PrintSnowForRange(Float:pos_x, Float:pos_y, Float:range, Float:max_z = 300.0, Float:min_obj_model_size = 30.0)
  177. {
  178. new
  179. count;
  180. for(new a = 0; a < SEARCH_DATA_SIZE; a++)
  181. {
  182. if(SearchData[a][SearchZ] > max_z)
  183. continue;
  184. if(!IsPosInRangeOfPoint2D(SearchData[a][SearchX], SearchData[a][SearchY], range, pos_x, pos_y))
  185. continue;
  186. if(GetColSphereRadius(SearchData[a][Search_Model]) < min_obj_model_size)
  187. continue;
  188. if(IsObjectRemoved(SearchData[a][Search_Model], SearchData[a][SearchX], SearchData[a][SearchY], SearchData[a][SearchZ]))
  189. continue;
  190. printf("AddSnowObject(%i, %0.3f, %0.3f, %0.3f, %0.3f, %0.3f, %0.3f, %0.1f);",
  191. SearchData[a][Search_Model],
  192. SearchData[a][SearchX],
  193. SearchData[a][SearchY],
  194. SearchData[a][SearchZ],
  195. SearchData[a][SearchRX],
  196. SearchData[a][SearchRY],
  197. SearchData[a][SearchRZ],
  198. (100.0 + GetColSphereRadius(SearchData[a][Search_Model]))
  199. );
  200. count++;
  201. }
  202. printf("Total snow objects: %i", count);
  203. return true;
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement