Guest User

Untitled

a guest
Dec 17th, 2011
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.34 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. #define NAME "Advance Duel System by S2D.Alone_ [sentence2death.ru]"
  4. #define VERSION "1.0"
  5. #define DATE "24th of March, 2010"
  6.  
  7. #define USAGE_DUEL "/duelh [location ID] [primary weapon ID(/duelw)] [secondary weapon ID(/duelw)] [armour] (invite player ID (unnecessarily))"
  8.  
  9. #define MAX_DUELS 20
  10. #define TMP_SIZE 128
  11.  
  12. #define COLOR_DUEL 0xd2ff93ff
  13.  
  14. #define COLOR_HINT 0xffcf68ff //0xBBFF00FF
  15. #define HINT "HINT:"
  16.  
  17. #define COLOR_ZONE 0x000000FF //0x64C8FF50, 0xd2ff9350
  18.  
  19. #define COLOR_ERROR 0xDE1D1DFF
  20. #define ERROR "ERROR:"
  21.  
  22. #define COLOR_USAGE 0xffeda7ff
  23. #define USAGE "* USAGE:"
  24.  
  25. #define COLOR_LIST_HEADER 0x00c2ffff
  26. #define HEADER ">"
  27.  
  28. #define COLOR_LIST_ITEM 0xffa87eff
  29. #define ITEM "•"
  30.  
  31. #define COLOR_INFO 0xff9000ff
  32. #define INFO "[»]"
  33.  
  34. #define COLOR_SHOW_PLAYER_MESSAGE 0x00CC00FF
  35.  
  36. #define COLOR_SHOW_PLAYER_MESSAGE_ALL 0xDDDDDDFF //0xDDDDDDFF
  37.  
  38. #define COLOR_SHOW_ADMIN_ALL 0x2587CEFF //0x2587CEFF
  39. #define COLOR_SHOW_ADMIN 0xbfd8ffff //0xbfd8ffff
  40.  
  41. new PlayerName[MAX_PLAYERS][MAX_PLAYER_NAME];
  42. new string[300];
  43. new stringtwo[1000];
  44. new WeaponName[47][32];
  45. new Float:temppos[8][4];
  46.  
  47. new bool:AviableWeapons[47] = {
  48. true,//0
  49. true,//1
  50. true,//2
  51. true,//3
  52. true,//4
  53. true,//5
  54. true,//6
  55. true,//7
  56. true,//8
  57. true,//9
  58. true,//10
  59. true,//11
  60. true,//12
  61. true,//13
  62. true,//14
  63. true,//15
  64. true,//16
  65. false,//17
  66. false,//18
  67. false,//19
  68. false,//20
  69. false,//21
  70. false,//22
  71. true,//23
  72. true,//24
  73. true,//25
  74. false,//26
  75. false,//27
  76. false,//28
  77. true,//29
  78. true,//30
  79. true,//31
  80. false,//32
  81. true,//33
  82. true,//34
  83. false,//35
  84. false,//36
  85. false,//37
  86. false,//38
  87. true,//39
  88. false,//40
  89. false,//41
  90. false,//42
  91. false,//43
  92. false,//44
  93. false,//45
  94. false //46
  95. };
  96.  
  97. new CountText[9][5] ={
  98. "~r~1",
  99. "~y~2",
  100. "~g~3",
  101. "~w~4",
  102. "~w~5",
  103. "~w~6",
  104. "~w~-",
  105. "~w~-",
  106. "~w~-"
  107. };
  108.  
  109. enum Dueli
  110. {
  111. dStarted,
  112. dMapID,
  113. dWeapons[2],
  114. dHosterID,
  115. dJoinerID,
  116. dInvitedID,
  117. bool:dArmour
  118. }
  119.  
  120. new Duel[MAX_DUELS][Dueli];
  121.  
  122. enum DuelMapsi
  123. {
  124. dmName[MAX_PLAYER_NAME],
  125. Float:mPos1[4],
  126. Float:mPos2[4],
  127. mInterior
  128. }
  129.  
  130. new DuelMaps[8][DuelMapsi] = {
  131. {"YellowBell", {1405.6573,2782.3801,10.8203,86.4400}, {1119.3622,2787.4194,10.8203,283.1986}}, //YellowBell
  132. {"Blueberry Acres", {-99.5206,-62.2486,3.1172,341.2285}, {-53.0461,72.4819,3.1172,159.7951}},
  133. {"MAF1A Box", {1417.363647,-17.101730,1000.926696}, {1363.297485,-4.580797,1000.921875},1},
  134. {"Roof", {2465.0,2360.0,71.0, 90.0}, {2465.0,2390.0,71.0, 270.0}},
  135. {"Whetstone Beach", {-2664.6118,-2332.4331,3.0000, 180.0}, {-2664.6118,-2383.4331,3.0000}},
  136. {"Hampton Barns", {752.338073,248.825393,27.092527}, {764.974914,377.301727,23.206260,180.0}},
  137. {"Blueberry", {211.9796,-174.8186,1.5781,88.0241}, {80.9424,-178.5773,1.5681,267.8557}},
  138. {"SF Airport", {-1309.0671,-193.6552,14.1484,316.0927}, {-1251.0068,-135.5645,14.1484,131.9633}}
  139. };
  140.  
  141. enum Playeri
  142. {
  143. pDuelCount,
  144. Float:pHP
  145. }
  146.  
  147. new Player[MAX_PLAYERS][Playeri];
  148.  
  149. public OnFilterScriptInit() //DONT CHANGE THIS!!!!!!!!!!!1
  150. {
  151. for(new i=0; i<20; i++) ResetDuelVariables(i);
  152. for(new i; i<47; i++)
  153. {
  154. if(i == 0) WeaponName[i] = "Fists/Legs";
  155. else if(i == 1) WeaponName[i] = "BrassKnu";
  156. else if(i == 0) WeaponName[i] = "Fists/Legs";
  157. else if(i == 4) WeaponName[i] = "Knifecur";
  158. else if(i == 18) WeaponName[i] = "Molotov";
  159. else if(i == 23) WeaponName[i] = "Silenced";
  160. else if(i == 24) WeaponName[i] = "Deagle";
  161. else if(i == 26) WeaponName[i] = "Sawn";
  162. else if(i == 27) WeaponName[i] = "SPAZ 12";
  163. else if(i == 28) WeaponName[i] = "Ingramm";
  164. else if(i == 29) WeaponName[i] = "MP5lng";
  165. else if(i == 30) WeaponName[i] = "Kalash";
  166. else if(i == 31) WeaponName[i] = "M4A1";
  167. else if(i == 32) WeaponName[i] = "Tec9";
  168. else if(i == 35) WeaponName[i] = "Launcher";
  169. else if(i == 36) WeaponName[i] = "HeatSeek";
  170. else if(i == 37) WeaponName[i] = "Flameth";
  171. else if(i == 18) WeaponName[i] = "Molotov";
  172. else if(i == 39) WeaponName[i] = "Satchel";
  173. else if(i == 42) WeaponName[i] = "Fire ex";
  174. else if(i == 45) WeaponName[i] = "Heat Seek Vision";
  175. else GetWeaponName(i, WeaponName[i], 32);
  176. }
  177. for(new i; i<GetMaxPlayers(); i++)
  178. {
  179. GetPlayerName(i, PlayerName[i], MAX_PLAYER_NAME);
  180. }
  181. print("\n\n\nFilterscript "#NAME" started succesful.\nVersion"#VERSION" from "#DATE"\nby S2D.Alone_ [sentence2death.ru]\n\n");
  182. return 1;
  183. }
  184.  
  185. public OnPlayerConnect(playerid) //DONT CHANGE THIS!!!!!!!!!!!
  186. {
  187. GetPlayerName(playerid, PlayerName[playerid], MAX_PLAYER_NAME);
  188. SendClientMessage(playerid, COLOR_INFO, ""#INFO" This server using FS "#NAME" version "#VERSION" from "#DATE" (/duel)");
  189. return 1;
  190. }
  191.  
  192. public OnPlayerDisconnect(playerid, reason)
  193. {
  194. new duelid = GetPlayerDuelID(playerid);
  195. if(duelid != 0)
  196. {
  197. if(Duel[duelid][dHosterID] == playerid) EndDuel(Duel[duelid][dJoinerID], duelid);
  198. else if(Duel[duelid][dJoinerID] == playerid) EndDuel(Duel[duelid][dHosterID], duelid);
  199. }
  200. return 1;
  201. }
  202.  
  203. public OnPlayerDeath(playerid, killerid, reason)
  204. {
  205. new duelid = GetPlayerDuelID(playerid);
  206. if(duelid != 0)
  207. {
  208. if(Duel[duelid][dHosterID] == playerid) EndDuel(Duel[duelid][dJoinerID], duelid);
  209. else if(Duel[duelid][dJoinerID] == playerid) EndDuel(Duel[duelid][dHosterID], duelid);
  210. }
  211. return 1;
  212. }
  213.  
  214. public OnPlayerSpawn(playerid)
  215. {
  216. SetPlayerColor(playerid, COLOR_DUEL);
  217. return 1;
  218. }
  219.  
  220. public OnPlayerCommandText(playerid, cmdtext[])
  221. {
  222. new cmd[256], idx;
  223. cmd = strtok(cmdtext, idx);
  224. if(strcmp(cmd, "/duel", true) == 0)
  225. {
  226. SendClientMessage(playerid, COLOR_LIST_HEADER, ""#HEADER" Help for Advance Duel System:");
  227. SendClientMessage(playerid, COLOR_LIST_ITEM, ""#ITEM" "#USAGE_DUEL" - create duel");
  228. SendClientMessage(playerid, COLOR_LIST_ITEM, ""#ITEM" /duelj [duel ID] - join to duel");
  229. SendClientMessage(playerid, COLOR_LIST_ITEM, ""#ITEM" /dueldec - decline duel invite");
  230. SendClientMessage(playerid, COLOR_LIST_ITEM, ""#ITEM" /dueld - delete duel");
  231. SendClientMessage(playerid, COLOR_LIST_ITEM, ""#ITEM" /duell - list of locations");
  232. SendClientMessage(playerid, COLOR_LIST_ITEM, ""#ITEM" /duelw - list of aviable weapons");
  233. return 1;
  234. }
  235. else if(strcmp(cmd, "/duelh", true) == 0)
  236. {
  237. new duelid = GetPlayerDuelID(playerid);
  238. if(duelid == 0)
  239. {
  240. new tmp1[TMP_SIZE];
  241. new tmp2[TMP_SIZE];
  242. new tmp3[TMP_SIZE];
  243. new tmp4[TMP_SIZE];
  244. new tmp5[TMP_SIZE];
  245. new inv = INVALID_PLAYER_ID;
  246. tmp1 = strtok(cmdtext, idx);
  247. tmp2 = strtok(cmdtext, idx);
  248. tmp3 = strtok(cmdtext, idx);
  249. tmp4 = strtok(cmdtext, idx);
  250. tmp5 = strtok(cmdtext, idx);
  251. if(strlen(tmp5) == 0) inv = INVALID_PLAYER_ID;
  252. else inv = strval(tmp5);
  253. new errorid = CreateDuel(playerid,strval(tmp1),strval(tmp2),strval(tmp3),strval(tmp4),inv);
  254. switch(errorid)
  255. {
  256. case -8: SendClientMessage(playerid, COLOR_ERROR,""#ERROR" All duels ("#MAX_DUELS") already created. Wait please"),SendClientMessage(playerid, COLOR_USAGE,""#USAGE" "#USAGE_DUEL"");
  257. case -2: SendClientMessage(playerid, COLOR_ERROR,""#ERROR" Wrong location ID"),SendClientMessage(playerid, COLOR_USAGE,""#USAGE" "#USAGE_DUEL"");
  258. case -3: SendClientMessage(playerid, COLOR_ERROR,""#ERROR" Wrong primary weapon ID"),SendClientMessage(playerid, COLOR_USAGE,""#USAGE" "#USAGE_DUEL"");
  259. case -4: SendClientMessage(playerid, COLOR_ERROR,""#ERROR" Wrong primary weapon ID"),SendClientMessage(playerid, COLOR_USAGE,""#USAGE" "#USAGE_DUEL"");
  260. case -5: SendClientMessage(playerid, COLOR_ERROR,""#ERROR" Player is disconnected"),SendClientMessage(playerid, COLOR_USAGE,""#USAGE" "#USAGE_DUEL"");
  261. case -6: SendClientMessage(playerid, COLOR_ERROR,""#ERROR" Player already on duel"),SendClientMessage(playerid, COLOR_USAGE,""#USAGE" "#USAGE_DUEL"");
  262. case -7: SendClientMessage(playerid, COLOR_ERROR,""#ERROR" Impossible invite youself"),SendClientMessage(playerid, COLOR_USAGE,""#USAGE" "#USAGE_DUEL"");
  263. }
  264. }
  265. else SendClientMessage(playerid, COLOR_ERROR,""#ERROR" You already created duel");
  266. return 1;
  267. }
  268. else if(strcmp(cmd, "/duelj", true) == 0)
  269. {
  270. new duelid = GetPlayerDuelID(playerid);
  271. if(duelid == 0 || (duelid != 0 && Duel[duelid][dStarted] != 1))
  272. {
  273. new tmp1[TMP_SIZE];
  274. tmp1 = strtok(cmdtext, idx);
  275. if(strval(tmp1) <= 0)
  276. {
  277. SendClientMessage(playerid, COLOR_ERROR,""#ERROR" Wrong duel ID");
  278. }
  279. else
  280. {
  281. if(duelid != 0 && Duel[duelid][dInvitedID] != playerid && Duel[duelid][dStarted] != 1) ResetDuelVariables(duelid);
  282. new errorid = StartDuel(playerid,strval(tmp1));
  283. switch(errorid)
  284. {
  285. case -2: SendClientMessage(playerid, COLOR_ERROR,""#ERROR" This duel ID hasn't been created. Create your duel by /duelh");
  286. case -3: SendClientMessage(playerid, COLOR_ERROR,""#ERROR" On this duel ID already playing. Create your duel by /duelh");
  287. case -4: SendClientMessage(playerid, COLOR_ERROR,""#ERROR" This is private duel ID. Create different duel by /duelh");
  288. }
  289. }
  290. }
  291. else SendClientMessage(playerid, COLOR_ERROR,""#ERROR" You already on duel");
  292. return 1;
  293. }
  294. else if(strcmp(cmd, "/dueldec", true) == 0)
  295. {
  296. new duelid = GetPlayerDuelID(playerid);
  297. if(duelid == 0)
  298. {
  299. SendClientMessage(playerid, COLOR_ERROR,""#ERROR" You uninvited. Create your duel by /duelh");
  300. }
  301. else
  302. {
  303. if(Duel[duelid][dStarted] == 1)
  304. {
  305. SendClientMessage(playerid, COLOR_ERROR,""#ERROR" Impossible decline duel, when she has been started");
  306. }
  307. else
  308. {
  309. format(string, sizeof(string), "%s decline invite to duel. Duel was deleted", PlayerName[playerid]);
  310. SendClientMessage(Duel[duelid][dHosterID], COLOR_DUEL, string);
  311. ResetDuelVariables(duelid);
  312. SendClientMessage(playerid, COLOR_DUEL, "You decline invite to duel");
  313. }
  314. }
  315. return 1;
  316. }
  317. else if(strcmp(cmd, "/dueld", true) == 0)
  318. {
  319. new duelid = GetPlayerDuelID(playerid);
  320. if(duelid == 0)
  321. {
  322. SendClientMessage(playerid, COLOR_ERROR,""#ERROR" You haven't duel. Create your duel by /duelh");
  323. }
  324. else
  325. {
  326. if(Duel[duelid][dStarted] == 1)
  327. {
  328. SendClientMessage(playerid, COLOR_ERROR,""#ERROR" Impossible delete duel, when she has been started");
  329. }
  330. else
  331. {
  332. ResetDuelVariables(duelid);
  333. format(string, sizeof(string), "%s delete duel (ID: %d)", PlayerName[playerid], duelid);
  334. SendClientMessageToAll(COLOR_DUEL, string);
  335. }
  336. }
  337. return 1;
  338. }
  339. else if(strcmp(cmd, "/duell", true) == 0)
  340. {
  341. strdel(stringtwo, 0, strlen(stringtwo));
  342. for(new i; i<sizeof(DuelMaps); i++)
  343. {
  344. format(string, sizeof(string), "\t%d-%s\n", i, DuelMaps[i][dmName]);
  345. strcat(stringtwo, string);
  346. }
  347. ShowPlayerDialog(playerid, 9900, 0, "Locations list of Advance Duel System", stringtwo, "OK", "Exit");
  348. return 1;
  349. }
  350. else if(strcmp(cmd, "/duelw", true) == 0)
  351. {
  352. strdel(stringtwo, 0, strlen(stringtwo));
  353. new stolbeg = 0;
  354. for(new i=0; i<47; i++)
  355. {
  356. if(AviableWeapons[i] == true)
  357. {
  358. format(string, sizeof(string), "%d-%s", i, WeaponName[i]);
  359. strcat(stringtwo, string);
  360. if(stolbeg == 0) strcat(stringtwo, "\t");
  361. else strcat(stringtwo, "\n");
  362. stolbeg++;
  363. if(stolbeg > 1) stolbeg = 0;
  364. }
  365. }
  366. ShowPlayerDialog(playerid, 9900, 0, "Aviable weapons of Advance Duel System", stringtwo, "OK", "Exit");
  367. return 1;
  368. }
  369. }
  370.  
  371. ResetDuelVariables(duelid)
  372. {
  373. Duel[duelid][dStarted] = -1;
  374. Duel[duelid][dArmour] = false;
  375. Duel[duelid][dMapID] = -1;
  376. Duel[duelid][dWeapons][0] = 0;
  377. Duel[duelid][dWeapons][1] = 0;
  378. Duel[duelid][dHosterID] = INVALID_PLAYER_ID;
  379. Duel[duelid][dJoinerID] = INVALID_PLAYER_ID;
  380. Duel[duelid][dInvitedID] = INVALID_PLAYER_ID;
  381. Duel[duelid][dArmour] = false;
  382. }
  383.  
  384. GetFirstDuelID()//DONT CHANGE THIS!!!!!!!!!!!!
  385. {
  386. for(new i=1; i<MAX_DUELS; i++) if(Duel[i][dStarted] == -1) return i;
  387. return 0;
  388. }
  389.  
  390. GetPlayerDuelID(playerid)//DONT CHANGE THIS!!!!!!!!!!!!
  391. {
  392. for(new i=1; i<MAX_DUELS; i++) if(Duel[i][dHosterID] == playerid || Duel[i][dJoinerID] == playerid || Duel[i][dInvitedID] == playerid) return i;
  393. return 0;
  394. }
  395.  
  396. CreateDuel(playerid, mapid, weaponid1, weaponid2, armour, inviteid = INVALID_PLAYER_ID)
  397. {
  398. if(IsPlayerConnected(playerid) == 0) return -1;
  399. if(mapid >= sizeof(DuelMaps) || mapid <= -1) return -2;
  400. if(AviableWeapons[weaponid1] == false) return -3;
  401. if(AviableWeapons[weaponid1] == false) return -4;
  402. if(playerid == inviteid && inviteid != INVALID_PLAYER_ID) return -7;
  403. if(IsPlayerConnected(inviteid) == 0 && inviteid != INVALID_PLAYER_ID) return -5;
  404. if(GetPlayerDuelID(inviteid) != 0 && inviteid != INVALID_PLAYER_ID) return -6;
  405. new duelid = GetFirstDuelID();
  406. if(duelid == 0) return -8;
  407. Duel[duelid][dStarted] = 0;
  408. Duel[duelid][dMapID] = mapid;
  409. Duel[duelid][dWeapons][0] = weaponid1;
  410. Duel[duelid][dWeapons][1] = weaponid2;
  411. Duel[duelid][dHosterID] = playerid;
  412. Duel[duelid][dJoinerID] = INVALID_PLAYER_ID;
  413. if(armour) Duel[duelid][dArmour] = true;
  414. else Duel[duelid][dArmour] = false;
  415. //0xffd400ff
  416. if(weaponid1 == weaponid2) format(string, sizeof(string), "%s", WeaponName[weaponid1]);
  417. else format(string, sizeof(string), "%s + %s",WeaponName[weaponid1],WeaponName[weaponid2]);
  418. if(inviteid == INVALID_PLAYER_ID)
  419. {
  420. format(string, sizeof(string), "%s has created duel (ID: %d) on location %s(%d) (Armour: %d). Weapon %s",
  421. PlayerName[playerid], duelid, DuelMaps[mapid][dmName],mapid, armour, string, duelid);
  422. SendClientMessageToAll(COLOR_DUEL, string);
  423. format(string, sizeof(string), "HINT: Write \"/duelj %d\" for join to duel", duelid);
  424. SendClientMessageToAll(COLOR_HINT, string);
  425. }
  426. else
  427. {
  428. Duel[duelid][dInvitedID] = inviteid;
  429. format(string, sizeof(string), "You invited %s on duel (ID: %d) on location %s(%d) (Armour: %d). Weapon %s",
  430. PlayerName[inviteid], duelid, DuelMaps[mapid][dmName],mapid, armour, string);
  431. SendClientMessage(playerid, COLOR_DUEL, string);
  432.  
  433. if(weaponid1 == weaponid2) format(string, sizeof(string), "%s", WeaponName[weaponid1]);
  434. else format(string, sizeof(string), "%s + %s",WeaponName[weaponid1],WeaponName[weaponid2]);
  435.  
  436. format(string, sizeof(string), "%s invited you to duel (ID: %d) on location %s(%d) (Armour: %d). Weapon %s",
  437. PlayerName[playerid], duelid, DuelMaps[mapid][dmName],mapid, armour, string);
  438. SendClientMessage(inviteid, COLOR_DUEL, string);
  439.  
  440. format(string, sizeof(string), "HINT: Write \"/duelj %d\" for join or \"/dueldec\" for decline", duelid);
  441. SendClientMessage(inviteid, COLOR_HINT, string);
  442.  
  443. GameTextForPlayer(inviteid, "Look at the chat~n~the chat is amazing!", 5000, 3);
  444. }
  445. format(string, sizeof(string), "HINT: For delete duel write /dueld");
  446. SendClientMessage(playerid, COLOR_HINT, string);
  447. return 0;
  448. }
  449.  
  450. StartDuel(joinid, duelid)
  451. {
  452. if(IsPlayerConnected(joinid) == 0) return -1; //íå ïîäêëþ÷¸í
  453. if(Duel[duelid][dStarted] == -1) return -2;
  454. if(Duel[duelid][dStarted] == 1) return -3;
  455. if(Duel[duelid][dInvitedID] != INVALID_PLAYER_ID && Duel[duelid][dInvitedID] != joinid) return -4;
  456. Duel[duelid][dStarted] = 1;
  457. Duel[duelid][dJoinerID] = joinid;
  458. spawnPlayerEx(Duel[duelid][dHosterID]);
  459. spawnPlayerEx(Duel[duelid][dJoinerID]);
  460. format(string, sizeof(string), "Duel (ID: %d) %s vs %s has been started",
  461. duelid, PlayerName[Duel[duelid][dHosterID]], PlayerName[Duel[duelid][dJoinerID]]);
  462. SendClientMessageToAll(COLOR_DUEL, string);
  463. Player[Duel[duelid][dHosterID]][pDuelCount] = 6;
  464. Player[Duel[duelid][dJoinerID]][pDuelCount] = 6;
  465. SetTimerEx("PlayerCount", 1000, 0, "d", Duel[duelid][dHosterID]);
  466. SetTimerEx("PlayerCount", 1000, 0, "d", Duel[duelid][dJoinerID]);
  467. return 0;
  468. }
  469.  
  470. spawnPlayerEx(i)
  471. {
  472. if(GetPlayerState(i) == 9) {return TogglePlayerSpectating(i, false);}
  473. if(GetPlayerState(i) == PLAYER_STATE_WASTED || GetPlayerState(i) == PLAYER_STATE_NONE ) return 1;
  474. if(IsPlayerInAnyVehicle(i))
  475. {
  476. SetPlayerPos(i, 0.0, 0.0, 9900.0);
  477. }
  478. SpawnPlayer(i);
  479. return 1;
  480. }
  481.  
  482. forward PlayerCount(playerid);
  483. public PlayerCount(playerid)
  484. {
  485. if(Player[playerid][pDuelCount] > 0)
  486. {
  487. if(Player[playerid][pDuelCount] == 6)
  488. {
  489. new duelid = GetPlayerDuelID(playerid);
  490. if(duelid != 0 && Duel[duelid][dStarted] == 1)
  491. {
  492. if(Duel[duelid][dHosterID] == playerid) SetPlayerColor(playerid,0x00FFFF00);
  493. else if(Duel[duelid][dJoinerID] == playerid) SetPlayerColor(playerid,0x00FF0000);
  494.  
  495. SetPlayerVirtualWorld(playerid, Duel[duelid][dHosterID]+20);
  496. if(Duel[duelid][dHosterID] == playerid) SetPlayerPos(playerid,
  497. DuelMaps[Duel[duelid][dMapID]][mPos2][0],DuelMaps[Duel[duelid][dMapID]][mPos2][1],
  498. DuelMaps[Duel[duelid][dMapID]][mPos2][2]),SetPlayerFacingAngle(playerid, DuelMaps[Duel[duelid][dMapID]][mPos2][3]);
  499. else if(Duel[duelid][dJoinerID] == playerid) SetPlayerPos(playerid,
  500. DuelMaps[Duel[duelid][dMapID]][mPos1][0],DuelMaps[Duel[duelid][dMapID]][mPos1][1],
  501. DuelMaps[Duel[duelid][dMapID]][mPos1][2]),SetPlayerFacingAngle(playerid, DuelMaps[Duel[duelid][dMapID]][mPos1][3]);
  502.  
  503. SetPlayerInterior(playerid, DuelMaps[Duel[duelid][dMapID]][mInterior]);
  504. SetPlayerHealth(playerid, 100.0);
  505. if(Duel[duelid][dArmour] == true) SetPlayerArmour(playerid, 100.0);
  506. else SetPlayerArmour(playerid, 0.0);
  507. }
  508. }
  509. TogglePlayerControllable(playerid, false);
  510. Player[playerid][pDuelCount]--;
  511. format(string,256," ~n~ ~n~ ~n~ ~n~ ~n~ ~n~ %s ~n~ %s ~n~ %s ~n~ ",CountText[Player[playerid][pDuelCount]+2],CountText[Player[playerid][pDuelCount]+1],CountText[Player[playerid][pDuelCount]]);
  512. GameTextForPlayer(playerid, string, 1200, 3);
  513. SetTimerEx("PlayerCount", 1000, 0, "d", playerid);
  514. SetCameraBehindPlayer(playerid);
  515. ShowPlayerDialog(playerid, -1, 0, "Îðóæèÿ Advance Duel System", stringtwo, "OK", "Âûõîä");
  516. }
  517. else
  518. {
  519. new duelid = GetPlayerDuelID(playerid);
  520. TogglePlayerControllable(playerid, true);
  521. ResetPlayerWeapons(playerid);
  522. if(Duel[duelid][dWeapons][0] == Duel[duelid][dWeapons][1]) GivePlayerWeapon(playerid, Duel[duelid][dWeapons][0], 9900);
  523. else GivePlayerWeapon(playerid, Duel[duelid][dWeapons][0], 9900),GivePlayerWeapon(playerid, Duel[duelid][dWeapons][1], 9900);
  524. format(string,256," ~n~ ~n~ ~n~ ~n~ ~n~ ~n~ %s ~n~ %s ~n~ ~w~GO GO GO! ~n~ ",CountText[Player[playerid][pDuelCount]+1],CountText[Player[playerid][pDuelCount]]);
  525. GameTextForPlayer(playerid, string, 1200, 3);
  526. Player[playerid][pDuelCount] = -1;
  527. }
  528. return 1;
  529. }
  530.  
  531. EndDuel(winnerid, duelid)
  532. {
  533. if(Duel[duelid][dStarted] != 1) return -1;
  534. GetPlayerHealth(winnerid, temppos[0][1]);
  535. GetPlayerArmour(winnerid, temppos[0][2]);
  536. Player[winnerid][pHP] = temppos[0][1] + temppos[0][2];
  537. format(string, sizeof(string), "%s (%.0f HP) has win id duel (ID: %d)", PlayerName[winnerid],Player[winnerid][pHP],duelid);
  538. SendClientMessageToAll(COLOR_DUEL, string);
  539. Duel[duelid][dStarted] = -1;
  540. spawnPlayerEx(Duel[duelid][dHosterID]);
  541. spawnPlayerEx(Duel[duelid][dJoinerID]);
  542. ResetDuelVariables(duelid);
  543. return 0;
  544. }
  545.  
  546. strtok(const string2[], &index)
  547. {
  548. new length = strlen(string2);
  549. while ((index < length) && (string2[index] <= ' '))
  550. {
  551. index++;
  552. }
  553.  
  554. new offset = index;
  555. new result[20];
  556. while ((index < length) && (string2[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  557. {
  558. result[index - offset] = string2[index];
  559. index++;
  560. }
  561. result[index - offset] = EOS;
  562. return result;
  563. }
Add Comment
Please, Sign In to add comment