Guest User

Duelsystem

a guest
Dec 30th, 2014
1,509
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.35 KB | None | 0 0
  1. /*------------------------------------------------------------------------------
  2. ____ _ _
  3. | _ \ | | | |
  4. | | \ |_ _ ___ | |____ _ _ ____| |_ ___ _ ___
  5. | | | | | | |/ _ \| | __| | | | __| _|/ _ \| ' |
  6. | |_/ | \_/ | __/| |__ | |_| |__ | |_| __/| | | |
  7. |____/\___,_|\____|_|____|\__ |____|\__|\____|_|_|_|
  8. by Flojo _| |
  9. |___|
  10.  
  11. Filterscript:
  12. - Duelsystem
  13.  
  14. Scripter:
  15. - Flojo
  16.  
  17. Credits:
  18. - Dachjo, Rbj, m@tty and [Pro]Malik for testing, bugfinding, suggestions
  19. - Zeex 'zcmd'
  20. - Y_Less 'sscanf'
  21.  
  22. Help:
  23. - There are some notes in the script which should help
  24. if you want to change some amounts or timers.
  25.  
  26. ------------------------------------------------------------------------------*/
  27.  
  28. #include <a_samp>
  29. #include <zcmd>
  30. #include <sscanf>
  31.  
  32. #define FILTERSCRIPT
  33. #define COLOR_MAGENTA 0xFF00FFFF
  34. #define COLOR_AQUA 0xF0F8FFAA
  35. #define COLOR_GREEN 0x33AA33AA
  36.  
  37. #define DIALOG_DUELWEAPONS 429
  38. #define DIALOG_DUELWEAPONSTWO 430
  39. #define DIALOG_DUELROUNDS 431
  40.  
  41. forward DuelStart(playerid);
  42. forward DuelTimer(playerid);
  43. forward DelayedDuelSpawn(playerid);
  44. forward DuelbetEnd(playerid);
  45. forward UnnormalDuelend(playerid);
  46.  
  47. public OnFilterScriptInit()
  48. {
  49. print("--- Duelsystem ---");
  50. CreateObject(5791, 2807.30005, -1763.09998, 34.2, 0, 0, 0);
  51. CreateObject(3452, 3394.56006, -1749.20007, 14, 0, 0, 90);
  52. CreateObject(13607, 3358.3994, -1750, 11.8, 0, 0, 0);
  53. CreateObject(3452, 3358, -1714.42004, 14, 0, 0, 179.995);
  54. CreateObject(3453, 3388.2002, -1719.9004, 14, 0, 0, 90);
  55. CreateObject(3453, 3328.69995, -1720.80005, 14, 0, 0, 180);
  56. CreateObject(3453, 3389.0801, -1779.3994, 14, 0, 0, 0);
  57. CreateObject(3452, 3359.77002, -1785.77002, 14, 0, 0, 0);
  58. CreateObject(3452, 3323.21997, -1751.04004, 14, 0, 0, 270);
  59. CreateObject(3453, 3329.5898, -1780.2988, 14, 0, 0, 270);
  60. CreateObject(8572, 3376.0234, -1724.7446, 10.1506, 0, 0, 0);
  61. CreateObject(8572, 3384.2329, -1768.0134, 10.1506, 0, 0, 270);
  62. CreateObject(8572, 3340.9165, -1775.4479, 10.1598, 0, 0, 179.995);
  63. CreateObject(8572, 3333.5444, -1732.9769, 10.1506, 0, 0, 90);
  64. CreateObject(3095, 3342.2317, -1723.2845, 6.88609, 90, 0, 0);
  65. CreateObject(3095, 3351.2288, -1723.2832, 6.88609, 90, 0, 0);
  66. CreateObject(3095, 3360.2168, -1723.2844, 6.88609, 90, 0, 0);
  67. CreateObject(3095, 3369.2134, -1723.2875, 6.88609, 90, 0, 0);
  68. CreateObject(3095, 3375.531, -1723.2854, 6.88609, 90, 0, 0);
  69. CreateObject(3095, 3385.7004, -1733.4332, 6.88609, 90, 0, 270);
  70. CreateObject(3095, 3385.7007, -1742.4258, 6.88609, 90, 0, 269.995);
  71. CreateObject(3095, 3385.7019, -1751.4208, 6.88609, 90, 0, 269.995);
  72. CreateObject(3095, 3385.6987, -1760.411, 6.88609, 90, 0, 269.995);
  73. CreateObject(3095, 3385.7026, -1766.7291, 6.88609, 90, 0, 269.995);
  74. CreateObject(3095, 3375.5408, -1776.9016, 6.88609, 90, 0, 180);
  75. CreateObject(3095, 3375.541, -1776.9014, 6.88609, 90, 0, 179.995);
  76. CreateObject(3095, 3366.561, -1776.9048, 6.88609, 90, 0, 179.995);
  77. CreateObject(3095, 3357.593, -1776.901, 6.88609, 90, 0, 179.995);
  78. CreateObject(3095, 3348.6008, -1776.9082, 6.88609, 90, 0, 179.995);
  79. CreateObject(3095, 3342.2478, -1776.9099, 6.88609, 90, 0, 179.995);
  80. CreateObject(3095, 3332.0815, -1766.7762, 6.88609, 90, 0, 90);
  81. CreateObject(3095, 3332.084, -1757.7804, 6.88609, 90, 0, 90);
  82. CreateObject(3095, 3332.084, -1748.7902, 6.88609, 90, 0, 90);
  83. CreateObject(3095, 3332.0813, -1739.7958, 6.88609, 90, 0, 90);
  84. CreateObject(3095, 3332.0747, -1733.4602, 6.88609, 90, 0, 90);
  85. CreateObject(3095, 3383.7539, -1774.3701, 6.37089, 90, 0, 225);
  86. CreateObject(3095, 3384.5127, -1774.2695, 6.37089, 90, 0, 248);
  87. CreateObject(3095, 3382.7236, -1775.8574, 6.37089, 90, 0, 201.995);
  88. CreateObject(3095, 3333.9805, -1774.3906, 6.36629, 90, 0, 135);
  89. CreateObject(3095, 3335.4199, -1776.0186, 6.36629, 90, 0, 158);
  90. CreateObject(3095, 3332.8809, -1773.335, 6.36629, 90, 0, 111.995);
  91. CreateObject(3095, 3333.9707, -1725.9053, 6.37089, 90, 0, 44.995);
  92. CreateObject(3095, 3335.3193, -1724.2227, 6.37089, 90, 0, 21.995);
  93. CreateObject(3095, 3333.0635, -1726.5205, 6.37089, 90, 0, 66.995);
  94. CreateObject(3095, 3383.6084, -1725.66406, 6.37089, 90, 0, 315);
  95. CreateObject(3095, 3384.1719, -1725.2324, 6.37089, 90, 0, 293);
  96. CreateObject(3095, 3381.4678, -1723.8301, 6.37089, 90, 0, 338);
  97. CreateObject(2395, 3385.6082, -1770.8044, 10.89134, 0, 90, 248);
  98. CreateObject(2395, 3384.7749, -1772.9844, 10.89134, 0, 90, 225);
  99. CreateObject(2395, 3382.1633, -1775.7682, 10.89134, 0, 90, 202);
  100. CreateObject(2395, 3383.5215, -1774.2402, 10.89134, 0, 90, 225);
  101. CreateObject(2395, 3338.1655, -1776.8087, 10.89134, 0, 90, 158);
  102. CreateObject(2395, 3336.0039, -1775.9884, 10.89134, 0, 90, 135);
  103. CreateObject(2395, 3334.9548, -1774.9421, 10.89134, 0, 90, 135);
  104. CreateObject(2395, 3333.2173, -1773.3767, 10.89134, 0, 90, 112);
  105. CreateObject(2395, 3332.177, -1729.3234, 10.89134, 0, 90, 67);
  106. CreateObject(2395, 3333.0676, -1727.174, 10.89134, 0, 90, 45);
  107. CreateObject(2395, 3334.0354, -1726.2052, 10.89134, 0, 90, 45);
  108. CreateObject(2395, 3335.6382, -1724.4154, 10.89134, 0, 90, 22);
  109. CreateObject(2395, 3379.6348, -1723.3929, 10.89134, 0, 90, 338);
  110. CreateObject(2395, 3381.7717, -1724.2012, 10.89134, 0, 90, 315);
  111. CreateObject(2395, 3382.8872, -1725.3167, 10.89134, 0, 90, 314.995);
  112. CreateObject(2395, 3384.5247, -1726.7509, 10.89134, 0, 90, 293);
  113. return 1;
  114. }
  115.  
  116. new Duel[MAX_PLAYERS],
  117. DuelEndTimer[MAX_PLAYERS],
  118. Duelmaker[MAX_PLAYERS],
  119. Duelopponent[MAX_PLAYERS],
  120. Gotrequest[MAX_PLAYERS],
  121. Maderequest[MAX_PLAYERS],
  122. Duelbet[MAX_PLAYERS],
  123. DuelbetPlayer[MAX_PLAYERS],
  124. DuelbetEnabled[MAX_PLAYERS],
  125. UnDuelend[MAX_PLAYERS],
  126. Duelrounds[MAX_PLAYERS],
  127. Duelwins[MAX_PLAYERS],
  128. Duelweap1[MAX_PLAYERS],
  129. Duelweap2[MAX_PLAYERS],
  130. bool:DuelToggle;
  131.  
  132. //------------------------------------------------------------------------------
  133.  
  134. CMD:duel(playerid,params[])
  135. {
  136. new PID;
  137. if(DuelToggle == true)return SendClientMessage(playerid,COLOR_GREEN,"SERVER: You're not allowed to use this command.");
  138. if(sscanf(params,"u",PID))return SendClientMessage(playerid,COLOR_GREEN,"/duel [id]");
  139. if(!IsPlayerConnected(PID)) return SendClientMessage(playerid,COLOR_GREEN,"SERVER: There is no player with this id.");
  140. if(Duel[playerid] >=1) return SendClientMessage(playerid,COLOR_GREEN,"SERVER: You're already in a duel.");
  141. {
  142. if(Duel[PID] >=1)
  143. {
  144. SendClientMessage(playerid,COLOR_MAGENTA,"* This player is already in a duel.");
  145. }
  146. else
  147. {
  148. if(PID == playerid) return SendClientMessage(playerid,COLOR_GREEN,"SERVER: You can't duel yourself.");
  149. Duelmaker[PID] = playerid;
  150. Duelopponent[playerid] = PID;
  151. Gotrequest[PID] = 1;
  152. Maderequest[playerid] = 1;
  153. ShowPlayerDialog(playerid, DIALOG_DUELWEAPONS, DIALOG_STYLE_LIST, "{FF00FF}First Duelweapon","{F0F8FF}Desert Eagle\n{F0F8FF}Shotgun\n{F0F8FF}Sawnoff Shotgun\n{F0F8FF}Combat Shotgun\n{F0F8FF}Micro SMG\n{F0F8FF}MP5\n{F0F8FF}AK-47\n{F0F8FF}M4\n{F0F8FF}Tec-9\n{F0F8FF}Country Rifle\n{F0F8FF}Sniper Rifle\n{F0F8FF}Fist\n{F0F8FF}Knife\n{F0F8FF}Katana\n{F0F8FF}Chainsaw\n{F0F8FF}Colt\n{F0F8FF}Silenced 9mm","Okey","");
  154. }
  155. }
  156. return 1;
  157. }
  158.  
  159. CMD:accept(playerid,params[])
  160. {
  161. new PID = Duelmaker[playerid];
  162. if(Duel[playerid] ==0) return SendClientMessage(playerid,COLOR_MAGENTA,"* You're not invited for a duel.");
  163. if(Gotrequest[playerid]==1)
  164. if(IsPlayerConnected(PID))
  165. {
  166. if(Duel[PID] ==1)
  167. {
  168. new string[150],Weaponname[32],Weaponname2[32];
  169. GetWeaponName(Duelweap1[PID],Weaponname,32);
  170. GetWeaponName(Duelweap2[PID],Weaponname2,32);
  171. format(string,sizeof(string),"DUEL: {F0F8FF}%s {FF00FF}vs {F0F8FF}%s. {FF00FF}Weapons: {F0F8FF}%s, %s {FF00FF}Rounds: {F0F8FF}%d",PlayerName(playerid),PlayerName(PID),Weaponname,Weaponname2,Duelrounds[PID]);
  172. SendClientMessageToAll(COLOR_MAGENTA,string);
  173. SendClientMessageToAll(COLOR_AQUA,"DUEL: You can use now /duelbet [id] [amount] for this duel.");
  174. SendClientMessage(PID,COLOR_MAGENTA,"* Your duelrequest has been accepted.");
  175. SendClientMessage(playerid,COLOR_MAGENTA,"* You accepted the duelrequest.");
  176. SetPlayerFacingAngle(PID,135);
  177. SetPlayerPos(PID,3374.6348,-1734.9648,9.2609);
  178. SetPlayerFacingAngle(playerid,-45);
  179. SetPlayerPos(playerid,3341.7039,-1766.2764,9.2609);
  180. Duel[PID] = 3;
  181. Duel[playerid] = 2;
  182. PlayerDuelPrep(playerid);
  183. PlayerDuelPrep(PID);
  184. SetTimerEx("DuelStart",5000,false,"i",PID);
  185. SetTimerEx("DuelStart",5000,false,"i",playerid);
  186. GameTextForPlayer(PID,"~g~Ready, Steady",5000,4);
  187. GameTextForPlayer(playerid,"~g~Ready, Steady",5000,4);
  188. DuelbetEnabled[PID] = 1;
  189. DuelbetEnabled[playerid] = 1;
  190. SetTimerEx("DuelbetEnd",10000,false,"i",PID);
  191. SetTimerEx("DuelbetEnd",10000,false,"i",playerid);
  192. KillTimer(DuelEndTimer[playerid]);
  193. KillTimer(DuelEndTimer[PID]);
  194. UnDuelend[PID] = SetTimerEx("UnnormalDuelend",80000,false,"i",PID);//Here you can change the time after which the duel
  195. UnDuelend[playerid] = SetTimerEx("UnnormalDuelend",80000,false,"i",playerid);//will end when noone was killed.(Or when one went afk)
  196. }
  197. }
  198. return 1;
  199. }
  200.  
  201. CMD:cancel(playerid,params[])
  202. {
  203. new PID = Duelmaker[playerid];
  204. if(Duel[playerid] ==0) return SendClientMessage(playerid,COLOR_MAGENTA,"* You're not invited for a duel.");
  205. if(Gotrequest[playerid]==1)
  206. if(IsPlayerConnected(PID))
  207. {
  208. if(Duel[PID] ==1)
  209. {
  210. SendClientMessage(PID,COLOR_MAGENTA,"* Your duelrequest has been denied.");
  211. Duel[PID] = 0;
  212. SendClientMessage(playerid,COLOR_MAGENTA,"* You denied the duelrequest.");
  213. Duel[playerid] = 0;
  214. KillTimer(DuelEndTimer[playerid]);
  215. KillTimer(DuelEndTimer[PID]);
  216. }
  217. }
  218. return 1;
  219. }
  220.  
  221. //------------------------------------------------------------------------------
  222.  
  223. CMD:toggleduel(playerid,params[])
  224. {
  225. if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,COLOR_GREEN,"You are not allowed to use this command!");
  226. if(DuelToggle == false)
  227. {
  228. DuelToggle = true;
  229. SendClientMessage(playerid,COLOR_MAGENTA,"DUEL: You disabled the duelrequests.");
  230. }
  231. else if(DuelToggle == true)
  232. {
  233. DuelToggle = false;
  234. SendClientMessage(playerid,COLOR_MAGENTA,"DUEL: You enabled the duelrequests.");
  235. }
  236. return 1;
  237. }
  238.  
  239. CMD:duellist(playerid,params[])
  240. {
  241. new count,string[160];
  242. SendClientMessage(playerid,COLOR_MAGENTA," --> Running Duels:");
  243. for(new i=0;i<MAX_PLAYERS;i++)
  244. if(IsPlayerConnected(i))
  245. {
  246. if(Duel[i] ==2)
  247. {
  248. new PID=Duelmaker[i],Weaponname[32],Weaponname2[32];
  249. GetWeaponName(Duelweap1[PID],Weaponname,32);
  250. GetWeaponName(Duelweap2[PID],Weaponname2,32);
  251. format(string,sizeof(string)," -> {F0F8FF}%s {FF00FF}vs {F0F8FF}%s{FF00FF} Weapons:{F0F8FF} %s, %s {FF00FF}Rounds:{F0F8FF} %i",PlayerName(i),PlayerName(PID),Weaponname,Weaponname2,Duelrounds[PID]);
  252. SendClientMessage(playerid,COLOR_MAGENTA,string);
  253. count++;
  254. }
  255.  
  256. }
  257. if(count==0)
  258. {
  259. SendClientMessage(playerid,COLOR_AQUA,"* Currently there aren't any duels running.");
  260. }
  261. return 1;
  262. }
  263.  
  264. CMD:duelhelp(playerid,params[])
  265. {
  266. SendClientMessage(playerid,COLOR_MAGENTA,"-------------------------------------------------------------------");
  267. SendClientMessage(playerid,COLOR_MAGENTA," --> Duelhelp:");
  268. SendClientMessage(playerid,COLOR_AQUA," * /duel [id] - /accept - /cancel");
  269. SendClientMessage(playerid,COLOR_AQUA," * /duelbet [id] [amount] - /duellist - /endduel - /toggleduel");
  270. SendClientMessage(playerid,COLOR_MAGENTA,"-------------------------------------------------------------------");
  271. return 1;
  272. }
  273.  
  274. CMD:endduel(playerid,params[])
  275. {
  276. if(Duel[playerid] <2) return SendClientMessage(playerid,COLOR_GREEN,"SERVER: You're not in a duel.");
  277. if(Maderequest[playerid] == 1)
  278. {
  279. new string[150];
  280. new PID = Duelopponent[playerid];
  281. Duelrounds[playerid] = 0;
  282. Duelrounds[PID] = 0;
  283. Duel[playerid] = 0;
  284. Duel[PID] = 0;
  285. SetPlayerVirtualWorld(playerid,0);
  286. SetPlayerVirtualWorld(PID,0);
  287. Maderequest[playerid] = 0;
  288. SpawnPlayer(playerid);
  289. SpawnPlayer(PID);
  290. format(string,sizeof(string),"DUEL: {F0F8FF}%s {FF00FF}has won the duel against {F0F8FF}%s{FF00FF}. Reason: {F0F8FF}Cancelled by %s ",PlayerName(PID),PlayerName(playerid),PlayerName(playerid));
  291. SendClientMessageToAll(COLOR_MAGENTA,string);
  292. GivePlayerMoney(playerid, - 5000);//Here you can change the amount the /endduel cmd costs.
  293. KillTimer(UnDuelend[playerid]);
  294. KillTimer(UnDuelend[PID]);
  295. }
  296. else if(Gotrequest[playerid] == 1)
  297. {
  298. new string2[150];
  299. new PID = Duelmaker[playerid];
  300. Duelrounds[playerid] = 0;
  301. Duelrounds[PID] = 0;
  302. Duel[playerid] = 0;
  303. Duel[PID] = 0;
  304. SetPlayerVirtualWorld(playerid,0);
  305. SetPlayerVirtualWorld(PID,0);
  306. Gotrequest[playerid] = 0;
  307. SpawnPlayer(playerid);
  308. SpawnPlayer(PID);
  309. format(string2,sizeof(string2),"DUEL: {F0F8FF}%s {FF00FF}has won the duel against {F0F8FF}%s{FF00FF}. Reason: {F0F8FF}Cancelled by %s ",PlayerName(PID),PlayerName(playerid),PlayerName(playerid));
  310. SendClientMessageToAll(COLOR_MAGENTA,string2);
  311. GivePlayerMoney(playerid, - 5000);//Here you can change the amount the /endduel cmd costs.
  312. KillTimer(UnDuelend[playerid]);
  313. KillTimer(UnDuelend[PID]);
  314. }
  315. return 1;
  316. }
  317.  
  318. //------------------------------------------------------------------------------
  319.  
  320. CMD:duelbet(playerid,params[])
  321. {
  322. new PID,amount;
  323. if(sscanf(params,"ui",PID,amount)) return SendClientMessage(playerid,COLOR_GREEN,"/duelbet [id] [amount]");
  324. //if(Duel[playerid]>=1) return SendClientMessage(playerid,COLOR_GREEN,"SERVER: You can't bet while being in a duel.");
  325. if(Duel[PID]<2) return SendClientMessage(playerid,COLOR_GREEN,"SERVER: This player isn't in a duel.");
  326. if(DuelbetEnabled[PID] == 0) return SendClientMessage(playerid,COLOR_GREEN,"SERVER: The bet time for this duel is over.");
  327. if(amount<1000 || amount>100000) return SendClientMessage(playerid,COLOR_GREEN,"SERVER: The duelbet amount need to be between $1,000 and $100,000");
  328. if(GetPlayerMoney(playerid) < 0) return SendClientMessage(playerid,COLOR_GREEN,"SERVER: You don't have enough money.");
  329. if(Duelbet[playerid] > 0)
  330. {
  331. SendClientMessage(playerid,COLOR_GREEN,"SERVER: You already placed a bet on a duel.");
  332. }
  333. else
  334. {
  335. new string[128];
  336. DuelbetPlayer[playerid] = PID;
  337. Duelbet[playerid] = amount;
  338. GivePlayerMoney(playerid, - amount);
  339. format(string,sizeof(string),"* You have placed a bet of %i on %s.",amount,PlayerName(PID));
  340. SendClientMessage(playerid,COLOR_AQUA,string);
  341. }
  342. return 1;
  343. }
  344.  
  345. //------------------------------------------------------------------------------
  346.  
  347. public OnPlayerDisconnect(playerid)
  348. {
  349. if(Duel[playerid] >=2)
  350. {
  351. if(Maderequest[playerid] == 1)
  352. {
  353. new PID = Duelopponent[playerid];
  354. SpawnPlayer(PID);
  355. KillTimer(UnDuelend[playerid]);
  356. KillTimer(UnDuelend[PID]);
  357. Duel[PID] = 0;
  358. Duelrounds[PID] = 0;
  359. }
  360. else if(Gotrequest[playerid] == 1)
  361. {
  362. new PID = Duelmaker[playerid];
  363. SpawnPlayer(PID);
  364. KillTimer(UnDuelend[playerid]);
  365. KillTimer(UnDuelend[PID]);
  366. Duel[PID] = 0;
  367. Duelrounds[PID] = 0;
  368. }
  369. }
  370. DuelEndTimer[playerid] = 0;
  371. Duelmaker[playerid] = 0;
  372. Duelopponent[playerid] = 0;
  373. Gotrequest[playerid] = 0;
  374. Maderequest[playerid] = 0;
  375. Duelbet[playerid] = 0;
  376. DuelbetPlayer[playerid] = 0;
  377. DuelbetEnabled[playerid] = 0;
  378. Duel[playerid] = 0;
  379. Duelrounds[playerid] = 0;
  380. Duelweap1[playerid] = 0;
  381. Duelweap2[playerid] = 0;
  382. return 1;
  383. }
  384.  
  385. //------------------------------------------------------------------------------
  386.  
  387. public DelayedDuelSpawn(playerid)
  388. {
  389. if(Maderequest[playerid] == 1)
  390. {
  391. new string[150],Weaponname[32],Weaponname2[32];
  392. new PID = Duelopponent[playerid];
  393. GetWeaponName(Duelweap1[playerid],Weaponname,32);
  394. GetWeaponName(Duelweap2[playerid],Weaponname2,32);
  395. format(string,sizeof(string),"DUEL: {F0F8FF}%s {FF00FF}vs {F0F8FF}%s. {FF00FF}Weapons: {F0F8FF}%s, %s {FF00FF}Round: {F0F8FF}%i",PlayerName(playerid),PlayerName(PID),Weaponname,Weaponname2,Duelrounds[playerid]);
  396. SendClientMessageToAll(COLOR_MAGENTA,string);
  397. SendClientMessageToAll(COLOR_AQUA,"DUEL: You can use now /duelbet [id] [amount] for this duel.");
  398. SetPlayerFacingAngle(PID,135);
  399. SetPlayerPos(PID,3374.6348,-1734.9648,9.2609);
  400. SetPlayerFacingAngle(playerid,-45);
  401. SetPlayerPos(playerid,3341.7039,-1766.2764,9.2609);
  402. PlayerDuelPrep(playerid);
  403. PlayerDuelPrep(PID);
  404. SetTimerEx("DuelStart",5000,false,"i",PID);
  405. SetTimerEx("DuelStart",5000,false,"i",playerid);
  406. GameTextForPlayer(PID,"~g~Ready, Steady",5000,4);
  407. GameTextForPlayer(playerid,"~g~Ready, Steady",5000,4);
  408. DuelbetEnabled[PID] = 1;
  409. DuelbetEnabled[playerid] = 1;
  410. SetTimerEx("DuelbetEnd",10000,false,"i",PID);
  411. SetTimerEx("DuelbetEnd",10000,false,"i",playerid);
  412. UnDuelend[PID] = SetTimerEx("UnnormalDuelend",80000,false,"i",PID);//Here you can change the time after which the duel
  413. UnDuelend[playerid] = SetTimerEx("UnnormalDuelend",80000,false,"i",playerid);//will end when noone was killed.(Or when one went afk)
  414. }
  415. else if(Gotrequest[playerid] == 1)
  416. {
  417. new string[150],Weaponname[32],Weaponname2[32];
  418. new PID = Duelmaker[playerid];
  419. GetWeaponName(Duelweap1[playerid],Weaponname,32);
  420. GetWeaponName(Duelweap2[playerid],Weaponname2,32);
  421. format(string,sizeof(string),"DUEL: {F0F8FF}%s {FF00FF}vs {F0F8FF}%s. {FF00FF}Weapons: {F0F8FF}%s, %s {FF00FF}Round: {F0F8FF}%i",PlayerName(playerid),PlayerName(PID),Weaponname,Weaponname2,Duelrounds[playerid]);
  422. SendClientMessageToAll(COLOR_MAGENTA,string);
  423. SendClientMessageToAll(COLOR_AQUA,"DUEL: You can use now /duelbet [id] [amount] for this duel.");
  424. SetPlayerFacingAngle(PID,135);
  425. SetPlayerPos(PID,3374.6348,-1734.9648,9.2609);
  426. SetPlayerFacingAngle(playerid,-45);
  427. SetPlayerPos(playerid,3341.7039,-1766.2764,9.2609);
  428. PlayerDuelPrep(playerid);
  429. PlayerDuelPrep(PID);
  430. SetTimerEx("DuelStart",5000,false,"i",PID);
  431. SetTimerEx("DuelStart",5000,false,"i",playerid);
  432. GameTextForPlayer(PID,"~g~Ready, Steady",5000,4);
  433. GameTextForPlayer(playerid,"~g~Ready, Steady",5000,4);
  434. DuelbetEnabled[PID] = 1;
  435. DuelbetEnabled[playerid] = 1;
  436. SetTimerEx("DuelbetEnd",10000,false,"i",PID);
  437. SetTimerEx("DuelbetEnd",10000,false,"i",playerid);
  438. UnDuelend[PID] = SetTimerEx("UnnormalDuelend",80000,false,"i",PID);//Here you can change the time after which the duel
  439. UnDuelend[playerid] = SetTimerEx("UnnormalDuelend",80000,false,"i",playerid);//will end when noone was killed.(Or when one went afk)
  440. }
  441. return 1;
  442. }
  443.  
  444. public OnPlayerSpawn(playerid)
  445. {
  446. if(Duel[playerid] >=2)
  447. {
  448. if(Duelrounds[playerid] >0)
  449. {
  450. SetTimerEx("DelayedDuelSpawn",2000,false,"i",playerid);//Change the "2000" to the spawndelaytime you want. I recommend 2 seconds as a minimum.
  451. }
  452. }
  453. return 1;
  454. }
  455.  
  456. //------------------------------------------------------------------------------
  457.  
  458. public OnPlayerDeath(playerid, killerid, reason)
  459. {
  460. if(Duel[killerid] >=2 && Duel[playerid] >=2)
  461. {
  462. if(Duelrounds[playerid] <=1)
  463. {
  464. if(Duel[playerid] >=2)
  465. {
  466. Duel[playerid] = 0;
  467. SetPlayerVirtualWorld(playerid,0);
  468. Gotrequest[playerid] = 0;
  469. Maderequest[playerid] = 0;
  470. KillTimer(UnDuelend[playerid]);
  471. }
  472. }
  473. if(Duelrounds[playerid] >1)
  474. {
  475. Duelrounds[playerid] -= 1;
  476. KillTimer(UnDuelend[playerid]);
  477. }
  478. //Killerid
  479. if(Duelrounds[killerid] <=1)
  480. {
  481. if(Duel[killerid] >=2)
  482. {
  483. Gotrequest[killerid] = 0;
  484. Maderequest[killerid] = 0;
  485. Duelwins[killerid] += 1;
  486. SetPlayerVirtualWorld(killerid,0);
  487. Duel[killerid] = 0;
  488. new string[160],string2[128];
  489. new Weaponname[32],Weaponname2[32];
  490. GetWeaponName(Duelweap1[playerid],Weaponname,32);
  491. GetWeaponName(Duelweap2[playerid],Weaponname2,32);
  492. format(string,sizeof(string),"DUEL: {F0F8FF}%s {FF00FF}has won the last round against {F0F8FF}%s.{FF00FF} Weapons: {F0F8FF}%s, %s",PlayerName(killerid),PlayerName(playerid),Weaponname,Weaponname2);
  493. format(string2,sizeof(string2),"-> Final Result: %s {F0F8FF}%i:%i {FF00FF}%s",PlayerName(killerid),Duelwins[killerid],Duelwins[playerid],PlayerName(playerid));
  494. SendClientMessageToAll(COLOR_MAGENTA,string);
  495. SendClientMessageToAll(COLOR_MAGENTA,string2);
  496. SendClientMessage(killerid,COLOR_AQUA,"* You won the last round and received a reward. Congratulation.");
  497. GivePlayerMoney(killerid,5000);//This amount will the duelwinner receive. Change it to your prefered amount.
  498. SpawnPlayer(killerid);
  499. KillTimer(UnDuelend[killerid]);
  500. }
  501. }
  502. if(Duelrounds[killerid] >1)
  503. {
  504. new string[160];
  505. Duelwins[killerid] += 1;
  506. Duelrounds[killerid] -= 1;
  507. new Weaponname[32],Weaponname2[32];
  508. GetWeaponName(Duelweap1[playerid],Weaponname,32);
  509. GetWeaponName(Duelweap2[playerid],Weaponname2,32);
  510. format(string,sizeof(string),"DUEL: {F0F8FF}%s {FF00FF}has won the duel against {F0F8FF}%s.{FF00FF} Weapons: {F0F8FF}%s, %s",PlayerName(killerid),PlayerName(playerid),Weaponname,Weaponname2);
  511. SendClientMessageToAll(COLOR_MAGENTA,string);
  512. SendClientMessage(killerid,COLOR_AQUA,"* You won this round and received a reward. Congratulation.");
  513. GivePlayerMoney(killerid,5000);//Same like above. This is the reward the duelwinner will receive.
  514. KillTimer(UnDuelend[killerid]);
  515. }
  516. for(new i = 0; i < MAX_PLAYERS; i++)
  517. {
  518. if(Duelbet[i]>0)
  519. {
  520. if(DuelbetPlayer[i] == killerid)
  521. {
  522. new string[128];
  523. format(string,sizeof(string),"* You won %i from your duelbet.",Duelbet[i] * 2);
  524. SendClientMessage(i,COLOR_AQUA,string);
  525. GivePlayerMoney(i,Duelbet[i] * 2);
  526. Duelbet[i] = 0;
  527. }
  528. else
  529. {
  530. SendClientMessage(i,COLOR_AQUA,"* Your duelbet were wrong. Good luck next time.");
  531. Duelbet[i] = 0;
  532. }
  533. }
  534. }
  535. }
  536. if(Duel[killerid] >=2 && Duel[playerid] <2)
  537. {
  538. if(Gotrequest[killerid] == 1)
  539. {
  540. new PID = Duelmaker[killerid];
  541. Gotrequest[killerid] = 0;
  542. Maderequest[PID] = 0;
  543. SetPlayerVirtualWorld(killerid,0);
  544. Duel[killerid] = 0;
  545. Duelrounds[killerid] = 0;
  546. SetPlayerVirtualWorld(PID,0);
  547. Duel[PID] = 0;
  548. Duelrounds[PID] = 0;
  549. SendClientMessage(killerid,COLOR_MAGENTA,"* The duel ended due to some issues.");
  550. SendClientMessage(PID,COLOR_MAGENTA,"* The duel ended due to some issues.");
  551. SpawnPlayer(killerid);
  552. SpawnPlayer(PID);
  553. KillTimer(UnDuelend[killerid]);
  554. KillTimer(UnDuelend[PID]);
  555. }
  556. if(Maderequest[killerid] == 1)
  557. {
  558. new PID = Duelopponent[killerid];
  559. Maderequest[killerid] = 0;
  560. Gotrequest[PID] = 0;
  561. SetPlayerVirtualWorld(killerid,0);
  562. Duel[killerid] = 0;
  563. Duelrounds[killerid] = 0;
  564. SetPlayerVirtualWorld(PID,0);
  565. Duel[PID] = 0;
  566. Duelrounds[PID] = 0;
  567. SendClientMessage(killerid,COLOR_MAGENTA,"* The duel ended due to some issues.");
  568. SendClientMessage(PID,COLOR_MAGENTA,"* The duel ended due to some issues.");
  569. SpawnPlayer(killerid);
  570. SpawnPlayer(PID);
  571. KillTimer(UnDuelend[killerid]);
  572. KillTimer(UnDuelend[PID]);
  573. }
  574. }
  575. if(Duel[killerid] <2 && Duel[playerid] >=2)
  576. {
  577. if(Gotrequest[playerid] == 1)
  578. {
  579. new PID = Duelmaker[playerid];
  580. Gotrequest[playerid] = 0;
  581. Maderequest[PID] = 0;
  582. SetPlayerVirtualWorld(playerid,0);
  583. Duel[playerid] = 0;
  584. Duelrounds[playerid] = 0;
  585. SetPlayerVirtualWorld(PID,0);
  586. Duel[PID] = 0;
  587. Duelrounds[PID] = 0;
  588. SendClientMessage(playerid,COLOR_MAGENTA,"* The duel ended due to some issues.");
  589. SendClientMessage(PID,COLOR_MAGENTA,"* The duel ended due to some issues.");
  590. SpawnPlayer(playerid);
  591. SpawnPlayer(PID);
  592. KillTimer(UnDuelend[playerid]);
  593. KillTimer(UnDuelend[PID]);
  594. }
  595. if(Maderequest[playerid] == 1)
  596. {
  597. new PID = Duelopponent[playerid];
  598. Maderequest[playerid] = 0;
  599. Gotrequest[PID] = 0;
  600. SetPlayerVirtualWorld(playerid,0);
  601. Duel[playerid] = 0;
  602. Duelrounds[playerid] = 0;
  603. SetPlayerVirtualWorld(PID,0);
  604. Duel[PID] = 0;
  605. Duelrounds[PID] = 0;
  606. SendClientMessage(playerid,COLOR_MAGENTA,"* The duel ended due to some issues.");
  607. SendClientMessage(PID,COLOR_MAGENTA,"* The duel ended due to some issues.");
  608. SpawnPlayer(playerid);
  609. SpawnPlayer(PID);
  610. KillTimer(UnDuelend[playerid]);
  611. KillTimer(UnDuelend[PID]);
  612. }
  613. }
  614. return 1;
  615. }
  616.  
  617. //------------------------------------------------------------------------------
  618.  
  619. public DuelStart(playerid)
  620. {
  621. TogglePlayerControllable(playerid,1);
  622. GameTextForPlayer(playerid,"~b~GO GO GO",3000,4);
  623. PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  624. }
  625.  
  626. public DuelTimer(playerid)
  627. {
  628. if(Duel[playerid] <2)
  629. {
  630. Duel[playerid] = 0;
  631. SendClientMessage(playerid,COLOR_AQUA,"* The duelrequest has not been answered within 30 seconds, so it's declined.");
  632. }
  633. return 1;
  634. }
  635.  
  636. public DuelbetEnd(playerid)
  637. {
  638. DuelbetEnabled[playerid] = 0;
  639. return 1;
  640. }
  641.  
  642. public UnnormalDuelend(playerid)
  643. {
  644. Maderequest[playerid] = 0;
  645. Gotrequest[playerid] = 0;
  646. SetPlayerVirtualWorld(playerid,0);
  647. Duel[playerid] = 0;
  648. Duelrounds[playerid] = 0;
  649. SendClientMessage(playerid,COLOR_MAGENTA,"* The duel ended because it took to long.");
  650. SpawnPlayer(playerid);
  651. return 1;
  652. }
  653.  
  654. //------------------------------------------------------------------------------
  655.  
  656. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  657. {
  658. if(dialogid == DIALOG_DUELWEAPONS)
  659. {
  660. if(response)
  661. {
  662. switch(listitem)
  663. {
  664. case 0: {
  665. PrepareDuelWeapon(playerid,24);}
  666. case 1: {
  667. PrepareDuelWeapon(playerid,25);}
  668. case 2: {
  669. PrepareDuelWeapon(playerid,26);}
  670. case 3: {
  671. PrepareDuelWeapon(playerid,27);}
  672. case 4: {
  673. PrepareDuelWeapon(playerid,28);}
  674. case 5: {
  675. PrepareDuelWeapon(playerid,29);}
  676. case 6: {
  677. PrepareDuelWeapon(playerid,30);}
  678. case 7: {
  679. PrepareDuelWeapon(playerid,31);}
  680. case 8: {
  681. PrepareDuelWeapon(playerid,32);}
  682. case 9: {
  683. PrepareDuelWeapon(playerid,33);}
  684. case 10: {
  685. PrepareDuelWeapon(playerid,34);}
  686. case 11: {
  687. PrepareDuelWeapon(playerid,0);}
  688. case 12: {
  689. PrepareDuelWeapon(playerid,4);}
  690. case 13: {
  691. PrepareDuelWeapon(playerid,8);}
  692. case 14: {
  693. PrepareDuelWeapon(playerid,9);}
  694. case 15: {
  695. PrepareDuelWeapon(playerid,22);}
  696. case 16: {
  697. PrepareDuelWeapon(playerid,23);}
  698. }
  699. }
  700. return 1;
  701. }
  702. if(dialogid == DIALOG_DUELWEAPONSTWO)
  703. {
  704. if(response)
  705. {
  706. switch(listitem)
  707. {
  708. case 0: {
  709. PrepareDuelWeapon2(playerid,24);}
  710. case 1: {
  711. PrepareDuelWeapon2(playerid,25);}
  712. case 2: {
  713. PrepareDuelWeapon2(playerid,26);}
  714. case 3: {
  715. PrepareDuelWeapon2(playerid,27);}
  716. case 4: {
  717. PrepareDuelWeapon2(playerid,28);}
  718. case 5: {
  719. PrepareDuelWeapon2(playerid,29);}
  720. case 6: {
  721. PrepareDuelWeapon2(playerid,30);}
  722. case 7: {
  723. PrepareDuelWeapon2(playerid,31);}
  724. case 8: {
  725. PrepareDuelWeapon2(playerid,32);}
  726. case 9: {
  727. PrepareDuelWeapon2(playerid,33);}
  728. case 10: {
  729. PrepareDuelWeapon2(playerid,34);}
  730. case 11: {
  731. PrepareDuelWeapon2(playerid,0);}
  732. case 12: {
  733. PrepareDuelWeapon2(playerid,4);}
  734. case 13: {
  735. PrepareDuelWeapon2(playerid,8);}
  736. case 14: {
  737. PrepareDuelWeapon2(playerid,9);}
  738. case 15: {
  739. PrepareDuelWeapon2(playerid,22);}
  740. case 16: {
  741. PrepareDuelWeapon2(playerid,23);}
  742. }
  743. }
  744. else
  745. {
  746. EndDuel(playerid);
  747. }
  748. return 1;
  749. }
  750. if(dialogid == DIALOG_DUELROUNDS)
  751. {
  752. if(response)
  753. {
  754. switch(listitem)
  755. {
  756. case 0: {
  757. PrepareDuelRounds(playerid,1);}
  758. case 1: {
  759. PrepareDuelRounds(playerid,2);}
  760. case 2: {
  761. PrepareDuelRounds(playerid,3);}
  762. case 3: {
  763. PrepareDuelRounds(playerid,4);}
  764. case 4: {
  765. PrepareDuelRounds(playerid,5);}
  766. case 5: {
  767. PrepareDuelRounds(playerid,6);}
  768. case 6: {
  769. PrepareDuelRounds(playerid,7);}
  770. }
  771. }
  772. else
  773. {
  774. EndDuel(playerid);
  775. }
  776. return 1;
  777. }
  778. return 0;
  779. }
  780.  
  781. //------------------------------------------------------------------------------
  782. //This stocks just make the script a bit shorter.
  783. stock PrepareDuelWeapon(playerid,weaponid)
  784. {
  785. new PID = Duelopponent[playerid];
  786. if(Duel[PID] >=1) return SendClientMessage(playerid,COLOR_MAGENTA,"* This player is already in a duel.");
  787. {
  788. Duelweap1[playerid] = weaponid;
  789. Duelweap1[PID] = weaponid;
  790. Duel[PID] = 1;
  791. Duel[playerid] = 1;
  792. Duelwins[PID] = 0;
  793. Duelwins[playerid] = 0;
  794. ShowPlayerDialog(playerid, DIALOG_DUELWEAPONSTWO, DIALOG_STYLE_LIST, "{FF00FF}Second Duelweapon","{F0F8FF}Desert Eagle\n{F0F8FF}Shotgun\n{F0F8FF}Sawnoff Shotgun\n{F0F8FF}Combat Shotgun\n{F0F8FF}Micro SMG\n{F0F8FF}MP5\n{F0F8FF}AK-47\n{F0F8FF}M4\n{F0F8FF}Tec-9\n{F0F8FF}Country Rifle\n{F0F8FF}Sniper Rifle\n{F0F8FF}Fist\n{F0F8FF}Knife\n{F0F8FF}Katana\n{F0F8FF}Chainsaw\n{F0F8FF}Colt\n{F0F8FF}Silenced 9mm","Okey","Cancel");
  795. }
  796. return 1;
  797. }
  798.  
  799. stock PrepareDuelWeapon2(playerid,weaponid)
  800. {
  801. new PID = Duelopponent[playerid];
  802. Duelweap2[playerid] = weaponid;
  803. Duelweap2[PID] = weaponid;
  804. SendClientMessage(playerid,COLOR_MAGENTA,"* You have chosen the duelweapons.");
  805. ShowPlayerDialog(playerid,DIALOG_DUELROUNDS,DIALOG_STYLE_LIST,"{FF00FF}How many rounds shall the duel last?","{F0F8FF}1 Round\n{F0F8FF}2 Rounds\n{F0F8FF}3 Rounds\n{F0F8FF}4 Rounds\n{F0F8FF}5 Rounds\n{F0F8FF}6 Rounds\n{F0F8FF}7 Rounds","Select","Cancel");
  806. return 1;
  807. }
  808.  
  809. stock PrepareDuelRounds(playerid,rounds)
  810. {
  811. new PID = Duelopponent[playerid];
  812. new string[160],Weaponname[32],Weaponname2[32];
  813. Duelrounds[playerid] = rounds;
  814. Duelrounds[PID] = rounds;
  815. GetWeaponName(Duelweap1[playerid],Weaponname,32);
  816. GetWeaponName(Duelweap2[playerid],Weaponname2,32);
  817. format(string,sizeof(string),"--> DUELINVITATION from %s [id:%i]. Weapons: {F0F8FF}%s, %s {FF00FF}Rounds: {F0F8FF}%i",PlayerName(playerid),playerid,Weaponname,Weaponname2,rounds);
  818. SendClientMessage(PID,-1," ");
  819. SendClientMessage(PID,COLOR_MAGENTA,string);
  820. SendClientMessage(PID,COLOR_AQUA,"* You're invited to have a duel.");
  821. SendClientMessage(PID,COLOR_AQUA,"* Use /accept or /cancel to answer the duelrequest.");
  822. SendClientMessage(playerid,COLOR_MAGENTA,"* Your duelrequest has been send successfully.");
  823. DuelEndTimer[playerid] = SetTimerEx("DuelTimer",30000,false,"i",playerid);//Here you can change the time after which the duel will be automatically denied.
  824. DuelEndTimer[PID] = SetTimerEx("DuelTimer",30000,false,"i",PID);//Same, just for the other duelopponent.
  825. return 1;
  826. }
  827.  
  828. stock EndDuel(playerid)
  829. {
  830. new PID = Duelopponent[playerid];
  831. Duel[playerid] = 0;
  832. Duel[PID] = 0;
  833. return 1;
  834. }
  835.  
  836. stock PlayerDuelPrep(playerid)
  837. {
  838. ResetPlayerWeapons(playerid);
  839. SetCameraBehindPlayer(playerid);
  840. SetPlayerVirtualWorld(playerid,playerid);
  841. GivePlayerWeapon(playerid,Duelweap1[playerid],2000);
  842. GivePlayerWeapon(playerid,Duelweap2[playerid],2000);
  843. TogglePlayerControllable(playerid,0);
  844. SetPlayerArmour(playerid,100);
  845. SetPlayerHealth(playerid,100);
  846. return 1;
  847. }
  848.  
  849. stock PlayerName(playerid)
  850. {
  851. new name[MAX_PLAYER_NAME];
  852. GetPlayerName(playerid,name,sizeof(name));
  853. return name;
  854. }
Advertisement
Add Comment
Please, Sign In to add comment