Advertisement
Guest User

Duel System By PMH.

a guest
Sep 25th, 2014
2,532
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.08 KB | None | 0 0
  1. #include <a_samp>
  2. #include <zcmd>
  3. #include <sscanf2>
  4. #include <fixes2>
  5.  
  6. #define SCM SendClientMessage
  7. #define dueldialog 242
  8.  
  9. #define DuelPlace1 3577.6873,1696.7938,278.7320 //Change this to ur duel location
  10. #define DuelPlace2 3577.6873,1789.9469,278.7320 //Change this to ur duel location
  11.  
  12. new DuelType, Bet, InDuel[MAX_PLAYERS], declinedueltimer, dueler1, dueler2, Progress, DUEL_TIMER, DuelAllowed[MAX_PLAYERS];
  13. new CD, CDTimer;
  14.  
  15. public OnFilterScriptInit()
  16. {
  17.     dueler2 = 0;
  18.     dueler1 = 0;
  19.     Progress = 0;
  20.     DuelType = 0;
  21.     Bet = 0;
  22.     CreateObject(13657, 3541.7075,1721.0681,280.9664, 0.0000000,0.0000000,0.0000000, 1000); //This is the current duel place
  23.     return 1;
  24. }
  25.  
  26. public OnPlayerConnect(playerid)
  27. {
  28.     InDuel[playerid] = 0;
  29.     DuelAllowed[playerid] = 1;
  30.     return 1;
  31. }
  32.  
  33. public OnPlayerDisconnect(playerid)
  34. {
  35.     if(Progress == 2)
  36.     {
  37.         new msg[128];
  38.         format(msg, sizeof(msg), "{ff0000}Duel Between %s(%d) and %s(%d) Has Ended. Reason: Time UP!", GetName(dueler1), dueler1, GetName(dueler2), dueler2);
  39.         SendClientMessageToAll(-1, msg);
  40.         Progress =0;
  41.     }
  42.     return 1;
  43. }
  44.  
  45. stock GiveDuelWeapons(Type)
  46. {
  47.  
  48.     if(Type == 0)
  49.     {
  50.         GivePlayerWeapon(dueler1, 26, 15000);
  51.         GivePlayerWeapon(dueler2, 26, 15000);
  52.     }
  53.     if(Type == 1)
  54.     {
  55.         GivePlayerWeapon(dueler1, 24, 15000);
  56.         GivePlayerWeapon(dueler2, 24, 15000);
  57.     }
  58.     if(Type == 2)
  59.     {
  60.         GivePlayerWeapon(dueler1, 32, 15000);
  61.         GivePlayerWeapon(dueler2, 32, 15000);
  62.     }
  63.     if(Type == 3)
  64.     {
  65.         GivePlayerWeapon(dueler1, 31, 15000);
  66.         GivePlayerWeapon(dueler2, 31, 15000);
  67.     }
  68.     if(Type == 4)
  69.     {
  70.         GivePlayerWeapon(dueler1, 30, 15000);
  71.         GivePlayerWeapon(dueler2, 30, 15000);
  72.     }
  73.     if(Type == 5)
  74.     {
  75.         GivePlayerWeapon(dueler1, 22, 15000);
  76.         GivePlayerWeapon(dueler2, 22, 15000);
  77.     }
  78.     if(Type == 6)
  79.     {
  80.         GivePlayerWeapon(dueler1, 32, 15000);
  81.         GivePlayerWeapon(dueler1, 26, 15000);
  82.         GivePlayerWeapon(dueler1, 24, 15000);
  83.         GivePlayerWeapon(dueler2, 32, 15000);
  84.         GivePlayerWeapon(dueler2, 26, 15000);
  85.         GivePlayerWeapon(dueler2, 24, 15000);
  86.     }
  87.     if(Type == 7)
  88.     {
  89.         GivePlayerWeapon(dueler1, 31, 15000);
  90.         GivePlayerWeapon(dueler1, 24, 15000);
  91.         GivePlayerWeapon(dueler2, 24, 15000);
  92.         GivePlayerWeapon(dueler2, 31, 15000);
  93.     }
  94.     if(Type == 8)
  95.     {
  96.         GivePlayerWeapon(dueler1, 34, 15000);
  97.         GivePlayerWeapon(dueler1, 31, 15000);
  98.         GivePlayerWeapon(dueler2, 31, 15000);
  99.         GivePlayerWeapon(dueler2, 34, 15000);
  100.     }
  101.     return 1;
  102. }
  103.  
  104. stock GetName(playerid)
  105. {
  106.     new Name[24];
  107.     GetPlayerName(playerid, Name, sizeof(Name));
  108.     return Name;
  109. }
  110.  
  111. CMD:duel(playerid, params[])
  112. {
  113.     new target, duelbet;
  114.     if(sscanf(params, "ui", target, duelbet)) return SendClientMessage(playerid, -1,"{ff0000}Error: {ffffff}Correct usage: /duel [PlayerID] [bet]");
  115.     if(DuelAllowed[target] == 0) return SCM(playerid, -1, "{ff0000}Error: {ffffff}That Player Has His Duel Invitations OFF");
  116.     if(Progress == 2) return SCM(playerid, -1, "{ff0000}Error: {ffffff}Duel Is In Progress");
  117.     if(Progress == 1) return SCM(playerid, -1, "{ff0000}Error: {ffffff}Someone Is Inviting Someone else To A Duel, Please Wait..");
  118.     if(!IsPlayerConnected(target)) return SCM(playerid, -1, "{ff0000}Error: {ffffff}That Player Is Not Connected");
  119.     if(GetPlayerMoney(playerid) < duelbet && duelbet != 0) return SCM(playerid, -1, "{ff0000}Error: {ffffff}You don't have that much money");
  120.     if(GetPlayerMoney(target) < duelbet && duelbet != 0) return SCM(playerid, -1, "{ff0000}Error: {ffffff}That player doesn't have that much amount of money!");
  121.     if(duelbet < 0) return SCM(playerid, -1, "{ff0000}Error: {ffffff}Bet Range: $0-250000");
  122.     if(duelbet > 250000) return SCM(playerid, -1, "{ff0000}Error: {ffffff}Bet Range: $0-250000");
  123.     if(target == playerid) return SCM(playerid, -1, "{ff0000}Error: {ffffff}You cannot duel yourself");
  124.     dueler2 = target;
  125.     dueler1 = playerid;
  126.     Bet = duelbet;
  127.     Progress = 1;
  128.     ShowPlayerDialog(playerid, dueldialog + 1, DIALOG_STYLE_LIST, "{00ff2a}Duel Weapons:", "{0affea}Sawn-off Shotgun\n{0affea}Desert Eagle\n{0affea}TEC-9\n{0affea}M4\n{0affea}Ak47\n{0affea}Colt-45 / 9mm\n{0affea}Sawn-off Shotgun + TEC-9 + Deagle\n{0affea}M4 + Deagle\n{0affea}Sniper + M4", "Choose", "Cancel");
  129.     return 1;
  130. }
  131.  
  132. CMD:toggleduels(playerid, params[])
  133. {
  134.     if(DuelAllowed[playerid] == 0)
  135.     {
  136.         SCM(playerid, -1, "{00ff2a}You've allowed duel invitations");
  137.         DuelAllowed[playerid] = 1;
  138.     }
  139.     else
  140.     {
  141.         SCM(playerid, -1, "{FF0000}You've DisAllowed duel invitations");
  142.         DuelAllowed[playerid] = 0;
  143.     }
  144.     return 1;
  145. }
  146.  
  147. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  148. {
  149.     switch(dialogid)
  150.     {
  151.         case dueldialog +1:
  152.         {
  153.             if(!response) return Progress = 0;
  154.             DuelType = listitem;
  155.             DuelOffered();
  156.         }
  157.         case dueldialog +2:
  158.         {
  159.             if(!response) return DuelDeclined();
  160.             SetPlayerPos(dueler1, DuelPlace1);
  161.             SetPlayerFacingAngle(dueler1, 4.5954);
  162.             SetCameraBehindPlayer(dueler1);
  163.             SetPlayerPos(dueler2, DuelPlace2);
  164.             SetPlayerFacingAngle(dueler2, 188.0179);
  165.             SetCameraBehindPlayer(dueler2);
  166.             SetPlayerHealth(dueler2, 100);
  167.             SetPlayerHealth(dueler1, 100);
  168.             SetPlayerArmour(dueler2, 100);
  169.             SetPlayerArmour(dueler1, 100);
  170.             GivePlayerMoney(dueler1, -Bet);
  171.             GivePlayerMoney(dueler2, -Bet);
  172.             Progress = 2;
  173.             SetPlayerVirtualWorld(dueler1, 2);
  174.             SetPlayerVirtualWorld(dueler2, 2);
  175.             new string[128];
  176.             format(string, sizeof(string), "{ff0000}[DUEL] The Duel Between %s(%d) and %s(%d) Has Started. (Bet: %d)", GetName(dueler1), dueler1, GetName(dueler2), dueler2, Bet);
  177.             SendClientMessageToAll(-1, string);
  178.             TogglePlayerControllable(dueler1, false);
  179.             TogglePlayerControllable(dueler2, false);
  180.             InDuel[dueler1] = 1;
  181.             InDuel[dueler2] = 1;
  182.             GiveDuelWeapons(DuelType);
  183.             CD = 6;
  184.             CDTimer = SetTimer("CountDown", 1000, 1);
  185.             KillTimer(declinedueltimer);
  186.             DUEL_TIMER = SetTimer("TIMEUP", 60000*3, 0);
  187.         }
  188.  
  189.     }
  190.     return 0;
  191. }
  192.  
  193. public OnPlayerDeath(playerid, killerid)
  194. {
  195.     if(InDuel[playerid] == 1 && InDuel[killerid] == 1)
  196.     {
  197.         GivePlayerMoney(killerid, 2*Bet);
  198.         new Float:Health, Float:Armour, string[128];
  199.         GetPlayerArmour(killerid, Armour);
  200.         GetPlayerHealth(killerid, Health);
  201.         format(string, sizeof(string), "{ff0000}[DUEL] %s(%d) Has Won The Duel From %s(%d) And Still Has %.2f Health and %.2f Armour Left", GetName(killerid), killerid, GetName(playerid), playerid, Health, Armour);
  202.         SendClientMessageToAll(-1, string);
  203.         SpawnPlayer(killerid);
  204.         new str[128];
  205.         format(str, sizeof(str), "{ff0000}[DUEL]: You've Won The Duel Against %s(%d) And Won $%d", GetName(playerid), playerid, Bet);
  206.         SCM(killerid, -1, str);
  207.         Progress = 0;
  208.         InDuel[playerid] = 0;
  209.         InDuel[killerid] = 0;
  210.         KillTimer(DUEL_TIMER);
  211.     }
  212.     return 1;
  213. }
  214.  
  215. forward DuelOffered();
  216. public DuelOffered()
  217. {
  218.     new string[128], str[256];
  219.     if(dueler2 > -10)
  220.     {
  221.         if(DuelType == 0) format(str, sizeof(str), "{ff0000}You Have Been Challenged To A 1v1 Duel By {00ff37}%s!\n{ff0000}This Invite Will Be Auto Cancelled In 10 Seconds.\n{ff0000}Duel Weapons: {00ff37}Sawn-off Shotgun\n{ff0000}Bet: {00ff37}$%d", GetName(dueler1), Bet);
  222.         if(DuelType == 1) format(str, sizeof(str), "{ff0000}You Have Been Challenged To A 1v1 Duel By {00ff37}%s!\n{ff0000}This Invite Will Be Auto Cancelled In 10 Seconds.\n{ff0000}Duel Weapons: {00ff37}Desert Eagle\n{ff0000}Bet: {00ff37}$%d", GetName(dueler1), Bet);
  223.         if(DuelType == 2) format(str, sizeof(str), "{ff0000}You Have Been Challenged To A 1v1 Duel By {00ff37}%s!\n{ff0000}This Invite Will Be Auto Cancelled In 10 Seconds.\n{ff0000}Duel Weapons: {00ff37}TEC-9\n{ff0000}Bet: {00ff37}$%d", GetName(dueler1), Bet);
  224.         if(DuelType == 3) format(str, sizeof(str), "{ff0000}You Have Been Challenged To A 1v1 Duel By {00ff37}%s!\n{ff0000}This Invite Will Be Auto Cancelled In 10 Seconds.\n{ff0000}Duel Weapons: {00ff37}M4\n{ff0000}Bet: {00ff37}$%d", GetName(dueler1), Bet);
  225.         if(DuelType == 4) format(str, sizeof(str), "{ff0000}You Have Been Challenged To A 1v1 Duel By {00ff37}%s!\n{ff0000}This Invite Will Be Auto Cancelled In 10 Seconds.\n{ff0000}Duel Weapons: {00ff37}Ak47\n{ff0000}Bet: {00ff37}$%d", GetName(dueler1), Bet);
  226.         if(DuelType == 5) format(str, sizeof(str), "{ff0000}You Have Been Challenged To A 1v1 Duel By {00ff37}%s!\n{ff0000}This Invite Will Be Auto Cancelled In 10 Seconds.\n{ff0000}Duel Weapons: {00ff37}Colt 45\n{ff0000}Bet: {00ff37}$%d", GetName(dueler1), Bet);
  227.         if(DuelType == 6) format(str, sizeof(str), "{ff0000}You Have Been Challenged To A 1v1 Duel By {00ff37}%s!\n{ff0000}This Invite Will Be Auto Cancelled In 10 Seconds.\n{ff0000}Duel Weapons: {00ff37}Sawn-off Shotgun + TEC-9 + Deagle\n{ff0000}Bet: {00ff37}$%d", GetName(dueler1), Bet);
  228.         if(DuelType == 7) format(str, sizeof(str), "{ff0000}You Have Been Challenged To A 1v1 Duel By {00ff37}%s!\n{ff0000}This Invite Will Be Auto Cancelled In 10 Seconds.\n{ff0000}Duel Weapons: {00ff37}M4 + Deagle\n{ff0000}Bet: {00ff37}$%d", GetName(dueler1), Bet);
  229.         if(DuelType == 8) format(str, sizeof(str), "{ff0000}You Have Been Challenged To A 1v1 Duel By {00ff37}%s!\n{ff0000}This Invite Will Be Auto Cancelled In 10 Seconds.\n{ff0000}Duel Weapons: {00ff37}Sniper + M4\n{ff0000}Bet: {00ff37}$%d", GetName(dueler1), Bet);
  230.     }
  231.     format(string, sizeof(string), "{ff0000}You Have Challenged %s(%d) To A 1v1 Duel!", GetName(dueler2), dueler2);
  232.     ShowPlayerDialog(dueler2, dueldialog + 2, DIALOG_STYLE_MSGBOX, "{ff0000}DUEL CHALLENGE", str, "Accept", "Decline");
  233.     SCM(dueler1, -1, string);
  234.     declinedueltimer = SetTimer("DuelDeclined", 10000, 0);
  235.     return 1;
  236. }
  237.  
  238. forward DuelDeclined();
  239. public DuelDeclined()
  240. {
  241.     new string[128];
  242.     format(string, sizeof(string), "{ff0000}%s(%d) Have Declined Your Duel Challenge", GetName(dueler2), dueler2);
  243.     SCM(dueler1, -1, string);
  244.     SCM(dueler2, -1, "{ff0000}You Have Declined The Duel Challenge");
  245.     Progress = 0;
  246.     KillTimer(declinedueltimer);
  247.     ShowPlayerDialog(dueler2, -1, DIALOG_STYLE_MSGBOX, "Okay", "Enough madafkka", "", "");
  248.     return 1;
  249. }
  250.  
  251. forward TIMEUP();
  252. public TIMEUP()
  253. {
  254.     new msg[128];
  255.     format(msg, sizeof(msg), "{ff0000}Duel Between %s(%d) and %s(%d) Has Ended. Reason: Time UP!", GetName(dueler1), dueler1, GetName(dueler2), dueler2);
  256.     SendClientMessageToAll(-1, msg);
  257.     Progress =0;
  258.     SpawnPlayer(dueler1);
  259.     SpawnPlayer(dueler2);
  260.     ResetPlayerWeapons(dueler1);
  261.     ResetPlayerWeapons(dueler2);
  262.     return 1;
  263. }
  264.  
  265. forward CountDown();
  266. public CountDown()
  267. {
  268.     CD --;
  269.     if(CD == 0)
  270.     {
  271.         GameTextForPlayer(dueler1, "~r~GO! GO! GO!", 2000, 3);
  272.         GameTextForPlayer(dueler2, "~r~GO! GO! GO!", 2000, 3);
  273.         KillTimer(CDTimer);
  274.         TogglePlayerControllable(dueler1, true);
  275.         TogglePlayerControllable(dueler2, true);
  276.         PlayerPlaySound(dueler1, 1057, DuelPlace1);
  277.         PlayerPlaySound(dueler2, 1057, DuelPlace2);
  278.         return 1;
  279.     }
  280.     new msg[30];
  281.     format(msg, sizeof(msg), "~r~%d", CD);
  282.     GameTextForPlayer(dueler1, msg, 1000, 3);
  283.     GameTextForPlayer(dueler2, msg, 1000, 3);
  284.     PlayerPlaySound(dueler1, 1056, DuelPlace1);
  285.     PlayerPlaySound(dueler2, 1056, DuelPlace2);
  286.     return 1;
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement