Advertisement
CreativityLacker

C-Guns | V0.25

Jun 4th, 2013
319
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.01 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. #define DANGER_HEALTH   100
  4.  
  5. new Float:DangerHealth = 100.0;
  6.  
  7. stock SetDangerHealth(Float:danger) return DangerHealth = danger;
  8. stock GetDangerHealth() return DangerHealth;
  9.  
  10. forward OnPlayerWeaponHack(playerid, weaponid, allowed_ammo, owned_ammo);
  11.  
  12. /*
  13. native SetDangerHealth(Float:danger); // if the player's health is less than this, it'll do PlayerBulletCheck
  14. native GetDangerHealth();
  15.  
  16. native GetPlayerBulletsShot(playerid); //Returns the amount of bullets shot
  17. native GetPlayerBulletsHit(playerid); // Returns the amount of bullets HIT
  18. native Float:GetBulletsHitAccuracy(playerid); //Returns accuracy in % PERCENTAGE
  19. native GivePlayerWeaponEx(playerid, weaponid, ammo);
  20. native ResetPlayerWeaponsEx(playerid);
  21. native SetPlayerAmmoEx(playerid, weaponid, ammo);
  22.  
  23. native GetPlayerAllowedAmmo(playerid, weaponid); //returns the player's ALLOWED ammo
  24. native GetPlayerActualAmmo(playerid, weaponid);  //returns the ammo the player POSSESSES
  25.  
  26. //only use these func's if you know them
  27. native GetWeaponSlot(weaponid);
  28. native IsWeaponGun(weaponid); //Returns if the weapon ID is a gun
  29. native WeaponHackCheck(playerid);   // Checking for player weapon hacks
  30. native GiveValidWeapons(playerid);  // DO NOT USE
  31. native PlayerBulletCheck(playerid); //DO NOT USE
  32. */
  33.  
  34. stock GetWeaponSlot(weaponid)
  35. {
  36.     new slot;
  37.     switch(weaponid)
  38.     {
  39.         case 0,1: slot = 0;
  40.         case 2 .. 9: slot = 1;
  41.         case 10 .. 15: slot = 10;
  42.         case 16 .. 18, 39: slot = 8;
  43.         case 22 .. 24: slot =2;
  44.         case 25 .. 27: slot = 3;
  45.         case 28, 29, 32: slot = 4;
  46.         case 30, 31: slot = 5;
  47.         case 33, 34: slot = 6;
  48.         case 35 .. 38: slot = 7;
  49.         case 40: slot = 12;
  50.         case 41 .. 43: slot = 9;
  51.         case 44 .. 46: slot = 11;
  52.     }
  53.     return slot;
  54. }
  55.  
  56. enum e_B_p
  57. {
  58.     BulletsShot,
  59.     BulletsHit,
  60.     bool:Weapons[45],
  61.     WeaponsAmmo[45]
  62. }
  63.  
  64. new eB[MAX_PLAYERS][e_B_p];
  65.  
  66. stock PlayerBulletCheck(playerid)
  67. {
  68.     new weapdata[12][2], totalbullets;
  69.     for(new x=0; x < 12; x++)
  70.     {
  71.         GetPlayerWeaponData(playerid, x, weapdata[x][0], weapdata[x][1]);
  72.         for(new d =0; d < 45; d++)
  73.         {
  74.             if(IsWeaponGun(d) && eB[playerid][Weapons][d] == true && eB[playerid][WeaponsAmmo][d] == 0) eB[playerid][Weapons][d] = false;
  75.             if(eB[playerid][Weapons][d] == true && eB[playerid][WeaponsAmmo][d] != 0 && weapdata[x][0] == d && IsWeaponGun(weapdata[x][0]))
  76.             {
  77.                 totalbullets += eB[playerid][WeaponsAmmo][d]-weapdata[x][1];
  78.                 eB[playerid][WeaponsAmmo][d] = weapdata[x][1];
  79.  
  80.             }
  81.         }
  82.     }
  83.     eB[playerid][BulletsShot] += totalbullets;
  84.     GiveValidWeapons(playerid);
  85.     WeaponHackCheck(playerid);
  86.     return 1;
  87. }
  88.  
  89. stock RemovePlayerWeapon(playerid, weaponid)
  90. {
  91.     if(IsWeaponGun(weaponid)) return SetPlayerAmmoEx(playerid, weaponid, 0);
  92.     else if(!IsWeaponGun(weaponid))
  93.     {
  94.         ResetPlayerWeapons(playerid);
  95.         SetPlayerAmmoEx(playerid, weaponid, 0);
  96.         for(new x=0; x < 46; x++)
  97.         {
  98.             GivePlayerWeapon(playerid, eB[playerid][Weapons][weaponid], eB[playerid][WeaponsAmmo][weaponid]);
  99.         }  
  100.     }
  101.     return 1;
  102. }
  103.  
  104. stock GiveValidWeapons(playerid)
  105. {
  106.     for(new x=0; x < 45; x++)
  107.     {
  108.         SetPlayerAmmo(playerid, x, eB[playerid][WeaponsAmmo][x]);
  109.     }
  110.     return 1;
  111. }
  112.  
  113.  
  114. stock GetPlayerAllowedAmmo(playerid, weaponid) return eB[WeaponsAmmo][weaponid];
  115. stock GetPlayerActualAmmo(playerid, weaponid)
  116. {
  117.     new weapon[3];
  118.     weapon[0] = GetWeaponSlot(weaponid);
  119.     GetPlayerWeaponData(playerid, weapon[0], weapon[1], weapon[2]);
  120.     return weapon[2];  
  121. }
  122.  
  123.  
  124. stock IsWeaponGun(weaponid)
  125. {
  126.     switch(weaponid)
  127.     {
  128.         case 22,23,24,25,26,27,28,29,30,31,32,33,34,38: return 1;
  129.     }
  130.     return 0;
  131. }
  132.  
  133. stock GetPlayerActAmmo_(playerid)
  134. {
  135.     new weap = GetPlayerWeapon(playerid);
  136.     return eB[playerid][WeaponsAmmo][weap];
  137. }
  138.  
  139. stock GetPlayerAmmo_(playerid)
  140. {
  141.     new weapon[3];
  142.     weapon[0] = GetWeaponSlot(GetPlayerWeapon(playerid) );
  143.     GetPlayerWeaponData(playerid, weapon[0], weapon[1], weapon[2]);
  144.     return weapon[2];
  145. }
  146.  
  147. stock SetPlayerAmmoEx(playerid, weapon, ammo)
  148. {
  149.     PlayerBulletCheck(playerid);
  150.     if(eB[playerid][Weapons][weapon] == false) return 0;
  151.     eB[playerid][WeaponsAmmo][weapon] = ammo;
  152.     SetPlayerAmmo(playerid, weapon, ammo);
  153.     return 1;
  154. }
  155.  
  156. stock WeaponHackCheck(playerid)
  157. {
  158.     new weaponid = GetPlayerWeapon(playerid);
  159.     if(eB[playerid][Weapons][weaponid] == false || GetPlayerAmmo_(playerid) > GetPlayerActAmmo_(playerid) && GetPlayerState(playerid) != 7) return 1;
  160.     return 0;
  161. }
  162.  
  163. stock GivePlayerWeaponEx(playerid, weaponid, ammo)
  164. {
  165.     new slot = GetWeaponSlot(weaponid);
  166.     new wap, amu;
  167.     GetPlayerWeaponData(playerid, slot, wap, amu);
  168.     eB[playerid][Weapons][wap] = false;
  169.     eB[playerid][WeaponsAmmo][wap] = 0;
  170.  
  171.     eB[playerid][Weapons][weaponid] = true;
  172.     eB[playerid][WeaponsAmmo][weaponid] += ammo;
  173.     GivePlayerWeapon(playerid, weaponid, ammo);
  174.     return 1;
  175. }
  176.  
  177. stock ResetPlayerWeaponsEx(playerid)
  178. {
  179.     for(new x=0; x < 45; x++)
  180.     {
  181.         eB[playerid][Weapons][x] = false;
  182.         eB[playerid][WeaponsAmmo][x] = 0;
  183.     }
  184.     ResetPlayerWeapons(playerid);
  185.     return 1;
  186. }
  187.  
  188. stock GetPlayerBulletsShot(playerid) return eB[playerid][BulletsShot];
  189. stock GetPlayerBulletsHit(playerid) return eB[playerid][BulletsHit];
  190. stock Float:GetBulletsHitAccuracy(playerid)
  191. {
  192.     new Float:acu = floatdiv(eB[playerid][BulletsHit], eB[playerid][BulletsShot]);
  193.     new Float:moacu = floatmul(acu, 100);
  194.     return moacu;
  195. }
  196.  
  197. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
  198. {
  199.     if(IsWeaponGun(weaponid) && issuerid != INVALID_PLAYER_ID)
  200.     {
  201.         eB[issuerid][BulletsHit]++;
  202.     }
  203.     if(WeaponHackCheck(issuerid) == 1)
  204.     {
  205.         CallRemoteFunction("OnPlayerWeaponHack", "iddd", issuerid, weaponid, weaponid, GetPlayerActAmmo_(issuerid), GetPlayerAmmo_(issuerid) );
  206.     }
  207.     new Float:HP;
  208.     GetPlayerHealth(playerid, HP);
  209.     if(HP <= DangerHealth) PlayerBulletCheck(playerid);
  210.     GetPlayerHealth(issuerid, HP);
  211.     if(HP <= DangerHealth) PlayerBulletCheck(issuerid);
  212.     CallRemoteFunction("Hooked_OPTD", "iifi", playerid, issuerid, amount, weaponid);
  213.     return 1;
  214. }
  215.  
  216.  
  217. public OnPlayerConnect(playerid)
  218. {
  219.         eB[playerid][BulletsHit] = 0;
  220.         eB[playerid][BulletsShot] = 0;
  221.         CallRemoteFunction("Hooked_OPC", "i", playerid);
  222.         return 1;
  223. }
  224.  
  225. #if defined _ALS_OnPlayerTakeDamage
  226.  #undef OnPlayerTakeDamage
  227. #else
  228.  #define _ALS_OnPlayerTakeDamage
  229. #endif
  230.  
  231. #if defined _ALS_OnPlayerConnect
  232.  #undef OnPlayerConnect
  233. #else
  234.  #define _ALS_OnPlayerConnect
  235. #endif
  236.  
  237. #define OnPlayerTakeDamage Hooked_OPTD
  238. #define OnPlayerConnect Hooked_OPC
  239.  
  240. forward Hooked_OPTD(playerid, issuerid, Float:amount, weaponid);
  241. forward Hooked_OPC(playerid);
  242.  
  243. #if defined _ALS_GivePlayerWeapon
  244.  #undef GivePlayerWeapon
  245. #else
  246.  #define _ALS_GivePlayerWeapon
  247. #endif
  248.  
  249. #if defined _ALS_ResetPlayerWeapons
  250.  #undef ResetPlayerWeapons
  251. #else
  252.  #define _ALS_ResetPlayerWeapons
  253. #endif
  254.  
  255. #if defined _ALS_SetPlayerAmmo
  256.  #undef SetPlayerAmmo
  257. #else
  258.  #define _ALS_SetPlayerAmmo
  259. #endif
  260.  
  261. #if defined _ALS_GetPlayerAmmo
  262.  #undef GetPlayerAmmo
  263. #else
  264.  #define _ALS_GetPlayerAmmo
  265. #endif
  266.  
  267. #define GivePlayerWeapon GivePlayerWeaponEx
  268. #define ResetPlayerWeapons ResetPlayerWeaponsEx
  269. #define SetPlayerAmmo SetPlayerAmmoEx
  270. #define GetPlayerAmmo GetPlayerActualAmmo
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement