Merhaba Arkadaşlar Hayirli Günler.
Cod Aşağida Arkadaşlar Benim İstedim Birşey Var.
Biohazard Zombie Serverim Varda /nvg Sorunsuz Düzenli Çalişmaktada İstedim Şey.
Sadece Zombie Oldunda Menü'nün Direk gelmesi yani zombie iken 1daha /nvg Yazmasinlar.
Zombie Olduklarinda Direk Menü Gelmesini İstiyorum Yaparsaniz Sevinirim..
Kod:
/*================================================================================


	---------------------------------------------------------------------------------
	|	<= Description =>							|
	|	-----------------							|
	|										|
	| This plugin added a colored NightVision into Zombie Infection Mod (Biohazard).|	
	| Some code taken from Zombie Plague 4.3. Thanks you, MeRcyLeZZ.		|
	| Official page: < https://amxx.com.ua/bio-colored-nightvision/ >		|
	---------------------------------------------------------------------------------
	
	---------------------------------------------------------------------------------
	|	<= CVARs =>								|
	|	-----------								|
	|										|
	| nvg_radius 80 - Size radius lighting.						|
	---------------------------------------------------------------------------------
	
	---------------------------------------------------------------------------------
	|	<= Changelog =>								|
	|	---------------								|
	|										|
	| * v1.0: (3.9.2010)								|
	| 	- First release.							|
	---------------------------------------------------------------------------------
	
================================================================================*/


#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <biohazard>


#define PLUGIN "[BIO] Colored NightVision"
#define VERSION "1.0"
#define AUTHOR "Slavvkko"


#define OFFSET_TEAM 114
#define OFFSET_NVG 129


new const g_Colors[][3] =
{
//	R	G	B
	{150,	0,	0},	// 1
	{0,	150,	0},	// 2
	{0,	0,	150},	// 3
	{0,	150,	150},	// 4
	{102,	0,	255},	// 5
	{202,	31,	123},	// 6
	{255,	255,	0}	// 7
};


new g_UserColor[33][3];
new bool:g_Chose[33];
new bool:g_nvision[33];
new bool:g_nvisionenabled[33];
new g_playername[33][32];
new g_maxplayers;


// SaveColor written by type Zombie Plague 4.3
const MAX_STATS_SAVED = 64;
new db_name[MAX_STATS_SAVED][32];
new db_user_nvg_color[MAX_STATS_SAVED][3];
new bool:db_chose[MAX_STATS_SAVED];
new db_slot_i;


new cvar_autonvg, cvar_radius;


public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_dictionary("bio_colored_nightvision.txt");
	
	register_logevent("logevent_round_end", 2, "1=Round_End");
	
	register_clcmd("say /nvg", "clcmd_nvg");
	register_clcmd("say_team /nvg", "clcmd_nvg");
	register_clcmd("nightvision", "clcmd_nightvision");
	
	cvar_autonvg = get_cvar_pointer("bh_autonvg");
	cvar_radius = register_cvar("nvg_radius", "80");
	
	RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1);
	RegisterHam(Ham_Killed, "player", "fw_PlayerKilled");
	register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged");
	
	g_maxplayers = get_maxplayers();
	
	register_message(get_user_msgid("NVGToggle"), "message_NVGToggle");
}


public logevent_round_end()
{
	static id;
	for (id = 1; id <= g_maxplayers; id++)
		SaveColor(id);
}


public fw_PlayerSpawn_Post(id)
{
	if (!is_user_alive(id) || !fm_cs_get_user_team(id))
		return;
		
	remove_task(id);
	g_nvision[id] = false;
}


public fw_PlayerKilled(victim, attacker, shouldgib)
{
	g_nvision[victim] = false;
	set_task(0.1, "spec_nvision", victim);
}


public fw_ClientUserInfoChanged(id)
{
	get_user_name(id, g_playername[id], charsmax(g_playername[]));
}


public client_putinserver(id)
{
	get_user_name(id, g_playername[id], charsmax(g_playername[]));
	
	// Set color 2
	g_UserColor[id] = g_Colors[1];
	g_Chose[id] = false;
	
	LoadColor(id);
}


public client_disconnect(id)
{
	SaveColor(id);
	remove_task(id);
}


public event_infect(victim, attacker)
{
	if (get_pcvar_num(cvar_autonvg))
	{
		g_nvisionenabled[victim] = true;
		remove_task(victim);
		set_task(0.1, "set_user_nvision", victim, _, _, "b");
	}
	
	g_nvision[victim] = true;
}


public message_NVGToggle()
{
	return PLUGIN_HANDLED;
}


public clcmd_nvg(id)
{
	ShowMenu(id);
	
	return PLUGIN_HANDLED;
}


public clcmd_nightvision(id)
{
	if (g_nvision[id] || fm_get_user_nvg(id))
	{
		g_nvisionenabled[id] = !(g_nvisionenabled[id]);
		
		remove_task(id);
		if (g_nvisionenabled[id])
			set_task(0.1, "set_user_nvision", id, _, _, "b");
	}
	
	return PLUGIN_HANDLED;
}


ShowMenu(id)
{
	static iMenu, szMenu[64], i, Buffer[2];
	
	formatex(szMenu, charsmax(szMenu), "%L", id, "NVG_MENUTITLE");
	
	iMenu = menu_create(szMenu, "handler_nvg");
	
	for (i = 0; i < sizeof(g_Colors); i++)
	{
		formatex(szMenu, charsmax(szMenu), "NVG_COLOR_%d", i + 1);
		format(szMenu, charsmax(szMenu), "%L", id, szMenu);
		Buffer[0] = i;
		menu_additem(iMenu, szMenu, Buffer);
	}
	
	formatex(szMenu, charsmax(szMenu), "%L", id, "NVG_MENUBACK");
	menu_setprop(iMenu, MPROP_BACKNAME, szMenu);
	formatex(szMenu, charsmax(szMenu), "%L", id, "NVG_MENUNEXT");
	menu_setprop(iMenu, MPROP_NEXTNAME, szMenu);
	formatex(szMenu, charsmax(szMenu), "%L", id, "NVG_MENUEXIT");
	menu_setprop(iMenu, MPROP_EXIT, szMenu);
	
	menu_display(id, iMenu);
}


public handler_nvg(id, iMenu, item)
{
	if (item == MENU_EXIT)
	{
		menu_destroy(iMenu);
		return PLUGIN_HANDLED;
	}
	
	static Buffer[2], temp, itemid;
	menu_item_getinfo(iMenu, item, temp, Buffer, charsmax(Buffer), _, _, temp);
	itemid = Buffer[0];
	
	g_UserColor[id] = g_Colors[itemid];
	
	g_Chose[id] = true;
	
	menu_destroy(iMenu);
	return PLUGIN_HANDLED;
}


SaveColor(id)
{
	if (!g_Chose[id])
		return;


	if (db_name[id][0] && !equal(g_playername[id], db_name[id]))
	{
		if (db_slot_i >= sizeof(db_name))
			db_slot_i = g_maxplayers + 1;
		
		copy(db_name[db_slot_i], charsmax(db_name[]), db_name[id]);
		db_user_nvg_color[db_slot_i] = db_user_nvg_color[id];
		db_chose[db_slot_i] = g_Chose[id];
		db_slot_i++;
	}
	
	copy(db_name[id], charsmax(db_name[]), g_playername[id]);
	db_user_nvg_color[id] = g_UserColor[id];
	db_chose[id] = g_Chose[id];
}


LoadColor(id)
{
	static i;
	for (i = 0; i < sizeof(db_name); i++)
	{
		if (equal(g_playername[id], db_name[i]))
		{
			g_Chose[id] = db_chose[i];
			if (g_Chose[id])
				g_UserColor[id] = db_user_nvg_color[i];
				
			return;
		}
	}
}


public spec_nvision(id)
{
	if (!is_user_connected(id) || is_user_alive(id))
		return;
	
	g_nvision[id] = true;
	g_nvisionenabled[id] = true;
	remove_task(id);
	set_task(0.1, "set_user_nvision", id, _, _, "b");
}


public set_user_nvision(id)
{
	static origin[3];
	get_user_origin(id, origin);
	
	message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id);
	write_byte(TE_DLIGHT);
	write_coord(origin[0]);
	write_coord(origin[1]);
	write_coord(origin[2]);
	write_byte(get_pcvar_num(cvar_radius));
	write_byte(g_UserColor[id][0]);
	write_byte(g_UserColor[id][1]);
	write_byte(g_UserColor[id][2]);
	write_byte(2);
	write_byte(0);
	message_end();
}


stock fm_cs_get_user_team(id)
{
	return get_pdata_int(id, OFFSET_TEAM);
}


stock fm_get_user_nvg(index)
{
	return get_pdata_int(index, OFFSET_NVG);
}