Advertisement
Guest User

V3 - advFirearms3.inc

a guest
Jul 31st, 2016
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.48 KB | None | 0 0
  1. /*-----------------------------------------------***********------/
  2. ^ V1, and V2 are outdated. V3 comes now with more possibillities. ^
  3. ^ It's now possible to create weapons at gamemodeinit.            ^
  4.           FA::CreateFirearm(name[], weaponid, damage);
  5.           FA::GetFirearmID(name[]);
  6.           FA::GetFirearmName(id);
  7.           FA::IsValidFirearm(id);
  8.           FA::GivePlayerFirearm(playerid, FA::id, FA::ammo);
  9.           FA::GetPlayerFirearm(playerid, FA::slot);
  10.           FA::GetPlayerHoldingFirearm(playerid);
  11.           FA::IsPlayerHoldingAnyFirearm(playerid);
  12. /----------------------------------------------------------------*/
  13.  
  14. #define FA:: FA_
  15. #define GUN:: GUN_
  16.  
  17. #if !defined MAX_FIREARMS
  18.     #define MAX_FIREARMS 50
  19. #endif
  20.  
  21. #if !defined isnull
  22.     #define isnull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
  23. #endif
  24.  
  25. #define INVALID_FIREARM_ID 0
  26.  
  27. /****|| Variables ||****/
  28.     enum FA::info {
  29.         FA::ID,
  30.         FA::Name[24],
  31.         FA::WeaponID,
  32.         FA::Damage
  33.     }
  34.     new FA::Info[MAX_FIREARMS][FA::info],
  35.         FA::Player[MAX_PLAYERS][13],
  36.         FA::LastID = 0;
  37.  
  38. /****|| Functions.. ||****/
  39.     stock FA::CreateFirearm(FA::name[], FA::weaponid, FA::damage) {
  40.         if(!isnull(FA::name)) {
  41.             FA::LastID++;
  42.             FA::Info[FA::LastID][FA::ID] = FA::LastID;
  43.             format(FA::Info[FA::LastID][FA::Name], 24, FA::name);
  44.             FA::Info[FA::LastID][FA::WeaponID] = FA::weaponid;
  45.             FA::Info[FA::LastID][FA::Damage] = FA::damage;
  46.             return FA::LastID;
  47.         }
  48.         else {
  49.             #if defined FA_DEBUG
  50.                 printf("FA ยป Could not create a firearm, name was left empty.");
  51.             #endif
  52.             return INVALID_FIREARM_ID;
  53.         }
  54.     }
  55.  
  56.     stock FA::GetFirearmID(FA::name[]) {
  57.         new FA::succeeded = 0, FA::ids;
  58.         for(new FA::id = 0; FA::id < MAX_FIREARMS; FA::id++) {
  59.             if(FA::Info[FA::id][FA::ID] != INVALID_FIREARM_ID) {
  60.                 if(!strcmp(FA::Info[FA::id][FA::Name], FA::name)) {
  61.                     FA::succeeded = 1;
  62.                     FA::ids = FA::id;
  63.                     break;
  64.                 }
  65.             }
  66.         }
  67.         if(FA::succeeded == 0)
  68.             return INVALID_FIREARM_ID;
  69.         else
  70.             return FA::ids;
  71.     }
  72.  
  73.     stock FA::GetFirearmName(FA::id) {
  74.         new FA::empty[1];
  75.         if(FA::Info[FA::id][FA::ID] != INVALID_FIREARM_ID) {
  76.             strcat(FA::empty, FA::Info[FA::id][FA::Name]);
  77.             return FA::empty;
  78.         }
  79.         else {
  80.             strcat(FA::empty, " ");
  81.             return FA::empty;
  82.         }
  83.     }
  84.  
  85.     stock FA::IsValidFirearm(FA::id) {
  86.         new FA::succeeded = 0, FA::ids;
  87.         for(new FA::idd = 0; FA::idd < MAX_FIREARMS; FA::idd++) {
  88.             if(FA::Info[FA::idd][FA::ID] == FA::id) {
  89.                 FA::succeeded = 1;
  90.                 FA::ids = FA::idd;
  91.                 break;
  92.             }
  93.         }
  94.         if(FA::succeeded == 0)
  95.             return INVALID_FIREARM_ID;
  96.         else
  97.             return FA::ids;
  98.     }
  99.  
  100.     stock FA::GivePlayerFirearm(playerid, FA::id, FA::ammo) {
  101.         if(FA::IsValidFirearm(FA::id)) {
  102.             if(IsPlayerConnected(playerid)) {
  103.                 GivePlayerWeapon(playerid, FA::Info[FA::id][FA::WeaponID], FA::ammo);
  104.                 switch(FA::Info[FA::id][FA::WeaponID]) {
  105.                     case 0, 1: FA::Player[playerid][0] = FA::id;
  106.                     case 2, 3, 4, 5, 6, 7, 8, 9: FA::Player[playerid][1] = FA::id;
  107.                     case 10, 11, 12, 13, 14, 15: FA::Player[playerid][10] = FA::id;
  108.                     case 16, 17, 18: FA::Player[playerid][8] = FA::id;
  109.                     case 22, 23, 24: FA::Player[playerid][2] = FA::id;
  110.                     case 25, 26, 27: FA::Player[playerid][3] = FA::id;
  111.                     case 28, 29, 32: FA::Player[playerid][4] = FA::id;
  112.                     case 30, 31: FA::Player[playerid][5] = FA::id;
  113.                     case 33, 34: FA::Player[playerid][6] = FA::id;
  114.                     case 35, 36, 37, 38: FA::Player[playerid][7] = FA::id;
  115.                     case 39: FA::Player[playerid][8] = FA::id;
  116.                     case 40: FA::Player[playerid][12] = FA::id;
  117.                     case 41, 42, 43: FA::Player[playerid][9] = FA::id;
  118.                     case 44, 45, 46: FA::Player[playerid][11] = FA::id;
  119.                 }
  120.             }
  121.         }
  122.     }
  123.  
  124.     stock FA::GetPlayerFirearm(playerid, FA::slot) {
  125.         if(FA::Player[playerid][FA::slot] == INVALID_FIREARM_ID)
  126.             return INVALID_FIREARM_ID;
  127.         else
  128.             return FA::Player[playerid][FA::slot];
  129.     }
  130.  
  131.     stock FA::GetPlayerHoldingFirearm(playerid) {
  132.         new FA::slot;
  133.         switch(GetPlayerWeapon(playerid)) {
  134.             case 0, 1: FA::slot = 0;
  135.             case 2, 3, 4, 5, 6, 7, 8, 9: FA::slot = 1;
  136.             case 10, 11, 12, 13, 14, 15: FA::slot = 10;
  137.             case 16, 17, 18: FA::slot = 8;
  138.             case 22, 23, 24: FA::slot = 2;
  139.             case 25, 26, 27: FA::slot = 3;
  140.             case 28, 29, 32: FA::slot = 4;
  141.             case 30, 31: FA::slot = 5;
  142.             case 33, 34: FA::slot = 6;
  143.             case 35, 36, 37, 38: FA::slot = 7;
  144.             case 39: FA::slot = 8;
  145.             case 40: FA::slot = 12;
  146.             case 41, 42, 43: FA::slot = 9;
  147.             case 44, 45, 46: FA::slot = 11;
  148.         }
  149.         return FA::GetPlayerFirearm(playerid, FA::slot);
  150.     }
  151.  
  152.     stock FA::IsPlayerHoldingAnyFirearm(playerid) {
  153.         if(FA::GetPlayerHoldingFirearm(playerid) == INVALID_FIREARM_ID)
  154.             return INVALID_FIREARM_ID;
  155.         else
  156.             return 1;
  157.     }
  158.  
  159. /****|| Hooking.. ||****/
  160.     public OnPlayerConnect(playerid) {
  161.         #if defined FA_OnPlayerConnect
  162.             FA_OnPlayerConnect(playerid);
  163.         #endif
  164.         return 1;
  165.     }
  166.     #if defined _ALS_OnPlayerConnect
  167.         #undef OnPlayerConnect
  168.     #else
  169.         #define _ALS_OnPlayerConnect
  170.     #endif
  171.     #define OnPlayerConnect FA_OnPlayerConnect
  172.     #if defined FA_OnPlayerConnect
  173.         forward FA_OnPlayerConnect(playerid);
  174.     #endif
  175.     public FA_OnPlayerConnect(playerid) {
  176.         for(new FA::slot = 0; FA::slot < 13; FA::slot++) {
  177.             FA::Player[playerid][FA::slot] = 0;
  178.         }
  179.     }
  180.  
  181.     public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ) {
  182.         #if defined FA_OnPlayerWeaponShot
  183.             FA_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
  184.         #endif
  185.         return 1;
  186.     }
  187.     #if defined _ALS_OnPlayerWeaponShot
  188.         #undef OnPlayerWeaponShot
  189.     #else
  190.         #define _ALS_OnPlayerWeaponShot
  191.     #endif
  192.     #define OnPlayerWeaponShot FA_OnPlayerWeaponShot
  193.     #if defined FA_OnPlayerWeaponShot
  194.         forward FA_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
  195.     #endif
  196.     public FA_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ) {
  197.         if(hittype == BULLET_HIT_TYPE_PLAYER) {
  198.             new Float:FA::health;
  199.             GetPlayerHealth(hitid, FA::health);
  200.             new Float:FA::armour;
  201.             GetPlayerArmour(hitid, FA::armour);
  202.             if(FA::armour > 0) {
  203.                 SetPlayerArmour(hitid, FA::armour-FA::Info[FA::GetPlayerHoldingFirearm(playerid)][FA::Damage]);
  204.                 GetPlayerArmour(hitid, FA::armour);
  205.                 if(FA::armour < 0) {
  206.                     SetPlayerHealth(hitid, FA::health-FA::armour);
  207.                     SetPlayerArmour(hitid, 0);
  208.                 }
  209.             }
  210.             else
  211.                 SetPlayerHealth(hitid, FA::health-FA::Info[FA::GetPlayerHoldingFirearm(playerid)][FA::Damage]);
  212.         }
  213.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement