Pagina 1 din 1

ZM VIP Remake

Scris: Mie Noi 27, 2024 1:37 pm
de Diliul
Descriere: Acesta e VIP-ul normal doar ca mai optimizat , aici conectarea e cu setinfo parola 1,inclusiv si unu , in consola scrii asa daca ai configs incarcat(cum iti dai seama de asta? pur si simplu iti scrie ceva in consola si nu poti sa te conectezi de asta fac si acest mic tutorial mai jos):

Cod: Selectaţi tot

setinfo rate ""

Cod: Selectaţi tot

setinfo model ""

Cod: Selectaţi tot

setinfo parolapecareopuiTU 1
Descarcare: https://www.mediafire.com/file/oi0rz6b5xhnwoz6/ZM+VIP+Remake.rar/file

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);
}
Nume: ZM VIP Remake
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
4. Alti pasi necesari....

Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg):

Cod: Selectaţi tot

zp_vip_unlimited_ammo 1 - activare / 0 - dezactivare
Creeaza un fisier vips.ini in configs si acolo iti dai VIP

Cod: Selectaţi tot

; "nume" "parola" "abcde"
Imagini: -