Code:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#include <fun>
#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_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();
}
}