Code:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#include <fun>
new const TITLUVIP[] = " \y VIP's \yOnline";
new const IESIREVIP[] = "\yIesire, Apasa \r0 sau \r5^n";
new const NOADMINSVIP[] = "\y Nu sunt vip's online.";
#define is_user_vip(%1) (get_user_flags(%1) & ADMIN_LEVEL_H)
#define AMMOWP_NULL (1<<0 | 1<<CSW_KNIFE | 1<<CSW_FLASHBANG | 1<<CSW_HEGRENADE | 1<<CSW_SMOKEGRENADE | 1<<CSW_C4)
new const PLUGIN_NAME[] = "[RS] VIP System",
PLUGIN_VERSION[] = "1.0",
PLUGIN_AUTHOR[] = "YONTU";
// Hack to be able to use Ham_Player_ResetMaxSpeed (by joaquimandrade)
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame;
new g_JumpNum[33] = 0
new bool:g_bJump[33] = false, bool:set_refill = false;
enum { HEALTH = 0, ARMOR = 1, START_MONEY, MAX_JUMPS, SPEED, DAMAGE, HP_KILL, HP_HEADSHOT, MONEY_KILL };
new const vip_benefits[] =
{
180, // VIATA LA SPAWN
180, // ARMURA LA SPAWN
16000, // BANII LA START
3, // NUMARUL MAXIM DE SARITURI
440, // VITEZA MAXIMA
2, // 2 = x 2.0 dmg | 3 = x 3.0 dmg etc...
20, // VIATA PE KILL NORMAL
35, // VIATA PE HEADSHOT
600, // BANII PE KILL
}
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
register_cvar("level_mod_", PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER);
set_cvar_string("level_mod_", PLUGIN_VERSION);
register_clcmd("say /vreauvip", "ShowMotd");
register_clcmd ( "say /vips", "cmdWho");
register_clcmd ( "say_team /vips", "cmdWho");
register_event("DeathMsg", "event_DeathMsg", "a");
register_event("CurWeapon", "event_CurWeapons", "be", "1=1");
register_message(get_user_msgid("ScoreAttrib"),"msg_ScoreAttrib");
RegisterHam(Ham_TakeDamage, "player", "fw_PlayerTakeDamage");
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawnPost", 1);
RegisterHam(Ham_Player_ResetMaxSpeed, "player", "fw_ResetMaxSpeed_Post", 1);
}
public client_putinserver(id)
{
g_JumpNum[id] = 0;
g_bJump[id] = false;
if(is_user_vip(id))
{
new name[32];
get_user_name(id, name, charsmax(name));
ColorChat(id, "!4*!1 VIP-ul!3 %s!1 s-a conectat pe server.", name);
}
}
public client_PreThink(id)
{
if(!is_user_alive(id) || !is_user_vip(id))
return PLUGIN_CONTINUE;
new nbut = get_user_button(id);
new obut = get_user_oldbutton(id);
new jump_num = vip_benefits[MAX_JUMPS];
if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
{
if(g_JumpNum[id] < jump_num)
{
g_bJump[id] = true;
g_JumpNum[id]++;
return PLUGIN_CONTINUE;
}
}
if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
{
g_JumpNum[id] = 0;
return PLUGIN_CONTINUE;
}
return PLUGIN_CONTINUE;
}
public client_PostThink(id)
{
if(!is_user_alive(id) || !is_user_vip(id))
return PLUGIN_CONTINUE;
if(g_bJump[id])
{
new Float:fVelocity[3];
entity_get_vector(id, EV_VEC_velocity, fVelocity);
fVelocity[2] = random_float(265.0, 285.0);
entity_set_vector(id, EV_VEC_velocity, fVelocity);
g_bJump[id] = false;
return PLUGIN_CONTINUE;
}
return PLUGIN_CONTINUE;
}
public ShowMotd(id)
{
new cfg_dir[32];
get_configsdir(cfg_dir, charsmax(cfg_dir));
new file[192];
formatex(file, charsmax(file), "%s/vip.html", cfg_dir);
show_motd(id, file);
}
public event_DeathMsg()
{
new attacker = read_data(1);
new victim = read_data(2);
new headshot = read_data(3);
new hitself = (attacker == victim) ? 1 : 0;
if(is_user_alive(attacker) && is_user_vip(attacker))
{
if(hitself)
return PLUGIN_HANDLED;
if(headshot)
set_user_health(attacker, get_user_health(attacker) + vip_benefits[HP_HEADSHOT]);
else set_user_health(attacker, get_user_health(attacker) + vip_benefits[HP_KILL]);
cs_set_user_money(attacker, clamp(get_user_health(attacker) + vip_benefits[MONEY_KILL], 0, 16000));
set_refill = true;
}
return PLUGIN_HANDLED;
}
public event_CurWeapons(id)
{
if(!is_user_alive(id))
return PLUGIN_HANDLED;
if(is_user_vip(id) && set_refill)
{
static weapon;
weapon = read_data(2);
if(AMMOWP_NULL & (1<<weapon))
return PLUGIN_CONTINUE;
cs_set_user_bpammo(id, weapon, 30);
set_refill = false;
}
return PLUGIN_HANDLED;
}
public msg_ScoreAttrib(iMsgID, iDest, iReceiver)
{
new id = get_msg_arg_int(1);
if(is_user_connected(id) && is_user_vip(id))
set_msg_arg_int(2, ARG_BYTE, is_user_alive(id) ? (1<<2) : (1<<0));
}
public fw_PlayerTakeDamage(victim, inflictor, attacker, Float:fDamage, iDamageType)
{
if(iDamageType & DMG_GENERIC || victim == attacker || !is_user_alive(victim))
return HAM_IGNORED;
if(is_user_vip(attacker) && is_user_alive(attacker))
{
fDamage *= float(vip_benefits[DAMAGE]);
SetHamParamFloat(4, fDamage);
return HAM_HANDLED;
}
return HAM_IGNORED;
}
public fw_ResetMaxSpeed_Post(id)
{
if(!is_user_alive(id))
return HAM_HANDLED;
if(is_user_vip(id))
{
new Float:fMaxSpeed = float(vip_benefits[SPEED]);
set_user_maxspeed(id, fMaxSpeed);
new command[128];
formatex(command, charsmax(command), "cl_forwardspeed %.1f;cl_sidespeed %.1f;cl_backspeed %.1f", fMaxSpeed, fMaxSpeed, fMaxSpeed);
client_cmd(id, command);
}
return HAM_IGNORED;
}
public fw_PlayerSpawnPost(id)
{
if(!is_user_alive(id))
return HAM_IGNORED;
if(is_user_vip(id))
{
set_user_health(id, vip_benefits[HEALTH]);
set_user_armor(id, vip_benefits[ARMOR]);
cs_set_user_money(id, clamp(vip_benefits[START_MONEY], 0, 16000));
}
return HAM_IGNORED;
}
stock ColorChat(id, String[], any:...)
{
static szMesage[192];
vformat(szMesage, charsmax(szMesage), String, 3);
replace_all(szMesage, charsmax(szMesage), "!1", "^1");
replace_all(szMesage, charsmax(szMesage), "!3", "^3");
replace_all(szMesage, charsmax(szMesage), "!4", "^4");
static g_msg_SayText = 0;
if(!g_msg_SayText)
g_msg_SayText = get_user_msgid("SayText");
new Players[32], iNum = 1, i;
if(id) Players[0] = id;
else get_players(Players, iNum, "ch");
for(--iNum; iNum >= 0; iNum--)
{
i = Players[iNum];
message_begin(MSG_ONE_UNRELIABLE, g_msg_SayText, _, i);
write_byte(i);
write_string(szMesage);
message_end();
}
}
public cmdWho( id, page ) {
new MenuName[ 64 ], MenuExitKey[ 32 ];
formatex( MenuName, sizeof ( MenuName ) -1, "%s", TITLUVIP );
formatex( MenuExitKey, sizeof ( MenuExitKey ) -1, "%s", IESIREVIP );
new menu = menu_create(MenuName, "InchidereMeniu");
if( AdminiON( ) )
{
AdaugareA( id, menu, 1 );
}
else
{
menu_additem( menu, NOADMINSVIP , "1", 0 );
}
menu_setprop(menu, MPROP_EXITNAME, MenuExitKey );
menu_display(id, menu, page);
}
public InchidereMeniu(id, menu, item) {
if(item == MENU_EXIT)
{
menu_destroy( menu );
return 1;
}
new data[6], iName[64];
new iaccess, callback;
menu_item_getinfo(menu, item, iaccess, data,5, iName, 63, callback);
new key = str_to_num(data);
switch(key)
{
case 1,2,3,4,5,6,7:
{
menu_destroy( menu );
return 1;
}
}
return 0;
}
public AdaugareA( const id, const menu, const group ) {
new AdminMenuMessage[ 32 ][ 64 ],AdminMenuKey[ 32 ][ 32 ], MenuKey = 1;
static Players[ 32 ], Num, Player;
get_players( Players, Num, "ch" );
for( new x = 0 ; x < Num ; x++ )
{
Player = Players[ x ];
if( is_user_vip(Player) )
{
formatex( AdminMenuMessage[ MenuKey ], sizeof ( AdminMenuMessage[ ] ) -1, "\y[*] \w%s", gNameVIP( Player ));
formatex( AdminMenuKey[ MenuKey ], sizeof ( AdminMenuKey[ ] ) -1, "%d", MenuKey );
MenuKey++;
}
}
for( new z = 1 ; z < MenuKey ; z++ )
{
menu_additem( menu, AdminMenuMessage[ z ], AdminMenuKey[ z ], 0 );
}
}
stock bool:AdminiON( ) {
new bool:AGasiti = false;
static Players[ 32 ], Num, Player;
get_players( Players, Num, "ch" );
for( new x = 0 ; x < Num ; x++ )
{
Player = Players[ x ];
if( AGasiti ) break;
if( is_user_vip(Player) )
{
AGasiti = true;
}
}
return AGasiti ? true : false;
}
stock gNameVIP( id ) {
new name[ 32 ];
get_user_name( id, name, sizeof ( name ) -1 );
return name;
}