All pastes #2108973 Raw Edit

Untitled

public text v1 · immutable
#2108973 ·published 2012-02-02 09:09 UTC
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));
	}
}