rendered paste body#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <colorchat>
#include <nvault>
#define NO_BULLET_WEAPONS_BITSUM ((1<<CSW_C4)|(1<<CSW_KNIFE)|(1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG))
#define MAX_VIP 20
#define TAG "**"
#define IsVip(%1) ( HasVip[id] )
new msgidHostagePos, msgidHostageK;
new maxPlayers;
new const gVaultName[ ] = "VipMsg_Vault"
new const Prefix[] = "[VIP]";
static const COLOR[] = "^x04" //green
static const CONTACT[] = "www.my-csclub.forums.cl"
new szName[33], szPlayerName[33]
new maxplayers
new gmsgSayText
new mkb, mhb
new bool:HasVip[33]
new vip_db[128]
new vip_id[MAX_VIP +1][33]
new pVipOnly
new gSayText
new gVault
new gAuth[ 33 ][ 20 ]
new gMessage[ 33 ][ 64 ]
new pammo
public plugin_init()
{
register_plugin("VIP PLUGIN", "2.02", "Cyclone")
//For Vip Basic
mkb = register_cvar("vip_money_kill_bonus","150")
mhb = register_cvar("vip_money_hs_bonus","300")
//Damage Taken
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
register_event("DeathMsg","death_msg","a")
register_event("CurWeapon", "event_curweapon", "be", "1=1")
register_event("ResetHUD", "resetModel", "b")
register_message(get_user_msgid("ScoreAttrib"), "msgScoreAttrib")
pVipOnly = register_cvar( "vm_viponly", "1" )
gSayText = get_user_msgid( "SayText" )
register_message ( get_user_msgid ( "SayText" ), "handleSayText" );
gVault = nvault_open( gVaultName )
if( gVault == INVALID_HANDLE )
set_fail_state( "Error opening vault" )
register_clcmd( "say", "Say" )
msgidHostagePos = get_user_msgid("HostagePos");
msgidHostageK = get_user_msgid("HostageK");
maxPlayers = get_maxplayers();
set_task(1.0, "UpdateRadar", _, _, _, "b");
register_clcmd("vipmenu","CmdMainMenu")
register_clcmd("say /getvip","ShowMotd")
register_clcmd("say /vips","print_adminlist")
register_cvar("amx_contactinfo", CONTACT, FCVAR_SERVER)
maxplayers = get_maxplayers()
gmsgSayText = get_user_msgid("SayText")
new file[64]
get_configsdir(file, sizeof (file))
formatex(vip_db,sizeof (vip_db), "%s/vip.ini", file)
new data[128], authvip[32]
new i = 0
new file_pointer = fopen(vip_db, "rt")
while( !feof(file_pointer) )
{
fgets(file_pointer, data, sizeof(data) - 1)
trim(data)
if( !data[0] || data[0] == ';' || data[0] == '/' && data[1] == '/' ) continue;
parse(data, authvip, charsmax(authvip),"", 0)
vip_id[i]= authvip
i++
}
fclose(file_pointer)
}
/* CLIENT CHECK */
public client_putinserver(id)
{
new authid[32]
get_user_authid(id,authid,31)
for( new i = 0; i<MAX_VIP + 1; i++)
{
if(equali(vip_id[i],authid)) HasVip[id] = true
}
if ( HasVip[id])
{
set_user_flags(id, ADMIN_RESERVATION | ADMIN_CHAT );
get_user_authid( id, gAuth[ id ], 19 )
nvault_get( gVault, gAuth[ id ], gMessage[ id ], 63 )
}
}
public client_disconnect(id)
{
HasVip[id] = false
if( gMessage[ id ][ 0 ] )
{
new Name[ 32 ]
get_user_name( id, Name, 31 )
nvault_set( gVault, gAuth[ id ], gMessage[ id ] )
gMessage[ id ] = ""
}
}
/*PLUGIN STUFF*/
public msgScoreAttrib(const MsgId, const MsgType, const MsgDest)
{
new id = get_msg_arg_int(1)
if(HasVip[id] && !get_msg_arg_int(2) )
{
set_msg_arg_int(2, ARG_BYTE, (1<<2));
}
}
public plugin_precache() {
precache_model("models/player/nano/nano.mdl")
precache_model("models/player/terminator/terminator.mdl")
}
public death_msg()
{
new killer = read_data(1)
new victim = read_data(2)
if(killer<=maxplayers && killer!=victim && HasVip[killer])
{
if(read_data(3) == 1) cs_set_user_money(killer,cs_get_user_money(killer) + get_pcvar_num(mkb))
else cs_set_user_money(killer,cs_get_user_money(killer) + get_pcvar_num(mhb))
}
}
public event_curweapon(id)
{
if (is_user_alive(id) && HasVip[id] && get_pcvar_num(pammo))
{
new weaponID=read_data(2)
if( !(NO_BULLET_WEAPONS_BITSUM & (1<<weaponID)) ) {
cs_set_user_bpammo(id, weaponID, 255)
}
}
return PLUGIN_CONTINUE
}
public resetModel(id, level, cid) {
if (HasVip[id] ) {
new CsTeams:userTeam = cs_get_user_team(id)
if (userTeam == CS_TEAM_T) {
cs_set_user_model(id, "terminator")
}
else if(userTeam == CS_TEAM_CT) {
cs_set_user_model(id, "nano")
}
else {
cs_reset_user_model(id)
}
}
return PLUGIN_CONTINUE
}
public ShowMotd(id)
{
show_motd(id,"/addons/amxmodx/configs/vips/nakvip.txt","VIP Info")
}
public print_adminlist(user)
{
new adminnames[33][32]
new message[256]
new contactinfo[256], contact[112]
new id, count, x, len
for(id = 1 ; id <= maxplayers ; id++)
if(is_user_connected(id))
if(HasVip[id])
get_user_name(id, adminnames[count++], 31)
len = format(message, 255, "%s VIPs Online: ",COLOR)
if(count > 0) {
for(x = 0 ; x < count ; x++) {
len += format(message[len], 255-len, "%s%s ", adminnames[x], x < (count-1) ? ", ":"")
if(len > 96 ) {
print_message(user, message)
len = format(message, 255, "%s ",COLOR)
}
}
print_message(user, message)
}
else {
len += format(message[len], 255-len, "No VIP online.")
print_message(user, message)
}
get_cvar_string("amx_contactinfo", contact, 63)
if(contact[0]) {
format(contactinfo, 111, "%s VIP GameServer Info -- %s", COLOR, contact)
print_message(user, contactinfo)
}
}
print_message(id, msg[]) {
message_begin(MSG_ONE, gmsgSayText, {0,0,0}, id)
write_byte(id)
write_string(msg)
message_end()
}
public UpdateRadar()
{
static bombOrigin[3], id;
for (id = 1; id <= maxPlayers; id++)
{
if (user_has_weapon(id, CSW_C4))
{
get_user_origin(id, bombOrigin);
break;
}
}
for (id = 1; id <= maxPlayers; id++)
{
if (HasVip[id] && (get_user_team(id) == 2) && is_user_alive(id) )
{
message_begin(MSG_ONE_UNRELIABLE, msgidHostagePos, {0, 0, 0}, id);
write_byte(id);
write_byte(0);
write_coord(bombOrigin[0]);
write_coord(bombOrigin[1]);
write_coord(bombOrigin[2]);
message_end();
message_begin(MSG_ONE_UNRELIABLE, msgidHostageK, {0, 0, 0}, id);
write_byte(0);
message_end();
}
}
}
public plugin_end( )
{
nvault_close( gVault )
}
public Say( id )
{
if( get_pcvar_num( pVipOnly ) && !IsVip( id ))
return PLUGIN_CONTINUE
new Said[ 96 ]
read_args( Said, 95 )
remove_quotes( Said )
if( Said[ 0 ] == '/' && Said[ 2 ] == 'i' && Said[ 1] == 'v' && Said[ 4 ] == 'm' )
{
new Arg[ 64 ]
strbreak( Said, Said, 95, Arg, 63 )
remove_quotes( Arg )
if( !Arg[ 0 ] )
{
if( gMessage[ id ][ 0 ] )
PrintColor( id, "Your current Vips message is ^"%s^", to remove it type /vipmsg ^"remove^".", gMessage[ id ] );
else
PrintColor( id, "You haven't set a Vips message yet. To do so, type /vipmsg ^"message^"." );
}
else if( equali( Arg, "remove" ) )
{
gMessage[ id ] = ""
nvault_remove( gVault, gAuth[ id ] )
PrintColor( id, "Your Vip message was removed." )
}
else
{
copy( gMessage[ id ], 63, Arg )
PrintColor( id, "Your Vip message has been set to ^"%s^"", Arg )
}
}
return PLUGIN_CONTINUE;
}
PrintColor( id, Text[ ], any:... )
{
new Msg[ 191 ], Len = formatex( Msg, 190, "^x04%s^x01 ", TAG )
vformat( Msg[ Len ], 190 - Len, Text, 3 )
message_begin( id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, gSayText, _, id )
write_byte( 1 )
write_string( Msg )
message_end( )
}
public handleSayText(msgId,msgDest,msgEnt){
new id = get_msg_arg_int(1);
if(!IsVip( id ))
return PLUGIN_CONTINUE;
new szTmp[256],szTmp2[256]
get_msg_arg_string(2,szTmp, charsmax( szTmp ) )
new szPrefix[64]
formatex(szPrefix,charsmax( szPrefix ),"^x04-%s-",gMessage[ id ]);
if(!equal(szTmp,"#Cstrike_Chat_All")){
add(szTmp2,charsmax(szTmp2),szPrefix);
add(szTmp2,charsmax(szTmp2)," ");
add(szTmp2,charsmax(szTmp2),szTmp);
}
else{
add(szTmp2,charsmax(szTmp2),szPrefix);
add(szTmp2,charsmax(szTmp2),"^x03 %s1^x01 : %s2");
}
set_msg_arg_string(2,szTmp2);
return PLUGIN_CONTINUE;
}
/* Action That Will Show You The Menu */
public CmdMainMenu(id)
{
if(!(get_user_flags(id) && HasVip[id]))
{
Print(id, "you do not have access to use this menu");
}
else
{
ShowMainMenu(id);
}
}
/* The Main Menu */
ShowMainMenu(id)
{
static title[128];
formatex(title, sizeof(title) - 1, "\r[MY] \w-CS- Club Vip Panel\y v1.0^n\y - Main Menu");
new menu = menu_create(title, "MenuMain");
menu_additem(menu, "Slap", "1");
menu_additem(menu, "Slay^n", "2");
menu_additem(menu, "Kick Menu", "3");
menu_additem(menu, "Ban Menu^n", "4");
menu_display(id, menu);
}
public MenuMain(id, menu, item)
{
if( item == MENU_EXIT )
{
menu_destroy(menu);
return;
}
static _access, info[4], callback;
menu_item_getinfo(menu, item, _access, info, sizeof(info) - 1, _, _, callback);
menu_destroy(menu);
switch( info[0] )
{
case '1':
{
SlapMenu(id);
}
case '2':
{
SlayMenu(id);
}
case '3':
{
KickMenu(id);
}
case '4':
{
BanMenu(id);
}
}
}
/*Action for the Slap Menu*/
public SlapMenu(id)
{
new SlapPlayer = menu_create ("\r[MY] \w-CS- Club Vip Panel\y - Slap Menu", "HandleSlap")
new num, players[32], tempid, szTempID [10], tempname [32]
get_players (players, num, "a")
for (new i = 0; i < num; i++)
{
tempid = players [ i ]
get_user_name (tempid, tempname, 31)
num_to_str (tempid, szTempID, 9)
menu_additem (SlapPlayer, tempname, szTempID, 0)
}
menu_display (id, SlapPlayer)
return PLUGIN_HANDLED
}
/*Action for the Slay Menu*/
public SlayMenu(id)
{
new SlayPlayer = menu_create ("\r[MY] \w-CS- Club Vip Panel\y - Slay Menu", "HandleSlay")
new num, players[32], tempid, szTempID [10], tempname [32]
get_players (players, num, "a")
for (new i = 0; i < num; i++)
{
tempid = players [ i ]
get_user_name (tempid, tempname, 31)
num_to_str (tempid, szTempID, 9)
menu_additem (SlayPlayer, tempname, szTempID, 0)
}
menu_display (id, SlayPlayer)
return PLUGIN_HANDLED
}
/*Action for the Kick Menu*/
public KickMenu(id)
{
new KickPlayer = menu_create ("\r[MY] \w-CS- Club Vip Panel\y - Kick Menu", "HandleKick")
new num, players[32], tempid, szTempID [10], tempname [32]
get_players (players, num, "a")
for (new i = 0; i < num; i++)
{
tempid = players [ i ]
get_user_name(tempid, tempname, 31)
num_to_str(tempid, szTempID, 9)
menu_additem(KickPlayer, tempname, szTempID, 0)
}
menu_display (id, KickPlayer)
return PLUGIN_HANDLED
}
/*Action for the Ban Menu*/
public BanMenu(id)
{
new BanPlayer = menu_create ("\r[MY] \w-CS- Club Vip Panel\y - Ban Menu", "HandleBan")
new num, players[32], tempid, szTempID [10], tempname [32]
get_players (players, num, "a")
for (new i = 0; i < num; i++)
{
tempid = players [ i ]
get_user_name(tempid, tempname, 31)
num_to_str(tempid, szTempID, 9)
menu_additem(BanPlayer, tempname, szTempID, 0)
}
menu_display (id, BanPlayer)
return PLUGIN_HANDLED
}
/*HANDLES*/
/*The handle of the Slap Menu*/
public HandleSlap(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], name[64]
new access, callback
menu_item_getinfo (menu, item, access, data, 5, name, 63, callback)
new tempid = str_to_num (data)
get_user_name(id, szName, 32)
get_user_name(tempid, szPlayerName, 32)
Print(0, "%s^04 slapped^03 %s^04!", szName, szPlayerName);
user_slap(tempid, 0)
SlapMenu(id)
return PLUGIN_CONTINUE
}
/*The handle of the Slay Menu*/
public HandleSlay(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], name[64]
new access, callback
menu_item_getinfo (menu, item, access, data, 5, name, 63, callback)
new tempid = str_to_num (data)
get_user_name(id, szName, 32)
get_user_name(tempid, szPlayerName, 32)
Print(0, "%s^04 slayed^03 %s^04!", szName, szPlayerName);
user_silentkill(tempid)
CmdMainMenu(id)
return PLUGIN_CONTINUE
}
/*The handle of the Kick Menu*/
public HandleKick(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], name[64]
new access, callback, UserID
menu_item_getinfo (menu, item, access, data, 5, name, 63, callback)
new tempid = str_to_num(data)
get_user_name(id, szName, 32)
get_user_name(tempid, szPlayerName, 32)
UserID = get_user_userid(tempid)
Print(0, "%s^04 kicked^03 %s^04!", szName, szPlayerName);
server_cmd("kick ^"#%d^" ^"kicked by VIP^"", UserID)
CmdMainMenu(id)
return PLUGIN_CONTINUE
}
/*The handle of the Ban Menu*/
public HandleBan(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], name[64]
new access, callback, UserID
menu_item_getinfo (menu, item, access, data, 5, name, 63, callback)
new tempid = str_to_num(data)
get_user_name(id, szName, 32)
get_user_name(tempid, szPlayerName, 32)
UserID = get_user_userid(tempid)
Print(0, "VIP:%s^04 banned^03 %s^04!", szName, szPlayerName);
server_cmd("amx_ban ^"#%d^" ^"30^" ^"Banned by VIP ", UserID)
CmdMainMenu(id)
return PLUGIN_CONTINUE
}
Print(id, const szMessage[], any:...)
{
static szBuffer[192];
vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
ColorChat(id, TEAM_COLOR, "^04%s^03 %s", Prefix, szBuffer);
}
public TakeDamage(idvictim, idinflictor, idattacker, Float:damage, damagebits)
{
if (!is_user_alive(idattacker) || (get_user_team(idvictim) == get_user_team(idattacker)))
{
return;
}
if (HasVip[idattacker])
{
set_hudmessage(180, 180, 180, 0.51, 0.51, 0, 6.0, 3.0, _, _, 3);
show_hudmessage(idattacker, "%d", floatround(damage));
}
}