noktowizor dla [ZP] Zombie VIP 1.9.1
ZIGI89
22.02.2015
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)
ZIGI89
29.07.2015
/* 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 } */
Brybdol
02.08.2015
Ale sobie utrudniacie zycie, wysarczy zrobic VIPA w generatorze http://amxx.pl/vipgenerator/ nata sama flage co aktualny i inaczej nazwac plugin
Master Yoga
09.08.2015
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