Guest User

Secret

a guest
Jul 5th, 2012
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 46.45 KB | None | 0 0
  1. #define FILTERSCRIPT
  2. #include <a_samp>
  3. #undef MAX_PLAYERS
  4. #define MAX_PLAYERS 101
  5. #include <foreach>
  6. #include <YSI\y_ini>
  7. #include <sscanf2>
  8. #include <zcmd>
  9.  
  10. #define WHITE 0xFFFFFFAA
  11. #define RED 0xFF0000FF
  12. #define LIGHTGREEN 0x24FF0AB9
  13. #define YELLOW 0xFFFF00FF
  14.  
  15. #define MAX_GATES 100
  16.  
  17. #define GATE_FILE "NV/Gates/%d.ini" //EDIT
  18.  
  19. #define DEFAULT_GATE_DRAW_DIST 50.0
  20.  
  21. #define GATE_TYPE_1 971
  22. #define GATE_TYPE_2 975
  23. #define GATE_TYPE_3 980
  24.  
  25. #define GATE_PANEL 0
  26. #define GATE_KEYS_DIALOG 1
  27. #define GATE_NAME_DIALOG 2
  28. #define GATE_NAME_DIALOG2 3
  29. #define GATE_KEY_1_DIALOG 4
  30. #define GATE_KEY_2_DIALOG 5
  31. #define GATE_KEY_3_DIALOG 6
  32. #define GATE_KEY_4_DIALOG 7
  33. #define GATE_KEY_5_DIALOG 8
  34. #define GATE_KEY_6_DIALOG 9
  35. #define GATE_KEY_7_DIALOG 10
  36. #define GATE_KEY_8_DIALOG 11
  37. #define GATE_KEY_9_DIALOG 12
  38. #define GATE_KEY_10_DIALOG 13
  39. #define GATE_CMDS_DIALOG 14
  40.  
  41. forward LoadGate_file(gateid,name[],value[]);
  42.  
  43. new gateobject[MAX_GATES];
  44. new Text3D:gatelabel[MAX_GATES];
  45.  
  46. new GetPlayerLastGateID[MAX_PLAYERS char];
  47.  
  48. enum NV_gate_system //EDIT
  49. {
  50. gOwner[24],
  51. gName[50],
  52. gModelID,
  53. Float:gDrawDist,
  54. Float:gClosed_X,
  55. Float:gClosed_Y,
  56. Float:gClosed_Z,
  57. Float:gClosed_RotX,
  58. Float:gClosed_RotY,
  59. Float:gClosed_RotZ,
  60. Float:gOpen_X,
  61. Float:gOpen_Y,
  62. Float:gOpen_Z,
  63. Float:gOpen_RotX,
  64. Float:gOpen_RotY,
  65. Float:gOpen_RotZ,
  66. gKeyOwner1[24],
  67. gKeyOwner2[24],
  68. gKeyOwner3[24],
  69. gKeyOwner4[24],
  70. gKeyOwner5[24],
  71. gKeyOwner6[24],
  72. gKeyOwner7[24],
  73. gKeyOwner8[24],
  74. gKeyOwner9[24],
  75. gKeyOwner10[24]
  76. }
  77. new GateInfo[MAX_GATES][NV_gate_system]; //EDIT
  78.  
  79. stock GetName(playerid)
  80. {
  81. new pName[24];
  82. GetPlayerName(playerid, (pName), sizeof(pName));
  83. return pName;
  84. }
  85.  
  86. stock GetID(username[])
  87. {
  88. foreach(Player, i)
  89. {
  90. if(strcmp(GetName(i), username, false, strlen(username)) == 0)
  91. {
  92. return i;
  93. }
  94. }
  95. return INVALID_PLAYER_ID;
  96. }
  97.  
  98. stock GetGateFile(gateid)
  99. {
  100. new file[20];
  101. format(file, sizeof(file), GATE_FILE, gateid);
  102. return file;
  103. }
  104.  
  105. stock GetFreeGateSlot()
  106. {
  107. for(new g = 0; g < MAX_GATES; g++)
  108. {
  109. if(!fexist(GetGateFile(g)))
  110. {
  111. return g;
  112. }
  113. }
  114. return -1;
  115. }
  116.  
  117. stock SaveGateStats(gateid)
  118. {
  119. if(fexist(GetGateFile(gateid)))
  120. {
  121. print("SaveGateStats > start");
  122. new INI:file = INI_Open(GetGateFile(gateid));
  123. INI_SetTag(file, "Gate_Data");
  124. INI_WriteString(file, "gOwner", GateInfo[gateid][gOwner]);
  125. INI_WriteString(file, "gName", GateInfo[gateid][gName]);
  126. INI_WriteInt(file, "gModelID", GateInfo[gateid][gModelID]);
  127. INI_WriteFloat(file, "gDrawDist", GateInfo[gateid][gDrawDist]);
  128. INI_WriteFloat(file, "gClosed_X", GateInfo[gateid][gClosed_X]);
  129. INI_WriteFloat(file, "gClosed_Y", GateInfo[gateid][gClosed_Y]);
  130. INI_WriteFloat(file, "gClosed_Z", GateInfo[gateid][gClosed_Z]);
  131. INI_WriteFloat(file, "gClosed_RotX", GateInfo[gateid][gClosed_RotX]);
  132. INI_WriteFloat(file, "gClosed_RotY", GateInfo[gateid][gClosed_RotY]);
  133. INI_WriteFloat(file, "gClosed_RotZ", GateInfo[gateid][gClosed_RotZ]);
  134. INI_WriteFloat(file, "gOpen_X", GateInfo[gateid][gOpen_X]);
  135. INI_WriteFloat(file, "gOpen_Y", GateInfo[gateid][gOpen_Y]);
  136. INI_WriteFloat(file, "gOpen_Z", GateInfo[gateid][gOpen_Z]);
  137. INI_WriteFloat(file, "gOpen_RotX", GateInfo[gateid][gOpen_RotX]);
  138. INI_WriteFloat(file, "gOpen_RotY", GateInfo[gateid][gOpen_RotY]);
  139. INI_WriteFloat(file, "gOpen_RotZ", GateInfo[gateid][gOpen_RotZ]);
  140. INI_WriteString(file, "gKeyOwner1", GateInfo[gateid][gKeyOwner1]);
  141. INI_WriteString(file, "gKeyOwner2", GateInfo[gateid][gKeyOwner2]);
  142. INI_WriteString(file, "gKeyOwner3", GateInfo[gateid][gKeyOwner3]);
  143. INI_WriteString(file, "gKeyOwner4", GateInfo[gateid][gKeyOwner4]);
  144. INI_WriteString(file, "gKeyOwner5", GateInfo[gateid][gKeyOwner5]);
  145. INI_WriteString(file, "gKeyOwner6", GateInfo[gateid][gKeyOwner6]);
  146. INI_WriteString(file, "gKeyOwner7", GateInfo[gateid][gKeyOwner7]);
  147. INI_WriteString(file, "gKeyOwner8", GateInfo[gateid][gKeyOwner8]);
  148. INI_WriteString(file, "gKeyOwner9", GateInfo[gateid][gKeyOwner9]);
  149. INI_WriteString(file, "gKeyOwner10", GateInfo[gateid][gKeyOwner10]);
  150. INI_Close(file);
  151. print("SaveGateStats > finish");
  152. }
  153. return 1;
  154. }
  155.  
  156. stock IsPlayerNearExistingGate(playerid)
  157. {
  158. for(new g = 0; g < MAX_GATES; g++)
  159. {
  160. if(fexist(GetGateFile(g)))
  161. {
  162. if(IsPlayerInRangeOfPoint(playerid, 8.0, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]) || IsPlayerInRangeOfPoint(playerid, 8.0, GateInfo[g][gOpen_X], GateInfo[g][gOpen_Y], GateInfo[g][gOpen_Z]))
  163. {
  164. return true;
  165. }
  166. }
  167. }
  168. return false;
  169. }
  170.  
  171. stock IsPlayerInRangeOfGate(playerid)
  172. {
  173. for(new g = 0; g < MAX_GATES; g++)
  174. {
  175. if(fexist(GetGateFile(g)))
  176. {
  177. if(IsPlayerInRangeOfPoint(playerid, 5.0, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]) || IsPlayerInRangeOfPoint(playerid, 5.0, GateInfo[g][gOpen_X], GateInfo[g][gOpen_Y], GateInfo[g][gOpen_Z]))
  178. {
  179. return true;
  180. }
  181. }
  182. }
  183. return false;
  184. }
  185.  
  186. stock DeleteNearestGate(playerid)
  187. {
  188. for(new g = 0; g < MAX_GATES; g++)
  189. {
  190. if(fexist(GetGateFile(g)))
  191. {
  192. if(IsPlayerInRangeOfPoint(playerid, 5.0, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]) || IsPlayerInRangeOfPoint(playerid, 5.0, GateInfo[g][gOpen_X], GateInfo[g][gOpen_Y], GateInfo[g][gOpen_Z]))
  193. {
  194. DestroyObject(gateobject[g]);
  195. Delete3DTextLabel(gatelabel[g]);
  196. fremove(GetGateFile(g));
  197. new string[128];
  198. format(string, sizeof(string), "Gate id %d owned by %s has been successfully deleted.", g, GateInfo[g][gOwner]);
  199. SendClientMessage(playerid, WHITE, string);
  200. break;
  201. }
  202. }
  203. }
  204. return 1;
  205. }
  206.  
  207. stock GetNearestGateID(playerid)
  208. {
  209. for(new g = 0; g < MAX_GATES; g++)
  210. {
  211. if(fexist(GetGateFile(g)))
  212. {
  213. if(IsPlayerInRangeOfPoint(playerid, 5.0, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]) || IsPlayerInRangeOfPoint(playerid, 5.0, GateInfo[g][gOpen_X], GateInfo[g][gOpen_Y], GateInfo[g][gOpen_Z]))
  214. {
  215. return g;
  216. }
  217. }
  218. }
  219. return -1;
  220. }
  221.  
  222. stock IsPlayerGateOwner(playerid)
  223. {
  224. for(new g = 0; g < MAX_GATES; g++)
  225. {
  226. if(fexist(GetGateFile(g)))
  227. {
  228. if(IsPlayerInRangeOfPoint(playerid, 5.0, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]) || IsPlayerInRangeOfPoint(playerid, 5.0, GateInfo[g][gOpen_X], GateInfo[g][gOpen_Y], GateInfo[g][gOpen_Z]))
  229. {
  230. if(!strcmp(GetName(playerid), GateInfo[g][gOwner], false))
  231. {
  232. return true;
  233. }
  234. }
  235. }
  236. }
  237. return false;
  238. }
  239.  
  240. stock IsPlayerGateKeyHolder(playerid)
  241. {
  242. for(new g = 0; g < MAX_GATES; g++)
  243. {
  244. if(fexist(GetGateFile(g)))
  245. {
  246. if(IsPlayerInRangeOfPoint(playerid, 5.0, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]) || IsPlayerInRangeOfPoint(playerid, 5.0, GateInfo[g][gOpen_X], GateInfo[g][gOpen_Y], GateInfo[g][gOpen_Z]))
  247. {
  248. if(!strcmp(GetName(playerid), GateInfo[g][gKeyOwner1], false)
  249. || !strcmp(GetName(playerid), GateInfo[g][gKeyOwner2], false)
  250. || !strcmp(GetName(playerid), GateInfo[g][gKeyOwner3], false)
  251. || !strcmp(GetName(playerid), GateInfo[g][gKeyOwner4], false)
  252. || !strcmp(GetName(playerid), GateInfo[g][gKeyOwner5], false)
  253. || !strcmp(GetName(playerid), GateInfo[g][gKeyOwner6], false)
  254. || !strcmp(GetName(playerid), GateInfo[g][gKeyOwner7], false)
  255. || !strcmp(GetName(playerid), GateInfo[g][gKeyOwner8], false)
  256. || !strcmp(GetName(playerid), GateInfo[g][gKeyOwner9], false)
  257. || !strcmp(GetName(playerid), GateInfo[g][gKeyOwner10], false))
  258. {
  259. return true;
  260. }
  261. }
  262. }
  263. }
  264. return false;
  265. }
  266.  
  267. public OnFilterScriptInit()
  268. {
  269. print("OnFilterScriptInit > start");
  270. for(new g = 0; g < MAX_GATES; g++)
  271. {
  272. if(fexist(GetGateFile(g)))
  273. {
  274. print("OnFilterScriptInit> if(fexist()) >");
  275. INI_ParseFile(GetGateFile(g), "LoadGate_%s", .bExtra = true, .extra = g);
  276. print("OnFilterScriptInit> if(fexist()) > LoadGate");
  277.  
  278. gateobject[g] = CreateObject(GateInfo[g][gModelID], GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], GateInfo[g][gClosed_RotX], GateInfo[g][gClosed_RotY], GateInfo[g][gClosed_RotZ], GateInfo[g][gDrawDist]);
  279. gatelabel[g] = Create3DTextLabel(GateInfo[g][gName], LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  280. print("OnFilterScriptInit> if(fexist()) > LoadGate > End");
  281. }
  282. }
  283. print("OnFilterScriptInit > finish");
  284. return 1;
  285. }
  286.  
  287. public OnFilterScriptExit()
  288. {
  289. for(new g = 0; g < MAX_GATES; g++)
  290. {
  291. if(fexist(GetGateFile(g)))
  292. {
  293. DestroyObject(gateobject[g]);
  294. Delete3DTextLabel(gatelabel[g]);
  295. SaveGateStats(g);
  296. }
  297. }
  298. return 1;
  299. }
  300.  
  301. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  302. {
  303. if(dialogid == GATE_PANEL)
  304. {
  305. if(response)
  306. {
  307. switch(listitem)
  308. {
  309. case 0:
  310. {
  311. MoveObject(gateobject[GetPlayerLastGateID{playerid}], GateInfo[GetPlayerLastGateID{playerid}][gOpen_X], GateInfo[GetPlayerLastGateID{playerid}][gOpen_Y], GateInfo[GetPlayerLastGateID{playerid}][gOpen_Z], 2.0);
  312. return 1;
  313. }
  314. case 1:
  315. {
  316. MoveObject(gateobject[GetPlayerLastGateID{playerid}], GateInfo[GetPlayerLastGateID{playerid}][gClosed_X], GateInfo[GetPlayerLastGateID{playerid}][gClosed_Y], GateInfo[GetPlayerLastGateID{playerid}][gClosed_Z], 2.0);
  317. return 1;
  318. }
  319. case 2:
  320. {
  321. new string[200];
  322. format(string, sizeof(string), "{FFFFFF}Slot 1: %s\nSlot 2: %s\nSlot 3: %s\nSlot 4: %s\nSlot 5: %s\nSlot 6: %s\nSlot 7: %s\nSlot 8: %s\nSlot 9: %s\nSlot 10: %s",
  323. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner1], GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner2], GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner3], GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner4], GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner5],
  324. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner6], GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner7], GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner8], GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner9], GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner10]);
  325. ShowPlayerDialog(playerid, GATE_KEYS_DIALOG, DIALOG_STYLE_LIST, "{FFFFFF}Gate Panel - Gate Keys", string, "Select", "Cancel");
  326. return 1;
  327. }
  328. case 3:
  329. {
  330. ShowPlayerDialog(playerid, GATE_NAME_DIALOG, DIALOG_STYLE_INPUT, "{FFFFFF}Gate Panel - Gate Name", "{FFFFFF}Please enter your new gate name below:", "Submit", "Cancel");
  331. return 1;
  332. }
  333. }
  334. }
  335. return 1;
  336. }
  337. if(dialogid == GATE_KEYS_DIALOG)
  338. {
  339. if(response)
  340. switch(listitem)
  341. {
  342. case 0:
  343. {
  344. if(strcmp("Empty", GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner1], false) == 0)
  345. {
  346. ShowPlayerDialog(playerid, GATE_KEY_1_DIALOG, DIALOG_STYLE_INPUT, "{FFFFFF}Gate Panel - Gate Name", "{FFFFFF}Please enter the name of the player you want to give keys to:", "Set", "Cancel");
  347. return 1;
  348. }
  349. else
  350. {
  351. new slot[24];
  352. format(slot, sizeof(slot), "Empty");
  353. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner1] = slot;
  354. SaveGateStats(GetPlayerLastGateID{playerid});
  355. SendClientMessage(playerid, YELLOW, "You have successfully emptied gate key slot (1)");
  356. return 1;
  357. }
  358. }
  359. case 1:
  360. {
  361. if(strcmp("Empty", GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner2], false) == 0)
  362. {
  363. ShowPlayerDialog(playerid, GATE_KEY_2_DIALOG, DIALOG_STYLE_INPUT, "{FFFFFF}Gate Panel - Gate Name", "{FFFFFF}Please enter the name of the player you want to give keys to:", "Set", "Cancel");
  364. return 1;
  365. }
  366. else
  367. {
  368. new slot[24];
  369. format(slot, sizeof(slot), "Empty");
  370. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner2] = slot;
  371. SaveGateStats(GetPlayerLastGateID{playerid});
  372. SendClientMessage(playerid, YELLOW, "You have successfully emptied gate key slot (2)");
  373. return 1;
  374. }
  375. }
  376. case 2:
  377. {
  378. if(strcmp("Empty", GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner3], false) == 0)
  379. {
  380. ShowPlayerDialog(playerid, GATE_KEY_3_DIALOG, DIALOG_STYLE_INPUT, "{FFFFFF}Gate Panel - Gate Name", "{FFFFFF}Please enter the name of the player you want to give keys to:", "Set", "Cancel");
  381. return 1;
  382. }
  383. else
  384. {
  385. new slot[24];
  386. format(slot, sizeof(slot), "Empty");
  387. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner3] = slot;
  388. SaveGateStats(GetPlayerLastGateID{playerid});
  389. SendClientMessage(playerid, YELLOW, "You have successfully emptied gate key slot (3)");
  390. return 1;
  391. }
  392. }
  393. case 3:
  394. {
  395. if(strcmp("Empty", GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner4], false) == 0)
  396. {
  397. ShowPlayerDialog(playerid, GATE_KEY_4_DIALOG, DIALOG_STYLE_INPUT, "{FFFFFF}Gate Panel - Gate Name", "{FFFFFF}Please enter the name of the player you want to give keys to:", "Set", "Cancel");
  398. return 1;
  399. }
  400. else
  401. {
  402. new slot[24];
  403. format(slot, sizeof(slot), "Empty");
  404. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner4] = slot;
  405. SaveGateStats(GetPlayerLastGateID{playerid});
  406. SendClientMessage(playerid, YELLOW, "You have successfully emptied gate key slot (4)");
  407. return 1;
  408. }
  409. }
  410. case 4:
  411. {
  412. if(strcmp("Empty", GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner5], false) == 0)
  413. {
  414. ShowPlayerDialog(playerid, GATE_KEY_5_DIALOG, DIALOG_STYLE_INPUT, "{FFFFFF}Gate Panel - Gate Name", "{FFFFFF}Please enter the name of the player you want to give keys to:", "Set", "Cancel");
  415. return 1;
  416. }
  417. else
  418. {
  419. new slot[24];
  420. format(slot, sizeof(slot), "Empty");
  421. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner5] = slot;
  422. SaveGateStats(GetPlayerLastGateID{playerid});
  423. SendClientMessage(playerid, YELLOW, "You have successfully emptied gate key slot (5)");
  424. return 1;
  425. }
  426. }
  427. case 5:
  428. {
  429. if(strcmp("Empty", GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner6], false) == 0)
  430. {
  431. ShowPlayerDialog(playerid, GATE_KEY_6_DIALOG, DIALOG_STYLE_INPUT, "{FFFFFF}Gate Panel - Gate Name", "{FFFFFF}Please enter the name of the player you want to give keys to:", "Set", "Cancel");
  432. return 1;
  433. }
  434. else
  435. {
  436. new slot[24];
  437. format(slot, sizeof(slot), "Empty");
  438. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner6] = slot;
  439. SaveGateStats(GetPlayerLastGateID{playerid});
  440. SendClientMessage(playerid, YELLOW, "You have successfully emptied gate key slot (6)");
  441. return 1;
  442. }
  443. }
  444. case 6:
  445. {
  446. if(strcmp("Empty", GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner7], false) == 0)
  447. {
  448. ShowPlayerDialog(playerid, GATE_KEY_7_DIALOG, DIALOG_STYLE_INPUT, "{FFFFFF}Gate Panel - Gate Name", "{FFFFFF}Please enter the name of the player you want to give keys to:", "Set", "Cancel");
  449. return 1;
  450. }
  451. else
  452. {
  453. new slot[24];
  454. format(slot, sizeof(slot), "Empty");
  455. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner7] = slot;
  456. SaveGateStats(GetPlayerLastGateID{playerid});
  457. SendClientMessage(playerid, YELLOW, "You have successfully emptied gate key slot (7)");
  458. return 1;
  459. }
  460. }
  461. case 7:
  462. {
  463. if(strcmp("Empty", GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner8], false) == 0)
  464. {
  465. ShowPlayerDialog(playerid, GATE_KEY_8_DIALOG, DIALOG_STYLE_INPUT, "{FFFFFF}Gate Panel - Gate Name", "{FFFFFF}Please enter the name of the player you want to give keys to:", "Set", "Cancel");
  466. return 1;
  467. }
  468. else
  469. {
  470. new slot[24];
  471. format(slot, sizeof(slot), "Empty");
  472. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner8] = slot;
  473. SaveGateStats(GetPlayerLastGateID{playerid});
  474. SendClientMessage(playerid, YELLOW, "You have successfully emptied gate key slot (8)");
  475. return 1;
  476. }
  477. }
  478. case 8:
  479. {
  480. if(strcmp("Empty", GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner9], false) == 0)
  481. {
  482. ShowPlayerDialog(playerid, GATE_KEY_9_DIALOG, DIALOG_STYLE_INPUT, "{FFFFFF}Gate Panel - Gate Name", "{FFFFFF}Please enter the name of the player you want to give keys to:", "Set", "Cancel");
  483. return 1;
  484. }
  485. else
  486. {
  487. new slot[24];
  488. format(slot, sizeof(slot), "Empty");
  489. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner9] = slot;
  490. SaveGateStats(GetPlayerLastGateID{playerid});
  491. SendClientMessage(playerid, YELLOW, "You have successfully emptied gate key slot (9)");
  492. return 1;
  493. }
  494. }
  495. case 9:
  496. {
  497. if(strcmp("Empty", GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner10], false) == 0)
  498. {
  499. ShowPlayerDialog(playerid, GATE_KEY_10_DIALOG, DIALOG_STYLE_INPUT, "{FFFFFF}Gate Panel - Gate Name", "{FFFFFF}Please enter the name of the player you want to give keys to:", "Set", "Cancel");
  500. return 1;
  501. }
  502. else
  503. {
  504. new slot[24];
  505. format(slot, sizeof(slot), "Empty");
  506. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner10] = slot;
  507. SaveGateStats(GetPlayerLastGateID{playerid});
  508. SendClientMessage(playerid, YELLOW, "You have successfully emptied gate key slot (10)");
  509. return 1;
  510. }
  511. }
  512. }
  513. return 1;
  514. }
  515. if(dialogid == GATE_KEY_1_DIALOG)
  516. {
  517. if(response)
  518. if(!strlen(inputtext)) return SendClientMessage(playerid, RED, "You failed to input a name.");
  519. if(strlen(inputtext) < 3 || strlen(inputtext) > 50) return SendClientMessage(playerid, RED, "The player name can only contain 3-50 charactors.");
  520. //new ufile[40];
  521. //format(ufile, sizeof(ufile), USER_FILE, inputtext);
  522. //if(!fexist(ufile)) return SendClientMessage(playerid, RED, "That username does not exist in the NV user database.");
  523. new update[24], string[128];
  524. format(update, sizeof(update), "%s", inputtext);
  525. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner1] = update;
  526. format(string, sizeof(string), "You have given %s a set of gate keys, re-click the slot to remove the keys.", inputtext);
  527. SendClientMessage(playerid, YELLOW, string);
  528. if(IsPlayerConnected(GetID(inputtext)))
  529. {
  530. format(string, sizeof(string), "%s [%d] has just given you a set of keys to their personal gate.", GetName(playerid), playerid);
  531. SendClientMessage(GetID(inputtext), LIGHTGREEN, string);
  532. }
  533. SaveGateStats(GetPlayerLastGateID{playerid});
  534. return 1;
  535. }
  536. if(dialogid == GATE_KEY_2_DIALOG)
  537. {
  538. if(response)
  539. if(!strlen(inputtext)) return SendClientMessage(playerid, RED, "You failed to input a name.");
  540. if(strlen(inputtext) < 3 || strlen(inputtext) > 50) return SendClientMessage(playerid, RED, "The player name can only contain 3-50 charactors.");
  541. //new ufile[40];
  542. //format(ufile, sizeof(ufile), USER_FILE, inputtext);
  543. //if(!fexist(ufile)) return SendClientMessage(playerid, RED, "That username does not exist in the NV user database.");
  544. new update[24], string[128];
  545. format(update, sizeof(update), "%s", inputtext);
  546. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner2] = update;
  547. format(string, sizeof(string), "You have given %s a set of gate keys, re-click the slot to remove the keys.", inputtext);
  548. SendClientMessage(playerid, YELLOW, string);
  549. if(IsPlayerConnected(GetID(inputtext)))
  550. {
  551. format(string, sizeof(string), "%s [%d] has just given you a set of keys to their personal gate.", GetName(playerid), playerid);
  552. SendClientMessage(GetID(inputtext), LIGHTGREEN, string);
  553. }
  554. SaveGateStats(GetPlayerLastGateID{playerid});
  555. return 1;
  556. }
  557. if(dialogid == GATE_KEY_3_DIALOG)
  558. {
  559. if(response)
  560. if(!strlen(inputtext)) return SendClientMessage(playerid, RED, "You failed to input a name.");
  561. if(strlen(inputtext) < 3 || strlen(inputtext) > 50) return SendClientMessage(playerid, RED, "The player name can only contain 3-50 charactors.");
  562. //new ufile[40];
  563. //format(ufile, sizeof(ufile), USER_FILE, inputtext);
  564. //if(!fexist(ufile)) return SendClientMessage(playerid, RED, "That username does not exist in the NV user database.");
  565. new update[24], string[128];
  566. format(update, sizeof(update), "%s", inputtext);
  567. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner3] = update;
  568. format(string, sizeof(string), "You have given %s a set of gate keys, re-click the slot to remove the keys.", inputtext);
  569. SendClientMessage(playerid, YELLOW, string);
  570. if(IsPlayerConnected(GetID(inputtext)))
  571. {
  572. format(string, sizeof(string), "%s [%d] has just given you a set of keys to their personal gate.", GetName(playerid), playerid);
  573. SendClientMessage(GetID(inputtext), LIGHTGREEN, string);
  574. }
  575. SaveGateStats(GetPlayerLastGateID{playerid});
  576. return 1;
  577. }
  578. if(dialogid == GATE_KEY_4_DIALOG)
  579. {
  580. if(response)
  581. if(!strlen(inputtext)) return SendClientMessage(playerid, RED, "You failed to input a name.");
  582. if(strlen(inputtext) < 3 || strlen(inputtext) > 50) return SendClientMessage(playerid, RED, "The player name can only contain 3-50 charactors.");
  583. //new ufile[40];
  584. //format(ufile, sizeof(ufile), USER_FILE, inputtext);
  585. //if(!fexist(ufile)) return SendClientMessage(playerid, RED, "That username does not exist in the NV user database.");
  586. new update[24], string[128];
  587. format(update, sizeof(update), "%s", inputtext);
  588. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner4] = update;
  589. format(string, sizeof(string), "You have given %s a set of gate keys, re-click the slot to remove the keys.", inputtext);
  590. SendClientMessage(playerid, YELLOW, string);
  591. if(IsPlayerConnected(GetID(inputtext)))
  592. {
  593. format(string, sizeof(string), "%s [%d] has just given you a set of keys to their personal gate.", GetName(playerid), playerid);
  594. SendClientMessage(GetID(inputtext), LIGHTGREEN, string);
  595. }
  596. SaveGateStats(GetPlayerLastGateID{playerid});
  597. return 1;
  598. }
  599. if(dialogid == GATE_KEY_5_DIALOG)
  600. {
  601. if(response)
  602. if(!strlen(inputtext)) return SendClientMessage(playerid, RED, "You failed to input a name.");
  603. if(strlen(inputtext) < 3 || strlen(inputtext) > 50) return SendClientMessage(playerid, RED, "The player name can only contain 3-50 charactors.");
  604. //new ufile[40];
  605. //format(ufile, sizeof(ufile), USER_FILE, inputtext);
  606. //if(!fexist(ufile)) return SendClientMessage(playerid, RED, "That username does not exist in the NV user database.");
  607. new update[24], string[128];
  608. format(update, sizeof(update), "%s", inputtext);
  609. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner5] = update;
  610. format(string, sizeof(string), "You have given %s a set of gate keys, re-click the slot to remove the keys.", inputtext);
  611. SendClientMessage(playerid, YELLOW, string);
  612. if(IsPlayerConnected(GetID(inputtext)))
  613. {
  614. format(string, sizeof(string), "%s [%d] has just given you a set of keys to their personal gate.", GetName(playerid), playerid);
  615. SendClientMessage(GetID(inputtext), LIGHTGREEN, string);
  616. }
  617. SaveGateStats(GetPlayerLastGateID{playerid});
  618. return 1;
  619. }
  620. if(dialogid == GATE_KEY_6_DIALOG)
  621. {
  622. if(response)
  623. if(!strlen(inputtext)) return SendClientMessage(playerid, RED, "You failed to input a name.");
  624. if(strlen(inputtext) < 3 || strlen(inputtext) > 50) return SendClientMessage(playerid, RED, "The player name can only contain 3-50 charactors.");
  625. //new ufile[40];
  626. //format(ufile, sizeof(ufile), USER_FILE, inputtext);
  627. //if(!fexist(ufile)) return SendClientMessage(playerid, RED, "That username does not exist in the NV user database.");
  628. new update[24], string[128];
  629. format(update, sizeof(update), "%s", inputtext);
  630. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner6] = update;
  631. format(string, sizeof(string), "You have given %s a set of gate keys, re-click the slot to remove the keys.", inputtext);
  632. SendClientMessage(playerid, YELLOW, string);
  633. if(IsPlayerConnected(GetID(inputtext)))
  634. {
  635. format(string, sizeof(string), "%s [%d] has just given you a set of keys to their personal gate.", GetName(playerid), playerid);
  636. SendClientMessage(GetID(inputtext), LIGHTGREEN, string);
  637. }
  638. SaveGateStats(GetPlayerLastGateID{playerid});
  639. return 1;
  640. }
  641. if(dialogid == GATE_KEY_7_DIALOG)
  642. {
  643. if(response)
  644. if(!strlen(inputtext)) return SendClientMessage(playerid, RED, "You failed to input a name.");
  645. if(strlen(inputtext) < 3 || strlen(inputtext) > 50) return SendClientMessage(playerid, RED, "The player name can only contain 3-50 charactors.");
  646. //new ufile[40];
  647. //format(ufile, sizeof(ufile), USER_FILE, inputtext);
  648. //if(!fexist(ufile)) return SendClientMessage(playerid, RED, "That username does not exist in the NV user database.");
  649. new update[24], string[128];
  650. format(update, sizeof(update), "%s", inputtext);
  651. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner7] = update;
  652. format(string, sizeof(string), "You have given %s a set of gate keys, re-click the slot to remove the keys.", inputtext);
  653. SendClientMessage(playerid, YELLOW, string);
  654. if(IsPlayerConnected(GetID(inputtext)))
  655. {
  656. format(string, sizeof(string), "%s [%d] has just given you a set of keys to their personal gate.", GetName(playerid), playerid);
  657. SendClientMessage(GetID(inputtext), LIGHTGREEN, string);
  658. }
  659. SaveGateStats(GetPlayerLastGateID{playerid});
  660. return 1;
  661. }
  662. if(dialogid == GATE_KEY_8_DIALOG)
  663. {
  664. if(response)
  665. if(!strlen(inputtext)) return SendClientMessage(playerid, RED, "You failed to input a name.");
  666. if(strlen(inputtext) < 3 || strlen(inputtext) > 50) return SendClientMessage(playerid, RED, "The player name can only contain 3-50 charactors.");
  667. //new ufile[40];
  668. //format(ufile, sizeof(ufile), USER_FILE, inputtext);
  669. //if(!fexist(ufile)) return SendClientMessage(playerid, RED, "That username does not exist in the NV user database.");
  670. new update[24], string[128];
  671. format(update, sizeof(update), "%s", inputtext);
  672. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner8] = update;
  673. format(string, sizeof(string), "You have given %s a set of gate keys, re-click the slot to remove the keys.", inputtext);
  674. SendClientMessage(playerid, YELLOW, string);
  675. if(IsPlayerConnected(GetID(inputtext)))
  676. {
  677. format(string, sizeof(string), "%s [%d] has just given you a set of keys to their personal gate.", GetName(playerid), playerid);
  678. SendClientMessage(GetID(inputtext), LIGHTGREEN, string);
  679. }
  680. SaveGateStats(GetPlayerLastGateID{playerid});
  681. return 1;
  682. }
  683. if(dialogid == GATE_KEY_9_DIALOG)
  684. {
  685. if(response)
  686. if(!strlen(inputtext)) return SendClientMessage(playerid, RED, "You failed to input a name.");
  687. if(strlen(inputtext) < 3 || strlen(inputtext) > 50) return SendClientMessage(playerid, RED, "The player name can only contain 3-50 charactors.");
  688. //new ufile[40];
  689. //format(ufile, sizeof(ufile), USER_FILE, inputtext);
  690. //if(!fexist(ufile)) return SendClientMessage(playerid, RED, "That username does not exist in the NV user database.");
  691. new update[24], string[128];
  692. format(update, sizeof(update), "%s", inputtext);
  693. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner9] = update;
  694. format(string, sizeof(string), "You have given %s a set of gate keys, re-click the slot to remove the keys.", inputtext);
  695. SendClientMessage(playerid, YELLOW, string);
  696. if(IsPlayerConnected(GetID(inputtext)))
  697. {
  698. format(string, sizeof(string), "%s [%d] has just given you a set of keys to their personal gate.", GetName(playerid), playerid);
  699. SendClientMessage(GetID(inputtext), LIGHTGREEN, string);
  700. }
  701. SaveGateStats(GetPlayerLastGateID{playerid});
  702. return 1;
  703. }
  704. if(dialogid == GATE_KEY_10_DIALOG)
  705. {
  706. if(response)
  707. if(!strlen(inputtext)) return SendClientMessage(playerid, RED, "You failed to input a name.");
  708. if(strlen(inputtext) < 3 || strlen(inputtext) > 50) return SendClientMessage(playerid, RED, "The player name can only contain 3-50 charactors.");
  709. //new ufile[40];
  710. //format(ufile, sizeof(ufile), USER_FILE, inputtext);
  711. //if(!fexist(ufile)) return SendClientMessage(playerid, RED, "That username does not exist in the NV user database.");
  712. new update[24], string[128];
  713. format(update, sizeof(update), "%s", inputtext);
  714. GateInfo[GetPlayerLastGateID{playerid}][gKeyOwner10] = update;
  715. format(string, sizeof(string), "You have given %s a set of gate keys, re-click the slot to remove the keys.", inputtext);
  716. SendClientMessage(playerid, YELLOW, string);
  717. if(IsPlayerConnected(GetID(inputtext)))
  718. {
  719. format(string, sizeof(string), "%s [%d] has just given you a set of keys to their personal gate.", GetName(playerid), playerid);
  720. SendClientMessage(GetID(inputtext), LIGHTGREEN, string);
  721. }
  722. SaveGateStats(GetPlayerLastGateID{playerid});
  723. return 1;
  724. }
  725. if(dialogid == GATE_NAME_DIALOG)
  726. {
  727. if(response)
  728. if(strfind(inputtext, "%", true) != -1 || strfind(inputtext, "~", true) != -1) return SendClientMessage(playerid, RED, "Your gate name can't contain some symbols.");
  729. if(!strlen(inputtext)) return SendClientMessage(playerid, RED, "You must input a new name to change your current gate name.");
  730. if(strlen(inputtext) < 1 || strlen(inputtext) > 50) return SendClientMessage(playerid, RED, "Your gate name can only contain 1-50 characters.");
  731. new text[50], string[128];
  732. format(text, sizeof(text), "%s", inputtext);
  733. GateInfo[GetPlayerLastGateID{playerid}][gName] = text;
  734. format(string, sizeof(string), "You have successfully changed your gate name to %s", text);
  735. SendClientMessage(playerid, WHITE, string);
  736. Update3DTextLabelText(gatelabel[GetPlayerLastGateID{playerid}], LIGHTGREEN, text);
  737. SaveGateStats(GetPlayerLastGateID{playerid});
  738. return 1;
  739. }
  740. return 0;
  741. }
  742.  
  743. public LoadGate_file(gateid,name[],value[])
  744. {
  745. print("LoadGate_data > start");
  746. INI_String("gOwner", GateInfo[gateid][gOwner], 24);
  747. INI_String("gName", GateInfo[gateid][gName], 50);
  748. INI_Int("gModelID", GateInfo[gateid][gModelID]);
  749. INI_Float("gDrawDist", GateInfo[gateid][gDrawDist]);
  750. INI_Float("gClosed_X", GateInfo[gateid][gClosed_X]);
  751. INI_Float("gClosed_Y", GateInfo[gateid][gClosed_Y]);
  752. INI_Float("gClosed_Z", GateInfo[gateid][gClosed_Z]);
  753. INI_Float("gClosed_RotX", GateInfo[gateid][gClosed_RotX]);
  754. INI_Float("gClosed_RotY", GateInfo[gateid][gClosed_RotY]);
  755. INI_Float("gClosed_RotZ", GateInfo[gateid][gClosed_RotZ]);
  756. INI_Float("gOpen_X", GateInfo[gateid][gClosed_X]);
  757. INI_Float("gOpen_Y", GateInfo[gateid][gClosed_Y]);
  758. INI_Float("gOpen_Z", GateInfo[gateid][gClosed_Z]);
  759. INI_Float("gOpen_RotX", GateInfo[gateid][gClosed_RotX]);
  760. INI_Float("gOpen_RotY", GateInfo[gateid][gClosed_RotY]);
  761. INI_Float("gOpen_RotZ", GateInfo[gateid][gClosed_RotZ]);
  762. INI_String("gKeyOwner1", GateInfo[gateid][gKeyOwner1], 24);
  763. INI_String("gKeyOwner2", GateInfo[gateid][gKeyOwner2], 24);
  764. INI_String("gKeyOwner3", GateInfo[gateid][gKeyOwner3], 24);
  765. INI_String("gKeyOwner4", GateInfo[gateid][gKeyOwner4], 24);
  766. INI_String("gKeyOwner5", GateInfo[gateid][gKeyOwner5], 24);
  767. INI_String("gKeyOwner6", GateInfo[gateid][gKeyOwner6], 24);
  768. INI_String("gKeyOwner7", GateInfo[gateid][gKeyOwner7], 24);
  769. INI_String("gKeyOwner8", GateInfo[gateid][gKeyOwner8], 24);
  770. INI_String("gKeyOwner9", GateInfo[gateid][gKeyOwner9], 24);
  771. INI_String("gKeyOwner10", GateInfo[gateid][gKeyOwner10], 24);
  772. print("LoadGate_data > finish");
  773. return 1;
  774. }
  775.  
  776. CMD:creategate(playerid, params[])
  777. {
  778. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, WHITE, "SERVER: Invalid command.");
  779. if(IsPlayerNearExistingGate(playerid) == 1) return SendClientMessage(playerid, RED, "Your too close to an existing gate.");
  780. new owner, type, g = GetFreeGateSlot(), Float:x, Float:y, Float:z, slot[24], name[50];
  781. if(sscanf(params, "ud", owner, type)) return SendClientMessage(playerid, RED, "[USAGE]: /creategate [owner] [type]") && SendClientMessage(playerid, WHITE, "Types: 1-3");
  782. if(!IsPlayerConnected(owner)) return SendClientMessage(playerid, RED, "Player not found.");
  783. if(g == -1)
  784. {
  785. new string[128];
  786. format(string, sizeof(string), "The server has reached a maximum of %d gates.", MAX_GATES);
  787. SendClientMessage(playerid, RED, string);
  788. return true;
  789. }
  790. if(type == 1)
  791. {
  792. GetPlayerPos(playerid, x, y, z);
  793. format(slot, sizeof(slot), "Empty");
  794. format(name, sizeof(name), "%s's personal gate", GetName(owner));
  795.  
  796. GateInfo[g][gOwner] = GetName(owner);
  797. GateInfo[g][gName] = name;
  798. GateInfo[g][gModelID] = GATE_TYPE_1;
  799. GateInfo[g][gDrawDist] = DEFAULT_GATE_DRAW_DIST;
  800. GateInfo[g][gClosed_X] = x + 2.0;
  801. GateInfo[g][gClosed_Y] = y + 2.0;
  802. GateInfo[g][gClosed_Z] = z;
  803. GateInfo[g][gClosed_RotX] = 0.0;
  804. GateInfo[g][gClosed_RotY] = 0.0;
  805. GateInfo[g][gClosed_RotZ] = 0.0;
  806. GateInfo[g][gOpen_X] = x + 2.0;
  807. GateInfo[g][gOpen_Y] = y + 2.0;
  808. GateInfo[g][gOpen_Z] = z - 7.0;
  809. GateInfo[g][gOpen_RotX] = 0.0;
  810. GateInfo[g][gOpen_RotY] = 0.0;
  811. GateInfo[g][gOpen_RotZ] = 0.0;
  812. GateInfo[g][gKeyOwner1] = slot;
  813. GateInfo[g][gKeyOwner2] = slot;
  814. GateInfo[g][gKeyOwner3] = slot;
  815. GateInfo[g][gKeyOwner4] = slot;
  816. GateInfo[g][gKeyOwner5] = slot;
  817. GateInfo[g][gKeyOwner6] = slot;
  818. GateInfo[g][gKeyOwner7] = slot;
  819. GateInfo[g][gKeyOwner8] = slot;
  820. GateInfo[g][gKeyOwner9] = slot;
  821. GateInfo[g][gKeyOwner10] = slot;
  822.  
  823. gateobject[g] = CreateObject(GateInfo[g][gModelID], GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], GateInfo[g][gClosed_RotX], GateInfo[g][gClosed_RotY], GateInfo[g][gClosed_RotZ], GateInfo[g][gDrawDist]);
  824. gatelabel[g] = Create3DTextLabel(name, LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  825.  
  826. new File:fcreate = fopen(GetGateFile(g), io_write);
  827. fclose(fcreate);
  828.  
  829. SaveGateStats(g);
  830.  
  831. SendClientMessage(playerid, WHITE, "Gate type (1) created.");
  832. return true;
  833. }
  834. else if(type == 2)
  835. {
  836. GetPlayerPos(playerid, x, y, z);
  837. format(slot, sizeof(slot), "Empty");
  838. format(name, sizeof(name), "%s's personal gate", GetName(owner));
  839.  
  840. GateInfo[g][gOwner] = GetName(owner);
  841. GateInfo[g][gName] = name;
  842. GateInfo[g][gModelID] = GATE_TYPE_2;
  843. GateInfo[g][gDrawDist] = DEFAULT_GATE_DRAW_DIST;
  844. GateInfo[g][gClosed_X] = x + 2.0;
  845. GateInfo[g][gClosed_Y] = y + 2.0;
  846. GateInfo[g][gClosed_Z] = z;
  847. GateInfo[g][gClosed_RotX] = 0.0;
  848. GateInfo[g][gClosed_RotY] = 0.0;
  849. GateInfo[g][gClosed_RotZ] = 0.0;
  850. GateInfo[g][gOpen_X] = x + 2.0;
  851. GateInfo[g][gOpen_Y] = y + 2.0;
  852. GateInfo[g][gOpen_Z] = z - 7.0;
  853. GateInfo[g][gOpen_RotX] = 0.0;
  854. GateInfo[g][gOpen_RotY] = 0.0;
  855. GateInfo[g][gOpen_RotZ] = 0.0;
  856. GateInfo[g][gKeyOwner1] = slot;
  857. GateInfo[g][gKeyOwner2] = slot;
  858. GateInfo[g][gKeyOwner3] = slot;
  859. GateInfo[g][gKeyOwner4] = slot;
  860. GateInfo[g][gKeyOwner5] = slot;
  861. GateInfo[g][gKeyOwner6] = slot;
  862. GateInfo[g][gKeyOwner7] = slot;
  863. GateInfo[g][gKeyOwner8] = slot;
  864. GateInfo[g][gKeyOwner9] = slot;
  865. GateInfo[g][gKeyOwner10] = slot;
  866.  
  867. gateobject[g] = CreateObject(GateInfo[g][gModelID], GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], GateInfo[g][gClosed_RotX], GateInfo[g][gClosed_RotY], GateInfo[g][gClosed_RotZ], GateInfo[g][gDrawDist]);
  868. gatelabel[g] = Create3DTextLabel(name, LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  869.  
  870. new File:fcreate = fopen(GetGateFile(g), io_write);
  871. fclose(fcreate);
  872.  
  873. SaveGateStats(g);
  874.  
  875. SendClientMessage(playerid, WHITE, "Gate type (2) created.");
  876. return true;
  877. }
  878. else if(type == 3)
  879. {
  880. GetPlayerPos(playerid, x, y, z);
  881. format(slot, sizeof(slot), "Empty");
  882. format(name, sizeof(name), "%s's personal gate", GetName(owner));
  883.  
  884. GateInfo[g][gOwner] = GetName(owner);
  885. GateInfo[g][gName] = name;
  886. GateInfo[g][gModelID] = GATE_TYPE_3;
  887. GateInfo[g][gDrawDist] = DEFAULT_GATE_DRAW_DIST;
  888. GateInfo[g][gClosed_X] = x + 2.0;
  889. GateInfo[g][gClosed_Y] = y + 2.0;
  890. GateInfo[g][gClosed_Z] = z;
  891. GateInfo[g][gClosed_RotX] = 0.0;
  892. GateInfo[g][gClosed_RotY] = 0.0;
  893. GateInfo[g][gClosed_RotZ] = 0.0;
  894. GateInfo[g][gOpen_X] = x + 2.0;
  895. GateInfo[g][gOpen_Y] = y + 2.0;
  896. GateInfo[g][gOpen_Z] = z - 7.0;
  897. GateInfo[g][gOpen_RotX] = 0.0;
  898. GateInfo[g][gOpen_RotY] = 0.0;
  899. GateInfo[g][gOpen_RotZ] = 0.0;
  900. GateInfo[g][gKeyOwner1] = slot;
  901. GateInfo[g][gKeyOwner2] = slot;
  902. GateInfo[g][gKeyOwner3] = slot;
  903. GateInfo[g][gKeyOwner4] = slot;
  904. GateInfo[g][gKeyOwner5] = slot;
  905. GateInfo[g][gKeyOwner6] = slot;
  906. GateInfo[g][gKeyOwner7] = slot;
  907. GateInfo[g][gKeyOwner8] = slot;
  908. GateInfo[g][gKeyOwner9] = slot;
  909. GateInfo[g][gKeyOwner10] = slot;
  910.  
  911. gateobject[g] = CreateObject(GateInfo[g][gModelID], GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], GateInfo[g][gClosed_RotX], GateInfo[g][gClosed_RotY], GateInfo[g][gClosed_RotZ], GateInfo[g][gDrawDist]);
  912. gatelabel[g] = Create3DTextLabel(name, LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  913.  
  914. new File:fcreate = fopen(GetGateFile(g), io_write);
  915. fclose(fcreate);
  916.  
  917. SaveGateStats(g);
  918.  
  919. SendClientMessage(playerid, WHITE, "Gate type (3) created.");
  920. return true;
  921. }
  922. else
  923. {
  924. SendClientMessage(playerid, RED, "Invalid type id.") && SendClientMessage(playerid, WHITE, "Types: 1-3");
  925. }
  926. return true;
  927. }
  928.  
  929.  
  930. CMD:deletegate(playerid, params[])
  931. {
  932. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, WHITE, "SERVER: Invalid command.");
  933. if(IsPlayerInRangeOfGate(playerid) == 0) return SendClientMessage(playerid, RED, "You need to be within range of a personal gate to delete it.");
  934. DeleteNearestGate(playerid);
  935. return true;
  936. }
  937.  
  938. CMD:movegate(playerid, params[])
  939. {
  940. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, WHITE, "SERVER: Invalid command.");
  941. if(IsPlayerInRangeOfGate(playerid) == 0) return SendClientMessage(playerid, RED, "You need to be within range of a personal gate to move it.");
  942. new param[10], Float:coord, g = GetNearestGateID(playerid);
  943. if(sscanf(params, "s[10]f", param, coord)) return SendClientMessage(playerid, RED, "[USAGE]: /movegate [up/down/north/south/east/west] [coord]");
  944. if(strfind(param, "up", false) != -1)
  945. {
  946. GateInfo[g][gClosed_Z] = GateInfo[g][gClosed_Z] + coord;
  947. GateInfo[g][gOpen_Z] = GateInfo[g][gOpen_Z] + coord;
  948. Delete3DTextLabel(gatelabel[g]);
  949. SetObjectPos(gateobject[g], GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]);
  950. gatelabel[g] = Create3DTextLabel(GateInfo[g][gName], LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  951. SaveGateStats(g);
  952. SendClientMessage(playerid, WHITE, "Gate moved UP");
  953. return true;
  954. }
  955. else if(strfind(param, "down", false) != -1)
  956. {
  957. GateInfo[g][gClosed_Z] = GateInfo[g][gClosed_Z] - coord;
  958. GateInfo[g][gOpen_Z] = GateInfo[g][gOpen_Z] - coord;
  959. Delete3DTextLabel(gatelabel[g]);
  960. SetObjectPos(gateobject[g], GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]);
  961. gatelabel[g] = Create3DTextLabel(GateInfo[g][gName], LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  962. SaveGateStats(g);
  963. SendClientMessage(playerid, WHITE, "Gate moved DOWN");
  964. return true;
  965. }
  966. else if(strfind(param, "north", false) != -1)
  967. {
  968. GateInfo[g][gClosed_Y] = GateInfo[g][gClosed_Y] + coord;
  969. GateInfo[g][gOpen_Y] = GateInfo[g][gOpen_Y] + coord;
  970. Delete3DTextLabel(gatelabel[g]);
  971. SetObjectPos(gateobject[g], GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]);
  972. gatelabel[g] = Create3DTextLabel(GateInfo[g][gName], LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  973. SaveGateStats(g);
  974. SendClientMessage(playerid, WHITE, "Gate moved NORTH");
  975. return true;
  976. }
  977. else if(strfind(param, "south", false) != -1)
  978. {
  979. GateInfo[g][gClosed_Y] = GateInfo[g][gClosed_Y] - coord;
  980. GateInfo[g][gOpen_Y] = GateInfo[g][gOpen_Y] - coord;
  981. Delete3DTextLabel(gatelabel[g]);
  982. SetObjectPos(gateobject[g], GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]);
  983. gatelabel[g] = Create3DTextLabel(GateInfo[g][gName], LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  984. SaveGateStats(g);
  985. SendClientMessage(playerid, WHITE, "Gate moved SOUTH");
  986. return true;
  987. }
  988. else if(strfind(param, "east", false) != -1)
  989. {
  990. GateInfo[g][gClosed_X] = GateInfo[g][gClosed_X] + coord;
  991. GateInfo[g][gOpen_X] = GateInfo[g][gOpen_X] + coord;
  992. Delete3DTextLabel(gatelabel[g]);
  993. SetObjectPos(gateobject[g], GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]);
  994. gatelabel[g] = Create3DTextLabel(GateInfo[g][gName], LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  995. SaveGateStats(g);
  996. SendClientMessage(playerid, WHITE, "Gate moved EAST");
  997. return true;
  998. }
  999. else if(strfind(param, "west", false) != -1)
  1000. {
  1001. GateInfo[g][gClosed_X] = GateInfo[g][gClosed_X] - coord;
  1002. GateInfo[g][gOpen_X] = GateInfo[g][gOpen_X] - coord;
  1003. Delete3DTextLabel(gatelabel[g]);
  1004. SetObjectPos(gateobject[g], GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z]);
  1005. gatelabel[g] = Create3DTextLabel(GateInfo[g][gName], LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  1006. SaveGateStats(g);
  1007. SendClientMessage(playerid, WHITE, "Gate moved WEST");
  1008. return true;
  1009. }
  1010. else
  1011. {
  1012. SendClientMessage(playerid, RED, "You can only move the gate up/down/north/south/east/west.");
  1013. }
  1014. return true;
  1015. }
  1016.  
  1017. CMD:rotategate(playerid, params[])
  1018. {
  1019. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, WHITE, "SERVER: Invalid command.");
  1020. if(IsPlayerInRangeOfGate(playerid) == 0) return SendClientMessage(playerid, RED, "You need to be within range of a personal gate to move it.");
  1021. new param[10], Float:coord, g = GetNearestGateID(playerid);
  1022. if(sscanf(params, "s[10]f", param, coord)) return SendClientMessage(playerid, RED, "[USAGE]: /rotategate [x/y/z] [coord]");
  1023. if(strfind(param, "x", false) != -1)
  1024. {
  1025. GateInfo[g][gClosed_RotX] = GateInfo[g][gClosed_RotX] + coord;
  1026. GateInfo[g][gOpen_RotX] = GateInfo[g][gOpen_RotX] + coord;
  1027. Delete3DTextLabel(gatelabel[g]);
  1028. SetObjectRot(gateobject[g], GateInfo[g][gClosed_RotX], GateInfo[g][gClosed_RotY], GateInfo[g][gClosed_RotZ]);
  1029. gatelabel[g] = Create3DTextLabel(GateInfo[g][gName], LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  1030. SaveGateStats(g);
  1031. SendClientMessage(playerid, WHITE, "Gates X coordinate rotated.");
  1032. return true;
  1033. }
  1034. else if(strfind(param, "y", false) != -1)
  1035. {
  1036. GateInfo[g][gClosed_RotY] = GateInfo[g][gClosed_RotY] + coord;
  1037. GateInfo[g][gOpen_RotY] = GateInfo[g][gOpen_RotY] + coord;
  1038. Delete3DTextLabel(gatelabel[g]);
  1039. SetObjectRot(gateobject[g], GateInfo[g][gClosed_RotX], GateInfo[g][gClosed_RotY], GateInfo[g][gClosed_RotZ]);
  1040. gatelabel[g] = Create3DTextLabel(GateInfo[g][gName], LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  1041. SaveGateStats(g);
  1042. SendClientMessage(playerid, WHITE, "Gates Y coordinate rotated.");
  1043. return true;
  1044. }
  1045. else if(strfind(param, "z", false) != -1)
  1046. {
  1047. GateInfo[g][gClosed_RotZ] = GateInfo[g][gClosed_RotZ] + coord;
  1048. GateInfo[g][gOpen_RotZ] = GateInfo[g][gOpen_RotZ] + coord;
  1049. Delete3DTextLabel(gatelabel[g]);
  1050. SetObjectRot(gateobject[g], GateInfo[g][gClosed_RotX], GateInfo[g][gClosed_RotY], GateInfo[g][gClosed_RotZ]);
  1051. gatelabel[g] = Create3DTextLabel(GateInfo[g][gName], LIGHTGREEN, GateInfo[g][gClosed_X], GateInfo[g][gClosed_Y], GateInfo[g][gClosed_Z], 30.0, 0, 1);
  1052. SaveGateStats(g);
  1053. SendClientMessage(playerid, WHITE, "Gates Z coordinate rotated.");
  1054. return true;
  1055. }
  1056. else
  1057. {
  1058. SendClientMessage(playerid, RED, "You can only rotate x/y/z coordinate of the gate.");
  1059. }
  1060. return true;
  1061. }
  1062.  
  1063. CMD:gp(playerid, params[])
  1064. {
  1065. if(IsPlayerInRangeOfGate(playerid) == 0) return SendClientMessage(playerid, RED, "You need to be within range of a personal gate to use this command.");
  1066. new g = GetNearestGateID(playerid);
  1067. GetPlayerLastGateID{playerid} = g;
  1068. if(IsPlayerGateOwner(playerid) == 1)
  1069. {
  1070. ShowPlayerDialog(playerid, GATE_PANEL, DIALOG_STYLE_LIST, "{FFFFFF}Gate Panel", "{FFFFFF}Open Gate\nClose Gate\nGive/Take Gate Keys\nSet Gate Name", "Select", "Cancel");
  1071. return true;
  1072. }
  1073. else if(IsPlayerGateKeyHolder(playerid) == 1)
  1074. {
  1075. ShowPlayerDialog(playerid, GATE_PANEL, DIALOG_STYLE_LIST, "{FFFFFF}Gate Panel", "{FFFFFF}Open Gate\nClose Gate", "Select", "Cancel");
  1076. return true;
  1077. }
  1078. else
  1079. {
  1080. new string[128];
  1081. format(string, sizeof(string), "This gate is owned by %s, you do not have access to it.", GateInfo[g][gOwner]);
  1082. SendClientMessage(playerid, RED, string);
  1083. }
  1084. return true;
  1085. }
  1086.  
  1087. CMD:gatecmds(playerid, params[])
  1088. {
  1089. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, WHITE, "SERVER: Invalid command.");
  1090. ShowPlayerDialog(playerid, GATE_CMDS_DIALOG, DIALOG_STYLE_MSGBOX ,"{FFFFFF}Admin Gate Commands","{FFFFFF}Commands: /(create/delete/move/rotate)gate", "Ok", "");
  1091. return true;
  1092. }
Advertisement
Add Comment
Please, Sign In to add comment