Cod: Selectaţi tot
setinfo rate ""
Cod: Selectaţi tot
setinfo model ""
Cod: Selectaţi tot
setinfo parolapecareopuiTU 1
Cod: Selectaţi tot
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <fun>
#include <hamsandwich>
#include <zombieplague>
#define CHAT_PREFIX "[VIP]"
#define HAPPYHOURSTART 00
#define HAPPYHOURSTOP 05
// Flags
#define FLAG_A (1<<0)
#define FLAG_B (1<<1)
#define FLAG_C (1<<2)
#define FLAG_D (1<<3)
#define FLAG_E (1<<4)
#if cellbits == 32
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_CLIPAMMO = 65
#endif
const OFFSET_LINUX_WEAPONS = 4
new const MAXCLIP[] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20, 10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 }
new g_user_privileges[33]
enum _:database_items
{
auth[50],
password[50],
accessflags
}
new vips_database[database_items]
new Array:database_holder
const ZV_PLUGIN_HANDLED = 97
enum _:items
{
i_name[31],
i_description[31],
i_cost,
i_team
}
static const CONTACT[] = ""
new happy_hour_on, g_bit,g_unlimited_clip, maxplayers, g_msgSayText, g_forward_return, g_extra_item_selected, g_registered_items_count, Array:items_database, extra_items[items], g_zp_extra_item_number;
new jumpnum[33], bool:dojump[33], Float:g_damage[33], g_team[33];
public plugin_init()
{
register_plugin("ZM VIP", "1.7.2", "aaarnas")
RegisterHam(Ham_Spawn, "player", "FwdHamPlayerSpawnPost", 1)
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled_Post", 1)
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
register_event("ResetHUD", "HUDReset", "be")
register_event("HLTV", "chache_cvars", "a", "1=0", "2=0")
g_unlimited_clip = register_cvar("zp_vip_unlimited_ammo", "0")
maxplayers = get_maxplayers();
g_msgSayText = get_user_msgid("SayText");
register_cvar("amx_contactinfo", CONTACT, FCVAR_SERVER);
register_dictionary("zm_vip.txt");
register_concmd("amx_reloadvips", "reload_vips", ADMIN_CFG);
reload_vips();
register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
register_clcmd("say /vm", "menu_open");
new temp[31];
formatex(temp, charsmax(temp), "%L", LANG_SERVER, "VIP_EXTRA_NAME");
g_zp_extra_item_number = zp_register_extra_item(temp, 0, 0);
g_extra_item_selected = CreateMultiForward("zv_extra_item_selected", ET_CONTINUE, FP_CELL, FP_CELL)
register_clcmd("say /vips", "print_adminlist")
register_clcmd("say /vip", "ShowMotd")
}
public message_cur_weapon(msg_id, msg_dest, msg_entity)
{
if (!get_pcvar_num(g_unlimited_clip)) return
if (!(g_user_privileges[msg_entity] & FLAG_C)) return
if (!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1) return
static weapon, clip
weapon = get_msg_arg_int(2)
clip = get_msg_arg_int(3)
if (MAXCLIP[weapon] > 2)
{
set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon])
if (clip < 2)
{
static wname[32], weapon_ent
get_weaponname(weapon, wname, sizeof wname - 1)
weapon_ent = find_ent_by_owner(-1, wname, msg_entity)
set_pdata_int(weapon_ent, OFFSET_CLIPAMMO, MAXCLIP[weapon], OFFSET_LINUX_WEAPONS);
}
}
}
public chache_cvars()
{
g_bit = read_flags("ab");
static h, m, s;
time(h, m, s);
if(HAPPYHOURSTART <= h <= HAPPYHOURSTOP)
happy_hour_on = true;
else
happy_hour_on = false;
}
public plugin_natives()
{
register_native("zv_register_extra_item", "native_zv_register_extra_item", 1);
register_native("zv_get_user_flags", "native_zv_get_user_flags", 1);
}
public FwdHamPlayerSpawnPost(id)
{
if(!is_user_alive(id))
return HAM_IGNORED;
if(!(g_user_privileges[id] & FLAG_A))
return PLUGIN_HANDLED;
if(pev(id, pev_armorvalue) < 100)
set_pev(id, pev_armorvalue, 100.0);
return HAM_IGNORED;
}
public fw_PlayerKilled_Post(victim, attacker)
{
if(1 <= attacker <= maxplayers && g_user_privileges[attacker] & FLAG_A)
{
if(is_user_alive(attacker) && zp_get_user_zombie(attacker) && !(zp_get_user_nemesis(attacker)))
{
set_user_health(attacker, (get_user_health(attacker) + 50))
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 2)
}
if(happy_hour_on)
{
set_user_frags(attacker, get_user_frags(attacker) + 1);
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 1);
}
}
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if(victim == attacker)
return HAM_IGNORED;
if(g_user_privileges[victim] & FLAG_A)
{
if(damage_type & DMG_FALL)
return HAM_SUPERCEDE;
}
if(!is_user_connected(attacker))
return HAM_IGNORED;
if(zp_get_user_zombie(attacker) || zp_get_user_survivor(attacker))
return HAM_IGNORED;
if(g_user_privileges[attacker] & FLAG_D)
{
if(150.0 > damage)
{
g_damage[attacker] += damage;
if(g_damage[attacker] > 150.0)
{
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 1);
g_damage[attacker] -= 150.0;
}
}
}
return HAM_IGNORED
}
public zp_user_infected_post(id, infector, nemesis)
{
setVip()
if(!(1<=infector<=maxplayers))
return;
if(g_user_privileges[infector] & FLAG_A)
{
if(is_user_alive(infector))
set_user_health(infector, (get_user_health(infector) + 50));
zp_set_user_ammo_packs(infector, zp_get_user_ammo_packs(infector) + 2)
if(happy_hour_on)
{
set_user_frags(infector, get_user_frags(infector) + 1);
zp_set_user_ammo_packs(infector, zp_get_user_ammo_packs(infector) + 1);
}
}
}
public client_authorized(id)
{
jumpnum[id] = 0;
g_damage[id] = 0.0;
dojump[id] = false;
set_flags(id);
if(g_user_privileges[id] & FLAG_A)
{
new name[32];
get_user_name(id, name, charsmax(name));
client_printcolor(0, "/g[Zombie Ultimate] /yVIP /g%s /yconnected", name );
}
else
{
static h, m, s;
time(h, m, s);
if(HAPPYHOURSTART <= h <= HAPPYHOURSTOP)
g_user_privileges[id] = read_flags("abcde")
}
}
public zp_extra_item_selected(id, item_id)
if(item_id == g_zp_extra_item_number)
menu_open(id)
public menu_open(id)
{
if(g_user_privileges[id] & FLAG_E)
vip_menu(id)
else
client_printcolor(id, "/g[Zombie Ultimate] /yYou are not a /gVIP" );
return ZP_PLUGIN_HANDLED
}
public vip_menu(id)
{
if(g_registered_items_count == 0)
{
client_printcolor(id, "/g[ZM] /yOFF" );
return;
}
new holder[150], menu
formatex(holder, charsmax(holder), "\r%L", id, "MENU_TOP")
menu = menu_create(holder, "vip_menu_handler")
new i, team_check, num[3], ammo_packs, check
check = 0
ammo_packs = zp_get_user_ammo_packs(id)
switch(zp_get_user_zombie(id)) {
case 0: {
if(zp_get_user_survivor(id)) team_check = ZP_TEAM_SURVIVOR
else team_check = ZP_TEAM_HUMAN
}
case 1: {
if(zp_get_user_nemesis(id)) team_check = ZP_TEAM_NEMESIS
else team_check = ZP_TEAM_ZOMBIE
}
}
if(zp_get_user_zombie(id) && !zp_get_user_nemesis(id)) team_check |= FLAG_A
else if(!zp_get_user_zombie(id)) team_check |= FLAG_B
else if(zp_get_user_nemesis(id)) team_check |= FLAG_C
else if(zp_get_user_survivor(id)) team_check |= FLAG_D
g_team[id] = team_check
for(i = 0; i < g_registered_items_count; i++)
{
ArrayGetArray(items_database, i, extra_items);
if(extra_items[i_team] == 0 || g_team[id] & extra_items[i_team])
{
formatex(holder, charsmax(holder), "%s \r[%s] %s[%d %L]", extra_items[i_name], extra_items[i_description], ammo_packs < extra_items[i_cost] ? "\r" : "\y", extra_items[i_cost], id, "AMMO")
formatex(num, 2, "%d", i);
menu_additem(menu, holder, num, 0);
check++;
}
}
if(check == 0)
{
client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "NO_ITEMS");
return;
}
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
formatex(holder, charsmax(holder), "%L", id, "NEXT");
menu_setprop(menu, MPROP_NEXTNAME, holder);
formatex(holder, charsmax(holder), "%L", id, "BACK");
menu_setprop(menu, MPROP_BACKNAME, holder);
formatex(holder, charsmax(holder), "%L", id, "EXIT");
menu_setprop(menu, MPROP_EXITNAME, holder);
menu_display(id, menu, 0);
}
public vip_menu_handler(id, menu, item)
{
if( item == MENU_EXIT )
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
if(!(g_user_privileges[id] & FLAG_A))
{
client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "NOT_A_VIP");
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new team_check;
switch(zp_get_user_zombie(id))
{
case 0:
{
if(zp_get_user_survivor(id))
team_check = ZP_TEAM_SURVIVOR;
else
team_check = ZP_TEAM_HUMAN;
}
case 1:
{
if(zp_get_user_nemesis(id))
team_check = ZP_TEAM_NEMESIS;
else
team_check = ZP_TEAM_ZOMBIE;
}
}
if(g_team[id] != team_check)
{
menu_destroy(menu);
vip_menu(id);
return PLUGIN_HANDLED;
}
new data[6], iName[64], item_id, ammo_packs;
new aaccess, callback;
menu_item_getinfo(menu, item, aaccess, data,5, iName, 63, callback);
item_id = str_to_num(data);
ammo_packs = zp_get_user_ammo_packs(id);
ArrayGetArray(items_database, item_id, extra_items);
if(ammo_packs >= extra_items[i_cost])
zp_set_user_ammo_packs(id, ammo_packs - extra_items[i_cost]);
else
{
client_printcolor(id, "/g%s %L", CHAT_PREFIX, id, "MISSING_AMMO", extra_items[i_cost]-ammo_packs);
menu_destroy(menu);
return PLUGIN_HANDLED;
}
item_id++;
ExecuteForward(g_extra_item_selected, g_forward_return, id, item_id);
if(g_forward_return >= ZV_PLUGIN_HANDLED)
zp_set_user_ammo_packs(id, ammo_packs);
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public HUDReset()
setVip();
public setVip()
{
new players[32], pNum;
get_players(players, pNum, "a");
for (new i = 0; i < pNum; i++)
{
new id = players[i]
if (g_user_privileges[id] & FLAG_A)
{
message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"));
write_byte(id);
write_byte(4);
message_end();
}
}
return PLUGIN_HANDLED
}
public print_adminlist(user)
{
new adminnames[33][32], message[256], contactinfo[256], contact[112], id, count, x, len;
for(id = 1 ; id <= maxplayers ; id++)
if(is_user_connected(id))
if(g_user_privileges[id] & FLAG_A)
get_user_name(id, adminnames[count++], charsmax(adminnames[]));
len = format(message, 255, "/g[ZM] /yGold Members: /g" );
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)
{
client_printcolor(user, "%s", message);
len = format(message, 255, "");
}
}
client_printcolor(user, "%s", message);
}
else {
len += format(message[len], 255-len, "/yNo Gold Members" );
client_printcolor(user, "%s", message)
}
get_cvar_string("amx_contactinfo", contact, 63)
if(contact[0])
{
format(contactinfo, 111, "%L ", id, "VIP_STATUS_CON", contact);
client_printcolor(user, "/g%s", contactinfo);
}
}
public client_disconnected(id)
{
jumpnum[id] = 0
g_damage[id] = 0.0
dojump[id] = false
}
public client_PreThink(id)
{
if(!is_user_alive(id) || (!(g_user_privileges[id] & FLAG_B)))
return PLUGIN_CONTINUE
static nbut, obut, fflags;
nbut= get_user_button(id);
obut = get_user_oldbutton(id);
fflags = get_entity_flags(id);
if((nbut & IN_JUMP) && !(fflags & FL_ONGROUND) && !(obut & IN_JUMP))
{
if(jumpnum[id] < 1 &&
((g_bit & FLAG_D && zp_get_user_nemesis(id)) ||
(g_bit & FLAG_C && zp_get_user_survivor(id)) ||
(g_bit & FLAG_A && !zp_get_user_zombie(id)) ||
(g_bit & FLAG_B && zp_get_user_zombie(id) && !zp_get_user_nemesis(id))))
{
dojump[id] = true;
jumpnum[id]++;
return PLUGIN_CONTINUE;
}
}
if((nbut & IN_JUMP) && (fflags & FL_ONGROUND))
{
jumpnum[id] = 0;
return PLUGIN_CONTINUE;
}
return PLUGIN_CONTINUE
}
public client_PostThink(id)
{
if(!is_user_alive(id) || (!(g_user_privileges[id] & FLAG_B)))
return PLUGIN_CONTINUE;
if(dojump[id] == true)
{
static Float:velocity[3];
entity_get_vector(id, EV_VEC_velocity, velocity);
velocity[2] = random_float(265.0, 285.0);
entity_set_vector(id, EV_VEC_velocity, velocity);
dojump[id] = false;
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public ShowMotd(id)
show_motd(id, "vip.txt");
public reload_vips()
{
if(database_holder)
ArrayDestroy(database_holder);
database_holder = ArrayCreate(database_items)
new configsDir[64];
get_configsdir(configsDir, charsmax(configsDir));
formatex(configsDir, charsmax(configsDir), "%s/vips.ini", configsDir)
new File = fopen(configsDir, "r");
if (File)
{
new Text[512], AuthData[50], Privileges_Flags[32], Password[50];
while(!feof(File))
{
fgets(File,Text,sizeof(Text)-1);
trim(Text);
if(Text[0] == ';')
continue;
AuthData[0] = 0;
Privileges_Flags[0] = 0;
Password[0] = 0;
if(parse(Text, AuthData, charsmax(AuthData), Password, charsmax(Password), Privileges_Flags, charsmax(Privileges_Flags)) < 2)
continue;
vips_database[auth] = AuthData
vips_database[password] = Password
vips_database[accessflags] = read_flags(Privileges_Flags)
ArrayPushArray(database_holder, vips_database)
}
fclose(File);
}
else log_amx("Error: vips.ini file doesn't exist")
}
stock client_printcolor(id, const message[], any:...)
{
static buffer[512], argscount
argscount = numargs()
if (!id) {
static players[32], num, player, i, i2
get_players(players, num , "ch")
for (i = 0; i < num; i++) {
player = players[i]
static changed[5], changedcount
changedcount = 0
for (i2 = 2; i2 < argscount; i2++)
{
if (getarg(i2) == LANG_PLAYER)
{
setarg(i2, 0, player)
changed[changedcount] = i2
changedcount++
}
}
vformat(buffer, charsmax(buffer), message, 3);
replace_all(buffer, charsmax(buffer), "/g", "^4");
replace_all(buffer, charsmax(buffer), "/y", "^1");
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player);
write_byte(player);
write_string(buffer);
message_end();
for (i2 = 0; i2 < changedcount; i2++)
setarg(changed[i2], 0, LANG_PLAYER);
}
}
else {
vformat(buffer, charsmax(buffer), message, 3);
replace_all(buffer, charsmax(buffer), "/g", "^4");
replace_all(buffer, charsmax(buffer), "/y", "^1");
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, id);
write_byte(id);
write_string(buffer);
message_end();
}
}
public set_flags(id)
{
new authid[35], ip[31], name[32], index, client_password[30], size, log_flags[11];
get_user_authid(id, authid, charsmax(authid));
get_user_ip(id, ip, charsmax(ip), 1);
get_user_name(id, name, charsmax(name));
g_user_privileges[id] = 0
size = ArraySize(database_holder)
for(index=0; index < size ; index++)
{
ArrayGetArray(database_holder, index, vips_database)
if(equali(name, vips_database[auth]))
{
get_user_info(id, vips_database[password], client_password, charsmax(client_password))
if(client_password[0] == '1')
g_user_privileges[id] = vips_database[accessflags]
else
{
server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "INV_PAS")
break;
}
get_flags(vips_database[accessflags], log_flags, 10)
log_amx("%L",LANG_PLAYER, "AUTHORISED", name, authid, ip, log_flags)
break
}
}
}
public native_zv_get_user_flags(id)
return g_user_privileges[id]
public native_zv_register_extra_item(const item_name[], const item_discription[], item_cost, item_team)
{
if(!items_database) items_database = ArrayCreate(items)
param_convert(1)
param_convert(2)
copy(extra_items[i_name], 30, item_name)
copy(extra_items[i_description], 30, item_discription)
extra_items[i_cost] = item_cost
extra_items[i_team] = item_team
ArrayPushArray(items_database, extra_items)
g_registered_items_count++
return g_registered_items_count
}
public plugin_end()
{
if(items_database)
ArrayDestroy(items_database);
}
Versiune: 1.7.2 modificat
Link oficial: https://forums.alliedmods.net/showthread.php?p=1098857
Instalare:
1. Fisierul zm_vip_remake.sma il puneti in addons/amxmodx/scripting
2. Fisierul zm_vip_remake.amxx il puneti in addons/amxmodx/plugins
3. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma:
Cod: Selectaţi tot
zm_vip_remake.amxx
Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg):
Cod: Selectaţi tot
zp_vip_unlimited_ammo 1 - activare / 0 - dezactivare
Cod: Selectaţi tot
; "nume" "parola" "abcde"