turfs.pwn 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922
  1. /*
  2. /$$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$$
  3. | $$$ | $$ /$$__ $$ | $$__ $$| $$__ $$
  4. | $$$$| $$| $$ \__/ | $$ \ $$| $$ \ $$
  5. | $$ $$ $$| $$ /$$$$ /$$$$$$| $$$$$$$/| $$$$$$$/
  6. | $$ $$$$| $$|_ $$|______/| $$__ $$| $$____/
  7. | $$\ $$$| $$ \ $$ | $$ \ $$| $$
  8. | $$ \ $$| $$$$$$/ | $$ | $$| $$
  9. |__/ \__/ \______/ |__/ |__/|__/
  10. Turfs System
  11. Next Generation Gaming, LLC
  12. (created by Next Generation Gaming Development Team)
  13. * Copyright (c) 2014, Next Generation Gaming, LLC
  14. *
  15. * All rights reserved.
  16. *
  17. * Redistribution and use in source and binary forms, with or without modification,
  18. * are not permitted in any case.
  19. *
  20. *
  21. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  24. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  25. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  26. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  27. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  28. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  29. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  30. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  31. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32. */
  33. #include <YSI\y_hooks>
  34. SaveTurfWar(turfid)
  35. {
  36. new string[128];
  37. mysql_format(MainPipeline, string, sizeof(string), "UPDATE `turfs` SET data='%e|%d|%d|%d|%d|%f|%f|%f|%f' WHERE id = %d",
  38. TurfWars[turfid][twName],
  39. TurfWars[turfid][twOwnerId],
  40. TurfWars[turfid][twLocked],
  41. TurfWars[turfid][twSpecial],
  42. TurfWars[turfid][twVulnerable],
  43. TurfWars[turfid][twMinX],
  44. TurfWars[turfid][twMinY],
  45. TurfWars[turfid][twMaxX],
  46. TurfWars[turfid][twMaxY],
  47. turfid + 1);
  48. mysql_tquery(MainPipeline, string, "OnQueryFinish", "i", SENDDATA_THREAD);
  49. return 1;
  50. }
  51. SaveTurfWars()
  52. {
  53. for(new i; i < MAX_TURFS; i++)
  54. {
  55. SaveTurfWar(i);
  56. }
  57. }
  58. forward OnLoadTurfWars();
  59. public OnLoadTurfWars()
  60. {
  61. new i, rows, tmp[128];
  62. cache_get_row_count(rows);
  63. while(i < rows)
  64. {
  65. cache_get_value_name(i, "data", tmp);
  66. if(!sscanf(tmp, "p<|>s[64]iiiiffff",
  67. TurfWars[i][twName],
  68. TurfWars[i][twOwnerId],
  69. TurfWars[i][twLocked],
  70. TurfWars[i][twSpecial],
  71. TurfWars[i][twVulnerable],
  72. TurfWars[i][twMinX],
  73. TurfWars[i][twMinY],
  74. TurfWars[i][twMaxX],
  75. TurfWars[i][twMaxY]
  76. )) CreateTurfWarsZone(0, i++);
  77. }
  78. if(i) printf("[LoadTurfWars] %d turfs loaded.", i);
  79. else printf("[LoadTurfWars] Failed to load any turfs.");
  80. return 1;
  81. }
  82. stock LoadTurfWars()
  83. {
  84. printf("[Turf Wars] Loading turfs from the database, please wait...");
  85. mysql_tquery(MainPipeline, "SELECT * FROM `turfs`", "OnLoadTurfWars", "");
  86. }
  87. InitTurfWars()
  88. {
  89. for(new i = 0; i < MAX_TURFS; i++)
  90. {
  91. TurfWars[i][twOwnerId] = -1;
  92. TurfWars[i][twActive] = 0;
  93. TurfWars[i][twLocked] = 0;
  94. TurfWars[i][twSpecial] = 0;
  95. TurfWars[i][twTimeLeft] = 0;
  96. TurfWars[i][twVulnerable] = 12;
  97. TurfWars[i][twAttemptId] = -1;
  98. TurfWars[i][twGangZoneId] = -1;
  99. TurfWars[i][twAreaId] = -1;
  100. TurfWars[i][twFlash] = -1;
  101. TurfWars[i][twFlashColor] = 0;
  102. }
  103. return 1;
  104. }
  105. CreateTurfWarsZone(forcesync, zone)
  106. {
  107. if(TurfWars[zone][twMinX] != 0.0 && TurfWars[zone][twMinY] != 0.0 && TurfWars[zone][twMaxX] != 0.0 && TurfWars[zone][twMaxY] != 0.0) {
  108. TurfWars[zone][twGangZoneId] = GangZoneCreate(TurfWars[zone][twMinX],TurfWars[zone][twMinY],TurfWars[zone][twMaxX],TurfWars[zone][twMaxY]);
  109. TurfWars[zone][twAreaId] = CreateDynamicRectangle(TurfWars[zone][twMinX],TurfWars[zone][twMinY],TurfWars[zone][twMaxX],TurfWars[zone][twMaxY],-1,-1,-1);
  110. }
  111. if(forcesync) {
  112. SyncTurfWarsRadarToAll();
  113. }
  114. SaveTurfWar(zone);
  115. }
  116. ResetTurfWarsZone(forcesync, zone)
  117. {
  118. TurfWars[zone][twActive] = 0;
  119. TurfWars[zone][twFlash] = -1;
  120. TurfWars[zone][twFlashColor] = 0;
  121. TurfWars[zone][twTimeLeft] = 0;
  122. TurfWars[zone][twAttemptId] = -1;
  123. if(forcesync) {
  124. SyncTurfWarsRadarToAll();
  125. }
  126. SaveTurfWar(zone);
  127. }
  128. SetOwnerTurfWarsZone(forcesync, zone, ownerid)
  129. {
  130. TurfWars[zone][twOwnerId] = ownerid;
  131. if(forcesync) {
  132. SyncTurfWarsRadarToAll();
  133. }
  134. SaveTurfWar(zone);
  135. }
  136. DestroyTurfWarsZone(zone)
  137. {
  138. TurfWars[zone][twActive] = 0;
  139. if(TurfWars[zone][twGangZoneId] != -1) {
  140. GangZoneDestroy(TurfWars[zone][twGangZoneId]);
  141. }
  142. if(TurfWars[zone][twAreaId] != -1) {
  143. if(IsValidDynamicArea(TurfWars[zone][twAreaId])) DestroyDynamicArea(TurfWars[zone][twAreaId]);
  144. }
  145. TurfWars[zone][twMinX] = 0;
  146. TurfWars[zone][twMinY] = 0;
  147. TurfWars[zone][twMaxX] = 0;
  148. TurfWars[zone][twMaxY] = 0;
  149. TurfWars[zone][twOwnerId] = -1;
  150. TurfWars[zone][twGangZoneId] = -1;
  151. TurfWars[zone][twAreaId] = -1;
  152. TurfWars[zone][twFlash] = -1;
  153. TurfWars[zone][twFlashColor] = 0;
  154. TurfWars[zone][twActive] = 0;
  155. TurfWars[zone][twLocked] = 0;
  156. TurfWars[zone][twSpecial] = 0;
  157. TurfWars[zone][twTimeLeft] = 0;
  158. TurfWars[zone][twAttemptId] = -1;
  159. TurfWars[zone][twVulnerable] = 12;
  160. SyncTurfWarsRadarToAll();
  161. SaveTurfWar(zone);
  162. }
  163. GetPlayerTurfWarsZone(playerid)
  164. {
  165. for(new i = 0; i < MAX_TURFS; i++) {
  166. if(IsPlayerInDynamicArea(playerid, TurfWars[i][twAreaId])) {
  167. return i;
  168. }
  169. }
  170. return -1;
  171. }
  172. ShutdownTurfWarsZone(zone)
  173. {
  174. new string[128];
  175. foreach(new i: Player)
  176. {
  177. if(IsPlayerInDynamicArea(i, TurfWars[zone][twAreaId])) {
  178. format(string,sizeof(string),"Law Enforcement has attempted to shutdown this turf!");
  179. SendClientMessageEx(i,COLOR_YELLOW,string);
  180. }
  181. }
  182. ResetTurfWarsZone(0, zone);
  183. TurfWars[zone][twActive] = 1;
  184. if(TurfWars[zone][twSpecial] != 2) {
  185. TurfWars[zone][twTimeLeft] = 300;
  186. } else {
  187. TurfWars[zone][twTimeLeft] = 600;
  188. }
  189. TurfWars[zone][twVulnerable] = 0;
  190. TurfWars[zone][twAttemptId] = -2;
  191. TurfWars[zone][twFlash] = 1;
  192. TurfWars[zone][twFlashColor] = 0;
  193. SyncTurfWarsRadarToAll();
  194. SaveTurfWar(zone);
  195. }
  196. TakeoverTurfWarsZone(iGroupID, zone)
  197. {
  198. new string[128];
  199. foreach(new i: Player)
  200. {
  201. if(IsPlayerInDynamicArea(i, TurfWars[zone][twAreaId])) {
  202. format(string,sizeof(string),"%s has attempted to takeover this turf for their own!",arrGroupData[iGroupID][g_szGroupName]);
  203. SendClientMessageEx(i,COLOR_YELLOW,string);
  204. }
  205. }
  206. ResetTurfWarsZone(0, zone);
  207. TurfWars[zone][twActive] = 1;
  208. if(TurfWars[zone][twSpecial] != 2) {
  209. TurfWars[zone][twTimeLeft] = 300;
  210. } else {
  211. TurfWars[zone][twTimeLeft] = 600;
  212. }
  213. TurfWars[zone][twVulnerable] = 0;
  214. TurfWars[zone][twAttemptId] = iGroupID;
  215. TurfWars[zone][twFlash] = 1;
  216. TurfWars[zone][twFlashColor] = arrGroupData[iGroupID][g_hDutyColour];
  217. SyncTurfWarsRadarToAll();
  218. }
  219. CaptureTurfWarsZone(iGroupID, zone)
  220. {
  221. new string[128];
  222. foreach(new i: Player)
  223. {
  224. if(turfWarsMiniMap[i] == 1)
  225. {
  226. turfWarsMiniMap[i] = 0;
  227. SetPlayerToTeamColor(i);
  228. }
  229. if(IsPlayerInDynamicArea(i, TurfWars[zone][twAreaId])) {
  230. if((0 <= iGroupID < MAX_GROUPS)) {
  231. format(string,sizeof(string),"%s has successfully claimed this turf for their own!",arrGroupData[iGroupID][g_szGroupName]);
  232. SendClientMessageEx(i,COLOR_RED,string);
  233. //SendAudioToPlayer(i, 62, 100);
  234. }
  235. else {
  236. SendClientMessageEx(i,COLOR_RED,"Law Enforcement has successfully shut down this turf!");
  237. }
  238. }
  239. if(PlayerInfo[i][pGangModerator] >= 1) {
  240. if((0 <= iGroupID < MAX_GROUPS)) {
  241. format(string,sizeof(string),"%s has successfully claimed turf %d",arrGroupData[iGroupID][g_szGroupName], zone);
  242. SendClientMessageEx(i,COLOR_RED,string);
  243. }
  244. else {
  245. format(string,sizeof(string),"Law Enforcement has successfully shut down turf %d", zone);
  246. SendClientMessageEx(i,COLOR_RED,string);
  247. }
  248. }
  249. }
  250. if(TurfWars[zone][twOwnerId] != -2) {
  251. if((0 <= iGroupID < MAX_GROUPS)) {
  252. TurfWars[zone][twOwnerId] = iGroupID;
  253. } else {
  254. TurfWars[zone][twOwnerId] = -1;
  255. }
  256. }
  257. SaveTurfWar(zone);
  258. }
  259. ExtortionTurfsWarsZone(playerid, type, money)
  260. {
  261. if(GetPlayerTurfWarsZone(playerid) != -1)
  262. {
  263. if(GetPlayerInterior(playerid) != 0) return 1; // Interior fix
  264. new
  265. szItemName[32],
  266. tw = GetPlayerTurfWarsZone(playerid),
  267. ownerid = TurfWars[tw][twOwnerId],
  268. famid = PlayerInfo[playerid][pMember];
  269. szMiscArray[0] = 0;
  270. if(TurfWars[tw][twOwnerId] == INVALID_GROUP_ID) return 1;
  271. if(famid == ownerid) return 1;
  272. switch(type)
  273. {
  274. case 1: szItemName = "drugs";
  275. case 2: szItemName = "vests";
  276. case 3: szItemName = "weapons";
  277. case 4: szItemName = "yourself";
  278. case 5: szItemName = "fireworks";
  279. case 6: szItemName = "sex";
  280. case 7: szItemName = "items";
  281. }
  282. arrGroupData[ownerid][g_iBudget] += money/4;
  283. GivePlayerCash(playerid, -money/4);
  284. format(szMiscArray, sizeof(szMiscArray), "* You have been taxed $%d for selling %s on %s's turf.", money/4, szItemName, arrGroupData[ownerid][g_szGroupName]);
  285. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, szMiscArray);
  286. }
  287. return 1;
  288. }
  289. ShowTurfWarsRadar(playerid)
  290. {
  291. if(turfWarsRadar[playerid] == 1) { return 1; }
  292. turfWarsRadar[playerid] = 1;
  293. SyncTurfWarsRadar(playerid);
  294. return 1;
  295. }
  296. HideTurfWarsRadar(playerid)
  297. {
  298. if(turfWarsRadar[playerid] == 0) { return 1; }
  299. for(new i = 0; i < MAX_TURFS; i++) {
  300. if(TurfWars[i][twGangZoneId] != -1) {
  301. GangZoneHideForPlayer(playerid,TurfWars[i][twGangZoneId]);
  302. }
  303. }
  304. turfWarsRadar[playerid] = 0;
  305. return 1;
  306. }
  307. SyncTurfWarsRadarToAll()
  308. {
  309. foreach(new i: Player)
  310. {
  311. SyncTurfWarsRadar(i);
  312. }
  313. }
  314. SyncTurfWarsRadar(playerid)
  315. {
  316. if(turfWarsRadar[playerid] == 0) { return 1; }
  317. HideTurfWarsRadar(playerid);
  318. turfWarsRadar[playerid] = 1;
  319. for(new i = 0; i < MAX_TURFS; i++)
  320. {
  321. if(TurfWars[i][twGangZoneId] != -1)
  322. {
  323. if(TurfWars[i][twOwnerId] >= 0 && TurfWars[i][twOwnerId] < MAX_GROUPS)
  324. {
  325. GangZoneShowForPlayer(playerid, TurfWars[i][twGangZoneId], arrGroupData[TurfWars[i][twOwnerId]][g_hDutyColour] * 256 + 170);
  326. }
  327. else
  328. {
  329. GangZoneShowForPlayer(playerid,TurfWars[i][twGangZoneId],COLOR_BLACK);
  330. }
  331. if(TurfWars[i][twFlash] == 1)
  332. {
  333. GangZoneFlashForPlayer(playerid, TurfWars[i][twGangZoneId], TurfWars[i][twFlashColor] * 256 + 170);
  334. }
  335. else
  336. {
  337. GangZoneStopFlashForPlayer(playerid, TurfWars[i][twGangZoneId]);
  338. }
  339. }
  340. }
  341. return 1;
  342. }
  343. TurfWarsEditTurfsSelection(playerid)
  344. {
  345. szMiscArray[0] = 0;
  346. for(new i = 0; i < MAX_TURFS; i++)
  347. {
  348. if(TurfWars[i][twOwnerId] != -1)
  349. {
  350. if(TurfWars[i][twOwnerId] < 0 || TurfWars[i][twOwnerId] > MAX_GROUPS)
  351. {
  352. format(szMiscArray,sizeof(szMiscArray),"%s%d) (Invalid Group)\n",szMiscArray,i/*,TurfWars[i][twName]*/);
  353. }
  354. else
  355. {
  356. format(szMiscArray,sizeof(szMiscArray),"%s%d) (%s)\n",szMiscArray,i,/*TurfWars[i][twName],*/arrGroupData[TurfWars[i][twOwnerId]][g_szGroupName]);
  357. }
  358. }
  359. else
  360. {
  361. format(szMiscArray,sizeof(szMiscArray),"%s%d) (%s)\n",szMiscArray,i,/*TurfWars[i][twName],*/"Vacant");
  362. }
  363. }
  364. ShowPlayerDialogEx(playerid,TWEDITTURFSSELECTION,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Selection Menu:",szMiscArray,"Select","Back");
  365. }
  366. hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  367. if(arrAntiCheat[playerid][ac_iFlags][AC_DIALOGSPOOFING] > 0) return 1;
  368. szMiscArray[0] = 0;
  369. switch(dialogid)
  370. {
  371. case TWADMINMENU: // Turf Wars System
  372. {
  373. if(response == 1)
  374. {
  375. switch(listitem)
  376. {
  377. case 0:
  378. {
  379. TurfWarsEditTurfsSelection(playerid);
  380. }
  381. /*case 1:
  382. {
  383. TurfWarsEditFColorsSelection(playerid);
  384. }*/
  385. }
  386. }
  387. }
  388. case TWEDITTURFSSELECTION:
  389. {
  390. if(response == 1)
  391. {
  392. for(new i = 0; i < MAX_TURFS; i++)
  393. {
  394. if(listitem == i)
  395. {
  396. SetPVarInt(playerid, "EditingTurfs", i);
  397. ShowPlayerDialogEx(playerid,TWEDITTURFSMENU,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Menu:","Edit Dimensions...\nEdit Owners...\nEdit Vulnerable Time...\nEdit Locked...\nEdit Perks...\nReset War...\nDestroy Turf","Select","Back");
  398. }
  399. }
  400. }
  401. }
  402. case TWEDITTURFSMENU:
  403. {
  404. if(response == 1)
  405. {
  406. new tw = GetPVarInt(playerid, "EditingTurfs");
  407. switch(listitem)
  408. {
  409. case 0: // Edit Dim
  410. {
  411. SetPVarInt(playerid, "EditingTurfsStage", 1);
  412. SendClientMessageEx(playerid, COLOR_WHITE, "Goto a location and type (/savetwpos) to edit the West Wall.");
  413. }
  414. case 1: // Edit Owner
  415. {
  416. ShowPlayerDialogEx(playerid,TWEDITTURFSOWNER,DIALOG_STYLE_INPUT,"Turf Wars - Edit Turfs Owner Menu:","Please enter a group ID that you wish to assign to this turf:\n\nHint: Enter -1 if you wish to vacant the turf.","Change","Back");
  417. }
  418. case 2: // Edit Vulnerablity
  419. {
  420. ShowPlayerDialogEx(playerid,TWEDITTURFSVUL,DIALOG_STYLE_INPUT,"Turf Wars - Edit Turfs Vulnerable Menu:","Please enter a Vulnerable countdown time for the turf:","Change","Back");
  421. }
  422. case 3: // Edit Locks
  423. {
  424. ShowPlayerDialogEx(playerid,TWEDITTURFSLOCKED,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Locked Menu:","Lock\nUnlock","Change","Back");
  425. }
  426. case 4: // Edit Perks
  427. {
  428. ShowPlayerDialogEx(playerid,TWEDITTURFSPERKS,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Perks Menu:","None\nExtortion\nDrugs","Change","Back");
  429. }
  430. case 5: // Reset War
  431. {
  432. ResetTurfWarsZone(1, tw);
  433. TurfWarsEditTurfsSelection(playerid);
  434. }
  435. case 6: // Destroy Turf
  436. {
  437. DestroyTurfWarsZone(tw);
  438. TurfWarsEditTurfsSelection(playerid);
  439. }
  440. }
  441. }
  442. else
  443. {
  444. TurfWarsEditTurfsSelection(playerid);
  445. }
  446. }
  447. case TWEDITTURFSOWNER:
  448. {
  449. if(response == 1)
  450. {
  451. new tw = GetPVarInt(playerid, "EditingTurfs");
  452. if(isnull(inputtext))
  453. {
  454. ShowPlayerDialogEx(playerid,TWEDITTURFSOWNER,DIALOG_STYLE_INPUT,"Turf Wars - Edit Turfs Owner Menu:","Please enter a group ID that you wish to assign to this turf:\n\nHint: Enter -1 if you wish to vacant the turf.","Change","Back");
  455. return 1;
  456. }
  457. if(strval(inputtext) < -1 || strval(inputtext) > MAX_GROUPS)
  458. {
  459. ShowPlayerDialogEx(playerid,TWEDITTURFSOWNER,DIALOG_STYLE_INPUT,"Turf Wars - Edit Turfs Owner Menu:","Please enter a group ID that you wish to assign to this turf:\n\nHint: Enter -1 if you wish to vacant the turf.","Change","Back");
  460. return 1;
  461. }
  462. SetOwnerTurfWarsZone(1, tw, strval(inputtext));
  463. SaveTurfWar(tw);
  464. ShowPlayerDialogEx(playerid,TWEDITTURFSMENU,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Menu:","Edit Dimensions...\nEdit Owners...\nEdit Vulnerable Time...\nEdit Locked...\nEdit Perks...\nReset War...\nDestroy Turf","Select","Back");
  465. }
  466. else
  467. {
  468. ShowPlayerDialogEx(playerid,TWEDITTURFSMENU,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Menu:","Edit Dimensions...\nEdit Owners...\nEdit Vulnerable Time...\nEdit Locked...\nEdit Perks...\nReset War...\nDestroy Turf","Select","Back");
  469. }
  470. }
  471. case TWEDITTURFSVUL:
  472. {
  473. if(response == 1)
  474. {
  475. new tw = GetPVarInt(playerid, "EditingTurfs");
  476. if(isnull(inputtext))
  477. {
  478. ShowPlayerDialogEx(playerid,TWEDITTURFSVUL,DIALOG_STYLE_INPUT,"Turf Wars - Edit Turfs Vulnerable Menu:","Please enter a Vulnerable countdown time for the turf:","Change","Back");
  479. return 1;
  480. }
  481. if(strval(inputtext) < 0)
  482. {
  483. ShowPlayerDialogEx(playerid,TWEDITTURFSVUL,DIALOG_STYLE_INPUT,"Turf Wars - Edit Turfs Vulnerable Menu:","Please enter a Vulnerable countdown time for the turf:","Change","Back");
  484. return 1;
  485. }
  486. TurfWars[tw][twVulnerable] = strval(inputtext);
  487. SaveTurfWar(tw);
  488. ShowPlayerDialogEx(playerid,TWEDITTURFSMENU,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Menu:","Edit Dimensions...\nEdit Owners...\nEdit Vulnerable Time...\nEdit Locked...\nEdit Perks...\nReset War...\nDestroy Turf","Select","Back");
  489. }
  490. else
  491. {
  492. ShowPlayerDialogEx(playerid,TWEDITTURFSMENU,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Menu:","Edit Dimensions...\nEdit Owners...\nEdit Vulnerable Time...\nEdit Locked...\nEdit Perks...\nReset War...\nDestroy Turf","Select","Back");
  493. }
  494. }
  495. case TWEDITTURFSLOCKED:
  496. {
  497. if(response == 1)
  498. {
  499. new tw = GetPVarInt(playerid, "EditingTurfs");
  500. switch(listitem)
  501. {
  502. case 0: // Lock
  503. {
  504. TurfWars[tw][twLocked] = 1;
  505. SaveTurfWar(tw);
  506. ShowPlayerDialogEx(playerid,TWEDITTURFSMENU,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Menu:","Edit Dimensions...\nEdit Owners...\nEdit Vulnerable Time...\nEdit Locked...\nEdit Perks...\nReset War...\nDestroy Turf","Select","Back");
  507. }
  508. case 1: // Unlock
  509. {
  510. TurfWars[tw][twLocked] = 0;
  511. SaveTurfWar(tw);
  512. ShowPlayerDialogEx(playerid,TWEDITTURFSMENU,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Menu:","Edit Dimensions...\nEdit Owners...\nEdit Vulnerable Time...\nEdit Locked...\nEdit Perks...\nReset War...\nDestroy Turf","Select","Back");
  513. }
  514. }
  515. }
  516. else
  517. {
  518. ShowPlayerDialogEx(playerid,TWEDITTURFSMENU,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Menu:","Edit Dimensions...\nEdit Owners...\nEdit Vulnerable Time...\nEdit Locked...\nEdit Perks...\nReset War...\nDestroy Turf","Select","Back");
  519. }
  520. }
  521. case TWEDITTURFSPERKS:
  522. {
  523. if(response == 1)
  524. {
  525. new tw = GetPVarInt(playerid, "EditingTurfs");
  526. TurfWars[tw][twSpecial] = listitem;
  527. SaveTurfWar(tw);
  528. ShowPlayerDialogEx(playerid,TWEDITTURFSMENU,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Menu:","Edit Dimensions...\nEdit Owners...\nEdit Vulnerable Time...\nEdit Locked...\nEdit Perks...\nReset War...\nDestroy Turf","Select","Back");
  529. }
  530. else
  531. {
  532. ShowPlayerDialogEx(playerid,TWEDITTURFSMENU,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Menu:","Edit Dimensions...\nEdit Owners...\nEdit Vulnerable Time...\nEdit Locked...\nEdit Perks...\nReset War...\nDestroy Turf","Select","Back");
  533. }
  534. }
  535. }
  536. return 0;
  537. }
  538. CMD:turfinfo(playerid, params[])
  539. {
  540. if(GetPlayerTurfWarsZone(playerid) != -1) {
  541. new string[128];
  542. new tw = GetPlayerTurfWarsZone(playerid);
  543. format(string,sizeof(string),"|___________ (ID: %d) %s ___________|",tw,TurfWars[tw][twName]);
  544. SendClientMessageEx(playerid, COLOR_GREEN, string);
  545. if(TurfWars[tw][twOwnerId] == -1) {
  546. format(string,sizeof(string),"Owner: Vacant.");
  547. }
  548. else if(TurfWars[tw][twOwnerId] == -2) {
  549. format(string,sizeof(string),"Owner: Law Enforcement.");
  550. }
  551. else {
  552. format(string,sizeof(string),"Owner: %s.",arrGroupData[TurfWars[tw][twOwnerId]][g_szGroupName]);
  553. }
  554. SendClientMessageEx(playerid, COLOR_WHITE, string);
  555. format(string,sizeof(string),"Vulnerable: %d Hours.",TurfWars[tw][twVulnerable]);
  556. SendClientMessageEx(playerid, COLOR_WHITE, string);
  557. format(string,sizeof(string),"Locked: %d.",TurfWars[tw][twLocked]);
  558. SendClientMessageEx(playerid, COLOR_WHITE, string);
  559. format(string,sizeof(string),"Active: %d.",TurfWars[tw][twActive]);
  560. SendClientMessageEx(playerid, COLOR_WHITE, string);
  561. if(TurfWars[tw][twActive] != 0) {
  562. format(string,sizeof(string),"Time Left: %d Secs.",TurfWars[tw][twTimeLeft]);
  563. SendClientMessageEx(playerid, COLOR_WHITE, string);
  564. if(TurfWars[tw][twAttemptId] == -2) {
  565. format(string,sizeof(string),"Takeover Faction: Law Enforcement.");
  566. SendClientMessageEx(playerid, COLOR_WHITE, string);
  567. }
  568. else {
  569. format(string,sizeof(string),"Takeover Family: %s.",arrGroupData[TurfWars[tw][twAttemptId]][g_szGroupName]);
  570. SendClientMessageEx(playerid, COLOR_WHITE, string);
  571. }
  572. }
  573. switch(TurfWars[tw][twSpecial]) {
  574. case 1:
  575. {
  576. format(string,sizeof(string),"Special Perks: Extortion.");
  577. }
  578. case 2:
  579. {
  580. format(string,sizeof(string),"Special Perks: Drugs.");
  581. }
  582. default:
  583. {
  584. format(string,sizeof(string),"Special Perks: None.");
  585. }
  586. }
  587. SendClientMessageEx(playerid, COLOR_WHITE, string);
  588. }
  589. else {
  590. SendClientMessageEx(playerid, COLOR_WHITE, "You are not in a turf!");
  591. }
  592. return 1;
  593. }
  594. CMD:savetwpos(playerid, params[])
  595. {
  596. if(PlayerInfo[playerid][pAdmin] > 3 || PlayerInfo[playerid][pGangModerator] >= 1) {
  597. new string[128];
  598. new tw = GetPVarInt(playerid, "EditingTurfs");
  599. new stage = GetPVarInt(playerid, "EditingTurfsStage");
  600. new Float:x, Float: y, Float: z;
  601. new Float:tminx, Float: tminy, Float: tmaxx, Float: tmaxy;
  602. GetPlayerPos(playerid, x, y, z);
  603. if(stage == -1) {
  604. SendClientMessageEx(playerid, COLOR_GRAD2, "You are not editing any Turf Dimensions right now!");
  605. return 1;
  606. }
  607. else {
  608. switch(stage) {
  609. case 1:
  610. {
  611. SetPVarFloat(playerid, "EditingTurfsMinX", x);
  612. format(string,sizeof(string),"X=%f, Y=%f, Z=%f",x,y,z);
  613. SendClientMessageEx(playerid, COLOR_WHITE, "You have successfully edited Turf West Wall.");
  614. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  615. SendClientMessageEx(playerid, COLOR_WHITE, "Goto a location and type (/savetwpos) to edit the South Wall.");
  616. SetPVarInt(playerid, "EditingTurfsStage", 2);
  617. }
  618. case 2:
  619. {
  620. SetPVarFloat(playerid, "EditingTurfsMinY", y);
  621. format(string,sizeof(string),"X=%f, Y=%f, Z=%f",x,y,z);
  622. SendClientMessageEx(playerid, COLOR_WHITE, "You have successfully edited Turf South Wall.");
  623. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  624. SendClientMessageEx(playerid, COLOR_WHITE, "Goto a location and type (/savetwpos) to edit the East Wall.");
  625. SetPVarInt(playerid, "EditingTurfsStage", 3);
  626. }
  627. case 3:
  628. {
  629. SetPVarFloat(playerid, "EditingTurfsMaxX", x);
  630. format(string,sizeof(string),"X=%f, Y=%f, Z=%f",x,y,z);
  631. SendClientMessageEx(playerid, COLOR_WHITE, "You have successfully edited Turf East Wall.");
  632. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  633. SendClientMessageEx(playerid, COLOR_WHITE, "Goto a location and type (/savetwpos) to edit the North Wall.");
  634. SetPVarInt(playerid, "EditingTurfsStage", 4);
  635. }
  636. case 4:
  637. {
  638. SetPVarFloat(playerid, "EditingTurfsMaxY", y);
  639. format(string,sizeof(string),"X=%f, Y=%f, Z=%f",x,y,z);
  640. SendClientMessageEx(playerid, COLOR_WHITE, "You have successfully edited Turf North Wall.");
  641. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  642. format(string,sizeof(string),"You have successfully re-created (TurfID: %d) %s.",tw,TurfWars[tw][twName]);
  643. SendClientMessageEx(playerid, COLOR_WHITE, string);
  644. SetPVarInt(playerid, "EditingTurfsStage", -1);
  645. DestroyTurfWarsZone(tw);
  646. tminx = GetPVarFloat(playerid, "EditingTurfsMinX");
  647. tminy = GetPVarFloat(playerid, "EditingTurfsMinY");
  648. tmaxx = GetPVarFloat(playerid, "EditingTurfsMaxX");
  649. tmaxy = GetPVarFloat(playerid, "EditingTurfsMaxY");
  650. TurfWars[tw][twMinX] = tminx;
  651. TurfWars[tw][twMinY] = tminy;
  652. TurfWars[tw][twMaxX] = tmaxx;
  653. TurfWars[tw][twMaxY] = tmaxy;
  654. SetPVarFloat(playerid, "EditingTurfsMinX", 0.0);
  655. SetPVarFloat(playerid, "EditingTurfsMinY", 0.0);
  656. SetPVarFloat(playerid, "EditingTurfsMaxX", 0.0);
  657. SetPVarFloat(playerid, "EditingTurfsMaxY", 0.0);
  658. CreateTurfWarsZone(1,tw);
  659. ShowPlayerDialogEx(playerid,TWEDITTURFSMENU,DIALOG_STYLE_LIST,"Turf Wars - Edit Turfs Menu:","Edit Dimensions...\nEdit Owners...\nEdit Vulnerable Time...\nEdit Locked...\nEdit Perks...\nReset War...\nDestroy Turf","Select","Back");
  660. }
  661. }
  662. }
  663. }
  664. else {
  665. SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command!");
  666. }
  667. return 1;
  668. }
  669. CMD:twmenu(playerid, params[])
  670. {
  671. if(PlayerInfo[playerid][pAdmin] > 3 || PlayerInfo[playerid][pGangModerator] >= 1)
  672. {
  673. ShowPlayerDialogEx(playerid,TWADMINMENU,DIALOG_STYLE_LIST,"Turf Wars - Admin Menu:","Edit Turfs...","Select","Exit");
  674. }
  675. else
  676. {
  677. SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command!");
  678. }
  679. return 1;
  680. }
  681. CMD:turfs(playerid, params[])
  682. {
  683. if(turfWarsRadar[playerid] == 0) {
  684. SendClientMessageEx(playerid, COLOR_WHITE, "You have enabled the Turf Minimap Radar.");
  685. ShowTurfWarsRadar(playerid);
  686. }
  687. else {
  688. SendClientMessageEx(playerid, COLOR_WHITE, "You have disabled the Turf Minimap Radar.");
  689. HideTurfWarsRadar(playerid);
  690. }
  691. return 1;
  692. }
  693. CMD:shutdown(playerid, params[])
  694. {
  695. if(IsACop(playerid)) {
  696. new string[128];
  697. new tw = GetPlayerTurfWarsZone(playerid);
  698. new rank = PlayerInfo[playerid][pRank];
  699. if(rank < arrGroupData[PlayerInfo[playerid][pMember]][g_iTurfCapRank]) {
  700. SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot shutdown turfs because of your rank!");
  701. return 1;
  702. }
  703. if(tw != -1) {
  704. if(TurfWars[tw][twLocked] == 1) {
  705. SendClientMessageEx(playerid, COLOR_GRAD2, "The turf is currently locked by a admin, you can not shutdown the turf!");
  706. return 1;
  707. }
  708. if(TurfWars[tw][twVulnerable] == 0) {
  709. if(TurfWars[tw][twActive] == 0) {
  710. SendClientMessageEx(playerid, COLOR_GRAD2, "The turf isn't in a active turf war, you have no reason to shutdown the turf!");
  711. }
  712. else {
  713. new count = 0;
  714. if(TurfWars[tw][twAttemptId] == -2) {
  715. SendClientMessageEx(playerid, COLOR_GRAD2, "The LEO Factions are already attempting to shutdown the turf war!");
  716. return 1;
  717. }
  718. foreach(new i: Player)
  719. {
  720. if(TurfWars[tw][twAttemptId] == PlayerInfo[i][pMember]) {
  721. if(GetPlayerTurfWarsZone(i) == tw && GetPVarInt(i, "Injured") != 1) {
  722. count++;
  723. }
  724. }
  725. }
  726. if(count != 0) {
  727. format(string,sizeof(string),"There is still %d Attacking Members on the Turf, you must get rid of them before shuting down!",count);
  728. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  729. }
  730. else {
  731. ShutdownTurfWarsZone(tw);
  732. }
  733. }
  734. }
  735. else {
  736. SendClientMessageEx(playerid, COLOR_GRAD2, "This turf is currently not vulnerable, you are unable to shutdown!");
  737. SendClientMessageEx(playerid, COLOR_GRAD1, "If you are in FBI, You must contact a admin to lock down the turf with a IC Casefile.");
  738. }
  739. }
  740. else {
  741. SendClientMessageEx(playerid, COLOR_GRAD2, "You have to be in a turf to be able to shutdown turfs!");
  742. }
  743. }
  744. else {
  745. SendClientMessageEx(playerid, COLOR_GRAD2, "You are not in a LEO Faction, you can not shutdown turfs!");
  746. }
  747. return 1;
  748. }
  749. CMD:claim(playerid, params[])
  750. {
  751. SendClientMessageEx(playerid, COLOR_GRAD2, "Command has been changed to /claimturf");
  752. return 1;
  753. }
  754. CMD:claimturf(playerid, params[])
  755. {
  756. if(servernumber == 2)
  757. {
  758. SendClientMessage(playerid, COLOR_WHITE, "This command is disabled!");
  759. return 1;
  760. }
  761. new string[128];
  762. new tw = GetPlayerTurfWarsZone(playerid);
  763. new family = PlayerInfo[playerid][pMember];
  764. new rank = PlayerInfo[playerid][pRank];
  765. if(family == INVALID_GROUP_ID || !IsACriminal(playerid)) {
  766. SendClientMessageEx(playerid, COLOR_GRAD2, "You are not in a family/gang, you can not claim turfs!");
  767. return 1;
  768. }
  769. if(rank < arrGroupData[family][g_iTurfCapRank]) {
  770. SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot claim turfs due to your rank!");
  771. return 1;
  772. }
  773. if(tw != -1) {
  774. if(TurfWars[tw][twLocked] == 1) {
  775. SendClientMessageEx(playerid, COLOR_GRAD2, "The turf is currently locked by a admin, you can not claim it!");
  776. return 1;
  777. }
  778. if(TurfWars[tw][twVulnerable] == 0) {
  779. if(TurfWars[tw][twActive] == 0) {
  780. if(TurfWars[tw][twOwnerId] == family) {
  781. SendClientMessageEx(playerid, COLOR_GRAD2, "Your family/gang already owns this turf, you are unable to claim it!");
  782. return 1;
  783. }
  784. new count = 0;
  785. foreach(new i: Player)
  786. {
  787. if(family == PlayerInfo[i][pMember] && PlayerInfo[i][pAccountRestricted] != 1) {
  788. if(GetPlayerTurfWarsZone(i) == tw && GetPVarInt(i, "Injured") != 1) {
  789. count++;
  790. }
  791. }
  792. }
  793. if(count > 2) {
  794. TakeoverTurfWarsZone(family, tw);
  795. }
  796. else {
  797. SendClientMessageEx(playerid, COLOR_GRAD2, "You need at least 3 of your family/gang members on the turf, to be able to claim it!");
  798. }
  799. }
  800. else {
  801. new count = 0;
  802. new leocount = 0;
  803. if(TurfWars[tw][twAttemptId] == family) {
  804. SendClientMessageEx(playerid, COLOR_GRAD2, "You are already attempting to capture this turf!");
  805. return 1;
  806. }
  807. foreach(new i: Player)
  808. {
  809. if(TurfWars[tw][twAttemptId] == PlayerInfo[i][pMember]) {
  810. if(GetPlayerTurfWarsZone(i) == tw && GetPVarInt(i, "Injured") != 1) {
  811. count++;
  812. }
  813. }
  814. if(TurfWars[tw][twAttemptId] == -2) {
  815. if(IsACop(i)) {
  816. if(GetPlayerTurfWarsZone(i) == tw && GetPVarInt(i, "Injured") != 1) {
  817. leocount++;
  818. }
  819. }
  820. }
  821. }
  822. if(count == 0 && leocount == 0) {
  823. if(family != TurfWars[tw][twOwnerId]) {
  824. }
  825. foreach(new i: Player)
  826. {
  827. if(PlayerInfo[i][pGangModerator] >= 1) {
  828. format(string,sizeof(string),"%s has attempted to takeover turf %d for family %s",GetPlayerNameEx(playerid),tw,arrGroupData[family][g_szGroupName]);
  829. SendClientMessageEx(i,COLOR_YELLOW,string);
  830. }
  831. }
  832. TakeoverTurfWarsZone(family, tw);
  833. }
  834. else {
  835. if(leocount == 0) {
  836. format(string,sizeof(string),"There is still %d Attacking Members on the Turf, you must get rid of them before reclaiming!",count);
  837. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  838. }
  839. else {
  840. format(string,sizeof(string),"There is still %d Officers on the Turf, you must get rid of them before reclaiming!",leocount);
  841. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  842. }
  843. }
  844. }
  845. }
  846. else {
  847. SendClientMessageEx(playerid, COLOR_GRAD2, "This turf is currently not vulnerable, you are unable to claim it!");
  848. }
  849. }
  850. else {
  851. SendClientMessageEx(playerid, COLOR_GRAD2, "You have to be in a turf to be able to claim turfs!");
  852. }
  853. if(turfWarsRadar[playerid] == 0) {
  854. ShowTurfWarsRadar(playerid);
  855. }
  856. return 1;
  857. }