Advertisement
Guest User

Duel System by Affan

a guest
Aug 12th, 2014
1,950
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.49 KB | None | 0 0
  1. /*
  2.  
  3.     Filterscript made by Affan
  4.     Duel system
  5.  
  6. */
  7.  
  8. #include <a_samp>
  9. #include <zcmd>
  10. #include <sscanf2>
  11.  
  12. // Enum
  13. enum DuelSystem
  14. {
  15.     playername[25],
  16.     induel,
  17.     weapname[45],
  18.     weapid
  19. }
  20. new duelinfo[MAX_PLAYERS][DuelSystem];
  21.  
  22. enum sWeaponInfo
  23. {
  24.     Name[60],
  25.     Valid,
  26.     Slot
  27. }
  28.  
  29. new WeaponInfo[][sWeaponInfo] =
  30. {
  31.     {"Fist",1,0},
  32.     {"Brass Knuckles",1,0},
  33.     {"Golf Club",1,1},
  34.     {"Nightstick",1,1},
  35.     {"Knife",1,1},
  36.     {"Baseball Bat",1,1},
  37.     {"Shovel",1,1},
  38.     {"Pool cue",1,1},
  39.     {"Katana",1,1},
  40.     {"Chainsaw",1,1},
  41.     {"Double-ended Dildo",1,10},
  42.     {"Dildo",1,10},
  43.     {"Vibrator",1,10},
  44.     {"Silver Vibrator",1,10},
  45.     {"Flowers",1,10},
  46.     {"Cane",1,10},
  47.     {"Grenade",1,8},
  48.     {"Tear Gas",1,8},
  49.     {"Molotov Cocktail",1,8},
  50.     {"",0},
  51.     {"",0},
  52.     {"",0},
  53.     {"9mm Pistol",1,2},
  54.     {"Silenced 9mm",1,2},
  55.     {"Deagle",1,2},
  56.     {"Shotgun",1,3},
  57.     {"Sawnoff Shotgun",1,3},
  58.     {"Combat Shotgun",1,3},
  59.     {"Micro SMG",1,4},
  60.     {"MP5",1,4},
  61.     {"AK-47",1,5},
  62.     {"M4",1,5},
  63.     {"Tec-9",1,4},
  64.     {"Country Rifle",1,6},
  65.     {"Sniper Rifle",1,6},
  66.     {"RPG",1,7},
  67.     {"HS Rocket",1,7},
  68.     {"Flamethrower",1,7},
  69.     {"Minigun",1,7},
  70.     {"Sachel Charge",1,8},
  71.     {"Detonator",1,12},
  72.     {"Spray Can",1,9},
  73.     {"Fire Extinguisher",1,9},
  74.     {"Camera",1,9},
  75.     {"Night Vision Goggles",0,11},
  76.     {"Thermal Goggles",0,11},
  77.     {"Parachute",1,11}
  78. };
  79.  
  80. new invite[MAX_PLAYERS],
  81.     inviter[MAX_PLAYERS],
  82.     DuelSender[MAX_PLAYERS],
  83.     DuelReciever[MAX_PLAYERS];
  84.  
  85. // Colors
  86. #define RED             "{FF0000}"
  87. #define DARKRED         "{CC0000}"
  88. #define YELLOW          "{FFFF00}"
  89. #define GREEN           "{00FF00}"
  90. #define BLUE            "{0000FF}"
  91. #define ORANGE          "{FF7F2A}"
  92. #define PURPLE          "{FF00FF}"
  93. #define LIGHT           "{00FFFF}"
  94. #define WHITE           "{FFFFFF}"
  95. #define GREY            "{696969}"
  96.  
  97. public OnFilterScriptInit()
  98. {
  99.     print("\n--------------------------------------");
  100.     print(" Duel system by Affan loaded");
  101.     print("--------------------------------------\n");
  102.     return 1;
  103. }
  104.  
  105. public OnFilterScriptExit()
  106. {
  107.     return 1;
  108. }
  109.  
  110. public OnPlayerConnect(playerid)
  111. {
  112.     new string[25];
  113.     format(string, sizeof(string), "%s", GetName(playerid));
  114.     duelinfo[playerid][playername] = string;
  115.     return 1;
  116. }
  117.  
  118. public OnPlayerDeath(playerid, killerid, reason)
  119. {
  120.     SendDeathMessage(killerid, playerid, reason);
  121.     if(duelinfo[killerid][induel] == 1)
  122.     {
  123.         duelinfo[killerid][induel] = 0;
  124.         new string[128];
  125.         new Float:health = GetPlayerHealth(killerid, health);
  126.         format(string, sizeof(string), ""RED"[DUEL] "WHITE"%s(%d) has defeated %s(%d) in a duel with %.2f health left", duelinfo[killerid][playername], killerid, duelinfo[playerid][playername], playerid, health);
  127.         SendClientMessageToAll(-1, string);
  128.         SetPlayerScore(killerid, GetPlayerScore(killerid) + 5);
  129.     }
  130.     return 1;
  131. }
  132.  
  133. // Commands
  134.  
  135. CMD:duel(playerid, params[])
  136. {
  137.     new user, weap[45], weaponid = -1, string[128], string2[128] ;
  138.     if(sscanf(params, "us[45]", user, weap)) return SendClientMessage(playerid, -1, "USAGE: /duel <username/id> <weapon name>");
  139.     if(user == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "The player is currently offline!");
  140.     if(user == playerid) return SendClientMessage(playerid, -1, "You cannot duel yourself");
  141.     if(duelinfo[playerid][induel] == 1) return SendClientMessage(playerid, -1, "You are already in a duel");
  142.     if(duelinfo[user][induel] == 1) return SendClientMessage(playerid, -1, "Player is already in a duel");
  143.     if(invite[user] == 1) return SendClientMessage(playerid, -1, "Player already has a duel invitation");
  144.     if(inviter[playerid] == 1) return SendClientMessage(playerid, -1, "You already invited a player, please wait till it's rejected or accepted!");
  145.     if(StringNumeric(weap))
  146.     {
  147.         weaponid = strval(weap);
  148.     }
  149.     else
  150.     {
  151.         weaponid = CheckWeaponID(weap);
  152.     }
  153.     DuelSender[user] = playerid;
  154.     duelinfo[playerid][weapid] = weaponid;
  155.     duelinfo[playerid][weapname] = weap;
  156.     duelinfo[user][weapid] = weaponid;
  157.     duelinfo[user][weapname] = weap;
  158.     invite[user] = 1;
  159.     inviter[playerid] = 1;
  160.     DuelReciever[playerid] = user;
  161.     format(string, sizeof(string), ""RED"[DUEL] "WHITE"You have send a duel invitation to %s(%d). [Weapon : %s]", duelinfo[user][playername], user, weap);
  162.     SendClientMessage(playerid, -1, string);
  163.     format(string2, sizeof(string2), ""RED"[DUEL] "WHITE"You have recieved a duel invitation from %s(%d). [Weapon : %s]", duelinfo[playerid][playername], playerid, weap);
  164.     SendClientMessage(playerid, -1, string2);
  165.     return 1;
  166. }
  167.  
  168. CMD:acceptduel(playerid, params[])
  169. {
  170.     if(invite[playerid] == 1)
  171.     {
  172.         new user = DuelSender[playerid];
  173.         ResetPlayerWeapons(user);
  174.         RemovePlayerFromVehicle(user);
  175.         SetPlayerArmour(user, 0);
  176.         SetPlayerHealth(user, 100);
  177.         SetPlayerVirtualWorld(user, 100);
  178.         SetPlayerPos(user, 1399.3311, 2789.9409, 10.8203);
  179.         GivePlayerWeapon(user, duelinfo[playerid][weapid], 500);
  180.         duelinfo[user][induel] = 1;
  181.         inviter[user] = 0;
  182.  
  183.         ResetPlayerWeapons(playerid);
  184.         RemovePlayerFromVehicle(playerid);
  185.         SetPlayerArmour(playerid, 0);
  186.         SetPlayerHealth(playerid, 100);
  187.         SetPlayerVirtualWorld(playerid, 100);
  188.         GivePlayerWeapon(playerid, duelinfo[user][weapid], 500);
  189.         SetPlayerPos(playerid, 1358.0012, 2789.6218, 10.8203);
  190.         duelinfo[playerid][induel] = 1;
  191.         invite[playerid] = 0;
  192.     }
  193.     else return SendClientMessage(playerid, -1, "You didn't recieve any duel request");
  194.     return 1;
  195. }
  196.  
  197. CMD:declineduel(playerid, params[])
  198. {
  199.     if(invite[playerid] == 1)
  200.     {
  201.         new user = DuelSender[playerid], string[128], string2[128];
  202.         invite[playerid] = 0;
  203.         inviter[user] = 0;
  204.         format(string, sizeof(string), ""RED"[DUEL] "WHITE"You have declined %s(%d)'s duel request", duelinfo[user][playername], user);
  205.         SendClientMessage(playerid, -1, string);
  206.         format(string2, sizeof(string2), ""RED"[DUEL] "WHITE"%s(%d) has declined your duel request", duelinfo[playerid][playername], playerid);
  207.         SendClientMessage(playerid, -1, string2);
  208.     }
  209.     else return SendClientMessage(playerid, -1, "You didn't recieve any duel request");
  210.     return 1;
  211. }
  212.  
  213. CMD:cancelrequest(playerid, params[])
  214. {
  215.     if(inviter[playerid] == 1)
  216.     {
  217.         new user = DuelReciever[playerid], string[128], string2[128];
  218.         inviter[playerid] = 0;
  219.         invite[user] = 0;
  220.         format(string, sizeof(string), ""RED"[DUEL] "WHITE"You have cancelled the request sent to%s(%d)", duelinfo[user][playername], user);
  221.         SendClientMessage(playerid, -1, string);
  222.         format(string2, sizeof(string2), ""RED"[DUEL] "WHITE"%s(%d) has cancelled the duel request sent to you", duelinfo[playerid][playername], playerid);
  223.         SendClientMessage(playerid, -1, string2);
  224.     }
  225.     else return SendClientMessage(playerid, -1, "You didn't send any duel request");
  226.     return 1;
  227. }
  228.  
  229. // Stocks
  230.  
  231. stock GetName(playerid)
  232. {
  233.     new uName[24];
  234.     GetPlayerName(playerid, uName, sizeof(uName));
  235.     return uName;
  236. }
  237.  
  238. StringNumeric(const str[])
  239. {
  240.     for(new i = 0,ii = strlen(str);i < ii;i++)
  241.     {
  242.         if(str[i] > '9' || str[i] < '0') return 0;
  243.     }
  244.     return 1;
  245. }
  246.  
  247. stock CheckWeaponID(name[])
  248. {
  249.     for(new i = 0; i < 46; i++)
  250.     {
  251.         if(strfind(WeaponInfo[i][Name], name, true) != -1)
  252.         {
  253.             if(WeaponInfo[i][Valid] == 0) return -2;
  254.             return i;
  255.         }
  256.     }
  257.     return -1;
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement