Kod: Tümünü seç
/* Bu plugin Optimist Tarafindan Yazilmistir */
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
new const Version[] = "0.1";
#define DMG_GRENADE (1<<24)
const MaxPlayers = 32;
enum BonusType
{
Damage,
Death
}
enum WeaponType
{
Bullet,
Knife,
Grenade
}
enum RGB
{
Red,
Green,
Blue
}
enum _:BonusInfo
{
Attacker,
Victim,
DmgBits,
BonusType:btBonus
}
new const g_RGB[ WeaponType ][ BonusType ][ RGB ] =
{
{ { 0 , 255 , 0 } , { 0 , 255 , 0 } } , // [ [Bullet Damage] , [Bullet Death] ]
{ { 128 , 128 , 0 } , { 128 , 128 , 0 } } , // [ [Knife Damage] , [Knife Death] ] ]
{ { 255 , 0 , 0 } , { 255 , 0 , 0 } } // [ [Grenade Damage] , [Grenade Death] ]
}
const m_bitsDamageType = 76
const Float:g_fHUDTime = 3.0;
const Float:g_fHUD_X_Coord = 0.10;
new const Float:g_fHUD_Y_Coords[] =
{
0.85,
0.80,
0.75,
0.70,
0.65,
0.60,
0.55,
0.50,
};
new g_pMaxHealth;
new g_pCVars[ WeaponType ][ BonusType ];
new g_iKiller[ MaxPlayers + 1 ];
new g_iLastDamage[ MaxPlayers + 1 ];
new g_BotBits;
new g_iMaxPlayers;
#define IsBot(%1) (g_BotBits & (1<<(%1&31)))
#define IsPlayer(%1) (1<=%1<=g_iMaxPlayers)
public plugin_init()
{
register_plugin( "HP Bonus", Version , "Optimist / LockdowN" );
register_logevent( "fw_RoundStart" , 2 , "1=Round_Start" );
RegisterHam( Ham_TakeDamage , "player" , "fw_HamTakeDamage" );
RegisterHam( Ham_Killed , "player" , "fw_HamKilled_Post" , 1 );
g_pMaxHealth = register_cvar( "hpb_maxhealth" , "100" );
g_pCVars[ Bullet ][ Damage ] = register_cvar( "hpb_bulletdmg" , "1" );
g_pCVars[ Bullet ][ Death ] = register_cvar( "hpb_bulletkill" , "2" );
g_pCVars[ Knife ][ Damage ] = register_cvar( "hpb_knifedmg" , "2" );
g_pCVars[ Knife ][ Death ] = register_cvar( "hpb_knifekill" , "4" );
g_pCVars[ Grenade ][ Damage ] = register_cvar( "hpb_grenadedmg" , "3" );
g_pCVars[ Grenade ][ Death ] = register_cvar( "hpb_grenadekill" , "6" );
g_iMaxPlayers = get_maxplayers();
}
public client_putinserver( id )
{
if ( is_user_bot( id ) )
g_BotBits |= ( 1 << ( id & 31 ) );
}
public client_disconnected( id )
{
g_BotBits &= ~( 1 << ( id & 31 ) );
}
public fw_RoundStart()
{
arrayset( g_iKiller , 0 , sizeof( g_iKiller ) );
arrayset( g_iLastDamage , 0 , sizeof( g_iLastDamage ) );
}
public GiveBonus( iData[ BonusInfo ] )
{
static iPlayer , iVictim , DamageBits , BonusType:btType , WeaponType:wtWeapon;
static iHUDPos[ MaxPlayers + 1 ] , iHealth , iMaxHealth , iHealthBonus
iPlayer = iData[ Attacker ];
iVictim = iData[ Victim ];
DamageBits = iData[ DmgBits ];
btType = iData[ btBonus ];
if ( !is_user_alive( iPlayer ) || ( ( btType == Damage ) && ( g_iKiller[ iVictim ] == iPlayer ) ) )
return;
if ( DamageBits & DMG_BULLET )
wtWeapon = ( get_user_weapon( iPlayer ) == CSW_KNIFE ) ? Knife : Bullet;
else if ( DamageBits & DMG_GRENADE )
wtWeapon = Grenade;
iHealth = get_user_health( iPlayer );
iMaxHealth = get_pcvar_num( g_pMaxHealth );
iHealthBonus = get_pcvar_num( g_pCVars[ wtWeapon ][ btType ] );
if ( iHealth < iMaxHealth )
{
if ( ( float( get_systime() - g_iLastDamage[ iPlayer ] ) >= g_fHUDTime ) || ( iHUDPos[ iPlayer ] == sizeof( g_fHUD_Y_Coords ) ) )
iHUDPos[ iPlayer ] = 0;
set_user_health( iPlayer , clamp( iHealth + iHealthBonus , 1 , iMaxHealth ) );
set_hudmessage( g_RGB[ wtWeapon ][ btType ][ Red ] , g_RGB[ wtWeapon ][ btType ][ Green ] , g_RGB[ wtWeapon ][ btType ][ Blue ] , g_fHUD_X_Coord , g_fHUD_Y_Coords[ iHUDPos[ iPlayer ]++ ] , 0 , 0.1 , g_fHUDTime , _, _, -1 );
show_hudmessage( iPlayer , "+%dhp" , iHealthBonus );
}
g_iLastDamage[ iPlayer ] = get_systime();
}
public fw_HamTakeDamage( iVictim , iInflictor , iAttacker , Float:fDamage , DamageBits )
{
if( IsPlayer( iAttacker ) && !IsBot( iAttacker ) && ( iVictim != iAttacker ) && ( cs_get_user_team( iVictim ) != cs_get_user_team( iAttacker ) ) )
{
static iInfo[ BonusInfo ];
iInfo[ Attacker ] = iAttacker;
iInfo[ Victim ] = iVictim;
iInfo[ DmgBits ] = DamageBits;
iInfo[ btBonus ] = _:Damage;
set_task( 0.15 , "GiveBonus" , _, iInfo , sizeof( iInfo ) );
}
}
public fw_HamKilled_Post( iVictim , iAttacker )
{
if( IsPlayer( iAttacker ) && !IsBot( iAttacker ) && ( iVictim != iAttacker ) && ( cs_get_user_team( iVictim ) != cs_get_user_team( iAttacker ) ) )
{
static iInfo[ BonusInfo ];
iInfo[ Attacker ] = iAttacker;
iInfo[ Victim ] = iVictim;
iInfo[ DmgBits ] = get_pdata_int( iVictim , m_bitsDamageType );
iInfo[ btBonus ] = _:Death;
g_iKiller[ iVictim ] = iAttacker;
set_task( 0.15 , "GiveBonus" , _, iInfo , sizeof( iInfo ) );
}
}