#include < amxmodx >
#include < amxmisc >
#include < hamsandwich >
#include < cstrike >
#include < fakemeta >
#include < fun >
#include < ColorChat >
#define is_user_player(%1) ( 1 <= %1 <= g_iMaxPlayers )
// CS Player PData Offsets (win32)
#define OFFSET_LINUX_WEAPONS 4
#define OFFSET_CLIPAMMO 51
#define OFFSET_ACTIVE_ITEM 373
new const PLUGIN_VERSION[ ] = "1.0.4",
PLUGIN_AUTHOR[ ] = "YONTU";
new const PLUGIN_NAME[ ] = "VIP System";
new const g_szVipFlags[ ] = "t"; // flagul vip-ului( ADMIN_LEVEL_H )
enum {
SCOREATTRIB_ARG_PLAYERID = 1,
SCOREATTRIB_ARG_FLAGS
};
enum ( <<= 1 ) {
SCOREATTRIB_FLAG_NONE = 0,
SCOREATTRIB_FLAG_DEAD = 1,
SCOREATTRIB_FLAG_BOMB,
SCOREATTRIB_FLAG_VIP
};
enum _:WhatUserHas {
Speed,
Jump,
}
new bool:g_bUserHas[ 33 ][ WhatUserHas ];
new const g_iMaxClips[ ] = {
0,
13,
0,
10,
0,
7,
0,
30,
30,
0,
15,
20,
25,
30,
35,
25,
12,
20,
10,
30,
100,
8,
30,
30,
20,
0,
7,
30,
30,
0,
50
};
const NULL_WPN_BS = ( ( 1<<2 ) | ( 1<<CSW_HEGRENADE ) | ( 1<<CSW_SMOKEGRENADE ) | ( 1<<CSW_FLASHBANG ) | ( 1<<CSW_KNIFE ) | ( 1<<CSW_C4 ) );
new g_cvar_speed_spawn,
g_cvar_health_spawn,
g_cvar_armor_spawn,
g_cvar_multidmg,
g_cvar_health_kill_reward,
g_cvar_health_hs_reward,
g_cvar_maxhealth,
g_cvar_kill_money_reward,
g_cvar_enable_show_dmg,
g_cvar_ebable_vip_scoreboard,
g_cvar_enable_vip_noflash,
g_cvar_enable_vip_multijump,
g_cvar_enable_vip_unclip;
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame;
new iJumpNum[ 33 ] = 0;
new g_iMultiJumps[ 33 ] = 0;
new g_iMaxJumps = 0;
new g_iMaxPlayers;
new SyncHudMessage;
public plugin_init( ) {
register_plugin( PLUGIN_NAME,
PLUGIN_VERSION,
PLUGIN_AUTHOR );
register_clcmd( "say /vips", "ShowVipsOnline" );
register_clcmd( "say_team /vips", "ShowVipsOnline" );
register_clcmd( "say /vip", "ShowAbilityForVip" );
register_clcmd( "say_team /vip", "ShowAbilityForVip" );
register_event( "CurWeapon", "event_CurWeapon", "be", "1=1" );
register_event( "DeathMsg", "event_DeathMsg", "a" );
register_event( "DeathMsg", "event_DeathMsg2", "ae" );
register_event( "Damage", "event_Damage", "b", "2!0", "3=0", "4!0" );
register_logevent( "logevent_RoundEnd", 2, "1=Round_End" );
register_forward( FM_PlayerPreThink, "forward_PlayerPreThink" );
register_forward( FM_PlayerPostThink, "forward_PlayerPostThink" );
RegisterHam( Ham_Spawn, "player", "Ham_PlayerSpawnPost", 1 );
RegisterHam( Ham_TakeDamage, "player", "Ham_TakeDamagePre" );
RegisterHam( Ham_Player_ResetMaxSpeed, "player", "Ham_ResetMaxSpeedPost", 1 );
register_message( get_user_msgid( "ScoreAttrib" ), "MessageScoreAttrib" );
register_message( get_user_msgid( "ScreenFade" ), "MessageScreenFade" );
g_cvar_speed_spawn = register_cvar( "vip_speed_spawn", "400.0" ); // viteza pe care o primeste vip-ul la spawn( sa fie cu zecimala.0 )
g_cvar_health_spawn = register_cvar( "vip_health_spawn", "200" ); // viata pe care o primeste vip-ul la spawn
g_cvar_armor_spawn = register_cvar( "vip_armor_spawn", "150" ); // armura pe care o primeste vip-ul la spawn
g_cvar_multidmg = register_cvar( "vip_multi_dmg", "2.0" ); // vip-ul are dmg mai mare la toate armele
g_cvar_health_kill_reward = register_cvar( "vip_hp_kill_reward", "15" ); // cata viata sa primeasca vip-ul cand face un kill
g_cvar_health_hs_reward = register_cvar( "vip_hp_hs_reward", "25" ); // cata viata sa primeasca vip-ul cand face un headshot
g_cvar_maxhealth = register_cvar( "vip_maxhealth", "300" ); // viata maxima a vip-ului
g_cvar_kill_money_reward = register_cvar( "vip_kill_money", "1000" ); // Cati bani sa primeasca Vip-ul pe un frag
g_cvar_enable_show_dmg = register_cvar( "vip_show_dmg", "1" ); // afiseaza vip-ului dmg-ul facut de victima si dmg-ul pe care i la facut victimei
g_cvar_ebable_vip_scoreboard = register_cvar( "vip_on_scoreboard", "1" ); // 1 - vip-ii apar in scoreboard ca "VIP" | 0 - dezactivat
g_cvar_enable_vip_noflash = register_cvar( "vip_imune_flashbang", "1" ); // 1 - Vip-ul este imun la flash-uri | 0 - Nu este
g_cvar_enable_vip_multijump = register_cvar( "vip_enable_multijump", "1" ); // 1 - Vip-ul beneficiaza de multi jump | 0 - Nu beneficiaza
g_cvar_enable_vip_unclip = register_cvar( "vip_enable_unclip", "1" ); // 1 - Vip-ul beneficiaza de gloante infinite | 0 - Nu beneficiaza
g_iMaxPlayers = get_maxplayers( );
SyncHudMessage = CreateHudSyncObj( );
}
public plugin_cfg( )
set_cvar_float( "sv_maxspeed", 1000.0 );
public client_putinserver( id ) {
g_iMultiJumps[ id ] = 0;
iJumpNum[ id ] = 0;
g_bUserHas[ id ][ Jump ] = false;
g_bUserHas[ id ][ Speed ] = false;
}
public client_disconnect( id ) {
g_iMultiJumps[ id ] = 0;
iJumpNum[ id ] = 0;
g_bUserHas[ id ][ Jump ] = false;
g_bUserHas[ id ][ Speed ] = false;
}
public event_CurWeapon( id ) {
if( !is_user_alive( id ) || is_user_bot( id ) )
return 1;
if( get_pcvar_num( g_cvar_enable_vip_unclip ) )
return 1;
if( is_user_vip( id ) ) {
new iWeapon = read_data( 2 );
if( !( NULL_WPN_BS & ( 1 << iWeapon ) ) )
set_pdata_int( get_pdata_cbase( id, OFFSET_ACTIVE_ITEM ), OFFSET_CLIPAMMO, g_iMaxClips[ iWeapon ], OFFSET_LINUX_WEAPONS );
}
return 0;
}
public event_DeathMsg( ) {
new iAttacker = read_data( 1 );
new iVictim = read_data( 2 );
new iHeadshot = read_data( 3 );
new HealthOnHeadShot = get_pcvar_num( g_cvar_health_hs_reward );
new MaxHealth = get_pcvar_num( g_cvar_maxhealth );
new HealthOnKill = get_pcvar_num( g_cvar_health_kill_reward );
if( iAttacker == iVictim )
return 0;
if( is_user_vip( iAttacker ) && iAttacker != iVictim ) {
if( get_user_health( iAttacker ) <= MaxHealth ) {
if( iHeadshot ) {
set_user_health( iAttacker, get_user_health( iAttacker ) + HealthOnHeadShot );
} else {
set_user_health( iAttacker, get_user_health( iAttacker ) + HealthOnKill );
}
}
}
return 0;
}
public event_DeathMsg2( ) {
new iAttacker = read_data( 1 );
new iVictim = read_data( 2 );
new BonusMoney = get_pcvar_num( g_cvar_kill_money_reward );
if( iAttacker == iVictim )
return 0;
if( is_user_vip( iAttacker ) )
if( iAttacker && is_user_alive( iAttacker ) )
if( cs_get_user_team( iVictim ) == CS_TEAM_T || cs_get_user_team( iVictim ) == CS_TEAM_CT )
if( cs_get_user_money( iAttacker ) < 16000 - BonusMoney - 300 )
cs_set_user_money( iAttacker, cs_get_user_money( iAttacker ) + BonusMoney - 300 );
return 0;
}
public event_Damage( id ) {
if( get_pcvar_num( g_cvar_enable_show_dmg ) > 0 ) {
static iAttacker;
static fDamage;
iAttacker = get_user_attacker( id );
fDamage = read_data( 2 );
if( is_user_alive( id ) && is_user_vip( id ) ) {
set_hudmessage( 255, 0, 0, 0.45, 0.50, 2, 0.1, 1.0, 0.1, 0.1, -1 );
ShowSyncHudMsg( id, SyncHudMessage, "%i^n", fDamage );
}
if( is_user_alive( iAttacker ) && is_user_vip( iAttacker ) ) {
set_hudmessage( 0, 255, 15, -1.0, 0.55, 2, 0.1, 1.0, 0.02, 0.02, -1 );
ShowSyncHudMsg( iAttacker, SyncHudMessage, "%i^n^n", fDamage );
}
}
}
public logevent_RoundEnd( ) {
new szPlayers[ 32 ], iNum;
get_players( szPlayers, iNum, "ch" );
for( new i = 0; i < iNum; i++) {
g_bUserHas[ szPlayers[ i ] ][ Speed ] = false;
g_bUserHas[ szPlayers[ i ] ][ Jump ] = false;
g_iMultiJumps[ szPlayers[ i ] ] = 0;
iJumpNum[ szPlayers[ i ] ] = 0;
}
}
public forward_PlayerPreThink( id ) {
if( !is_user_alive( id ) || !g_iMultiJumps[ id ] )
return 0;
if( ( pev( id, pev_button ) & IN_JUMP ) && !( pev( id, pev_flags ) & FL_ONGROUND ) && !( pev( id, pev_oldbuttons ) & IN_JUMP ) ) {
if( iJumpNum[ id ] < g_iMultiJumps[ id ] ) {
g_bUserHas[ id ][ Jump ] = true;
iJumpNum[ id ]++;
return 0;
}
}
if( ( pev( id, pev_button ) & IN_JUMP ) && ( pev( id, pev_flags ) & FL_ONGROUND ) ) {
iJumpNum[ id ] = 0;
return 0;
}
return 0;
}
public forward_PlayerPostThink( id ) {
if( !is_user_alive( id ) || !g_iMultiJumps[ id ] )
return 0;
if( g_bUserHas[ id ][ Jump ] ) {
new Float:fVelocity[ 3 ];
pev( id, pev_velocity, fVelocity );
fVelocity[ 2 ] = random_float( 265.0, 285.0 );
set_pev( id, pev_velocity, fVelocity );
g_bUserHas[ id ][ Jump ] = false;
return 0;
}
return 0;
}
public Ham_PlayerSpawnPost( id ) {
if( !is_user_alive( id ) && !is_user_vip( id ) )
return HAM_IGNORED;
if( is_user_vip( id ) && !is_user_bot( id ) )
set_task( 1.0, "task_GiveSkillsAllVips", id );
return HAM_IGNORED;
}
public task_GiveSkillsAllVips( id ) {
g_bUserHas[ id ][ Speed ] = true;
fm_set_user_maxspeed( id, get_pcvar_float( g_cvar_speed_spawn ) );
new szCommand[ 128 ];
formatex( szCommand, sizeof( szCommand ) - 1, "cl_forwardspeed %.1f;cl_sidespeed %.1f;cl_backspeed %.1f", get_pcvar_float( g_cvar_speed_spawn ), get_pcvar_float( g_cvar_speed_spawn ), get_pcvar_float( g_cvar_speed_spawn ) );
client_cmd( id, szCommand );
if( get_pcvar_num( g_cvar_enable_vip_multijump ) > 0 )
if( g_iMultiJumps[ id ] < g_iMaxJumps || !g_iMaxJumps )
g_iMultiJumps[ id ]++;
set_user_health( id, get_pcvar_num( g_cvar_health_spawn ) );
set_user_armor( id, get_pcvar_num( g_cvar_armor_spawn ) );
}
public ShowVipsOnline( user ) {
new szVipNames[ 33 ][ 32 ];
new szMessage[ 256 ];
new iCount, iLen;
for( new id = 1 ; id <= g_iMaxPlayers ; id++ ) {
if( is_user_connected( id ) && is_user_vip( id ) ) {
get_user_name( id, szVipNames[ iCount++ ], 31 );
}
}
iLen = format( szMessage, 255, "^x04[Respawn]^x01 VIP's Online: " );
if( iCount > 0 ) {
for( new i = 0 ; i < iCount ; i++ ) {
iLen += format( szMessage[ iLen ], 255 - iLen, "^x03%s^x01, ", szVipNames[ i ] );
if( iLen > 96 ) {
ColorChat( user, GREEN, szMessage );
}
}
ColorChat( user, GREEN, szMessage );
} else {
iLen += format( szMessage[ iLen ], 255 - iLen, "^x03Nu sunt VIP-i online." );
ColorChat( user, GREEN, szMessage );
}
}
public ShowAbilityForVip( id ) {
new iCfgDir[ 32 ], iFile[ 192 ];
get_configsdir( iCfgDir, charsmax( iCfgDir ) );
formatex( iFile, charsmax( iFile ), "%s/vip.html", iCfgDir );
show_motd( id, iFile );
}
public Ham_ResetMaxSpeedPost( id ) {
if( is_user_alive( id ) && is_user_vip( id ) && get_user_maxspeed( id ) != 1.0 ) {
new Float:flMaxSpeed;
if( g_bUserHas[ id ][ Speed ] )
flMaxSpeed = float( get_pcvar_num( g_cvar_speed_spawn ) );
if( flMaxSpeed > 0.0 )
set_pev( id, pev_maxspeed, flMaxSpeed );
}
}
public Ham_TakeDamagePre( iVictim, iInflictor, iAttacker, Float:fDamage ) {
if( iVictim == iAttacker || !is_user_player( iAttacker ) || !is_user_alive( iAttacker ) || is_user_bot( iAttacker ) )
return HAM_HANDLED;
if( is_user_vip( iAttacker ) && is_user_player( iAttacker ) )
SetHamParamFloat( 4, fDamage * get_pcvar_float( g_cvar_multidmg ) );
return HAM_IGNORED;
}
public MessageScoreAttrib( iMsgId, iMsgDest, id ) {
if( get_pcvar_num( g_cvar_ebable_vip_scoreboard ) > 0 ) {
new iPlayer = get_msg_arg_int( SCOREATTRIB_ARG_PLAYERID );
if( access( iPlayer, read_flags( g_szVipFlags ) ) )
set_msg_arg_int( SCOREATTRIB_ARG_FLAGS, ARG_BYTE, SCOREATTRIB_FLAG_VIP );
}
}
public MessageScreenFade( iMsgId, iMsgDest, id ) {
if( is_user_vip( id ) && is_user_alive( id ) && get_pcvar_num( g_cvar_enable_vip_noflash ) ) {
static szData[ 4 ];
szData[ 0 ] = get_msg_arg_int( 4 );
szData[ 1 ] = get_msg_arg_int( 5 );
szData[ 2 ] = get_msg_arg_int( 6 );
szData[ 3 ] = get_msg_arg_int( 7 );
if( szData[ 0 ] == 255 && szData[ 1 ] == 255 && szData[ 2 ] == 255 && szData[ 3] > 199 )
return 1;
}
return 0;
}
stock bool:is_user_vip( id ) {
if( get_user_flags( id ) & read_flags( g_szVipFlags ) )
return true;
return false;
}
stock fm_set_user_maxspeed( index, Float:speed = -1.0 ) {
engfunc( EngFunc_SetClientMaxspeed, index, speed );
set_pev( index, pev_maxspeed, speed );
return 1;
}
stock Float:fm_get_user_maxspeed( index ) {
new Float:speed;
pev( index, pev_maxspeed, speed );
return speed;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/