Guest User

Untitled

a guest
Oct 25th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 55.27 KB | None | 0 0
  1. /*
  2. X337 SIMPLE GANG SYSTEM
  3. Required Plugins : sscanf, mysql R39-2
  4. */
  5. #include <a_samp> // SA-MP Team
  6. #include <mysql> // BlueG
  7. #include <required/sscanf2> // Y-Less
  8. #include <YSI\y_iterate> // Y-Less
  9. #include <YSI\y_areas> // Y-Less
  10. #include <required/zcmd> // Zeex
  11.  
  12. Escape(str[])
  13. {
  14. new s[512];
  15. mysql_real_escape_string(str, s);
  16. return s;
  17. }
  18. /*
  19. DATABASE CONNECTION
  20. You must define database connection below and recompile this filterscript
  21. */
  22. #define HOSTNAME "127.0.0.1"
  23. #define USERNAME "algemliam"
  24. #define PASSWORD "rbjcb1ztib"
  25. #define DATABASENAME "algemliam"
  26. /*
  27. -------------------------------------------------------------------------
  28. */
  29.  
  30.  
  31. #define AUTOSAVE 1 // Save Player, Gangs, Zones data automatically! (In - Minutes);
  32. #define MAX_ZONES 100 // Maximum Gang Zone
  33. #define MAX_GANGS 100 // Maximum Gang
  34. #define CAPTURE_TIME 60 // Capture Time
  35. #define LOCKED_MINUTES 30
  36. #define DIALOG_UNUSED 1337 // Dialog ID
  37. #define DEFAULT_ZONE_COLOR "000000AA" // Default hex colour for gang zone
  38. #define REQUIRED_SCORE 1000 // Required score to make a new gang
  39. #define MAX_GANG_MEMBER 32 // Maximum gang member
  40. #undef MAX_PLAYERS
  41. #define MAX_PLAYERS 100 // MAX_PLAYERS
  42. #define DIALOG_SAVEZONE DIALOG_UNUSED+1
  43. #define DIALOG_CREATEGANG DIALOG_UNUSED+2
  44. #define DIALOG_GANGTAG DIALOG_UNUSED+3
  45. #define DIALOG_GANGCOLOUR DIALOG_UNUSED+4
  46. #define DIALOG_HEXCOLOUR DIALOG_UNUSED+5
  47. #define DIALOG_CREATEGANG_CONFIRM DIALOG_UNUSED+6
  48. #define DIALOG_GCP DIALOG_UNUSED+7
  49. #define strcpy(%0,%1) \
  50. strcat((%0[0] = '\0', %0), %1)
  51. #define GANG_MEMBER 1
  52. #define GANG_STAFF 2
  53. #define GANG_LEADER 3
  54.  
  55. #define COLOR_RED 0xAA3333AA
  56. #define COLOR_WHITE 0xFFFFFFFF
  57.  
  58. enum _gangzone
  59. {
  60. ZoneID,
  61. Float:ZoneMinPos[2],
  62. Float:ZoneMaxPos[2],
  63. ZoneOwner,
  64. ZoneName[50],
  65. ZoneHolder,
  66. ZoneArea,
  67. ZoneLocked,
  68. bool:ZoneStatus,
  69. ZoneTimer
  70. }
  71. enum _player
  72. {
  73. PlayerID,
  74. bool:CreatingZone,
  75. PlayerText:TDZone[2],
  76. PlayerGang,
  77. PlayerStatus,
  78. GangRequest,
  79. PlayerText:CaptureTD[2]
  80. }
  81. enum _gang
  82. {
  83. GangID,
  84. GangColor[7],
  85. GangName[30],
  86. GangTag[4],
  87. GangScore,
  88. CurrentZone,
  89. GangTimer
  90. }
  91.  
  92. new Player[MAX_PLAYERS][_player],
  93. GangZone[MAX_ZONES][_gangzone],
  94. Gang[MAX_GANGS][_gang],
  95. Iterator:GangZones<MAX_ZONES>,
  96. Iterator:Gangs<MAX_GANGS>,
  97. Float:MinPos[MAX_PLAYERS][2],
  98. Float:MaxPos[MAX_PLAYERS][2],
  99. PlayerZone[MAX_PLAYERS],
  100. TempGangName[MAX_PLAYERS][30],
  101. TempGangTag[MAX_PLAYERS][4],
  102. TempGangColour[MAX_PLAYERS][7],
  103. MySQL:connection,
  104. AutoSaveTimer;
  105.  
  106. stock bool:CheckGang(gangid)
  107. {
  108. new t[56], query[128];
  109. format(query, sizeof(query), "SELECT count(*) AS `total` FROM `member` WHERE `gang` = %d", Gang[gangid][GangID]);
  110. mysql_query(query, -1, 0, connection);
  111. mysql_store_result(connection);
  112. if(mysql_num_rows(connection) > 0)
  113. mysql_fetch_field("total", t, connection);
  114. mysql_free_result(connection);
  115. return (strval(t) >= MAX_GANG_MEMBER) ? false : true;
  116. }
  117.  
  118. stock IsAlpha(const string[])
  119. {
  120. for(new i = 0; i < strlen(string); i++)
  121. {
  122. if(string[i] == 45 || (string[i] >= 48 && string[i] <= 57) || (string[i] >= 65 && string[i] <= 90) || (string[i] >= 97 && string[i] <= 122))
  123. continue;
  124.  
  125. return false;
  126. }
  127. return true;
  128. }
  129.  
  130. stock HexToInt(string[]) // DracoBlue
  131. {
  132. if (string[0] == 0) return 0;
  133. new i, cur=1, res = 0;
  134. for (i=strlen(string);i>0;i--) {
  135. if (string[i-1]<58) res=res+cur*(string[i-1]-48); else res=res+cur*(string[i-1]-65+10);
  136.  
  137. cur=cur*16;
  138. }
  139. return res;
  140. }
  141.  
  142. stock GetGangID(id)
  143. {
  144. foreach(new i : Gangs)
  145. if(Gang[i][GangID] == id)
  146. return i;
  147. return -1;
  148. }
  149.  
  150. stock GetID(const name[])
  151. {
  152. foreach(new i : Player)
  153. {
  154. if(!strcmp(name, Name(i)))
  155. return i;
  156. }
  157. return -1;
  158. }
  159.  
  160. SaveStats(playerid)
  161. {
  162. new query[128], name[MAX_PLAYER_NAME], i = Player[playerid][PlayerGang];
  163. GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  164. if(Iter_Contains(Gangs, i) && i != -1)
  165. format(query, sizeof(query), "UPDATE `member` SET `gang` = %d, `status` = %d, `name` = '%s' WHERE `id` = '%d'", Gang[i][GangID], Player[playerid][PlayerStatus], Escape(name), Player[playerid][PlayerID]);
  166. else
  167. format(query, sizeof(query), "UPDATE `member` SET `gang` = -1, `name` = '%s' WHERE `id` = %d", Escape(name), Player[playerid][PlayerID]);
  168. mysql_query(query, -1, 0, connection);
  169. return 1;
  170. }
  171.  
  172. SaveGang(i)
  173. {
  174. new query[128];
  175. format(query, sizeof(query), "UPDATE `gang` SET `color` = '%s', `score` = %d WHERE `id` = '%d'", Escape(Gang[i][GangColor]), Gang[i][GangScore], Gang[i][GangID]);
  176. mysql_query(query, -1, 0, connection);
  177. return 1;
  178. }
  179.  
  180. SaveZone(i)
  181. {
  182. if(GangZone[i][ZoneOwner] != -1 && Iter_Contains(Gangs, GangZone[i][ZoneOwner]))
  183. {
  184. new query[128];
  185. format(query, sizeof(query), "UPDATE `zone` SET `owner` = '%d' WHERE `id` = '%d'", Gang[GangZone[i][ZoneOwner]][GangID], GangZone[i][ZoneID]);
  186. mysql_query(query, -1, 0, connection);
  187. }
  188. return 1;
  189. }
  190.  
  191. LoadPlayerGang(playerid)
  192. {
  193. Player[playerid][PlayerGang] = -1;
  194. Player[playerid][PlayerStatus] = GANG_MEMBER;
  195. Player[playerid][GangRequest] = -1;
  196. new name[MAX_PLAYER_NAME], query[128];
  197. GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  198. format(query, sizeof(query), "SELECT * FROM `member` WHERE `name` = '%s'", Escape(name));
  199. mysql_query(query, -1, 0, connection);
  200. mysql_store_result(connection);
  201. new count = mysql_num_rows(connection);
  202. if(count > 0)
  203. {
  204. new xz[56], id;
  205. mysql_fetch_field("gang", xz, connection);
  206. id = strval(xz);
  207. foreach(new i : Gangs)
  208. {
  209. if(Gang[i][GangID] == id)
  210. {
  211. Player[playerid][PlayerGang] = i;
  212. break;
  213. }
  214. }
  215. mysql_fetch_field("status", xz, connection);
  216. Player[playerid][PlayerStatus] = strval(xz);
  217. mysql_fetch_field("id", xz, connection);
  218. Player[playerid][PlayerID] = strval(xz);
  219. }
  220. else
  221. {
  222. format(query, sizeof(query), "INSERT INTO `member`(`name`) VALUES ('%s')", Escape(name));
  223. mysql_query(query, -1, 0, connection);
  224. Player[playerid][PlayerID] = mysql_insert_id(connection);
  225. }
  226. mysql_free_result(connection);
  227. return 1;
  228. }
  229.  
  230. SendGangMessage(i, msg[])
  231. {
  232. foreach(new p : Player)
  233. {
  234. if(i == Player[p][PlayerGang])
  235. SendClientMessage(p, -1, msg);
  236. }
  237. return 1;
  238. }
  239.  
  240. stock Name(playerid)
  241. {
  242. new name[MAX_PLAYER_NAME];
  243. GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  244. return name;
  245. }
  246.  
  247. public OnFilterScriptInit()
  248. {
  249. SetTimer("LoadFS", 5000, 0);
  250. return 1;
  251. }
  252.  
  253. public OnFilterScriptExit()
  254. {
  255. AutoSave();
  256. foreach(new i : GangZones)
  257. {
  258. GangZoneDestroy(GangZone[i][ZoneHolder]);
  259. Area_Delete(GangZone[i][ZoneArea]);
  260. }
  261. Iter_Clear(GangZones);
  262. foreach(new i : Player)
  263. {
  264. PlayerTextDrawHide(i, Player[i][TDZone][0]);
  265. PlayerTextDrawHide(i, Player[i][TDZone][1]);
  266. }
  267. KillTimer(AutoSaveTimer);
  268. print("\n========= |LOADING!| =========");
  269. print("=== |Gang System by Blade| ===");
  270. print("=== |SUCCESSFULLY LOADED!| ===\n");
  271. return 1;
  272. }
  273.  
  274. COMMAND:creategang(playerid, params[])
  275. {
  276. if(GetPlayerScore(playerid) >= REQUIRED_SCORE)
  277. {
  278. if(Player[playerid][PlayerGang] == -1)
  279. ShowPlayerDialog(playerid, DIALOG_CREATEGANG, DIALOG_STYLE_INPUT, "Gang System - Gang Name", "Insert the gang name below :", "Submit", "Cancel");
  280. else
  281. SendClientMessage(playerid, COLOR_RED, "You are already in a gang!");
  282. }
  283. else
  284. {
  285. new string[128];
  286. format(string, sizeof(string), "You need atleast %d score to create a gang!", REQUIRED_SCORE);
  287. SendClientMessage(playerid, COLOR_RED, string);
  288. }
  289. return 1;
  290. }
  291.  
  292. COMMAND:gangcolor(playerid, params[])
  293. {
  294. new i = Player[playerid][PlayerGang];
  295. if(i != -1)
  296. {
  297. new color[7];
  298. if(sscanf(params, "h", color) || strlen(params) != 6)
  299. SendClientMessage(playerid, COLOR_RED, "Invalid hex colour!");
  300. else
  301. {
  302. new msg[56];
  303. format(msg, sizeof(msg), "{%s}Your gang color has been changed!", params);
  304. SendClientMessage(playerid, -1, msg);
  305. format(Gang[i][GangColor], 7, "%s", params);
  306. }
  307. }
  308. else
  309. SendClientMessage(playerid, COLOR_RED, "You must be a gang leader to use this command!");
  310. return 1;
  311. }
  312.  
  313. COMMAND:changeleader(playerid, params[])
  314. {
  315. if(Player[playerid][PlayerGang] != -1)
  316. {
  317. if(Player[playerid][PlayerStatus] == GANG_LEADER)
  318. {
  319. new id;
  320. if(sscanf(params, "u", id))
  321. {
  322. SendClientMessage(playerid, COLOR_WHITE, "[SYNTAX] '/changeleader' <playerid>");
  323. }
  324. else
  325. {
  326. if(IsPlayerConnected(id))
  327. {
  328. if(Player[playerid][PlayerGang] == Player[id][PlayerGang])
  329. {
  330. Player[playerid][PlayerStatus] = GANG_MEMBER;
  331. Player[id][PlayerStatus] = GANG_LEADER;
  332. new msg[56];
  333. format(msg, sizeof(msg), "[HINT] You have promoted %s as new gang leader!", Name(id));
  334. SendClientMessage(playerid, COLOR_WHITE, msg);
  335. SendClientMessage(id, COLOR_WHITE, "[HINT] You have been promoted as new gang leader!");
  336. SaveStats(id);
  337. SaveStats(playerid);
  338. }
  339. else
  340. SendClientMessage(playerid, COLOR_RED, "That player isn't in your gang!");
  341. }
  342. else
  343. SendClientMessage(playerid, COLOR_RED, "That player isn't connected!");
  344. }
  345. }
  346. else
  347. SendClientMessage(playerid, COLOR_RED, "You must be a gang leader to use this command!");
  348. }
  349. else
  350. SendClientMessage(playerid, COLOR_RED, "You must be a gang member to use this command!");
  351. return 1;
  352. }
  353.  
  354. COMMAND:territory(playerid, params[])
  355. {
  356. new msg[512], p;
  357. foreach(new i : GangZones)
  358. {
  359. p = GangZone[i][ZoneOwner];
  360. if(p == -1)
  361. format(msg, sizeof(msg), "%s{B7B7B7}%s (-)\n", msg, GangZone[i][ZoneName]);
  362. else
  363. format(msg, sizeof(msg), "%s{%s}%s (%s)\n", msg, Gang[p][GangColor], GangZone[i][ZoneName], Gang[p][GangName]);
  364.  
  365. }
  366. ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Territory", msg, "Close", "");
  367. return 1;
  368. }
  369.  
  370. COMMAND:gangmembers(playerid, params[])
  371. {
  372. new i = Player[playerid][PlayerGang];
  373. if(i != -1)
  374. {
  375. new query[600];
  376. format(query, sizeof(query), "SELECT * FROM `member` WHERE `gang` = %d", Gang[i][GangID]);
  377. mysql_query(query, -1, 0, connection);
  378. mysql_store_result(connection);
  379. format(query, sizeof(query), "{FFFFFF}");
  380. new count = mysql_num_rows(connection);
  381. if(count > 0)
  382. {
  383. new tempid, r = 1, row[1000];
  384. new id,
  385. n[56],
  386. st,
  387. g;
  388. while(mysql_fetch_row(row, "|", connection))
  389. {
  390. sscanf(row, "p<|>ds[56]dd", id, n, st, g);
  391. tempid = GetID(n);
  392. format(query, sizeof(query), "%s%d. %s ", query, r, n);
  393. if(IsPlayerConnected(tempid))
  394. strcat(query, "{FE9A2E}(ONLINE) ");
  395. else
  396. strcat(query, "{FF0000}(OFFLINE) ");
  397. if(st == GANG_LEADER)
  398. strcat(query, "{58D3F7} (LEADER) ");
  399. if(st == GANG_STAFF)
  400. strcat(query, "{58D3F7} (STAFF) ");
  401. strcat(query, "\n{FFFFFF}");
  402. r++;
  403. }
  404. ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Gang Members", query, "Close", "");
  405. }
  406. mysql_free_result(connection);
  407. }
  408. else
  409. SendClientMessage(playerid, COLOR_RED, "You must be a gang member to use this command!");
  410. return 1;
  411. }
  412.  
  413. COMMAND:gcp(playerid, params[])
  414. {
  415. new i = Player[playerid][PlayerGang];
  416. if(i != -1)
  417. {
  418. if(Iter_Contains(Gangs, i))
  419. {
  420. new msg[256];
  421. format(msg, sizeof(msg), "{FFFF00}Gang Name : {%s}%s {FFFFFF}", Gang[i][GangColor], Gang[i][GangName]);
  422. format(msg, sizeof(msg), "%s\n{FFFF00}Gang Tag : [%s]", msg, Gang[i][GangTag]);
  423. format(msg, sizeof(msg), "%s\n{FFFF00}Gang Score : %d", msg, Gang[i][GangScore]);
  424. format(msg, sizeof(msg), "%s\n{B7B7B7}Gang Member", msg);
  425. format(msg, sizeof(msg), "%s\n{B7B7B7}Territory", msg);
  426. ShowPlayerDialog(playerid, DIALOG_GCP, DIALOG_STYLE_LIST, "Gang Control Panel", msg, "Chooose", "Cancel");
  427. }
  428. }
  429. else
  430. SendClientMessage(playerid, COLOR_RED, "You must be a gang member to use this command!");
  431. return 1;
  432. }
  433.  
  434. COMMAND:leavegang(playerid, params[])
  435. {
  436. new i = Player[playerid][PlayerGang];
  437. if(i != -1)
  438. {
  439. if(Player[playerid][PlayerStatus] != GANG_LEADER)
  440. {
  441. new msg[56];
  442. format(msg, sizeof(msg), "{FF0000}(Gang Chat) %s(%i) has left the gang!", Name(playerid), playerid);
  443. SendGangMessage(Player[playerid][PlayerGang], msg);
  444. Player[playerid][PlayerGang] = -1;
  445. SaveStats(playerid);
  446. }
  447. else
  448. SendClientMessage(playerid, COLOR_RED, "You cannot leave gang since you are Gang Leader!");
  449. }
  450. return 1;
  451. }
  452.  
  453. COMMAND:disbandgang(playerid, params[])
  454. {
  455. new i = Player[playerid][PlayerGang];
  456. if(i != -1)
  457. {
  458. if(Player[playerid][PlayerStatus] == GANG_LEADER)
  459. {
  460. if(Gang[i][CurrentZone] == -1)
  461. {
  462. new query[256];
  463. format(query, sizeof(query), "{FF0000}(Gang Chat) %s has disbanded the gang!", Name(playerid));
  464. SendGangMessage(i, query);
  465. format(query, sizeof(query), "DELETE FROM `gang` WHERE `id` = %d", Gang[i][GangID]);
  466. mysql_query(query, -1, 0, connection);
  467. foreach(new p : Player)
  468. {
  469. if(Player[p][PlayerGang] == i)
  470. {
  471. Player[p][PlayerGang] = -1;
  472. Player[p][PlayerStatus] = GANG_MEMBER;
  473. }
  474. }
  475. format(query, sizeof(query), "UPDATE `member` SET `gang` = -1, `status` = 1 WHERE `gang` = %d", Gang[i][GangID]);
  476. mysql_query(query, -1, 0, connection);
  477. Iter_Remove(Gangs, i);
  478. foreach(new p : GangZones)
  479. {
  480. if(GangZone[p][ZoneOwner] == i)
  481. {
  482. GangZone[p][ZoneOwner] = -1;
  483. GangZoneShowForAll(GangZone[p][ZoneHolder], HexToInt(DEFAULT_ZONE_COLOR));
  484. }
  485. }
  486. }
  487. }
  488. else
  489. SendClientMessage(playerid, COLOR_RED, "You must be gang leader to use this command!!");
  490. }
  491. else
  492. SendClientMessage(playerid, COLOR_RED, "You must be a gang leader to use this command!!");
  493. return 1;
  494. }
  495.  
  496. COMMAND:topgang(playerid, params[])
  497. {
  498. new query[128];
  499. format(query, sizeof(query), "SELECT * FROM `gang` ORDER BY `score` DESC LIMIT 20");
  500. mysql_query(query, -1, 0, connection);
  501. mysql_store_result(connection);
  502. new ganglist[1600], count = mysql_num_rows(connection), TempColor[7], TempName[30], ts[56];
  503. if(count != 0)
  504. {
  505. new i = 1, row[1000];
  506. new id, ta;
  507. while(mysql_fetch_row(row, "|", connection))
  508. {
  509. sscanf(row, "p<|>ds[30]s[7]s[5]d", id, TempName, TempColor, ta, ts);
  510. format(ganglist, sizeof(ganglist), "%s%d. {FFFFFF}%s {FFFFFF}- Score : %d\n", ganglist, i, TempName, ts);
  511. i++;
  512. }
  513. format(ganglist, sizeof(ganglist), "%s\n* This top list updated every %d minutes", ganglist, AUTOSAVE);
  514. ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Top Gangs", ganglist, "Close", "");
  515. }
  516. else
  517. SendClientMessage(playerid, COLOR_RED, "There is not any gang present right now!");
  518. mysql_free_result(connection);
  519. return 1;
  520. }
  521.  
  522. COMMAND:gangrank(playerid, params[])
  523. {
  524. new TempName[30];
  525. if(sscanf(params, "s[30]", TempName))
  526. {
  527. SendClientMessage(playerid, COLOR_WHITE, "[SYNTAX] '/gangrank' <gang name>");
  528. }
  529. else
  530. {
  531. new query[512];
  532. format(query, sizeof(query), "SELECT `rank` FROM (SELECT `name`,`score`, @current := @current + 1 as `rank` from `gang`, (select @current := 0) r order by `score` desc) z WHERE `name` = '%s'", Escape(TempName));
  533. mysql_query(query, -1, 0, connection);
  534. mysql_store_result(connection);
  535. if(mysql_num_rows(connection) != 0)
  536. {
  537. new msg[56];
  538. mysql_fetch_field("rank", query, connection);
  539. format(msg, sizeof(msg), "{FFFF00}%s - {FFFF00}Rank : %d", TempName, strval(query));
  540. SendClientMessage(playerid, -1, msg);
  541. }
  542. else
  543. SendClientMessage(playerid, COLOR_RED, "Error 404! Gang name not found!");
  544. mysql_free_result(connection);
  545. }
  546. return 1;
  547. }
  548.  
  549. COMMAND:promotestaff(playerid, params[])
  550. {
  551. if(Player[playerid][PlayerStatus] == GANG_LEADER)
  552. {
  553. new id;
  554. if(sscanf(params, "u", id))
  555. {
  556. SendClientMessage(playerid, COLOR_RED, "[SYNTAX] '/promotestaff' <playerid>");
  557. }
  558. else
  559. {
  560. if(IsPlayerConnected(id))
  561. {
  562. if(Player[id][PlayerGang] == Player[playerid][PlayerGang])
  563. {
  564. if(id != playerid)
  565. {
  566. if(Player[id][PlayerStatus] != GANG_STAFF)
  567. {
  568. SendClientMessage(playerid, COLOR_WHITE, "[HINT] You have promoted %s to Gang Staff!");
  569. SendClientMessage(id, COLOR_WHITE, "[HINT] You have been promoted to a Gang Staff!");
  570. Player[id][PlayerStatus] = GANG_STAFF;
  571. SaveStats(id);
  572. }
  573. else
  574. SendClientMessage(playerid, COLOR_RED, "That player is already a gang staff!");
  575. }
  576. else
  577. SendClientMessage(playerid, COLOR_RED, "You can't promote yourself!");
  578. }
  579. else
  580. SendClientMessage(playerid, COLOR_RED, "That player isn't your gang member!");
  581. }
  582. else
  583. SendClientMessage(playerid, COLOR_RED, "That player isn't connected!");
  584. }
  585. }
  586. else
  587. SendClientMessage(playerid, COLOR_RED, "You must be a gang leader to use this command!!");
  588. return 1;
  589. }
  590.  
  591. COMMAND:demotestaff(playerid, params[])
  592. {
  593. if(Player[playerid][PlayerStatus] == GANG_LEADER)
  594. {
  595. new id;
  596. if(sscanf(params, "u", id))
  597. {
  598. SendClientMessage(playerid, COLOR_WHITE, "[SYNTAX] '/demotestaff' <playerid>");
  599. }
  600. else
  601. {
  602. if(IsPlayerConnected(id))
  603. {
  604. if(Player[id][PlayerGang] == Player[playerid][PlayerGang])
  605. {
  606. if(id != playerid)
  607. {
  608. if(Player[id][PlayerStatus] == GANG_STAFF)
  609. {
  610. SendClientMessage(playerid, COLOR_WHITE, "[HINT] You have demoted %s from gang staff!");
  611. SendClientMessage(id, COLOR_WHITE, "[HINT] You have been demoted from gang staff!");
  612. Player[id][PlayerStatus] = GANG_MEMBER;
  613. SaveStats(id);
  614. }
  615. else
  616. SendClientMessage(playerid, COLOR_RED, "That player isn't a gang staff!");
  617. }
  618. else
  619. SendClientMessage(playerid, COLOR_RED, "You can't demote yourself!");
  620. }
  621. else
  622. SendClientMessage(playerid, COLOR_RED, "That player isn't your gang member!");
  623. }
  624. else
  625. SendClientMessage(playerid, COLOR_RED, "That player isn't connected!");
  626. }
  627. }
  628. else
  629. SendClientMessage(playerid, COLOR_RED, "You must be a gang leader to use this command!!");
  630. return 1;
  631. }
  632.  
  633. COMMAND:createzone(playerid, params[])
  634. {
  635. if(IsPlayerAdmin(playerid))
  636. {
  637. if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
  638. {
  639. if(!Player[playerid][CreatingZone])
  640. {
  641. new Float:z;
  642. Player[playerid][CreatingZone] = true;
  643. new msg[128];
  644. format(msg, sizeof(msg), "Gangzone Mode! Use arrow keys to make the zone bigger or less");
  645. SendClientMessage(playerid, -1, msg);
  646. format(msg, sizeof(msg), "Using ~k~~PED_FIREWEAPON~ + Arrow keys you minus the height or width.");
  647. SendClientMessage(playerid, -1, msg);
  648. format(msg, sizeof(msg), "Press ~k~~VEHICLE_ENTER_EXIT~ when you are done!");
  649. SendClientMessage(playerid, -1, msg);
  650. GetPlayerPos(playerid, MinPos[playerid][0], MinPos[playerid][1], z);
  651. GetPlayerPos(playerid, MaxPos[playerid][0], MaxPos[playerid][1], z);
  652. TogglePlayerControllable(playerid, false);
  653. }
  654. else
  655. SendClientMessage(playerid, COLOR_RED, "You are already in create zone mode, /cancelzone to cancel");
  656. }
  657. else
  658. SendClientMessage(playerid, COLOR_RED, "You must be onfoot to create gang zone");
  659. }
  660. else
  661. SendClientMessage(playerid, COLOR_RED, "You don't have correct permissions to use this command!");
  662. return 1;
  663. }
  664.  
  665. COMMAND:ganginvite(playerid, params[])
  666. {
  667. new p;
  668. if(Player[playerid][PlayerStatus] >= 2 && Player[playerid][PlayerGang] != -1)
  669. {
  670. if(sscanf(params, "d", p))
  671. {
  672. SendClientMessage(playerid, COLOR_WHITE, "[SYNTAX] '/ganginvite' <playerid>");
  673. }
  674. else
  675. {
  676. if(IsPlayerConnected(p))
  677. {
  678. if(Player[p][PlayerGang] == -1)
  679. {
  680. if(CheckGang(Player[playerid][PlayerGang]))
  681. {
  682. new msg[128];
  683. format(msg, sizeof(msg), "{A7C4E4}%s want you to join %s gang! (/acceptgang)", Name(playerid), Gang[Player[playerid][PlayerGang]][GangName]);
  684. SendClientMessage(p, COLOR_WHITE, msg);
  685. format(msg, sizeof(msg), "[HINT] You have invited %s to join your gang!", Name(p));
  686. SendClientMessage(playerid, COLOR_WHITE, msg);
  687. Player[p][GangRequest] = Player[playerid][PlayerGang];
  688. }
  689. else
  690. SendClientMessage(playerid, COLOR_RED, "You cannot invite anyone else since your gang is full!");
  691. }
  692. else
  693. SendClientMessage(playerid, COLOR_RED, "That player already a gang member!");
  694. }
  695. else
  696. SendClientMessage(playerid, COLOR_RED, "That player isn't connected!");
  697. }
  698. }
  699. else
  700. SendClientMessage(playerid, COLOR_RED, "You must be a gang leader or gang staff to use this command!");
  701. return 1;
  702. }
  703.  
  704. COMMAND:acceptgang(playerid, params[])
  705. {
  706. if(Player[playerid][PlayerGang] == -1)
  707. {
  708. if(Player[playerid][GangRequest] != -1)
  709. {
  710. if(Iter_Contains(Gangs, Player[playerid][GangRequest]))
  711. {
  712. if(CheckGang(Player[playerid][GangRequest]))
  713. {
  714. Player[playerid][PlayerGang] = Player[playerid][GangRequest];
  715. Player[playerid][GangRequest] = -1;
  716. Player[playerid][PlayerStatus] = GANG_MEMBER;
  717. new msg[56];
  718. format(msg, sizeof(msg), "{FF0000}(Gang Chat) %s has joined the gang!", Name(playerid));
  719. SendGangMessage(Player[playerid][PlayerGang], msg);
  720. SaveStats(playerid);
  721. }
  722. }
  723. else
  724. SendClientMessage(playerid, COLOR_RED, "ERROR 404: Invalid Session!");
  725. }
  726. }
  727. else
  728. SendClientMessage(playerid, COLOR_RED, "You are already member of another gang!");
  729. return 1;
  730. }
  731.  
  732. COMMAND:g(playerid, params[])
  733. {
  734. if(!params[1])
  735. SendClientMessage(playerid, COLOR_WHITE, "[SYNTAX] '/g' <message>");
  736. else
  737. {
  738.  
  739. new i = Player[playerid][PlayerGang];
  740. if(i != -1)
  741. {
  742. new msg[128];
  743. format(msg, sizeof(msg), "{FF0000}(Gang Chat) %s(%i): {FFFFFF}%s", Name(playerid), playerid, params);
  744. SendGangMessage(Player[playerid][PlayerGang], msg);
  745. }
  746. else
  747. SendClientMessage(playerid, COLOR_RED, "You must be a gang member to use this command!");
  748. }
  749. return 1;
  750. }
  751.  
  752. COMMAND:capture(playerid, params[])
  753. {
  754. if(Player[playerid][PlayerGang] != -1)
  755. {
  756. if(Gang[Player[playerid][PlayerGang]][CurrentZone] == -1)
  757. {
  758. new bool:found = false, i, total = 0, area = Area_GetPlayerAreas(playerid, 0);
  759. foreach(i : GangZones)
  760. {
  761. if(area == GangZone[i][ZoneArea])
  762. {
  763. found = true;
  764. break;
  765. }
  766. }
  767. if(GetPlayerTeam(playerid) == 1 || GetPlayerTeam(playerid) == 2 || GetPlayerTeam(playerid) == 3 || GetPlayerTeam(playerid) == 4 || GetPlayerTeam(playerid) == 5 || GetPlayerTeam(playerid) == 6 || GetPlayerTeam(playerid) == 7)
  768. {
  769. return SendClientMessage(playerid, COLOR_RED, "You need to be a Civilian to capture zones!");
  770. }
  771. if(IsPlayerInAnyVehicle(playerid))
  772. {
  773. return SendClientMessage(playerid, COLOR_RED, "You cannot capture zones whilst in vehicle!");
  774. }
  775. if(found)
  776. {
  777. if(!GangZone[i][ZoneStatus])
  778. {
  779. if(GangZone[i][ZoneOwner] != Player[playerid][PlayerGang])
  780. {
  781. new tick = GetTickCount() - GangZone[i][ZoneLocked], msg[128];
  782. if(tick > (60000 * LOCKED_MINUTES))
  783. {
  784. foreach(new p : Player)
  785. {
  786. if(Player[p][PlayerGang] == Player[playerid][PlayerGang])
  787. {
  788. if(Area_GetPlayerAreas(p, 0) == area)
  789. total++;
  790. }
  791. }
  792. if(total < 1)
  793. {
  794. SendClientMessage(playerid, COLOR_RED, "You need atleast 3 members to capture this zone!");
  795. return 1;
  796. }
  797. format(msg, sizeof(msg), "Capturing ~g~%s", GangZone[i][ZoneName]);
  798. foreach(new p : Player)
  799. {
  800. if(Player[p][PlayerGang] == Player[playerid][PlayerGang])
  801. {
  802. PlayerTextDrawSetString(p, Player[p][CaptureTD][0], msg);
  803. PlayerTextDrawSetString(p, Player[p][CaptureTD][1], "-");
  804. PlayerTextDrawShow(p, Player[p][CaptureTD][0]);
  805. PlayerTextDrawShow(p, Player[p][CaptureTD][1]);
  806. Gang[Player[playerid][PlayerGang]][GangTimer] = CAPTURE_TIME;
  807. }
  808. }
  809. format(msg, sizeof(msg), "{A7C4E4}%s gang is trying to capture %s zone with %d gang members!", Gang[Player[playerid][PlayerGang]][GangName], GangZone[i][ZoneName], total);
  810. SendClientMessageToAll(-1, msg);
  811. GangZone[i][ZoneStatus] = true;
  812. GangZone[i][ZoneTimer] = SetTimerEx("AttackZone", 1000, true, "dd", Player[playerid][PlayerGang], i);
  813. Gang[Player[playerid][PlayerGang]][CurrentZone] = i;
  814. GangZoneFlashForAll(GangZone[i][ZoneHolder], HexToInt("FF0000AA"));
  815. if(GangZone[i][ZoneOwner] != -1)
  816. {
  817. format(msg, sizeof(msg), "{A7C4E4}[ALERT] %s gang is trying to capture your territory in %s!", Gang[Player[playerid][PlayerGang]][GangName], GangZone[i][ZoneName]);
  818. SendGangMessage(GangZone[i][ZoneOwner], msg);
  819. }
  820. }
  821. else
  822. {
  823. format(msg, sizeof(msg), "This Zone is locked, Please wait %.2f minute(s) to capture this zone!", floatdiv(60000 * LOCKED_MINUTES - tick, 60 * 1000));
  824. SendClientMessage(playerid, COLOR_RED, msg);
  825. }
  826. }
  827. else
  828. SendClientMessage(playerid, COLOR_RED, "Your gang already owned this zone!");
  829. }
  830. else
  831. SendClientMessage(playerid, COLOR_RED, "Someone is already trying to capture this zone!");
  832. }
  833. else
  834. SendClientMessage(playerid, COLOR_RED, "You must be in gang zone to use this command!");
  835. }
  836. else
  837. SendClientMessage(playerid, COLOR_RED, "Your gang already started a war, please wait!");
  838. }
  839. else
  840. SendClientMessage(playerid, COLOR_RED, "You must be a gang member to use this command!");
  841. return 1;
  842. }
  843.  
  844. COMMAND:okickmember(playerid, params[])
  845. {
  846. new TempName[MAX_PLAYER_NAME];
  847. if(Player[playerid][PlayerStatus] == GANG_STAFF)
  848. {
  849. if(sscanf(params, "s[24]", TempName))
  850. {
  851. SendClientMessage(playerid, COLOR_WHITE, "[SYNTAX] '/okickmember' <member name>");
  852. }
  853. else
  854. {
  855. new query[256], i = Player[playerid][PlayerGang];
  856. format(query, sizeof(query), "SELECT * FROM `member` WHERE `name` = '%s'", Escape(TempName));
  857. mysql_query(query, -1, 0, connection);
  858. mysql_store_result(connection);
  859. if(mysql_num_rows(connection) != 0)
  860. {
  861. mysql_fetch_field("gang", query, connection);
  862. if(strval(query) == Gang[i][GangID])
  863. {
  864. mysql_fetch_field("id", query, connection);
  865. if(strval(query) != Player[playerid][PlayerID])
  866. {
  867. mysql_fetch_field("status", query, connection);
  868. if(strval(query) != GANG_LEADER)
  869. {
  870. format(query, sizeof(query), "UPDATE `member` SET `gang` = -1, `status` = 1 WHERE `name` = '%s'", Escape(TempName));
  871. mysql_query(query, -1, 0, connection);
  872. format(query, sizeof(query), "{FF0000}(Gang Chat) %s has been kicked from gang!", TempName);
  873. SendGangMessage(i, query);
  874. new p = GetID(TempName);
  875. if(IsPlayerConnected(p))
  876. {
  877. SendClientMessage(p, COLOR_WHITE, "[HINT] You have been kicked from gang!");
  878. Player[p][PlayerGang] = -1;
  879. Player[p][PlayerStatus] = GANG_MEMBER;
  880. }
  881. }
  882. else
  883. SendClientMessage(playerid, COLOR_RED, "You can't kick gang leader!");
  884. }
  885. else
  886. SendClientMessage(playerid, COLOR_RED, "You can't kick yourself!");
  887. }
  888. else
  889. SendClientMessage(playerid, COLOR_RED, "That player isn't in your gang!");
  890. }
  891. else
  892. SendClientMessage(playerid, COLOR_RED, "ERROR 404: Name not found!");
  893. mysql_free_result(connection);
  894. }
  895. else
  896. {
  897. SendClientMessage(playerid, COLOR_RED, "You must be a gang leader or gang staff to use this command!");
  898. }
  899. }
  900. return 1;
  901. }
  902.  
  903. COMMAND:kickmember(playerid, params[])
  904. {
  905. new p;
  906. if(Player[playerid][PlayerStatus] != GANG_MEMBER && Player[playerid][PlayerGang] != -1)
  907. {
  908. if(sscanf(params, "d", p))
  909. {
  910. SendClientMessage(playerid, COLOR_WHITE, "[SYNTAX] '/kickmember' <playerid>");
  911. }
  912. else
  913. {
  914. if(IsPlayerConnected(p))
  915. {
  916. if(Player[playerid][PlayerGang] == Player[p][PlayerGang])
  917. {
  918. if(playerid != p)
  919. {
  920. if(Player[p][PlayerStatus] != GANG_LEADER)
  921. {
  922. new msg[56];
  923. format(msg, sizeof(msg), "{FF0000}(Gang Chat) %s has been kicked from gang!", Name(p));
  924. SendGangMessage(Player[playerid][PlayerGang], msg);
  925. Player[p][PlayerGang] = -1;
  926. Player[p][PlayerStatus] = GANG_MEMBER;
  927. SaveStats(p);
  928. }
  929. else
  930. SendClientMessage(playerid, COLOR_RED, "You can't kick gang leader!");
  931. }
  932. else
  933. SendClientMessage(playerid, COLOR_RED, "You can't kick yourself!");
  934. }
  935. else
  936. SendClientMessage(playerid, COLOR_RED, "That player isn't in your gang!");
  937. }
  938. else
  939. SendClientMessage(playerid, COLOR_RED, "That player isn't connected!");
  940. }
  941. }
  942. else
  943. SendClientMessage(playerid, COLOR_RED, "You must be a gang leader to use this command!");
  944. return 1;
  945. }
  946.  
  947. public OnPlayerConnect(playerid)
  948. {
  949. Player[playerid][CreatingZone] = false;
  950. Player[playerid][TDZone][0] = CreatePlayerTextDraw(playerid, 320.000000, 376.666290, "ZONE NAME");
  951. PlayerTextDrawLetterSize(playerid, Player[playerid][TDZone][0], 0.400000, 1.600000);
  952. PlayerTextDrawAlignment(playerid, Player[playerid][TDZone][0], 2);
  953. PlayerTextDrawColor(playerid, Player[playerid][TDZone][0], -1);
  954. PlayerTextDrawSetShadow(playerid, Player[playerid][TDZone][0], 0);
  955. PlayerTextDrawSetOutline(playerid, Player[playerid][TDZone][0], 1);
  956. PlayerTextDrawBackgroundColor(playerid, Player[playerid][TDZone][0], 255);
  957. PlayerTextDrawFont(playerid, Player[playerid][TDZone][0], 3);
  958. PlayerTextDrawSetProportional(playerid, Player[playerid][TDZone][0], 1);
  959. PlayerTextDrawSetShadow(playerid, Player[playerid][TDZone][0], 0);
  960.  
  961. Player[playerid][TDZone][1] = CreatePlayerTextDraw(playerid, 318.000000, 391.599609, "Owned By : ~r~Unowned");
  962. PlayerTextDrawLetterSize(playerid, Player[playerid][TDZone][1], 0.264999, 1.310666);
  963. PlayerTextDrawAlignment(playerid, Player[playerid][TDZone][1], 2);
  964. PlayerTextDrawColor(playerid, Player[playerid][TDZone][1], -1);
  965. PlayerTextDrawSetShadow(playerid, Player[playerid][TDZone][1], 1);
  966. PlayerTextDrawSetOutline(playerid, Player[playerid][TDZone][1], 0);
  967. PlayerTextDrawBackgroundColor(playerid, Player[playerid][TDZone][1], 255);
  968. PlayerTextDrawFont(playerid, Player[playerid][TDZone][1], 1);
  969. PlayerTextDrawSetProportional(playerid, Player[playerid][TDZone][1], 1);
  970. PlayerTextDrawSetShadow(playerid, Player[playerid][TDZone][1], 1);
  971.  
  972. Player[playerid][CaptureTD][0] = CreatePlayerTextDraw(playerid, 633.000000, 358.000030, "");
  973. PlayerTextDrawLetterSize(playerid, Player[playerid][CaptureTD][0], 0.323000, 1.357333);
  974. PlayerTextDrawAlignment(playerid, Player[playerid][CaptureTD][0], 3);
  975. PlayerTextDrawColor(playerid, Player[playerid][CaptureTD][0], -1);
  976. PlayerTextDrawSetShadow(playerid, Player[playerid][CaptureTD][0], 1);
  977. PlayerTextDrawSetOutline(playerid, Player[playerid][CaptureTD][0], 0);
  978. PlayerTextDrawBackgroundColor(playerid, Player[playerid][CaptureTD][0], 255);
  979. PlayerTextDrawFont(playerid, Player[playerid][CaptureTD][0], 1);
  980. PlayerTextDrawSetProportional(playerid, Player[playerid][CaptureTD][0], 1);
  981. PlayerTextDrawSetShadow(playerid, Player[playerid][CaptureTD][0], 1);
  982.  
  983. Player[playerid][CaptureTD][1] = CreatePlayerTextDraw(playerid, 633.000000, 343.999938, "00:00");
  984. PlayerTextDrawLetterSize(playerid, Player[playerid][CaptureTD][1], 0.400000, 1.600000);
  985. PlayerTextDrawAlignment(playerid, Player[playerid][CaptureTD][1], 3);
  986. PlayerTextDrawColor(playerid, Player[playerid][CaptureTD][1], -1);
  987. PlayerTextDrawSetShadow(playerid, Player[playerid][CaptureTD][1], 0);
  988. PlayerTextDrawSetOutline(playerid, Player[playerid][CaptureTD][1], 1);
  989. PlayerTextDrawBackgroundColor(playerid, Player[playerid][CaptureTD][1], 255);
  990. PlayerTextDrawFont(playerid, Player[playerid][CaptureTD][1], 3);
  991. PlayerTextDrawSetProportional(playerid, Player[playerid][CaptureTD][1], 1);
  992. PlayerTextDrawSetShadow(playerid, Player[playerid][CaptureTD][1], 0);
  993.  
  994. LoadPlayerGang(playerid);
  995. foreach(new i : GangZones)
  996. {
  997. if(GangZone[i][ZoneOwner] == -1)
  998. GangZoneShowForPlayer(playerid, GangZone[i][ZoneHolder], HexToInt(DEFAULT_ZONE_COLOR));
  999. else
  1000. {
  1001. new colour[9];
  1002. format(colour, 9, "%s50", Gang[GangZone[i][ZoneOwner]][GangColor]);
  1003. GangZoneShowForPlayer(playerid, GangZone[i][ZoneHolder], HexToInt(colour));
  1004. }
  1005. }
  1006. return 1;
  1007. }
  1008.  
  1009. public OnPlayerDisconnect(playerid, reason)
  1010. {
  1011. new i = Player[playerid][PlayerGang], msg[56];
  1012. SaveStats(playerid);
  1013. if(Iter_Contains(Gangs, i) && i != -1)
  1014. {
  1015. new zone = Gang[i][CurrentZone], total = -1;
  1016. if(zone != -1)
  1017. {
  1018. total = 0;
  1019. foreach(new p : Player)
  1020. {
  1021. if(Player[p][PlayerGang] == Player[playerid][PlayerGang])
  1022. {
  1023. if(Area_GetPlayerAreas(p, 0) == GangZone[zone][ZoneArea])
  1024. total++;
  1025. }
  1026. }
  1027. }
  1028. if(total == 0)
  1029. {
  1030. format(msg, sizeof(msg), "{A7C4E4}%s Gang failed to capture %s zone!", Gang[Player[playerid][PlayerGang]][GangName], GangZone[zone][ZoneName]);
  1031. SendClientMessageToAll(COLOR_WHITE, msg);
  1032. format(msg, sizeof(msg), "{A7C4E4}%s zone will be locked for %d minutes!", GangZone[zone][ZoneName], LOCKED_MINUTES);
  1033. SendClientMessageToAll(COLOR_WHITE, msg);
  1034. Gang[Player[playerid][PlayerGang]][CurrentZone] = -1;
  1035. GangZone[zone][ZoneLocked] = GetTickCount();
  1036. GangZone[zone][ZoneStatus] = false;
  1037. GangZoneStopFlashForAll(GangZone[zone][ZoneHolder]);
  1038. }
  1039. format(msg, sizeof(msg), "{FF0000}(Gang Chat) %s has been logged out!", Name(playerid));
  1040. SendGangMessage(i, msg);
  1041. }
  1042. return 1;
  1043. }
  1044.  
  1045. public OnPlayerUpdate(playerid) //RyDer
  1046. {
  1047. if(Player[playerid][CreatingZone])
  1048. {
  1049. new Keys, UpDown, LeftRight;
  1050. GetPlayerKeys(playerid, Keys, UpDown, LeftRight);
  1051. TogglePlayerControllable(playerid, false);
  1052. if(LeftRight == KEY_LEFT)
  1053. {
  1054. MinPos[playerid][0] -= 8.0;
  1055. GangZoneDestroy(PlayerZone[playerid]);
  1056. PlayerZone[playerid] = GangZoneCreate(MinPos[playerid][0], MinPos[playerid][1], MaxPos[playerid][0], MaxPos[playerid][1]);
  1057. GangZoneShowForPlayer(playerid, PlayerZone[playerid], HexToInt("000000FF"));
  1058. }
  1059. else if(LeftRight & KEY_LEFT && Keys & KEY_FIRE)
  1060. {
  1061. MinPos[playerid][0] += 8.0;
  1062. GangZoneDestroy(PlayerZone[playerid]);
  1063. PlayerZone[playerid] = GangZoneCreate(MinPos[playerid][0], MinPos[playerid][1], MaxPos[playerid][0], MaxPos[playerid][1]);
  1064. GangZoneShowForPlayer(playerid, PlayerZone[playerid], HexToInt("000000FF"));
  1065. }
  1066. else if(LeftRight == KEY_RIGHT)
  1067. {
  1068. MaxPos[playerid][0] += 8.0;
  1069. GangZoneDestroy(PlayerZone[playerid]);
  1070. PlayerZone[playerid] = GangZoneCreate(MinPos[playerid][0], MinPos[playerid][1], MaxPos[playerid][0], MaxPos[playerid][1]);
  1071. GangZoneShowForPlayer(playerid, PlayerZone[playerid], HexToInt("000000FF"));
  1072. }
  1073. else if(LeftRight & KEY_RIGHT && Keys & KEY_FIRE)
  1074. {
  1075. MaxPos[playerid][0] -= 8.0;
  1076. GangZoneDestroy(PlayerZone[playerid]);
  1077. PlayerZone[playerid] = GangZoneCreate(MinPos[playerid][0], MinPos[playerid][1], MaxPos[playerid][0], MaxPos[playerid][1]);
  1078. GangZoneShowForPlayer(playerid, PlayerZone[playerid], HexToInt("000000FF"));
  1079. }
  1080. else if(UpDown == KEY_UP)
  1081. {
  1082. MaxPos[playerid][1] += 8.0;
  1083. GangZoneDestroy(PlayerZone[playerid]);
  1084. PlayerZone[playerid] = GangZoneCreate(MinPos[playerid][0], MinPos[playerid][1], MaxPos[playerid][0], MaxPos[playerid][1]);
  1085. GangZoneShowForPlayer(playerid, PlayerZone[playerid], HexToInt("000000FF"));
  1086. }
  1087. else if(UpDown & KEY_UP && Keys & KEY_FIRE)
  1088. {
  1089. MaxPos[playerid][1] -= 8.0;
  1090. GangZoneDestroy(PlayerZone[playerid]);
  1091. PlayerZone[playerid] = GangZoneCreate(MinPos[playerid][0], MinPos[playerid][1], MaxPos[playerid][0], MaxPos[playerid][1]);
  1092. GangZoneShowForPlayer(playerid, PlayerZone[playerid], HexToInt("000000FF"));
  1093. }
  1094. else if(UpDown == KEY_DOWN)
  1095. {
  1096. MinPos[playerid][1] -= 8.0;
  1097. GangZoneDestroy(PlayerZone[playerid]);
  1098. PlayerZone[playerid] = GangZoneCreate(MinPos[playerid][0], MinPos[playerid][1], MaxPos[playerid][0], MaxPos[playerid][1]);
  1099. GangZoneShowForPlayer(playerid, PlayerZone[playerid], HexToInt("000000FF"));
  1100. }
  1101. else if(UpDown & KEY_DOWN && Keys & KEY_FIRE)
  1102. {
  1103. MinPos[playerid][1] += 8.0;
  1104. GangZoneDestroy(PlayerZone[playerid]);
  1105. PlayerZone[playerid] = GangZoneCreate(MinPos[playerid][0], MinPos[playerid][1], MaxPos[playerid][0], MaxPos[playerid][1]);
  1106. GangZoneShowForPlayer(playerid, PlayerZone[playerid], HexToInt("000000FF"));
  1107. }
  1108. else if(Keys & KEY_SECONDARY_ATTACK)
  1109. {
  1110. TogglePlayerControllable(playerid, true);
  1111. Player[playerid][CreatingZone] = false;
  1112. ShowPlayerDialog(playerid, DIALOG_SAVEZONE, DIALOG_STYLE_INPUT, "Gang System", "Input gang zone name below, press \"Delete\" to delete current zone", "Save", "Delete");
  1113. }
  1114. }
  1115. return 1;
  1116. }
  1117.  
  1118. public OnPlayerDeath(playerid, killerid, reason)
  1119. {
  1120. if(Player[playerid][PlayerGang] != -1)
  1121. {
  1122. new zone = Gang[Player[playerid][PlayerGang]][CurrentZone], total = -1;
  1123. if(zone != -1)
  1124. {
  1125. total = 0;
  1126. foreach(new p : Player)
  1127. {
  1128. if(Player[p][PlayerGang] == Player[playerid][PlayerGang])
  1129. {
  1130. if(Area_GetPlayerAreas(p, 0) == GangZone[zone][ZoneArea] && !IsPlayerInAnyVehicle(p))
  1131. total++;
  1132. }
  1133. }
  1134. }
  1135. if(total == 0)
  1136. {
  1137. new msg[128];
  1138. format(msg, sizeof(msg), "{A7C4E4}%s Gang failed to capture %s zone!", Gang[Player[playerid][PlayerGang]][GangName], GangZone[zone][ZoneName]);
  1139. SendClientMessageToAll(-1, msg);
  1140. format(msg, sizeof(msg), "{A7C4E4}%s zone will be locked for %d minutes!", GangZone[zone][ZoneName], LOCKED_MINUTES);
  1141. SendClientMessageToAll(-1, msg);
  1142. Gang[Player[playerid][PlayerGang]][CurrentZone] = -1;
  1143. GangZone[zone][ZoneLocked] = GetTickCount();
  1144. GangZone[zone][ZoneStatus] = false;
  1145. GangZoneStopFlashForAll(GangZone[zone][ZoneHolder]);
  1146. }
  1147. }
  1148. return 1;
  1149. }
  1150.  
  1151. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  1152. {
  1153. switch(dialogid)
  1154. {
  1155. case DIALOG_SAVEZONE:
  1156. {
  1157. if(response)
  1158. {
  1159. if(strlen(inputtext) < 3 || strlen(inputtext) > 50)
  1160. ShowPlayerDialog(playerid, DIALOG_SAVEZONE, DIALOG_STYLE_INPUT, "Gang System", "{FF0000}Gang zone name must be between 3 - 50 characters! \nInput gang zone name below, press \"Delete\" to delete current zone", "Save", "Delete");
  1161. else
  1162. {
  1163. new query[256];
  1164. format(query, sizeof(query), "INSERT INTO `zone` (`minx`, `miny`, `maxx`, `maxy`, `name`) VALUES('%f', '%f', '%f', '%f', '%s')", MinPos[playerid][0], MinPos[playerid][1], MaxPos[playerid][0], MaxPos[playerid][1], Escape(inputtext));
  1165. mysql_query(query, -1, 0, connection);
  1166. mysql_store_result(connection);
  1167. GangZoneDestroy(PlayerZone[playerid]);
  1168. new i = Iter_Free(GangZones);
  1169. GangZone[i][ZoneMinPos][0] = MinPos[playerid][0];
  1170. GangZone[i][ZoneMinPos][1] = MinPos[playerid][1];
  1171. GangZone[i][ZoneMaxPos][0] = MaxPos[playerid][0];
  1172. GangZone[i][ZoneMaxPos][1] = MaxPos[playerid][1];
  1173. GangZone[i][ZoneOwner] = -1;
  1174. format(GangZone[i][ZoneName], 50, "%s", inputtext);
  1175. GangZone[i][ZoneID] = mysql_insert_id(connection);
  1176. GangZone[i][ZoneArea] = Area_AddBox(MinPos[playerid][0], MinPos[playerid][1], MaxPos[playerid][0], MaxPos[playerid][1]);
  1177. GangZone[i][ZoneHolder] = GangZoneCreate(MinPos[playerid][0], MinPos[playerid][1], MaxPos[playerid][0], MaxPos[playerid][1]);
  1178. GangZone[i][ZoneLocked] = 0;
  1179. GangZone[i][ZoneStatus] = false;
  1180. GangZoneShowForAll(GangZone[i][ZoneHolder], HexToInt(DEFAULT_ZONE_COLOR));
  1181. mysql_free_result(connection);
  1182. Iter_Add(GangZones, i);
  1183. }
  1184. }
  1185. else
  1186. GangZoneDestroy(PlayerZone[playerid]);
  1187. }
  1188. case DIALOG_CREATEGANG:
  1189. {
  1190. if(response)
  1191. {
  1192. if(strlen(inputtext) < 5 || strlen(inputtext) > 30)
  1193. {
  1194. ShowPlayerDialog(playerid, DIALOG_CREATEGANG, DIALOG_STYLE_INPUT, "Gang System - Gang Name", "{FF0000}Gang name must be between 5 - 30 characters! \nInsert the gang name below :", "Submit", "Cancel");
  1195. }
  1196. else if(!IsAlpha(inputtext))
  1197. {
  1198. ShowPlayerDialog(playerid, DIALOG_CREATEGANG, DIALOG_STYLE_INPUT, "Gang System - Gang Name", "{FF0000}Please insert only a-z,A-Z,0-9 character! \nInsert the gang name below :", "Submit", "Cancel");
  1199. }
  1200. else
  1201. {
  1202. strcpy(TempGangName[playerid], inputtext);
  1203. ShowPlayerDialog(playerid, DIALOG_GANGTAG, DIALOG_STYLE_INPUT, "Gang System - Gang Tag", "Insert the gang tag below :", "Submit", "Cancel");
  1204. }
  1205. }
  1206. }
  1207. case DIALOG_GANGTAG:
  1208. {
  1209. if(response)
  1210. {
  1211. if(strlen(inputtext) < 1 || strlen(inputtext) > 3)
  1212. {
  1213. ShowPlayerDialog(playerid, DIALOG_GANGTAG, DIALOG_STYLE_INPUT, "Gang System - Gang Tag", "{FF0000}Gang tag must be between 1 - 3 character! \nInsert the gang tag below :", "Submit", "Cancel");
  1214. }
  1215. else if(!IsAlpha(inputtext))
  1216. {
  1217. ShowPlayerDialog(playerid, DIALOG_GANGTAG, DIALOG_STYLE_INPUT, "Gang System - Gang Tag", "{FF0000}Please insert only a-z,A-Z,0-9 character! \nInsert the gang tag below :", "Submit", "Cancel");
  1218. }
  1219. else
  1220. {
  1221. strcpy(TempGangTag[playerid], inputtext);
  1222. ShowPlayerDialog(playerid, DIALOG_GANGCOLOUR, DIALOG_STYLE_LIST, "Gang System - Gang Colour",
  1223. "{00FFFF}Aqua \n{000000}Black \n{0000FF}Blue \n{A52A2A}Brown \n{FF0000}Red \n{FFFFFF}Use HEX Colour", "Choose", "Cancel");
  1224. }
  1225. }
  1226. }
  1227. case DIALOG_GANGCOLOUR:
  1228. {
  1229. if(response)
  1230. {
  1231. switch(listitem)
  1232. {
  1233. case 0:
  1234. strcpy(TempGangColour[playerid], "00FFFF");
  1235. case 1:
  1236. strcpy(TempGangColour[playerid], "000000");
  1237. case 2:
  1238. strcpy(TempGangColour[playerid], "0000FF");
  1239. case 3:
  1240. strcpy(TempGangColour[playerid], "A52A2A");
  1241. case 4:
  1242. strcpy(TempGangColour[playerid], "FF0000");
  1243. case 5:
  1244. {
  1245. ShowPlayerDialog(playerid, DIALOG_HEXCOLOUR, DIALOG_STYLE_INPUT, "Gang System - Hex Colour", "Enter hexadecimal colour below :", "Submit", "Back");
  1246. }
  1247. }
  1248. if(listitem != 5)
  1249. {
  1250. new msg[128];
  1251. format(msg, sizeof(msg), "Are you sure you want to make a gang? \
  1252. \nGang Name : %s \
  1253. \nGang Tag : [%s] \
  1254. \nGang Colour : {%s}%s", TempGangName[playerid], TempGangTag[playerid], TempGangColour[playerid], TempGangColour[playerid]);
  1255. ShowPlayerDialog(playerid, DIALOG_CREATEGANG_CONFIRM, DIALOG_STYLE_MSGBOX, "Gang System - Create Gang", msg, "Sure", "Cancel");
  1256. }
  1257. }
  1258. }
  1259. case DIALOG_HEXCOLOUR:
  1260. {
  1261. if(response)
  1262. {
  1263. if(strlen(inputtext) != 6)
  1264. ShowPlayerDialog(playerid, DIALOG_HEXCOLOUR, DIALOG_STYLE_INPUT, "Gang System - Hex Colour", "{FF0000}Hex colour must be 6 character!\n{FFFFFF}Enter hexadecimal colour below :", "Submit", "Back");
  1265. else
  1266. {
  1267. if(sscanf(inputtext, "h", TempGangColour[playerid]))
  1268. ShowPlayerDialog(playerid, DIALOG_HEXCOLOUR, DIALOG_STYLE_INPUT, "Gang System - Hex Colour", "{FF0000}Invalid HEX colour!\n{FFFFFF}Enter hexadecimal colour below :", "Submit", "Back");
  1269. else
  1270. {
  1271. new msg[128];
  1272. format(msg, sizeof(msg), "Are you sure you want to make a gang? \
  1273. \nGang Name : %s \
  1274. \nGang Tag : [%s] \
  1275. \nGang Colour : {%s}%s", TempGangName[playerid], TempGangTag[playerid], TempGangColour[playerid], TempGangColour[playerid]);
  1276. ShowPlayerDialog(playerid, DIALOG_CREATEGANG_CONFIRM, DIALOG_STYLE_MSGBOX, "Gang System - Create Gang", msg, "Sure", "Cancel");
  1277. }
  1278. }
  1279. }
  1280. else
  1281. {
  1282. ShowPlayerDialog(playerid, DIALOG_GANGCOLOUR, DIALOG_STYLE_LIST, "Gang System - Gang Colour",
  1283. "{00FFFF}Aqua \n{000000}Black \n{0000FF}Blue \n{A52A2A}Brown \n{FF0000}Red \n{FFFFFF}Use HEX Colour", "Choose", "Cancel");
  1284. }
  1285. }
  1286. case DIALOG_CREATEGANG_CONFIRM:
  1287. {
  1288. if(response)
  1289. {
  1290. new bool:found = false;
  1291. foreach(new i : Gangs)
  1292. {
  1293. if(!strcmp(Gang[i][GangName], TempGangName[playerid], true))
  1294. {
  1295. found = true;
  1296. SendClientMessage(playerid, COLOR_RED, "Gang Name is already taken!");
  1297. break;
  1298. }
  1299. if(!strcmp(Gang[i][GangTag], TempGangTag[playerid], true))
  1300. {
  1301. found = true;
  1302. SendClientMessage(playerid, COLOR_RED, "Gang Tag is already taken!");
  1303. break;
  1304. }
  1305. }
  1306. if(!found)
  1307. {
  1308. new query[256];
  1309. format(query, sizeof(query), "INSERT INTO `gang` (`name`, `color`, `tag`) VALUES('%s', '%s', '%s')", Escape(TempGangName[playerid]), Escape(TempGangColour[playerid]), Escape(TempGangTag[playerid]));
  1310. mysql_query(query, -1, 0, connection);
  1311. mysql_store_result(connection);
  1312. new i = Iter_Free(Gangs);
  1313. Gang[i][GangColor][0] = EOS;
  1314. strcat(Gang[i][GangColor][0], TempGangColour[playerid]);
  1315. Gang[i][GangID] = mysql_insert_id(connection);
  1316. Gang[i][GangName] = TempGangName[playerid];
  1317. Gang[i][GangScore] = 0;
  1318. Gang[i][GangTag] = TempGangTag[playerid];
  1319. Gang[i][CurrentZone] = -1;
  1320. Player[playerid][PlayerGang] = i;
  1321. Player[playerid][PlayerStatus] = GANG_LEADER;
  1322. Iter_Add(Gangs, i);
  1323. format(query, sizeof(query), "{%s}[%s]%s {A7C4E4}Gang has been created!", TempGangColour[playerid], TempGangTag[playerid], TempGangName[playerid]);
  1324. SendClientMessageToAll(-1, query);
  1325. mysql_free_result(connection);
  1326. SaveStats(playerid);
  1327. }
  1328. }
  1329. }
  1330. case DIALOG_GCP:
  1331. {
  1332. if(response)
  1333. {
  1334. switch(listitem)
  1335. {
  1336. case 3:
  1337. cmd_gangmembers(playerid, "");
  1338. case 4:
  1339. cmd_territory(playerid, "");
  1340. }
  1341. }
  1342. }
  1343. }
  1344. return 1;
  1345. }
  1346.  
  1347. public OnPlayerEnterArea(playerid, areaid)
  1348. {
  1349. foreach(new i : GangZones)
  1350. {
  1351. if(areaid == GangZone[i][ZoneArea])
  1352. {
  1353. PlayerTextDrawSetString(playerid, Player[playerid][TDZone][0], GangZone[i][ZoneName]);
  1354. new msg[128];
  1355. if(GangZone[i][ZoneOwner] == -1)
  1356. format(msg, sizeof(msg), "Owned by : ~r~Unowned");
  1357. else
  1358. format(msg, sizeof(msg), "Owned by : ~r~%s", Gang[GangZone[i][ZoneOwner]][GangName]);
  1359. PlayerTextDrawSetString(playerid, Player[playerid][TDZone][1], msg);
  1360. PlayerTextDrawShow(playerid, Player[playerid][TDZone][0]);
  1361. PlayerTextDrawShow(playerid, Player[playerid][TDZone][1]);
  1362. return 1;
  1363. }
  1364. }
  1365. return 1;
  1366. }
  1367.  
  1368. public OnPlayerLeaveArea(playerid, areaid)
  1369. {
  1370. PlayerTextDrawHide(playerid, Player[playerid][TDZone][0]);
  1371. PlayerTextDrawHide(playerid, Player[playerid][TDZone][1]);
  1372. if(Player[playerid][PlayerGang] != -1)
  1373. {
  1374. new zone = Gang[Player[playerid][PlayerGang]][CurrentZone], total = -1;
  1375. if(zone != -1)
  1376. {
  1377. total = 0;
  1378. foreach(new p : Player)
  1379. {
  1380. if(Player[p][PlayerGang] == Player[playerid][PlayerGang])
  1381. {
  1382. if(Area_GetPlayerAreas(p, 0) == GangZone[zone][ZoneArea] && !IsPlayerInAnyVehicle(p))
  1383. total++;
  1384. }
  1385. }
  1386. }
  1387. if(total == 0)
  1388. {
  1389. new msg[128];
  1390. format(msg, sizeof(msg), "{A7C4E4}%s gang failed to capture %s zone!", Gang[Player[playerid][PlayerGang]][GangName], GangZone[zone][ZoneName]);
  1391. SendClientMessageToAll(-1, msg);
  1392. format(msg, sizeof(msg), "{A7C4E4}%s zone will be locked for %d minutes!", GangZone[zone][ZoneName], LOCKED_MINUTES);
  1393. SendClientMessageToAll(-1, msg);
  1394. Gang[Player[playerid][PlayerGang]][CurrentZone] = -1;
  1395. GangZone[zone][ZoneLocked] = GetTickCount();
  1396. GangZone[zone][ZoneStatus] = false;
  1397. GangZoneStopFlashForAll(GangZone[zone][ZoneHolder]);
  1398. }
  1399. }
  1400. return 1;
  1401. }
  1402.  
  1403. forward AttackZone(gangid, zoneid);
  1404. public AttackZone(gangid, zoneid)
  1405. {
  1406. if(Gang[gangid][CurrentZone] == zoneid && Iter_Contains(Gangs, gangid))
  1407. {
  1408. Gang[gangid][GangTimer]--;
  1409. if(Gang[gangid][GangTimer] > 0)
  1410. {
  1411. new minutes = Gang[gangid][GangTimer] / 60, seconds = Gang[gangid][GangTimer] % 60, msg[10];
  1412. format(msg, sizeof(msg), "%02d:%02d", minutes, seconds);
  1413. foreach(new p : Player)
  1414. {
  1415. if(Player[p][PlayerGang] == gangid)
  1416. PlayerTextDrawSetString(p, Player[p][CaptureTD][1], msg);
  1417. }
  1418. }
  1419. else
  1420. {
  1421. KillTimer(GangZone[zoneid][ZoneTimer]);
  1422. new msg[128];
  1423. format(msg, sizeof(msg), "Owned by : ~r~%s", Gang[gangid][GangName]);
  1424. foreach(new p : Player)
  1425. {
  1426. if(Player[p][PlayerGang] == gangid)
  1427. {
  1428. PlayerTextDrawHide(p, Player[p][CaptureTD][0]);
  1429. PlayerTextDrawHide(p, Player[p][CaptureTD][1]);
  1430. }
  1431. if(Area_GetPlayerAreas(p, 0) == GangZone[zoneid][ZoneArea])
  1432. PlayerTextDrawSetString(p, Player[p][TDZone][1], msg);
  1433.  
  1434. }
  1435. GangZoneStopFlashForAll(GangZone[zoneid][ZoneHolder]);
  1436. new colour[9];
  1437. format(colour, 9, "%s50", Gang[gangid][GangColor]);
  1438. GangZoneShowForAll(GangZone[zoneid][ZoneHolder], HexToInt(colour));
  1439. GangZone[zoneid][ZoneOwner] = gangid;
  1440. format(msg, sizeof(msg), "{A7C4E4} %s Gang succesfully captured %s zone!", Gang[gangid][GangName], GangZone[zoneid][ZoneName]);
  1441. SendClientMessageToAll(-1, msg);
  1442. format(msg, sizeof(msg), "{A7C4E4} %s zone will be locked for %d minutes!", GangZone[zoneid][ZoneName], LOCKED_MINUTES);
  1443. SendClientMessageToAll(-1, msg);
  1444. Gang[gangid][CurrentZone] = -1;
  1445. GangZone[zoneid][ZoneLocked] = GetTickCount();
  1446. GangZone[zoneid][ZoneStatus] = false;
  1447. Gang[gangid][GangScore]+=5;
  1448. }
  1449. }
  1450. else
  1451. {
  1452. foreach(new p : Player)
  1453. {
  1454. if(Player[p][PlayerGang] == gangid)
  1455. {
  1456. PlayerTextDrawHide(p, Player[p][CaptureTD][0]);
  1457. PlayerTextDrawHide(p, Player[p][CaptureTD][1]);
  1458. }
  1459. }
  1460. KillTimer(GangZone[zoneid][ZoneTimer]);
  1461. GangZoneStopFlashForAll(GangZone[zoneid][ZoneHolder]);
  1462. }
  1463. return 1;
  1464. }
  1465.  
  1466. forward AutoSave();
  1467. public AutoSave()
  1468. {
  1469. foreach(new i : Player)
  1470. SaveStats(i);
  1471. foreach(new i : Gangs)
  1472. SaveGang(i);
  1473. foreach(new i : GangZones)
  1474. SaveZone(i);
  1475. return 1;
  1476. }
  1477.  
  1478. COMMAND:gangcmds(playerid, params[])
  1479. {
  1480. new msg[512];
  1481. strcat(msg, "{FFFF00}/creategang /gangcolor /changeleader /territory /gangmembers \n");
  1482. strcat(msg, "{ffff00}/gcp /leavegang /disbandgang /topgang /gangrank /promotestaff \n");
  1483. strcat(msg, "{FFFF00}/demotestaff /createzone /ganginvite /acceptgang /g /capture \n");
  1484. strcat(msg, "{FFFF00}/okickmember /kickmember\n");
  1485. ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Gang System - Commands", msg, "Close", "");
  1486. }
  1487.  
  1488. forward LoadFS();
  1489. public LoadFS()
  1490. {
  1491. print("/n================= | Blade Gaming Gang System! | =================");
  1492. connection = mysql_init(LOG_ALL);
  1493. if(!mysql_connect(HOSTNAME, USERNAME, PASSWORD, DATABASENAME, connection, 1))
  1494. {
  1495. print("\n================= | WARNING | =================");
  1496. print("==== | Failed to connect to MySQL Database | ====");
  1497. print("================= | WARNING | =================\n");
  1498. SendRconCommand("exit");
  1499. }
  1500. else
  1501. {
  1502. print("\n================= | Blade Gaming Gang System! | =================");
  1503. print("============== | Successfully Connected to MySQL | ==============\n");
  1504. mysql_query("SELECT * FROM `zone`", -1, 0, connection);
  1505. mysql_store_result(connection);
  1506. new count = mysql_num_rows(connection), time = GetTickCount(), i, baris[1000];
  1507. new id,
  1508. Float:mix,
  1509. Float:miy,
  1510. Float:maxx,
  1511. Float:may,
  1512. own,
  1513. nam[128]
  1514. ;
  1515. while(mysql_fetch_row(baris, "|", connection))
  1516. {
  1517. sscanf(baris, "p<|>dffffds[128]", id, mix, miy, maxx, may, own, nam);
  1518. i = Iter_Free(GangZones);
  1519. GangZone[i][ZoneMinPos][0] = mix;
  1520. GangZone[i][ZoneMinPos][1] = miy;
  1521. GangZone[i][ZoneMaxPos][0] = maxx;
  1522. GangZone[i][ZoneMaxPos][1] = may;
  1523. GangZone[i][ZoneOwner] = GetGangID(own);
  1524. GangZone[i][ZoneID] = id;
  1525. format(GangZone[i][ZoneName], 50, "%s", nam);
  1526. GangZone[i][ZoneArea] = Area_AddBox(GangZone[i][ZoneMinPos][0], GangZone[i][ZoneMinPos][1], GangZone[i][ZoneMaxPos][0], GangZone[i][ZoneMaxPos][1]);
  1527. GangZone[i][ZoneHolder] = GangZoneCreate(GangZone[i][ZoneMinPos][0], GangZone[i][ZoneMinPos][1], GangZone[i][ZoneMaxPos][0], GangZone[i][ZoneMaxPos][1]);
  1528. GangZone[i][ZoneLocked] = 0;
  1529. GangZone[i][ZoneStatus] = false;
  1530. Iter_Add(GangZones, i);
  1531. }
  1532. mysql_free_result(connection);
  1533. printf("\n================= | Blade Gaming Gang System | =================");
  1534. printf("========== | %d Zone(s) Succesfully Loaded (%d ms)! | ==========\n", count, (GetTickCount() - time));
  1535. mysql_query("SELECT * FROM `gang`", -1, 0, connection);
  1536. mysql_store_result(connection);
  1537. count = mysql_num_rows(connection), time = GetTickCount();
  1538. new col[7],
  1539. ta[5],
  1540. sc;
  1541.  
  1542. while(mysql_fetch_row(baris, "|", connection))
  1543. {
  1544. sscanf(baris, "p<|>ds[128]s[7]s[5]d", id, nam, col, ta, sc);
  1545. i = Iter_Free(Gangs);
  1546. Gang[i][GangID] = id;
  1547. Gang[i][GangScore] = sc;
  1548. Gang[i][CurrentZone] = -1;
  1549. format(Gang[i][GangName], 30, "%s", nam);
  1550. format(Gang[i][GangColor], 7, "%s", col);
  1551. format(Gang[i][GangTag], 4, "%s", ta);
  1552. Iter_Add(Gangs, i);
  1553. }
  1554. printf("\n================== | Blade Gaming Gang System | ==================");
  1555. printf("=========== | %d Gang(s) Succesfully Loaded (%d ms)! | ===========\n", count, (GetTickCount() - time));
  1556. foreach(new p : Player)
  1557. {
  1558. CallLocalFunction("OnPlayerConnect", "d", p);
  1559. }
  1560. AutoSaveTimer = SetTimer("AutoSave", AUTOSAVE * 60000, true);
  1561. mysql_free_result(connection);
  1562. }
  1563. return 1;
  1564. }
  1565.  
  1566. /* SQL DUMP <X-Gang.sql>
  1567. -- phpMyAdmin SQL Dump
  1568. -- version 4.2.7.1
  1569. -- http://www.phpmyadmin.net
  1570. -- --------------------------------------------------------
  1571.  
  1572. --
  1573. -- Table structure for table `gang`
  1574. --
  1575.  
  1576. CREATE TABLE IF NOT EXISTS `gang` (
  1577. `id` int(10) NOT NULL,
  1578. `name` varchar(30) NOT NULL,
  1579. `color` varchar(6) NOT NULL,
  1580. `tag` varchar(3) NOT NULL,
  1581. `score` int(10) NOT NULL DEFAULT '0'
  1582. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  1583.  
  1584. -- --------------------------------------------------------
  1585.  
  1586. --
  1587. -- Table structure for table `member`
  1588. --
  1589.  
  1590. CREATE TABLE IF NOT EXISTS `member` (
  1591. `id` int(10) NOT NULL,
  1592. `name` varchar(30) NOT NULL,
  1593. `status` int(1) NOT NULL DEFAULT '1',
  1594. `gang` int(10) NOT NULL DEFAULT '-1'
  1595. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  1596.  
  1597. -- --------------------------------------------------------
  1598.  
  1599. --
  1600. -- Table structure for table `zone`
  1601. --
  1602.  
  1603. CREATE TABLE IF NOT EXISTS `zone` (
  1604. `id` int(10) NOT NULL,
  1605. `minx` varchar(10) NOT NULL,
  1606. `miny` varchar(10) NOT NULL,
  1607. `maxx` varchar(10) NOT NULL,
  1608. `maxy` varchar(10) NOT NULL,
  1609. `owner` int(10) NOT NULL DEFAULT '-1',
  1610. `name` varchar(50) NOT NULL DEFAULT 'Undefined Zone'
  1611. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  1612.  
  1613. --
  1614. -- Indexes for dumped tables
  1615. --
  1616.  
  1617. --
  1618. -- Indexes for table `gang`
  1619. --
  1620. ALTER TABLE `gang`
  1621. ADD PRIMARY KEY (`id`);
  1622.  
  1623. --
  1624. -- Indexes for table `member`
  1625. --
  1626. ALTER TABLE `member`
  1627. ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `name` (`name`);
  1628.  
  1629. --
  1630. -- Indexes for table `zone`
  1631. --
  1632. ALTER TABLE `zone`
  1633. ADD PRIMARY KEY (`id`);
  1634.  
  1635. --
  1636. -- AUTO_INCREMENT for dumped tables
  1637. --
  1638.  
  1639. --
  1640. -- AUTO_INCREMENT for table `gang`
  1641. --
  1642. ALTER TABLE `gang`
  1643. MODIFY `id` int(10) NOT NULL AUTO_INCREMENT;
  1644. --
  1645. -- AUTO_INCREMENT for table `member`
  1646. --
  1647. ALTER TABLE `member`
  1648. MODIFY `id` int(10) NOT NULL AUTO_INCREMENT;
  1649. --
  1650. -- AUTO_INCREMENT for table `zone`
  1651. --
  1652. ALTER TABLE `zone`
  1653. MODIFY `id` int(10) NOT NULL AUTO_INCREMENT;
  1654. -- ------------------------------------------------
  1655.  
  1656. */
  1657.  
  1658. public OnPlayerStateChange(playerid, newstate, oldstate)
  1659. {
  1660. if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
  1661. {
  1662. new i = Player[playerid][PlayerGang],
  1663. z;
  1664. if(i != -1)
  1665. {
  1666. z = Gang[i][CurrentZone];
  1667. if(z != -1 && Area_GetPlayerAreas(playerid, 0) == GangZone[z][ZoneArea])
  1668. {
  1669. SendClientMessage(playerid, COLOR_RED, "Sorry, entering vehicle whilst capturing gang zone is not allowed!");
  1670. PlayerTextDrawHide(playerid, Player[playerid][TDZone][0]);
  1671. PlayerTextDrawHide(playerid, Player[playerid][TDZone][1]);
  1672. new total = 0;
  1673. foreach(new p : Player)
  1674. {
  1675. if(Player[p][PlayerGang] == Player[playerid][PlayerGang])
  1676. {
  1677. if(Area_GetPlayerAreas(p, 0) == GangZone[z][ZoneArea] && !IsPlayerInAnyVehicle(p))
  1678. total++;
  1679. }
  1680. }
  1681. if(total == 0)
  1682. {
  1683. new msg[128];
  1684. format(msg, sizeof(msg), "{a7C4E4}%s gang failed to capture %s zone!", Gang[i][GangName], GangZone[z][ZoneName]);
  1685. SendClientMessageToAll(-1, msg);
  1686. format(msg, sizeof(msg), "{A7C4E4}%s zone will be locked for %d minutes!", GangZone[z][ZoneName], LOCKED_MINUTES);
  1687. SendClientMessageToAll(-1, msg);
  1688. Gang[i][CurrentZone] = -1;
  1689. GangZone[z][ZoneLocked] = GetTickCount();
  1690. GangZone[z][ZoneStatus] = false;
  1691. GangZoneStopFlashForAll(GangZone[z][ZoneHolder]);
  1692. }
  1693. }
  1694. }
  1695. }
  1696. return 1;
  1697. }
Add Comment
Please, Sign In to add comment