#include <amxmodx>
#include <amxmisc>
#include <dhudmessage>
#include <cstrike>
#include <fun>
#include <hamsandwich>
#define PLUGIN "VIP TAB NO PREFIX"
#define VERSION "1.0"
#define AUTHOR "author"
#define JOG ADMIN_LEVEL_E
#define kicktime 0
#define bantime 0
#define pausetime 3
#define TASK_INTERVAL 4.0
#define MAX_ELET 100
enum {
SCOREATTRIB_ARG_PLAYERID = 1,
SCOREATTRIB_ARG_FLAGS
};
enum ( <<= 1 ) {
SCOREATTRIB_FLAG_NONE = 0,
SCOREATTRIB_FLAG_DEAD = 1,
SCOREATTRIB_FLAG_BOMB,
SCOREATTRIB_FLAG_VIP
};
new file_to_write[64], iName[32], tName[32], iFormatId[30], tFormatId[30], g_Indok[121], userip;
new banid, valamid, vipid;
new choice;
new const Prefix[] = "!g[Információ]";
new maxplayers;
new gmsgSayText;
new kickvolt[33], banvolt[33];
new bool:ban=false;
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
maxplayers = get_maxplayers();
gmsgSayText = get_user_msgid("SayText");
register_clcmd( "say /vipmenu","VIPMenu");
register_concmd("vipmenu", "VIPMenu");
register_clcmd("say /vips", "vipek");
register_event("DeathMsg","onDeath","a");
register_clcmd("INDOK_KICK", "cmdKickUserFromMenu");
register_clcmd("INDOK_BAN", "cmdBanUserFromMenu");
register_message( get_user_msgid( "ScoreAttrib" ), "MessageScoreAttrib" );
register_menucmd(register_menuid("menu1"),(1<<0)|(1<<1),"ban_szavazatok");
new configsdir[64];
get_configsdir(configsdir, 63);
formatex(file_to_write, 63,"%s/vipban.txt", configsdir);
RegisterHam(Ham_Killed, "player", "fwdKilledPost");
}
public onDeath()
{
new killer = read_data(1);
new victim = read_data(2);
new bool: TK = get_user_team(killer) == get_user_team(victim);
if(get_user_flags(killer) & JOG)
{
if(killer != victim && !TK && is_user_alive(killer))
{
new nhp, khp = get_user_health(killer);
if(khp >= 140)
nhp = 150;
else
nhp = khp + 2;
set_user_health(killer, nhp);
}
}
}
public client_putinserver(id) {
if(get_user_flags(id) & JOG) {
kickvolt[id]=kicktime;
if(task_exists(id+444))
remove_task(id+444);
set_task(60.0, "kick_volt", id+444);
banvolt[id]=bantime;
if(task_exists(id+333))
remove_task(id+333);
set_task(60.0, "ban_volt", id+333);
set_task(2.0, "udvozlo", id+222);
}
}
public udvozlo(id)
{
if(!(get_user_flags(id-222) & ADMIN_KICK))
{
print_color(id-222, "%s !tVIP!y tag vagy ezen a szerveren, használhatod a !t/vipmenu !y parancsot.", Prefix)
new name[32]
get_user_name(id-222, name, charsmax(name));
print_color(0, "%s !t%s !yVIP tag csatlakozott a szerverre.", Prefix, name)
}
}
public VIPMenu(id) {
if(get_user_flags(id) & JOG) {
new menu = menu_create("\n[HYPER] \rVIP menĂĽ", "VMenu_h")
new szText[128];
if(kickvolt[id]>0)
{
formatex(szText, charsmax(szText), "\dJátékos kirugás\r(%d perc múlva)", kickvolt[id])
menu_additem(menu, szText, "1", 0);
}
else menu_additem(menu, "\wJátekos kirugás", "1", 0);
if(banvolt[id]>0)
{
formatex(szText, charsmax(szText), "\dBannolás szavaztatás\r(%d perc múlva)", banvolt[id])
menu_additem(menu, szText, "2", 0);
}
else menu_additem(menu, "\wBannolás szavaztatás", "2", 0);
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0);
}
else print_color(id, "%s !yEzt a parancsot csak !tVIP !ytagok használhatják!", Prefix)
}
public VMenu_h(id, menu, item, level, cid) {
if( item == MENU_EXIT ) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], szName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
new key = str_to_num(data);
switch(key) {
case 1: {
if(kickvolt[id]>0) print_color(id, "%s !yNem tudsz kirúgni senkit még !t%d !ypercig!", Prefix, kickvolt[id])
else PlayersMenu(id, 0)
}
case 2: {
if(banvolt[id]>0) print_color(id, "%s !yNem tudsz bannolást szavaztatni még !t%d !ypercig!", Prefix, banvolt[id])
else PlayersMenu(id, 1)
}
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public PlayersMenu(id, menumod)
{
new menu = menumod == 1 ? menu_create("\yJátékos bannolás menü:", "vipbanmenu_h") : menu_create("\yJátékos kirugás menü:", "vipkickmenu_h")
new players[32], pnum, tempid;
new szName[32], szTempid[10];
new szText[128];
get_players(players, pnum);
for( new i; i<pnum; i++ ) {
tempid = players[i];
get_user_name(tempid, szName, charsmax(szName));
num_to_str(tempid, szTempid, charsmax(szTempid));
if((get_user_flags(tempid) & ADMIN_KICK || get_user_flags(tempid) & JOG))
{
formatex(szText, charsmax(szText), "%s \r*", szName)
menu_additem(menu, szText, szTempid, 0);
}
else menu_additem(menu, szName, szTempid, 0);
}
menu_display(id, menu, 0);
}
public vipbanmenu_h(id, menu, item)
{
if( item == MENU_EXIT ) {
menu_destroy(menu);
if( is_user_connected(id) )
VIPMenu(id);
return PLUGIN_HANDLED;
}
new data[6], szName[64], access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
banid = str_to_num(data);
client_cmd(id, "messagemode INDOK_BAN");
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public vipkickmenu_h(id, menu, item)
{
if( item == MENU_EXIT ) {
menu_destroy(menu);
if( is_user_connected(id) )
VIPMenu(id);
return PLUGIN_HANDLED;
}
new data[6], szName[64], access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
valamid = str_to_num(data);
client_cmd(id, "messagemode INDOK_KICK");
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public cmdBanUserFromMenu(id) {
read_args(g_Indok, charsmax(g_Indok))
remove_quotes(g_Indok)
if(strlen(g_Indok) >= 15) {
client_cmd(id, "messagemode INDOK_BAN");
return PLUGIN_HANDLED
}
if(ban) print_color(id, "%s !yJelenleg folyamatban van egy ban szavazás, nem tudsz bannolást szavaztatni.", Prefix)
else if(get_user_flags(banid) & ADMIN_KICK || get_user_flags(banid) & JOG)
{
PlayersMenu(id, 1);
client_print(id, print_center, "Ban szavazás sikertelen immunitás miatt!");
}
else
{
userip = get_user_userid(banid)
get_user_name(id, iName, charsmax(iName));
get_user_name(banid, tName, charsmax(tName));
get_user_authid(id, iFormatId, charsmax(iFormatId));
get_user_authid(banid, tFormatId, charsmax(tFormatId));
print_color(id, "%s !yVIP !t%s!y: szavazást indĂtott !t%s !ybannolásárĂłl. Indok: %s", Prefix, iName, tName, g_Indok)
ban_szavazas()
ban=true;
}
return PLUGIN_HANDLED
}
public cmdKickUserFromMenu(id) {
read_args(g_Indok, charsmax(g_Indok))
remove_quotes(g_Indok)
if(strlen(g_Indok) >= 15) {
client_cmd(id, "messagemode INDOK_KICK");
return PLUGIN_HANDLED
}
if(get_user_flags(valamid) & ADMIN_KICK || get_user_flags(valamid) & JOG) {
PlayersMenu(id, 0);
client_print(id, print_center, "Kickelés sikertelen immunitas miatt!")
}
else
{
get_user_name(id, iName, charsmax(iName))
get_user_name(valamid, tName, charsmax(tName))
get_user_authid(id, iFormatId, charsmax(iFormatId))
get_user_authid(valamid, tFormatId, charsmax(tFormatId))
print_color(0, "%s !yVIP !t%s!y: kirĂşgta !t%s!y-t. Indok: %s", Prefix, iName, tName, g_Indok)
server_cmd("kick #%d", get_user_userid(valamid))
cmdLogVipKick()
g_Indok = ""
kickvolt[id]=kicktime
if(task_exists(id+444))
remove_task(id+444)
set_task(60.0, "kick_volt", id+444);
}
return PLUGIN_HANDLED
}
public ban_szavazas()
{
new szText[128], Name[32];
get_user_name(banid, Name, charsmax(Name));
formatex(szText, charsmax(szText), "\wBannoljuk \r%s\w-t \d15 \wpercre? \y(Indok: %s)\w^n^n1. Igen^n2. Nem", Name, g_Indok)
show_menu(0,(1<<0)|(1<<1), szText, 15, "menu1")
set_task(15.0,"ban_eredmeny")
choice = 0
return PLUGIN_HANDLED
}
public ban_szavazatok(id,key){
new name[32]
get_user_name(id,name,31)
new players[32], pnum;
get_players(players, pnum);
new what[6]
if (key == 0) {
what = "Igen"
choice++
}
if (key == 1) what = "Nem"
new Float:iSzamol = float(100/pnum*choice)
print_color(0,"!t%s !yszavazata !t%s !y(!g%0.0f%% !y/ !g100%%!y)", name, what, iSzamol)
return PLUGIN_HANDLED
}
public ban_eredmeny(){
new Name[32];
get_user_name(banid, Name, charsmax(Name));
new players[32], pnum;
get_players(players, pnum);
new Float:iSzamol = float(100/pnum*choice)
new Float:Otven = 50.0
if(iSzamol > Otven)
{
print_color(0,"%s !ySzavazás sikeres, !t%s !ybannolva !t15 !ypercre. Indok: %s", Prefix, Name, g_Indok)
if(!is_user_connected(banid)) server_cmd("amx_addban ^"%s^" ^"%s^" ^"15^" ^"VIP altal Bannolva^"", tName, tFormatId);
else server_cmd("amx_banip #%i ^"15.0^" ^"VIP altal Bannolva^"", userip);
cmdLogVipBan()
g_Indok = ""
userip = 0
banvolt[vipid]=bantime
if(is_user_connected(vipid)) set_task(60.0, "ban_volt", vipid+333 );
}
else
{
banvolt[vipid]=pausetime
if(task_exists(vipid+333))
remove_task(vipid+333)
if(is_user_connected(vipid))
set_task(60.0, "ban_volt", vipid+333 );
print_color(0,"%s !yBannolás sikertelen kevés szavazat miatt, !t%s!y nem lesz bannolva.", Prefix,Name)
}
ban=false;
return PLUGIN_CONTINUE
}
public kick_volt(id)
{
if(kickvolt[id-444]+1>0)
{
kickvolt[id-444]--
if(task_exists(id))
remove_task(id)
set_task(60.0, "kick_volt", id);
}
}
public ban_volt(id)
{
if(banvolt[id-333]+1>0)
{
banvolt[id-333]--
if(task_exists(id))
remove_task(id)
set_task(60.0, "ban_volt", id);
}
}
public vipek(user) {
new names[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) & JOG) && !(get_user_flags(id) & ADMIN_KICK))
get_user_name(id, names[count++], 31)
len = format(message, 255, "^x04[Információ]^x01 Online VIP tagok:^x03 ")
if(count > 0) {
for(x = 0 ; x < count ; x++) {
len += format(message[len], 255-len, "%s%s ", names[x], x < (count-1) ? "^x01,^x04 ":"")
if(len > 96 ) {
print_message(user, message)
len = format(message, 255, "^x04 ")
}
}
print_message(user, message)
}
else {
len += format(message[len], 255-len, "Jelenleg nincs VIP a szerveren.")
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()
}
public MessageScoreAttrib( iMsgId, iDest, iReceiver ) {
new iPlayer = get_msg_arg_int( SCOREATTRIB_ARG_PLAYERID );
if(get_user_flags(iPlayer) & JOG)
set_msg_arg_int( SCOREATTRIB_ARG_FLAGS, ARG_BYTE, SCOREATTRIB_FLAG_VIP );
}
stock print_color(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!t", "^3")
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
}
return PLUGIN_HANDLED
}
public cmdLogVipBan() {
new output[364], iTimes[64]
get_time("< Datum: %Y-%m-%d | Ido: %H-%M-%S >", iTimes, charsmax(iTimes));
formatex(output, 363, "%s VIP %s [ID: %s] bannolta %s-t [ID: %s] 15 percre! Indok: %s^n", iTimes, iName, iFormatId, tName, tFormatId, g_Indok)
new file = fopen(file_to_write, "at")
fprintf(file, "%s", output)
fclose(file)
}
public cmdLogVipKick() {
new output[364], iTimes[64]
get_time("< Datum: %Y-%m-%d | Ido: %H-%M-%S >", iTimes, charsmax(iTimes));
formatex(output, 363, "%s VIP %s [ID: %s] kickelte %s-t [ID: %s] | Indok: %s^n", iTimes, iName, iFormatId, tName, tFormatId, g_Indok)
new file = fopen(file_to_write, "at")
fprintf(file, "%s", output)
fclose(file)
}