/*------------------------------------------------------------------------------------------------------------
*Change Log
* 1.0 - Lansare
* Credits
* Unhask - Am luat functia de teleport din pluginul lui [VIP FURIEN - VERSIUNEA 1]
* GhosT *** - Pentru scrierea pluginului
* VIP Commands
* /vips - Arata lista cu vipurile online.
* /vm - Arata meniul VIP
* /vipmenu - Arata meniul VIP
* /vmenu - Arata meniul VIP
* Cvars
* Nu are
-------------------------------------------------------------------------------------------------------------*/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <colorchat>
#define VIP_LEVEL ADMIN_LEVEL_H // FLAG VIP
#define PLUGIN "Vip plugin"
#define AUTOR "GhosT"
#define TELEPORT_INTERVAL 20.0 //float
new limita[33]; // Limita pentru meniu
new g_bNoRecoil[33]; // No Recoil
new g_bTeleport[33]; // Teleport
new Float:g_fLastUsed[ 33 ];
new maxplayers;
new gmsgSayText;
public plugin_init()
{
register_plugin(PLUGIN, "1.0", AUTOR);
register_logevent("inceput_runda", 2, "1=Round_Start");
RegisterHam(Ham_Spawn, "player", "VipSpawn");
register_clcmd("say /vipmenu", "menu");
register_clcmd("say /vmenu", "menu");
register_clcmd("say /vm", "menu");
register_concmd( "+teleport", "tele_cmd" );
register_concmd( "-teleport", "tele_cmd" );
register_forward(FM_PlayerPreThink, "no_recoil");
register_message(get_user_msgid("ScoreAttrib"),"vip_scoreboard");
register_clcmd("say", "handle_say")
register_clcmd("say_team", "handle_say")
maxplayers = get_maxplayers()
gmsgSayText = get_user_msgid("SayText")
}
public client_putinserver(id)
{
g_bNoRecoil[id] = false;
g_bTeleport[id] = false;
}
public client_disconnect(id)
{
client_putinserver(id)
}
public VipSpawn(id)
{
if(get_user_flags(id) & VIP_LEVEL)
{
set_task(2.0, "Spawn_vip", id)
}
}
public Spawn_vip(id)
{
set_user_health(id, 255)
set_user_health(id, 255)
}
public inceput_runda(id)
{
new iPlayers[32];
new iNum;
get_players(iPlayers, iNum);
for(new i = 0; i < iNum; i++)
{
limita[iPlayers] = 0;
}
}
public menu(id)
{
if(limita[id] == 1)
{
ColorChat(id, GREEN, "[VIP]^x03 Ai folosit deja meniul VIP");
return PLUGIN_HANDLED;
}
if(is_user_alive(id) && get_user_flags(id) & VIP_LEVEL)
{
set_task(0.1, "vip_menu", id)
}
if(get_user_flags(id) & ADMIN_USER)
{
ColorChat(id,GREEN,"[VIP]^x03 Nu ai acces la meniu !");
}
return PLUGIN_CONTINUE
}
public vip_menu(id)
{
new menu = menu_create("\rV\y.\rI\y.\rP \yMenu", "menu_vip");
menu_additem(menu, "10 He Grenade", "1", 0)
menu_additem(menu, "God Mode", "2", 0)
menu_additem(menu, "Teleport", "3", 0)
menu_additem(menu, "No Recoil", "4", 0)
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, menu, 0)
}
public menu_vip(id, menu, item)
{
if(item == MEXIT_ALL)
{
return 1;
}
new access, callback, data[6], szName[64];
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
new key = str_to_num(data);
switch(key)
{
case 1:
{
set_task(10.0, "give_he_grenade", id)
limita[id] += 1
}
case 2:
{
set_user_godmode (id, 1);
set_task (3.0,"stop_gm", id);
ColorChat(id, GREEN, "[VIP]^x03 Ai primit^x04 God Mode^x03 !")
limita[id] += 1
}
case 3:
{
g_bTeleport[id] = true;
client_cmd(id, "bind v ^"+teleport^"");
ColorChat(id, GREEN, "[VIP]^x03 Ai primit^x04 Teleport^x04 !");
ColorChat(id, GREEN, "[VIP]^x03 Pentru activare apasati tasta^x04 V^x03 !");
limita[id] += 1
}
case 4:
{
g_bNoRecoil[ id ] = true;
ColorChat(id, GREEN, "[VIP]^x03 Ai primit^x04 No Recoil^x04 !");
limita[id] += 1
}
}
menu_destroy(menu);
return 1
}
public give_he_grenade(id)
{
fm_give_item(id, "weapon_hegrenade")
ColorChat(id, GREEN, "[VIP]^x03 Ai primit un^x04 He Grenade^x03 !");
set_task(10.0, "give_he_grenade", id)
}
public stop_gm(id)
{
set_user_godmode(id, 0)
ColorChat(id, GREEN, "[VIP]^x03 Nu mai ai^x04 God Mode^x03 !")
set_task(22.0, "re_gm", id)
}
public re_gm(id)
{
set_user_godmode(id, 1)
ColorChat(id, GREEN, "[VIP]^x03 Ai reprimit puterea^x04 God Mode^x03 !")
set_task(3.0, "stop_gm", id)
}
public tele_cmd(id)
{
if( !is_user_alive( id ) || !g_bTeleport[ id ] )
return PLUGIN_HANDLED;
static Float:fTime;
fTime = get_gametime( );
if( g_fLastUsed[ id ] > 0.0 && ( fTime - g_fLastUsed[ id ] ) < TELEPORT_INTERVAL )
{
ColorChat(id, GREEN, "[VIP]^x03 Poti folosi teleportarea odata la^x04 %i^x03 secunde !", floatround(TELEPORT_INTERVAL));
return PLUGIN_HANDLED;
}
static Float:start[ 3 ], Float:dest[ 3 ];
pev(id, pev_origin, start);
pev(id, pev_view_ofs, dest);
xs_vec_add(start, dest, start);
pev(id, pev_v_angle, dest);
engfunc(EngFunc_MakeVectors, dest);
global_get(glb_v_forward, dest);
xs_vec_mul_scalar(dest, 9999.0, dest);
xs_vec_add(start, dest, dest);
engfunc(EngFunc_TraceLine, start, dest, IGNORE_MONSTERS, id, 0);
get_tr2(0, TR_vecEndPos, start);
get_tr2(0, TR_vecPlaneNormal, dest);
static const player_hull[] = {HULL_HUMAN, HULL_HEAD};
engfunc(EngFunc_TraceHull, start, start, DONT_IGNORE_MONSTERS, player_hull[_:!!(pev(id, pev_flags) & FL_DUCKING)], id, 0);
if ( !get_tr2(0, TR_StartSolid) && !get_tr2(0, TR_AllSolid) && get_tr2(0, TR_InOpen))
{
engfunc(EngFunc_SetOrigin, id, start);
return PLUGIN_HANDLED;
}
static Float:size[3];
pev(id, pev_size, size);
xs_vec_mul_scalar(dest, (size[0] + size[1]) / 2.0, dest);
xs_vec_add(start, dest, dest);
engfunc(EngFunc_SetOrigin, id, dest);
g_fLastUsed[id] = fTime;
return PLUGIN_HANDLED;
}
public no_recoil(id)
{
if(!is_user_alive(id) && g_bNoRecoil[id])
return 1;
if(get_user_flags(id) & VIP_LEVEL)
{
set_pev(id, pev_punchangle, {0.0,0.0,0.0});
}
return 0;
}
public vip_scoreboard(const MsgId, const MsgType, const MsgDest)
{
static id;
id = get_msg_arg_int(1);
if(get_user_flags(id) & VIP_LEVEL)
set_msg_arg_int(2, ARG_BYTE, (1 << 2 ));
}
public handle_say(id)
{
new said[192]
read_args(said,192)
if( ( containi(said, "who") != -1 && containi(said, "admin") != -1 ) || contain(said, "/vips") != -1 )
set_task(0.1,"vip_list",id)
return PLUGIN_CONTINUE
}
public vip_list(user)
{
new adminnames[33][32]
new message[256]
new id, count, x, len
for(id = 1 ; id <= maxplayers ; id++)
if(is_user_connected(id))
if(get_user_flags(id) & VIP_LEVEL)
get_user_name(id, adminnames[count++], 31)
len = format(message, 255, "^x04 VIP^x03 ONLINE: ")
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, "^x03 ")
}
}
print_message(user, message)
}
else
{
len += format(message[len], 255-len, "No VIP online.")
print_message(user, message)
}
}
print_message(id, msg[])
{
message_begin(MSG_ONE, gmsgSayText, {0,0,0}, id)
write_byte(id)
write_string(msg)
message_end()
}