2223 lines
		
	
	
		
			54 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			2223 lines
		
	
	
		
			54 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
/**
 | 
						|
 * HLstatsX Community Edition - SourceMod plugin to display ingame messages
 | 
						|
 * http://www.hlxcommunity.com/
 | 
						|
 * Copyright (C) 2008-2009 Nicholas Hastings
 | 
						|
 * Copyright (C) 2007-2009 TTS Oetzel & Goerz GmbH
 | 
						|
 * Modified by Nicholas Hastings (psychonic) for use with HLstatsX Community Edition
 | 
						|
 *
 | 
						|
 * This program is free software; you can redistribute it and/or
 | 
						|
 * modify it under the terms of the GNU General Public License
 | 
						|
 * as published by the Free Software Foundation; either version 2
 | 
						|
 * of the License, or (at your option) any later version.
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful,
 | 
						|
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
 * GNU General Public License for more details.
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU General Public License
 | 
						|
 * along with this program; if not, write to the Free Software
 | 
						|
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 | 
						|
 */
 | 
						|
 | 
						|
#pragma semicolon 1
 | 
						|
 | 
						|
#define REQUIRE_EXTENSIONS
 | 
						|
#include <sourcemod>
 | 
						|
#include <sdktools>
 | 
						|
#include <loghelper>
 | 
						|
#undef REQUIRE_EXTENSIONS
 | 
						|
#include <cstrike>
 | 
						|
#include <clientprefs>
 | 
						|
 | 
						|
#define VERSION "1.6.19"
 | 
						|
#define HLXTAG "HLstatsX:CE"
 | 
						|
 | 
						|
enum GameType {
 | 
						|
	Game_Unknown = -1,
 | 
						|
	Game_CSS,
 | 
						|
	Game_DODS,
 | 
						|
	Game_L4D,
 | 
						|
	Game_TF,
 | 
						|
	Game_HL2MP,
 | 
						|
	Game_INSMOD,
 | 
						|
	Game_FF,
 | 
						|
	Game_ZPS,
 | 
						|
	Game_AOC,
 | 
						|
	Game_FOF,
 | 
						|
	Game_GES,
 | 
						|
	Game_PVKII,
 | 
						|
	Game_CSP,
 | 
						|
	Game_ND,
 | 
						|
	Game_DDD,
 | 
						|
	Game_CSGO,
 | 
						|
};
 | 
						|
 | 
						|
new GameType:gamemod = Game_Unknown;
 | 
						|
 | 
						|
new Handle: hlx_block_chat_commands;
 | 
						|
new Handle: hlx_message_prefix;
 | 
						|
new Handle: hlx_protect_address;
 | 
						|
new Handle: hlx_server_tag;
 | 
						|
new Handle: sv_tags;
 | 
						|
new Handle: message_recipients;
 | 
						|
new const String: blocked_commands[][] = { "rank", "skill", "points", "place", "session", "session_data",
 | 
						|
                                     "kpd", "kdratio", "kdeath", "next", "load", "status", "servers",
 | 
						|
                                     "top20", "top10", "top5", "clans", "bans", "cheaters", "statsme", "weapons",
 | 
						|
                                     "weapon", "action", "actions", "accuracy", "targets", "target", "kills",
 | 
						|
                                     "kill", "player_kills", "cmd", "cmds", "command", "hlx_display 0",
 | 
						|
                                     "hlx_display 1", "hlx_teams 0", "hlx_teams 1", "hlx_hideranking",
 | 
						|
                                     "hlx_chat 0", "hlx_chat 1", "hlx_menu", "servers 1", "servers 2",
 | 
						|
                                     "servers 3", "hlx", "hlstatsx", "help" };
 | 
						|
 | 
						|
new Handle:HLstatsXMenuMain;
 | 
						|
new Handle:HLstatsXMenuAuto;
 | 
						|
new Handle:HLstatsXMenuEvents;
 | 
						|
 | 
						|
new Handle: PlayerColorArray;
 | 
						|
new ColorSlotArray[] = { -1, -1, -1, -1, -1, -1 };
 | 
						|
 | 
						|
new const String:ct_models[][] = {
 | 
						|
	"models/player/ct_urban.mdl",
 | 
						|
	"models/player/ct_gsg9.mdl",
 | 
						|
	"models/player/ct_sas.mdl",
 | 
						|
	"models/player/ct_gign.mdl"
 | 
						|
};
 | 
						|
 | 
						|
new const String:ts_models[][] = {
 | 
						|
	"models/player/t_phoenix.mdl",
 | 
						|
	"models/player/t_leet.mdl",
 | 
						|
	"models/player/t_arctic.mdl",
 | 
						|
	"models/player/t_guerilla.mdl"
 | 
						|
};
 | 
						|
 | 
						|
new const String: modnamelist[][] = {
 | 
						|
	"Counter-Strike: Source",
 | 
						|
	"Day of Defeat: Source",
 | 
						|
	"Left 4 Dead (1 or 2)",
 | 
						|
	"Team Fortress 2",
 | 
						|
	"Half-Life 2 Deathmatch",
 | 
						|
	"Insurgency",
 | 
						|
	"Fortress Forever",
 | 
						|
	"Zombie Panic: Source",
 | 
						|
	"Age of Chivalry",
 | 
						|
	"Fistful of Frags",
 | 
						|
	"GoldenEye: Source",
 | 
						|
	"Pirates, Vikings, and Knights",
 | 
						|
	"CSPromod",
 | 
						|
	"Nuclear Dawn",
 | 
						|
	"Dino D-Day",
 | 
						|
	"Counter-Strike: Global Offensive"
 | 
						|
};
 | 
						|
 | 
						|
new String: message_prefix[32];
 | 
						|
new bool:g_bPlyrCanDoMotd[MAXPLAYERS+1];
 | 
						|
new bool:g_bGameCanDoMotd = true;
 | 
						|
new bool:g_bTrackColors4Chat;
 | 
						|
new g_iSDKVersion = SOURCE_SDK_UNKNOWN;
 | 
						|
new Handle:g_cvarTeamPlay = INVALID_HANDLE;
 | 
						|
new bool:g_bTeamPlay;
 | 
						|
new bool:g_bLateLoad = false;
 | 
						|
new bool:g_bIgnoreNextTagChange = false;
 | 
						|
new Handle:g_hCustomTags;
 | 
						|
 | 
						|
#define SVTAGSIZE 128
 | 
						|
 | 
						|
public Plugin:myinfo = {
 | 
						|
	name = "HLstatsX CE Ingame Plugin",
 | 
						|
	author = "psychonic",
 | 
						|
	description = "Provides ingame functionality for interaction from an HLstatsX CE installation",
 | 
						|
	version = VERSION,
 | 
						|
	url = "http://www.hlxcommunity.com"
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max)
 | 
						|
{
 | 
						|
	g_bLateLoad = late;
 | 
						|
	MarkNativeAsOptional("CS_SwitchTeam");
 | 
						|
	MarkNativeAsOptional("CS_RespawnPlayer");
 | 
						|
	MarkNativeAsOptional("SetCookieMenuItem");
 | 
						|
 | 
						|
	return APLRes_Success;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public OnPluginStart()
 | 
						|
{
 | 
						|
	get_server_mod();
 | 
						|
 | 
						|
	CreateHLstatsXMenuMain(HLstatsXMenuMain);
 | 
						|
	CreateHLstatsXMenuAuto(HLstatsXMenuAuto);
 | 
						|
	CreateHLstatsXMenuEvents(HLstatsXMenuEvents);
 | 
						|
 | 
						|
	RegServerCmd("hlx_sm_psay",          hlx_sm_psay);
 | 
						|
	RegServerCmd("hlx_sm_psay2",         hlx_sm_psay2);
 | 
						|
	RegServerCmd("hlx_sm_bulkpsay",      hlx_sm_psay);
 | 
						|
	RegServerCmd("hlx_sm_csay",          hlx_sm_csay);
 | 
						|
	RegServerCmd("hlx_sm_msay",          hlx_sm_msay);
 | 
						|
	RegServerCmd("hlx_sm_tsay",          hlx_sm_tsay);
 | 
						|
	RegServerCmd("hlx_sm_hint",          hlx_sm_hint);
 | 
						|
	RegServerCmd("hlx_sm_browse",        hlx_sm_browse);
 | 
						|
	RegServerCmd("hlx_sm_swap",          hlx_sm_swap);
 | 
						|
	RegServerCmd("hlx_sm_redirect",      hlx_sm_redirect);
 | 
						|
	RegServerCmd("hlx_sm_player_action", hlx_sm_player_action);
 | 
						|
	RegServerCmd("hlx_sm_team_action",   hlx_sm_team_action);
 | 
						|
	RegServerCmd("hlx_sm_world_action",  hlx_sm_world_action);
 | 
						|
 | 
						|
	if (gamemod == Game_INSMOD)
 | 
						|
	{
 | 
						|
		AddCommandListener(hlx_block_commands, "say2");
 | 
						|
	}
 | 
						|
	else if (gamemod == Game_ND)
 | 
						|
	{
 | 
						|
		AddCommandListener(hlx_block_commands, "say_squad");
 | 
						|
	}
 | 
						|
 | 
						|
	AddCommandListener(hlx_block_commands, "say");
 | 
						|
	AddCommandListener(hlx_block_commands, "say_team");
 | 
						|
 | 
						|
	switch (gamemod)
 | 
						|
	{
 | 
						|
		case Game_CSS, Game_L4D, Game_TF, Game_HL2MP, Game_AOC, Game_FOF, Game_PVKII, Game_ND, Game_DDD, Game_CSGO:
 | 
						|
		{
 | 
						|
			g_bTrackColors4Chat = true;
 | 
						|
			HookEvent("player_team",  HLstatsX_Event_PlyTeamChange, EventHookMode_Post);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	switch (gamemod)
 | 
						|
	{
 | 
						|
		case Game_L4D, Game_INSMOD, Game_GES, Game_CSGO:
 | 
						|
		{
 | 
						|
			g_bGameCanDoMotd = false;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if (gamemod == Game_HL2MP)
 | 
						|
	{
 | 
						|
		g_cvarTeamPlay = FindConVar("mp_teamplay");
 | 
						|
		if (g_cvarTeamPlay != INVALID_HANDLE)
 | 
						|
		{
 | 
						|
			g_bTeamPlay = GetConVarBool(g_cvarTeamPlay);
 | 
						|
			HookConVarChange(g_cvarTeamPlay, OnTeamPlayChange);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	CreateConVar("hlxce_plugin_version", VERSION, "HLstatsX:CE Ingame Plugin", FCVAR_NOTIFY);
 | 
						|
	CreateConVar("hlxce_version", "", "HLstatsX:CE", FCVAR_NOTIFY);
 | 
						|
	CreateConVar("hlxce_webpage", "http://www.hlxcommunity.com", "http://www.hlxcommunity.com", FCVAR_NOTIFY);
 | 
						|
 | 
						|
	hlx_block_chat_commands = CreateConVar("hlx_block_commands", "1", "If activated HLstatsX commands are blocked from the chat area", 0);
 | 
						|
	hlx_message_prefix = CreateConVar("hlx_message_prefix", "", "Define the prefix displayed on every HLstatsX ingame message", 0);
 | 
						|
	hlx_protect_address = CreateConVar("hlx_protect_address", "", "Address to be protected for logging/forwarding", 0);
 | 
						|
	hlx_server_tag = CreateConVar("hlx_server_tag", "1", "If enabled, adds \"HLstatsX:CE\" to server tags on supported games. 1 = Enabled (default), 0 = Disabled",
 | 
						|
		0, true, 0.0, true, 1.0);
 | 
						|
 | 
						|
	g_hCustomTags = CreateArray(SVTAGSIZE);
 | 
						|
	sv_tags = FindConVar("sv_tags");
 | 
						|
	g_iSDKVersion = GuessSDKVersion();
 | 
						|
 | 
						|
	if (g_bLateLoad)
 | 
						|
	{
 | 
						|
		GetConVarString(hlx_message_prefix, message_prefix, sizeof(message_prefix));
 | 
						|
		decl String:protaddr[24];
 | 
						|
		GetConVarString(hlx_protect_address, protaddr, sizeof(protaddr));
 | 
						|
		OnProtectAddressChange(hlx_protect_address, "", protaddr);
 | 
						|
	}
 | 
						|
 | 
						|
	MyAddServerTag(HLXTAG);
 | 
						|
 | 
						|
	HookConVarChange(hlx_message_prefix, OnMessagePrefixChange);
 | 
						|
	HookConVarChange(hlx_protect_address, OnProtectAddressChange);
 | 
						|
	HookConVarChange(hlx_server_tag, OnServerTagChange);
 | 
						|
	if (sv_tags != INVALID_HANDLE)
 | 
						|
	{
 | 
						|
		HookConVarChange(sv_tags, OnSVTagsChange);
 | 
						|
	}
 | 
						|
 | 
						|
	RegServerCmd("log", ProtectLoggingChange);
 | 
						|
	RegServerCmd("logaddress_del", ProtectForwardingChange);
 | 
						|
	RegServerCmd("logaddress_delall", ProtectForwardingDelallChange);
 | 
						|
	RegServerCmd("hlx_message_prefix_clear", MessagePrefixClear);
 | 
						|
 | 
						|
	PlayerColorArray = CreateArray();
 | 
						|
	message_recipients = CreateStack();
 | 
						|
 | 
						|
	GetTeams(gamemod == Game_INSMOD);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public OnAllPluginsLoaded()
 | 
						|
{
 | 
						|
	if (LibraryExists("clientprefs"))
 | 
						|
	{
 | 
						|
		SetCookieMenuItem(HLXSettingsMenu, 0, "HLstatsX:CE Settings");
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
public HLXSettingsMenu(client, CookieMenuAction:action, any:info, String:buffer[], maxlen)
 | 
						|
{
 | 
						|
	if (action == CookieMenuAction_SelectOption)
 | 
						|
	{
 | 
						|
		DisplayMenu(HLstatsXMenuMain, client, MENU_TIME_FOREVER);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public OnMapStart()
 | 
						|
{
 | 
						|
	GetTeams(gamemod == Game_INSMOD);
 | 
						|
 | 
						|
	if (g_bTrackColors4Chat)
 | 
						|
	{
 | 
						|
		find_player_team_slot(2);
 | 
						|
		find_player_team_slot(3);
 | 
						|
		if (gamemod == Game_PVKII)
 | 
						|
		{
 | 
						|
			find_player_team_slot(4);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
bool:BTagsSupported()
 | 
						|
{
 | 
						|
	return (sv_tags != INVALID_HANDLE && (g_iSDKVersion == SOURCE_SDK_EPISODE2 || g_iSDKVersion == SOURCE_SDK_EPISODE2VALVE || gamemod == Game_ND));
 | 
						|
}
 | 
						|
 | 
						|
stock MyAddServerTag(const String:tag[])
 | 
						|
{
 | 
						|
	if (!BTagsSupported())
 | 
						|
	{
 | 
						|
		// game doesn't support sv_tags
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	if (!GetConVarBool(hlx_server_tag))
 | 
						|
	{
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	if (FindStringInArray(g_hCustomTags, tag) == -1)
 | 
						|
	{
 | 
						|
		PushArrayString(g_hCustomTags, tag);
 | 
						|
	}
 | 
						|
 | 
						|
	decl String:current_tags[SVTAGSIZE];
 | 
						|
	GetConVarString(sv_tags, current_tags, sizeof(current_tags));
 | 
						|
	if (StrContains(current_tags, tag) > -1)
 | 
						|
	{
 | 
						|
		// already have tag
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String:new_tags[SVTAGSIZE];
 | 
						|
	Format(new_tags, sizeof(new_tags), "%s%s%s", current_tags, (current_tags[0]!=0)?",":"", tag);
 | 
						|
 | 
						|
	new flags = GetConVarFlags(sv_tags);
 | 
						|
	SetConVarFlags(sv_tags, flags & ~FCVAR_NOTIFY);
 | 
						|
	g_bIgnoreNextTagChange = true;
 | 
						|
	SetConVarString(sv_tags, new_tags);
 | 
						|
	g_bIgnoreNextTagChange = false;
 | 
						|
	SetConVarFlags(sv_tags, flags);
 | 
						|
}
 | 
						|
 | 
						|
stock MyRemoveServerTag(const String:tag[])
 | 
						|
{
 | 
						|
	if (!BTagsSupported())
 | 
						|
	{
 | 
						|
		// game doesn't support sv_tags
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	new idx = FindStringInArray(g_hCustomTags, tag);
 | 
						|
	if (idx > -1)
 | 
						|
	{
 | 
						|
		RemoveFromArray(g_hCustomTags, idx);
 | 
						|
	}
 | 
						|
 | 
						|
	decl String:current_tags[SVTAGSIZE];
 | 
						|
	GetConVarString(sv_tags, current_tags, sizeof(current_tags));
 | 
						|
	if (StrContains(current_tags, tag) == -1)
 | 
						|
	{
 | 
						|
		// tag isn't on here, just bug out
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	ReplaceString(current_tags, sizeof(current_tags), tag, "");
 | 
						|
	ReplaceString(current_tags, sizeof(current_tags), ",,", "");
 | 
						|
 | 
						|
	new flags = GetConVarFlags(sv_tags);
 | 
						|
	SetConVarFlags(sv_tags, flags & ~FCVAR_NOTIFY);
 | 
						|
	g_bIgnoreNextTagChange = true;
 | 
						|
	SetConVarString(sv_tags, current_tags);
 | 
						|
	g_bIgnoreNextTagChange = false;
 | 
						|
	SetConVarFlags(sv_tags, flags);
 | 
						|
}
 | 
						|
 | 
						|
get_server_mod()
 | 
						|
{
 | 
						|
	new String: game_description[64];
 | 
						|
	GetGameDescription(game_description, sizeof(game_description), true);
 | 
						|
 | 
						|
	if (StrContains(game_description, "Counter-Strike: Source", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_CSS;
 | 
						|
	}
 | 
						|
	if (StrContains(game_description, "Counter-Strike: Global Offensive", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_CSGO;
 | 
						|
	}
 | 
						|
	else if (StrContains(game_description, "Day of Defeat", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_DODS;
 | 
						|
	}
 | 
						|
	else if (StrContains(game_description, "Half-Life 2 Deathmatch", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_HL2MP;
 | 
						|
	}
 | 
						|
	else if (StrContains(game_description, "Team Fortress", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_TF;
 | 
						|
	}
 | 
						|
	else if (StrContains(game_description, "L4D", false) != -1 || StrContains(game_description, "Left 4 D", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_L4D;
 | 
						|
	}
 | 
						|
	else if (StrContains(game_description, "Insurgency", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_INSMOD;
 | 
						|
		//psychonic - added detection for more supported games
 | 
						|
	}
 | 
						|
	else if (StrContains(game_description, "Fortress Forever", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_FF;
 | 
						|
	}
 | 
						|
	else if (StrContains(game_description, "ZPS", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_ZPS;
 | 
						|
	}
 | 
						|
	else if (StrContains(game_description, "Age of Chivalry", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_AOC;
 | 
						|
	}
 | 
						|
	else if (StrContains(game_description, "PVKII", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_PVKII;
 | 
						|
	}
 | 
						|
	else if (StrContains(game_description, "CSPromod", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_CSP;
 | 
						|
	}
 | 
						|
	else if (StrContains(game_description, "Nuclear Dawn", false) != -1)
 | 
						|
	{
 | 
						|
		gamemod = Game_ND;
 | 
						|
	}
 | 
						|
 | 
						|
	// game mod could not detected, try further
 | 
						|
	if (gamemod == Game_Unknown)
 | 
						|
	{
 | 
						|
		new String: game_folder[64];
 | 
						|
		GetGameFolderName(game_folder, sizeof(game_folder));
 | 
						|
		if (StrContains(game_folder, "cstrike", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_CSS;
 | 
						|
		}
 | 
						|
		else if (strncmp(game_folder, "dod", 3, false) == 0)
 | 
						|
		{
 | 
						|
			gamemod = Game_DODS;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "hl2mp", false) != -1 || StrContains(game_folder, "hl2ctf", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_HL2MP;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "fistful_of_frags", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_FOF;
 | 
						|
		}
 | 
						|
		else if (strncmp(game_folder, "tf", 2, false) == 0)
 | 
						|
		{
 | 
						|
			gamemod = Game_TF;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "left4dead", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_L4D;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "insurgency", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_INSMOD;
 | 
						|
			//psychonic - added detection for more supported games
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "FortressForever", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_FF;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "zps", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_ZPS;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "ageofchivalry", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_AOC;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "gesource", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_GES;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "pvkii", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_PVKII;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "cspromod", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_CSP;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "nucleardawn", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_ND;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "dinodday", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_DDD;
 | 
						|
		}
 | 
						|
		else if (StrContains(game_folder, "csgo", false) != -1)
 | 
						|
		{
 | 
						|
			gamemod = Game_CSGO;
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			LogToGame("HLX:CE Mod Not In Detected List, Using Defaults (%s, %s)", game_description, game_folder);
 | 
						|
			LogToGame("HLX:CE If this is incorrect, please file a bug at hlxcommunity.com");
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if (gamemod > Game_Unknown)
 | 
						|
	{
 | 
						|
		LogToGame("HLX:CE Mod Detection: %s", modnamelist[_:gamemod]);
 | 
						|
		LogToGame("HLX:CE If this is incorrect, please file a bug at hlxcommunity.com");
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
public OnClientPostAdminCheck(client)
 | 
						|
{
 | 
						|
	if (g_bGameCanDoMotd && !IsFakeClient(client))
 | 
						|
	{
 | 
						|
		QueryClientConVar(client, "cl_disablehtmlmotd", motdQuery);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public motdQuery(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[])
 | 
						|
{
 | 
						|
	if (result == ConVarQuery_Okay && StringToInt(cvarValue) == 0 || result != ConVarQuery_Okay)
 | 
						|
	{
 | 
						|
		g_bPlyrCanDoMotd[client] = true;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public OnServerTagChange(Handle:cvar, const String:oldVal[], const String:newVal[])
 | 
						|
{
 | 
						|
	if (GetConVarBool(hlx_server_tag))
 | 
						|
	{
 | 
						|
		MyAddServerTag(HLXTAG);
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		MyRemoveServerTag(HLXTAG);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
public OnSVTagsChange(Handle:cvar, const String:oldVal[], const String:newVal[])
 | 
						|
{
 | 
						|
	if (g_bIgnoreNextTagChange)
 | 
						|
	{
 | 
						|
		// we fired this callback, no need to reapply tags
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	// reapply each custom tag
 | 
						|
	new cnt = GetArraySize(g_hCustomTags);
 | 
						|
	for (new i = 0; i < cnt; i++)
 | 
						|
	{
 | 
						|
		decl String:tag[SVTAGSIZE];
 | 
						|
		GetArrayString(g_hCustomTags, i, tag, sizeof(tag));
 | 
						|
		MyAddServerTag(tag);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public OnProtectAddressChange(Handle:cvar, const String:oldVal[], const String:newVal[])
 | 
						|
{
 | 
						|
	if (newVal[0] > 0)
 | 
						|
	{
 | 
						|
		decl String: log_command[192];
 | 
						|
		Format(log_command, sizeof(log_command), "logaddress_add %s", newVal);
 | 
						|
		LogToGame("Command: %s", log_command);
 | 
						|
		ServerCommand(log_command);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
public OnTeamPlayChange(Handle:cvar, const String:oldVal[], const String:newVal[])
 | 
						|
{
 | 
						|
	g_bTeamPlay = GetConVarBool(g_cvarTeamPlay);
 | 
						|
}
 | 
						|
 | 
						|
public Action:ProtectLoggingChange(args)
 | 
						|
{
 | 
						|
	if (hlx_protect_address != INVALID_HANDLE)
 | 
						|
	{
 | 
						|
		decl String: protect_address[192];
 | 
						|
		GetConVarString(hlx_protect_address, protect_address, sizeof(protect_address));
 | 
						|
		if (strcmp(protect_address, "") != 0)
 | 
						|
		{
 | 
						|
			if (args >= 1)
 | 
						|
			{
 | 
						|
				decl String: log_action[192];
 | 
						|
				GetCmdArg(1, log_action, sizeof(log_action));
 | 
						|
				if ((strcmp(log_action, "off") == 0) || (strcmp(log_action, "0") == 0))
 | 
						|
				{
 | 
						|
					LogToGame("HLstatsX address protection active, logging reenabled!");
 | 
						|
					ServerCommand("log 1");
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return Plugin_Continue;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:ProtectForwardingChange(args)
 | 
						|
{
 | 
						|
	if (hlx_protect_address != INVALID_HANDLE)
 | 
						|
	{
 | 
						|
		decl String: protect_address[192];
 | 
						|
		GetConVarString(hlx_protect_address, protect_address, sizeof(protect_address));
 | 
						|
		if (strcmp(protect_address, "") != 0)
 | 
						|
		{
 | 
						|
			if (args == 1)
 | 
						|
			{
 | 
						|
				decl String: log_action[192];
 | 
						|
				GetCmdArg(1, log_action, sizeof(log_action));
 | 
						|
				if (strcmp(log_action, protect_address) == 0)
 | 
						|
				{
 | 
						|
					decl String: log_command[192];
 | 
						|
					Format(log_command, sizeof(log_command), "logaddress_add %s", protect_address);
 | 
						|
					LogToGame("HLstatsX address protection active, logaddress readded!");
 | 
						|
					ServerCommand(log_command);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else if (args > 1)
 | 
						|
			{
 | 
						|
				new String: log_action[192];
 | 
						|
				for(new i = 1; i <= args; i++)
 | 
						|
				{
 | 
						|
					decl String: temp_argument[192];
 | 
						|
					GetCmdArg(i, temp_argument, sizeof(temp_argument));
 | 
						|
					strcopy(log_action[strlen(log_action)], sizeof(log_action), temp_argument);
 | 
						|
				}
 | 
						|
				if (strcmp(log_action, protect_address) == 0)
 | 
						|
				{
 | 
						|
					decl String: log_command[192];
 | 
						|
					Format(log_command, sizeof(log_command), "logaddress_add %s", protect_address);
 | 
						|
					LogToGame("HLstatsX address protection active, logaddress readded!");
 | 
						|
					ServerCommand(log_command);
 | 
						|
				}
 | 
						|
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return Plugin_Continue;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
public Action:ProtectForwardingDelallChange(args)
 | 
						|
{
 | 
						|
	if (hlx_protect_address != INVALID_HANDLE)
 | 
						|
	{
 | 
						|
		decl String: protect_address[192];
 | 
						|
		GetConVarString(hlx_protect_address, protect_address, sizeof(protect_address));
 | 
						|
		if (strcmp(protect_address, "") != 0)
 | 
						|
		{
 | 
						|
			decl String: log_command[192];
 | 
						|
			Format(log_command, sizeof(log_command), "logaddress_add %s", protect_address);
 | 
						|
			LogToGame("HLstatsX address protection active, logaddress readded!");
 | 
						|
			ServerCommand(log_command);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return Plugin_Continue;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public OnMessagePrefixChange(Handle:cvar, const String:oldVal[], const String:newVal[])
 | 
						|
{
 | 
						|
	strcopy(message_prefix, sizeof(message_prefix), newVal);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:MessagePrefixClear(args)
 | 
						|
{
 | 
						|
	message_prefix = "";
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
find_player_team_slot(team_index)
 | 
						|
{
 | 
						|
	if (team_index > -1)
 | 
						|
	{
 | 
						|
		ColorSlotArray[team_index] = -1;
 | 
						|
		for(new i = 1; i <= MaxClients; i++)
 | 
						|
		{
 | 
						|
			if (IsClientInGame(i) && GetClientTeam(i) == team_index)
 | 
						|
			{
 | 
						|
				ColorSlotArray[team_index] = i;
 | 
						|
				break;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
stock validate_team_colors()
 | 
						|
{
 | 
						|
	for (new i = 0; i < sizeof(ColorSlotArray); i++)
 | 
						|
	{
 | 
						|
		new color_client = ColorSlotArray[i];
 | 
						|
		if (color_client > 0)
 | 
						|
		{
 | 
						|
			if (IsClientInGame(color_client) && GetClientTeam(color_client) != color_client)
 | 
						|
			{
 | 
						|
				find_player_team_slot(i);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			if (i == 2 || i == 3 || (i == 4 && gamemod == Game_PVKII))
 | 
						|
			{
 | 
						|
				find_player_team_slot(i);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
public OnClientDisconnect(client)
 | 
						|
{
 | 
						|
	if (g_bTrackColors4Chat && client > 0 && IsClientInGame(client))
 | 
						|
	{
 | 
						|
		new team_index = GetClientTeam(client);
 | 
						|
		if (client == ColorSlotArray[team_index])
 | 
						|
		{
 | 
						|
			ColorSlotArray[team_index] = -1;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	g_bPlyrCanDoMotd[client] = false;
 | 
						|
}
 | 
						|
 | 
						|
color_player(color_type, player_index, String: client_message[192])
 | 
						|
{
 | 
						|
	new color_player_index = -1;
 | 
						|
	if (g_bTrackColors4Chat || (gamemod == Game_DODS) || (gamemod == Game_ZPS) || (gamemod == Game_GES) || (gamemod == Game_CSP))
 | 
						|
	{
 | 
						|
		decl String: client_name[192];
 | 
						|
		GetClientName(player_index, client_name, sizeof(client_name));
 | 
						|
		if ((strcmp(client_message, "") != 0) && (strcmp(client_name, "") != 0))
 | 
						|
		{
 | 
						|
			if (color_type == 1)
 | 
						|
			{
 | 
						|
				decl String: search_client_name[192];
 | 
						|
				Format(search_client_name, sizeof(search_client_name), "%s ", client_name);
 | 
						|
				decl String: colored_player_name[192];
 | 
						|
				switch (gamemod)
 | 
						|
				{
 | 
						|
					case Game_DODS, Game_GES, Game_CSP:
 | 
						|
						Format(colored_player_name, sizeof(colored_player_name), "\x04%s\x01 ", client_name);
 | 
						|
					case Game_HL2MP:
 | 
						|
						Format(colored_player_name, sizeof(colored_player_name), "%c%s\x01 ", g_bTeamPlay?3:4, client_name);
 | 
						|
					case Game_ZPS:
 | 
						|
						Format(colored_player_name, sizeof(colored_player_name), "\x05%s\x01 ", client_name);
 | 
						|
					default:
 | 
						|
						Format(colored_player_name, sizeof(colored_player_name), "\x03%s\x01 ", client_name);
 | 
						|
				}
 | 
						|
				if (ReplaceString(client_message, sizeof(client_message), search_client_name, colored_player_name) > 0)
 | 
						|
				{
 | 
						|
					return player_index;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				decl String: search_client_name[192];
 | 
						|
				Format(search_client_name, sizeof(search_client_name), " %s ", client_name);
 | 
						|
				decl String: colored_player_name[192];
 | 
						|
				switch (gamemod)
 | 
						|
				{
 | 
						|
					case Game_ZPS:
 | 
						|
						Format(colored_player_name, sizeof(colored_player_name), " \x05%s\x01 ", client_name);
 | 
						|
					case Game_GES:
 | 
						|
						Format(colored_player_name, sizeof(colored_player_name), " \x05%s\x01 ", client_name);
 | 
						|
					default:
 | 
						|
						Format(colored_player_name, sizeof(colored_player_name), " \x04%s\x01 ", client_name);
 | 
						|
				}
 | 
						|
				ReplaceString(client_message, sizeof(client_message), search_client_name, colored_player_name);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	else if (gamemod == Game_FF)
 | 
						|
	{
 | 
						|
		decl String: client_name[192];
 | 
						|
		GetClientName(player_index, client_name, sizeof(client_name));
 | 
						|
 | 
						|
		new team = GetClientTeam(player_index);
 | 
						|
		if (team > 1 && team < 6)
 | 
						|
		{
 | 
						|
			decl String: colored_player_name[192];
 | 
						|
			Format(colored_player_name, sizeof(colored_player_name), "^%d%s^0", (team-1), client_name);
 | 
						|
			if (ReplaceString(client_message, sizeof(client_message), client_name, colored_player_name) > 0)
 | 
						|
			{
 | 
						|
				return player_index;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return color_player_index;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
color_all_players(String: message[192])
 | 
						|
{
 | 
						|
	new color_index = -1;
 | 
						|
	if ((g_bTrackColors4Chat || (gamemod == Game_DODS) || (gamemod == Game_ZPS) || (gamemod == Game_FF) || (gamemod == Game_GES) || (gamemod == Game_CSP)) && (PlayerColorArray != INVALID_HANDLE))
 | 
						|
	{
 | 
						|
		if (strcmp(message, "") != 0)
 | 
						|
		{
 | 
						|
			ClearArray(PlayerColorArray);
 | 
						|
 | 
						|
			new lowest_matching_pos = 192;
 | 
						|
			new lowest_matching_pos_client = -1;
 | 
						|
 | 
						|
			for(new i = 1; i <= MaxClients; i++)
 | 
						|
			{
 | 
						|
				new client = i;
 | 
						|
				if (IsClientInGame(client))
 | 
						|
				{
 | 
						|
					decl String: client_name[32];
 | 
						|
					GetClientName(client, client_name, sizeof(client_name));
 | 
						|
 | 
						|
					if (strcmp(client_name, "") != 0)
 | 
						|
					{
 | 
						|
						new message_pos = StrContains(message, client_name);
 | 
						|
						if (message_pos > -1)
 | 
						|
						{
 | 
						|
							if (lowest_matching_pos > message_pos)
 | 
						|
							{
 | 
						|
								lowest_matching_pos = message_pos;
 | 
						|
								lowest_matching_pos_client = client;
 | 
						|
							}
 | 
						|
							new TempPlayerColorArray[1];
 | 
						|
							TempPlayerColorArray[0] = client;
 | 
						|
							PushArrayArray(PlayerColorArray, TempPlayerColorArray);
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			new size = GetArraySize(PlayerColorArray);
 | 
						|
			for (new i = 0; i < size; i++)
 | 
						|
			{
 | 
						|
				new temp_player_array[1];
 | 
						|
				GetArrayArray(PlayerColorArray, i, temp_player_array);
 | 
						|
				new temp_client = temp_player_array[0];
 | 
						|
				if (temp_client == lowest_matching_pos_client)
 | 
						|
				{
 | 
						|
					new temp_color_index = color_player(1, temp_client, message);
 | 
						|
					color_index = temp_color_index;
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					color_player(0, temp_client, message);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			ClearArray(PlayerColorArray);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return color_index;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
color_team_entities(String:message[192])
 | 
						|
{
 | 
						|
	switch(gamemod)
 | 
						|
	{
 | 
						|
		case Game_CSS, Game_CSGO:
 | 
						|
		{
 | 
						|
			if (strcmp(message, "") != 0)
 | 
						|
			{
 | 
						|
				if (ColorSlotArray[2] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "TERRORIST ", "\x03TERRORIST\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[2];
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (ColorSlotArray[3] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "CT ", "\x03CT\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[3];
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		case Game_L4D:
 | 
						|
		{
 | 
						|
			if (strcmp(message, "") != 0)
 | 
						|
			{
 | 
						|
				if (ColorSlotArray[2] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Survivors ", "\x03Survivors\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[2];
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (ColorSlotArray[3] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Infected ", "\x03Infected\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[3];
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		case Game_TF:
 | 
						|
		{
 | 
						|
			if (strcmp(message, "") != 0)
 | 
						|
			{
 | 
						|
				if (ColorSlotArray[2] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Red ", "\x03Red\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[2];
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (ColorSlotArray[3] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Blue ", "\x03Blue\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[3];
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		case Game_FF:
 | 
						|
		{
 | 
						|
			if (strcmp(message, "") != 0)
 | 
						|
			{
 | 
						|
				if (ReplaceString(message, sizeof(message), "Red Team", "^2Red Team^0") > 0)
 | 
						|
				{
 | 
						|
					return 0;
 | 
						|
				}
 | 
						|
				if (ReplaceString(message, sizeof(message), "Blue Team", "^1Blue Team^0") > 0)
 | 
						|
				{
 | 
						|
					return 0;
 | 
						|
				}
 | 
						|
				if (ReplaceString(message, sizeof(message), "Yellow Team", "^3Yellow Team^0") > 0)
 | 
						|
				{
 | 
						|
					return 0;
 | 
						|
				}
 | 
						|
				if (ReplaceString(message, sizeof(message), "Green Team", "^4Green Team^0") > 0)
 | 
						|
				{
 | 
						|
					return 0;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		case Game_AOC:
 | 
						|
		{
 | 
						|
			if (strcmp(message, "") != 0)
 | 
						|
			{
 | 
						|
				if (ColorSlotArray[2] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Agathia Knights ", "\x03Agathia Knights\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[2];
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (ColorSlotArray[3] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "The Mason Order ", "\x03The Mason Order\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[3];
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		case Game_FOF:
 | 
						|
		{
 | 
						|
			if (strcmp(message, "") != 0)
 | 
						|
			{
 | 
						|
				if (ColorSlotArray[2] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Desperados ", "\x03Desperados\x01 ") > 0
 | 
						|
						|| ReplaceString(message, sizeof(message), "Desparados ", "\x03Desperados\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[2];
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (ColorSlotArray[3] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Vigilantes ", "\x03Vigilantes\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[3];
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		case Game_HL2MP:
 | 
						|
		{
 | 
						|
			if (g_bTeamPlay && strcmp(message, "") != 0)
 | 
						|
			{
 | 
						|
				if (ColorSlotArray[2] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "The Combine ", "\x03The Combine\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[2];
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (ColorSlotArray[3] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Rebel Forces ", "\x03Rebel Forces\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[3];
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		case Game_PVKII:
 | 
						|
		{
 | 
						|
			if (strcmp(message, "") != 0)
 | 
						|
			{
 | 
						|
				if (ColorSlotArray[2] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Pirates ", "\x03Pirates\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[2];
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (ColorSlotArray[3] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Vikings ", "\x03Vikings\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[3];
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (ColorSlotArray[4] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Knights ", "\x03Knights\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[4];
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		case Game_ND:
 | 
						|
		{
 | 
						|
			if (strcmp(message, "") != 0)
 | 
						|
			{
 | 
						|
				if (ColorSlotArray[2] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "EMPIRE ", "\x03Empire\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[2];
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (ColorSlotArray[3] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "CONSORTIUM ", "\x03Consortium\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[3];
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		case Game_DDD:
 | 
						|
		{
 | 
						|
			if (g_bTeamPlay && strcmp(message, "") != 0)
 | 
						|
			{
 | 
						|
				if (ColorSlotArray[2] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Allies ", "\x03Allies\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[2];
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (ColorSlotArray[3] > -1)
 | 
						|
				{
 | 
						|
					if (ReplaceString(message, sizeof(message), "Axis ", "\x03Axis\x01 ") > 0)
 | 
						|
					{
 | 
						|
						return ColorSlotArray[3];
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return -1;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
display_menu(player_index, time, String: full_message[1024], need_handler = 0)
 | 
						|
{
 | 
						|
	ReplaceString(full_message, sizeof(full_message), "\\n", "\10");
 | 
						|
	if (need_handler == 0)
 | 
						|
	{
 | 
						|
		InternalShowMenu(player_index, full_message, time);
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		InternalShowMenu(player_index, full_message, time, (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9), InternalMenuHandler);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public InternalMenuHandler(Handle:menu, MenuAction:action, param1, param2)
 | 
						|
{
 | 
						|
	new client = param1;
 | 
						|
	if (IsClientInGame(client))
 | 
						|
	{
 | 
						|
		if (action == MenuAction_Select)
 | 
						|
		{
 | 
						|
			decl String: player_event[192];
 | 
						|
			IntToString(param2, player_event, sizeof(player_event));
 | 
						|
			LogPlayerEvent(client, "selected", player_event);
 | 
						|
		}
 | 
						|
		else if (action == MenuAction_Cancel)
 | 
						|
		{
 | 
						|
			LogPlayerEvent(client, "selected", "cancel");
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_psay(args)
 | 
						|
{
 | 
						|
	if (args < 2)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_psay <userid><colored><message> - sends private message");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String: client_list[192];
 | 
						|
	GetCmdArg(1, client_list, sizeof(client_list));
 | 
						|
	BuildClientList(client_list);
 | 
						|
 | 
						|
	decl String: colored_param[32];
 | 
						|
	GetCmdArg(2, colored_param, sizeof(colored_param));
 | 
						|
	new is_colored = 0;
 | 
						|
	new ignore_param = 0;
 | 
						|
 | 
						|
	if (strcmp(colored_param, "1") == 0)
 | 
						|
	{
 | 
						|
		is_colored = 1;
 | 
						|
		ignore_param = 1;
 | 
						|
	}
 | 
						|
	else if (strcmp(colored_param, "2") == 0)
 | 
						|
	{
 | 
						|
		is_colored = 2;
 | 
						|
		ignore_param = 1;
 | 
						|
	}
 | 
						|
	else if (strcmp(colored_param, "0") == 0)
 | 
						|
	{
 | 
						|
		ignore_param = 1;
 | 
						|
	}
 | 
						|
 | 
						|
	new String: client_message[192];
 | 
						|
	GetCmdArg((ignore_param + 2), client_message, sizeof(client_message));
 | 
						|
 | 
						|
	if (IsStackEmpty(message_recipients))
 | 
						|
	{
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	new color_index = -1;
 | 
						|
	decl String: display_message[192];
 | 
						|
 | 
						|
	switch (gamemod)
 | 
						|
	{
 | 
						|
		case Game_CSS, Game_DODS, Game_L4D, Game_TF, Game_HL2MP, Game_ZPS, Game_AOC, Game_FOF, Game_GES, Game_PVKII, Game_CSP, Game_ND, Game_DDD, Game_CSGO:
 | 
						|
		{
 | 
						|
			if (is_colored > 0)
 | 
						|
			{
 | 
						|
				if (is_colored == 1)
 | 
						|
				{
 | 
						|
					new player_color_index = color_all_players(client_message);
 | 
						|
					if (player_color_index > -1)
 | 
						|
					{
 | 
						|
						color_index = player_color_index;
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						if (g_bTrackColors4Chat)
 | 
						|
						{
 | 
						|
							validate_team_colors();
 | 
						|
						}
 | 
						|
						color_index = color_team_entities(client_message);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			if (strcmp(message_prefix, "") == 0)
 | 
						|
			{
 | 
						|
				Format(display_message, sizeof(display_message), "\x01\x0B\x01%s", client_message);
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				Format(display_message, sizeof(display_message), "\x01\x0B%c%s\x01 %s", ((gamemod == Game_ZPS || gamemod == Game_GES)?5:4), message_prefix, client_message);
 | 
						|
			}
 | 
						|
 | 
						|
			new bool: setupColorForRecipients = false;
 | 
						|
			if (color_index == -1)
 | 
						|
			{
 | 
						|
				setupColorForRecipients = true;
 | 
						|
			}
 | 
						|
 | 
						|
			if (g_bTrackColors4Chat && is_colored != 2)
 | 
						|
			{
 | 
						|
				while (IsStackEmpty(message_recipients) == false)
 | 
						|
				{
 | 
						|
					new recipient_client = -1;
 | 
						|
					PopStackCell(message_recipients, recipient_client);
 | 
						|
 | 
						|
					new player_index = GetClientOfUserId(recipient_client);
 | 
						|
					if (player_index > 0 && !IsFakeClient(player_index) && IsClientInGame(player_index))
 | 
						|
					{
 | 
						|
						if (setupColorForRecipients == true)
 | 
						|
						{
 | 
						|
							color_index = player_index;
 | 
						|
						}
 | 
						|
						new Handle:hBf;
 | 
						|
						hBf = StartMessageOne("SayText2", player_index, USERMSG_RELIABLE|USERMSG_BLOCKHOOKS);
 | 
						|
 | 
						|
						if (hBf != INVALID_HANDLE)
 | 
						|
						{
 | 
						|
							if(GetUserMessageType() == UM_Protobuf)
 | 
						|
							{
 | 
						|
								PbSetInt(hBf, "ent_idx", 0);
 | 
						|
								PbSetBool(hBf, "chat", false);
 | 
						|
								PbSetString(hBf, "msg_name", display_message);
 | 
						|
								PbAddString(hBf, "params", "");
 | 
						|
								PbAddString(hBf, "params", "");
 | 
						|
								PbAddString(hBf, "params", "");
 | 
						|
								PbAddString(hBf, "params", "");
 | 
						|
							}
 | 
						|
							else
 | 
						|
							{
 | 
						|
								BfWriteByte(hBf, color_index);
 | 
						|
								BfWriteByte(hBf, 0);
 | 
						|
 | 
						|
								BfWriteString(hBf, display_message);
 | 
						|
							}
 | 
						|
 | 
						|
							EndMessage();
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				PrintToChatRecipients(display_message);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		case Game_FF:
 | 
						|
		{
 | 
						|
			// thanks to hlstriker for help with this
 | 
						|
 | 
						|
			decl String: client_message_backup[192];
 | 
						|
			strcopy(client_message_backup, sizeof(client_message_backup), client_message);
 | 
						|
 | 
						|
			if (is_colored == 1)
 | 
						|
			{
 | 
						|
				color_index = color_all_players(client_message);
 | 
						|
				if (color_index ==  -1)
 | 
						|
				{
 | 
						|
					color_team_entities(client_message);
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			if (strcmp(message_prefix, "") == 0)
 | 
						|
			{
 | 
						|
				Format(display_message, sizeof(display_message), "Console: %s%s\n", ((is_colored == 2)?"^4":""), client_message);
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				Format(display_message, sizeof(display_message), "Console: ^4%s:%s %s\n", message_prefix, ((is_colored == 2)?"":"^"), client_message);
 | 
						|
			}
 | 
						|
 | 
						|
			PrintToChatRecipientsFF(display_message);
 | 
						|
		}
 | 
						|
		default:
 | 
						|
		{
 | 
						|
			if (strcmp(message_prefix, "") != 0)
 | 
						|
			{
 | 
						|
				Format(display_message, sizeof(display_message), "%s %s", message_prefix, client_message);
 | 
						|
				PrintToChatRecipients(display_message);
 | 
						|
				return Plugin_Handled;
 | 
						|
			}
 | 
						|
			PrintToChatRecipients(client_message);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_psay2(args)
 | 
						|
{
 | 
						|
	if (args < 2)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_psay2 <userid><colored><message> - sends green colored private message");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String: client_list[192];
 | 
						|
	GetCmdArg(1, client_list, sizeof(client_list));
 | 
						|
	BuildClientList(client_list);
 | 
						|
 | 
						|
	decl String: colored_param[32];
 | 
						|
	GetCmdArg(2, colored_param, sizeof(colored_param));
 | 
						|
 | 
						|
	new ignore_param = 0;
 | 
						|
	if (strcmp(colored_param, "2") == 0 || strcmp(colored_param, "1") == 0 || strcmp(colored_param, "0") == 0)
 | 
						|
	{
 | 
						|
		ignore_param = 1;
 | 
						|
	}
 | 
						|
 | 
						|
	new String: client_message[192];
 | 
						|
	GetCmdArg((ignore_param + 2), client_message, sizeof(client_message));
 | 
						|
 | 
						|
	if (IsStackEmpty(message_recipients)) {
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	// Strip color control codes
 | 
						|
	decl String:buffer_message[192];
 | 
						|
	new j = 0;
 | 
						|
	for (new i = 0; i < sizeof(client_message); i++)
 | 
						|
	{
 | 
						|
		new c = client_message[i];
 | 
						|
		if (c < 5 && c > 0)
 | 
						|
		{
 | 
						|
			continue;
 | 
						|
		}
 | 
						|
		buffer_message[j] = client_message[i];
 | 
						|
		if (c == 0)
 | 
						|
		{
 | 
						|
			break;
 | 
						|
		}
 | 
						|
		j++;
 | 
						|
	}
 | 
						|
 | 
						|
	switch(gamemod)
 | 
						|
	{
 | 
						|
		case Game_INSMOD:
 | 
						|
		{
 | 
						|
			new prefix = 0;
 | 
						|
			if (strcmp(message_prefix, "") != 0)
 | 
						|
			{
 | 
						|
				prefix = 1;
 | 
						|
				Format(client_message, sizeof(client_message), "%s: %s", message_prefix, buffer_message);
 | 
						|
			}
 | 
						|
 | 
						|
			while (IsStackEmpty(message_recipients) == false)
 | 
						|
			{
 | 
						|
				new recipient_client = -1;
 | 
						|
				PopStackCell(message_recipients, recipient_client);
 | 
						|
 | 
						|
				new player_index = GetClientOfUserId(recipient_client);
 | 
						|
				if (player_index > 0 && !IsFakeClient(player_index) && IsClientInGame(player_index))
 | 
						|
				{
 | 
						|
					// thanks to Fyren and IceMatrix for help with this
 | 
						|
					new Handle:hBf;
 | 
						|
					hBf = StartMessageOne("SayText", player_index, USERMSG_RELIABLE|USERMSG_BLOCKHOOKS);
 | 
						|
					if (hBf != INVALID_HANDLE)
 | 
						|
					{
 | 
						|
						if(GetUserMessageType() == UM_Protobuf)
 | 
						|
						{
 | 
						|
							PbSetInt(hBf, "ent_idx", player_index);
 | 
						|
							PbSetBool(hBf, "chat", true);
 | 
						|
 | 
						|
							if (prefix == 0)
 | 
						|
							{
 | 
						|
								PbSetString(hBf, "text", buffer_message);
 | 
						|
							}
 | 
						|
							else
 | 
						|
							{
 | 
						|
								PbSetString(hBf, "text", client_message);
 | 
						|
							}
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							BfWriteByte(hBf, 1);
 | 
						|
							BfWriteBool(hBf, true);
 | 
						|
							BfWriteByte(hBf, player_index);
 | 
						|
 | 
						|
							if (prefix == 0)
 | 
						|
							{
 | 
						|
								BfWriteString(hBf, buffer_message);
 | 
						|
							}
 | 
						|
							else
 | 
						|
							{
 | 
						|
								BfWriteString(hBf, client_message);
 | 
						|
							}
 | 
						|
						}
 | 
						|
 | 
						|
						EndMessage();
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		case Game_FF:
 | 
						|
		{
 | 
						|
			if (strcmp(message_prefix, "") == 0)
 | 
						|
			{
 | 
						|
				Format(client_message, sizeof(client_message), "Console: \x02^4%s\n", buffer_message);
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				Format(client_message, sizeof(client_message), "Console: \x02^4%s: %s\n", message_prefix, buffer_message);
 | 
						|
			}
 | 
						|
 | 
						|
			PrintToChatRecipientsFF(client_message);
 | 
						|
		}
 | 
						|
		case Game_ZPS, Game_GES:
 | 
						|
		{
 | 
						|
			if (strcmp(message_prefix, "") == 0)
 | 
						|
			{
 | 
						|
				Format(client_message, sizeof(client_message), "\x05%s", buffer_message);
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				Format(client_message, sizeof(client_message), "\x05%s %s", message_prefix, buffer_message);
 | 
						|
			}
 | 
						|
			PrintToChatRecipients(client_message);
 | 
						|
		}
 | 
						|
		default:
 | 
						|
		{
 | 
						|
			if (strcmp(message_prefix, "") == 0)
 | 
						|
			{
 | 
						|
				Format(client_message, sizeof(client_message), "\x04%s", buffer_message);
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				Format(client_message, sizeof(client_message), "\x04%s %s", message_prefix, buffer_message);
 | 
						|
			}
 | 
						|
			PrintToChatRecipients(client_message);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_csay(args)
 | 
						|
{
 | 
						|
	if (args < 1)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_csay <message> - display center message");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	new String: display_message[192];
 | 
						|
	GetCmdArg(1, display_message, sizeof(display_message));
 | 
						|
 | 
						|
	if (strcmp(display_message, "") != 0)
 | 
						|
	{
 | 
						|
		if (gamemod == Game_L4D)
 | 
						|
		{
 | 
						|
			PrintToChatAll("\x03%s", display_message);
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			PrintCenterTextAll("%s", display_message);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_msay(args)
 | 
						|
{
 | 
						|
	if (args < 3)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_msay <time><userid><message> - sends hud message");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	if (gamemod == Game_HL2MP)
 | 
						|
	{
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String: display_time[16];
 | 
						|
	GetCmdArg(1, display_time, sizeof(display_time));
 | 
						|
 | 
						|
	decl String: client_id[32];
 | 
						|
	GetCmdArg(2, client_id, sizeof(client_id));
 | 
						|
 | 
						|
	decl String: handler_param[32];
 | 
						|
	GetCmdArg(3, handler_param, sizeof(handler_param));
 | 
						|
 | 
						|
	new ignore_param = 0;
 | 
						|
	new need_handler = 0;
 | 
						|
	if (handler_param[1] == 0 && (handler_param[0] == '1' || handler_param[0] == '0'))
 | 
						|
	{
 | 
						|
		need_handler = 1;
 | 
						|
		ignore_param = 1;
 | 
						|
	}
 | 
						|
 | 
						|
	new String: client_message[1024];
 | 
						|
	GetCmdArg((ignore_param + 3), client_message, 1024);
 | 
						|
 | 
						|
	new time = StringToInt(display_time);
 | 
						|
	if (time <= 0)
 | 
						|
	{
 | 
						|
		time = 10;
 | 
						|
	}
 | 
						|
 | 
						|
	new client = StringToInt(client_id);
 | 
						|
	if (client > 0)
 | 
						|
	{
 | 
						|
		new player_index = GetClientOfUserId(client);
 | 
						|
		if (player_index > 0 && !IsFakeClient(player_index) && IsClientInGame(player_index) && strcmp(client_message, "") != 0)
 | 
						|
		{
 | 
						|
			display_menu(player_index, time, client_message, need_handler);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_tsay(args)
 | 
						|
{
 | 
						|
	if (args < 3)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_tsay <time><userid><message> - sends hud message");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String: display_time[16];
 | 
						|
	GetCmdArg(1, display_time, sizeof(display_time));
 | 
						|
 | 
						|
	decl String: client_id[32];
 | 
						|
	GetCmdArg(2, client_id, sizeof(client_id));
 | 
						|
 | 
						|
	new String: client_message[192];
 | 
						|
	GetCmdArg(3, client_message, sizeof(client_message));
 | 
						|
 | 
						|
	new client = StringToInt(client_id);
 | 
						|
	if ((client > 0) && (strcmp(client_message, "") != 0))
 | 
						|
	{
 | 
						|
		new player_index = GetClientOfUserId(client);
 | 
						|
		if (player_index > 0 && !IsFakeClient(player_index) && IsClientInGame(player_index))
 | 
						|
		{
 | 
						|
			new Handle:values = CreateKeyValues("msg");
 | 
						|
			KvSetString(values, "title", client_message);
 | 
						|
			KvSetNum(values, "level", 1);
 | 
						|
			KvSetString(values, "time", display_time);
 | 
						|
			CreateDialog(player_index, values, DialogType_Msg);
 | 
						|
			CloseHandle(values);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_hint(args)
 | 
						|
{
 | 
						|
	if (args < 2)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_hint <userid><message> - send hint message");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String: client_list[192];
 | 
						|
	GetCmdArg(1, client_list, sizeof(client_list));
 | 
						|
	BuildClientList(client_list);
 | 
						|
 | 
						|
	new String: client_message[192];
 | 
						|
	GetCmdArg(2, client_message, sizeof(client_message));
 | 
						|
 | 
						|
	if (IsStackEmpty(message_recipients) == false && strcmp(client_message, "") != 0)
 | 
						|
	{
 | 
						|
		while (IsStackEmpty(message_recipients) == false)
 | 
						|
		{
 | 
						|
			new recipient_client = -1;
 | 
						|
			PopStackCell(message_recipients, recipient_client);
 | 
						|
 | 
						|
			new player_index = GetClientOfUserId(recipient_client);
 | 
						|
			if (player_index > 0 && !IsFakeClient(player_index) && IsClientInGame(player_index) && IsClientInGame(player_index))
 | 
						|
			{
 | 
						|
				PrintHintText(player_index, "%s", client_message);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_browse(args)
 | 
						|
{
 | 
						|
	if (args < 2)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_browse <userid><url> - open client ingame browser");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String: client_list[192];
 | 
						|
	GetCmdArg(1, client_list, sizeof(client_list));
 | 
						|
	BuildClientList(client_list);
 | 
						|
 | 
						|
	new String: client_url[192];
 | 
						|
	GetCmdArg(2, client_url, sizeof(client_url));
 | 
						|
 | 
						|
	if (IsStackEmpty(message_recipients) == false && strcmp(client_url, "") != 0)
 | 
						|
	{
 | 
						|
		while (IsStackEmpty(message_recipients) == false)
 | 
						|
		{
 | 
						|
			new recipient_client = -1;
 | 
						|
			PopStackCell(message_recipients, recipient_client);
 | 
						|
 | 
						|
			new player_index = GetClientOfUserId(recipient_client);
 | 
						|
			if (player_index > 0 && !IsFakeClient(player_index) && IsClientInGame(player_index))
 | 
						|
			{
 | 
						|
				if (g_bGameCanDoMotd)
 | 
						|
				{
 | 
						|
					if (g_bPlyrCanDoMotd[player_index])
 | 
						|
					{
 | 
						|
						if (GetUserMessageType() == UM_Protobuf)
 | 
						|
						{
 | 
						|
							decl String:typeStr[5];
 | 
						|
							IntToString(MOTDPANEL_TYPE_URL, typeStr, 4);
 | 
						|
 | 
						|
							new Handle:pb = StartMessageOne("VGUIMenu", player_index);
 | 
						|
 | 
						|
							PbSetString(pb, "name", "info");
 | 
						|
							PbSetBool(pb, "show", true);
 | 
						|
 | 
						|
							new Handle:modkey = PbAddMessage(pb, "subkeys");
 | 
						|
 | 
						|
							PbSetString(modkey, "name", "type");
 | 
						|
							PbSetString(modkey, "str", typeStr);
 | 
						|
 | 
						|
							modkey = PbAddMessage(pb, "subkeys");
 | 
						|
							PbSetString(modkey, "name", "title");
 | 
						|
							PbSetString(modkey, "str", "HLstatsX:CE");
 | 
						|
 | 
						|
							modkey = PbAddMessage(pb, "subkeys");
 | 
						|
							PbSetString(modkey, "name", "msg");
 | 
						|
							PbSetString(modkey, "str", client_url);
 | 
						|
 | 
						|
							EndMessage();
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							ShowMOTDPanel(player_index, "HLstatsX:CE", client_url, MOTDPANEL_TYPE_URL);
 | 
						|
						}
 | 
						|
 | 
						|
						ShowMOTDPanel(player_index, "HLstatsX:CE", client_url, MOTDPANEL_TYPE_URL);
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						PrintToChat(player_index, "HTML MOTD needs to be enabled in your game options to use this command");
 | 
						|
					}
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					PrintToChat(player_index, "This game does not support the HTML MOTD window required for this command");
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_swap(args)
 | 
						|
{
 | 
						|
	if (args < 1)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_swap <userid> - swaps players to the opposite team (css only)");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	if (gamemod != Game_CSS || gamemod != Game_CSGO)
 | 
						|
	{
 | 
						|
		PrintToServer("hlx_sm_swap is not supported by this game.");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String:client_id[32];
 | 
						|
	GetCmdArg(1, client_id, sizeof(client_id));
 | 
						|
 | 
						|
	new client = StringToInt(client_id);
 | 
						|
	if (client > 0)
 | 
						|
	{
 | 
						|
		new player_index = GetClientOfUserId(client);
 | 
						|
		if (player_index > 0 && IsClientInGame(player_index))
 | 
						|
		{
 | 
						|
			swap_player(player_index);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_redirect(args)
 | 
						|
{
 | 
						|
	if (args < 3)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_redirect <time><userid><address><reason> - asks player to be redirected to specified gameserver");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String: display_time[16];
 | 
						|
	GetCmdArg(1, display_time, sizeof(display_time));
 | 
						|
 | 
						|
	decl String: client_list[192];
 | 
						|
	GetCmdArg(2, client_list, sizeof(client_list));
 | 
						|
	BuildClientList(client_list);
 | 
						|
 | 
						|
	new String: server_address[192];
 | 
						|
	GetCmdArg(3, server_address, sizeof(server_address));
 | 
						|
 | 
						|
	new String: redirect_reason[192];
 | 
						|
	GetCmdArg(4, redirect_reason, sizeof(redirect_reason));
 | 
						|
 | 
						|
	if (IsStackEmpty(message_recipients) == false && strcmp(server_address, "") != 0)
 | 
						|
	{
 | 
						|
		while (IsStackEmpty(message_recipients) == false)
 | 
						|
		{
 | 
						|
			new recipient_client = -1;
 | 
						|
			PopStackCell(message_recipients, recipient_client);
 | 
						|
 | 
						|
			new player_index = GetClientOfUserId(recipient_client);
 | 
						|
			if (player_index > 0 && !IsFakeClient(player_index) && IsClientInGame(player_index))
 | 
						|
			{
 | 
						|
				new Handle:top_values = CreateKeyValues("msg");
 | 
						|
				KvSetString(top_values, "title", redirect_reason);
 | 
						|
				KvSetNum(top_values, "level", 1);
 | 
						|
				KvSetString(top_values, "time", display_time);
 | 
						|
				CreateDialog(player_index, top_values, DialogType_Msg);
 | 
						|
				CloseHandle(top_values);
 | 
						|
 | 
						|
				new Float: display_time_float;
 | 
						|
				display_time_float = StringToFloat(display_time);
 | 
						|
				DisplayAskConnectBox(player_index, display_time_float, server_address);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_player_action(args)
 | 
						|
{
 | 
						|
	if (args < 2)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_player_action <clientid><action> - trigger player action to be handled from HLstatsX");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String: client_id[32];
 | 
						|
	GetCmdArg(1, client_id, sizeof(client_id));
 | 
						|
 | 
						|
	decl String: player_action[64];
 | 
						|
	GetCmdArg(2, player_action, sizeof(player_action));
 | 
						|
 | 
						|
	new client = StringToInt(client_id);
 | 
						|
 | 
						|
	LogPlayerEvent(client, "triggered", player_action);
 | 
						|
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_team_action(args)
 | 
						|
{
 | 
						|
	if (args < 2)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_team_action <team_name><action> - trigger team action to be handled from HLstatsX");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String: team_name[64];
 | 
						|
	GetCmdArg(1, team_name, sizeof(team_name));
 | 
						|
 | 
						|
	decl String: team_action[64];
 | 
						|
	GetCmdArg(2, team_action, sizeof(team_action));
 | 
						|
 | 
						|
	LogToGame("Team \"%s\" triggered \"%s\"", team_name, team_action);
 | 
						|
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_sm_world_action(args)
 | 
						|
{
 | 
						|
	if (args < 1)
 | 
						|
	{
 | 
						|
		PrintToServer("Usage: hlx_sm_world_action <action> - trigger world action to be handled from HLstatsX");
 | 
						|
		return Plugin_Handled;
 | 
						|
	}
 | 
						|
 | 
						|
	decl String: world_action[64];
 | 
						|
	GetCmdArg(1, world_action, sizeof(world_action));
 | 
						|
 | 
						|
	LogToGame("World triggered \"%s\"", world_action);
 | 
						|
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
is_command_blocked(String: command[])
 | 
						|
{
 | 
						|
	new command_blocked = 0;
 | 
						|
	new command_index = 0;
 | 
						|
	while ((command_blocked == 0) && (command_index < sizeof(blocked_commands)))
 | 
						|
	{
 | 
						|
		if (strcmp(command, blocked_commands[command_index]) == 0)
 | 
						|
		{
 | 
						|
			command_blocked++;
 | 
						|
		}
 | 
						|
		command_index++;
 | 
						|
	}
 | 
						|
	if (command_blocked > 0)
 | 
						|
	{
 | 
						|
		return 1;
 | 
						|
	}
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action:hlx_block_commands(client, const String:command[], args)
 | 
						|
{
 | 
						|
	if (client)
 | 
						|
	{
 | 
						|
		if (client == 0)
 | 
						|
		{
 | 
						|
			return Plugin_Continue;
 | 
						|
		}
 | 
						|
		new block_chat_commands = GetConVarInt(hlx_block_chat_commands);
 | 
						|
 | 
						|
		decl String: user_command[192];
 | 
						|
		GetCmdArgString(user_command, sizeof(user_command));
 | 
						|
 | 
						|
		if(user_command[0] != '.')
 | 
						|
			return Plugin_Continue;
 | 
						|
 | 
						|
		decl String: origin_command[192];
 | 
						|
		new start_index = 0;
 | 
						|
		new command_length = strlen(user_command);
 | 
						|
		if (command_length > 0)
 | 
						|
		{
 | 
						|
			if (user_command[0] == '"')
 | 
						|
			{
 | 
						|
				start_index = 1;
 | 
						|
				if (user_command[command_length - 1] == '"')
 | 
						|
				{
 | 
						|
					user_command[command_length - 1] = 0;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			strcopy(origin_command, sizeof(origin_command), user_command[start_index]);
 | 
						|
 | 
						|
			if (user_command[start_index] == '.')
 | 
						|
			{
 | 
						|
				start_index++;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		new String: command_type[32] = "say";
 | 
						|
 | 
						|
		if (gamemod == Game_INSMOD)
 | 
						|
		{
 | 
						|
			decl String: say_type[1];
 | 
						|
			strcopy(say_type, 2, user_command[start_index]);
 | 
						|
			if (strcmp(say_type, "1") == 0)
 | 
						|
			{
 | 
						|
				command_type = "say";
 | 
						|
			}
 | 
						|
			else if (strcmp(say_type, "2") == 0)
 | 
						|
			{
 | 
						|
				command_type = "say_team";
 | 
						|
			}
 | 
						|
			start_index += 4;
 | 
						|
		}
 | 
						|
 | 
						|
		if (command_length > 0)
 | 
						|
		{
 | 
						|
			if (block_chat_commands > 0)
 | 
						|
			{
 | 
						|
				new command_blocked = is_command_blocked(user_command[start_index]);
 | 
						|
				if (command_blocked > 0)
 | 
						|
				{
 | 
						|
					if (IsClientInGame(client))
 | 
						|
					{
 | 
						|
						if ((strcmp("hlx_menu", user_command[start_index]) == 0) ||
 | 
						|
							(strcmp("hlx", user_command[start_index]) == 0) ||
 | 
						|
							(strcmp("hlstatsx", user_command[start_index]) == 0))
 | 
						|
						{
 | 
						|
							DisplayMenu(HLstatsXMenuMain, client, MENU_TIME_FOREVER);
 | 
						|
						}
 | 
						|
 | 
						|
						if (gamemod == Game_INSMOD)
 | 
						|
						{
 | 
						|
							LogPlayerEvent(client, command_type, user_command[start_index]);
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							LogPlayerEvent(client, command_type, origin_command);
 | 
						|
						}
 | 
						|
					}
 | 
						|
					return Plugin_Stop;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				if (IsClientInGame(client) &&
 | 
						|
					(strcmp("hlx_menu", user_command[start_index]) == 0
 | 
						|
					|| strcmp("hlx", user_command[start_index]) == 0
 | 
						|
					|| strcmp("hlstatsx", user_command[start_index]) == 0))
 | 
						|
				{
 | 
						|
					DisplayMenu(HLstatsXMenuMain, client, MENU_TIME_FOREVER);
 | 
						|
				}
 | 
						|
 | 
						|
				return Plugin_Continue;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
	return Plugin_Continue;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public Action: HLstatsX_Event_PlyTeamChange(Handle:event, const String:name[], bool:dontBroadcast)
 | 
						|
{
 | 
						|
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
 | 
						|
	if (client > 0)
 | 
						|
	{
 | 
						|
		new team = GetEventInt(event, "team");
 | 
						|
		for (new i = 0; (i < sizeof(ColorSlotArray)); i++)
 | 
						|
		{
 | 
						|
			new color_client = ColorSlotArray[i];
 | 
						|
			if (color_client > -1)
 | 
						|
			{
 | 
						|
				if (color_client == client)
 | 
						|
				{
 | 
						|
					ColorSlotArray[i] = -1;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		LogPlayerEvent(client, "triggered", "teamchange", false, "", team);
 | 
						|
	}
 | 
						|
 | 
						|
	return Plugin_Continue;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
swap_player(player_index)
 | 
						|
{
 | 
						|
	if (IsClientInGame(player_index))
 | 
						|
	{
 | 
						|
		switch (GetClientTeam(player_index))
 | 
						|
		{
 | 
						|
			case CS_TEAM_CT:
 | 
						|
			{
 | 
						|
				if (IsPlayerAlive(player_index))
 | 
						|
				{
 | 
						|
					CS_SwitchTeam(player_index, CS_TEAM_T);
 | 
						|
					CS_RespawnPlayer(player_index);
 | 
						|
					new new_model = GetRandomInt(0, 3);
 | 
						|
					SetEntityModel(player_index, ts_models[new_model]);
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					CS_SwitchTeam(player_index, CS_TEAM_T);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			case CS_TEAM_T:
 | 
						|
			{
 | 
						|
				if (IsPlayerAlive(player_index))
 | 
						|
				{
 | 
						|
					CS_SwitchTeam(player_index, CS_TEAM_CT);
 | 
						|
					CS_RespawnPlayer(player_index);
 | 
						|
					new new_model = GetRandomInt(0, 3);
 | 
						|
					SetEntityModel(player_index, ct_models[new_model]);
 | 
						|
					new weapon_entity = GetPlayerWeaponSlot(player_index, 4);
 | 
						|
					if (weapon_entity > 0)
 | 
						|
					{
 | 
						|
						decl String: class_name[32];
 | 
						|
						GetEdictClassname(weapon_entity, class_name, sizeof(class_name));
 | 
						|
						if (strcmp(class_name, "weapon_c4") == 0)
 | 
						|
						{
 | 
						|
							RemovePlayerItem(player_index, weapon_entity);
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					CS_SwitchTeam(player_index, CS_TEAM_CT);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public CreateHLstatsXMenuMain(&Handle: MenuHandle)
 | 
						|
{
 | 
						|
	MenuHandle = CreateMenu(HLstatsXMainCommandHandler, MenuAction_Select|MenuAction_Cancel);
 | 
						|
 | 
						|
	if (!g_bGameCanDoMotd)
 | 
						|
	{
 | 
						|
		SetMenuTitle(MenuHandle, "HLstatsX - Main Menu");
 | 
						|
		AddMenuItem(MenuHandle, "", "Display Rank");
 | 
						|
		AddMenuItem(MenuHandle, "", "Next Players");
 | 
						|
		AddMenuItem(MenuHandle, "", "Top10 Players");
 | 
						|
		AddMenuItem(MenuHandle, "", "Auto Ranking");
 | 
						|
		AddMenuItem(MenuHandle, "", "Toggle Point Msgs");
 | 
						|
		AddMenuItem(MenuHandle, "", "Toggle Ranking Display");
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		SetMenuTitle(MenuHandle, "HLstatsX - Main Menu");
 | 
						|
		AddMenuItem(MenuHandle, "", "Display Rank");
 | 
						|
		AddMenuItem(MenuHandle, "", "Next Players");
 | 
						|
		AddMenuItem(MenuHandle, "", "Top10 Players");
 | 
						|
		AddMenuItem(MenuHandle, "", "Clans Ranking");
 | 
						|
		AddMenuItem(MenuHandle, "", "Server Status");
 | 
						|
		AddMenuItem(MenuHandle, "", "Statsme");
 | 
						|
		AddMenuItem(MenuHandle, "", "Auto Ranking");
 | 
						|
		AddMenuItem(MenuHandle, "", "Toggle Point Msgs");
 | 
						|
		AddMenuItem(MenuHandle, "", "Weapon Usage");
 | 
						|
		AddMenuItem(MenuHandle, "", "Weapons Accuracy");
 | 
						|
		AddMenuItem(MenuHandle, "", "Weapons Targets");
 | 
						|
		AddMenuItem(MenuHandle, "", "Player Kills");
 | 
						|
		AddMenuItem(MenuHandle, "", "Toggle Ranking Display");
 | 
						|
		AddMenuItem(MenuHandle, "", "Ban and Cheater List");
 | 
						|
		AddMenuItem(MenuHandle, "", "Display Help");
 | 
						|
	}
 | 
						|
 | 
						|
	SetMenuPagination(MenuHandle, 8);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public CreateHLstatsXMenuAuto(&Handle: MenuHandle)
 | 
						|
{
 | 
						|
	MenuHandle = CreateMenu(HLstatsXAutoCommandHandler, MenuAction_Select|MenuAction_Cancel);
 | 
						|
 | 
						|
	SetMenuTitle(MenuHandle, "HLstatsX - Auto-Ranking");
 | 
						|
	AddMenuItem(MenuHandle, "", "Enable on round-start");
 | 
						|
	AddMenuItem(MenuHandle, "", "Enable on round-end");
 | 
						|
	AddMenuItem(MenuHandle, "", "Enable on player death");
 | 
						|
	AddMenuItem(MenuHandle, "", "Disable");
 | 
						|
 | 
						|
	SetMenuPagination(MenuHandle, 8);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public CreateHLstatsXMenuEvents(&Handle: MenuHandle)
 | 
						|
{
 | 
						|
	MenuHandle = CreateMenu(HLstatsXEventsCommandHandler, MenuAction_Select|MenuAction_Cancel);
 | 
						|
 | 
						|
	SetMenuTitle(MenuHandle, "HLstatsX - Console Events");
 | 
						|
	AddMenuItem(MenuHandle, "", "Enable Events");
 | 
						|
	AddMenuItem(MenuHandle, "", "Disable Events");
 | 
						|
	AddMenuItem(MenuHandle, "", "Enable Global Chat");
 | 
						|
	AddMenuItem(MenuHandle, "", "Disable Global Chat");
 | 
						|
 | 
						|
	SetMenuPagination(MenuHandle, 8);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
make_player_command(client, String: player_command[192])
 | 
						|
{
 | 
						|
	LogPlayerEvent(client, "say", player_command);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public HLstatsXMainCommandHandler(Handle:menu, MenuAction:action, param1, param2)
 | 
						|
{
 | 
						|
	if (action == MenuAction_Select)
 | 
						|
	{
 | 
						|
		if (IsClientInGame(param1))
 | 
						|
		{
 | 
						|
			if (!g_bGameCanDoMotd)
 | 
						|
			{
 | 
						|
				switch (param2)
 | 
						|
				{
 | 
						|
					case 0 :
 | 
						|
						make_player_command(param1, "/rank");
 | 
						|
					case 1 :
 | 
						|
						make_player_command(param1, "/next");
 | 
						|
					case 2 :
 | 
						|
						make_player_command(param1, "/top10");
 | 
						|
					case 3 :
 | 
						|
						DisplayMenu(HLstatsXMenuAuto, param1, MENU_TIME_FOREVER);
 | 
						|
					case 4 :
 | 
						|
						DisplayMenu(HLstatsXMenuEvents, param1, MENU_TIME_FOREVER);
 | 
						|
					case 5 :
 | 
						|
						make_player_command(param1, "/hlx_hideranking");
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				switch (param2)
 | 
						|
				{
 | 
						|
					case 0 :
 | 
						|
						make_player_command(param1, "/rank");
 | 
						|
					case 1 :
 | 
						|
						make_player_command(param1, "/next");
 | 
						|
					case 2 :
 | 
						|
						make_player_command(param1, "/top10");
 | 
						|
					case 3 :
 | 
						|
						make_player_command(param1, "/clans");
 | 
						|
					case 4 :
 | 
						|
						make_player_command(param1, "/status");
 | 
						|
					case 5 :
 | 
						|
						make_player_command(param1, "/statsme");
 | 
						|
					case 6 :
 | 
						|
						DisplayMenu(HLstatsXMenuAuto, param1, MENU_TIME_FOREVER);
 | 
						|
					case 7 :
 | 
						|
						DisplayMenu(HLstatsXMenuEvents, param1, MENU_TIME_FOREVER);
 | 
						|
					case 8 :
 | 
						|
						make_player_command(param1, "/weapons");
 | 
						|
					case 9 :
 | 
						|
						make_player_command(param1, "/accuracy");
 | 
						|
					case 10 :
 | 
						|
						make_player_command(param1, "/targets");
 | 
						|
					case 11 :
 | 
						|
						make_player_command(param1, "/kills");
 | 
						|
					case 12 :
 | 
						|
						make_player_command(param1, "/hlx_hideranking");
 | 
						|
					case 13 :
 | 
						|
						make_player_command(param1, "/bans");
 | 
						|
					case 14 :
 | 
						|
						make_player_command(param1, "/help");
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public HLstatsXAutoCommandHandler(Handle:menu, MenuAction:action, param1, param2)
 | 
						|
{
 | 
						|
	if (action == MenuAction_Select)
 | 
						|
	{
 | 
						|
		if (IsClientInGame(param1))
 | 
						|
		{
 | 
						|
			switch (param2)
 | 
						|
			{
 | 
						|
				case 0 :
 | 
						|
					make_player_command(param1, "/hlx_auto start rank");
 | 
						|
				case 1 :
 | 
						|
					make_player_command(param1, "/hlx_auto end rank");
 | 
						|
				case 2 :
 | 
						|
					make_player_command(param1, "/hlx_auto kill rank");
 | 
						|
				case 3 :
 | 
						|
					make_player_command(param1, "/hlx_auto clear");
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
public HLstatsXEventsCommandHandler(Handle:menu, MenuAction:action, param1, param2)
 | 
						|
{
 | 
						|
	if (action == MenuAction_Select)
 | 
						|
	{
 | 
						|
		if (IsClientInGame(param1))
 | 
						|
		{
 | 
						|
			switch (param2)
 | 
						|
			{
 | 
						|
				case 0 :
 | 
						|
					make_player_command(param1, "/hlx_display 1");
 | 
						|
				case 1 :
 | 
						|
					make_player_command(param1, "/hlx_display 0");
 | 
						|
				case 2 :
 | 
						|
					make_player_command(param1, "/hlx_chat 1");
 | 
						|
				case 3 :
 | 
						|
					make_player_command(param1, "/hlx_chat 0");
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
stock BuildClientList(const String:client_list[])
 | 
						|
{
 | 
						|
	if (StrContains(client_list, ",") > -1)
 | 
						|
	{
 | 
						|
		decl String:MessageRecipients[MaxClients][8];
 | 
						|
		new recipient_count = ExplodeString(client_list, ",", MessageRecipients, MaxClients, 8);
 | 
						|
		for (new i = 0; (i < recipient_count); i++)
 | 
						|
		{
 | 
						|
			PushStackCell(message_recipients, StringToInt(MessageRecipients[i]));
 | 
						|
		}
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		PushStackCell(message_recipients, StringToInt(client_list));
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
stock PrintToChatRecipients(const String:message[])
 | 
						|
{
 | 
						|
	while (IsStackEmpty(message_recipients) == false)
 | 
						|
	{
 | 
						|
		new recipient_client = -1;
 | 
						|
		PopStackCell(message_recipients, recipient_client);
 | 
						|
 | 
						|
		new client = GetClientOfUserId(recipient_client);
 | 
						|
		if (client > 0 && !IsFakeClient(client) && IsClientInGame(client))
 | 
						|
		{
 | 
						|
			PrintToChat(client, "%s", message);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
stock PrintToChatRecipientsFF(const String:message[])
 | 
						|
{
 | 
						|
	while (IsStackEmpty(message_recipients) == false)
 | 
						|
	{
 | 
						|
		new recipient_client = -1;
 | 
						|
		PopStackCell(message_recipients, recipient_client);
 | 
						|
 | 
						|
		new client = GetClientOfUserId(recipient_client);
 | 
						|
		if (client > 0 && !IsFakeClient(client) && IsClientInGame(client))
 | 
						|
		{
 | 
						|
			new Handle:hBf;
 | 
						|
			hBf = StartMessageOne("SayText", client, USERMSG_RELIABLE|USERMSG_BLOCKHOOKS);
 | 
						|
			if (hBf != INVALID_HANDLE)
 | 
						|
			{
 | 
						|
				if(GetUserMessageType() == UM_Protobuf)
 | 
						|
				{
 | 
						|
					PbSetInt(hBf, "ent_idx", 0);
 | 
						|
					PbSetBool(hBf, "chat", true);
 | 
						|
					PbSetString(hBf, "text", message);
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					BfWriteByte(hBf, 0); // send as console
 | 
						|
					BfWriteString(hBf, message);
 | 
						|
					BfWriteByte(hBf, 1); // 1 to enable color parsing, 0 to not
 | 
						|
				}
 | 
						|
				EndMessage();
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |