RodneyFrancalim

rf_Damage

Feb 10th, 2015
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.63 KB | None | 0 0
  1. #include    a_samp
  2. #include    progress2
  3.  
  4. enum W_DATA
  5. {
  6.     Float:W_COEFFICIENT, // == MAX RANGE (2^W_COEFFICIENT) TO INFLICT THE PERFECT DAMAGE
  7.     Float:W_DAMAGE       // == DAMAGE INFLICTED BY THE WEAPON INSIDE THE MAX RANGE
  8. }
  9.  
  10. static const
  11.     WeaponInfo[13][W_DATA] = // ID 22 (9MM) TO 34 (SNIPER RIFLE)
  12.     {
  13.         {2.0,   8.25}, // 9MM
  14.         {1.0,  13.20}, // SILENCED 9MM
  15.         {3.0,  46.20}, // DESERT EAGLE
  16.         {2.0,  49.50}, // SHOTGUN
  17.         {3.0,  49.50}, // SAWNOFF SHOTGUN
  18.         {4.0,  39.60}, // COMBAT SHOTGUN
  19.         {2.0,   6.60}, // MICRO SMG
  20.         {3.0,   8.25}, // SMG
  21.         {5.0,   9.90}, // AK-47
  22.         {5.0,   9.90}, // M4
  23.         {2.0,   6.60}, // TEC-9
  24.         {5.0,  24.75}, // COUNTRY RIFLE
  25.         {6.0,  41.25}  // SNIPER RIFLE
  26.     }
  27. ;
  28.  
  29. new
  30.     PlayerBar:ArmourBar[MAX_PLAYERS],
  31.     PlayerBar:HealthBar[MAX_PLAYERS]
  32. ;
  33.  
  34. public OnPlayerConnect(playerid)
  35. {
  36.     #if defined rf_Damage_OnPlayerConnect
  37.         rf_Damage_OnPlayerConnect(playerid);
  38.     #endif
  39.  
  40.     ArmourBar[playerid] = CreatePlayerProgressBar(playerid, 548.0, 47.0, 61.0, 3.0, -1, 100.0, BAR_DIRECTION_RIGHT);
  41.     HealthBar[playerid] = CreatePlayerProgressBar(playerid, 549.0, 69.0, 60.0, 4.0, -1256645121, 100.0, BAR_DIRECTION_RIGHT);
  42.     ShowPlayerProgressBar(playerid, ArmourBar[playerid]);
  43.     ShowPlayerProgressBar(playerid, HealthBar[playerid]);
  44.  
  45.     return 1;
  46. }
  47. #if defined _ALS_OnPlayerConnect
  48.     #undef OnPlayerConnect
  49. #else
  50.     #define _ALS_OnPlayerConnect
  51. #endif
  52. #define OnPlayerConnect rf_Damage_OnPlayerConnect
  53. #if defined rf_Damage_OnPlayerConnect
  54.     forward rf_Damage_OnPlayerConnect(playerid);
  55. #endif
  56.  
  57. public OnPlayerSpawn(playerid)
  58. {
  59.     #if defined rf_Damage_OnPlayerSpawn
  60.         rf_Damage_OnPlayerSpawn(playerid);
  61.     #endif
  62.  
  63.     SetPlayerArmourEx(playerid, 50.0);
  64.     SetPlayerHealthEx(playerid, 50.0);
  65.  
  66.     return 1;
  67. }
  68. #if defined _ALS_OnPlayerSpawn
  69.     #undef OnPlayerSpawn
  70. #else
  71.     #define _ALS_OnPlayerSpawn
  72. #endif
  73. #define OnPlayerSpawn rf_Damage_OnPlayerSpawn
  74. #if defined rf_Damage_OnPlayerSpawn
  75.     forward rf_Damage_OnPlayerSpawn(playerid);
  76. #endif
  77.  
  78. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
  79. {
  80.     #if defined rf_Damage_OnPlayerTakeDamage
  81.         rf_Damage_OnPlayerTakeDamage(playerid, issuerid, amount, weaponid, bodypart);
  82.     #endif
  83.  
  84.     if(22 <= weaponid <= 34)
  85.     {
  86.         static
  87.             Float:armour,
  88.             Float:health,
  89.             Float:p[3]
  90.         ;
  91.  
  92.         armour = GetPlayerProgressBarValue(playerid, ArmourBar[playerid]);
  93.         health = GetPlayerProgressBarValue(playerid, HealthBar[playerid]);
  94.  
  95.         GetPlayerPos(issuerid, p[0], p[1], p[2]);
  96.  
  97.         /*
  98.             IF THE DISTANCE IS ABOVE '2^WeaponInfo[weaponid - 22][W_COEFFICIENT]'
  99.             FOR EACH 'WeaponInfo[weaponid - 22][W_COEFFICIENT]/100'
  100.             THE DAMAGED LOSES 'WeaponInfo[weaponid - 22][W_COEFFICIENT]' AMOUNT
  101.         */
  102.  
  103.         static
  104.             Float:newdamage
  105.         ;
  106.  
  107.         //newdamage = GetPlayerDistanceFromPoint(playerid, p[0], p[1], p[2]) <= floatpower(2, WeaponInfo[weaponid - 22][W_COEFFICIENT]) ? WeaponInfo[weaponid - 22][W_DAMAGE] : WeaponInfo[weaponid - 22][W_DAMAGE] - ((GetPlayerDistanceFromPoint(playerid, p[0], p[1], p[2]) - floatpower(2, WeaponInfo[weaponid - 22][W_COEFFICIENT])) * (floatpower(2, WeaponInfo[weaponid - 22][W_COEFFICIENT]) / 10));
  108.         newdamage = GetPlayerDistanceFromPoint(playerid, p[0], p[1], p[2]) <= floatpower(2, WeaponInfo[weaponid - 22][W_COEFFICIENT]) ? amount : amount - ((GetPlayerDistanceFromPoint(playerid, p[0], p[1], p[2]) - floatpower(2, WeaponInfo[weaponid - 22][W_COEFFICIENT])) * (floatpower(2, WeaponInfo[weaponid - 22][W_COEFFICIENT]) / 100));
  109.  
  110.         if(newdamage < 1.0)
  111.             newdamage = 1.0;
  112.  
  113.         new str[128];
  114.         format(str, sizeof(str), "DEBUG: You took %f damage (weaponid = %d | bodypart = %d).", bodypart == 9 ? newdamage * 3 : (bodypart != 3 ? newdamage / 2 : newdamage), weaponid , bodypart);
  115.         SendClientMessage(playerid, -1, str);
  116.  
  117.         switch(bodypart)
  118.         {
  119.             case 3: // TORSO
  120.             {
  121.                 if(newdamage <= armour)
  122.                     SetPlayerArmourEx(playerid, armour - newdamage);
  123.                 else
  124.                 {
  125.                     SetPlayerArmourEx(playerid, 0.0);
  126.                     SetPlayerHealthEx(playerid, health - (newdamage - armour));
  127.                 }
  128.             }
  129.             case 9: // HEAD
  130.             {
  131.                 PlayerPlaySound(playerid, 1140, 0.0, 0.0, 0.0);
  132.                 SetPlayerHealthEx(playerid, health - (newdamage * 3));
  133.             }
  134.             default:
  135.                 SetPlayerHealthEx(playerid, health - (newdamage / 2));
  136.         }
  137.     }
  138.     else
  139.         SetPlayerHealthEx(playerid, GetPlayerProgressBarValue(playerid, HealthBar[playerid]) - amount);
  140.  
  141.     return 1;
  142. }
  143. #if defined _ALS_OnPlayerTakeDamage
  144.     #undef OnPlayerTakeDamage
  145. #else
  146.     #define _ALS_OnPlayerTakeDamage
  147. #endif
  148. #define OnPlayerTakeDamage rf_Damage_OnPlayerTakeDamage
  149. #if defined rf_Damage_OnPlayerTakeDamage
  150.     forward rf_Damage_OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart);
  151. #endif
  152.  
  153. SetPlayerArmourEx(playerid, Float:armour)
  154. {
  155.     SetPlayerProgressBarValue(playerid, ArmourBar[playerid], armour);
  156.  
  157.     return 1;
  158. }
  159.  
  160. SetPlayerHealthEx(playerid, Float:health)
  161. {
  162.     SetPlayerHealth(playerid, 65536);
  163.     SetPlayerArmour(playerid, health);
  164.     SetPlayerProgressBarValue(playerid, HealthBar[playerid], health);
  165.  
  166.     if(GetPlayerProgressBarValue(playerid, HealthBar[playerid]) <= 0.0)
  167.         SetPlayerHealth(playerid, 0.0);
  168.  
  169.     return 1;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment