Modificare plugin vipmenu

Modificari necesare ale pluginurilor

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
sammi1
Membru, skill 0
Membru, skill 0
Posts: 49
Joined: 30 Jan 2021, 22:38
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Detinator server CS: Zm.CsPower.Ro
Fond eXtream: 0
Has thanked: 23 times

07 Feb 2021, 03:34

Buna seara sau dimineata, nu-s sigur inca, am un plugin de vip pentru modul zombie, care contine un vipmenu de humans/zombie, la vipmenu pentru humans se gaseste si gloante infinite, as dori daca se poate sa poti alege gloantele infinite o data la 3 runde, adica daca aleg din prima runda gloantele infinite, 2 runde sa nu mai pot alege si a 3-a sa ma lase sa aleg, si tot asa, iar cand nu ma lasa sa aleg gloantele infinite sa pot alege altceva din vipmeniu, tin sa mentionez ca pot alege doar o data pe runda puterile din vipmenu, stiu ca e mai complicat putin ceea ce cer, dar sper sa reusiti, mersi anticipat. (Levin, ma bazez pe tine)

Sursa:

Code: Select all

/*
credite: uclip https://forums.alliedmods.net/showthread.php?p=848357
norecoil: https://www.extreamcs.com/forum/cereri-pluginuri/plugin-norecoil-t291343.html
longjump: from zp40
*/

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <xs>
#include <cstrike>
#include <fun>
#include <biohazard>
#include <dhudmessage>

native set_user_infection_nade(id);

#pragma compress 1

// --------------------------------------------
//   ------------- DE EDITAT ---------------
// --------------------------------------------
new const tag[] = "[Biohazard Vip]";	// tagul in chat
new const SOUND_BLINK[] = {"weapons/flashbang-1.wav"};	// sunetul la teleportare
#define ADMIN_ACCES_ADD	ADMIN_IMMUNITY	// accesul de a da vip prin comanda amx_addvip

#define ORA_INCEPUT	00	// INTERVALUL ORAR (INCEPUT)
#define ORA_SFARSIT	10	// INTERVALUL ORAR (SFARSIT)
// --------------------------------------------
//   ------------- DE EDITAT ---------------
// --------------------------------------------

#define PLUGIN_NAME "BIO VIP System"
#define PLUGIN_NAME_PAUSED "BIO VIP System [OPRIT]"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "YONTU"

#define is_user_valid(%1) (1 <= %1 <= max_players)
#define MAX_MONEY 16000
#define MAX_PLAYERS 32
#define TASK_TELEPORT 2718
#define TASK_MADNESS 2781
#define TASK_VERIFICARE	129891

// weapons offsets
#define OFFSET_CLIPAMMO        51
#define OFFSET_LINUX_WEAPONS    4
#define fm_cs_set_weapon_ammo(%1,%2)    set_pdata_int(%1, OFFSET_CLIPAMMO, %2, OFFSET_LINUX_WEAPONS)

// players offsets
#define m_pActiveItem 373

const DMG_HEGRENADE = (1<<24);
const NOCLIP_WPN_BS = ((1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4));

enum _:vip_data
{
	name[32],
	password[32]
}

enum cvars
{
	hp_spawn = 0,
	ap_spawn,
	show_vip_tab,
	show_bullet_dmg,
	money_infection,
	health_infection,
	teleport_cd,
	multidamage,
	madness_time,
	leap_cooldown,
	leap_force,
	leap_height,
	admin_show_bullet_dmg,
	model
}

new cvar[cvars];
new max_players;
new g_iPlayerPos[MAX_PLAYERS+1], g_iPlayerCol[MAX_PLAYERS+1];
new cvar_password_field;
new Array:vip_array;
new bool:is_user_vip[MAX_PLAYERS+1], vips_number = 0;
new itemIsChosen[MAX_PLAYERS+1][2];
new g_PowerDelay[33];
new ShockWave, BlueFlare, g_msgBarTime;
new Float:cl_pushangle[33][3], weaponname[32];
new Float:g_lastleaptime[33];
new ora = -1, bool:event_on, bool:prima_data;
new bool:existsInFile[33];

// NU SCHIMBA
new const g_name[] = "name";

new const Float:g_flCoords[][] =  
{ 
	{0.50, 0.40}, 
	{0.56, 0.44}, 
	{0.60, 0.50}, 
	{0.56, 0.56}, 
	{0.50, 0.60}, 
	{0.44, 0.56}, 
	{0.40, 0.50}, 
	{0.44, 0.44} 
}

new const g_iColors[][] = 
{ 
	{0, 127, 255}, // blue 
	{255, 127, 0}, // orange 
	{127, 0, 255}, // purple 
	{255, 0, 0}, // red 
	{255, 100, 150}, // pink
	{0, 255, 0} // green
}

new const g_MaxClipAmmo[] = 
{
    0,
    13, //CSW_P228
    0,
    10, //CSW_SCOUT
    0,  //CSW_HEGRENADE
    7,  //CSW_XM1014
    0,  //CSW_C4
    30,//CSW_MAC10
    30, //CSW_AUG
    0,  //CSW_SMOKEGRENADE
    15,//CSW_ELITE
    20,//CSW_FIVESEVEN
    25,//CSW_UMP45
    30, //CSW_SG550
    35, //CSW_GALIL
    25, //CSW_FAMAS
    12,//CSW_USP
    20,//CSW_GLOCK18
    10, //CSW_AWP
    30,//CSW_MP5NAVY
    100,//CSW_M249
    8,  //CSW_M3
    30, //CSW_M4A1
    30,//CSW_TMP
    20, //CSW_G3SG1
    0,  //CSW_FLASHBANG
    7,  //CSW_DEAGLE
    30, //CSW_SG552
    30, //CSW_AK47
    0,  //CSW_KNIFE
    50//CSW_P90
}

public plugin_init()
{	
	new path[64];
	get_localinfo("amxx_configsdir", path, charsmax(path));
	formatex(path, charsmax(path), "%s/vip_maps.ini", path);
	
	new file = fopen(path, "r+");
	
	if(!file_exists(path))
	{
		write_file(path, "; VIP-UL ESTE DEZACTIVAT PE URMATOARELE HARTI: ");
		write_file(path, "; Exemplu de adaugare HARTA:^n; ^"harta^"^n^nfy_snow^ncss_bycastor");
	}
	
	new mapname[32];
	get_mapname(mapname, charsmax(mapname));
	
	new text[121], maptext[32], bool:remove_vip = false;
	while(!feof(file))
	{
		fgets(file, text, charsmax(text));
		trim(text);
		
		if(text[0] == ';' || !strlen(text)) 
		{
			continue; 
		}
		
		parse(text, maptext, charsmax(maptext));
		
		if(equal(maptext, mapname))
		{
			log_amx("Am dezactivat pluginul 'VIP' pe harta %s.", maptext);
			remove_vip = true;
			break;
		}
		
	}
	fclose(file);

	if(!remove_vip)
	{
		register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);

		register_event("Damage", "event_Damage", "b", "2>0", "3=0");
		register_event("HLTV", "event_NewRound", "a", "1=0", "2=0");
		register_event("DeathMsg", "event_DeathMsg", "a");
		register_event("CurWeapon", "event_CurWeapon", "be", "1=1");
		register_event("ResetHUD", "event_ResetModel", "b");

		RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawnPost", 1);
		RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamagePre");

		for(new i = 1; i <= CSW_P90; i++)
		{
			if(!(NOCLIP_WPN_BS & (1<<i)) && get_weaponname(i, weaponname, 31))
			{
				RegisterHam(Ham_Weapon_PrimaryAttack, weaponname, "fw_PrimaryAttack");
				RegisterHam(Ham_Weapon_PrimaryAttack, weaponname, "fw_PrimaryAttackPost", 1);
			}
		}

		register_forward(FM_PlayerPreThink, "fw_PlayerPreThink");
		register_forward(FM_ClientUserInfoChanged, "fw_Userinfochanged");
		
		register_message(get_user_msgid("ScoreAttrib"), "msg_ScoreAttrib");
		g_msgBarTime = get_user_msgid("BarTime");

		register_clcmd("say /vips", "CmdVipsOnline");
		register_clcmd("say_team /vips", "CmdVipsOnline");
		register_clcmd("say vips", "CmdVipsOnline");
		register_clcmd("say_team vips", "CmdVipsOnline");
		
		register_clcmd("say vip", "CmdPrintAttributes");
		register_clcmd("say_team vip", "CmdPrintAttributes");
		register_clcmd("say /vip", "CmdPrintAttributes");
		register_clcmd("say_team /vip", "CmdPrintAttributes");
		register_clcmd("say wantvip", "CmdPrintAttributes2");
		register_clcmd("say_team wantvip", "CmdPrintAttributes2");
		register_clcmd("say /wantvip", "CmdPrintAttributes2");
		register_clcmd("say_team /wantvip", "CmdPrintAttributes2");

		register_clcmd("say admbenefits", "CmdPrintAttributes3");
		register_clcmd("say_team admbenefits", "CmdPrintAttributes3");
		register_clcmd("say /admbenefits", "CmdPrintAttributes3");
		register_clcmd("say_team /admbenefits", "CmdPrintAttributes3");
		
		register_clcmd("say /boost", "CmdPrintAttributes4");
		register_clcmd("say_team /boost", "CmdPrintAttributes4");

		register_clcmd("say /vm", "cmd_vipmenu");
		register_clcmd("say_team /vm", "cmd_vipmenu");
		register_clcmd("say vm", "cmd_vipmenu");
		register_clcmd("say_team vm", "cmd_vipmenu");
		register_clcmd("say /vipmenu", "cmd_vipmenu");
		register_clcmd("say_team /vipmenu", "cmd_vipmenu");
		register_clcmd("say vipmenu", "cmd_vipmenu");
		register_clcmd("say_team vipmenu", "cmd_vipmenu");

		register_clcmd("drop", "cmd_use_ability");
		
		register_concmd("amx_addvip", "cmd_add_vip", ADMIN_ACCES_ADD, "<nume> <parola> <comentariu>");

		time(ora, _, _);
		event_on = (ora >= ORA_INCEPUT || ora < ORA_SFARSIT) ? true : false;
		prima_data = true;
		
		set_task(10.0, "verifica_ora", TASK_VERIFICARE, _, _, "b");
		set_task(1.0, "anunta_jucatori", _, _, _, "b");
		max_players = get_maxplayers();
	}
	else
	{
		register_plugin(PLUGIN_NAME_PAUSED, PLUGIN_VERSION, PLUGIN_AUTHOR);
		pause("ade");
	}
	
	register_cvar("vip_", PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER);
	set_cvar_string("vip_", PLUGIN_VERSION);
}

public plugin_precache()
{
	cvar_password_field = register_cvar("amxx_password_field", "_pw");
	cvar[hp_spawn] = register_cvar("bh_vip_hp_spawn", "200");			// 0 = dezactivat
	cvar[ap_spawn] = register_cvar("bh_vip_ap_spawn", "1");			// 0/1
	cvar[show_vip_tab] = register_cvar("bh_vip_show_tab", "0");			// 0/1
	cvar[show_bullet_dmg] = register_cvar("bh_vip_show_bullet_dmg", "1");	// 0/1
	cvar[money_infection] = register_cvar("bh_vip_infection_money", "200");	// 0 = dezactivat
	cvar[health_infection] = register_cvar("bh_vip_infection_hp", "10");	// 0 = dezactivat
	cvar[teleport_cd] = register_cvar("bh_vip_teleport_cd", "10");
	cvar[multidamage] = register_cvar("bh_vip_multidamage", "50");	// 50 = 0.5, 100 = 1.0, etc
	cvar[madness_time] = register_cvar("bh_vip_madness_time", "3");
	cvar[leap_cooldown] = register_cvar("bh_vip_leap_cd", "5");
	cvar[leap_force] = register_cvar("bh_vip_leap_force", "500");
	cvar[leap_height] = register_cvar("bh_vip_leap_height", "300");
	cvar[admin_show_bullet_dmg] = register_cvar("bh_admin_show_bullet_dmg", "1");
	cvar[model] = register_cvar("bh_vip_model", "vipMDL");

	precache_sound(SOUND_BLINK);
	ShockWave = precache_model("sprites/shockwave.spr");
	BlueFlare = precache_model("sprites/blueflare2.spr");

	static buffer[64], cvar_mdl[64];
	get_pcvar_string(cvar[model], cvar_mdl, 63);
	format(buffer, 63, "models/player/%s/%s.mdl", cvar_mdl, cvar_mdl);
	precache_model(buffer);

	read_vip_file();
}

public cmd_add_vip(id, level, cid)
{
	if(!cmd_access(id, level, cid, 4))
		return 1;

	new target[32], target_password[32], comment[256];
	read_argv(1, target, 31);
	read_argv(2, target_password, 31);
	read_argv(2, comment, 255);
	
	new player = cmd_target(id, target, 8);
	
	if(!player)
		return PLUGIN_HANDLED;
	
	new playername[32], adminame[32];
	get_user_name(player, playername, 31);
	get_user_name(id, adminame, 31);
	
	new configsDir[64];
	get_configsdir(configsDir, 63);
	format(configsDir, 63, "%s/vips.ini", configsDir);

	if(!file_exists(configsDir))
	{
		console_print(id, "%s File ^"%s^" doesn't exist.", tag, configsDir);
		return PLUGIN_HANDLED;
	}

	new line = 0, textline[256], len, vip_info[vip_data];
	while((line = read_file(configsDir, line, textline, 255, len)))
	{
		if(len == 0 || equal(textline, ";", 1))
			continue;
		
		if(parse(textline, vip_info[name], 31, vip_info[password], 31) != 2)
			continue;
		
		if(equal(vip_info[name], playername))
		{
			console_print(id, "%s %s este deja vip si exista in fisier.", tag, playername);
			return PLUGIN_HANDLED;
		}
	}
	
	new linetoadd[256];
	if(comment[0] == 0)
		formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^"", playername, target_password);
	else
		formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^" ; %s", playername, target_password, comment);
	
	console_print(id, "Adding: %s", linetoadd);
	
	if(!write_file(configsDir, linetoadd))
		console_print(id, "%s Failed writing to %s!", tag, configsDir);
	
	console_print(id, "%s %s a fost adaugat in vips.ini!", tag, playername);
	read_vip_file();
	is_user_vip[player] = true;

	ColorChat(0, "!4%s!1 Adminul!3 %s!1 l-a adaugat VIP pe!3 %s!1!", tag, adminame, playername);
	ColorChat(player, "!4%s!1 Felicitari! Ai fost adaugat ca membru!3 VIP!1!", tag);

	return PLUGIN_HANDLED;
}

read_vip_file()
{
	new path[64];
	get_localinfo("amxx_configsdir", path, charsmax(path));
	format(path, charsmax(path), "%s/vips.ini", path);
	
	new file = fopen(path, "r+");
	
	if(!file_exists(path))
	{
		new format_txt[128];
		log_to_file("vip_errors.txt", "Nu am gasit fisierul '%s'. Il creez acum!", path);

		format(format_txt, charsmax(format_txt), ";------------ | %s - Configuration file | ------------", PLUGIN_NAME);
		write_file(path, format_txt);
		format(format_txt, charsmax(format_txt), ";-------------------------- | by %s | --------------------------^n^n", PLUGIN_AUTHOR);
		write_file(path, format_txt);
		write_file(path, "; Exemplu de adaugare VIP:^n; ^"NUME^" ^"PAROLA^"^n^n^n");
	}
	
	if(vips_number)
	{
		ArrayClear(vip_array);
		vips_number = 0;
	}
	
	new text[121], p_name[32], p_password[32], vip_infos[vip_data];
	while(!feof(file))
	{
		fgets(file, text, charsmax(text));
		trim(text);
		
		if(text[0] == ';' || !strlen(text)) 
		{
			continue; 
		}
		
		if(parse(text, p_name, charsmax(p_name), p_password, charsmax(p_password)) != 2)
		{
			log_to_file("vip_errors.txt", "[AMXX] Nu am putut delimita linia (%s). Este scrisa gresit.", text);
			continue;
		}
		
		copy(vip_infos[name], charsmax(vip_infos), p_name);
		copy(vip_infos[password], charsmax(vip_infos), p_password);
		ArrayPushArray(vip_array, vip_infos);
		vips_number++;
	}
	
	fclose(file);
	
	switch(vips_number)
	{
		case 0: server_print("[AMXX] Nu am gasit nici un VIP in fisier.");
		default: server_print("[AMXX] Am incarcat %d VIP%s din fisier.", vips_number, vips_number == 1 ? "" : "I");
	}
}

public plugin_natives()
{
	vip_array = ArrayCreate(vip_data);
	
	register_native("is_user_vip", "native_is_user_vip", 1);
	register_native("set_user_vip", "native_set_user_vip", 1);
}

public plugin_end()
{
	ArrayDestroy(vip_array);
}

public native_is_user_vip(id)
{
	return is_user_vip[id];
}

public native_set_user_vip(id, bool:value)
{
	return is_user_vip[id] = (value == true) ? true : false;
}

public client_disconnect(id)
{
	is_user_vip[id] = false;
}

public client_putinserver(id)
{
	new p_name[32], p_password_field[32], p_password[32];
	get_user_info(id, "name", p_name, charsmax(p_name));
	get_pcvar_string(cvar_password_field, p_password_field, charsmax(p_password_field));
	get_user_info(id, p_password_field, p_password, charsmax(p_password));
	is_user_vip[id] = false;
	new vip_infos[vip_data], i;
	
	for(i = 0; i < vips_number; i++)
	{
		ArrayGetArray(vip_array, i, vip_infos);
		
		if(equal(vip_infos[name], p_name))
		{
			if(equal(vip_infos[password], p_password))
			{
				is_user_vip[id] = true;
				existsInFile[id] = true;
			}
			else
			{
				server_cmd("kick #%d ^"Parola gresita...^"", get_user_userid(id));
			}
			
			break;
		}
	}

	if(is_user_vip[id])
	{
		new namev[33];
		get_user_info(id,"name", namev, charsmax(namev));
		ColorChat(0, "!4[BIO-VIP]!1 VIP-ul!3 %s!1 s-a conectat pe server.", namev);
	}
	else
	{
		existsInFile[id] = false;
	}
}

public CmdVipsOnline(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE;

	new adminnames[33][32], message[512], i, count, len;
	len = format(message, charsmax(message), "!4%s!3 VIPS ONLINE: ", tag);
	for(i = 1; i <= max_players; i++)
	{
		if(is_user_connected(i) && is_user_vip[i])
			get_user_name(i, adminnames[count++], charsmax(adminnames[]));
	}
	
	if(count > 0)
	{
		for(i = 0; i < count; i++)
		{
			len += format(message[len], charsmax(message)-len, "!4%s!1%s", adminnames[i], i < (count - 1) ? " | " : "");
			if(len > 96)
			{
				ColorChat(id, message);
				len = format(message, charsmax(message), "");
			}
		}
		ColorChat(id, message);
	}
	else
	{
		len += format(message[len], charsmax(message)-len, "!4Nici un VIP Online !")
		ColorChat(id, message);
	}

	return PLUGIN_CONTINUE;
}

public CmdPrintAttributes(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "vip.txt", "Beneficii VIP");
}

public CmdPrintAttributes2(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "wantvip.txt", "VIP Benefits");
}

public CmdPrintAttributes3(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "adminsbenefits.txt", "Beneficii ADMINI");
}

public CmdPrintAttributes4(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "boost.txt", "Boost SMS");
}

public cmd_vipmenu(id) {
	if (!is_user_vip[id]) {
		ColorChat(id, "!4%s!3[RO]!1 Nu esti !4Membru VIP!1. Tasteaza !3/vip!1 pentru a vedea Beneficiile Vip.", tag);
		ColorChat(id, "!4%s!3[EN]!1 You are not a !4VIP Member!1. Type !3/wantvip!1 for further information.", tag);
		return PLUGIN_HANDLED;
	}
	if(!game_started()) {
		ColorChat(id, "!4%s!3[RO]!4 VIPMENU !1poate fi folosit dupa infectie.", tag);
		ColorChat(id, "!4%s!3[EN]!4 VIPMENU !1can be used after infection.", tag);
		return PLUGIN_HANDLED;
	}
	if ((is_user_zombie(id) && itemIsChosen[id][1] != -1) || (is_user_zombie(id) && itemIsChosen[id][0] != -1) || (!is_user_zombie(id) && itemIsChosen[id][0] != -1)) {
		ColorChat(id, "!4%s!3[RO]!1 Ai folosit o data runda aceasta !4VIPMENU, !1incearca runda viitoare!", tag);
		ColorChat(id, "!4%s!3[EN]!1 You already use this round !4VIPMENU, !1try next round!", tag);
		return PLUGIN_HANDLED;
	}
	static menu;
	static item_info[256];
	if (!is_user_zombie(id)) {
		menu = menu_create("\rSurvivors VIP Menu", "HumansHandler");
		
		formatex(item_info, 255, "\yMareste Damage-ul cu \r%d%", get_pcvar_num(cvar[multidamage]));
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\yTeleport (\r%d Secunde\y)", get_pcvar_num(cvar[teleport_cd]));
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\yGloante Infinite");
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\yNo Recoil");
		menu_additem(menu, item_info);

		menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, menu, 0);
	} else {
		menu = menu_create("\rZombies VIP Menu", "ZombiesHandler");
		
		formatex(item_info, 255, "\yGodMode (\r%d Seconde\y)", get_pcvar_num(cvar[madness_time]));
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\yLongjump");
		menu_additem(menu, item_info);

		formatex(item_info, 255, "\yInfection Nade");
		menu_additem(menu, item_info);

		menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, menu, 0);
	}
	return PLUGIN_CONTINUE;
}

public HumansHandler(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}

	itemIsChosen[id][0] = item;
	
	switch(item) {
		case 0: {
			ColorChat(id, "!4%s!3[RO]!1 Damage-ul tau a crescut cu!3 %d%%!1. !4Have Fun!", tag, get_pcvar_num(cvar[multidamage]));
			ColorChat(id, "!4%s!3[EN]!1 Your damage has been incresed by!3 %d%%!1. !4Have Fun!", tag, get_pcvar_num(cvar[multidamage]));
		}
		case 1: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit Teleport, te poti teleporta apsand!4 Tasta [G] !1.", tag);
			ColorChat(id, "!4%s!3[RO]!1 Poti folosi o data la:!3 %d secunde", tag, get_pcvar_num(cvar[teleport_cd]));
			ColorChat(id, "!4%s!3[EN]!1 You can teleport to cursor position by pressing!4 [G] key!1.", tag);
			ColorChat(id, "!4%s!3[EN]!1 Cooldown ability:!3 %d seconds", tag, get_pcvar_num(cvar[teleport_cd]));
		}
		case 2: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit!3 Gloante Infinite. !4Enjoy!", tag);
			ColorChat(id, "!4%s!3[EN]!1 You got!3 Unlimited Clip. !4Enjoy!", tag);
		}
		case 3: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit!3 No Recoil. !4Good Luck!", tag);
			ColorChat(id, "!4%s!3[EN]!1 You got!3 No Recoil. !4Good Luck!", tag);
		}
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public ZombiesHandler(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}

	itemIsChosen[id][1] = item;
	
	switch(item) {
		case 0: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit GodMode, pentru!3 %d secunde!1 apasa!4 Tasta [G]!1.", tag, get_pcvar_num(cvar[madness_time]));
			ColorChat(id, "!4%s!3[EN]!1 You got GodMode, for!3 %d seconds!1 pressing!4 [G] key!1.", tag, get_pcvar_num(cvar[madness_time]));
		}
		case 1: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit!3 Long Jump. !4Enjoy!", tag);
			ColorChat(id, "!4%s!3[RO]!1 Poti folosi o data la:!3 %d secunde!1.", tag, get_pcvar_num(cvar[leap_cooldown]));
			ColorChat(id, "!4%s!3[EN]!1 You got!3 Long Jump. !4Enjoy!", tag);
			ColorChat(id, "!4%s!3[EN]!1 Cooldown ability:!3 %d seconds!1.", tag, get_pcvar_num(cvar[leap_cooldown]));
		}
		case 2: {
			set_user_infection_nade(id);
			ColorChat(id, "!4%s!3[RO]!1 Ai primit !3Grenade Infection. !4Have Fun!", tag);
			ColorChat(id, "!4%s!3[RO]!1 Atentie, la ultimul !3Om !1ramas in !3viata !1nu v-a avea efect.", tag);
			ColorChat(id, "!4%s!3[EN]!1 You got !3Grenade Infection. !4Have Fun!", tag);
			ColorChat(id, "!4%s!3[EN]!1 Attention the last !3Human !1left !3alive !1will no have effect.", tag);
		}
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public cmd_use_ability(id) {
	if (!is_user_vip[id])
		return PLUGIN_CONTINUE;

	if (is_user_alive(id)) {
		if (g_PowerDelay[id] > 0) {
			set_dhudmessage(0, 255, 255, -1.0, 0.88, 0, _, 1.0);
			show_dhudmessage(id, "Incarcare.^n(%d secunde%s ramase)", g_PowerDelay[id], g_PowerDelay[id] == 1 ? "a" : "e");
			return PLUGIN_HANDLED_MAIN;
		} else {
			if (!is_user_zombie(id)) {
				if (itemIsChosen[id][0] == 1) {
					if (teleport(id)) {
						g_PowerDelay[id] = max(get_pcvar_num(cvar[teleport_cd]), 1);
						PowerDelay(id);
						return PLUGIN_HANDLED_MAIN;
					} else {
						ColorChat(id, "!4%s!3[RO]!1 Pozitie !3invalida!1.", tag);
						ColorChat(id, "!4%s!3[EN]!1 Invalid !3position.", tag);
						return PLUGIN_HANDLED_MAIN;
					}
				}
			} else {
				if (itemIsChosen[id][1] == 0) {
					itemIsChosen[id][1] = 2; // bug fix (ca sa nu spameze g de 10000000 mil ori)
					static madnessDuration;
					madnessDuration = get_pcvar_num(cvar[madness_time]);

					message_begin(MSG_ONE_UNRELIABLE, g_msgBarTime, _, id);
					write_byte(madnessDuration);
					write_byte(0);
					message_end();
					
					set_user_godmode(id, 1);
					set_task(float(madnessDuration), "stop_madness", id+TASK_MADNESS);
				}
			}
		}
	}
	return PLUGIN_CONTINUE;
}

public stop_madness(taskid) {
	new id = taskid - TASK_MADNESS;
	set_user_godmode(id);
	remove_bartime(id);
	ColorChat(id, "!4%s!3[RO]!1 GodMode-ul a !3expirat!1.", tag);
	ColorChat(id, "!4%s!3[EN]!1 GodMode-ul has !3expired!1.", tag);
}

public PowerDelay(id) {
	if (id >= TASK_TELEPORT)
		id -= TASK_TELEPORT;
	
	if (is_user_alive(id)) {
		if (g_PowerDelay[id] > 1) {
			g_PowerDelay[id]--;
			set_task(1.0, "PowerDelay", id+TASK_TELEPORT);
		} else if (g_PowerDelay[id] <= 1) {
			g_PowerDelay[id] = 0;
			
			set_dhudmessage(255, 255, 0, -1.0, 0.88, 0, _, 2.0);
			show_dhudmessage(id, "Teleport-ul este gata.^nApasa G pentru a folosi.");
		}
	}
}

public PowerReset(id) {
	task_exists(TASK_TELEPORT + id) ? remove_task(TASK_TELEPORT + id) : 0;
	g_PowerDelay[id] = 0;
}

public event_infect(victim, attacker) {
	if (victim != attacker && is_user_alive(attacker) && is_user_vip[attacker]) {
		cs_set_user_money(attacker, min(cs_get_user_money(attacker) + get_pcvar_num(cvar[money_infection]), MAX_MONEY));
		set_user_health(attacker, get_user_health(attacker) + get_pcvar_num(cvar[health_infection]));
	}
}

public event_Damage(victim)
{
	new id = get_user_attacker(victim);
	if(is_user_valid(id))
	{
		if(is_user_alive(id) && (is_user_vip[id] && get_pcvar_num(cvar[show_bullet_dmg]) == 1) || (get_user_flags(id)&ADMIN_LEVEL_A && get_pcvar_num(cvar[admin_show_bullet_dmg]) == 1))
		{
			if(read_data(4) || read_data(5) || read_data(6))
			{		
				new iPos = ++g_iPlayerPos[id];
				if(iPos == sizeof(g_flCoords))
					iPos = g_iPlayerPos[id] = 0;
				
				new iCol = ++g_iPlayerCol[id];
				if(iCol == sizeof(g_iColors))
					iCol = g_iPlayerCol[id] = 0;
				
				set_hudmessage(g_iColors[iCol][0], g_iColors[iCol][1], g_iColors[iCol][2], Float:g_flCoords[iPos][0], Float:g_flCoords[iPos][1], 0, 0.1, 2.5, 0.02, 0.02, -1);
				show_hudmessage(id, "%d", read_data(2));
			}
		}
	}
	
	return PLUGIN_CONTINUE;
}

public event_NewRound()
{
	static i;
	for (i = 0; i < max_players; i++) {
		itemIsChosen[i][0] = -1;
		itemIsChosen[i][1] = -1;
		PowerReset(i);
		remove_bartime(i);
	}
}

public event_CurWeapon(id)
{
	if (!is_user_alive(id))
		return PLUGIN_HANDLED;

	if (!is_user_vip[id])
		return PLUGIN_CONTINUE;

	if (itemIsChosen[id][0] != 2)
		return PLUGIN_HANDLED;

	new weapon = read_data(2);
	if (!(NOCLIP_WPN_BS & (1<<weapon))) {
		fm_cs_set_weapon_ammo(get_pdata_cbase(id, m_pActiveItem), g_MaxClipAmmo[weapon]);
	}
	return PLUGIN_CONTINUE;
}

public event_DeathMsg()
{
	PowerReset(read_data(2));
}

public event_ResetModel(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE;

	if(is_user_alive(id) && !is_user_vip[id])
		return PLUGIN_CONTINUE;

	new mdl_buffer[64];
	get_pcvar_string(cvar[model], mdl_buffer, 63);

	new CsTeams:userTeam = cs_get_user_team(id);
	if(userTeam == CS_TEAM_T || userTeam == CS_TEAM_CT)
	{
		cs_set_user_model(id, mdl_buffer);
		return PLUGIN_HANDLED;
	}
	else
	{
		cs_reset_user_model(id);
	}

	return PLUGIN_CONTINUE;
}

public fw_PlayerSpawnPost(id)
{
	if(is_user_vip[id] && is_user_alive(id))
	{
		set_task(0.25, "give_items", id);
		return HAM_IGNORED;
	}
	
	return HAM_IGNORED;
}

public give_items(id)
{
	new cache = get_pcvar_num(cvar[hp_spawn])
	if(cache != 0) set_user_health(id, cache);

	cache = get_pcvar_num(cvar[ap_spawn]);
	if(cache != 0) give_item(id, "item_assaultsuit");
}

public fw_TakeDamagePre(victim, iInflictor, attacker, Float:fDamage, iDmgType)
{
	if(victim == attacker || !is_user_valid(attacker) || !is_user_alive(attacker) || !is_user_zombie(victim))
		return HAM_HANDLED;

	if (!is_user_vip[attacker])
		return HAM_IGNORED;

	if (itemIsChosen[attacker][0] == 0) {
		static Float:current_damage;
		current_damage = fDamage;
		fDamage = fDamage + fDamage * (get_pcvar_num(cvar[multidamage]) / 100.0);

		if(iDmgType & DMG_HEGRENADE)
			fDamage = current_damage;
		
		SetHamParamFloat(4, fDamage);
		return HAM_HANDLED;
	}
	return HAM_IGNORED;
}

public fw_PrimaryAttack(ent)
{
	new id = pev(ent, pev_owner);
	if(is_user_alive(id) && is_user_vip[id] && itemIsChosen[id][0] == 3)
		pev(id, pev_punchangle, cl_pushangle[id]);

	return HAM_IGNORED;
}

public fw_PrimaryAttackPost(ent)
{
	new id = pev(ent, pev_owner);
	if(is_user_alive(id) && is_user_vip[id] && itemIsChosen[id][0] == 3)
	{
		new Float:fPush[3];
		pev(id, pev_punchangle, fPush);

		xs_vec_sub(fPush, cl_pushangle[id], fPush );
		xs_vec_mul_scalar(fPush, random_float(0.0, 0.2), fPush);
		xs_vec_add(fPush, cl_pushangle[id], fPush );

		set_pev(id, pev_punchangle, fPush);
	}
	
	return HAM_IGNORED;
}

public fw_PlayerPreThink(id)
{	
	// --- Check if player should leap ---
	if (is_user_alive(id) && is_user_zombie(id) && is_user_vip[id] && itemIsChosen[id][1] == 1) {
		// Check if proper CVARs are enabled and retrieve leap settings
		static Float:cooldown, Float:current_time;
		cooldown = 5.0;
		current_time = get_gametime()
		
		// Cooldown not over yet
		if (current_time - g_lastleaptime[id] < cooldown)
			return;
		
		// Not doing a longjump (don't perform check for bots, they leap automatically)
		if (!is_user_bot(id) && !(pev(id, pev_button) & (IN_JUMP | IN_DUCK) == (IN_JUMP | IN_DUCK)))
			return;

		// Not on ground or not enough speed
		if (!(pev(id, pev_flags) & FL_ONGROUND) || fm_get_speed(id) < 80)
			return;
		
		static Float:velocity[3];
		
		// Make velocity vector
		velocity_by_aim(id, get_pcvar_num(cvar[leap_force]), velocity);
		
		// Set custom height
		velocity[2] = float(get_pcvar_num(cvar[leap_height]));
		
		// Apply the new velocity
		set_pev(id, pev_velocity, velocity);
		
		// Update last leap time
		g_lastleaptime[id] = current_time;
	}
}

public fw_Userinfochanged(id, buffer)
{
	if (!is_user_connected(id))
		return FMRES_IGNORED;

	static oldname[32], newname[32]
	get_user_name(id, oldname, 31);
	engfunc(EngFunc_InfoKeyValue, buffer, g_name, newname, 31);

	if (equal(newname, oldname))
		return FMRES_IGNORED;

	client_putinserver(id);
	return FMRES_IGNORED;
}

public msg_ScoreAttrib(msgid, dest, id)
{
	if(!get_pcvar_num(cvar[show_vip_tab]))
		return PLUGIN_CONTINUE;
		
	new id = get_msg_arg_int(1);
	if(is_user_connected(id) && is_user_vip[id])
		set_msg_arg_int(2, ARG_BYTE, is_user_alive(id) ? (1<<2) : (1<<0));
	
	return PLUGIN_CONTINUE;
}

public verifica_ora(task)
{
	time(ora, _, _);
	event_on = (ora >= ORA_INCEPUT && ora < ORA_SFARSIT) ? true : false;

	new jucatori[32], numar = 0, i, id;
	if(event_on)
	{
		if(prima_data)
		{
			ColorChat(id, "!4--------------------------------------------------------");
			ColorChat(id, "!4***!1 EVENTUL!3 VIP FREE!1 A FOST ACTIVAT.");
			ColorChat(id, "!4***!1 Acesta va fi dezactivat la ora!4 %d!1.", ORA_SFARSIT);
			ColorChat(id, "!4--------------------------------------------------------");

			prima_data = false;
		}

		get_players(jucatori, numar);
		for(i = 0; i < numar; i++)
		{
			id = jucatori[i];
			is_user_vip[id] = true;
		}
	}
	else
	{
		if(!prima_data)
		{
			get_players(jucatori, numar);
			for(i = 0; i < numar; i++)
			{
				id = jucatori[i];
				is_user_vip[id] = existsInFile[id];
				ColorChat(id, "!4-------------------------------------------------------------");
				ColorChat(id, "!4***!1 EVENTUL!3 VIP FREE!1 A FOST DEZACTIVAT.");
				ColorChat(id, "!4***!1 Acesta va reincepe la ora!4 %d!1.", ORA_INCEPUT);
				ColorChat(id, "!4-------------------------------------------------------------");
			}
			prima_data = true;
		}
	}
}

public anunta_jucatori()
{
	if(!event_on)
		return;

	set_hudmessage(30, 120, 225, 0.0, 0.3, 1, 3.0, 3.0);
	show_hudmessage(0, "EVENT V.I.P FREE");
}

stock ColorChat(id, String[], any:...) 
{
	static szMesage[192];
	vformat(szMesage, charsmax(szMesage), String, 3);
	
	replace_all(szMesage, charsmax(szMesage), "!1", "^1");
	replace_all(szMesage, charsmax(szMesage), "!3", "^3");
	replace_all(szMesage, charsmax(szMesage), "!4", "^4");
	
	static g_msg_SayText = 0;
	if(!g_msg_SayText)
		g_msg_SayText = get_user_msgid("SayText");
	
	new Players[32], iNum = 1, i;

 	if(id) Players[0] = id;
	else get_players(Players, iNum, "ch");
	
	for(--iNum; iNum >= 0; iNum--) 
	{
		i = Players[iNum];
		
		message_begin(MSG_ONE_UNRELIABLE, g_msg_SayText, _, i);
		write_byte(i);
		write_string(szMesage);
		message_end();
	}
}

public remove_bartime(id)
{
	if(task_exists(id+TASK_MADNESS))
	{
		message_begin(MSG_ONE_UNRELIABLE, g_msgBarTime, _, id);
		write_byte(0);
		write_byte(0);
		message_end();
		
		remove_task(id+TASK_MADNESS);
	}
}

// Get entity's speed (from fakemeta_util)
stock fm_get_speed(entity)
{
	static Float:velocity[3]
	pev(entity, pev_velocity, velocity)
	
	return floatround(vector_length(velocity));
}

bool:teleport(id)
{
	new Float:vOrigin[3], Float:vNewOrigin[3], Float:vNormal[3], Float:vTraceDirection[3], Float:vTraceEnd[3];
	
	pev(id, pev_origin, vOrigin);
	
	velocity_by_aim(id, 99999, vTraceDirection);
	xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
	
	engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
	
	new Float:flFraction;
	get_tr2(0, TR_flFraction, flFraction);

	if(flFraction < 1.0)
	{
		get_tr2(0, TR_vecEndPos, vTraceEnd);
		get_tr2(0, TR_vecPlaneNormal, vNormal);
	}
	
	xs_vec_mul_scalar(vNormal, 40.0, vNormal);
	xs_vec_add(vTraceEnd, vNormal, vNewOrigin);
	
	if(is_player_stuck(id, vNewOrigin))
		return false;
	
	emit_sound(id, CHAN_STATIC, SOUND_BLINK, 1.0, ATTN_NORM, 0, PITCH_NORM);
	tele_effect(vOrigin);
	
	engfunc(EngFunc_SetOrigin, id, vNewOrigin);
	
	tele_effect2(vNewOrigin);

	return true;
}
RoyalServer
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

08 Feb 2021, 17:15

Code: Select all

/*
credite: uclip https://forums.alliedmods.net/showthread.php?p=848357
norecoil: https://www.extreamcs.com/forum/cereri-pluginuri/plugin-norecoil-t291343.html
longjump: from zp40
*/

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <xs>
#include <cstrike>
#include <fun>
#include <biohazard>
#include <dhudmessage>

native set_user_infection_nade(id);

#pragma tabsize 0

static	ASTEPTARE	=	2	//in runde
new uia[33]

// --------------------------------------------
//   ------------- DE EDITAT ---------------
// --------------------------------------------
new const tag[] = "[Biohazard Vip]";	// tagul in chat
new const SOUND_BLINK[] = {"weapons/flashbang-1.wav"};	// sunetul la teleportare
#define ADMIN_ACCES_ADD	ADMIN_IMMUNITY	// accesul de a da vip prin comanda amx_addvip

#define ORA_INCEPUT	00	// INTERVALUL ORAR (INCEPUT)
#define ORA_SFARSIT	10	// INTERVALUL ORAR (SFARSIT)
// --------------------------------------------
//   ------------- DE EDITAT ---------------
// --------------------------------------------

#define PLUGIN_NAME "BIO VIP System"
#define PLUGIN_NAME_PAUSED "BIO VIP System [OPRIT]"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "YONTU"

#define is_user_valid(%1) (1 <= %1 <= max_players)
#define MAX_MONEY 16000
#define MAX_PLAYERS 32
#define TASK_TELEPORT 2718
#define TASK_MADNESS 2781
#define TASK_VERIFICARE	129891

// weapons offsets
#define OFFSET_CLIPAMMO        51
#define OFFSET_LINUX_WEAPONS    4
#define fm_cs_set_weapon_ammo(%1,%2)    set_pdata_int(%1, OFFSET_CLIPAMMO, %2, OFFSET_LINUX_WEAPONS)

// players offsets
#define m_pActiveItem 373

const DMG_HEGRENADE = (1<<24);
const NOCLIP_WPN_BS = ((1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4));

enum _:vip_data
{
	name[32],
	password[32]
}

enum cvars
{
	hp_spawn = 0,
	ap_spawn,
	show_vip_tab,
	show_bullet_dmg,
	money_infection,
	health_infection,
	teleport_cd,
	multidamage,
	madness_time,
	leap_cooldown,
	leap_force,
	leap_height,
	admin_show_bullet_dmg,
	model
}

new cvar[cvars];
new max_players;
new g_iPlayerPos[MAX_PLAYERS+1], g_iPlayerCol[MAX_PLAYERS+1];
new cvar_password_field;
new Array:vip_array;
new bool:is_user_vip[MAX_PLAYERS+1], vips_number = 0;
new itemIsChosen[MAX_PLAYERS+1][2];
new g_PowerDelay[33];
new ShockWave, BlueFlare, g_msgBarTime;
new Float:cl_pushangle[33][3], weaponname[32];
new Float:g_lastleaptime[33];
new ora = -1, bool:event_on, bool:prima_data;
new bool:existsInFile[33];

// NU SCHIMBA
new const g_name[] = "name";

new const Float:g_flCoords[][] =  
{ 
	{0.50, 0.40}, 
	{0.56, 0.44}, 
	{0.60, 0.50}, 
	{0.56, 0.56}, 
	{0.50, 0.60}, 
	{0.44, 0.56}, 
	{0.40, 0.50}, 
	{0.44, 0.44} 
}

new const g_iColors[][] = 
{ 
	{0, 127, 255}, // blue 
	{255, 127, 0}, // orange 
	{127, 0, 255}, // purple 
	{255, 0, 0}, // red 
	{255, 100, 150}, // pink
	{0, 255, 0} // green
}

new const g_MaxClipAmmo[] = 
{
    0,
    13, //CSW_P228
    0,
    10, //CSW_SCOUT
    0,  //CSW_HEGRENADE
    7,  //CSW_XM1014
    0,  //CSW_C4
    30,//CSW_MAC10
    30, //CSW_AUG
    0,  //CSW_SMOKEGRENADE
    15,//CSW_ELITE
    20,//CSW_FIVESEVEN
    25,//CSW_UMP45
    30, //CSW_SG550
    35, //CSW_GALIL
    25, //CSW_FAMAS
    12,//CSW_USP
    20,//CSW_GLOCK18
    10, //CSW_AWP
    30,//CSW_MP5NAVY
    100,//CSW_M249
    8,  //CSW_M3
    30, //CSW_M4A1
    30,//CSW_TMP
    20, //CSW_G3SG1
    0,  //CSW_FLASHBANG
    7,  //CSW_DEAGLE
    30, //CSW_SG552
    30, //CSW_AK47
    0,  //CSW_KNIFE
    50//CSW_P90
}

public plugin_init()
{	
	new path[64];
	get_localinfo("amxx_configsdir", path, charsmax(path));
	formatex(path, charsmax(path), "%s/vip_maps.ini", path);
	
	new file = fopen(path, "r+");
	
	if(!file_exists(path))
	{
		write_file(path, "; VIP-UL ESTE DEZACTIVAT PE URMATOARELE HARTI: ");
		write_file(path, "; Exemplu de adaugare HARTA:^n; ^"harta^"^n^nfy_snow^ncss_bycastor");
	}
	
	new mapname[32];
	get_mapname(mapname, charsmax(mapname));
	
	new text[121], maptext[32], bool:remove_vip = false;
	while(!feof(file))
	{
		fgets(file, text, charsmax(text));
		trim(text);
		
		if(text[0] == ';' || !strlen(text)) 
		{
			continue; 
		}
		
		parse(text, maptext, charsmax(maptext));
		
		if(equal(maptext, mapname))
		{
			log_amx("Am dezactivat pluginul 'VIP' pe harta %s.", maptext);
			remove_vip = true;
			break;
		}
		
	}
	fclose(file);

	if(!remove_vip)
	{
		register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);

		register_event("Damage", "event_Damage", "b", "2>0", "3=0");
		register_event("HLTV", "event_NewRound", "a", "1=0", "2=0");
		register_event("DeathMsg", "event_DeathMsg", "a");
		register_event("CurWeapon", "event_CurWeapon", "be", "1=1");
		register_event("ResetHUD", "event_ResetModel", "b");

		RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawnPost", 1);
		RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamagePre");

		for(new i = 1; i <= CSW_P90; i++)
		{
			if(!(NOCLIP_WPN_BS & (1<<i)) && get_weaponname(i, weaponname, 31))
			{
				RegisterHam(Ham_Weapon_PrimaryAttack, weaponname, "fw_PrimaryAttack");
				RegisterHam(Ham_Weapon_PrimaryAttack, weaponname, "fw_PrimaryAttackPost", 1);
			}
		}

		register_forward(FM_PlayerPreThink, "fw_PlayerPreThink");
		register_forward(FM_ClientUserInfoChanged, "fw_Userinfochanged");
		
		register_message(get_user_msgid("ScoreAttrib"), "msg_ScoreAttrib");
		g_msgBarTime = get_user_msgid("BarTime");

		register_clcmd("say /vips", "CmdVipsOnline");
		register_clcmd("say_team /vips", "CmdVipsOnline");
		register_clcmd("say vips", "CmdVipsOnline");
		register_clcmd("say_team vips", "CmdVipsOnline");
		
		register_clcmd("say vip", "CmdPrintAttributes");
		register_clcmd("say_team vip", "CmdPrintAttributes");
		register_clcmd("say /vip", "CmdPrintAttributes");
		register_clcmd("say_team /vip", "CmdPrintAttributes");
		register_clcmd("say wantvip", "CmdPrintAttributes2");
		register_clcmd("say_team wantvip", "CmdPrintAttributes2");
		register_clcmd("say /wantvip", "CmdPrintAttributes2");
		register_clcmd("say_team /wantvip", "CmdPrintAttributes2");

		register_clcmd("say admbenefits", "CmdPrintAttributes3");
		register_clcmd("say_team admbenefits", "CmdPrintAttributes3");
		register_clcmd("say /admbenefits", "CmdPrintAttributes3");
		register_clcmd("say_team /admbenefits", "CmdPrintAttributes3");
		
		register_clcmd("say /boost", "CmdPrintAttributes4");
		register_clcmd("say_team /boost", "CmdPrintAttributes4");

		register_clcmd("say /vm", "cmd_vipmenu");
		register_clcmd("say_team /vm", "cmd_vipmenu");
		register_clcmd("say vm", "cmd_vipmenu");
		register_clcmd("say_team vm", "cmd_vipmenu");
		register_clcmd("say /vipmenu", "cmd_vipmenu");
		register_clcmd("say_team /vipmenu", "cmd_vipmenu");
		register_clcmd("say vipmenu", "cmd_vipmenu");
		register_clcmd("say_team vipmenu", "cmd_vipmenu");

		register_clcmd("drop", "cmd_use_ability");
		
		register_concmd("amx_addvip", "cmd_add_vip", ADMIN_ACCES_ADD, "<nume> <parola> <comentariu>");

		time(ora, _, _);
		event_on = (ora >= ORA_INCEPUT || ora < ORA_SFARSIT) ? true : false;
		prima_data = true;
		
		set_task(10.0, "verifica_ora", TASK_VERIFICARE, _, _, "b");
		set_task(1.0, "anunta_jucatori", _, _, _, "b");
		max_players = get_maxplayers();
	}
	else
	{
		register_plugin(PLUGIN_NAME_PAUSED, PLUGIN_VERSION, PLUGIN_AUTHOR);
		pause("ade");
	}
	
	register_cvar("vip_", PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER);
	set_cvar_string("vip_", PLUGIN_VERSION);
}

public plugin_precache()
{
	cvar_password_field = register_cvar("amxx_password_field", "_pw");
	cvar[hp_spawn] = register_cvar("bh_vip_hp_spawn", "200");			// 0 = dezactivat
	cvar[ap_spawn] = register_cvar("bh_vip_ap_spawn", "1");			// 0/1
	cvar[show_vip_tab] = register_cvar("bh_vip_show_tab", "0");			// 0/1
	cvar[show_bullet_dmg] = register_cvar("bh_vip_show_bullet_dmg", "1");	// 0/1
	cvar[money_infection] = register_cvar("bh_vip_infection_money", "200");	// 0 = dezactivat
	cvar[health_infection] = register_cvar("bh_vip_infection_hp", "10");	// 0 = dezactivat
	cvar[teleport_cd] = register_cvar("bh_vip_teleport_cd", "10");
	cvar[multidamage] = register_cvar("bh_vip_multidamage", "50");	// 50 = 0.5, 100 = 1.0, etc
	cvar[madness_time] = register_cvar("bh_vip_madness_time", "3");
	cvar[leap_cooldown] = register_cvar("bh_vip_leap_cd", "5");
	cvar[leap_force] = register_cvar("bh_vip_leap_force", "500");
	cvar[leap_height] = register_cvar("bh_vip_leap_height", "300");
	cvar[admin_show_bullet_dmg] = register_cvar("bh_admin_show_bullet_dmg", "1");
	cvar[model] = register_cvar("bh_vip_model", "vipMDL");

	precache_sound(SOUND_BLINK);
	ShockWave = precache_model("sprites/shockwave.spr");
	BlueFlare = precache_model("sprites/blueflare2.spr");

	static buffer[64], cvar_mdl[64];
	get_pcvar_string(cvar[model], cvar_mdl, 63);
	format(buffer, 63, "models/player/%s/%s.mdl", cvar_mdl, cvar_mdl);
	precache_model(buffer);

	read_vip_file();
}

public cmd_add_vip(id, level, cid)
{
	if(!cmd_access(id, level, cid, 4))
		return 1;

	new target[32], target_password[32], comment[256];
	read_argv(1, target, 31);
	read_argv(2, target_password, 31);
	read_argv(2, comment, 255);
	
	new player = cmd_target(id, target, 8);
	
	if(!player)
		return PLUGIN_HANDLED;
	
	new playername[32], adminame[32];
	get_user_name(player, playername, 31);
	get_user_name(id, adminame, 31);
	
	new configsDir[64];
	get_configsdir(configsDir, 63);
	format(configsDir, 63, "%s/vips.ini", configsDir);

	if(!file_exists(configsDir))
	{
		console_print(id, "%s File ^"%s^" doesn't exist.", tag, configsDir);
		return PLUGIN_HANDLED;
	}

	new line = 0, textline[256], len, vip_info[vip_data];
	while((line = read_file(configsDir, line, textline, 255, len)))
	{
		if(len == 0 || equal(textline, ";", 1))
			continue;
		
		if(parse(textline, vip_info[name], 31, vip_info[password], 31) != 2)
			continue;
		
		if(equal(vip_info[name], playername))
		{
			console_print(id, "%s %s este deja vip si exista in fisier.", tag, playername);
			return PLUGIN_HANDLED;
		}
	}
	
	new linetoadd[256];
	if(comment[0] == 0)
		formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^"", playername, target_password);
	else
		formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^" ; %s", playername, target_password, comment);
	
	console_print(id, "Adding: %s", linetoadd);
	
	if(!write_file(configsDir, linetoadd))
		console_print(id, "%s Failed writing to %s!", tag, configsDir);
	
	console_print(id, "%s %s a fost adaugat in vips.ini!", tag, playername);
	read_vip_file();
	is_user_vip[player] = true;

	ColorChat(0, "!4%s!1 Adminul!3 %s!1 l-a adaugat VIP pe!3 %s!1!", tag, adminame, playername);
	ColorChat(player, "!4%s!1 Felicitari! Ai fost adaugat ca membru!3 VIP!1!", tag);

	return PLUGIN_HANDLED;
}

read_vip_file()
{
	new path[64];
	get_localinfo("amxx_configsdir", path, charsmax(path));
	format(path, charsmax(path), "%s/vips.ini", path);
	
	new file = fopen(path, "r+");
	
	if(!file_exists(path))
	{
		new format_txt[128];
		log_to_file("vip_errors.txt", "Nu am gasit fisierul '%s'. Il creez acum!", path);

		format(format_txt, charsmax(format_txt), ";------------ | %s - Configuration file | ------------", PLUGIN_NAME);
		write_file(path, format_txt);
		format(format_txt, charsmax(format_txt), ";-------------------------- | by %s | --------------------------^n^n", PLUGIN_AUTHOR);
		write_file(path, format_txt);
		write_file(path, "; Exemplu de adaugare VIP:^n; ^"NUME^" ^"PAROLA^"^n^n^n");
	}
	
	if(vips_number)
	{
		ArrayClear(vip_array);
		vips_number = 0;
	}
	
	new text[121], p_name[32], p_password[32], vip_infos[vip_data];
	while(!feof(file))
	{
		fgets(file, text, charsmax(text));
		trim(text);
		
		if(text[0] == ';' || !strlen(text)) 
		{
			continue; 
		}
		
		if(parse(text, p_name, charsmax(p_name), p_password, charsmax(p_password)) != 2)
		{
			log_to_file("vip_errors.txt", "[AMXX] Nu am putut delimita linia (%s). Este scrisa gresit.", text);
			continue;
		}
		
		copy(vip_infos[name], charsmax(vip_infos), p_name);
		copy(vip_infos[password], charsmax(vip_infos), p_password);
		ArrayPushArray(vip_array, vip_infos);
		vips_number++;
	}
	
	fclose(file);
	
	switch(vips_number)
	{
		case 0: server_print("[AMXX] Nu am gasit nici un VIP in fisier.");
		default: server_print("[AMXX] Am incarcat %d VIP%s din fisier.", vips_number, vips_number == 1 ? "" : "I");
	}
}

public plugin_natives()
{
	vip_array = ArrayCreate(vip_data);
	
	register_native("is_user_vip", "native_is_user_vip", 1);
	register_native("set_user_vip", "native_set_user_vip", 1);
}

public plugin_end()
{
	ArrayDestroy(vip_array);
}

public native_is_user_vip(id)
{
	return is_user_vip[id];
}

public native_set_user_vip(id, bool:value)
{
	return is_user_vip[id] = (value == true) ? true : false;
}

public client_disconnect(id)
{
	is_user_vip[id] = false;
}

public client_putinserver(id)
{
	uia[id]=0
	new p_name[32], p_password_field[32], p_password[32];
	get_user_info(id, "name", p_name, charsmax(p_name));
	get_pcvar_string(cvar_password_field, p_password_field, charsmax(p_password_field));
	get_user_info(id, p_password_field, p_password, charsmax(p_password));
	is_user_vip[id] = false;
	new vip_infos[vip_data], i;
	
	for(i = 0; i < vips_number; i++)
	{
		ArrayGetArray(vip_array, i, vip_infos);
		
		if(equal(vip_infos[name], p_name))
		{
			if(equal(vip_infos[password], p_password))
			{
				is_user_vip[id] = true;
				existsInFile[id] = true;
			}
			else
			{
				server_cmd("kick #%d ^"Parola gresita...^"", get_user_userid(id));
			}
			
			break;
		}
	}

	if(is_user_vip[id])
	{
		new namev[33];
		get_user_info(id,"name", namev, charsmax(namev));
		ColorChat(0, "!4[BIO-VIP]!1 VIP-ul!3 %s!1 s-a conectat pe server.", namev);
	}
	else
	{
		existsInFile[id] = false;
	}
}

public CmdVipsOnline(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE;

	new adminnames[33][32], message[512], i, count, len;
	len = format(message, charsmax(message), "!4%s!3 VIPS ONLINE: ", tag);
	for(i = 1; i <= max_players; i++)
	{
		if(is_user_connected(i) && is_user_vip[i])
			get_user_name(i, adminnames[count++], charsmax(adminnames[]));
	}
	
	if(count > 0)
	{
		for(i = 0; i < count; i++)
		{
			len += format(message[len], charsmax(message)-len, "!4%s!1%s", adminnames[i], i < (count - 1) ? " | " : "");
			if(len > 96)
			{
				ColorChat(id, message);
				len = format(message, charsmax(message), "");
			}
		}
		ColorChat(id, message);
	}
	else
	{
		len += format(message[len], charsmax(message)-len, "!4Nici un VIP Online !")
		ColorChat(id, message);
	}

	return PLUGIN_CONTINUE;
}

public CmdPrintAttributes(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "vip.txt", "Beneficii VIP");
}

public CmdPrintAttributes2(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "wantvip.txt", "VIP Benefits");
}

public CmdPrintAttributes3(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "adminsbenefits.txt", "Beneficii ADMINI");
}

public CmdPrintAttributes4(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "boost.txt", "Boost SMS");
}

public cmd_vipmenu(id) {
	if (!is_user_vip[id]) {
		ColorChat(id, "!4%s!3[RO]!1 Nu esti !4Membru VIP!1. Tasteaza !3/vip!1 pentru a vedea Beneficiile Vip.", tag);
		ColorChat(id, "!4%s!3[EN]!1 You are not a !4VIP Member!1. Type !3/wantvip!1 for further information.", tag);
		return PLUGIN_HANDLED;
	}
	if(!game_started()) {
		ColorChat(id, "!4%s!3[RO]!4 VIPMENU !1poate fi folosit dupa infectie.", tag);
		ColorChat(id, "!4%s!3[EN]!4 VIPMENU !1can be used after infection.", tag);
		return PLUGIN_HANDLED;
	}
	if ((is_user_zombie(id) && itemIsChosen[id][1] != -1) || (is_user_zombie(id) && itemIsChosen[id][0] != -1) || (!is_user_zombie(id) && itemIsChosen[id][0] != -1)) {
		ColorChat(id, "!4%s!3[RO]!1 Ai folosit o data runda aceasta !4VIPMENU, !1incearca runda viitoare!", tag);
		ColorChat(id, "!4%s!3[EN]!1 You already use this round !4VIPMENU, !1try next round!", tag);
		return PLUGIN_HANDLED;
	}
	static menu;
	static item_info[256];
	if (!is_user_zombie(id)) {
		menu = menu_create("\rSurvivors VIP Menu", "HumansHandler");
		
		formatex(item_info, 255, "\yMareste Damage-ul cu \r%d%", get_pcvar_num(cvar[multidamage]));
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\yTeleport (\r%d Secunde\y)", get_pcvar_num(cvar[teleport_cd]));
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\%sGloante Infinite",!uia[id]?"y":"d");
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\yNo Recoil");
		menu_additem(menu, item_info);

		menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, menu, 0);
	} else {
		menu = menu_create("\rZombies VIP Menu", "ZombiesHandler");
		
		formatex(item_info, 255, "\yGodMode (\r%d Seconde\y)", get_pcvar_num(cvar[madness_time]));
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\yLongjump");
		menu_additem(menu, item_info);

		formatex(item_info, 255, "\yInfection Nade");
		menu_additem(menu, item_info);

		menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, menu, 0);
	}
	return PLUGIN_CONTINUE;
}

public HumansHandler(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item) {
		case 0: {
			ColorChat(id, "!4%s!3[RO]!1 Damage-ul tau a crescut cu!3 %d%%!1. !4Have Fun!", tag, get_pcvar_num(cvar[multidamage]));
			ColorChat(id, "!4%s!3[EN]!1 Your damage has been incresed by!3 %d%%!1. !4Have Fun!", tag, get_pcvar_num(cvar[multidamage]));
		}
		case 1: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit Teleport, te poti teleporta apsand!4 Tasta [G] !1.", tag);
			ColorChat(id, "!4%s!3[RO]!1 Poti folosi o data la:!3 %d secunde", tag, get_pcvar_num(cvar[teleport_cd]));
			ColorChat(id, "!4%s!3[EN]!1 You can teleport to cursor position by pressing!4 [G] key!1.", tag);
			ColorChat(id, "!4%s!3[EN]!1 Cooldown ability:!3 %d seconds", tag, get_pcvar_num(cvar[teleport_cd]));
		}
		case 2: {
			if(uia[id])	return PLUGIN_HANDLED
			ColorChat(id, "!4%s!3[RO]!1 Ai primit!3 Gloante Infinite. !4Enjoy!", tag);
			ColorChat(id, "!4%s!3[EN]!1 You got!3 Unlimited Clip. !4Enjoy!", tag);
			uia[id]=ASTEPTARE
		}
		case 3: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit!3 No Recoil. !4Good Luck!", tag);
			ColorChat(id, "!4%s!3[EN]!1 You got!3 No Recoil. !4Good Luck!", tag);
		}
	}
	
	itemIsChosen[id][0] = item;
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public ZombiesHandler(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}

	itemIsChosen[id][1] = item;
	
	switch(item) {
		case 0: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit GodMode, pentru!3 %d secunde!1 apasa!4 Tasta [G]!1.", tag, get_pcvar_num(cvar[madness_time]));
			ColorChat(id, "!4%s!3[EN]!1 You got GodMode, for!3 %d seconds!1 pressing!4 [G] key!1.", tag, get_pcvar_num(cvar[madness_time]));
		}
		case 1: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit!3 Long Jump. !4Enjoy!", tag);
			ColorChat(id, "!4%s!3[RO]!1 Poti folosi o data la:!3 %d secunde!1.", tag, get_pcvar_num(cvar[leap_cooldown]));
			ColorChat(id, "!4%s!3[EN]!1 You got!3 Long Jump. !4Enjoy!", tag);
			ColorChat(id, "!4%s!3[EN]!1 Cooldown ability:!3 %d seconds!1.", tag, get_pcvar_num(cvar[leap_cooldown]));
		}
		case 2: {
			set_user_infection_nade(id);
			ColorChat(id, "!4%s!3[RO]!1 Ai primit !3Grenade Infection. !4Have Fun!", tag);
			ColorChat(id, "!4%s!3[RO]!1 Atentie, la ultimul !3Om !1ramas in !3viata !1nu v-a avea efect.", tag);
			ColorChat(id, "!4%s!3[EN]!1 You got !3Grenade Infection. !4Have Fun!", tag);
			ColorChat(id, "!4%s!3[EN]!1 Attention the last !3Human !1left !3alive !1will no have effect.", tag);
		}
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public cmd_use_ability(id) {
	if (!is_user_vip[id])
		return PLUGIN_CONTINUE;

	if (is_user_alive(id)) {
		if (g_PowerDelay[id] > 0) {
			set_dhudmessage(0, 255, 255, -1.0, 0.88, 0, _, 1.0);
			show_dhudmessage(id, "Incarcare.^n(%d secunde%s ramase)", g_PowerDelay[id], g_PowerDelay[id] == 1 ? "a" : "e");
			return PLUGIN_HANDLED_MAIN;
		} else {
			if (!is_user_zombie(id)) {
				if (itemIsChosen[id][0] == 1) {
					if (teleport(id)) {
						g_PowerDelay[id] = max(get_pcvar_num(cvar[teleport_cd]), 1);
						PowerDelay(id);
						return PLUGIN_HANDLED_MAIN;
					} else {
						ColorChat(id, "!4%s!3[RO]!1 Pozitie !3invalida!1.", tag);
						ColorChat(id, "!4%s!3[EN]!1 Invalid !3position.", tag);
						return PLUGIN_HANDLED_MAIN;
					}
				}
			} else {
				if (itemIsChosen[id][1] == 0) {
					itemIsChosen[id][1] = 2; // bug fix (ca sa nu spameze g de 10000000 mil ori)
					static madnessDuration;
					madnessDuration = get_pcvar_num(cvar[madness_time]);

					message_begin(MSG_ONE_UNRELIABLE, g_msgBarTime, _, id);
					write_byte(madnessDuration);
					write_byte(0);
					message_end();
					
					set_user_godmode(id, 1);
					set_task(float(madnessDuration), "stop_madness", id+TASK_MADNESS);
				}
			}
		}
	}
	return PLUGIN_CONTINUE;
}

public stop_madness(taskid) {
	new id = taskid - TASK_MADNESS;
	set_user_godmode(id);
	remove_bartime(id);
	ColorChat(id, "!4%s!3[RO]!1 GodMode-ul a !3expirat!1.", tag);
	ColorChat(id, "!4%s!3[EN]!1 GodMode-ul has !3expired!1.", tag);
}

public PowerDelay(id) {
	if (id >= TASK_TELEPORT)
		id -= TASK_TELEPORT;
	
	if (is_user_alive(id)) {
		if (g_PowerDelay[id] > 1) {
			g_PowerDelay[id]--;
			set_task(1.0, "PowerDelay", id+TASK_TELEPORT);
		} else if (g_PowerDelay[id] <= 1) {
			g_PowerDelay[id] = 0;
			
			set_dhudmessage(255, 255, 0, -1.0, 0.88, 0, _, 2.0);
			show_dhudmessage(id, "Teleport-ul este gata.^nApasa G pentru a folosi.");
		}
	}
}

public PowerReset(id) {
	task_exists(TASK_TELEPORT + id) ? remove_task(TASK_TELEPORT + id) : 0;
	g_PowerDelay[id] = 0;
}

public event_infect(victim, attacker) {
	if (victim != attacker && is_user_alive(attacker) && is_user_vip[attacker]) {
		cs_set_user_money(attacker, min(cs_get_user_money(attacker) + get_pcvar_num(cvar[money_infection]), MAX_MONEY));
		set_user_health(attacker, get_user_health(attacker) + get_pcvar_num(cvar[health_infection]));
	}
}

public event_Damage(victim)
{
	new id = get_user_attacker(victim);
	if(is_user_valid(id))
	{
		if(is_user_alive(id) && (is_user_vip[id] && get_pcvar_num(cvar[show_bullet_dmg]) == 1) || (get_user_flags(id)&ADMIN_LEVEL_A && get_pcvar_num(cvar[admin_show_bullet_dmg]) == 1))
		{
			if(read_data(4) || read_data(5) || read_data(6))
			{		
				new iPos = ++g_iPlayerPos[id];
				if(iPos == sizeof(g_flCoords))
					iPos = g_iPlayerPos[id] = 0;
				
				new iCol = ++g_iPlayerCol[id];
				if(iCol == sizeof(g_iColors))
					iCol = g_iPlayerCol[id] = 0;
				
				set_hudmessage(g_iColors[iCol][0], g_iColors[iCol][1], g_iColors[iCol][2], Float:g_flCoords[iPos][0], Float:g_flCoords[iPos][1], 0, 0.1, 2.5, 0.02, 0.02, -1);
				show_hudmessage(id, "%d", read_data(2));
			}
		}
	}
	
	return PLUGIN_CONTINUE;
}

public event_NewRound()
{
	static i;
	for (i = 0; i < max_players; i++) {
		itemIsChosen[i][0] = -1;
		itemIsChosen[i][1] = -1;
		PowerReset(i);
		remove_bartime(i);
		if(uia[i]>0)	uia[i]--;
	}
}

public event_CurWeapon(id)
{
	if (!is_user_alive(id))
		return PLUGIN_HANDLED;

	if (!is_user_vip[id])
		return PLUGIN_CONTINUE;

	if (itemIsChosen[id][0] != 2)
		return PLUGIN_HANDLED;

	new weapon = read_data(2);
	if (!(NOCLIP_WPN_BS & (1<<weapon))) {
		fm_cs_set_weapon_ammo(get_pdata_cbase(id, m_pActiveItem), g_MaxClipAmmo[weapon]);
	}
	return PLUGIN_CONTINUE;
}

public event_DeathMsg()
{
	PowerReset(read_data(2));
}

public event_ResetModel(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE;

	if(is_user_alive(id) && !is_user_vip[id])
		return PLUGIN_CONTINUE;

	new mdl_buffer[64];
	get_pcvar_string(cvar[model], mdl_buffer, 63);

	new CsTeams:userTeam = cs_get_user_team(id);
	if(userTeam == CS_TEAM_T || userTeam == CS_TEAM_CT)
	{
		cs_set_user_model(id, mdl_buffer);
		return PLUGIN_HANDLED;
	}
	else
	{
		cs_reset_user_model(id);
	}

	return PLUGIN_CONTINUE;
}

public fw_PlayerSpawnPost(id)
{
	if(is_user_vip[id] && is_user_alive(id))
	{
		set_task(0.25, "give_items", id);
		return HAM_IGNORED;
	}
	
	return HAM_IGNORED;
}

public give_items(id)
{
	new cache = get_pcvar_num(cvar[hp_spawn])
	if(cache != 0) set_user_health(id, cache);

	cache = get_pcvar_num(cvar[ap_spawn]);
	if(cache != 0) give_item(id, "item_assaultsuit");
}

public fw_TakeDamagePre(victim, iInflictor, attacker, Float:fDamage, iDmgType)
{
	if(victim == attacker || !is_user_valid(attacker) || !is_user_alive(attacker) || !is_user_zombie(victim))
		return HAM_HANDLED;

	if (!is_user_vip[attacker])
		return HAM_IGNORED;

	if (itemIsChosen[attacker][0] == 0) {
		static Float:current_damage;
		current_damage = fDamage;
		fDamage = fDamage + fDamage * (get_pcvar_num(cvar[multidamage]) / 100.0);

		if(iDmgType & DMG_HEGRENADE)
			fDamage = current_damage;
		
		SetHamParamFloat(4, fDamage);
		return HAM_HANDLED;
	}
	return HAM_IGNORED;
}

public fw_PrimaryAttack(ent)
{
	new id = pev(ent, pev_owner);
	if(is_user_alive(id) && is_user_vip[id] && itemIsChosen[id][0] == 3)
		pev(id, pev_punchangle, cl_pushangle[id]);

	return HAM_IGNORED;
}

public fw_PrimaryAttackPost(ent)
{
	new id = pev(ent, pev_owner);
	if(is_user_alive(id) && is_user_vip[id] && itemIsChosen[id][0] == 3)
	{
		new Float:fPush[3];
		pev(id, pev_punchangle, fPush);

		xs_vec_sub(fPush, cl_pushangle[id], fPush );
		xs_vec_mul_scalar(fPush, random_float(0.0, 0.2), fPush);
		xs_vec_add(fPush, cl_pushangle[id], fPush );

		set_pev(id, pev_punchangle, fPush);
	}
	
	return HAM_IGNORED;
}

public fw_PlayerPreThink(id)
{	
	// --- Check if player should leap ---
	if (is_user_alive(id) && is_user_zombie(id) && is_user_vip[id] && itemIsChosen[id][1] == 1) {
		// Check if proper CVARs are enabled and retrieve leap settings
		static Float:cooldown, Float:current_time;
		cooldown = 5.0;
		current_time = get_gametime()
		
		// Cooldown not over yet
		if (current_time - g_lastleaptime[id] < cooldown)
			return;
		
		// Not doing a longjump (don't perform check for bots, they leap automatically)
		if (!is_user_bot(id) && !(pev(id, pev_button) & (IN_JUMP | IN_DUCK) == (IN_JUMP | IN_DUCK)))
			return;

		// Not on ground or not enough speed
		if (!(pev(id, pev_flags) & FL_ONGROUND) || fm_get_speed(id) < 80)
			return;
		
		static Float:velocity[3];
		
		// Make velocity vector
		velocity_by_aim(id, get_pcvar_num(cvar[leap_force]), velocity);
		
		// Set custom height
		velocity[2] = float(get_pcvar_num(cvar[leap_height]));
		
		// Apply the new velocity
		set_pev(id, pev_velocity, velocity);
		
		// Update last leap time
		g_lastleaptime[id] = current_time;
	}
}

public fw_Userinfochanged(id, buffer)
{
	if (!is_user_connected(id))
		return FMRES_IGNORED;

	static oldname[32], newname[32]
	get_user_name(id, oldname, 31);
	engfunc(EngFunc_InfoKeyValue, buffer, g_name, newname, 31);

	if (equal(newname, oldname))
		return FMRES_IGNORED;

	client_putinserver(id);
	return FMRES_IGNORED;
}

public msg_ScoreAttrib(msgid, dest, id)
{
	if(!get_pcvar_num(cvar[show_vip_tab]))
		return PLUGIN_CONTINUE;
		
	new id = get_msg_arg_int(1);
	if(is_user_connected(id) && is_user_vip[id])
		set_msg_arg_int(2, ARG_BYTE, is_user_alive(id) ? (1<<2) : (1<<0));
	
	return PLUGIN_CONTINUE;
}

public verifica_ora(task)
{
	time(ora, _, _);
	event_on = (ora >= ORA_INCEPUT && ora < ORA_SFARSIT) ? true : false;

	new jucatori[32], numar = 0, i, id;
	if(event_on)
	{
		if(prima_data)
		{
			ColorChat(id, "!4--------------------------------------------------------");
			ColorChat(id, "!4***!1 EVENTUL!3 VIP FREE!1 A FOST ACTIVAT.");
			ColorChat(id, "!4***!1 Acesta va fi dezactivat la ora!4 %d!1.", ORA_SFARSIT);
			ColorChat(id, "!4--------------------------------------------------------");

			prima_data = false;
		}

		get_players(jucatori, numar);
		for(i = 0; i < numar; i++)
		{
			id = jucatori[i];
			is_user_vip[id] = true;
		}
	}
	else
	{
		if(!prima_data)
		{
			get_players(jucatori, numar);
			for(i = 0; i < numar; i++)
			{
				id = jucatori[i];
				is_user_vip[id] = existsInFile[id];
				ColorChat(id, "!4-------------------------------------------------------------");
				ColorChat(id, "!4***!1 EVENTUL!3 VIP FREE!1 A FOST DEZACTIVAT.");
				ColorChat(id, "!4***!1 Acesta va reincepe la ora!4 %d!1.", ORA_INCEPUT);
				ColorChat(id, "!4-------------------------------------------------------------");
			}
			prima_data = true;
		}
	}
}

public anunta_jucatori()
{
	if(!event_on)
		return;

	set_hudmessage(30, 120, 225, 0.0, 0.3, 1, 3.0, 3.0);
	show_hudmessage(0, "EVENT V.I.P FREE");
}

stock ColorChat(id, String[], any:...) 
{
	static szMesage[192];
	vformat(szMesage, charsmax(szMesage), String, 3);
	
	replace_all(szMesage, charsmax(szMesage), "!1", "^1");
	replace_all(szMesage, charsmax(szMesage), "!3", "^3");
	replace_all(szMesage, charsmax(szMesage), "!4", "^4");
	
	static g_msg_SayText = 0;
	if(!g_msg_SayText)
		g_msg_SayText = get_user_msgid("SayText");
	
	new Players[32], iNum = 1, i;

 	if(id) Players[0] = id;
	else get_players(Players, iNum, "ch");
	
	for(--iNum; iNum >= 0; iNum--) 
	{
		i = Players[iNum];
		
		message_begin(MSG_ONE_UNRELIABLE, g_msg_SayText, _, i);
		write_byte(i);
		write_string(szMesage);
		message_end();
	}
}

public remove_bartime(id)
{
	if(task_exists(id+TASK_MADNESS))
	{
		message_begin(MSG_ONE_UNRELIABLE, g_msgBarTime, _, id);
		write_byte(0);
		write_byte(0);
		message_end();
		
		remove_task(id+TASK_MADNESS);
	}
}

// Get entity's speed (from fakemeta_util)
stock fm_get_speed(entity)
{
	static Float:velocity[3]
	pev(entity, pev_velocity, velocity)
	
	return floatround(vector_length(velocity));
}

bool:teleport(id)
{
	new Float:vOrigin[3], Float:vNewOrigin[3], Float:vNormal[3], Float:vTraceDirection[3], Float:vTraceEnd[3];
	
	pev(id, pev_origin, vOrigin);
	
	velocity_by_aim(id, 99999, vTraceDirection);
	xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
	
	engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
	
	new Float:flFraction;
	get_tr2(0, TR_flFraction, flFraction);

	if(flFraction < 1.0)
	{
		get_tr2(0, TR_vecEndPos, vTraceEnd);
		get_tr2(0, TR_vecPlaneNormal, vNormal);
	}
	
	xs_vec_mul_scalar(vNormal, 40.0, vNormal);
	xs_vec_add(vTraceEnd, vNormal, vNewOrigin);
	
	if(is_player_stuck(id, vNewOrigin))
		return false;
	
	emit_sound(id, CHAN_STATIC, SOUND_BLINK, 1.0, ATTN_NORM, 0, PITCH_NORM);
	tele_effect(vOrigin);
	
	engfunc(EngFunc_SetOrigin, id, vNewOrigin);
	
	tele_effect2(vNewOrigin);

	return true;
}
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
sammi1
Membru, skill 0
Membru, skill 0
Posts: 49
Joined: 30 Jan 2021, 22:38
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Detinator server CS: Zm.CsPower.Ro
Fond eXtream: 0
Has thanked: 23 times

09 Feb 2021, 00:26

L E V I N wrote:
08 Feb 2021, 17:15

Code: Select all

/*
credite: uclip https://forums.alliedmods.net/showthread.php?p=848357
norecoil: https://www.extreamcs.com/forum/cereri-pluginuri/plugin-norecoil-t291343.html
longjump: from zp40
*/

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <xs>
#include <cstrike>
#include <fun>
#include <biohazard>
#include <dhudmessage>

native set_user_infection_nade(id);

#pragma tabsize 0

static	ASTEPTARE	=	2	//in runde
new uia[33]

// --------------------------------------------
//   ------------- DE EDITAT ---------------
// --------------------------------------------
new const tag[] = "[Biohazard Vip]";	// tagul in chat
new const SOUND_BLINK[] = {"weapons/flashbang-1.wav"};	// sunetul la teleportare
#define ADMIN_ACCES_ADD	ADMIN_IMMUNITY	// accesul de a da vip prin comanda amx_addvip

#define ORA_INCEPUT	00	// INTERVALUL ORAR (INCEPUT)
#define ORA_SFARSIT	10	// INTERVALUL ORAR (SFARSIT)
// --------------------------------------------
//   ------------- DE EDITAT ---------------
// --------------------------------------------

#define PLUGIN_NAME "BIO VIP System"
#define PLUGIN_NAME_PAUSED "BIO VIP System [OPRIT]"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "YONTU"

#define is_user_valid(%1) (1 <= %1 <= max_players)
#define MAX_MONEY 16000
#define MAX_PLAYERS 32
#define TASK_TELEPORT 2718
#define TASK_MADNESS 2781
#define TASK_VERIFICARE	129891

// weapons offsets
#define OFFSET_CLIPAMMO        51
#define OFFSET_LINUX_WEAPONS    4
#define fm_cs_set_weapon_ammo(%1,%2)    set_pdata_int(%1, OFFSET_CLIPAMMO, %2, OFFSET_LINUX_WEAPONS)

// players offsets
#define m_pActiveItem 373

const DMG_HEGRENADE = (1<<24);
const NOCLIP_WPN_BS = ((1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4));

enum _:vip_data
{
	name[32],
	password[32]
}

enum cvars
{
	hp_spawn = 0,
	ap_spawn,
	show_vip_tab,
	show_bullet_dmg,
	money_infection,
	health_infection,
	teleport_cd,
	multidamage,
	madness_time,
	leap_cooldown,
	leap_force,
	leap_height,
	admin_show_bullet_dmg,
	model
}

new cvar[cvars];
new max_players;
new g_iPlayerPos[MAX_PLAYERS+1], g_iPlayerCol[MAX_PLAYERS+1];
new cvar_password_field;
new Array:vip_array;
new bool:is_user_vip[MAX_PLAYERS+1], vips_number = 0;
new itemIsChosen[MAX_PLAYERS+1][2];
new g_PowerDelay[33];
new ShockWave, BlueFlare, g_msgBarTime;
new Float:cl_pushangle[33][3], weaponname[32];
new Float:g_lastleaptime[33];
new ora = -1, bool:event_on, bool:prima_data;
new bool:existsInFile[33];

// NU SCHIMBA
new const g_name[] = "name";

new const Float:g_flCoords[][] =  
{ 
	{0.50, 0.40}, 
	{0.56, 0.44}, 
	{0.60, 0.50}, 
	{0.56, 0.56}, 
	{0.50, 0.60}, 
	{0.44, 0.56}, 
	{0.40, 0.50}, 
	{0.44, 0.44} 
}

new const g_iColors[][] = 
{ 
	{0, 127, 255}, // blue 
	{255, 127, 0}, // orange 
	{127, 0, 255}, // purple 
	{255, 0, 0}, // red 
	{255, 100, 150}, // pink
	{0, 255, 0} // green
}

new const g_MaxClipAmmo[] = 
{
    0,
    13, //CSW_P228
    0,
    10, //CSW_SCOUT
    0,  //CSW_HEGRENADE
    7,  //CSW_XM1014
    0,  //CSW_C4
    30,//CSW_MAC10
    30, //CSW_AUG
    0,  //CSW_SMOKEGRENADE
    15,//CSW_ELITE
    20,//CSW_FIVESEVEN
    25,//CSW_UMP45
    30, //CSW_SG550
    35, //CSW_GALIL
    25, //CSW_FAMAS
    12,//CSW_USP
    20,//CSW_GLOCK18
    10, //CSW_AWP
    30,//CSW_MP5NAVY
    100,//CSW_M249
    8,  //CSW_M3
    30, //CSW_M4A1
    30,//CSW_TMP
    20, //CSW_G3SG1
    0,  //CSW_FLASHBANG
    7,  //CSW_DEAGLE
    30, //CSW_SG552
    30, //CSW_AK47
    0,  //CSW_KNIFE
    50//CSW_P90
}

public plugin_init()
{	
	new path[64];
	get_localinfo("amxx_configsdir", path, charsmax(path));
	formatex(path, charsmax(path), "%s/vip_maps.ini", path);
	
	new file = fopen(path, "r+");
	
	if(!file_exists(path))
	{
		write_file(path, "; VIP-UL ESTE DEZACTIVAT PE URMATOARELE HARTI: ");
		write_file(path, "; Exemplu de adaugare HARTA:^n; ^"harta^"^n^nfy_snow^ncss_bycastor");
	}
	
	new mapname[32];
	get_mapname(mapname, charsmax(mapname));
	
	new text[121], maptext[32], bool:remove_vip = false;
	while(!feof(file))
	{
		fgets(file, text, charsmax(text));
		trim(text);
		
		if(text[0] == ';' || !strlen(text)) 
		{
			continue; 
		}
		
		parse(text, maptext, charsmax(maptext));
		
		if(equal(maptext, mapname))
		{
			log_amx("Am dezactivat pluginul 'VIP' pe harta %s.", maptext);
			remove_vip = true;
			break;
		}
		
	}
	fclose(file);

	if(!remove_vip)
	{
		register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);

		register_event("Damage", "event_Damage", "b", "2>0", "3=0");
		register_event("HLTV", "event_NewRound", "a", "1=0", "2=0");
		register_event("DeathMsg", "event_DeathMsg", "a");
		register_event("CurWeapon", "event_CurWeapon", "be", "1=1");
		register_event("ResetHUD", "event_ResetModel", "b");

		RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawnPost", 1);
		RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamagePre");

		for(new i = 1; i <= CSW_P90; i++)
		{
			if(!(NOCLIP_WPN_BS & (1<<i)) && get_weaponname(i, weaponname, 31))
			{
				RegisterHam(Ham_Weapon_PrimaryAttack, weaponname, "fw_PrimaryAttack");
				RegisterHam(Ham_Weapon_PrimaryAttack, weaponname, "fw_PrimaryAttackPost", 1);
			}
		}

		register_forward(FM_PlayerPreThink, "fw_PlayerPreThink");
		register_forward(FM_ClientUserInfoChanged, "fw_Userinfochanged");
		
		register_message(get_user_msgid("ScoreAttrib"), "msg_ScoreAttrib");
		g_msgBarTime = get_user_msgid("BarTime");

		register_clcmd("say /vips", "CmdVipsOnline");
		register_clcmd("say_team /vips", "CmdVipsOnline");
		register_clcmd("say vips", "CmdVipsOnline");
		register_clcmd("say_team vips", "CmdVipsOnline");
		
		register_clcmd("say vip", "CmdPrintAttributes");
		register_clcmd("say_team vip", "CmdPrintAttributes");
		register_clcmd("say /vip", "CmdPrintAttributes");
		register_clcmd("say_team /vip", "CmdPrintAttributes");
		register_clcmd("say wantvip", "CmdPrintAttributes2");
		register_clcmd("say_team wantvip", "CmdPrintAttributes2");
		register_clcmd("say /wantvip", "CmdPrintAttributes2");
		register_clcmd("say_team /wantvip", "CmdPrintAttributes2");

		register_clcmd("say admbenefits", "CmdPrintAttributes3");
		register_clcmd("say_team admbenefits", "CmdPrintAttributes3");
		register_clcmd("say /admbenefits", "CmdPrintAttributes3");
		register_clcmd("say_team /admbenefits", "CmdPrintAttributes3");
		
		register_clcmd("say /boost", "CmdPrintAttributes4");
		register_clcmd("say_team /boost", "CmdPrintAttributes4");

		register_clcmd("say /vm", "cmd_vipmenu");
		register_clcmd("say_team /vm", "cmd_vipmenu");
		register_clcmd("say vm", "cmd_vipmenu");
		register_clcmd("say_team vm", "cmd_vipmenu");
		register_clcmd("say /vipmenu", "cmd_vipmenu");
		register_clcmd("say_team /vipmenu", "cmd_vipmenu");
		register_clcmd("say vipmenu", "cmd_vipmenu");
		register_clcmd("say_team vipmenu", "cmd_vipmenu");

		register_clcmd("drop", "cmd_use_ability");
		
		register_concmd("amx_addvip", "cmd_add_vip", ADMIN_ACCES_ADD, "<nume> <parola> <comentariu>");

		time(ora, _, _);
		event_on = (ora >= ORA_INCEPUT || ora < ORA_SFARSIT) ? true : false;
		prima_data = true;
		
		set_task(10.0, "verifica_ora", TASK_VERIFICARE, _, _, "b");
		set_task(1.0, "anunta_jucatori", _, _, _, "b");
		max_players = get_maxplayers();
	}
	else
	{
		register_plugin(PLUGIN_NAME_PAUSED, PLUGIN_VERSION, PLUGIN_AUTHOR);
		pause("ade");
	}
	
	register_cvar("vip_", PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER);
	set_cvar_string("vip_", PLUGIN_VERSION);
}

public plugin_precache()
{
	cvar_password_field = register_cvar("amxx_password_field", "_pw");
	cvar[hp_spawn] = register_cvar("bh_vip_hp_spawn", "200");			// 0 = dezactivat
	cvar[ap_spawn] = register_cvar("bh_vip_ap_spawn", "1");			// 0/1
	cvar[show_vip_tab] = register_cvar("bh_vip_show_tab", "0");			// 0/1
	cvar[show_bullet_dmg] = register_cvar("bh_vip_show_bullet_dmg", "1");	// 0/1
	cvar[money_infection] = register_cvar("bh_vip_infection_money", "200");	// 0 = dezactivat
	cvar[health_infection] = register_cvar("bh_vip_infection_hp", "10");	// 0 = dezactivat
	cvar[teleport_cd] = register_cvar("bh_vip_teleport_cd", "10");
	cvar[multidamage] = register_cvar("bh_vip_multidamage", "50");	// 50 = 0.5, 100 = 1.0, etc
	cvar[madness_time] = register_cvar("bh_vip_madness_time", "3");
	cvar[leap_cooldown] = register_cvar("bh_vip_leap_cd", "5");
	cvar[leap_force] = register_cvar("bh_vip_leap_force", "500");
	cvar[leap_height] = register_cvar("bh_vip_leap_height", "300");
	cvar[admin_show_bullet_dmg] = register_cvar("bh_admin_show_bullet_dmg", "1");
	cvar[model] = register_cvar("bh_vip_model", "vipMDL");

	precache_sound(SOUND_BLINK);
	ShockWave = precache_model("sprites/shockwave.spr");
	BlueFlare = precache_model("sprites/blueflare2.spr");

	static buffer[64], cvar_mdl[64];
	get_pcvar_string(cvar[model], cvar_mdl, 63);
	format(buffer, 63, "models/player/%s/%s.mdl", cvar_mdl, cvar_mdl);
	precache_model(buffer);

	read_vip_file();
}

public cmd_add_vip(id, level, cid)
{
	if(!cmd_access(id, level, cid, 4))
		return 1;

	new target[32], target_password[32], comment[256];
	read_argv(1, target, 31);
	read_argv(2, target_password, 31);
	read_argv(2, comment, 255);
	
	new player = cmd_target(id, target, 8);
	
	if(!player)
		return PLUGIN_HANDLED;
	
	new playername[32], adminame[32];
	get_user_name(player, playername, 31);
	get_user_name(id, adminame, 31);
	
	new configsDir[64];
	get_configsdir(configsDir, 63);
	format(configsDir, 63, "%s/vips.ini", configsDir);

	if(!file_exists(configsDir))
	{
		console_print(id, "%s File ^"%s^" doesn't exist.", tag, configsDir);
		return PLUGIN_HANDLED;
	}

	new line = 0, textline[256], len, vip_info[vip_data];
	while((line = read_file(configsDir, line, textline, 255, len)))
	{
		if(len == 0 || equal(textline, ";", 1))
			continue;
		
		if(parse(textline, vip_info[name], 31, vip_info[password], 31) != 2)
			continue;
		
		if(equal(vip_info[name], playername))
		{
			console_print(id, "%s %s este deja vip si exista in fisier.", tag, playername);
			return PLUGIN_HANDLED;
		}
	}
	
	new linetoadd[256];
	if(comment[0] == 0)
		formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^"", playername, target_password);
	else
		formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^" ; %s", playername, target_password, comment);
	
	console_print(id, "Adding: %s", linetoadd);
	
	if(!write_file(configsDir, linetoadd))
		console_print(id, "%s Failed writing to %s!", tag, configsDir);
	
	console_print(id, "%s %s a fost adaugat in vips.ini!", tag, playername);
	read_vip_file();
	is_user_vip[player] = true;

	ColorChat(0, "!4%s!1 Adminul!3 %s!1 l-a adaugat VIP pe!3 %s!1!", tag, adminame, playername);
	ColorChat(player, "!4%s!1 Felicitari! Ai fost adaugat ca membru!3 VIP!1!", tag);

	return PLUGIN_HANDLED;
}

read_vip_file()
{
	new path[64];
	get_localinfo("amxx_configsdir", path, charsmax(path));
	format(path, charsmax(path), "%s/vips.ini", path);
	
	new file = fopen(path, "r+");
	
	if(!file_exists(path))
	{
		new format_txt[128];
		log_to_file("vip_errors.txt", "Nu am gasit fisierul '%s'. Il creez acum!", path);

		format(format_txt, charsmax(format_txt), ";------------ | %s - Configuration file | ------------", PLUGIN_NAME);
		write_file(path, format_txt);
		format(format_txt, charsmax(format_txt), ";-------------------------- | by %s | --------------------------^n^n", PLUGIN_AUTHOR);
		write_file(path, format_txt);
		write_file(path, "; Exemplu de adaugare VIP:^n; ^"NUME^" ^"PAROLA^"^n^n^n");
	}
	
	if(vips_number)
	{
		ArrayClear(vip_array);
		vips_number = 0;
	}
	
	new text[121], p_name[32], p_password[32], vip_infos[vip_data];
	while(!feof(file))
	{
		fgets(file, text, charsmax(text));
		trim(text);
		
		if(text[0] == ';' || !strlen(text)) 
		{
			continue; 
		}
		
		if(parse(text, p_name, charsmax(p_name), p_password, charsmax(p_password)) != 2)
		{
			log_to_file("vip_errors.txt", "[AMXX] Nu am putut delimita linia (%s). Este scrisa gresit.", text);
			continue;
		}
		
		copy(vip_infos[name], charsmax(vip_infos), p_name);
		copy(vip_infos[password], charsmax(vip_infos), p_password);
		ArrayPushArray(vip_array, vip_infos);
		vips_number++;
	}
	
	fclose(file);
	
	switch(vips_number)
	{
		case 0: server_print("[AMXX] Nu am gasit nici un VIP in fisier.");
		default: server_print("[AMXX] Am incarcat %d VIP%s din fisier.", vips_number, vips_number == 1 ? "" : "I");
	}
}

public plugin_natives()
{
	vip_array = ArrayCreate(vip_data);
	
	register_native("is_user_vip", "native_is_user_vip", 1);
	register_native("set_user_vip", "native_set_user_vip", 1);
}

public plugin_end()
{
	ArrayDestroy(vip_array);
}

public native_is_user_vip(id)
{
	return is_user_vip[id];
}

public native_set_user_vip(id, bool:value)
{
	return is_user_vip[id] = (value == true) ? true : false;
}

public client_disconnect(id)
{
	is_user_vip[id] = false;
}

public client_putinserver(id)
{
	uia[id]=0
	new p_name[32], p_password_field[32], p_password[32];
	get_user_info(id, "name", p_name, charsmax(p_name));
	get_pcvar_string(cvar_password_field, p_password_field, charsmax(p_password_field));
	get_user_info(id, p_password_field, p_password, charsmax(p_password));
	is_user_vip[id] = false;
	new vip_infos[vip_data], i;
	
	for(i = 0; i < vips_number; i++)
	{
		ArrayGetArray(vip_array, i, vip_infos);
		
		if(equal(vip_infos[name], p_name))
		{
			if(equal(vip_infos[password], p_password))
			{
				is_user_vip[id] = true;
				existsInFile[id] = true;
			}
			else
			{
				server_cmd("kick #%d ^"Parola gresita...^"", get_user_userid(id));
			}
			
			break;
		}
	}

	if(is_user_vip[id])
	{
		new namev[33];
		get_user_info(id,"name", namev, charsmax(namev));
		ColorChat(0, "!4[BIO-VIP]!1 VIP-ul!3 %s!1 s-a conectat pe server.", namev);
	}
	else
	{
		existsInFile[id] = false;
	}
}

public CmdVipsOnline(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE;

	new adminnames[33][32], message[512], i, count, len;
	len = format(message, charsmax(message), "!4%s!3 VIPS ONLINE: ", tag);
	for(i = 1; i <= max_players; i++)
	{
		if(is_user_connected(i) && is_user_vip[i])
			get_user_name(i, adminnames[count++], charsmax(adminnames[]));
	}
	
	if(count > 0)
	{
		for(i = 0; i < count; i++)
		{
			len += format(message[len], charsmax(message)-len, "!4%s!1%s", adminnames[i], i < (count - 1) ? " | " : "");
			if(len > 96)
			{
				ColorChat(id, message);
				len = format(message, charsmax(message), "");
			}
		}
		ColorChat(id, message);
	}
	else
	{
		len += format(message[len], charsmax(message)-len, "!4Nici un VIP Online !")
		ColorChat(id, message);
	}

	return PLUGIN_CONTINUE;
}

public CmdPrintAttributes(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "vip.txt", "Beneficii VIP");
}

public CmdPrintAttributes2(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "wantvip.txt", "VIP Benefits");
}

public CmdPrintAttributes3(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "adminsbenefits.txt", "Beneficii ADMINI");
}

public CmdPrintAttributes4(id)
{
	if(!is_user_connected(id)) return;
	show_motd(id, "boost.txt", "Boost SMS");
}

public cmd_vipmenu(id) {
	if (!is_user_vip[id]) {
		ColorChat(id, "!4%s!3[RO]!1 Nu esti !4Membru VIP!1. Tasteaza !3/vip!1 pentru a vedea Beneficiile Vip.", tag);
		ColorChat(id, "!4%s!3[EN]!1 You are not a !4VIP Member!1. Type !3/wantvip!1 for further information.", tag);
		return PLUGIN_HANDLED;
	}
	if(!game_started()) {
		ColorChat(id, "!4%s!3[RO]!4 VIPMENU !1poate fi folosit dupa infectie.", tag);
		ColorChat(id, "!4%s!3[EN]!4 VIPMENU !1can be used after infection.", tag);
		return PLUGIN_HANDLED;
	}
	if ((is_user_zombie(id) && itemIsChosen[id][1] != -1) || (is_user_zombie(id) && itemIsChosen[id][0] != -1) || (!is_user_zombie(id) && itemIsChosen[id][0] != -1)) {
		ColorChat(id, "!4%s!3[RO]!1 Ai folosit o data runda aceasta !4VIPMENU, !1incearca runda viitoare!", tag);
		ColorChat(id, "!4%s!3[EN]!1 You already use this round !4VIPMENU, !1try next round!", tag);
		return PLUGIN_HANDLED;
	}
	static menu;
	static item_info[256];
	if (!is_user_zombie(id)) {
		menu = menu_create("\rSurvivors VIP Menu", "HumansHandler");
		
		formatex(item_info, 255, "\yMareste Damage-ul cu \r%d%", get_pcvar_num(cvar[multidamage]));
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\yTeleport (\r%d Secunde\y)", get_pcvar_num(cvar[teleport_cd]));
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\%sGloante Infinite",!uia[id]?"y":"d");
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\yNo Recoil");
		menu_additem(menu, item_info);

		menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, menu, 0);
	} else {
		menu = menu_create("\rZombies VIP Menu", "ZombiesHandler");
		
		formatex(item_info, 255, "\yGodMode (\r%d Seconde\y)", get_pcvar_num(cvar[madness_time]));
		menu_additem(menu, item_info);
		
		formatex(item_info, 255, "\yLongjump");
		menu_additem(menu, item_info);

		formatex(item_info, 255, "\yInfection Nade");
		menu_additem(menu, item_info);

		menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, menu, 0);
	}
	return PLUGIN_CONTINUE;
}

public HumansHandler(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item) {
		case 0: {
			ColorChat(id, "!4%s!3[RO]!1 Damage-ul tau a crescut cu!3 %d%%!1. !4Have Fun!", tag, get_pcvar_num(cvar[multidamage]));
			ColorChat(id, "!4%s!3[EN]!1 Your damage has been incresed by!3 %d%%!1. !4Have Fun!", tag, get_pcvar_num(cvar[multidamage]));
		}
		case 1: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit Teleport, te poti teleporta apsand!4 Tasta [G] !1.", tag);
			ColorChat(id, "!4%s!3[RO]!1 Poti folosi o data la:!3 %d secunde", tag, get_pcvar_num(cvar[teleport_cd]));
			ColorChat(id, "!4%s!3[EN]!1 You can teleport to cursor position by pressing!4 [G] key!1.", tag);
			ColorChat(id, "!4%s!3[EN]!1 Cooldown ability:!3 %d seconds", tag, get_pcvar_num(cvar[teleport_cd]));
		}
		case 2: {
			if(uia[id])	return PLUGIN_HANDLED
			ColorChat(id, "!4%s!3[RO]!1 Ai primit!3 Gloante Infinite. !4Enjoy!", tag);
			ColorChat(id, "!4%s!3[EN]!1 You got!3 Unlimited Clip. !4Enjoy!", tag);
			uia[id]=ASTEPTARE
		}
		case 3: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit!3 No Recoil. !4Good Luck!", tag);
			ColorChat(id, "!4%s!3[EN]!1 You got!3 No Recoil. !4Good Luck!", tag);
		}
	}
	
	itemIsChosen[id][0] = item;
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public ZombiesHandler(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}

	itemIsChosen[id][1] = item;
	
	switch(item) {
		case 0: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit GodMode, pentru!3 %d secunde!1 apasa!4 Tasta [G]!1.", tag, get_pcvar_num(cvar[madness_time]));
			ColorChat(id, "!4%s!3[EN]!1 You got GodMode, for!3 %d seconds!1 pressing!4 [G] key!1.", tag, get_pcvar_num(cvar[madness_time]));
		}
		case 1: {
			ColorChat(id, "!4%s!3[RO]!1 Ai primit!3 Long Jump. !4Enjoy!", tag);
			ColorChat(id, "!4%s!3[RO]!1 Poti folosi o data la:!3 %d secunde!1.", tag, get_pcvar_num(cvar[leap_cooldown]));
			ColorChat(id, "!4%s!3[EN]!1 You got!3 Long Jump. !4Enjoy!", tag);
			ColorChat(id, "!4%s!3[EN]!1 Cooldown ability:!3 %d seconds!1.", tag, get_pcvar_num(cvar[leap_cooldown]));
		}
		case 2: {
			set_user_infection_nade(id);
			ColorChat(id, "!4%s!3[RO]!1 Ai primit !3Grenade Infection. !4Have Fun!", tag);
			ColorChat(id, "!4%s!3[RO]!1 Atentie, la ultimul !3Om !1ramas in !3viata !1nu v-a avea efect.", tag);
			ColorChat(id, "!4%s!3[EN]!1 You got !3Grenade Infection. !4Have Fun!", tag);
			ColorChat(id, "!4%s!3[EN]!1 Attention the last !3Human !1left !3alive !1will no have effect.", tag);
		}
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public cmd_use_ability(id) {
	if (!is_user_vip[id])
		return PLUGIN_CONTINUE;

	if (is_user_alive(id)) {
		if (g_PowerDelay[id] > 0) {
			set_dhudmessage(0, 255, 255, -1.0, 0.88, 0, _, 1.0);
			show_dhudmessage(id, "Incarcare.^n(%d secunde%s ramase)", g_PowerDelay[id], g_PowerDelay[id] == 1 ? "a" : "e");
			return PLUGIN_HANDLED_MAIN;
		} else {
			if (!is_user_zombie(id)) {
				if (itemIsChosen[id][0] == 1) {
					if (teleport(id)) {
						g_PowerDelay[id] = max(get_pcvar_num(cvar[teleport_cd]), 1);
						PowerDelay(id);
						return PLUGIN_HANDLED_MAIN;
					} else {
						ColorChat(id, "!4%s!3[RO]!1 Pozitie !3invalida!1.", tag);
						ColorChat(id, "!4%s!3[EN]!1 Invalid !3position.", tag);
						return PLUGIN_HANDLED_MAIN;
					}
				}
			} else {
				if (itemIsChosen[id][1] == 0) {
					itemIsChosen[id][1] = 2; // bug fix (ca sa nu spameze g de 10000000 mil ori)
					static madnessDuration;
					madnessDuration = get_pcvar_num(cvar[madness_time]);

					message_begin(MSG_ONE_UNRELIABLE, g_msgBarTime, _, id);
					write_byte(madnessDuration);
					write_byte(0);
					message_end();
					
					set_user_godmode(id, 1);
					set_task(float(madnessDuration), "stop_madness", id+TASK_MADNESS);
				}
			}
		}
	}
	return PLUGIN_CONTINUE;
}

public stop_madness(taskid) {
	new id = taskid - TASK_MADNESS;
	set_user_godmode(id);
	remove_bartime(id);
	ColorChat(id, "!4%s!3[RO]!1 GodMode-ul a !3expirat!1.", tag);
	ColorChat(id, "!4%s!3[EN]!1 GodMode-ul has !3expired!1.", tag);
}

public PowerDelay(id) {
	if (id >= TASK_TELEPORT)
		id -= TASK_TELEPORT;
	
	if (is_user_alive(id)) {
		if (g_PowerDelay[id] > 1) {
			g_PowerDelay[id]--;
			set_task(1.0, "PowerDelay", id+TASK_TELEPORT);
		} else if (g_PowerDelay[id] <= 1) {
			g_PowerDelay[id] = 0;
			
			set_dhudmessage(255, 255, 0, -1.0, 0.88, 0, _, 2.0);
			show_dhudmessage(id, "Teleport-ul este gata.^nApasa G pentru a folosi.");
		}
	}
}

public PowerReset(id) {
	task_exists(TASK_TELEPORT + id) ? remove_task(TASK_TELEPORT + id) : 0;
	g_PowerDelay[id] = 0;
}

public event_infect(victim, attacker) {
	if (victim != attacker && is_user_alive(attacker) && is_user_vip[attacker]) {
		cs_set_user_money(attacker, min(cs_get_user_money(attacker) + get_pcvar_num(cvar[money_infection]), MAX_MONEY));
		set_user_health(attacker, get_user_health(attacker) + get_pcvar_num(cvar[health_infection]));
	}
}

public event_Damage(victim)
{
	new id = get_user_attacker(victim);
	if(is_user_valid(id))
	{
		if(is_user_alive(id) && (is_user_vip[id] && get_pcvar_num(cvar[show_bullet_dmg]) == 1) || (get_user_flags(id)&ADMIN_LEVEL_A && get_pcvar_num(cvar[admin_show_bullet_dmg]) == 1))
		{
			if(read_data(4) || read_data(5) || read_data(6))
			{		
				new iPos = ++g_iPlayerPos[id];
				if(iPos == sizeof(g_flCoords))
					iPos = g_iPlayerPos[id] = 0;
				
				new iCol = ++g_iPlayerCol[id];
				if(iCol == sizeof(g_iColors))
					iCol = g_iPlayerCol[id] = 0;
				
				set_hudmessage(g_iColors[iCol][0], g_iColors[iCol][1], g_iColors[iCol][2], Float:g_flCoords[iPos][0], Float:g_flCoords[iPos][1], 0, 0.1, 2.5, 0.02, 0.02, -1);
				show_hudmessage(id, "%d", read_data(2));
			}
		}
	}
	
	return PLUGIN_CONTINUE;
}

public event_NewRound()
{
	static i;
	for (i = 0; i < max_players; i++) {
		itemIsChosen[i][0] = -1;
		itemIsChosen[i][1] = -1;
		PowerReset(i);
		remove_bartime(i);
		if(uia[i]>0)	uia[i]--;
	}
}

public event_CurWeapon(id)
{
	if (!is_user_alive(id))
		return PLUGIN_HANDLED;

	if (!is_user_vip[id])
		return PLUGIN_CONTINUE;

	if (itemIsChosen[id][0] != 2)
		return PLUGIN_HANDLED;

	new weapon = read_data(2);
	if (!(NOCLIP_WPN_BS & (1<<weapon))) {
		fm_cs_set_weapon_ammo(get_pdata_cbase(id, m_pActiveItem), g_MaxClipAmmo[weapon]);
	}
	return PLUGIN_CONTINUE;
}

public event_DeathMsg()
{
	PowerReset(read_data(2));
}

public event_ResetModel(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE;

	if(is_user_alive(id) && !is_user_vip[id])
		return PLUGIN_CONTINUE;

	new mdl_buffer[64];
	get_pcvar_string(cvar[model], mdl_buffer, 63);

	new CsTeams:userTeam = cs_get_user_team(id);
	if(userTeam == CS_TEAM_T || userTeam == CS_TEAM_CT)
	{
		cs_set_user_model(id, mdl_buffer);
		return PLUGIN_HANDLED;
	}
	else
	{
		cs_reset_user_model(id);
	}

	return PLUGIN_CONTINUE;
}

public fw_PlayerSpawnPost(id)
{
	if(is_user_vip[id] && is_user_alive(id))
	{
		set_task(0.25, "give_items", id);
		return HAM_IGNORED;
	}
	
	return HAM_IGNORED;
}

public give_items(id)
{
	new cache = get_pcvar_num(cvar[hp_spawn])
	if(cache != 0) set_user_health(id, cache);

	cache = get_pcvar_num(cvar[ap_spawn]);
	if(cache != 0) give_item(id, "item_assaultsuit");
}

public fw_TakeDamagePre(victim, iInflictor, attacker, Float:fDamage, iDmgType)
{
	if(victim == attacker || !is_user_valid(attacker) || !is_user_alive(attacker) || !is_user_zombie(victim))
		return HAM_HANDLED;

	if (!is_user_vip[attacker])
		return HAM_IGNORED;

	if (itemIsChosen[attacker][0] == 0) {
		static Float:current_damage;
		current_damage = fDamage;
		fDamage = fDamage + fDamage * (get_pcvar_num(cvar[multidamage]) / 100.0);

		if(iDmgType & DMG_HEGRENADE)
			fDamage = current_damage;
		
		SetHamParamFloat(4, fDamage);
		return HAM_HANDLED;
	}
	return HAM_IGNORED;
}

public fw_PrimaryAttack(ent)
{
	new id = pev(ent, pev_owner);
	if(is_user_alive(id) && is_user_vip[id] && itemIsChosen[id][0] == 3)
		pev(id, pev_punchangle, cl_pushangle[id]);

	return HAM_IGNORED;
}

public fw_PrimaryAttackPost(ent)
{
	new id = pev(ent, pev_owner);
	if(is_user_alive(id) && is_user_vip[id] && itemIsChosen[id][0] == 3)
	{
		new Float:fPush[3];
		pev(id, pev_punchangle, fPush);

		xs_vec_sub(fPush, cl_pushangle[id], fPush );
		xs_vec_mul_scalar(fPush, random_float(0.0, 0.2), fPush);
		xs_vec_add(fPush, cl_pushangle[id], fPush );

		set_pev(id, pev_punchangle, fPush);
	}
	
	return HAM_IGNORED;
}

public fw_PlayerPreThink(id)
{	
	// --- Check if player should leap ---
	if (is_user_alive(id) && is_user_zombie(id) && is_user_vip[id] && itemIsChosen[id][1] == 1) {
		// Check if proper CVARs are enabled and retrieve leap settings
		static Float:cooldown, Float:current_time;
		cooldown = 5.0;
		current_time = get_gametime()
		
		// Cooldown not over yet
		if (current_time - g_lastleaptime[id] < cooldown)
			return;
		
		// Not doing a longjump (don't perform check for bots, they leap automatically)
		if (!is_user_bot(id) && !(pev(id, pev_button) & (IN_JUMP | IN_DUCK) == (IN_JUMP | IN_DUCK)))
			return;

		// Not on ground or not enough speed
		if (!(pev(id, pev_flags) & FL_ONGROUND) || fm_get_speed(id) < 80)
			return;
		
		static Float:velocity[3];
		
		// Make velocity vector
		velocity_by_aim(id, get_pcvar_num(cvar[leap_force]), velocity);
		
		// Set custom height
		velocity[2] = float(get_pcvar_num(cvar[leap_height]));
		
		// Apply the new velocity
		set_pev(id, pev_velocity, velocity);
		
		// Update last leap time
		g_lastleaptime[id] = current_time;
	}
}

public fw_Userinfochanged(id, buffer)
{
	if (!is_user_connected(id))
		return FMRES_IGNORED;

	static oldname[32], newname[32]
	get_user_name(id, oldname, 31);
	engfunc(EngFunc_InfoKeyValue, buffer, g_name, newname, 31);

	if (equal(newname, oldname))
		return FMRES_IGNORED;

	client_putinserver(id);
	return FMRES_IGNORED;
}

public msg_ScoreAttrib(msgid, dest, id)
{
	if(!get_pcvar_num(cvar[show_vip_tab]))
		return PLUGIN_CONTINUE;
		
	new id = get_msg_arg_int(1);
	if(is_user_connected(id) && is_user_vip[id])
		set_msg_arg_int(2, ARG_BYTE, is_user_alive(id) ? (1<<2) : (1<<0));
	
	return PLUGIN_CONTINUE;
}

public verifica_ora(task)
{
	time(ora, _, _);
	event_on = (ora >= ORA_INCEPUT && ora < ORA_SFARSIT) ? true : false;

	new jucatori[32], numar = 0, i, id;
	if(event_on)
	{
		if(prima_data)
		{
			ColorChat(id, "!4--------------------------------------------------------");
			ColorChat(id, "!4***!1 EVENTUL!3 VIP FREE!1 A FOST ACTIVAT.");
			ColorChat(id, "!4***!1 Acesta va fi dezactivat la ora!4 %d!1.", ORA_SFARSIT);
			ColorChat(id, "!4--------------------------------------------------------");

			prima_data = false;
		}

		get_players(jucatori, numar);
		for(i = 0; i < numar; i++)
		{
			id = jucatori[i];
			is_user_vip[id] = true;
		}
	}
	else
	{
		if(!prima_data)
		{
			get_players(jucatori, numar);
			for(i = 0; i < numar; i++)
			{
				id = jucatori[i];
				is_user_vip[id] = existsInFile[id];
				ColorChat(id, "!4-------------------------------------------------------------");
				ColorChat(id, "!4***!1 EVENTUL!3 VIP FREE!1 A FOST DEZACTIVAT.");
				ColorChat(id, "!4***!1 Acesta va reincepe la ora!4 %d!1.", ORA_INCEPUT);
				ColorChat(id, "!4-------------------------------------------------------------");
			}
			prima_data = true;
		}
	}
}

public anunta_jucatori()
{
	if(!event_on)
		return;

	set_hudmessage(30, 120, 225, 0.0, 0.3, 1, 3.0, 3.0);
	show_hudmessage(0, "EVENT V.I.P FREE");
}

stock ColorChat(id, String[], any:...) 
{
	static szMesage[192];
	vformat(szMesage, charsmax(szMesage), String, 3);
	
	replace_all(szMesage, charsmax(szMesage), "!1", "^1");
	replace_all(szMesage, charsmax(szMesage), "!3", "^3");
	replace_all(szMesage, charsmax(szMesage), "!4", "^4");
	
	static g_msg_SayText = 0;
	if(!g_msg_SayText)
		g_msg_SayText = get_user_msgid("SayText");
	
	new Players[32], iNum = 1, i;

 	if(id) Players[0] = id;
	else get_players(Players, iNum, "ch");
	
	for(--iNum; iNum >= 0; iNum--) 
	{
		i = Players[iNum];
		
		message_begin(MSG_ONE_UNRELIABLE, g_msg_SayText, _, i);
		write_byte(i);
		write_string(szMesage);
		message_end();
	}
}

public remove_bartime(id)
{
	if(task_exists(id+TASK_MADNESS))
	{
		message_begin(MSG_ONE_UNRELIABLE, g_msgBarTime, _, id);
		write_byte(0);
		write_byte(0);
		message_end();
		
		remove_task(id+TASK_MADNESS);
	}
}

// Get entity's speed (from fakemeta_util)
stock fm_get_speed(entity)
{
	static Float:velocity[3]
	pev(entity, pev_velocity, velocity)
	
	return floatround(vector_length(velocity));
}

bool:teleport(id)
{
	new Float:vOrigin[3], Float:vNewOrigin[3], Float:vNormal[3], Float:vTraceDirection[3], Float:vTraceEnd[3];
	
	pev(id, pev_origin, vOrigin);
	
	velocity_by_aim(id, 99999, vTraceDirection);
	xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
	
	engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
	
	new Float:flFraction;
	get_tr2(0, TR_flFraction, flFraction);

	if(flFraction < 1.0)
	{
		get_tr2(0, TR_vecEndPos, vTraceEnd);
		get_tr2(0, TR_vecPlaneNormal, vNormal);
	}
	
	xs_vec_mul_scalar(vNormal, 40.0, vNormal);
	xs_vec_add(vTraceEnd, vNormal, vNewOrigin);
	
	if(is_player_stuck(id, vNewOrigin))
		return false;
	
	emit_sound(id, CHAN_STATIC, SOUND_BLINK, 1.0, ATTN_NORM, 0, PITCH_NORM);
	tele_effect(vOrigin);
	
	engfunc(EngFunc_SetOrigin, id, vNewOrigin);
	
	tele_effect2(vNewOrigin);

	return true;
}
Levin mersi frumos, merge foarte bine, numa ca am uitat sa spun daca poti face atunci cand nu poate alege gloantele infinite sa apara mesajul asta in chat:
ColorChat(id, "!4%s!3[RO]!1 Poti folosi!3 Gloantele Infinite!1 o data la 2 runde", tag);
scuze, dar am uitat de asta, si mersi frumos inca o data
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

09 Feb 2021, 17:17

if(uia[id]) return PLUGIN_HANDLED
-
if(uia[id]){
ColorChat(id, "!4%s!3[RO]!1 Poti folosi!3 Gloantele Infinite!1 o data la 2 runde", tag);
return PLUGIN_HANDLED
}
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
sammi1
Membru, skill 0
Membru, skill 0
Posts: 49
Joined: 30 Jan 2021, 22:38
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Detinator server CS: Zm.CsPower.Ro
Fond eXtream: 0
Has thanked: 23 times

09 Feb 2021, 17:59

A mers, multumesc frumos din nou, problema rezolvata, se poate da T/C. :D :X
User avatar
ChristianEvo
Membru, skill +1
Membru, skill +1
Posts: 208
Joined: 13 Jul 2015, 14:57
Detinator Steam: Da
CS Status: BB Force
Detinator server CS: EVO.MANIACS.RO
SteamID: eVo_style
Fond eXtream: 0
Has thanked: 4 times
Been thanked: 2 times
Contact:

08 Apr 2021, 11:09

@sammi1 ma poti ajuta , si pe mine cu acest plugin?
Nu reusesc sa il fac sa se compileze..imi da eroare...
Am nevoie de alte fisiere .inc pe care le ai tu?
Mersi..
Post Reply

Return to “Modificari pluginuri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 3 guests