Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include a_samp
- #include progress2
- enum W_DATA
- {
- Float:W_COEFFICIENT, // == MAX RANGE (2^W_COEFFICIENT) TO INFLICT THE PERFECT DAMAGE
- Float:W_DAMAGE // == DAMAGE INFLICTED BY THE WEAPON INSIDE THE MAX RANGE
- }
- static const
- WeaponInfo[13][W_DATA] = // ID 22 (9MM) TO 34 (SNIPER RIFLE)
- {
- {2.0, 8.25}, // 9MM
- {1.0, 13.20}, // SILENCED 9MM
- {3.0, 46.20}, // DESERT EAGLE
- {2.0, 49.50}, // SHOTGUN
- {3.0, 49.50}, // SAWNOFF SHOTGUN
- {4.0, 39.60}, // COMBAT SHOTGUN
- {2.0, 6.60}, // MICRO SMG
- {3.0, 8.25}, // SMG
- {5.0, 9.90}, // AK-47
- {5.0, 9.90}, // M4
- {2.0, 6.60}, // TEC-9
- {5.0, 24.75}, // COUNTRY RIFLE
- {6.0, 41.25} // SNIPER RIFLE
- }
- ;
- new
- PlayerBar:ArmourBar[MAX_PLAYERS],
- PlayerBar:HealthBar[MAX_PLAYERS]
- ;
- public OnPlayerConnect(playerid)
- {
- #if defined rf_Damage_OnPlayerConnect
- rf_Damage_OnPlayerConnect(playerid);
- #endif
- ArmourBar[playerid] = CreatePlayerProgressBar(playerid, 548.0, 47.0, 61.0, 3.0, -1, 100.0, BAR_DIRECTION_RIGHT);
- HealthBar[playerid] = CreatePlayerProgressBar(playerid, 549.0, 69.0, 60.0, 4.0, -1256645121, 100.0, BAR_DIRECTION_RIGHT);
- ShowPlayerProgressBar(playerid, ArmourBar[playerid]);
- ShowPlayerProgressBar(playerid, HealthBar[playerid]);
- return 1;
- }
- #if defined _ALS_OnPlayerConnect
- #undef OnPlayerConnect
- #else
- #define _ALS_OnPlayerConnect
- #endif
- #define OnPlayerConnect rf_Damage_OnPlayerConnect
- #if defined rf_Damage_OnPlayerConnect
- forward rf_Damage_OnPlayerConnect(playerid);
- #endif
- public OnPlayerSpawn(playerid)
- {
- #if defined rf_Damage_OnPlayerSpawn
- rf_Damage_OnPlayerSpawn(playerid);
- #endif
- SetPlayerArmourEx(playerid, 50.0);
- SetPlayerHealthEx(playerid, 50.0);
- return 1;
- }
- #if defined _ALS_OnPlayerSpawn
- #undef OnPlayerSpawn
- #else
- #define _ALS_OnPlayerSpawn
- #endif
- #define OnPlayerSpawn rf_Damage_OnPlayerSpawn
- #if defined rf_Damage_OnPlayerSpawn
- forward rf_Damage_OnPlayerSpawn(playerid);
- #endif
- public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
- {
- #if defined rf_Damage_OnPlayerTakeDamage
- rf_Damage_OnPlayerTakeDamage(playerid, issuerid, amount, weaponid, bodypart);
- #endif
- if(22 <= weaponid <= 34)
- {
- static
- Float:armour,
- Float:health,
- Float:p[3]
- ;
- armour = GetPlayerProgressBarValue(playerid, ArmourBar[playerid]);
- health = GetPlayerProgressBarValue(playerid, HealthBar[playerid]);
- GetPlayerPos(issuerid, p[0], p[1], p[2]);
- /*
- IF THE DISTANCE IS ABOVE '2^WeaponInfo[weaponid - 22][W_COEFFICIENT]'
- FOR EACH 'WeaponInfo[weaponid - 22][W_COEFFICIENT]/100'
- THE DAMAGED LOSES 'WeaponInfo[weaponid - 22][W_COEFFICIENT]' AMOUNT
- */
- static
- Float:newdamage
- ;
- //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));
- 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));
- if(newdamage < 1.0)
- newdamage = 1.0;
- new str[128];
- format(str, sizeof(str), "DEBUG: You took %f damage (weaponid = %d | bodypart = %d).", bodypart == 9 ? newdamage * 3 : (bodypart != 3 ? newdamage / 2 : newdamage), weaponid , bodypart);
- SendClientMessage(playerid, -1, str);
- switch(bodypart)
- {
- case 3: // TORSO
- {
- if(newdamage <= armour)
- SetPlayerArmourEx(playerid, armour - newdamage);
- else
- {
- SetPlayerArmourEx(playerid, 0.0);
- SetPlayerHealthEx(playerid, health - (newdamage - armour));
- }
- }
- case 9: // HEAD
- {
- PlayerPlaySound(playerid, 1140, 0.0, 0.0, 0.0);
- SetPlayerHealthEx(playerid, health - (newdamage * 3));
- }
- default:
- SetPlayerHealthEx(playerid, health - (newdamage / 2));
- }
- }
- else
- SetPlayerHealthEx(playerid, GetPlayerProgressBarValue(playerid, HealthBar[playerid]) - amount);
- return 1;
- }
- #if defined _ALS_OnPlayerTakeDamage
- #undef OnPlayerTakeDamage
- #else
- #define _ALS_OnPlayerTakeDamage
- #endif
- #define OnPlayerTakeDamage rf_Damage_OnPlayerTakeDamage
- #if defined rf_Damage_OnPlayerTakeDamage
- forward rf_Damage_OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart);
- #endif
- SetPlayerArmourEx(playerid, Float:armour)
- {
- SetPlayerProgressBarValue(playerid, ArmourBar[playerid], armour);
- return 1;
- }
- SetPlayerHealthEx(playerid, Float:health)
- {
- SetPlayerHealth(playerid, 65536);
- SetPlayerArmour(playerid, health);
- SetPlayerProgressBarValue(playerid, HealthBar[playerid], health);
- if(GetPlayerProgressBarValue(playerid, HealthBar[playerid]) <= 0.0)
- SetPlayerHealth(playerid, 0.0);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment