YDBG.pwn 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258
  1. /*
  2. ===================================================================
  3. If you uncomment the following line YSI will be compiled with
  4. filterscript options, this is VERY important if you do use it as
  5. one, otherwise certain features may not work
  6. ===================================================================
  7. */
  8. #define FILTERSCRIPT
  9. /*
  10. ===================================================================
  11. If you uncomment one of the following lines YSI will not include,
  12. those files in compiling.
  13. So if you E.G. dont use objects in your script,
  14. you could uncomment the line #define YSI_NO_OBJECTS,
  15. and it would leave the Object files out.
  16. Note: Not every combination has been tested (there are currently
  17. 131072 combinations, if you find one which doesn't compile due to
  18. cross-file dependencies please say.
  19. Also note that excluding either checkpoints or areas will exclude
  20. properties instantly. You can also exclude all unwritten new
  21. libraries for future compatability using:
  22. #define YSI_VERSION <version>
  23. Where version is the version you are compiling against, current
  24. ids are:
  25. 2 - YSI 0.2 or earlier
  26. 3 - YSI 0.3
  27. ===================================================================
  28. */
  29. //#define YSI_NO_TEXT
  30. //#define YSI_NO_COMMANDS
  31. //#define YSI_NO_SYSTEM
  32. //#define YSI_NO_TRACKING
  33. //#define YSI_NO_CALLBACKS
  34. //#define YSI_NO_MASTER
  35. //#define YSI_NO_CLASSES
  36. //#define YSI_NO_PICKUPS
  37. //#define YSI_NO_STANDARD
  38. //#define YSI_NO_MODULES
  39. #define YSI_NO_OBJECTS
  40. //#define YSI_NO_RACES
  41. //#define YSI_NO_CHECKPOINTS
  42. //#define YSI_NO_AREAS
  43. //#define YSI_NO_GROUPS
  44. //#define YSI_NO_PROPERTIES
  45. //#define YSI_NO_ZONES
  46. #include <YSI>
  47. // State system limited to only 4,294,967,296 states
  48. enum YDBG_STATE
  49. {
  50. YDBG_STATE_NONE,
  51. YDBG_STATE_CREATE_AMMU[4],
  52. YDBG_STATE_AMMU_PRICE[40],
  53. YDBG_STATE_AMMU_AMMO[40],
  54. YDBG_STATE_AMMU_TYPE,
  55. YDBG_STATE_CREATE_PROP,
  56. YDBG_STATE_PROP_PRICE,
  57. YDBG_STATE_PROP_REWARD,
  58. YDBG_STATE_PROP_DELAY,
  59. YDBG_STATE_FZ_WANT,
  60. YDBG_STATE_FZ_SPHERE,
  61. YDBG_STATE_FZ_CIRCLE,
  62. YDBG_STATE_FZ_CUBE,
  63. YDBG_STATE_FZ_BOX,
  64. YDBG_STATE_FZ_POLY,
  65. YDBG_STATE_MA_WANT,
  66. YDBG_STATE_MA_SPHERE,
  67. YDBG_STATE_MA_CIRCLE,
  68. YDBG_STATE_MA_CUBE,
  69. YDBG_STATE_MA_BOX,
  70. YDBG_STATE_MA_POLY,
  71. YDBG_STATE_TELE
  72. }
  73. #define PLAYER_PRIVATE_WORLD(%1) \
  74. ((%1) + 665544)
  75. #define MAX_DEBUG_SAVE_SLOTS (5)
  76. new
  77. Menu:gValueMenu,
  78. Menu:gAreaMenu,
  79. //gPlayerMenu[MAX_PLAYERS] = {INVALID_MENU, ...},
  80. YDBG_STATE:gYDBGPlayerState[MAX_PLAYERS] = {YDBG_STATE_NONE, ...},
  81. gPlayerCreateData[MAX_PLAYERS][41],
  82. Text:gPlayerTextDraw[MAX_PLAYERS],
  83. gEditorsGroup,
  84. XML:gLoadRules;
  85. #define AddMoneyMenuData(%1,%2,%3,%4) \
  86. gPlayerCreateData[playerid][(%1)] += ((gPlayerCreateData[playerid][(%1)] >>> (%2)) < ((%3) - (%4))) ? ((%4) << (%2)) : (0)
  87. #define TakeMoneyMenuData(%1,%2,%3) \
  88. gPlayerCreateData[playerid][(%1)] -= ((gPlayerCreateData[playerid][(%1)] >>> (%2)) >= (%3)) ? ((%3) << (%2)) : (0)
  89. #if defined FILTERSCRIPT
  90. Script_OnFilterScriptInit()
  91. {
  92. print("\n------------------------------------------");
  93. print(" YSI Debug system by Alex \"Y_Less\" Cole");
  94. print("------------------------------------------\n");
  95. ycmd(kill);
  96. ycmd("mycommand");
  97. // Declare the groups
  98. gEditorsGroup = Group_Create("YDBG_Editors");
  99. // Declare the commands
  100. new
  101. cmd;
  102. cmd = ycmd("createammu");
  103. // Set them so only valid editors can use them
  104. Group_SetDefaultCommandByID(cmd, 0);
  105. Group_SetCommandByID(gEditorsGroup, cmd, 1);
  106. cmd = ycmd("createprop");
  107. Group_SetDefaultCommandByID(cmd, 0);
  108. Group_SetCommandByID(gEditorsGroup, cmd, 1);
  109. cmd = ycmd("createbank");
  110. Group_SetDefaultCommandByID(cmd, 0);
  111. Group_SetCommandByID(gEditorsGroup, cmd, 1);
  112. Langs_AddLanguage("EN", "English");
  113. Langs_AddFile("core", "YSI");
  114. gValueMenu = CreateMenu("Set value", 1, 260.0, 200.0, 120.0);
  115. AddMenuItem(gValueMenu, 0, " +10000");
  116. AddMenuItem(gValueMenu, 0, " +1000");
  117. AddMenuItem(gValueMenu, 0, " +100");
  118. AddMenuItem(gValueMenu, 0, " +10");
  119. AddMenuItem(gValueMenu, 0, " +1");
  120. AddMenuItem(gValueMenu, 0, " -1");
  121. AddMenuItem(gValueMenu, 0, " -10");
  122. AddMenuItem(gValueMenu, 0, " -100");
  123. AddMenuItem(gValueMenu, 0, " -1000");
  124. AddMenuItem(gValueMenu, 0, " -10000");
  125. AddMenuItem(gValueMenu, 0, "- Done -");
  126. gAreaMenu = CreateMenu("Select area type", 1, 210.0, 200.0, 220.0);
  127. AddMenuItem(gAreaMenu, 0, "Cube");
  128. AddMenuItem(gAreaMenu, 0, "Box");
  129. AddMenuItem(gAreaMenu, 0, "Circle");
  130. AddMenuItem(gAreaMenu, 0, "Sphere");
  131. AddMenuItem(gAreaMenu, 0, "Polygon");
  132. gLoadRules = XML_New();
  133. XML_AddHandler(gLoadRules, "ammunation", "YDBG_Load_Ammunation");
  134. return 1;
  135. }
  136. Script_OnFilterScriptExit()
  137. {
  138. return 1;
  139. }
  140. #else
  141. main()
  142. {
  143. print("\n--------------------------------");
  144. print(" YSI Gamemode by your name here");
  145. print("--------------------------------\n");
  146. }
  147. #endif
  148. Text_RegisterTag(tag_with_MY_KILL_HELP);
  149. forward ycmd_kill(playerid, params[], help);
  150. public ycmd_kill(playerid, params[], help)
  151. {
  152. if (help) Text_Send(playerid, "MY_KILL_HELP");
  153. else SetPlayerHealth(playerid, 0.0);
  154. return 1;
  155. }
  156. Script_OnGameModeInit()
  157. {
  158. // Don't use these lines if it's a filterscript
  159. #if !defined FILTERSCRIPT
  160. SetGameModeText("Blank Script");
  161. AddStaticVehicleEx(487, 2040.0568, 1343.4222, 10.6719, 0.0, 0, 0, 20);
  162. AddStaticVehicleEx(435, 2040.0568, 1354.4222, 10.6719, 0.0, 0, 0, 20); // long trailer - 1
  163. AddStaticVehicleEx(515, 2040.0568, 1365.4222, 10.6719, 0.0, 0, 0, 20); // roadtrain
  164. Class_Add(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  165. ycmd(kill);
  166. ycmd("mycommand");
  167. Langs_AddLanguage("EN", "English");
  168. Langs_AddFile("core", "YSI");
  169. #endif
  170. return 1;
  171. }
  172. Command_(mycommand)
  173. {
  174. // Your code here
  175. return 1;
  176. }
  177. Script_OnGameModeExit()
  178. {
  179. Master_@Master();
  180. return 1;
  181. }
  182. Script_OnPlayerRequestClass(playerid, classid)
  183. {
  184. SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  185. SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  186. SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  187. return 1;
  188. }
  189. Script_OnPlayerRequestSpawnEx(playerid, classid)
  190. {
  191. return 1;
  192. }
  193. Script_OnPlayerConnect(playerid)
  194. {
  195. new
  196. Text:td = TextDrawCreate(16.0, 141.0, " ");
  197. TextDrawAlignment(td, 0);
  198. TextDrawBackgroundColor(td, 0x000000FF);
  199. TextDrawFont(td, 1);
  200. TextDrawLetterSize(td, 0.5, 0.7);
  201. TextDrawColor(td, 0xFF0000AA);
  202. TextDrawSetOutline(td, 1);
  203. TextDrawSetProportional(td, 1);
  204. TextDrawSetShadow(td, 1);
  205. TextDrawShowForPlayer(playerid, td);
  206. gPlayerTextDraw[playerid] = td;
  207. gYDBGPlayerState[playerid] = YDBG_STATE_NONE;
  208. return 1;
  209. }
  210. Script_OnPlayerDisconnect(playerid, reason)
  211. {
  212. TextDrawHideForPlayer(playerid, gPlayerTextDraw[playerid]);
  213. TextDrawDestroy(gPlayerTextDraw[playerid]);
  214. #pragma unused reason
  215. return 1;
  216. }
  217. Script_OnPlayerSpawn(playerid)
  218. {
  219. return 1;
  220. }
  221. Script_OnPlayerDeath(playerid, killerid, reason)
  222. {
  223. return 1;
  224. }
  225. Script_OnVehicleSpawn(vehicleid)
  226. {
  227. return 1;
  228. }
  229. Script_OnVehicleDeath(vehicleid, killerid)
  230. {
  231. return 1;
  232. }
  233. Script_OnPlayerText(playerid, text[])
  234. {
  235. new
  236. states = _:gYDBGPlayerState[playerid];
  237. switch (states)
  238. {
  239. case (_:YDBG_STATE_AMMU_PRICE + 0) .. (_:YDBG_STATE_AMMU_PRICE + 39):
  240. {
  241. new
  242. price = strval(text);
  243. if (price < 0x00100000)
  244. {
  245. HideMenuForPlayerEx(playerid);
  246. gPlayerCreateData[playerid][states] &= 0xFFF00000;
  247. gPlayerCreateData[playerid][states] |= price;
  248. ShowCreateAmmuMenu(playerid, 0);
  249. }
  250. return 0;
  251. }
  252. case (_:YDBG_STATE_AMMU_AMMO + 0) .. (_:YDBG_STATE_AMMU_AMMO + 39):
  253. {
  254. new
  255. ammo = strval(text);
  256. if (ammo < 0x00001000)
  257. {
  258. HideMenuForPlayerEx(playerid);
  259. gPlayerCreateData[playerid][states] &= 0x000FFFFF;
  260. gPlayerCreateData[playerid][states] |= ammo << 20;
  261. ShowCostAmmuMenu(playerid, states - _:YDBG_STATE_AMMU_AMMO);
  262. }
  263. return 0;
  264. }
  265. }
  266. return 1;
  267. }
  268. Script_OnPlayerPrivmsg(playerid, recieverid, text[])
  269. {
  270. return 1;
  271. }
  272. Script_OnPlayerCommandText(playerid, cmdtext[])
  273. {
  274. return 0;
  275. }
  276. Script_OnPlayerInfoChange(playerid)
  277. {
  278. return 1;
  279. }
  280. Script_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  281. {
  282. return 1;
  283. }
  284. Script_OnPlayerExitVehicle(playerid, vehicleid)
  285. {
  286. return 1;
  287. }
  288. Script_OnPlayerStateChange(playerid, newstate, oldstate)
  289. {
  290. return 1;
  291. }
  292. Script_OnPlayerEnterCheckpointEx(playerid, cpid)
  293. {
  294. return 1;
  295. }
  296. Script_OnPlayerLeaveCheckpointEx(playerid, cpid)
  297. {
  298. return 1;
  299. }
  300. Script_OnPlayerEnterRaceCheckpoint(playerid)
  301. {
  302. return 1;
  303. }
  304. Script_OnPlayerLeaveRaceCheckpoint(playerid)
  305. {
  306. return 1;
  307. }
  308. Script_OnRconCommand(cmd[])
  309. {
  310. return 1;
  311. }
  312. Script_OnPlayerPickUpPickup(playerid, pickupid)
  313. {
  314. return 1;
  315. }
  316. HideMenuForPlayerEx(playerid)
  317. {
  318. new
  319. Menu:menu = GetPlayerMenu(playerid);
  320. HideMenuForPlayer(menu, playerid);
  321. if (menu != gValueMenu) DestroyMenu(menu);
  322. TogglePlayerControllable(playerid, 1);
  323. TextDrawSetString(gPlayerTextDraw[playerid], " ");
  324. }
  325. ShowMenuForPlayerEx(Menu:menu, playerid)
  326. {
  327. ShowMenuForPlayer(menu, playerid);
  328. TogglePlayerControllable(playerid, 0);
  329. }
  330. Script_OnPlayerSelectedMenuRow(playerid, row)
  331. {
  332. HideMenuForPlayerEx(playerid);
  333. new
  334. states = _:gYDBGPlayerState[playerid];
  335. switch (states)
  336. {
  337. case (_:YDBG_STATE_CREATE_AMMU + 0):
  338. {
  339. if (row < 10) ShowAmmoAmmuMenu(playerid, row);
  340. else if (row > 10) ShowTypeAmmuMenu(playerid);
  341. else ShowCreateAmmuMenu(playerid, 1);
  342. }
  343. case (_:YDBG_STATE_CREATE_AMMU + 1):
  344. {
  345. if (row < 10) ShowAmmoAmmuMenu(playerid, row + 10);
  346. else if (row > 10) ShowTypeAmmuMenu(playerid);
  347. else ShowCreateAmmuMenu(playerid, 2);
  348. }
  349. case (_:YDBG_STATE_CREATE_AMMU + 2):
  350. {
  351. if (row < 10) ShowAmmoAmmuMenu(playerid, row + 20);
  352. else if (row > 10) ShowTypeAmmuMenu(playerid);
  353. else ShowCreateAmmuMenu(playerid, 3);
  354. }
  355. case (_:YDBG_STATE_CREATE_AMMU + 3):
  356. {
  357. if (row < 10) ShowAmmoAmmuMenu(playerid, row + 30);
  358. else if (row > 10) ShowTypeAmmuMenu(playerid);
  359. else ShowCreateAmmuMenu(playerid, 0);
  360. }
  361. case (_:YDBG_STATE_AMMU_PRICE + 0) .. (_:YDBG_STATE_AMMU_PRICE + 39):
  362. {
  363. states -= _:YDBG_STATE_AMMU_PRICE;
  364. switch (row)
  365. {
  366. case 0: gPlayerCreateData[playerid][states] += (gPlayerCreateData[playerid][states] & 0xFFFFF < 0x0000100000 - 10000) ? (10000) : (0);
  367. case 1: gPlayerCreateData[playerid][states] += (gPlayerCreateData[playerid][states] & 0xFFFFF < 0x0000100000 - 1000) ? (1000) : (0);
  368. case 2: gPlayerCreateData[playerid][states] += (gPlayerCreateData[playerid][states] & 0xFFFFF < 0x0000100000 - 100) ? (100) : (0);
  369. case 3: gPlayerCreateData[playerid][states] += (gPlayerCreateData[playerid][states] & 0xFFFFF < 0x0000100000 - 10) ? (10) : (0);
  370. case 4: gPlayerCreateData[playerid][states] += (gPlayerCreateData[playerid][states] & 0xFFFFF < 0x0000100000 - 1) ? (1) : (0);
  371. case 5: gPlayerCreateData[playerid][states] -= (gPlayerCreateData[playerid][states] & 0xFFFFF >= 1) ? (1) : (0);
  372. case 6: gPlayerCreateData[playerid][states] -= (gPlayerCreateData[playerid][states] & 0xFFFFF >= 10) ? (10) : (0);
  373. case 7: gPlayerCreateData[playerid][states] -= (gPlayerCreateData[playerid][states] & 0xFFFFF >= 100) ? (100) : (0);
  374. case 8: gPlayerCreateData[playerid][states] -= (gPlayerCreateData[playerid][states] & 0xFFFFF >= 1000) ? (1000) : (0);
  375. case 9: gPlayerCreateData[playerid][states] -= (gPlayerCreateData[playerid][states] & 0xFFFFF >= 10000) ? (10000) : (0);
  376. case 10: return ShowCreateAmmuMenu(playerid, 0);
  377. }
  378. ShowCostAmmuMenu(playerid, states);
  379. }
  380. case (_:YDBG_STATE_AMMU_AMMO + 0) .. (_:YDBG_STATE_AMMU_AMMO + 39):
  381. {
  382. states -= _:YDBG_STATE_AMMU_AMMO;
  383. switch (row)
  384. {
  385. case 0: AddMoneyMenuData(states, 20, 0x00001000, 10000);
  386. case 1: AddMoneyMenuData(states, 20, 0x00001000, 1000);
  387. case 2: AddMoneyMenuData(states, 20, 0x00001000, 100);
  388. case 3: AddMoneyMenuData(states, 20, 0x00001000, 10);
  389. case 4: AddMoneyMenuData(states, 20, 0x00001000, 1);
  390. case 5: TakeMoneyMenuData(states, 20, 1);
  391. case 6: TakeMoneyMenuData(states, 20, 10);
  392. case 7: TakeMoneyMenuData(states, 20, 100);
  393. case 8: TakeMoneyMenuData(states, 20, 1000);
  394. case 9: TakeMoneyMenuData(states, 20, 10000);
  395. case 10: return ShowCostAmmuMenu(playerid, states);
  396. }
  397. ShowAmmoAmmuMenu(playerid, states);
  398. }
  399. case (_:YDBG_STATE_AMMU_TYPE):
  400. {
  401. switch (row)
  402. {
  403. case 0: gPlayerCreateData[playerid][40] ^= 1;
  404. case 1: gPlayerCreateData[playerid][40] ^= 2;
  405. case 2: return CreateAmmunationFromStats(playerid);
  406. }
  407. ShowTypeAmmuMenu(playerid);
  408. }
  409. case (_:YDBG_STATE_CREATE_PROP):
  410. {
  411. switch (row)
  412. {
  413. case 0: return ShowCostPropMenu(playerid);
  414. case 1: return ShowRewardPropMenu(playerid);
  415. case 2: return ShowDelayPropMenu(playerid);
  416. case 3: gPlayerCreateData[playerid][40] ^= 1;
  417. case 4: gPlayerCreateData[playerid][40] ^= 2;
  418. case 5: gPlayerCreateData[playerid][40] ^= 4;
  419. case 6: gPlayerCreateData[playerid][40] ^= 8;
  420. case 7: return CreatePropertyFromStats(playerid);
  421. }
  422. ShowCreatePropMenu(playerid);
  423. }
  424. case (_:YDBG_STATE_PROP_PRICE):
  425. {
  426. switch (row)
  427. {
  428. case 0: AddMoneyMenuData(37, 0, 0x04000000, 10000);
  429. case 1: AddMoneyMenuData(37, 0, 0x04000000, 1000);
  430. case 2: AddMoneyMenuData(37, 0, 0x04000000, 100);
  431. case 3: AddMoneyMenuData(37, 0, 0x04000000, 10);
  432. case 4: AddMoneyMenuData(37, 0, 0x04000000, 1);
  433. case 5: TakeMoneyMenuData(37, 0, 1);
  434. case 6: TakeMoneyMenuData(37, 0, 10);
  435. case 7: TakeMoneyMenuData(37, 0, 100);
  436. case 8: TakeMoneyMenuData(37, 0, 1000);
  437. case 9: TakeMoneyMenuData(37, 0, 10000);
  438. case 10: return ShowCreatePropMenu(playerid);
  439. }
  440. ShowCostPropMenu(playerid);
  441. }
  442. case (_:YDBG_STATE_PROP_REWARD):
  443. {
  444. switch (row)
  445. {
  446. case 0: AddMoneyMenuData(38, 0, 0x00040000, 10000);
  447. case 1: AddMoneyMenuData(38, 0, 0x00040000, 1000);
  448. case 2: AddMoneyMenuData(38, 0, 0x00040000, 100);
  449. case 3: AddMoneyMenuData(38, 0, 0x00040000, 10);
  450. case 4: AddMoneyMenuData(38, 0, 0x00040000, 1);
  451. case 5: TakeMoneyMenuData(38, 0, 1);
  452. case 6: TakeMoneyMenuData(38, 0, 10);
  453. case 7: TakeMoneyMenuData(38, 0, 100);
  454. case 8: TakeMoneyMenuData(38, 0, 1000);
  455. case 9: TakeMoneyMenuData(38, 0, 10000);
  456. case 10: return ShowCreatePropMenu(playerid);
  457. }
  458. ShowRewardPropMenu(playerid);
  459. }
  460. case (_:YDBG_STATE_PROP_DELAY):
  461. {
  462. switch (row)
  463. {
  464. case 0: AddMoneyMenuData(39, 0, 0x00100000, 10000);
  465. case 1: AddMoneyMenuData(39, 0, 0x00100000, 1000);
  466. case 2: AddMoneyMenuData(39, 0, 0x00100000, 100);
  467. case 3: AddMoneyMenuData(39, 0, 0x00100000, 10);
  468. case 4: AddMoneyMenuData(39, 0, 0x00100000, 1);
  469. case 5: TakeMoneyMenuData(39, 0, 1);
  470. case 6: TakeMoneyMenuData(39, 0, 10);
  471. case 7: TakeMoneyMenuData(39, 0, 100);
  472. case 8: TakeMoneyMenuData(39, 0, 1000);
  473. case 9: TakeMoneyMenuData(39, 0, 10000);
  474. case 10: return ShowCreatePropMenu(playerid);
  475. }
  476. ShowDelayPropMenu(playerid);
  477. }
  478. case (_:YDBG_STATE_MA_WANT), (_:YDBG_STATE_FZ_WANT):
  479. {
  480. StartPointSelection(playerid, row);
  481. }
  482. }
  483. return 1;
  484. }
  485. ShowAmmoAmmuMenu(playerid, weapon)
  486. {
  487. ShowMenuForPlayerEx(gValueMenu, playerid);
  488. new
  489. str[64];
  490. format(str, sizeof (str), "Set ammo below or enter in text box (Current: %d)", gPlayerCreateData[playerid][weapon] >>> 20);
  491. TextDrawSetString(gPlayerTextDraw[playerid], str);
  492. gYDBGPlayerState[playerid] = YDBG_STATE_AMMU_AMMO + YDBG_STATE:weapon;
  493. return 1;
  494. }
  495. ShowCostAmmuMenu(playerid, weapon)
  496. {
  497. ShowMenuForPlayerEx(gValueMenu, playerid);
  498. new
  499. str[64];
  500. format(str, sizeof (str), "Set cost below or enter in text box (Current: $%d)", gPlayerCreateData[playerid][weapon] & 0xFFFFF);
  501. TextDrawSetString(gPlayerTextDraw[playerid], str);
  502. gYDBGPlayerState[playerid] = YDBG_STATE_AMMU_PRICE + YDBG_STATE:weapon;
  503. return 1;
  504. }
  505. ShowCostPropMenu(playerid)
  506. {
  507. ShowMenuForPlayerEx(gValueMenu, playerid);
  508. new
  509. str[64];
  510. format(str, sizeof (str), "Set cost below or enter in text box (Current: $%d)", gPlayerCreateData[playerid][37]);
  511. TextDrawSetString(gPlayerTextDraw[playerid], str);
  512. gYDBGPlayerState[playerid] = YDBG_STATE_PROP_PRICE;
  513. return 1;
  514. }
  515. ShowRewardPropMenu(playerid)
  516. {
  517. ShowMenuForPlayerEx(gValueMenu, playerid);
  518. new
  519. str[64];
  520. format(str, sizeof (str), "Set payment below or enter in text box (Current: $%d)", gPlayerCreateData[playerid][38]);
  521. TextDrawSetString(gPlayerTextDraw[playerid], str);
  522. gYDBGPlayerState[playerid] = YDBG_STATE_PROP_REWARD;
  523. return 1;
  524. }
  525. ShowDelayPropMenu(playerid)
  526. {
  527. ShowMenuForPlayerEx(gValueMenu, playerid);
  528. new
  529. str[64];
  530. format(str, sizeof (str), "Set time between rewards below or enter in text box (Current: %dms)", gPlayerCreateData[playerid][39]);
  531. TextDrawSetString(gPlayerTextDraw[playerid], str);
  532. gYDBGPlayerState[playerid] = YDBG_STATE_PROP_DELAY;
  533. return 1;
  534. }
  535. CreatePropertyFromStats(playerid)
  536. {
  537. new
  538. Float:x,
  539. Float:y,
  540. Float:z,
  541. data = gPlayerCreateData[playerid][40];
  542. GetPlayerPos(playerid, x, y, z);
  543. printf("make");
  544. new
  545. prop = CreateProperty(gPlayerCreateData[playerid], x, y, z, gPlayerCreateData[playerid][37], gPlayerCreateData[playerid][38], gPlayerCreateData[playerid][39], data & 1, data & 2, data & 4, data & 8);
  546. printf("prop: %d", prop);
  547. new
  548. str[24],
  549. xmlProp = XML_AddItem("property", gPlayerCreateData[playerid]);
  550. if (data & 8) XML_AddParameter(xmlProp, "increase", "1");
  551. if (data & 4) XML_AddParameter(xmlProp, "reduce", "1");
  552. if (data & 2) XML_AddParameter(xmlProp, "multi", "1");
  553. if (data & 1) XML_AddParameter(xmlProp, "sell", "1");
  554. valstr(str, gPlayerCreateData[playerid][38]);
  555. XML_AddParameter(xmlProp, "reward", str);
  556. valstr(str, gPlayerCreateData[playerid][39]);
  557. XML_AddParameter(xmlProp, "delay", str);
  558. valstr(str, gPlayerCreateData[playerid][37]);
  559. XML_AddParameter(xmlProp, "price", str);
  560. format(str, sizeof (str), "%.2f", z);
  561. XML_AddParameter(xmlProp, "z", str);
  562. format(str, sizeof (str), "%.2f", y);
  563. XML_AddParameter(xmlProp, "y", str);
  564. format(str, sizeof (str), "%.2f", x);
  565. XML_AddParameter(xmlProp, "x", str);
  566. XML_WriteItem("YSI/YDBG/props.xml", xmlProp);
  567. gPlayerCreateData[playerid] = BlankArray();
  568. gYDBGPlayerState[playerid] = YDBG_STATE_NONE;
  569. return 1;
  570. }
  571. #define AmmuWeapData(%1,%2) \
  572. a[(%1)] = ((data = gPlayerCreateData[playerid][(%1)]) ? ((%2)) : (-1)), b[(%1)] = (data >>> 20), c[(%1)] = (data & 0xFFFFF)
  573. CreateAmmunationFromStats(playerid)
  574. {
  575. new
  576. Float:x,
  577. Float:y,
  578. Float:z,
  579. data,
  580. a[40],
  581. b[40],
  582. c[40];
  583. AmmuWeapData(0, WEAPON_BRASSKNUCKLE);
  584. AmmuWeapData(1, WEAPON_GOLFCLUB);
  585. AmmuWeapData(2, WEAPON_NITESTICK);
  586. AmmuWeapData(3, WEAPON_KNIFE);
  587. AmmuWeapData(4, WEAPON_BAT);
  588. AmmuWeapData(5, WEAPON_SHOVEL);
  589. AmmuWeapData(6, WEAPON_POOLSTICK);
  590. AmmuWeapData(7, WEAPON_KATANA);
  591. AmmuWeapData(8, WEAPON_CHAINSAW);
  592. AmmuWeapData(9, WEAPON_DILDO);
  593. AmmuWeapData(10, WEAPON_DILDO2);
  594. AmmuWeapData(11, WEAPON_VIBRATOR);
  595. AmmuWeapData(12, WEAPON_VIBRATOR2);
  596. AmmuWeapData(13, WEAPON_FLOWER);
  597. AmmuWeapData(14, WEAPON_CANE);
  598. AmmuWeapData(15, WEAPON_GRENADE);
  599. AmmuWeapData(16, WEAPON_TEARGAS);
  600. AmmuWeapData(17, WEAPON_MOLTOV);
  601. AmmuWeapData(18, WEAPON_COLT45);
  602. AmmuWeapData(19, WEAPON_SILENCED);
  603. AmmuWeapData(20, WEAPON_DEAGLE);
  604. AmmuWeapData(21, WEAPON_SHOTGUN);
  605. AmmuWeapData(22, WEAPON_SAWEDOFF);
  606. AmmuWeapData(23, WEAPON_SHOTGSPA);
  607. AmmuWeapData(24, WEAPON_UZI);
  608. AmmuWeapData(25, WEAPON_MP5);
  609. AmmuWeapData(26, WEAPON_AK47);
  610. AmmuWeapData(27, WEAPON_M4);
  611. AmmuWeapData(28, WEAPON_TEC9);
  612. AmmuWeapData(29, WEAPON_RIFLE);
  613. AmmuWeapData(30, WEAPON_SNIPER);
  614. AmmuWeapData(31, WEAPON_ROCKETLAUNCHER);
  615. AmmuWeapData(32, WEAPON_FLAMETHROWER);
  616. AmmuWeapData(33, WEAPON_MINIGUN);
  617. AmmuWeapData(34, WEAPON_SATCHEL);
  618. AmmuWeapData(35, WEAPON_SPRAYCAN);
  619. AmmuWeapData(36, WEAPON_FIREEXTINGUISHER);
  620. AmmuWeapData(37, WEAPON_CAMERA);
  621. AmmuWeapData(39, WEAPON_PARACHUTE);
  622. AmmuWeapData(39, WEAPON_ARMOUR);
  623. GetPlayerPos(playerid, x, y, z);
  624. CreateAmmunation(x, y, z, gPlayerCreateData[playerid][40] & 1, gPlayerCreateData[playerid][40] & 2,
  625. a[ 0], b[ 0], c[ 0], a[ 1], b[ 1], c[ 1], a[ 2], b[ 2], c[ 2], a[ 3], b[ 3], c[ 3], a[ 4], b[ 4], c[ 4],
  626. a[ 5], b[ 5], c[ 5], a[ 6], b[ 6], c[ 6], a[ 7], b[ 7], c[ 7], a[ 8], b[ 8], c[ 8], a[ 9], b[ 9], c[ 9],
  627. a[10], b[10], c[10], a[11], b[11], c[11], a[12], b[12], c[12], a[13], b[13], c[13], a[14], b[14], c[14],
  628. a[15], b[15], c[15], a[16], b[16], c[16], a[17], b[17], c[17], a[18], b[18], c[18], a[19], b[19], c[19],
  629. a[20], b[20], c[20], a[21], b[21], c[21], a[22], b[22], c[22], a[23], b[23], c[23], a[24], b[24], c[24],
  630. a[25], b[25], c[25], a[26], b[26], c[26], a[27], b[27], c[27], a[28], b[28], c[28], a[29], b[29], c[29],
  631. a[30], b[30], c[30], a[31], b[31], c[31], a[32], b[32], c[32], a[33], b[33], c[33], a[34], b[34], c[34],
  632. a[35], b[35], c[35], a[36], b[36], c[36], a[37], b[37], c[37], a[38], b[38], c[38], a[39], b[39], c[39]
  633. );
  634. new
  635. str[24];
  636. format(str, sizeof (str), "ammu%.0f,%.0f,%.0f", x, y, z);
  637. new
  638. xmlWeap = XML_AddItem("ammunation", str);
  639. valstr(str, gPlayerCreateData[playerid][40]);
  640. XML_AddParameter(xmlWeap, "give", str);
  641. for (new i = 0; i < 40; i++)
  642. {
  643. if (a[i] != -1)
  644. {
  645. new
  646. xmlType = XML_AddParameter(xmlWeap, "weapon");
  647. valstr(str, c[i]);
  648. XML_AddParameter(xmlType, "price", str);
  649. valstr(str, b[i]);
  650. XML_AddParameter(xmlType, "ammo", str);
  651. valstr(str, a[i]);
  652. XML_AddParameter(xmlType, "type", str);
  653. }
  654. }
  655. format(str, sizeof (str), "%.2f", z);
  656. XML_AddParameter(xmlWeap, "z", str);
  657. format(str, sizeof (str), "%.2f", y);
  658. XML_AddParameter(xmlWeap, "y", str);
  659. format(str, sizeof (str), "%.2f", x);
  660. XML_AddParameter(xmlWeap, "x", str);
  661. XML_WriteItem("YSI/YDBG/props.xml", xmlWeap);
  662. gPlayerCreateData[playerid] = BlankArray();
  663. gYDBGPlayerState[playerid] = YDBG_STATE_NONE;
  664. return 1;
  665. }
  666. Script_OnPlayerExitedMenu(playerid)
  667. {
  668. gPlayerCreateData[playerid] = BlankArray();
  669. gYDBGPlayerState[playerid] = YDBG_STATE_NONE;
  670. return 1;
  671. }
  672. BlankArray()
  673. {
  674. static
  675. empty[sizeof (gPlayerCreateData[])];
  676. return empty;
  677. }
  678. Script_OnVehicleMod(vehicleid, componentid)
  679. {
  680. return 1;
  681. }
  682. Script_OnVehiclePaintjob(vehicleid, paintjobid)
  683. {
  684. return 1;
  685. }
  686. Script_OnVehicleRespray(vehicleid, color1, color2)
  687. {
  688. return 1;
  689. }
  690. Script_OnPlayerLogin(playerid, yid)
  691. {
  692. return 1;
  693. }
  694. Script_OnPlayerLogout(playerid, yid)
  695. {
  696. return 1;
  697. }
  698. Script_OnPlayerEnterArea(playerid, areaid)
  699. {
  700. return 1;
  701. }
  702. Script_OnPlayerLeaveArea(playerid, areaid)
  703. {
  704. return 1;
  705. }
  706. Script_OnRaceEnd(raceid)
  707. {
  708. return 1;
  709. }
  710. Script_OnPlayerExitRace(playerid, raceid)
  711. {
  712. return 1;
  713. }
  714. Script_OnPlayerFinishRace(playerid, raceid, position, prize, time)
  715. {
  716. return 1;
  717. }
  718. forward ycmd_createbank(playerid, params[], help);
  719. public ycmd_createbank(playerid, params[], help)
  720. {
  721. if (help)
  722. {
  723. Text_SendFormat(playerid, "YDBG_CREATEBANK_HELP_1", "createbank");
  724. Text_Send(playerid, "YDBG_CREATEBANK_HELP_2");
  725. }
  726. else
  727. {
  728. new
  729. Float:x,
  730. Float:y,
  731. Float:z;
  732. GetPlayerPos(playerid, x, y, z);
  733. if (params[0] == 1) CreateBank(x, y, z);
  734. else CreateBank(x, y, z, params);
  735. new
  736. str[24];
  737. if (params[0] == 1) format(str, sizeof (str), "bank%.0f,%.0f,%.0f", x, y, z);
  738. new
  739. xmlBank = XML_AddItem("bank", (params[0] == 1) ? (str) : (params));
  740. format(str, sizeof (str), "%.2f", z);
  741. XML_AddParameter(xmlBank, "z", str);
  742. format(str, sizeof (str), "%.2f", y);
  743. XML_AddParameter(xmlBank, "y", str);
  744. format(str, sizeof (str), "%.2f", x);
  745. XML_AddParameter(xmlBank, "x", str);
  746. XML_WriteItem("YSI/YDBG/props.xml", xmlBank);
  747. }
  748. return 1;
  749. }
  750. forward ycmd_createtele(playerid, params[], help);
  751. public ycmd_createtele(playerid, params[], help)
  752. {
  753. if (help)
  754. {
  755. Text_SendFormat(playerid, "YDBG_CREATETELE_HELP_1", "createtele");
  756. Text_SendFormat(playerid, "YDBG_CREATETELE_HELP_2", "set");
  757. Text_Send(playerid, "YDBG_CREATETELE_HELP_3");
  758. }
  759. else
  760. {
  761. if (params[0] != 1)
  762. {
  763. gPlayerCreateData[playerid][37] = strval(params);
  764. new
  765. pos = chrfind(' ', params);
  766. if (pos != -1)
  767. {
  768. pos = chrnfind(' ', params, pos);
  769. if (pos != -1) strcpy(gPlayerCreateData[playerid], params[pos], 37);
  770. }
  771. }
  772. GetPlayerPos(playerid, Float:gPlayerCreateData[playerid][38], Float:gPlayerCreateData[playerid][39], Float:gPlayerCreateData[playerid][40]);
  773. Text_SendFormat(playerid, "YDBG_GO_SET_TELE", "set");
  774. gYDBGPlayerState[playerid] = YDBG_STATE_TELE;
  775. }
  776. return 1;
  777. }
  778. forward ycmd_createma(playerid, params[], help);
  779. public ycmd_createma(playerid, params[], help)
  780. {
  781. if (help)
  782. {
  783. Text_SendFormat(playerid, "YDBG_CREATEMA_HELP_1", "createma");
  784. Text_SendFormat(playerid, "YDBG_CREATEMA_HELP_2", "set");
  785. Text_Send(playerid, "YDBG_CREATEMA_HELP_3");
  786. }
  787. else
  788. {
  789. ShowMenuForPlayerEx(gAreaMenu, playerid);
  790. gYDBGPlayerState[playerid] = YDBG_STATE_MA_WANT;
  791. }
  792. return 1;
  793. }
  794. forward ycmd_set(playerid, params[], help);
  795. public ycmd_set(playerid, params[], help)
  796. {
  797. if (help)
  798. {
  799. Text_SendFormat(playerid, "YDBG_SET_HELP_1", "set");
  800. Text_SendFormat(playerid, "YDBG_SET_HELP_2", "createma", "createtele", "createfz");
  801. Text_Send(playerid, "YDBG_SET_HELP_3");
  802. }
  803. else
  804. {
  805. switch (gYDBGPlayerState[playerid])
  806. {
  807. case YDBG_STATE_MA_POLY:
  808. {
  809. }
  810. case YDBG_STATE_TELE:
  811. {
  812. new
  813. Float:x,
  814. Float:y,
  815. Float:z;
  816. GetPlayerPos(playerid, x, y, z);
  817. CreateTeleport(Float:gPlayerCreateData[playerid][38], Float:gPlayerCreateData[playerid][39], Float:gPlayerCreateData[playerid][40], x, y, z, gPlayerCreateData[playerid][37], gPlayerCreateData[playerid]);
  818. gPlayerCreateData[playerid] = BlankArray();
  819. }
  820. case YDBG_STATE_FZ_POLY:
  821. {
  822. }
  823. default: Text_Send(playerid, "YDBG_SET_NO_NEED");
  824. }
  825. }
  826. return 1;
  827. }
  828. forward ycmd_createprop(playerid, params[], help);
  829. public ycmd_createprop(playerid, params[], help)
  830. {
  831. if (help)
  832. {
  833. Text_SendFormat(playerid, "YDBG_CREATEPROP_HELP_1", "createprop");
  834. Text_Send(playerid, "YDBG_CREATEPROP_HELP_2");
  835. Text_Send(playerid, "YDBG_CREATEPROP_HELP_3");
  836. Text_Send(playerid, "YDBG_CREATEPROP_HELP_4");
  837. Text_Send(playerid, "YDBG_CREATEPROP_HELP_5");
  838. }
  839. else
  840. {
  841. if (params[0] == 1) Text_SendFormat(playerid, "YDBG_CREATEAMMU_HELP_1", "createammu");
  842. else
  843. {
  844. gPlayerCreateData[playerid] = BlankArray();
  845. strcpy(gPlayerCreateData[playerid], params, 37);
  846. ShowCreatePropMenu(playerid);
  847. }
  848. }
  849. return 1;
  850. }
  851. forward ycmd_createammu(playerid, params[], help);
  852. public ycmd_createammu(playerid, params[], help)
  853. {
  854. if (help)
  855. {
  856. Text_SendFormat(playerid, "YDBG_CREATEAMMU_HELP_1", "createammu");
  857. Text_Send(playerid, "YDBG_CREATEAMMU_HELP_2");
  858. Text_Send(playerid, "YDBG_CREATEAMMU_HELP_3");
  859. Text_Send(playerid, "YDBG_CREATEAMMU_HELP_4");
  860. Text_Send(playerid, "YDBG_CREATEAMMU_HELP_5");
  861. }
  862. else
  863. {
  864. gPlayerCreateData[playerid] = BlankArray();
  865. ShowCreateAmmuMenu(playerid, 0);
  866. }
  867. return 1;
  868. }
  869. Script_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  870. {
  871. return 1;
  872. }
  873. Script_OnPlayerKeyPress(playerid, keyid)
  874. {
  875. if (keyid == KEY_ACTION)
  876. {
  877. switch (gYDBGPlayerState[playerid])
  878. {
  879. case YDBG_STATE_FZ_CUBE:
  880. {
  881. new
  882. Float:x1,
  883. Float:y1,
  884. Float:z1,
  885. Float:x2 = gPlayerCreateData[playerid][0],
  886. Float:y2 = gPlayerCreateData[playerid][1],
  887. Float:z2 = gPlayerCreateData[playerid][2];
  888. GetPlayerPos(playerid, x1, y1, z1);
  889. gPlayerCreateData[playerid][40] &= 0xFF000000;
  890. gPlayerCreateData[playerid][40] |= Area_AddCube((x1 > x2) ? (x2) : (x1), (y1 > y2) ? (y2) : (y1), (z1 > z2) ? (z2) : (z1), (x1 > x2) ? (x1) : (x2), (y1 > y2) ? (y1) : (y2), (z1 > z2) ? (z2) : (z1));
  891. }
  892. case YDBG_STATE_MA_CUBE:
  893. {
  894. new
  895. Float:x1,
  896. Float:y1,
  897. Float:z1,
  898. Float:x2 = gPlayerCreateData[playerid][0],
  899. Float:y2 = gPlayerCreateData[playerid][1],
  900. Float:z2 = gPlayerCreateData[playerid][2];
  901. GetPlayerPos(playerid, x1, y1, z1);
  902. gPlayerCreateData[playerid][40] &= 0xFF000000;
  903. gPlayerCreateData[playerid][40] |= Area_AddCube((x1 > x2) ? (x2) : (x1), (y1 > y2) ? (y2) : (y1), (z1 > z2) ? (z2) : (z1), (x1 > x2) ? (x1) : (x2), (y1 > y2) ? (y1) : (y2), (z1 > z2) ? (z2) : (z1));
  904. }
  905. case YDBG_STATE_FZ_BOX:
  906. {
  907. new
  908. Float:x1,
  909. Float:y1,
  910. Float:x2,
  911. Float:y2 = gPlayerCreateData[playerid][1];
  912. GetPlayerPos(playerid, x1, y1, x2);
  913. x2 = gPlayerCreateData[playerid][0];
  914. gPlayerCreateData[playerid][40] &= 0xFF000000;
  915. gPlayerCreateData[playerid][40] |= Area_AddBox((x1 > x2) ? (x2) : (x1), (y1 > y2) ? (y2) : (y1), (x1 > x2) ? (x1) : (x2), (y1 > y2) ? (y1) : (y2));
  916. }
  917. case YDBG_STATE_MA_BOX:
  918. {
  919. new
  920. Float:x1,
  921. Float:y1,
  922. Float:x2,
  923. Float:y2 = gPlayerCreateData[playerid][1];
  924. GetPlayerPos(playerid, x1, y1, x2);
  925. x2 = gPlayerCreateData[playerid][0];
  926. gPlayerCreateData[playerid][40] &= 0xFF000000;
  927. gPlayerCreateData[playerid][40] |= Area_AddBox((x1 > x2) ? (x2) : (x1), (y1 > y2) ? (y2) : (y1), (x1 > x2) ? (x1) : (x2), (y1 > y2) ? (y1) : (y2));
  928. }
  929. case YDBG_STATE_FZ_POLY, YDBG_STATE_MA_POLY:
  930. {
  931. new
  932. count = gPlayerCreateData[playerid][40] & 0xFFFFFF;
  933. if (count < 40)
  934. {
  935. new
  936. Float:x,
  937. Float:y,
  938. Float:z;
  939. GetPlayerPos(playerid, x, y, z);
  940. gPlayerCreateData[playerid][count++] = (floatround(x * 10.0) << 16) | (floatround(y * 10.0) & 0xFFFF);
  941. }
  942. }
  943. }
  944. }
  945. return 1;
  946. }
  947. Script_OnPlayerKeyRelease(playerid, keyid)
  948. {
  949. #pragma unused playerid, keyid
  950. return 1;
  951. }
  952. ShowTypeAmmuMenu(playerid)
  953. {
  954. new
  955. Menu:ammuMenu = CreateMenu("Assignments", 2, 220.0, 200.0, 100.0, 100.0);
  956. AddMenuItem(ammuMenu, 0, "Spawn");
  957. AddMenuItem(ammuMenu, 1, (gPlayerCreateData[playerid][40] & 1) ? ("Yes") : ("No"));
  958. AddMenuItem(ammuMenu, 0, "Instant");
  959. AddMenuItem(ammuMenu, 1, (gPlayerCreateData[playerid][40] & 2) ? ("Yes") : ("No"));
  960. AddMenuItem(ammuMenu, 0, "- Done -");
  961. AddMenuItem(ammuMenu, 1, " ");
  962. ShowMenuForPlayerEx(ammuMenu, playerid);
  963. gYDBGPlayerState[playerid] = YDBG_STATE_AMMU_TYPE;
  964. }
  965. #define AddAmmuMenuItem(%1,%2) \
  966. AddMenuItem(ammuMenu, 0, (%2)); \
  967. if ((weap = gPlayerCreateData[playerid][(%1)])) \
  968. { \
  969. format(str, sizeof (str), "@%d, $%d", weap >>> 20, weap & 0xFFFFF); \
  970. AddMenuItem(ammuMenu, 1, str); \
  971. } \
  972. else AddMenuItem(ammuMenu, 1, "Add...")
  973. ShowCreateAmmuMenu(playerid, page)
  974. {
  975. if (page >= 4) page = 0;
  976. new
  977. Menu:ammuMenu = CreateMenu("Select Weapons", 2, 220.0, 200.0, 100.0, 100.0),
  978. weap,
  979. str[16];
  980. switch (page)
  981. {
  982. case 0:
  983. {
  984. AddAmmuMenuItem(0, "Brassknuckle");
  985. AddAmmuMenuItem(1, "Golfclub");
  986. AddAmmuMenuItem(2, "Night Stick");
  987. AddAmmuMenuItem(3, "Knife");
  988. AddAmmuMenuItem(4, "Bat");
  989. AddAmmuMenuItem(5, "Shovel");
  990. AddAmmuMenuItem(6, "Poolstick");
  991. AddAmmuMenuItem(7, "Katana");
  992. AddAmmuMenuItem(8, "Chainsaw");
  993. AddAmmuMenuItem(9, "Dildo");
  994. }
  995. case 1:
  996. {
  997. AddAmmuMenuItem(10, "Dildo 2");
  998. AddAmmuMenuItem(11, "Vibrator");
  999. AddAmmuMenuItem(12, "Vibrator 2");
  1000. AddAmmuMenuItem(13, "Flower");
  1001. AddAmmuMenuItem(14, "Cane");
  1002. AddAmmuMenuItem(15, "Grenade");
  1003. AddAmmuMenuItem(16, "Teargas");
  1004. AddAmmuMenuItem(17, "Molotov");
  1005. AddAmmuMenuItem(18, "Colt 45");
  1006. AddAmmuMenuItem(19, "Silenced Pistol");
  1007. }
  1008. case 2:
  1009. {
  1010. AddAmmuMenuItem(20, "Desert Eagle");
  1011. AddAmmuMenuItem(21, "Shotgun");
  1012. AddAmmuMenuItem(22, "Sawnoff");
  1013. AddAmmuMenuItem(23, "Spaz 9");
  1014. AddAmmuMenuItem(24, "Uzi");
  1015. AddAmmuMenuItem(25, "MP5");
  1016. AddAmmuMenuItem(26, "AK47");
  1017. AddAmmuMenuItem(27, "M4");
  1018. AddAmmuMenuItem(28, "TEC9");
  1019. AddAmmuMenuItem(29, "Rifle");
  1020. }
  1021. default:
  1022. {
  1023. AddAmmuMenuItem(30, "Sniper Rifle");
  1024. AddAmmuMenuItem(31, "Rocket Launcher");
  1025. AddAmmuMenuItem(32, "Flame Thrower");
  1026. AddAmmuMenuItem(33, "Minigun");
  1027. AddAmmuMenuItem(34, "Satchel Charge");
  1028. AddAmmuMenuItem(35, "Spraycan");
  1029. AddAmmuMenuItem(36, "Fire Extinguisher");
  1030. AddAmmuMenuItem(37, "Camera");
  1031. AddAmmuMenuItem(38, "Parachute");
  1032. AddAmmuMenuItem(39, "Armour");
  1033. }
  1034. }
  1035. AddMenuItem(ammuMenu, 0, "More...");
  1036. AddMenuItem(ammuMenu, 1, " ");
  1037. AddMenuItem(ammuMenu, 0, "- Done -");
  1038. AddMenuItem(ammuMenu, 1, " ");
  1039. ShowMenuForPlayerEx(ammuMenu, playerid);
  1040. gYDBGPlayerState[playerid] = YDBG_STATE_CREATE_AMMU + YDBG_STATE:page;
  1041. return 1;
  1042. }
  1043. ShowCreatePropMenu(playerid)
  1044. {
  1045. new
  1046. Menu:propMenu = CreateMenu(gPlayerCreateData[playerid], 2, 220.0, 200.0, 100.0, 100.0),
  1047. str[16],
  1048. opt = gPlayerCreateData[playerid][40];
  1049. AddMenuItem(propMenu, 0, "price");
  1050. valstr(str, gPlayerCreateData[playerid][37]);
  1051. AddMenuItem(propMenu, 1, str);
  1052. AddMenuItem(propMenu, 0, "reward");
  1053. valstr(str, gPlayerCreateData[playerid][38]);
  1054. AddMenuItem(propMenu, 1, str);
  1055. AddMenuItem(propMenu, 0, "delay");
  1056. valstr(str, gPlayerCreateData[playerid][39]);
  1057. AddMenuItem(propMenu, 1, str);
  1058. AddMenuItem(propMenu, 0, "sell");
  1059. AddMenuItem(propMenu, 1, (opt & 1) ? ("yes") : ("no"));
  1060. AddMenuItem(propMenu, 0, "multi");
  1061. AddMenuItem(propMenu, 1, (opt & 2) ? ("yes") : ("no"));
  1062. AddMenuItem(propMenu, 0, "reduce");
  1063. AddMenuItem(propMenu, 1, (opt & 4) ? ("yes") : ("no"));
  1064. AddMenuItem(propMenu, 0, "increase");
  1065. AddMenuItem(propMenu, 1, (opt & 8) ? ("yes") : ("no"));
  1066. AddMenuItem(propMenu, 0, "- Done -");
  1067. AddMenuItem(propMenu, 1, " ");
  1068. ShowMenuForPlayerEx(propMenu, playerid);
  1069. gYDBGPlayerState[playerid] = YDBG_STATE_CREATE_PROP;
  1070. return 1;
  1071. }
  1072. StartPointSelection(playerid, type)
  1073. {
  1074. gPlayerCreateData[playerid][40] = type << 24;
  1075. switch (type)
  1076. {
  1077. case 0:
  1078. {
  1079. TextDrawSetString(gPlayerTextDraw[playerid], "Go to the far corner and press action (usually tab)");
  1080. GetPlayerPos(playerid, Float:gPlayerCreateData[playerid][0], Float:gPlayerCreateData[playerid][1], Float:gPlayerCreateData[playerid][2]);
  1081. switch (gYDBGPlayerState[playerid])
  1082. {
  1083. case YDBG_STATE_MA_WANT: gYDBGPlayerState[playerid] = YDBG_STATE_MA_CUBE;
  1084. case YDBG_STATE_FZ_WANT: gYDBGPlayerState[playerid] = YDBG_STATE_FZ_CUBE;
  1085. }
  1086. }
  1087. case 1:
  1088. {
  1089. TextDrawSetString(gPlayerTextDraw[playerid], "Go to the far corner and press action (usually tab)");
  1090. new
  1091. Float:z;
  1092. GetPlayerPos(playerid, Float:gPlayerCreateData[playerid][0], Float:gPlayerCreateData[playerid][1], z);
  1093. switch (gYDBGPlayerState[playerid])
  1094. {
  1095. case YDBG_STATE_MA_WANT: gYDBGPlayerState[playerid] = YDBG_STATE_MA_BOX;
  1096. case YDBG_STATE_FZ_WANT: gYDBGPlayerState[playerid] = YDBG_STATE_FZ_BOX;
  1097. }
  1098. }
  1099. case 2:
  1100. {
  1101. new
  1102. Float:z;
  1103. GetPlayerPos(playerid, Float:gPlayerCreateData[playerid][0], Float:gPlayerCreateData[playerid][1], z);
  1104. ShowCreateCircleMenu(playerid);
  1105. switch (gYDBGPlayerState[playerid])
  1106. {
  1107. case YDBG_STATE_MA_WANT: gYDBGPlayerState[playerid] = YDBG_STATE_MA_CIRCLE;
  1108. case YDBG_STATE_FZ_WANT: gYDBGPlayerState[playerid] = YDBG_STATE_FZ_CIRCLE;
  1109. }
  1110. }
  1111. case 3:
  1112. {
  1113. TextDrawSetString(gPlayerTextDraw[playerid], "Enter the radius in the text box");
  1114. GetPlayerPos(playerid, Float:gPlayerCreateData[playerid][0], Float:gPlayerCreateData[playerid][1], Float:gPlayerCreateData[playerid][2]);
  1115. switch (gYDBGPlayerState[playerid])
  1116. {
  1117. case YDBG_STATE_MA_WANT: gYDBGPlayerState[playerid] = YDBG_STATE_MA_SPHERE;
  1118. case YDBG_STATE_FZ_WANT: gYDBGPlayerState[playerid] = YDBG_STATE_FZ_SPHERE;
  1119. }
  1120. }
  1121. case 4:
  1122. {
  1123. TextDrawSetString(gPlayerTextDraw[playerid], "Go to each corner and press tab~n~Type /set when done");
  1124. new
  1125. Float:x,
  1126. Float:y,
  1127. Float:z;
  1128. GetPlayerPos(playerid, x, y, z);
  1129. gPlayerCreateData[playerid][0] = (floatround(x * 10.0) << 16) | (floatround(y * 10.0) & 0xFFFF);
  1130. gPlayerCreateData[playerid][40]++;
  1131. switch (gYDBGPlayerState[playerid])
  1132. {
  1133. case YDBG_STATE_MA_WANT: gYDBGPlayerState[playerid] = YDBG_STATE_MA_POLY;
  1134. case YDBG_STATE_FZ_WANT: gYDBGPlayerState[playerid] = YDBG_STATE_FZ_POLY;
  1135. }
  1136. }
  1137. }
  1138. }
  1139. ShowCreateCircleMenu(playerid)
  1140. {
  1141. new
  1142. Menu:circMenu = CreateMenu("Create Circle", 2, 220.0, 200.0, 100.0, 100.0),
  1143. str[16];
  1144. AddMenuItem(circMenu, 0, "Radius");
  1145. valstr(str, gPlayerCreateData[playerid][2]);
  1146. AddMenuItem(circMenu, 1, str);
  1147. AddMenuItem(circMenu, 0, "Height");
  1148. valstr(str, gPlayerCreateData[playerid][3]);
  1149. AddMenuItem(circMenu, 1, str);
  1150. AddMenuItem(circMenu, 0, "0 = infinate");
  1151. AddMenuItem(circMenu, 1, " ");
  1152. DisableMenuRow(circMenu, 2);
  1153. AddMenuItem(circMenu, 0, "- Done -");
  1154. AddMenuItem(circMenu, 1, " ");
  1155. ShowMenuForPlayerEx(circMenu, playerid);
  1156. return 1;
  1157. }