Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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 OnGameModeInit()
- {
- #if defined rf_Damage_OnGameModeInit
- rf_Damage_OnGameModeInit();
- #endif
- ShowNameTags(0);
- return 1;
- }
- #if defined _ALS_OnGameModeInit
- #undef OnGameModeInit
- #else
- #define _ALS_OnGameModeInit
- #endif
- #define OnGameModeInit rf_Damage_OnGameModeInit
- #if defined rf_Damage_OnGameModeInit
- forward rf_Damage_OnGameModeInit();
- #endif
- 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]);
- rf_Damage_SetPlayerArmourEx(playerid, 0.0);
- rf_Damage_SetPlayerHealthEx(playerid, 50.0);
- 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 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]
- ;
- rf_Damage_GetPlayerArmourEx(playerid, armour);
- rf_Damage_GetPlayerHealthEx(playerid, health);
- GetPlayerPos(issuerid, p[0], p[1], p[2]);
- 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;
- switch(bodypart)
- {
- case 3: // TORSO
- {
- if(newdamage <= armour)
- rf_Damage_SetPlayerArmourEx(playerid, armour - newdamage);
- else
- {
- rf_Damage_SetPlayerArmourEx(playerid, 0.0);
- rf_Damage_SetPlayerHealthEx(playerid, health - (newdamage - armour));
- }
- }
- case 9: // HEAD
- {
- PlayerPlaySound(playerid, 1140, 0.0, 0.0, 0.0);
- rf_Damage_SetPlayerHealthEx(playerid, health - (newdamage * 3));
- SetPlayerDrunkLevel(playerid, GetPlayerDrunkLevel(playerid) + (floatround(newdamage, floatround_ceil) * 1000));
- }
- default:
- rf_Damage_SetPlayerHealthEx(playerid, health - (newdamage / 2));
- }
- }
- else
- rf_Damage_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
- rf_Damage_GetPlayerArmourEx(playerid, &Float:armour)
- {
- armour = GetPlayerProgressBarValue(playerid, ArmourBar[playerid]);
- return 1;
- }
- #if defined _ALS_GetPlayerArmourEx
- #undef GetPlayerArmourEx
- #else
- #define _ALS_GetPlayerArmourEx
- #endif
- #define GetPlayerArmourEx rf_Damage_GetPlayerArmourEx
- rf_Damage_GetPlayerHealthEx(playerid, &Float:health)
- {
- health = GetPlayerProgressBarValue(playerid, HealthBar[playerid]);
- return 1;
- }
- #if defined _ALS_GetPlayerHealthEx
- #undef GetPlayerHealthEx
- #else
- #define _ALS_GetPlayerHealthEx
- #endif
- #define GetPlayerHealthEx rf_Damage_GetPlayerHealthEx
- rf_Damage_SetPlayerArmourEx(playerid, Float:armour)
- return SetPlayerProgressBarValue(playerid, ArmourBar[playerid], armour);
- #if defined _ALS_SetPlayerArmourEx
- #undef SetPlayerArmourEx
- #else
- #define _ALS_SetPlayerArmourEx
- #endif
- #define SetPlayerArmourEx rf_Damage_SetPlayerArmourEx
- rf_Damage_SetPlayerHealthEx(playerid, Float:health)
- {
- SetPlayerHealth(playerid, 16384);
- SetPlayerArmour(playerid, health);
- SetPlayerProgressBarValue(playerid, HealthBar[playerid], health);
- if(GetPlayerProgressBarValue(playerid, HealthBar[playerid]) <= 0.0)
- SetPlayerHealth(playerid, 0.0);
- return 1;
- }
- #if defined _ALS_SetPlayerHealthEx
- #undef SetPlayerHealthEx
- #else
- #define _ALS_SetPlayerHealthEx
- #endif
- #define SetPlayerHealthEx rf_Damage_SetPlayerHealthEx
Advertisement
Add Comment
Please, Sign In to add comment