gtaobjects.pwn 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. #include "tstudio\allobjects.pwn"
  2. #define MIN_GTAOBJECT_LABEL_DIST 5.0
  3. static bool:ObjectsShown;
  4. static Text3D:GTAObjectText[SEARCH_DATA_SIZE];
  5. static bool:GTAObjectDeleted[SEARCH_DATA_SIZE];
  6. static bool:GTAObjectSwapped[SEARCH_DATA_SIZE];
  7. static HighLightObject[MAX_PLAYERS] = -1;
  8. public OnPlayerDisconnect(playerid, reason)
  9. {
  10. if(HighLightObject[playerid] > -1)
  11. {
  12. DestroyDynamicObject(HighLightObject[playerid]);
  13. HighLightObject[playerid] = -1;
  14. }
  15. #if defined GO_OnPlayerDisconnect
  16. GO_OnPlayerDisconnect(playerid, reason);
  17. #endif
  18. return 1;
  19. }
  20. #if defined _ALS_OnPlayerDisconnect
  21. #undef OnPlayerDisconnect
  22. #else
  23. #define _ALS_OnPlayerDisconnect
  24. #endif
  25. #define OnPlayerDisconnect GO_OnPlayerDisconnect
  26. #if defined GO_OnPlayerDisconnect
  27. forward GO_OnPlayerDisconnect(playerid, reason);
  28. #endif
  29. ResetGTADeletedObjects()
  30. {
  31. for(new i = 0; i < SEARCH_DATA_SIZE; i++) GTAObjectDeleted[i] = false;
  32. for(new i = 0; i < SEARCH_DATA_SIZE; i++) GTAObjectSwapped[i] = false;
  33. return 1;
  34. }
  35. YCMD:gtaobjects(playerid, arg[], help)
  36. {
  37. if(help)
  38. {
  39. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  40. SendClientMessage(playerid, STEALTH_GREEN, "Display information on all San Andreas buildings.");
  41. return 1;
  42. }
  43. new Float:colradius;
  44. sscanf(arg, "F(0)", colradius);
  45. if(ObjectsShown && !colradius)
  46. {
  47. for(new i = 0; i < SEARCH_DATA_SIZE; i++) DestroyDynamic3DTextLabel(GTAObjectText[i]);
  48. ObjectsShown = false;
  49. SendClientMessage(playerid, STEALTH_GREEN, "Hiding GTA Objects");
  50. }
  51. else
  52. {
  53. if(ObjectsShown)
  54. for(new i = 0; i < SEARCH_DATA_SIZE; i++) DestroyDynamic3DTextLabel(GTAObjectText[i]);
  55. new index, model;
  56. AO_RESULT = db_query(AO_DB, "SELECT * FROM `buildings`");
  57. do
  58. {
  59. index = db_get_field_int(AO_RESULT, 0);
  60. model = db_get_field_int(AO_RESULT, 1);
  61. //db_get_field(AO_RESULT, 3, name, sizeof name[]);
  62. if(!colradius)
  63. {
  64. colradius = GetColSphereRadius(model);
  65. if(colradius < MIN_GTAOBJECT_LABEL_DIST) colradius = MIN_GTAOBJECT_LABEL_DIST;
  66. colradius *= 2;
  67. }
  68. GTAObjectText[index] = CreateDynamic3DTextLabel(
  69. sprintf("Index: %i\nName: %s\nModelID: %i", index, GetModelName(model), model),
  70. (GTAObjectDeleted[index] ? (GTAObjectSwapped[index] ? 0x5A34FFFF : 0xFF345AFF) : 0xFF69B4FF),
  71. db_get_field_float(AO_RESULT, 4), db_get_field_float(AO_RESULT, 5), db_get_field_float(AO_RESULT, 6) + db_get_field_float(AO_RESULT, 10), colradius * 2.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, colradius
  72. );
  73. }
  74. while(db_next_row(AO_RESULT));
  75. ObjectsShown = true;
  76. SendClientMessage(playerid, STEALTH_GREEN, "Showing GTA Objects");
  77. }
  78. return 1;
  79. }
  80. /*YCMD:gtaobjects(playerid, arg[], help)
  81. {
  82. if(help)
  83. {
  84. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  85. SendClientMessage(playerid, STEALTH_GREEN, "Display information on all San Andreas buildings.");
  86. return 1;
  87. }
  88. if(ObjectsShown)
  89. {
  90. for(new i = 0; i < SEARCH_DATA_SIZE; i++) DestroyDynamic3DTextLabel(GTAObjectText[i]);
  91. ObjectsShown = false;
  92. SendClientMessage(playerid, STEALTH_GREEN, "Hiding GTA Objects");
  93. }
  94. else
  95. {
  96. new text[64], Float:colradius;
  97. for(new i = 0; i < SEARCH_DATA_SIZE; i++)
  98. {
  99. colradius = GetColSphereRadius(SearchData[i][Search_Model]);
  100. if(colradius < MIN_GTAOBJECT_LABEL_DIST) colradius = MIN_GTAOBJECT_LABEL_DIST;
  101. format(text, sizeof(text), "Index: %i\nName: %s\nModelID: %i", i, SearchData[i][Search_Model_Name], SearchData[i][Search_Model]);
  102. GTAObjectText[i] = CreateDynamic3DTextLabel(text, 0xFF69B4FF, SearchData[i][SearchX], SearchData[i][SearchY], SearchData[i][SearchZ]+SearchData[i][SearchOffset], colradius*2.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, colradius*2.0);
  103. }
  104. ObjectsShown = true;
  105. SendClientMessage(playerid, STEALTH_GREEN, "Showing GTA Objects");
  106. }
  107. return 1;
  108. }*/
  109. YCMD:gtashow(playerid, arg[], help)
  110. {
  111. if(help)
  112. {
  113. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  114. SendClientMessage(playerid, STEALTH_GREEN, "\"Highlight\" a San Andreas building.");
  115. return 1;
  116. }
  117. if(isnull(arg)) return SendClientMessage(playerid, STEALTH_YELLOW, "You must provide an index to highlight!");
  118. new line[128], index = strval(arg);
  119. if(index < 0 || index >= SEARCH_DATA_SIZE)
  120. {
  121. format(line, sizeof(line), "Index must be between 0 and %i", SEARCH_DATA_SIZE-1);
  122. return SendClientMessage(playerid, STEALTH_YELLOW, line);
  123. }
  124. if(HighLightObject[playerid] > -1) DestroyDynamicObject(HighLightObject[playerid]);
  125. HighLightObject[playerid] = CreateDynamicObject(db_get_field_int(AO_RESULT, 1),
  126. db_get_field_float(AO_RESULT, 4), db_get_field_float(AO_RESULT, 5), db_get_field_float(AO_RESULT, 6) + 1.0,
  127. db_get_field_float(AO_RESULT, 7), db_get_field_float(AO_RESULT, 8), db_get_field_float(AO_RESULT, 9),
  128. -1, -1, playerid
  129. );
  130. for(new i = 0; i < 16; i++) SetDynamicObjectMaterial(HighLightObject[playerid], i, -1, "none", "none", 0xFFFF0000);
  131. return 1;
  132. }
  133. YCMD:gtahide(playerid, arg[], help)
  134. {
  135. if(help)
  136. {
  137. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  138. SendClientMessage(playerid, STEALTH_GREEN, "Hide a \"highlighted\" San Andreas building.");
  139. return 1;
  140. }
  141. if(HighLightObject[playerid] > -1)
  142. {
  143. DestroyDynamicObject(HighLightObject[playerid]);
  144. HighLightObject[playerid] = -1;
  145. }
  146. return 1;
  147. }
  148. YCMD:remobject(playerid, arg[], help)
  149. {
  150. if(help)
  151. {
  152. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  153. SendClientMessage(playerid, STEALTH_GREEN, "Destroy a San Andreas building. (CAUTION: Permanent!)");
  154. return 1;
  155. }
  156. MapOpenCheck();
  157. new index;
  158. if(sscanf(arg, "i", index)) return SendClientMessage(playerid, STEALTH_YELLOW, "You must provide an index to delete!");
  159. new line[128];
  160. if(index < 0 || index >= SEARCH_DATA_SIZE)
  161. {
  162. format(line, sizeof(line), "Index must be between 0 and %i", SEARCH_DATA_SIZE-1);
  163. return SendClientMessage(playerid, STEALTH_YELLOW, line);
  164. }
  165. if(GTAObjectDeleted[index] == true) return SendClientMessage(playerid, STEALTH_YELLOW, "That object is already deleted!");
  166. GTAObjectDeleted[index] = true;
  167. AO_RESULT = db_query(AO_DB, sprintf("SELECT * FROM `buildings` WHERE `ID` = %i", index));
  168. //db_get_field(AO_RESULT, 3, name, sizeof name[]);
  169. AddRemoveBuilding(db_get_field_int(AO_RESULT, 1), db_get_field_float(AO_RESULT, 4), db_get_field_float(AO_RESULT, 5), db_get_field_float(AO_RESULT, 6), 0.25, true);
  170. if(db_get_field_int(AO_RESULT, 2) != INVALID_OBJECT_ID)
  171. AddRemoveBuilding(db_get_field_int(AO_RESULT, 2), db_get_field_float(AO_RESULT, 4), db_get_field_float(AO_RESULT, 5), db_get_field_float(AO_RESULT, 6), 0.25, true);
  172. UpdateDynamic3DTextLabelText(GTAObjectText[index],
  173. (GTAObjectDeleted[index] ? (GTAObjectSwapped[index] ? 0x5A34FFFF : 0xF51414FF) : 0xFF69B4FF),
  174. sprintf("Index: %i\nName: %s\nModelID: %i", index, GetModelName(db_get_field_int(AO_RESULT, 1)), db_get_field_int(AO_RESULT, 1)));
  175. SendClientMessage(playerid, STEALTH_YELLOW, "Object has been removed!");
  176. return 1;
  177. }
  178. YCMD:rremobject(playerid, arg[], help)
  179. {
  180. if(help)
  181. {
  182. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  183. SendClientMessage(playerid, STEALTH_GREEN, "Destroy all San Andreas buildings of specified model in specific range from your location. (CAUTION: Permanent!)");
  184. return 1;
  185. }
  186. MapOpenCheck();
  187. new model, Float:range;
  188. if(sscanf(arg, "if", model, range))
  189. {
  190. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  191. SendClientMessage(playerid, STEALTH_YELLOW, "Usage: /rremobject <Model> <Range>");
  192. return 1;
  193. }
  194. if(model < 0 || model >= 19999)
  195. {
  196. SendClientMessage(playerid, STEALTH_YELLOW, "Model must be between 0 and 19999");
  197. return 1;
  198. }
  199. new index, name[50], count, Float:x, Float:y, Float:z;
  200. strcat(name, GetModelName(model));
  201. if(IsFlyMode(playerid))
  202. GetFlyModePos(playerid, x, y, z);
  203. else
  204. GetPlayerPos(playerid, x, y, z);
  205. AO_RESULT = db_query(AO_DB, sprintf("SELECT * FROM `buildings` WHERE `Model` = %i", model));
  206. db_begin_transaction(AO_DB);
  207. do
  208. {
  209. index = db_get_field_int(AO_RESULT, 0);
  210. if(GTAObjectDeleted[index] == true) continue;
  211. new Float:dbx = db_get_field_float(AO_RESULT, 4), Float:dby = db_get_field_float(AO_RESULT, 5), Float:dbz = db_get_field_float(AO_RESULT, 6);
  212. new Float:dist = VectorSize(dbx - x, dby - y, dbz - z);
  213. if(dist < range)
  214. {
  215. GTAObjectDeleted[index] = true;
  216. //db_get_field(AO_RESULT, 3, name, sizeof name[]);
  217. AddRemoveBuilding(model, dbx, dby, dbz, 0.25, true);
  218. if(db_get_field_int(AO_RESULT, 2) != INVALID_OBJECT_ID)
  219. AddRemoveBuilding(db_get_field_int(AO_RESULT, 2), dbx, dby, dbz, 0.25, true);
  220. UpdateDynamic3DTextLabelText(GTAObjectText[index],
  221. (GTAObjectDeleted[index] ? (GTAObjectSwapped[index] ? 0x5A34FFFF : 0xF51414FF) : 0xFF69B4FF),
  222. sprintf("Index: %i\nName: %s\nModelID: %i", index, name, model));
  223. count++;
  224. }
  225. }
  226. while(db_next_row(AO_RESULT));
  227. db_end_transaction(AO_DB);
  228. SendClientMessage(playerid, STEALTH_YELLOW, sprintf("%i objects have been removed!", count));
  229. return 1;
  230. }
  231. YCMD:swapbuilding(playerid, arg[], help)
  232. {
  233. if(help)
  234. {
  235. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  236. SendClientMessage(playerid, STEALTH_GREEN, "Destroys a San Andreas building and creates a map object in it's place.");
  237. return 1;
  238. }
  239. MapOpenCheck();
  240. if(isnull(arg)) return SendClientMessage(playerid, STEALTH_YELLOW, "You must provide an index to swap!");
  241. new line[128], index = strval(arg);
  242. if(index < 0 || index >= SEARCH_DATA_SIZE)
  243. {
  244. format(line, sizeof(line), "Index must be between 0 and %i", SEARCH_DATA_SIZE-1);
  245. return SendClientMessage(playerid, STEALTH_YELLOW, line);
  246. }
  247. if(GTAObjectSwapped[index] == true) return SendClientMessage(playerid, STEALTH_YELLOW, "That object is already swapped!");
  248. AO_RESULT = db_query(AO_DB, sprintf("SELECT * FROM `buildings` WHERE `ID` = %i", index));
  249. //db_get_field(AO_RESULT, 3, name, sizeof name[]);
  250. new model = db_get_field_int(AO_RESULT, 1);
  251. if(GTAObjectDeleted[index] == false)
  252. {
  253. AddRemoveBuilding(model, db_get_field_float(AO_RESULT, 4), db_get_field_float(AO_RESULT, 5), db_get_field_float(AO_RESULT, 6), 0.25, true);
  254. if(db_get_field_int(AO_RESULT, 2) != INVALID_OBJECT_ID)
  255. AddRemoveBuilding(db_get_field_int(AO_RESULT, 2), db_get_field_float(AO_RESULT, 4), db_get_field_float(AO_RESULT, 5), db_get_field_float(AO_RESULT, 6), 0.25, true);
  256. GTAObjectDeleted[index] = true;
  257. }
  258. // Swap object
  259. UpdateObject3DText(AddDynamicObject(model, db_get_field_float(AO_RESULT, 4), db_get_field_float(AO_RESULT, 5), db_get_field_float(AO_RESULT, 6), db_get_field_float(AO_RESULT, 7), db_get_field_float(AO_RESULT, 8), db_get_field_float(AO_RESULT, 9)), true);
  260. GTAObjectSwapped[index] = true;
  261. UpdateDynamic3DTextLabelText(GTAObjectText[index],
  262. (GTAObjectDeleted[index] ? (GTAObjectSwapped[index] ? 0x5A34FFFF : 0xFF345AFF) : 0xFF69B4FF),
  263. sprintf("Index: %i\nName: %s\nModelID: %i", index, GetModelName(model), model));
  264. SendClientMessage(playerid, STEALTH_YELLOW, "Object has been swapped!");
  265. return 1;
  266. }
  267. YCMD:clonebuilding(playerid, arg[], help)
  268. {
  269. if(help)
  270. {
  271. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  272. SendClientMessage(playerid, STEALTH_GREEN, "Clones a San Andreas building in it's place.");
  273. return 1;
  274. }
  275. MapOpenCheck();
  276. EditCheck(playerid);
  277. NoEditingMode(playerid);
  278. if(isnull(arg)) return SendClientMessage(playerid, STEALTH_YELLOW, "You must provide an index to clone!");
  279. new line[128], index = strval(arg);
  280. if(index < 0 || index >= SEARCH_DATA_SIZE)
  281. {
  282. format(line, sizeof(line), "Index must be between 0 and %i", SEARCH_DATA_SIZE-1);
  283. return SendClientMessage(playerid, STEALTH_YELLOW, line);
  284. }
  285. AO_RESULT = db_query(AO_DB, sprintf("SELECT * FROM `buildings` WHERE `ID` = %i", index));
  286. SetCurrObject(playerid, AddDynamicObject(db_get_field_int(AO_RESULT, 1), db_get_field_float(AO_RESULT, 4), db_get_field_float(AO_RESULT, 5), db_get_field_float(AO_RESULT, 6), db_get_field_float(AO_RESULT, 7), db_get_field_float(AO_RESULT, 8), db_get_field_float(AO_RESULT, 9)));
  287. UpdateObject3DText(CurrObject[playerid], true);
  288. SaveUndoInfo(CurrObject[playerid], UNDO_TYPE_CREATED);
  289. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  290. SendClientMessage(playerid, STEALTH_GREEN, "Cloned your selected object the new object is now your selection");
  291. return 1;
  292. }