Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.

  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
Zombie Plague 4.3

noktowizor dla [ZP] Zombie VIP 1.9.1

zombie plague 4.3

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1 ZIGI89

    Życzliwy

  • Użytkownik

Reputacja: 2
Nowy

  • Postów:30
  • GG:
  • Steam:steam
  • Lokalizacja:Łodygowice
Offline

Napisano 22.02.2015 12:45

witam umiał by ktoś zrobić plugin dający  vipowi  noktowizor na start za 0 ap

 pod ten plugin

szukałem  i nie mogę takowego znaleźć

 

używa on  vips.ini ,a nie user.ini

znalazłem podobne tematy ,ale tam im robili pod user.ini

http://amxx.pl/topic...towizor-vip-zm/

http://amxx.pl/topic...-noktowizor-zm/

http://amxx.pl/topic...owy-noktowizor/ 

 

 

 

zp_register_extra_item( g_item_name, g_item_cost, ZP_TEAM_HUMAN)

zv_register_extra_item( g_item_name, g_item_description, g_item_cost, ZV_TEAM_HUMAN)

 

 

 

 

 


  • +
  • -
  • 0
<img src="http://steamprofile....1:25467514.png" alt="Tekst alternatywny" />

#2 TeodozjuszTurgh

    Nowy

  • Pijawka

Reputacja: 2
Nowy

  • Postów:1
  • Imię:Ernest
  • Lokalizacja:Debrzno
Offline

Napisano 10.03.2015 11:30

podbijam temat, bo szukam czegoś podobnego


  • +
  • -
  • 0

#3 ^Szeregowy^

    Wszechwidzący

  • Zbanowany

Reputacja: 67
Pomocny

  • Postów:238
  • GG:
  • Imię:Damian
  • Lokalizacja:Płock
Offline

Napisano 26.07.2015 15:37

daj sma vip ;)


ZNAJOMOŚĆ AMXX [%]

JAILBREAK[90%]2cp5bgj.jpg

COD MOD[70%]f5krm.jpg

PAINTBALL[40%]15f3vhc.jpg

ZOMBIE MOD[10%]1zp32m9.jpg

POZOSTAŁE[5%]34fldsg.jpg


#4 ZIGI89

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:30
  • GG:
  • Steam:steam
  • Lokalizacja:Łodygowice
Offline

Napisano 29.07.2015 10:15

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <fun>
#include <hamsandwich>
#include <zombie_plague_advance>
#include <sqlx>

////////// PLUGIN SETTINGS //////////
#define MODE 3
#define CHAT_PREFIX "[VIP]"

native zp_get_user_unlimited_clip(id);

// (Only if MODE 1 is turrned OFF. Otherwise set flags in vips.ini.) //
#define VIPACCES ADMIN_LEVEL_H
#define MJACCES ADMIN_LEVEL_H
////////// SETTINGS END //////////

// 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)
#define FLAG_J (1<<9)
#define FLAG_K (1<<10)

#define VERSION "1.7.2"

#if cellbits == 32
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_CLIPAMMO = 65
#endif
const OFFSET_LINUX_WEAPONS = 4

const DMG_HEGRENADE = (1<<24)

#define set_flood(%1,%2)    (%1 |= (1<<(%2&31)))
#define clear_flood(%1,%2)    (%1 &= ~(1<<(%2&31)))
#define get_flood(%1,%2)    (%1 & (1<<(%2&31)))

#if MODE & (1<<0) || MODE & (1<<1)
new amx_password_field_string[30]
#endif
#if MODE & (1<<0)
new Handle:sqlinfo
new g_user_privileges[33]
enum _:database_items
{
	auth[50],
	password[50],
	accessflags,
	flags
}
new vips_database[database_items]
new Array:database_holder
new g_hour_flags
new g_hour
#endif
#if MODE & (1<<1)
const ZV_PLUGIN_HANDLED = 97
enum _:items
{
	i_name[31],
	i_description[31],
	i_cost,
	i_team
}
new g_register_in_zp_extra
new g_zp_extra_item_number
new g_nonvip_tease
new g_menu_close
new extra_items[items]
new Array:items_database
new g_registered_items_count
new g_forward_return
new g_extra_item_selected
new g_team[33]
#endif
#if MODE == 3
new g_vip_buy_time
new g_vip_cost_ammo
new g_vip_buy_flags
#endif
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 }
static const CONTACT[] = ""
new g_jumps, g_allow_jump, g_armor, g_killammo, g_infectammo, g_infecthealth, g_nemhealth, g_show_vips,
g_unlimited_clip, g_fall_damage, g_damage_reward, g_damage_increase, g_happy_hour, g_happy_hour_frag, g_happy_hour_ammo
new happy_hour_on
new g_bit
new chache_g_jumps
new maxplayers, g_msgSayText
new jumpnum[33]
new bool:dojump[33]
new Float:g_damage[33]


public plugin_init() {
	
	register_plugin("ZM VIP", VERSION, "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")
	
	maxplayers = get_maxplayers()
	g_msgSayText = get_user_msgid("SayText")
	
	register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
	register_message(get_user_msgid("SayText"), "message")
	
	g_jumps = register_cvar("zp_vip_jumps", "1")
	g_allow_jump = register_cvar("zp_vip_allow_jump", "ab")
	g_armor = register_cvar("zp_vip_armor", "65")
	g_killammo = register_cvar("zp_vip_killammo", "2")
	g_infectammo = register_cvar("zp_vip_infectammo", "2")
	g_infecthealth = register_cvar("zp_vip_infecthealth", "300")
	g_nemhealth = register_cvar("zp_vip_nemextra", "1")
	g_show_vips = register_cvar("zp_vip_show", "1")
	g_unlimited_clip = register_cvar("zp_vip_unlimited_ammo", "0")
	g_fall_damage = register_cvar("zp_vip_no_fall_damage", "1")
	g_damage_reward = register_cvar("zp_vip_damage_reward", "500")
	g_damage_increase = register_cvar("zp_vip_damage_increase", "1.5")
	g_happy_hour = register_cvar("zp_vip_happy_hour", "off")
	g_happy_hour_frag = register_cvar("zp_vip_happy_hour_frag", "1")
	g_happy_hour_ammo = register_cvar("zp_vip_happy_hour_ammo", "1")
	register_cvar("amx_contactinfo", CONTACT, FCVAR_SERVER)
	register_cvar("zp_vip_version", VERSION, FCVAR_SERVER|FCVAR_SPONLY)
	set_cvar_string("zp_vip_version", VERSION)
		
#if MODE & (1<<0) || MODE & (1<<1)
	get_cvar_string("amx_password_field", amx_password_field_string, charsmax(amx_password_field_string))
	register_dictionary("zm_vip.txt")
#endif
#if MODE & (1<<0) && MODE & (1<<1)
	g_vip_cost_ammo = register_cvar("zp_vip_cost_ammo", "0")
	g_vip_buy_time = register_cvar("zp_vip_buy_time", "7")
	g_vip_buy_flags = register_cvar("zp_vip_buy_flags", "abcd")
	set_task(5.0,"check_date",0)
#endif
#if MODE & (1<<0)
	register_concmd("amx_reloadvips", "reload_vips", ADMIN_CFG)
	g_hour = register_cvar("zp_vip_hour", "off")
	g_hour_flags = register_cvar("zp_vip_hour_flags", "abe")
#endif
#if MODE & (1<<1)
	register_clcmd("say /vm", "menu_open")
	g_nonvip_tease = register_cvar("zp_vip_nonvip_tease", "1")
	g_register_in_zp_extra = register_cvar("zp_vip_register_in_zp_extra", "1")
	g_menu_close = register_cvar("zp_vip_menu_close", "1")
	
	new temp[31]
	formatex(temp, 30, "%L", LANG_SERVER, "VIP_EXTRA_NAME")
	if(get_pcvar_num(g_register_in_zp_extra)) g_zp_extra_item_number = zp_register_extra_item(temp, 0, 0, 0)
	g_extra_item_selected = CreateMultiForward("zv_extra_item_selected", ET_CONTINUE, FP_CELL, FP_CELL)
#endif
	register_clcmd("say /vips", "print_adminlist")
	register_clcmd("say /vip", "ShowMotd")
}
public plugin_cfg()
{
	new directory[31]
	get_configsdir(directory, 30)
	server_cmd("exec %s/zm_vip.cfg", directory)
#if MODE & (1<<0)
	set_task(0.0, "delayed_plugin_cfg")
#endif
}
#if MODE & (1<<0)
public delayed_plugin_cfg()
{
	SQL_SetAffinity("mysql")
	sqlinfo = SQL_MakeStdTuple()
	reload_vips()
}
#endif
public chache_cvars() {
	
	static string[5]
	get_pcvar_string(g_allow_jump, string, charsmax(string))
	g_bit = read_flags(string)
	chache_g_jumps = get_pcvar_num(g_jumps)
	
	static hours[6], hour1s[3], hour2s[3], hour1, hour2, h, m, s
	get_pcvar_string(g_happy_hour, hours, charsmax(hours))
		
	if(equal(hours, "off")) {happy_hour_on = false; return; }
		
	strtok(hours, hour1s, charsmax(hour1s), hour2s, charsmax(hour2s), '-')
	hour1 = str_to_num(hour1s)
	hour2 = str_to_num(hour2s)
		
	time(h, m, s)
	if ((h >= hour1 && h <= hour2) || (h < hour2 && h < hour1) || (h >= hour2 && h >= hour1)) happy_hour_on = true
	else happy_hour_on = false
}
#if MODE & (1<<1) || MODE & (1<<0)
public plugin_natives() {
#if MODE & (1<<1)
	register_native("zv_register_extra_item", "native_zv_register_extra_item", 1)
#endif
#if MODE & (1<<0)
	register_native("zv_get_user_flags", "native_zv_get_user_flags", 1)
#endif	
}
#endif
public FwdHamPlayerSpawnPost(id) {
	
	if(!is_user_alive(id)) return HAM_IGNORED;
#if MODE & (1<<0)
	if(!(g_user_privileges[id] & FLAG_A))
#else
	if(!(get_user_flags(id) & VIPACCES))
#endif
		return PLUGIN_HANDLED;

	if(pev(id, pev_armorvalue) < get_pcvar_num(g_armor))
	set_pev(id, pev_armorvalue, float(get_pcvar_num(g_armor)))
	return HAM_IGNORED;
}

public fw_PlayerKilled_Post(victim, attacker) {
#if MODE & (1<<0)
	if(1 <= attacker <= maxplayers && g_user_privileges[attacker] & FLAG_A && !zp_get_user_survivor(attacker) && !zp_get_user_sniper(attacker) && !zp_get_user_hunter(attacker)) {
#else
	if(1 <= attacker <= maxplayers && get_user_flags(attacker) & VIPACCES && !zp_get_user_survivor(attacker) && !zp_get_user_sniper(attacker) && !zp_get_user_hunter(attacker)) {
#endif	
		if(is_user_alive(attacker) && zp_get_user_zombie(attacker) && !(zp_get_user_nemesis(attacker) && get_pcvar_num(g_nemhealth)) && !zp_get_user_assassin(attacker)) set_user_health(attacker, (get_user_health(attacker) + get_pcvar_num(g_infecthealth)))
		zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + get_pcvar_num(g_killammo))
		
		if(happy_hour_on) {
			
			static frag, ammo
			frag = get_pcvar_num(g_happy_hour_frag)
			ammo = get_pcvar_num(g_happy_hour_ammo)
			
			if(frag) set_user_frags(attacker, get_user_frags(attacker)+frag)
			if(ammo) zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker)+ammo)
		}
			
	}
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) {
	
	if(victim == attacker)
		return HAM_IGNORED
		
	if(damage_type & DMG_HEGRENADE)
		return HAM_IGNORED
	
#if MODE & (1<<0)
	if(g_user_privileges[victim] & FLAG_A) {
#else
	if(get_user_flags(victim) & VIPACCES) {
#endif
		if(damage_type & DMG_FALL && get_pcvar_num(g_fall_damage))
			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 MODE & (1<<0)
	if(g_user_privileges[attacker] & FLAG_D) {
#else
	if(get_user_flags(attacker) & VIPACCES) {
#endif
		damage *= get_pcvar_float(g_damage_increase)
		SetHamParamFloat(4, damage)
	}
	
#if MODE & (1<<0)
	if(g_user_privileges[attacker] & FLAG_D) {
#else
	if(get_user_flags(attacker) & VIPACCES) {
#endif
		if(get_pcvar_num(g_damage_reward) > 0 && !zp_get_user_survivor(attacker) && !zp_get_user_sniper(attacker) && !zp_get_user_hunter(attacker)){
			g_damage[attacker]+=damage
			if(g_damage[attacker] > ((zp_get_user_unlimited_clip(attacker)) ? get_pcvar_float(g_damage_reward)*2 : get_pcvar_float(g_damage_reward))) {
				zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker)+1)
				g_damage[attacker] -= (zp_get_user_unlimited_clip(attacker) ? get_pcvar_float(g_damage_reward)*2 : get_pcvar_float(g_damage_reward))
			}
		}	
	}

	return HAM_IGNORED
}

public zp_user_infected_post(id, infector, nemesis) {
	
	setVip()
	if(!(1<=infector<=maxplayers)) return;
	
#if MODE & (1<<0)
	if(g_user_privileges[infector] & FLAG_A) {
#else
	if(get_user_flags(infector) & VIPACCES) {
#endif
		if(is_user_alive(infector)) set_user_health(infector, (get_user_health(infector) + get_pcvar_num(g_infecthealth)))
		zp_set_user_ammo_packs(infector, zp_get_user_ammo_packs(infector) + get_pcvar_num(g_infectammo))
		
		if(happy_hour_on) {
			
			static frag, ammo
			frag = get_pcvar_num(g_happy_hour_frag)
			ammo = get_pcvar_num(g_happy_hour_ammo)
			
			if(frag) set_user_frags(infector, get_user_frags(infector)+frag)
			if(ammo) zp_set_user_ammo_packs(infector, zp_get_user_ammo_packs(infector)+ammo)
		}
	}	
}

public client_connect(id) {
	jumpnum[id] = 0
	g_damage[id] = 0.0
	dojump[id] = false
#if MODE & (1<<0)
	set_flags(id)
	if(get_pcvar_num(g_show_vips) == 1 && g_user_privileges[id] & FLAG_A) {
#else
	if(get_pcvar_num(g_show_vips) == 1 && get_user_flags(id) & VIPACCES) {
#endif
		new name[100]
		get_user_name(id, name, 100)
		client_printcolor(0, "/g%L", LANG_PLAYER, "VIP_CONNECTED", name)
	}
#if MODE & (1<<0)
	else {
		static hours[6], hour1s[3], hour2s[3], hour1, hour2, h, m, s
		get_pcvar_string(g_hour, hours, charsmax(hours))
		
		if(equal(hours, "off")) return;
		
		strtok(hours, hour1s, charsmax(hour1s), hour2s, charsmax(hour2s), '-')
		hour1 = str_to_num(hour1s)
		hour2 = str_to_num(hour2s)
		
		time(h, m, s)
		if ((h >= hour1 && h <= hour2) || (h < hour2 && h < hour1) || (h >= hour2 && h >= hour1)){
			
			new fflags[10]
			get_pcvar_string(g_hour_flags, fflags, charsmax(fflags))
			g_user_privileges[id] = read_flags(fflags)
		}
	}
#endif
}
#if MODE & (1<<1)
public zp_extra_item_selected(id, item_id)
	if(item_id == g_zp_extra_item_number)
		menu_open(id)

public menu_open(id) {
#if MODE & (1<<0)
	if(g_user_privileges[id] & FLAG_E)
		vip_menu(id)
#else
	if(get_user_flags(id) & VIPACCES)
		vip_menu(id)
#endif
#if MODE & (1<<0)
	else if(get_pcvar_num(g_vip_cost_ammo) != 0)
		get_pcvar_num(g_nonvip_tease) ? vip_menu(id) : buy_meniu(id)
#endif
	else client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "NOT_A_VIP")
	return ZP_PLUGIN_HANDLED
}
	
public vip_menu(id)
{
	if(g_registered_items_count == 0) {
		client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "OFF")
		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 MODE & (1<<0)
	if(get_pcvar_num(g_nonvip_tease) && !(g_user_privileges[id] & FLAG_A)) {
#if MODE & (1<<0)
		buy_meniu(id)
#else
		client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "NOT_A_VIP")
#endif
		menu_destroy(menu)
		return PLUGIN_HANDLED;
	}
#else
	if(get_pcvar_num(g_nonvip_tease) && !(get_user_flags(id) & VIPACCES)) {
#if MODE & (1<<0)
		buy_meniu(id)
#else
		client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "NOT_A_VIP")
#endif
		menu_destroy(menu)
		return PLUGIN_HANDLED;
	}
#endif
	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)
		if(g_menu_close) menu_destroy(menu)
		else vip_menu(id)
		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)
	
	if(!g_menu_close) vip_menu(id)
	
	menu_destroy(menu)
	return PLUGIN_HANDLED
}
#endif
#if MODE & (1<<0) && MODE & (1<<1)
public buy_meniu(id)
{
	new holder[150], menu
	formatex(holder, charsmax(holder), "\r%L", id, "BUY_MENU_TOP", get_pcvar_num(g_vip_cost_ammo), get_pcvar_num(g_vip_buy_time))
	menu = menu_create(holder, "buy_menu_handler")
	new callback = menu_makecallback("_menu_callback")
	formatex(holder, charsmax(holder), "%L", id, "BUY_MENU_TYPE1")
	menu_additem(menu, holder)
	formatex(holder, charsmax(holder), "%L", id, "BUY_MENU_TYPE2")
	menu_additem(menu, holder, _, _, callback)
	formatex(holder, charsmax(holder), "%L", id, "BUY_MENU_TYPE3")
	menu_additem(menu, holder)
	
	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
	formatex(holder, charsmax(holder), "%L", id, "EXIT")
	menu_setprop(menu, MPROP_EXITNAME, holder)
	menu_display(id, menu, 0)
}
 
public buy_menu_handler(id, menu, item)
{
	if( item == MENU_EXIT )
	{
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}

	new ammo_packs = zp_get_user_ammo_packs(id)
	if(item > 0) {
		if(ammo_packs >= get_pcvar_num(g_vip_cost_ammo)) {
			amx_tempadmin(id, item)
			zp_set_user_ammo_packs(id, ammo_packs - get_pcvar_num(g_vip_cost_ammo))
			client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "BOUGHT_VIP", get_pcvar_num(g_vip_buy_time))
			
		}
		else client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "MISSING_AMMO", get_pcvar_num(g_vip_cost_ammo)-ammo_packs)
	}
	else {
		nick_buy_meniu(id)
		return PLUGIN_HANDLED
	}
	
	menu_destroy(menu)
	return PLUGIN_HANDLED
}

public nick_buy_meniu(id)
{
	new buttons_string[16], menu_string[151], menu_item[81], menu, client_password[20]
	get_user_info(id, amx_password_field_string, client_password, charsmax(client_password))
	formatex(menu_string, 150, "\r%L", id, "NICK_BUY_MENU_TOP", client_password)
	menu = menu_create(menu_string, "nick_buy_menu_handler")
	
	formatex(menu_item, 80, "%L", id, "NICK_BUY_MENU_TYPE1")
	menu_additem(menu, menu_item)
	formatex(menu_item, 80, "%L", id, "NICK_BUY_MENU_TYPE2")
	menu_additem(menu, menu_item)
	formatex(menu_item, 80, "%L", id, "NICK_BUY_MENU_TYPE3", get_pcvar_num(g_vip_cost_ammo) ,get_pcvar_num(g_vip_buy_time))
	menu_additem(menu, menu_item)
	
	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
	formatex(buttons_string, 15, "%L", id, "BACK")
	menu_setprop(menu, MPROP_EXITNAME, buttons_string)
	menu_display(id, menu, 0)
	
}
 
public nick_buy_menu_handler(id, menu, item)
{
	if( item == MENU_EXIT )
	{
		buy_meniu(id)
		return PLUGIN_HANDLED
	}

	switch(item) {
		case 0: {
			generate_password(id)
			set_task(0.2, "menu_delay", id)
		}
		case 1: nick_buy_meniu_sec(id)
		case 2: {
			
			new ammo_packs = zp_get_user_ammo_packs(id)
			if(ammo_packs >= get_pcvar_num(g_vip_cost_ammo)) {
				amx_tempadmin(id, 0)
				zp_set_user_ammo_packs(id, ammo_packs - get_pcvar_num(g_vip_cost_ammo))
				client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "BOUGHT_VIP", get_pcvar_num(g_vip_buy_time))
			
			}
			else client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "MISSING_AMMO", get_pcvar_num(g_vip_cost_ammo)-ammo_packs)
			
			menu_destroy(menu)
			return PLUGIN_HANDLED
		}
	}
	
	menu_destroy(menu)
	return PLUGIN_HANDLED
}
public nick_buy_meniu_sec(id)
{
	new holder[150], menu
	formatex(holder, charsmax(holder), "\r%L", id, "NICK_BUY_MENU_SEC_TOP")
	menu = menu_create(holder, "nick_buy_menu_sec_handler")
	
	formatex(holder, charsmax(holder), "%L", id, "BACK")
	menu_additem(menu, holder)
	
	menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
	menu_display(id, menu, 0)
}
 
public nick_buy_menu_sec_handler(id, menu, item)
{
	nick_buy_meniu(id)
	menu_destroy(menu)
	return PLUGIN_HANDLED;
}

public _menu_callback(id, menu, item) {
	
	if(item == 1) {
		new authid[30]
		get_user_authid(id, authid, charsmax(authid))
		if(equal(authid, "STEAM_0", 7)) return ITEM_ENABLED
		else return ITEM_DISABLED
	}
	
	return ITEM_ENABLED
}

public menu_delay(id) nick_buy_meniu(id)
#endif
public message_cur_weapon(msg_id, msg_dest, msg_entity)
{
	if (!get_pcvar_num(g_unlimited_clip)) return
#if MODE & (1<<0)
	if (!(g_user_privileges[msg_entity] & FLAG_C)) return
#else
	if (!(get_user_flags(msg_entity) & VIPACCES)) return
#endif
	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)
			fm_set_weapon_ammo(weapon_ent, MAXCLIP[weapon])
		}
	}
}

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 MODE & (1<<0)	
		if (g_user_privileges[id] & FLAG_A)
#else
		if (get_user_flags(id) & VIPACCES)
#endif
		{
			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]
	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 MODE & (1<<0)
			if(g_user_privileges[id] & FLAG_A)
#else
			if(get_user_flags(id) & VIPACCES)
#endif
				get_user_name(id, adminnames[count++], 31)

	len = format(message, 255, "%L ", id, "VIP_STATUS")
	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, "/g%s", message)
				len = format(message, 255, "")
			}
		}
		client_printcolor(user, "/g%s", message)
	}
	else {
		len += format(message[len], 255-len, "%L ", id, "VIP_STATUS_N")
		client_printcolor(user, "/g%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_disconnect(id)
{
	jumpnum[id] = 0
	g_damage[id] = 0.0
	dojump[id] = false
}

public client_PreThink(id)
{
#if MODE & (1<<0)
	if(!is_user_alive(id) || !g_jumps || (!(g_user_privileges[id] & FLAG_B))) return PLUGIN_CONTINUE
#else
	if(!is_user_alive(id) || !g_jumps || (!(get_user_flags(id) & MJACCES))) return PLUGIN_CONTINUE
#endif
	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] < chache_g_jumps && 
		((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 MODE & (1<<0)
	if(!is_user_alive(id) || !get_pcvar_num(g_jumps) || (!(g_user_privileges[id] & FLAG_B))) return PLUGIN_CONTINUE
#else
	if(!is_user_alive(id) || !get_pcvar_num(g_jumps) || (!(get_user_flags(id) & MJACCES))) return PLUGIN_CONTINUE
#endif
	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")
#if MODE & (1<<0)
public load_vips_ini() {
	new configsDir[64]
	get_configsdir(configsDir, 63)
	format(configsDir, 63, "%s/vips.ini", configsDir)
	
	new File=fopen(configsDir,"r");
	if (File)
	{
		static Text[512], Flags[32], AuthData[50], Privileges_Flags[32], Password[50]
		while (!feof(File))
		{
			fgets(File,Text,sizeof(Text)-1);
			
			trim(Text);
			
			// comment
			if (Text[0]==';') 
			{
				continue;
			}
			
			Flags[0]=0;
			AuthData[0]=0;
			Privileges_Flags[0]=0;
			Password[0]=0;
			
			// not enough parameters
			if (parse(Text,AuthData,sizeof(AuthData)-1,Password,sizeof(Password)-1,Privileges_Flags,sizeof(Privileges_Flags)-1,Flags,sizeof(Flags)-1) < 2)
			{
				continue;
			}

			vips_database[auth] = AuthData
			vips_database[password] = Password
			vips_database[accessflags] = read_flags(Privileges_Flags)
			vips_database[flags] = read_flags(Flags)
			ArrayPushArray(database_holder, vips_database)
		}
		
		fclose(File);
	}
	else log_to_file("addons/amxmodx/logs/zm_vip.log","Error: vips.ini file doesn't exist")

	for(new i = 1; i <= maxplayers; i++)
	{
		if(!is_user_connecting(i) && !is_user_connected(i))
		{
			continue
		}

		set_flags(i)
	}
}

public reload_vips() {
	if(database_holder) ArrayDestroy(database_holder)
	database_holder = ArrayCreate(database_items)
	load_vips_ini()
	vipySql()
}

stock SQL_Error(Handle:query, const error[], errornum, failstate)
{
	new qstring[1024]
	SQL_GetQueryString(query, qstring, 1023)
	if(failstate == TQUERY_CONNECT_FAILED) 
		log_to_file("addons/amxmodx/logs/zm_vip.log","%L", LANG_SERVER, "TCONNECTION_FAILED")
	else if (failstate == TQUERY_QUERY_FAILED) 
		log_to_file("addons/amxmodx/logs/zm_vip.log","%L", LANG_SERVER, "TQUERY_FAILED")

	log_to_file("addons/amxmodx/logs/zm_vip.log","%L", LANG_SERVER, "TQUERY_MSG", error, errornum)
	log_to_file("addons/amxmodx/logs/zm_vip.log","%L", LANG_SERVER, "TQUERY_STATEMENT", qstring)
	return SQL_FreeHandle(query)
}

public vipySql()
{
	new error[128], errno
	new Handle:sql = SQL_Connect(sqlinfo, errno, error, 127)
	if(sql == Empty_Handle)
	{
		server_print("Cannot connect to sql: %s", error)
		return PLUGIN_HANDLED
	}

	SQL_FreeHandle(sql)

	new pquery[1024]
	formatex(pquery, 1023, "SELECT `auth`, `authid`, `password`, `expired` \
			FROM `amx_sklep` \
			WHERE (`auth` = 0);")

	return SQL_ThreadQuery(sqlinfo, "vipySql_post", pquery)
	
}

public vipySql_post(failstate, Handle:query, const error[], errornum, const data[], size, Float:queuetime)
{
	if(failstate)
		return SQL_Error(query, error, errornum, failstate)

	new VipyCount = 0
	if(SQL_NumResults(query)) 
	{
		
		new qcolAuth = SQL_FieldNameToNum(query, "authid")
		new qcolPass = SQL_FieldNameToNum(query, "password")
		new qcolExpired = SQL_FieldNameToNum(query, "expired")
		new qcolAccess = SQL_FieldNameToNum(query, "auth")

		new AuthData[44]
		new Password[34]
		new Access[32]
		new Expired[32];
		while(SQL_MoreResults(query))
		{
			SQL_ReadResult(query, qcolAuth, AuthData, 43)
			SQL_ReadResult(query, qcolPass, Password, 33)
			SQL_ReadResult(query, qcolAccess, Access, 31)
			SQL_ReadResult(query, qcolExpired, Expired, 31)

			new bool: VipSaved = false;
			new Vipstring[256], Line[512], Date[35], Length;
			new FileLines = file_size("addons/amxmodx/configs/vips.ini",1);
			format_time(Date, charsmax(Date), "%d/%m/%y", str_to_num(Expired));
			formatex(Vipstring, 255, "^"%s^" ^"%s^" ^"abcd^" ^"ab^"^t^t//wazny do %s (dodany z bazy danych) STAMP: %s", AuthData, Password, Date, Expired);
			for(new i = 30; i < FileLines; i++){
				read_file("addons/amxmodx/configs/vips.ini", i, Line, 511, Length);
				if(equal(Line, "")){
					write_file("addons/amxmodx/configs/vips.ini", Vipstring, i)
					VipSaved = true;
					log_to_file("addons/amxmodx/logs/zm_vip.log", "Dodano vipa z bazy danych: %s.", Vipstring);
					break;
				}
			}
			if (!VipSaved){
				write_file("addons/amxmodx/configs/vips.ini", Vipstring);
				log_to_file("addons/amxmodx/logs/zm_vip.log","Dodano vipa z bazy danych: %s", Vipstring);
			}
			
			new pquery[512];
			formatex(pquery, 511, "UPDATE `amx_sklep` SET `auth` = 1 WHERE `authid` = '%s'", AuthData);
			SQL_ThreadQuery(sqlinfo, "update_handler",  pquery);
			/*vips_database[auth] = AuthData
			vips_database[password] = Password
			vips_database[accessflags] = FLAG_A|FLAG_B|FLAG_C|FLAG_D
			ArrayPushArray(database_holder, vips_database)
			*/
			VipyCount++;
			SQL_NextRow(query)
		}
	}

	SQL_FreeHandle(query)
	if(VipyCount == 1)
		server_print("1 Vip zaladowany z sql")
	else
		server_print("%i Vipow zostalo zaladowanych z sql", VipyCount)
		
	return 1
}
#endif

public update_handler(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
	if(Errcode)
	{
		log_to_file("addons/amxmodx/logs/zm_vip.log","Blad zapytania: %s",Error)
	}
	if(FailState == TQUERY_CONNECT_FAILED)
	{
		log_to_file("addons/amxmodx/logs/zm_vip.log","Blad polaczenia z baza danych.")
		return PLUGIN_CONTINUE
	}
	else if(FailState == TQUERY_QUERY_FAILED)
	{
		log_to_file("addons/amxmodx/logs/zm_vip.log","Zapytanie nieudane.")
		return PLUGIN_CONTINUE
	}
	log_to_file("addons/amxmodx/logs/zm_vip.log","Oznaczono wpis jako skopiowany.")
	return PLUGIN_CONTINUE
}

#if MODE & (1<<0) && MODE & (1<<1)
public check_date()
{
	new holder[20]
	new y, m ,d
	date(y, m, d)
	format(holder, charsmax(holder), "m%dd%dy%d", m, d, y)

	new configdir[200]
	get_configsdir(configdir,199)

	new configfile1[200]

	format(configfile1,199,"%s/vips.ini",configdir)
	
	new text[512], len
	new pnum = file_size(configfile1,1)
	for(new i = 1; i < pnum; i++)
	{
		read_file(configfile1, i, text, 511, len)
		if ( contain(text, holder) != -1 ) 
		{
			DeleteLine(configfile1, i)
		}
	}
	return PLUGIN_HANDLED
}

public amx_tempadmin(id, type)
{	
	new authid[31], ip[31], name[51], client_password[20], p_flags[21], sdate[20]
	get_pcvar_string(g_vip_buy_flags, p_flags, charsmax(p_flags))
	get_user_authid(id, authid, charsmax(authid))
	get_user_ip(id, ip, charsmax(ip), 1)
	get_user_name(id, name, charsmax(name))
	get_user_info(id, amx_password_field_string, client_password, charsmax(client_password))
	
	get_date(get_pcvar_num(g_vip_buy_time), sdate, charsmax(sdate))
	
	new holder[200]
	switch(type) {
		case 0: formatex(holder, charsmax(holder), "^"%s^" ^"%s^" ^"%s^" ^"b^"; Exp: %s", name, client_password, p_flags, sdate)
		case 1: formatex(holder, charsmax(holder), "^"%s^" ^"^" ^"%s^" ^"ce^"; Exp: %s", authid, p_flags, sdate)
		case 2: formatex(holder, charsmax(holder), "^"%s^" ^"^" ^"%s^" ^"de^"; Exp: %s", ip, p_flags, sdate)
	}
	
	new configdir[200]
	get_configsdir(configdir, 199)
	new configfile1[200]
	format(configfile1,199,"%s/vips.ini",configdir)
	write_file(configfile1, holder, -1)
	server_cmd("amx_reloadvips")
	set_task(1.0, "set_flags", id)
	
}

removeVIPs(){
	new Line[512], Length;
	new FileLines = file_size("addons/amxmodx/configs/vips.ini",1);
	new current_time = get_systime();
	new Left[20], Right[20];
	new stamp;
	if (FileLines >= 30)
		for(new i = 30; i < FileLines; i++){
			read_file("addons/amxmodx/configs/vips.ini", i, Line, 511, Length);
			split(Line, Left, 19, Right, 19, "STAMP:");
			stamp = str_to_num(Right);
			if (stamp != 0 && stamp < current_time) { 
				write_file("addons/amxmodx/configs/vips.ini", "", i);
				log_to_file("addons/amxmodx/logs/zm_vip.log", "[ZP REWARDS] VIP zostal usuniety: %s", Line);
			}
		}
}

DeleteLine( const szFilename[ ], const iLine )
{
	new iFile = fopen( szFilename, "rt" );
	if( !iFile )
	{
		return;
	}
	static const szTempFilename[ ] = "delete_line.txt";
	new iTempFile = fopen( szTempFilename, "wt" );
    
	new szData[ 256 ], iLineCount, bool:bReplaced = false;
	while( !feof( iFile ) )
	{
		fgets( iFile, szData, 255 );
        
		if( iLineCount++ == iLine )
		{
			bReplaced = true;
		}
		else
		{
			fputs( iTempFile, szData );
		}
	}
    
	fclose( iFile );
	fclose( iTempFile );
    
	if( bReplaced )
	{
		delete_file( szFilename );
        
		while( !rename_file( szTempFilename, szFilename, 1 ) ) { }
	}
	else
	{
		delete_file( szTempFilename );
	}
}

stock get_date(days, string[], chars) {
	
	new y, m, d
	date(y, m ,d)
	
	d+=days
	
	new go = true
	while(go) {
		switch(m) {
			case 1,3, 5, 7, 8, 10: {
				if(d>31) { d=d-31; m++; }
				else go = false
			}
			case 2: {
				if(d>28) { d=d-28; m++; }
				else go = false
			}
			case 4, 6, 9, 11: {
				if(d>30) { d=d-30; m++; }
				else go = false
			}
			case 12: {
				if(d>31) { d=d-31; y++; m=1; }
				else go = false
			}
		}
	}
	formatex(string, chars, "m%dd%dy%d", m, d ,y)
}
#endif

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()
	}
}

stock fm_find_ent_by_owner(entity, const classname[], owner)
{
	while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && pev(entity, pev_owner) != owner) {}
	
	return entity;
}

stock fm_set_weapon_ammo(entity, amount)
{
	set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
}
#if MODE & (1<<0)
public set_flags(id) {
	
	static authid[31], ip[31], name[51], index, client_password[30], size, log_flags[11], MD5Password[34]
	get_user_authid(id, authid, 30)
	get_user_ip(id, ip, 30, 1)
	get_user_name(id, name, 50)
	get_user_info(id, amx_password_field_string, client_password, charsmax(client_password))
	
	g_user_privileges[id] = 0
	size = ArraySize(database_holder)
	for(index=0; index < size ; index++) {
		ArrayGetArray(database_holder, index, vips_database)
		if(vips_database[flags] & FLAG_D) {
			if(equal(ip, vips_database[auth])) {
				if(!(vips_database[flags] & FLAG_E)) {
					if(vips_database[flags] & FLAG_J)
						md5(client_password, MD5Password)
					else
						copy(MD5Password, 33, client_password)

					if(equal(MD5Password, vips_database[password]))
						g_user_privileges[id] = vips_database[accessflags]
					else if(vips_database[flags] & FLAG_A) {
						server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "INV_PAS")
						break
					}
				}
				else g_user_privileges[id] = vips_database[accessflags]
				get_flags(vips_database[accessflags], log_flags, 10)
				log_to_file("addons/amxmodx/logs/zm_vip.log", "%L",LANG_PLAYER, "AUTHORISED", name, authid, ip, log_flags)
				break
			}
		}
		else if(vips_database[flags] & FLAG_C) {
			if(equal(authid, vips_database[auth])) {
				if(!(vips_database[flags] & FLAG_E)) {
					if(vips_database[flags] & FLAG_J)
						md5(client_password, MD5Password)
					else
						copy(MD5Password, 33, client_password)

					if(equal(MD5Password, vips_database[password]))
						g_user_privileges[id] = vips_database[accessflags]
					else if(vips_database[flags] & FLAG_A) {
						server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "INV_PAS")
						break
					}
				}
				else g_user_privileges[id] = vips_database[accessflags]
				get_flags(vips_database[accessflags], log_flags, 10)
				log_to_file("addons/amxmodx/logs/zm_vip.log","%L",LANG_PLAYER, "AUTHORISED", name, authid, ip, log_flags)
				break
			}
		}
		else {
			if(vips_database[flags] & FLAG_K) {
				if((vips_database[flags] & FLAG_B && contain(name, vips_database[auth]) != -1) || equal(name, vips_database[auth])) {
					if(!(vips_database[flags] & FLAG_E)) {
						if(vips_database[flags] & FLAG_J)
							md5(client_password, MD5Password)
						else
							copy(MD5Password, 33, client_password)

						if(equal(MD5Password, vips_database[password]))
							g_user_privileges[id] = vips_database[accessflags]
						else if(vips_database[flags] & FLAG_A) {
							server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "INV_PAS")
							break
						}
					}
					else g_user_privileges[id] = vips_database[accessflags]
					get_flags(vips_database[accessflags], log_flags, 10)
					log_to_file("addons/amxmodx/logs/zm_vip.log","%L",LANG_PLAYER, "AUTHORISED", name, authid, ip, log_flags)
					break
				}
			}
			else {
				if((vips_database[flags] & FLAG_B && containi(name, vips_database[auth]) != -1) || equali(name, vips_database[auth])) {
					if(!(vips_database[flags] & FLAG_E)) {
						if(vips_database[flags] & FLAG_J)
							md5(client_password, MD5Password)
						else
							copy(MD5Password, 33, client_password)

						if(equal(MD5Password, vips_database[password]))
							g_user_privileges[id] = vips_database[accessflags]
						else if(vips_database[flags] & FLAG_A) {
							server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "INV_PAS")
							break
						}
					}
					else g_user_privileges[id] = vips_database[accessflags]
					get_flags(vips_database[accessflags], log_flags, 10)
					log_to_file("addons/amxmodx/logs/zm_vip.log","%L",LANG_PLAYER, "AUTHORISED", name, authid, ip, log_flags)
					break
				}
			}
		}
	}
}
#endif
#if MODE & (1<<0) && MODE & (1<<1)
stock generate_password(id) {
	
	new password_holder[30]
	formatex(password_holder, charsmax(password_holder), "%d%d%d%d%d", random(10), random(10), random(10), random(10), random(10))
	client_cmd(id, "setinfo %s %s", amx_password_field_string, password_holder)
}
#endif
#if MODE & (1<<0)
public native_zv_get_user_flags(id)
	return g_user_privileges[id]
#endif
#if MODE & (1<<1)
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)
	removeVIPs();
}
#endif


public message()
{
	new arg[32]
	get_msg_arg_string(2, arg, 31)
	if(containi(arg,"name")!=-1)
	{
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}
public client_infochanged(id)
{
    new newname[32],oldname[32]
    get_user_info(id, "name", newname,31)
    get_user_name(id,oldname,31)
    if(!is_user_connected(id) || is_user_bot(id)) return PLUGIN_CONTINUE
    if(!equali(newname, oldname))
    {
        set_user_info(id,"name",oldname)
        client_print(id , print_chat , "[ZM VIP] Zakaz zmiany nicka!")
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/


  • +
  • -
  • 0
<img src="http://steamprofile....1:25467514.png" alt="Tekst alternatywny" />

#5 Brybdol

    Życzliwy

  • Użytkownik

Reputacja: 0
zer0.

  • Postów:34
  • Imię:Daniel
Offline

Napisano 02.08.2015 19:04

Ale sobie utrudniacie zycie, wysarczy zrobic VIPA w generatorze http://amxx.pl/vipgenerator/ nata sama flage co aktualny i inaczej nazwac plugin


  • +
  • -
  • 0

#6 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 115
Zaawansowany

  • Postów:250
  • GG:
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 09.08.2015 10:28

wystarczy sprawdzić jak to powiedziałeś "na start" czy gracz posiada flagi 
jeśli tak to dać mu item z pominięciem kosztu. 
Możesz zrobić sobie także natyw, który będzie sprawdzał czy gracz ma już noktowizor by 2 raz go nie dawał :)

p.s co za różnica jakiego pliku używa ? Autor zrobił to tak by vipow dodawac z pliku vips i nie robic sb burdelu w users. 
Ty i tak masz sprawdzić flagi nie plik


  • +
  • -
  • 0

HTML      ★ CSS       ★ JAVASCRIPT       ★ AJAX       ★ JQUERY       ★ PHP       ★ C++       ★ PAWN      ★ SQL       ★ Objective-C++






Również z jednym lub większą ilością słów kluczowych: zombie plague 4.3

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych