Guest User

Untitled

a guest
May 30th, 2014
684
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define FILTERSCRIPT
  2.  
  3. #include <a_samp>
  4. #include <foreach>
  5. #include <YSI\y_ini>
  6. #include <zcmd>
  7. #include <streamer>
  8. #include <a_mysql>
  9. #include <zones>
  10. #include <FileManager>
  11. #include <sscanf2>
  12.  
  13. // Defines
  14.  
  15. #define MAX_OBJCTS 1337
  16. #define Object_PATH "/Mappings/%s.ini"
  17.  
  18. // Global variables.
  19.  
  20. new bool:Labels;
  21. new bool:gLabels;
  22.  
  23. // Enumerators
  24.  
  25. enum _ObjectData
  26. {
  27. Float:object_Pos[6],
  28. object_Object,
  29. object_ID,
  30. object_VW,
  31. object_Project[48],
  32. object_INT,
  33. Text3D:object_Label,
  34. bool:object_Taken
  35. }
  36. new ObjData[MAX_OBJCTS][_ObjectData];
  37.  
  38. enum _PlayerData
  39. {
  40. player_Project[128]
  41. }
  42. new PlayerData[MAX_PLAYERS][_PlayerData];
  43.  
  44. // Dialogs
  45.  
  46. #define DIALOG_SETTINGS (30000)
  47. #define DIALOG_EDITOBJECT (30001)
  48. #define DIALOG_EDITOBJECT_OBJECT (30002)
  49. #define DIALOG_EDITOBJECT_POSITION (30003)
  50. #define DIALOG_EDITOBJECT_LOCATION (30004)
  51. #define DIALOG_EDITOBJECT_MATERIAL (30005)
  52.  
  53. public OnFilterScriptInit()
  54. {
  55. print("\n--------------------------------------");
  56. print(" Mapping FS by Harry Slice");
  57. print("--------------------------------------\n");
  58. for(new i=0; i<MAX_PLAYERS; i++)
  59. {
  60. format(PlayerData[i][player_Project], 5, "None");
  61. }
  62. Labels = false;
  63. gLabels = false;
  64.  
  65. return 1;
  66. }
  67.  
  68. public OnFilterScriptExit()
  69. {
  70. return 1;
  71. }
  72.  
  73. // ----- [ COLOR DEFINES ] -----
  74. #define GREY 0xAFAFAFAA
  75. #define GREEN 0x33AA33AA
  76. #define RED 0xAA3333AA
  77. #define NEWBIE_COLOR 0x7DAEFFFF
  78. #define DOC 0xFF8282AA
  79. #define DBLUE 0x007BD0FF
  80. #define YELLOW 0xFFFF00AA
  81. #define GRAD1 0xB4B5B7FF
  82. #define GRAD2 0xBFC0C2FF
  83. #define GRAD3 0xCBCCCEFF
  84. #define GRAD4 0xD8D8D8FF
  85. #define GRAD5 0xE3E3E3FF
  86. #define GRAD6 0xF0F0F0FF
  87. #define WHITE 0xFFFFFFAA
  88. #define BLUE 0x0000BBAA
  89. #define FADE1 0xE6E6E6E6
  90. #define FADE2 0xC8C8C8C8
  91. #define FADE3 0xAAAAAAAA
  92. #define FADE4 0x8C8C8C8C
  93. #define FADE5 0x6E6E6E6E
  94. #define LIGHTBLUE 0x33CCFFAA
  95. #define ORANGE 0xFF9900AA
  96. #define RED 0xAA3333AA
  97. #define LIME 0x10F441AA
  98. #define MAGENTA 0xFF00FFFF
  99. #define NAVY 0x000080AA
  100. #define AQUA 0xF0F8FFAA
  101. #define CRIMSON 0xDC143CAA
  102. #define FLBLUE 0x6495EDAA
  103. #define BISQUE 0xFFE4C4AA
  104. #define BLACK 0x000000AA
  105. #define CHARTREUSE 0x7FFF00AA
  106. #define YELLOW2 0xF5DEB3FF
  107. #define BROWN 0XA52A2AAA
  108. #define RADIO 0x8D8DFF00
  109. #define CORAL 0xFF7F50AA
  110. #define GOLD 0xB8860BAA
  111. #define PURPLE 0xC2A2DAFF
  112. #define DEF_COL_RED 0xAE0000FF
  113. #define GREENYELLOW 0xADFF2FAA
  114. #define INDIGO 0x4B00B0AA
  115. #define IVORY 0xFFFF82AA
  116. #define LAWNGREEN 0x7CFC00AA
  117. #define SEAGREEN 0x20B2AAAA
  118. #define LIMEGREEN 0x32CD32AA
  119. #define MIDNIGHTBLUE 0X191970AA
  120. #define MAROON 0x800000AA
  121. #define OLIVE 0x808000AA
  122. #define ORANGERED 0xFF4500AA
  123. #define PINK 0xFFC0CBAA
  124. #define SPRINGGREEN 0x00FF7FAA
  125. #define TOMATO 0xFF6347AA
  126. #define YELLOWGREEN 0x9ACD32AA
  127. #define MEDIUMAQUA 0x83BFBFAA
  128. #define MEDIUMMAGENTA 0x8B008BAA
  129. // ----- [ COLOR DEFINES ] -----
  130.  
  131. // functions
  132.  
  133. Text3D:CreateStreamed3DTextLabel(const string[], color, Float:posx, Float:posy, Float:posz, Float:draw_distance, virtualworld, testlos = 0)
  134. {
  135. return CreateDynamic3DTextLabel(string, color, posx, posy, posz, draw_distance, INVALID_PLAYER_ID, INVALID_PLAYER_ID, testlos, virtualworld, -1, -1, 100.0);
  136. }
  137.  
  138. stock ErrorMessage(playerid, text[])
  139. {
  140. new string[144];
  141.  
  142. format(string, sizeof(string), "{AA3333}Error:{F5F5F5} %s", text);
  143. return SendClientMessage(playerid, WHITE, string);
  144. }
  145.  
  146. stock SyntaxMessage(playerid, msg[])
  147. {
  148. new string[144];
  149.  
  150. format(string, sizeof(string), "{FFFFFF}Usage:{FFFFFF} %s", msg);
  151. return SendClientMessage(playerid, WHITE, string);
  152. }
  153.  
  154. stock PlayerRPName(playerid)
  155. {
  156. new name[MAX_PLAYER_NAME];
  157. strmid(name, str_replace('_', ' ', ReturnPlayerName(playerid)), 0, MAX_PLAYER_NAME);
  158. return name;
  159. }
  160.  
  161. stock AuthorizeMessage(playerid)
  162. {
  163. new string[144];
  164.  
  165. format(string, sizeof(string), "{AA3333}Error:{F5F5F5} You are not authorized to use this command!");
  166. return SendClientMessage(playerid, WHITE, string);
  167. }
  168.  
  169. stock str_replace(sSearch, sReplace, const sSubject[], &iCount = 0)
  170. {
  171. new sReturn[128];
  172. format(sReturn, sizeof(sReturn), sSubject);
  173. for(new i = 0; i < sizeof(sReturn); i++)
  174. {
  175. if(sReturn[i] == sSearch)
  176. {
  177. sReturn[i] = sReplace;
  178. }
  179. }
  180. return sReturn;
  181. }
  182.  
  183. stock ProjectPath(project[])
  184. {
  185. new string[128];
  186. format(string, sizeof(string), "/Mappings/%s", project);
  187. printf("%s", string);
  188. return string;
  189. }
  190.  
  191. stock ObjectPath(mapname[], objectID)
  192. {
  193. new string[128];
  194. format(string, sizeof(string), "/Mappings/%s/%d.ini", mapname, objectID);
  195. return string;
  196. }
  197.  
  198. stock CreateObjectz(playerid, objectID, object)
  199. {
  200. new vw, Float:ObjectPos[4], int, string[144];
  201.  
  202. GetPlayerPos(playerid, ObjectPos[0], ObjectPos[1], ObjectPos[2]);
  203. GetPlayerFacingAngle(playerid, ObjectPos[3]);
  204.  
  205. vw = GetPlayerVirtualWorld(playerid);
  206. int = GetPlayerInterior(playerid);
  207.  
  208. ObjData[objectID][object_Pos][0] = ObjectPos[0] + (1.4 * floatsin(-ObjectPos[3], degrees));
  209. ObjData[objectID][object_Pos][1] = ObjectPos[1] + (1.4 * floatsin(-ObjectPos[3], degrees));
  210. ObjData[objectID][object_Pos][2] = ObjectPos[2];
  211. ObjData[objectID][object_Pos][3] = 0;
  212. ObjData[objectID][object_Pos][4] = 0;
  213. ObjData[objectID][object_Pos][5] = ObjectPos[3];
  214.  
  215. ObjData[objectID][object_VW] = vw;
  216. ObjData[objectID][object_INT] = int;
  217. ObjData[objectID][object_Taken] = true;
  218. ObjData[objectID][object_Object] = object;
  219.  
  220. format(ObjData[objectID][object_Project], 62, "%s", PlayerData[playerid][player_Project]);
  221.  
  222. ObjData[objectID][object_ID] = CreateDynamicObject(ObjData[objectID][object_Object], ObjData[objectID][object_Pos][0], ObjData[objectID][object_Pos][1], ObjData[objectID][object_Pos][2], ObjData[objectID][object_Pos][3], ObjData[objectID][object_Pos][4], ObjData[objectID][object_Pos][5], ObjData[objectID][object_VW], ObjData[objectID][object_INT]);
  223. format(string, sizeof(string), "Object ID: %i", ObjData[objectID][object_ID]);
  224. if(Labels) ObjData[objectID][object_Label] = CreateStreamed3DTextLabel(string, FLBLUE, ObjData[objectID][object_Pos][0], ObjData[objectID][object_Pos][1], ObjData[objectID][object_Pos][2]+0.75, 10.0, ObjData[objectID][object_VW]);
  225. SaveMapping(PlayerData[playerid][player_Project], objectID);
  226. format(string, sizeof(string), "The object %d was correctly created!", objectID);
  227. SendClientMessage(playerid, TOMATO, string);
  228. return 1;
  229. }
  230.  
  231. forward LoadMapping_data(o, name[], value[]);
  232. public LoadMapping_data(o, name[], value[])
  233. {
  234. new string[128];
  235. INI_Int("Object", ObjData[o][object_Object]);
  236. if(ObjData[o][object_Object])
  237. {
  238. INI_Float("PosX", ObjData[o][object_Pos][0]);
  239. INI_Float("PosY", ObjData[o][object_Pos][1]);
  240. INI_Float("PosZ", ObjData[o][object_Pos][2]);
  241. INI_Float("PosRX", ObjData[o][object_Pos][3]);
  242. INI_Float("PosRY", ObjData[o][object_Pos][4]);
  243. INI_Float("PosRZ", ObjData[o][object_Pos][5]);
  244. INI_Int("Virtual", ObjData[o][object_VW]);
  245. INI_Int("Interior", ObjData[o][object_INT]);
  246. INI_String("Project", ObjData[o][object_Project], strlen(ObjData[o][object_Project]));
  247. ObjData[o][object_Taken] = true;
  248. ObjData[o][object_ID] = CreateDynamicObject(ObjData[o][object_Object], ObjData[o][object_Pos][0], ObjData[o][object_Pos][1], ObjData[o][object_Pos][2], ObjData[o][object_Pos][3], ObjData[o][object_Pos][4], ObjData[o][object_Pos][5], ObjData[o][object_VW], ObjData[o][object_INT]);
  249. format(string, sizeof(string), "Object ID: %i", ObjData[o][object_ID]);
  250. if(Labels) ObjData[o][object_Label] = CreateStreamed3DTextLabel(string, FLBLUE, ObjData[o][object_Pos][0], ObjData[o][object_Pos][1], ObjData[o][object_Pos][2]+0.75, 10.0, ObjData[o][object_VW]);
  251. printf("Debug 4");
  252. }
  253. return 1;
  254. }
  255.  
  256. stock SaveMapping(Map[], objectID)
  257. {
  258. new INI:File = INI_Open(ObjectPath(Map, objectID)), string[128];
  259. format(string, sizeof(string), "-= Object %d =-", objectID);
  260. INI_SetTag(File, string);
  261. INI_WriteFloat(File, "PosX", ObjData[objectID][object_Pos][0]);
  262. INI_WriteFloat(File, "PosY", ObjData[objectID][object_Pos][1]);
  263. INI_WriteFloat(File, "PosZ", ObjData[objectID][object_Pos][2]);
  264. INI_WriteFloat(File, "PosRX", ObjData[objectID][object_Pos][3]);
  265. INI_WriteFloat(File, "PosRY", ObjData[objectID][object_Pos][4]);
  266. INI_WriteFloat(File, "PosRZ", ObjData[objectID][object_Pos][5]);
  267.  
  268. INI_WriteString(File,"Project", ObjData[objectID][object_Project]);
  269.  
  270. INI_WriteInt(File, "Object", ObjData[objectID][object_Object]);
  271. INI_WriteInt(File, "Virtual", ObjData[objectID][object_VW]);
  272. INI_WriteInt(File, "Interior", ObjData[objectID][object_INT]);
  273. INI_Close(File);
  274. }
  275.  
  276. stock IsNumeric(const string3[])
  277. {
  278. for (new i = 0, j = strlen(string3); i < j; i++)
  279. {
  280. if (string3[i] > '9' || string3[i] < '0' ) return 0;
  281. }
  282. return 1;
  283. }
  284.  
  285.  
  286. // Commands
  287.  
  288. CMD:settings(playerid, params[])
  289. {
  290. if(GetPVarInt(playerid, "IsMapper"))
  291. {
  292. new string[128];
  293. format(string, sizeof(string), "Project Labels\t\t%s\nAll Objects Labels\t%s",
  294. (Labels) ? ("Enabled") : ("Disabled"),
  295. (gLabels) ? ("Enabled") : ("Disabled")
  296. );
  297. ShowPlayerDialog(playerid, DIALOG_SETTINGS, DIALOG_STYLE_LIST, "Mapping settings", string, "Select", "Cancel");
  298. }
  299. return 1;
  300. }
  301.  
  302. CMD:saveproject(playerid, params[])
  303. {
  304. if(GetPVarInt(playerid, "IsMapper"))
  305. {
  306. new mapname[48], string[127];
  307.  
  308. if (sscanf(params, "s[48]", mapname))
  309. return SyntaxMessage(playerid, "/saveproject [mapname]");
  310.  
  311. for(new o = 1; o < MAX_OBJECTS; o++)
  312. {
  313. if(ObjData[o][object_Taken] && !strcmp(ObjData[o][object_Project], mapname, true, 64))
  314. {
  315. SaveMapping(PlayerData[playerid][player_Project], o);
  316. }
  317. }
  318. format(string, sizeof(string), "You have successfully saves mapping: '{FFFFFF}%s{FF6347}'", mapname);
  319. SendClientMessage(playerid, TOMATO, string);
  320. }
  321. else return AuthorizeMessage(playerid);
  322. return 1;
  323. }
  324.  
  325. CMD:loadproject(playerid, params[])
  326. {
  327. if(GetPVarInt(playerid, "IsMapper"))
  328. {
  329. new str[128], mapname[48], string[128];
  330.  
  331. if (sscanf(params, "s[48]", mapname))
  332. return SyntaxMessage(playerid, "/loadproject [mapname]");
  333.  
  334. for(new o = 1; o < MAX_OBJECTS; o++)
  335. {
  336. if(!ObjData[o][object_Taken])
  337. {
  338. format(str, sizeof(str), ObjectPath("%s", o), mapname);
  339. INI_ParseFile(str, "LoadMapping_%s", .bExtra = true, .extra = o);
  340. }
  341. }
  342. format(string, sizeof(string), "You have successfully loaded mapping: '{FFFFFF}%s{FF6347}'", mapname);
  343. SendClientMessage(playerid, TOMATO, string);
  344. }
  345. else return AuthorizeMessage(playerid);
  346. return 1;
  347. }
  348.  
  349. CMD:changeproject(playerid, params[])
  350. {
  351. if(GetPVarInt(playerid, "IsMapper"))
  352. {
  353. new projectz[52], string[128];
  354. if (sscanf(params, "s[52]", projectz))
  355. return SyntaxMessage(playerid, "/changeproject [project]");
  356.  
  357. format(PlayerData[playerid][player_Project], 52, "%s", projectz);
  358. format(string, sizeof(string), "You have changed your project to '{FFFFFF}%s{FF6347}'", PlayerData[playerid][player_Project]);
  359. SendClientMessage(playerid, TOMATO, string);
  360. }
  361. else return AuthorizeMessage(playerid);
  362. return 1;
  363. }
  364.  
  365. CMD:allowmap(playerid, params[])
  366. {
  367. new targetID, string[129];
  368. if(IsPlayerAdmin(playerid))
  369. {
  370. if (sscanf(params, "u", targetID))
  371. return SyntaxMessage(playerid, "/allowmap [playerid]");
  372.  
  373. SetPVarInt(targetID, "IsMapper", 1);
  374.  
  375. format(string, sizeof(string), "You have been granted the ability to map IG by %s.", PlayerRPName(playerid));
  376. SendClientMessage(targetID, FLBLUE, string);
  377.  
  378. format(string, sizeof(string), "You have granted %s the ability to map IG.", PlayerRPName(targetID));
  379. SendClientMessage(playerid, FLBLUE, string);
  380. }
  381. else return AuthorizeMessage(playerid);
  382. return 1;
  383. }
  384.  
  385. CMD:edittexture(playerid, params[])
  386. {
  387. new index, objectID = -1, model, txdname[25], texture[48], ID, string[128];
  388. if(GetPVarInt(playerid, "IsMapper"))
  389. {
  390. if(!sscanf(params, "iiis[25]s[49]", objectID, index, model, txdname, texture))
  391. {
  392. ID = ObjData[objectID][object_ID];
  393. SetDynamicObjectMaterial(ID, index, model, txdname, texture, 0xFFFFFFFF);
  394. format(string, sizeof(string), "You have successfully changed the texture of object: '{FFFFFF}%s{FF6347}'", objectID);
  395. SendClientMessage(playerid, TOMATO, string);
  396. }
  397. else return SyntaxMessage(playerid, "/edittexture [object ID] [index] [model] [txdname] [texture]");
  398. }
  399. else return AuthorizeMessage(playerid);
  400. return 1;
  401. }
  402.  
  403. CMD:exportproject(playerid, params[])
  404. {
  405. new string2[124], string[124];
  406. format(string2, sizeof(string2), "%s.pwn", PlayerData[playerid][player_Project]);
  407. new File:output = fopen(string, io_write);
  408. if(GetPVarInt(playerid, "IsMapper"))
  409. {
  410. for(new o = 1; o < MAX_OBJCTS; o++)
  411. {
  412. if(ObjData[o][object_Taken] && !strcmp(ObjData[o][object_Project], PlayerData[playerid][player_Project], true, 128))
  413. {
  414. if(output)
  415. {
  416. format(string, sizeof(string), "CreateDynamicObject(%d, %f, %f, %f, %f, %f, %f, %d, %d);\r\n", ObjData[o][object_Object], ObjData[o][object_Pos][0], ObjData[o][object_Pos][1], ObjData[o][object_Pos][2], ObjData[o][object_Pos][3], ObjData[o][object_Pos][4], ObjData[o][object_Pos][5], ObjData[o][object_VW], ObjData[o][object_INT]);
  417. fwrite(output, string);
  418. }
  419. }
  420. }
  421. format(string, sizeof(string), "The mapping was successfully printed into: '{FF6347}%s{FFFFFF}'", string2);
  422. SendClientMessage(playerid, WHITE, string);
  423. fclose(output);
  424. }
  425. return 1;
  426. }
  427.  
  428. CMD:editobject(playerid, params[])
  429. {
  430. new objectID = -1, string[128];
  431. if(GetPVarInt(playerid, "IsMapper"))
  432. {
  433. if(!sscanf(params, "i", objectID))
  434. {
  435. if (!ObjData[objectID][object_Taken]) return ErrorMessage(playerid, "The object ID you are trying to edit is not active!");
  436. format(string, sizeof(string), "Editting Object (ID: %i)", objectID);
  437. SetPVarInt(playerid, "EdittingObject", objectID);
  438. ShowPlayerDialog(playerid, DIALOG_EDITOBJECT, DIALOG_STYLE_LIST, "Editting Object", "Edit Object\nEdit Position\nEdit Location\nEdit Material", "Select", "Cancel");
  439. }
  440. else return SyntaxMessage(playerid, "/editobject [object ID]");
  441. }
  442. else return AuthorizeMessage(playerid);
  443. return 1;
  444. }
  445.  
  446. CMD:createobject(playerid, params[])
  447. {
  448. new object = -1;
  449. if(GetPVarInt(playerid, "IsMapper"))
  450. {
  451. if(!strcmp(PlayerData[playerid][player_Project], "None", true, 128))
  452. {
  453. return ErrorMessage(playerid, "You haven't chose a project!");
  454. }
  455. printf("%s | None", PlayerData[playerid][player_Project]);
  456. if(!sscanf(params, "i", object))
  457. {
  458. if (object == -1) return ErrorMessage(playerid, "Invalid object ID!");
  459. new objectID = -1;
  460. for(new o = 1; o < MAX_OBJCTS; o++)
  461. {
  462. if(!ObjData[o][object_Taken])
  463. {
  464. objectID = o;
  465. break;
  466. }
  467. }
  468. if(objectID == -1) return ErrorMessage(playerid, "The maximum amount of object's have been made!");
  469. CreateObjectz(playerid, objectID, object);
  470. }
  471. else return SyntaxMessage(playerid, "/createobject [object ID]");
  472. }
  473. else return AuthorizeMessage(playerid);
  474. return 1;
  475. }
  476.  
  477. // calbacks!
  478.  
  479. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  480. {
  481. new string[129], objectID = GetPVarInt(playerid, "EdittingObject");
  482. format(string, sizeof(string), "Editting Object (ID: %i)", objectID);
  483.  
  484. if (dialogid == DIALOG_EDITOBJECT_OBJECT)
  485. {
  486. if (!response)
  487. {
  488. ShowPlayerDialog(playerid, DIALOG_EDITOBJECT, DIALOG_STYLE_LIST, "Editting Object", "Edit Object\nEdit Position\nEdit Location\nEdit Material", "Select", "Cancel");
  489. }
  490. if (response)
  491. {
  492. if(!strval(inputtext)) return ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_OBJECT , DIALOG_STYLE_INPUT, string, "Write the Object ID below:", "Continue", "Cancel");
  493. if(!IsNumeric(inputtext)) return ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_OBJECT , DIALOG_STYLE_INPUT, string, "Write the Object ID below:", "Continue", "Cancel");
  494.  
  495. ObjData[objectID][object_Object] = strval(inputtext);
  496. DestroyDynamicObject(ObjData[objectID][object_ID]);
  497. ObjData[objectID][object_ID] = CreateDynamicObject(ObjData[objectID][object_Object], ObjData[objectID][object_Pos][0], ObjData[objectID][object_Pos][1], ObjData[objectID][object_Pos][2], ObjData[objectID][object_Pos][3], ObjData[objectID][object_Pos][4], ObjData[objectID][object_Pos][5], ObjData[objectID][object_VW], ObjData[objectID][object_INT]);
  498. SaveMapping(PlayerData[playerid][player_Project], objectID);
  499. }
  500. }
  501. if (dialogid == DIALOG_EDITOBJECT_LOCATION)
  502. {
  503. if (!response)
  504. {
  505. ShowPlayerDialog(playerid, DIALOG_EDITOBJECT, DIALOG_STYLE_LIST, "Editting Object", "Edit Object\nEdit Position\nEdit Location\nEdit Material", "Select", "Cancel");
  506. }
  507. if (response)
  508. {
  509. new vw, Float:ObjectPos[4], int;
  510.  
  511. GetPlayerPos(playerid, ObjectPos[0], ObjectPos[1], ObjectPos[2]);
  512. GetPlayerFacingAngle(playerid, ObjectPos[3]);
  513.  
  514. vw = GetPlayerVirtualWorld(playerid);
  515. int = GetPlayerInterior(playerid);
  516.  
  517. ObjData[objectID][object_Pos][0] = ObjectPos[0] + (1.4 * floatsin(-ObjectPos[3], degrees));
  518. ObjData[objectID][object_Pos][1] = ObjectPos[1] + (1.4 * floatsin(-ObjectPos[3], degrees));
  519. ObjData[objectID][object_Pos][2] = ObjectPos[2];
  520.  
  521. ObjData[objectID][object_VW] = vw;
  522. ObjData[objectID][object_INT] = int;
  523.  
  524. if (ObjData[objectID][object_ID]) DestroyDynamicObject(ObjData[objectID][object_ID]);
  525. ObjData[objectID][object_ID] = CreateDynamicObject(ObjData[objectID][object_Object], ObjData[objectID][object_Pos][0], ObjData[objectID][object_Pos][1], ObjData[objectID][object_Pos][2], ObjData[objectID][object_Pos][3], ObjData[objectID][object_Pos][4], ObjData[objectID][object_Pos][5], ObjData[objectID][object_VW], ObjData[objectID][object_INT]);
  526. SaveMapping(PlayerData[playerid][player_Project], objectID);
  527. }
  528. }
  529. if (dialogid == DIALOG_EDITOBJECT_POSITION)
  530. {
  531. if (!response)
  532. {
  533. ShowPlayerDialog(playerid, DIALOG_EDITOBJECT, DIALOG_STYLE_LIST, "Editting Object", "Edit Object\nEdit Position\nEdit Location\nEdit Material", "Select", "Cancel");
  534. }
  535. if (response)
  536. {
  537. EditDynamicObject(playerid, ObjData[objectID][object_ID]);
  538.  
  539. format(string, sizeof(string), "You are now editing Object (ID: %d) position.", objectID);
  540. SendClientMessage(playerid, WHITE, string);
  541. }
  542. }
  543. if (dialogid == DIALOG_EDITOBJECT)
  544. {
  545. if (response)
  546. {
  547. switch (listitem)
  548. {
  549. case 0: ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_OBJECT , DIALOG_STYLE_INPUT, string, "Write the Object ID below:", "Continue", "Cancel");
  550. case 1: ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_POSITION, DIALOG_STYLE_MSGBOX, string, "Click continue to open the editor", "Continue", "Cancel");
  551. case 2: ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_LOCATION, DIALOG_STYLE_MSGBOX, string, "Click continue to move the object to your location", "Continue", "Cancel");
  552. case 3: ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_MATERIAL, DIALOG_STYLE_INPUT, string, "Write down the new Material ID", "Continue", "Cancel");
  553. }
  554. }
  555. }
  556. if(dialogid == DIALOG_SETTINGS)
  557. {
  558. if (response)
  559. {
  560. switch (listitem)
  561. {
  562. case 0:
  563. {
  564. Labels = !Labels;
  565. switch (Labels)
  566. {
  567. case 0:
  568. {
  569. for(new o = 1; o < MAX_OBJCTS; o++)
  570. {
  571. if(ObjData[o][object_Taken])
  572. {
  573. DestroyDynamic3DTextLabel(ObjData[o][object_Label]);
  574. }
  575. }
  576. SendClientMessage(playerid, WHITE, "You have {FF0000}disabled{FFFFFF} Object Labels. You will no longer see the labels on the objects.");
  577. }
  578. case 1:
  579. {
  580. if (gLabels) { ErrorMessage(playerid, "You can't have both tags turned on at the same time!"), gLabels = false, cmd_settings(playerid, "\1"); return 1; }
  581. for(new o = 1; o < MAX_OBJCTS; o++)
  582. {
  583. if(ObjData[o][object_Taken])
  584. {
  585. format(string, sizeof(string), "Object ID: %i", o);
  586. ObjData[o][object_Label] = CreateStreamed3DTextLabel(string, FLBLUE, ObjData[o][object_Pos][0], ObjData[o][object_Pos][1], ObjData[o][object_Pos][2]+0.75, 10.0, ObjData[o][object_VW]);
  587. }
  588. }
  589. SendClientMessage(playerid, WHITE, "You have {00FF00}enabled{FFFFFF} Object Labels. You will now see labels on the objects.");
  590. }
  591. }
  592. }
  593. case 1:
  594. {
  595. gLabels = !gLabels;
  596. switch (gLabels)
  597. {
  598. case 0:
  599. {
  600. for(new o = 1; o < MAX_OBJCTS; o++)
  601. {
  602. if(ObjData[o][object_Taken])
  603. {
  604. DestroyDynamic3DTextLabel(ObjData[o][object_Label]);
  605. }
  606. }
  607. SendClientMessage(playerid, WHITE, "You have {FF0000}disabled{FFFFFF} Object Labels. You will no longer see the labels on the objects.");
  608. }
  609. case 1:
  610. {
  611. if (Labels) { ErrorMessage(playerid, "You can't have both tags turned on at the same time!"), Labels = false, cmd_settings(playerid, "\1"); return 1; }
  612. for(new o = 1; o < MAX_OBJCTS; o++)
  613. {
  614. if(ObjData[o][object_Taken])
  615. {
  616. format(string, sizeof(string), "Object ID: %i", ObjData[o][object_ID]);
  617. ObjData[o][object_Label] = CreateStreamed3DTextLabel(string, FLBLUE, ObjData[o][object_Pos][0], ObjData[o][object_Pos][1], ObjData[o][object_Pos][2]+0.75, 10.0, ObjData[o][object_VW]);
  618. }
  619. }
  620. SendClientMessage(playerid, WHITE, "You have {00FF00}enabled{FFFFFF} Object Labels. You will now see labels on the objects.");
  621. }
  622. }
  623. }
  624. }
  625. cmd_settings(playerid, "\1");
  626. }
  627. }
  628. return 0;
  629. }
  630.  
  631. public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  632. {
  633. new string[48], Float:a, objectIDz = GetPVarInt(playerid, "EdittingObject");
  634. GetPlayerFacingAngle(playerid, a);
  635. if (!IsValidDynamicObject(objectid)) return 0;
  636. MoveDynamicObject(objectid, x, y, z, 10.0, rx, ry, rz);
  637.  
  638. if (response == EDIT_RESPONSE_FINAL)
  639. {
  640. SetDynamicObjectPos(objectid, x, y, z);
  641. SetDynamicObjectRot(objectid, rx, ry, rz);
  642. if (objectIDz != 0)
  643. {
  644. ObjData[objectIDz][object_Pos][0] = x;
  645. ObjData[objectIDz][object_Pos][1] = y;
  646. ObjData[objectIDz][object_Pos][2] = z;
  647. ObjData[objectIDz][object_Pos][3] = rx;
  648. ObjData[objectIDz][object_Pos][4] = ry;
  649. ObjData[objectIDz][object_Pos][5] = rz;
  650.  
  651. SaveMapping(PlayerData[playerid][player_Project], objectIDz);
  652. format(string, sizeof(string), "You have edited Object %d's closed position.", objectIDz);
  653. SendClientMessage(playerid, WHITE, string);
  654.  
  655. if (ObjData[objectIDz][object_ID]) DestroyDynamicObject(ObjData[objectIDz][object_ID]);
  656. ObjData[objectIDz][object_ID] = CreateDynamicObject(ObjData[objectIDz][object_Object], ObjData[objectIDz][object_Pos][0], ObjData[objectIDz][object_Pos][1], ObjData[objectIDz][object_Pos][2], ObjData[objectIDz][object_Pos][3], ObjData[objectIDz][object_Pos][4], ObjData[objectIDz][object_Pos][5], ObjData[objectIDz][object_VW], ObjData[objectIDz][object_INT]);
  657. }
  658. }
  659. if (response == EDIT_RESPONSE_CANCEL)
  660. {
  661. if (objectIDz != 0)
  662. {
  663. SetTimerEx("SetObjectOldPos", 300, false, "dffffff", ObjData[objectIDz][object_ID], ObjData[objectIDz][object_Pos][0], ObjData[objectIDz][object_Pos][1], ObjData[objectIDz][object_Pos][2], ObjData[objectIDz][object_Pos][3], ObjData[objectIDz][object_Pos][4], ObjData[objectIDz][object_Pos][5]);
  664. }
  665. }
  666. return 1;
  667. }
  668.  
  669. forward SetObjectOldPos(objectid, Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ);
  670. public SetObjectOldPos(objectid, Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ)
  671. {
  672. SetDynamicObjectPos(objectid, oldX, oldY, oldZ);
  673. SetDynamicObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
  674. return 1;
  675. }
Advertisement
Add Comment
Please, Sign In to add comment