OciXCrom's Admin Chat - 2021 UPDATE!

Одобрените от нас плъгини. Моля, докладвайте ако забележите бъг с някой от плъгините в този раздел.
Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OciXCrom's Admin Chat [adminchat.amxx]

Мнение от OciXCrom » 11 Фев 2021, 17:14

Код за потвърждение: Избери целия код

;Default (D)HUD Messages Colors -- the color will be used when the player doesn't choose one.
AC_HUDDEFAULT = random
white?

Другият ти проблем няма нищо общо с този плъгин.

Аватар
bustA
Извън линия
Потребител
Потребител
Мнения: 264
Регистриран на: 20 Юни 2020, 11:47
Се отблагодари: 42 пъти
Получена благодарност: 27 пъти
Обратна връзка:

OciXCrom's Admin Chat [adminchat.amxx]

Мнение от bustA » 04 Мар 2021, 05:31

Здравейите.
Отбелязаното в жълто не работи при мене, но това не е толкова важно.По важното ми е ако може да се направи с "say #nick текст" да оцвети ника в зелено или само #nick без текст пак да го оцветява и при "say ##nick текст " da изпраща лично съобщение
При използване на символа "#" в (D)HUD съобщения, съобщението ще има ефект на пишеща машина.
amx_psay <player> <message> - (Private Message) Изпраща лично съобщение до дадения играч, който допълнително чува и специален звук, с цел да обърне внимание на съобщението.
Синонимна чат команда: say_team #<player> <message>
Ето и лога от chatmanager, при опита да пиша лично съощбение
03/04/2021 - 05:21:59: [ 46.*.*.* | STEAM_0:1:************] (Spectator) *SPEC* bustA: пјѓ911 test

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>

#if AMXX_VERSION_NUM < 183
	#include <dhudmessage>
#endif

#define PLUGIN_NAME 
#define PLUGIN_VERSION "3.1"

#define SAY_ALL '#'											/* The symbol used for executing amx_say through default chat */
#define SAY_HUD '@'											/* The symbol used for sending a HUD message through default chat */
#define SAY_DHUD '&'										/* The symbol used for sending a DHUD message through default chat */
#define TSAY_ADMIN '@'										/* The symbol used for accessing the admin chat through team chat */
#define TSAY_VIPCHAT '!'									/* The symbol used for accessing the VIP chat through team chat */
#define TSAY_PRIVATE '#'									/* The symbol used for sending a private message through team chat */
#define TSAY_TEAMSAY '&'									/* The symbol used for sending a message to a specific team */
#define HUD_BLINK "$"										/* The symbol used for applying a blink effect to a (D)HUD message */
#define HUD_TYPEWRITER "#"									/* The symbol used for applying a typewriter effect to a (D)HUD message */

/* These symbols are used for different colors in chat messages [don't touch the second ones (^4/^3/^1)] */
new const g_szColors[][] = {
	"!g", "^4",
	"!t", "^3",
	"!n", "^1"
}

/* These commands are used when the SAY_HUD symbol is entered X times in normal chat */
new const g_szChatHud[][] = { "amx_tsay", "amx_csay", "amx_bsay", "amx_rsay" }

new g_szHudColors[][] = {"default", "random", "white", "red", "green", "blue", "yellow", "magenta", "cyan", "orange", "ocean", "maroon"}
new g_iHudValues[][] = {{0, 0, 0}, {0, 0, 0}, {255, 255, 255}, {255, 0, 0}, {0, 255, 0}, {0, 0, 255}, {255, 255, 0}, {255, 0, 255}, {0, 255, 255}, {227, 96, 8}, {45, 89, 116}, {103, 44, 38}}
new Float:g_flPositions[][] = {{-1.0, 0.7}, {-1.0, 0.1}, {0.75, 0.55}, {0.05, 0.55}}
new g_msgSayText, g_msgTeamInfo, g_iMaxPlayers
new g_iMessageChannel

enum _:Settings
{
	bool:stgAnonymous,
	Float:stgHudTime,
	stgHudDefault[16],
	stgAdminPrefix[32],
	stgVipPrefix[32],
	stgPlayerPrefix[32],
	stgServerName[32],
	stgSymAnonymous[8],
	stgPsaySound[64],
	stgTeamT[32],
	stgTeamCT[32],
	stgTeamSpec[32]
}

enum _:Messages
{
	msgSay[192],
	msgAsay[192],
	msgChat[192],
	msgPsay[192],
	msgTeamSay[192],
	msgHsay[192]
}

enum _:Colors
{
	clrSay,
	clrAsay,
	clrChat,
	clrPsay,
	clrTeamSay
}

enum _:Flags
{
	flagAdmin[2],
	flagPsay[2],
	flagReadAdmin[2],
	flagReadVip[2],
	flagAnonymous[2]
}

new g_eSettings[Settings]
new g_eMessages[Messages]
new g_eAMessages[Messages]
new g_eColors[Colors]
new g_eFlags[Flags]

#define X 0
#define Y 1
#define R 0
#define G 1
#define B 2

enum
{
	SECTION_SETTINGS = 1,
	SECTION_FLAGS,
	SECTION_MESSAGES
}

enum
{
	CMD_BSAY,
	CMD_CSAY,
	CMD_RSAY,
	CMD_TSAY
}

enum Color
{
	NORMAL = 1, // clients scr_concolor cvar color
	GREEN, // Green Color
	TEAM_COLOR, // Red, grey, blue
	GREY, // grey
	RED, // Red
	BLUE, // Blue
}

new TeamName[][] = 
{
	"",
	"TERRORIST",
	"CT",
	"SPECTATOR"
}

public plugin_init()
{
	register_plugin("OciXCrom's Admin Chat", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXAdminChat", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	
	register_clcmd("say", "hookSay")
	register_clcmd("say_team", "hookSayTeam")
	
	register_concmd("amx_say", "cmdSay", ADMIN_CHAT, "<message> -- Sends a message to all players")
	register_concmd("amx_asay", "cmdAsay", ADMIN_ALL, "<message> -- Sends a message to all admins")
	register_concmd("amx_chat", "cmdChat", ADMIN_CHAT, "<message> -- Sends a message to all VIP users")
	register_concmd("amx_psay", "cmdPsay", ADMIN_CHAT, "<player> <message> -- Sends a private message to a player")
	register_concmd("amx_teamsay", "cmdTeamSay", ADMIN_BAN, "<team> <message> -- Sends a message to a specific team")
	
	register_concmd("amx_bsay", "cmdHsay", ADMIN_CHAT, "<color> <message> -- Sends a bottom HUD message to all players")
	register_concmd("amx_bsay2", "cmdHsay", ADMIN_CHAT, "<color> <message> -- Sends a bottom HUD message to all players")
	register_concmd("amx_csay", "cmdHsay", ADMIN_CHAT, "<color> <message> -- Sends a top HUD message to all players")
	register_concmd("amx_csay2", "cmdHsay", ADMIN_RCON, "<color> <message> -- Sends a top DHUD message to all players")
	register_concmd("amx_rsay", "cmdHsay", ADMIN_CHAT, "<color> <message> -- Sends a right sided HUD message to all players")
	register_concmd("amx_rsay2", "cmdHsay", ADMIN_RCON, "<color> <message> -- Sends a right sided DHUD message to all players")
	register_concmd("amx_tsay", "cmdHsay", ADMIN_CHAT, "<color> <message> -- Sends a left HUD message to all players")
	register_concmd("amx_tsay2", "cmdHsay", ADMIN_RCON, "<color> <message> -- Sends a left DHUD message to all players")
	
	g_msgSayText = get_user_msgid("SayText")
	g_msgTeamInfo = get_user_msgid("TeamInfo")
	g_iMaxPlayers = get_maxplayers()
}

fileRead()
{
	new szFilename[256], szConfigsName[256]
	get_configsdir(szConfigsName, charsmax(szConfigsName))
	formatex(szFilename, charsmax(szFilename), "%s/AdminChat.ini", szConfigsName)
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new szData[163], szOption[32], szSign[3], szValue[128], iSection
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, ';': continue
				case '[':
				{
					if(szData[strlen(szData) - 1] == ']')
					{
						if(containi(szData, "settings") != -1)
							iSection = SECTION_SETTINGS
						else if(containi(szData, "flags") != -1)
							iSection = SECTION_FLAGS
						else if(containi(szData, "messages") != -1)
							iSection = SECTION_MESSAGES
					}
					else continue
				}
				default:
				{
					parse(szData, szOption, charsmax(szOption), szSign, charsmax(szSign), szValue, charsmax(szValue))
					
					switch(iSection)
					{
						case SECTION_SETTINGS:
						{
							if(equal(szOption, "AC_ANONYMOUS"))
								g_eSettings[stgAnonymous] = str_to_num(szValue) ? true : false
							else if(equal(szOption, "AC_HUDTIME"))
								g_eSettings[stgHudTime] = _:str_to_float(szValue)
							else if(equal(szOption, "AC_HUDDEFAULT"))
								copy(g_eSettings[stgHudDefault], charsmax(g_eSettings[stgHudDefault]), szValue)
							else if(equal(szOption, "AC_ADMINPREFIX"))
								copy(g_eSettings[stgAdminPrefix], charsmax(g_eSettings[stgVipPrefix]), szValue)
							else if(equal(szOption, "AC_VIPPREFIX"))
								copy(g_eSettings[stgVipPrefix], charsmax(g_eSettings[stgVipPrefix]), szValue)
							else if(equal(szOption, "AC_PLAYERPREFIX"))
								copy(g_eSettings[stgPlayerPrefix], charsmax(g_eSettings[stgPlayerPrefix]), szValue)
							else if(equal(szOption, "AC_SERVERNAME"))
								copy(g_eSettings[stgServerName], charsmax(g_eSettings[stgServerName]), szValue)
							else if(equal(szOption, "AC_SYM_ANONYMOUS"))
								copy(g_eSettings[stgSymAnonymous], charsmax(g_eSettings[stgSymAnonymous]), szValue)
							else if(equal(szOption, "AC_PSAY_SOUND"))
								copy(g_eSettings[stgPsaySound], charsmax(g_eSettings[stgPsaySound]), szValue)
							else if(equal(szOption, "AC_TEAM_TT"))
								copy(g_eSettings[stgTeamT], charsmax(g_eSettings[stgTeamT]), szValue)
							else if(equal(szOption, "AC_TEAM_CT"))
								copy(g_eSettings[stgTeamCT], charsmax(g_eSettings[stgTeamCT]), szValue)
							else if(equal(szOption, "AC_TEAM_SPEC"))
								copy(g_eSettings[stgTeamSpec], charsmax(g_eSettings[stgTeamSpec]), szValue)
						}
						case SECTION_FLAGS:
						{
							if(equal(szOption, "AC_FLAG_ADMIN"))
								copy(g_eFlags[flagAdmin], charsmax(g_eFlags[flagAdmin]), szValue)
							else if(equal(szOption, "AC_FLAG_PSAY"))
								copy(g_eFlags[flagPsay], charsmax(g_eFlags[flagPsay]), szValue)
							else if(equal(szOption, "AC_FLAG_READ_ADMIN"))
								copy(g_eFlags[flagReadAdmin], charsmax(g_eFlags[flagReadAdmin]), szValue)
							else if(equal(szOption, "AC_FLAG_READ_VIP"))
								copy(g_eFlags[flagReadVip], charsmax(g_eFlags[flagReadVip]), szValue)
							else if(equal(szOption, "AC_FLAG_ANONYMOUS"))
								copy(g_eFlags[flagAnonymous], charsmax(g_eFlags[flagAnonymous]), szValue)
						}
						case SECTION_MESSAGES:
						{
							if(equal(szOption, "AC_MSG_SAY"))
								copy(g_eMessages[msgSay], charsmax(g_eMessages[msgSay]), szValue)
							else if(equal(szOption, "AC_AMSG_SAY"))
								copy(g_eAMessages[msgSay], charsmax(g_eAMessages[msgSay]), szValue)
							else if(equal(szOption, "AC_CLR_SAY"))
								g_eColors[clrSay] = str_to_num(szValue)
							else if(equal(szOption, "AC_MSG_ASAY"))
								copy(g_eMessages[msgAsay], charsmax(g_eMessages[msgAsay]), szValue)
							else if(equal(szOption, "AC_AMSG_ASAY"))
								copy(g_eAMessages[msgAsay], charsmax(g_eAMessages[msgAsay]), szValue)
							else if(equal(szOption, "AC_CLR_ASAY"))
								g_eColors[clrAsay] = str_to_num(szValue)
							else if(equal(szOption, "AC_MSG_CHAT"))
								copy(g_eMessages[msgChat], charsmax(g_eMessages[msgChat]), szValue)
							else if(equal(szOption, "AC_AMSG_CHAT"))
								copy(g_eAMessages[msgChat], charsmax(g_eAMessages[msgChat]), szValue)	
							else if(equal(szOption, "AC_CLR_CHAT"))
								g_eColors[clrChat] = str_to_num(szValue)
							else if(equal(szOption, "AC_MSG_PSAY"))
								copy(g_eMessages[msgPsay], charsmax(g_eMessages[msgPsay]), szValue)
							else if(equal(szOption, "AC_AMSG_PSAY"))
								copy(g_eAMessages[msgPsay], charsmax(g_eAMessages[msgPsay]), szValue)
							else if(equal(szOption, "AC_CLR_PSAY"))
								g_eColors[clrPsay] = str_to_num(szValue)
							else if(equal(szOption, "AC_MSG_TEAMSAY"))
								copy(g_eMessages[msgTeamSay], charsmax(g_eMessages[msgTeamSay]), szValue)
							else if(equal(szOption, "AC_AMSG_TEAMSAY"))
								copy(g_eAMessages[msgTeamSay], charsmax(g_eAMessages[msgTeamSay]), szValue)
							else if(equal(szOption, "AC_CLR_TEAMSAY"))
								g_eColors[clrTeamSay] = str_to_num(szValue)
							else if(equal(szOption, "AC_MSG_HSAY"))
								copy(g_eMessages[msgHsay], charsmax(g_eMessages[msgHsay]), szValue)
							else if(equal(szOption, "AC_AMSG_HSAY"))
								copy(g_eAMessages[msgHsay], charsmax(g_eAMessages[msgHsay]), szValue)
						}
						default: continue
					}							
				}
			}
		}
		
		fclose(iFilePointer)
	}
}  

public hookSay(id)
{
	new szMessage[192]
	read_args(szMessage, charsmax(szMessage))
	remove_quotes(szMessage)
	
	switch(szMessage[0])
	{
		case SAY_ALL:
		{
			szMessage[0] = ' '
			trim(szMessage)
			client_cmd(id, "amx_say %s", szMessage)
		}
		case SAY_HUD, SAY_DHUD:
		{
			new szColor[16], iType, iColor, iSymbol = szMessage[0]
			szMessage[0] = ' '
			
			for(new i = 1; i < 4; i++)
			{
				if(szMessage[i] == iSymbol)
				{
					szMessage[i] = ' '
					iType++
				}
				else break
			}
			
			switch(szMessage[iType + 1])
			{
				case 'X': iColor = 1
				case 'W': iColor = 2
				case 'R': iColor = 3
				case 'G': iColor = 4
				case 'B': iColor = 5
				case 'Y': iColor = 6
				case 'M': iColor = 7
				case 'C': iColor = 8
				case 'O': iColor = 9
			}
			
			if(iColor > 0) szMessage[iType + 1] = ' '
			trim(szMessage)
			
			if(iColor)
				copy(szColor, charsmax(szColor), g_szHudColors[iColor])
			else
				copy(szColor, charsmax(szColor), g_eSettings[stgHudDefault])
				
			client_cmd(id, "%s%s %s %s", g_szChatHud[iType], (iSymbol == SAY_DHUD) ? "2" : "", szColor, szMessage)
		}
		default: return PLUGIN_CONTINUE
	}
	
	return PLUGIN_HANDLED
}

public hookSayTeam(id)
{
	new szMessage[192]
	read_args(szMessage, charsmax(szMessage))
	remove_quotes(szMessage)
		
	switch(szMessage[0])
	{
		case TSAY_ADMIN:
		{
			szMessage[0] = ' '
			trim(szMessage)
			client_cmd(id, "amx_asay %s", szMessage)
		}
		case TSAY_VIPCHAT:
		{
			szMessage[0] = ' '
			trim(szMessage)
			client_cmd(id, "amx_chat %s", szMessage)
		}
		case TSAY_PRIVATE:
		{
			szMessage[0] = ' '
			trim(szMessage)
			
			new szArg[32]
			parse(szMessage, szArg, charsmax(szArg))
			
			if(is_blank(szArg))
				return PLUGIN_HANDLED
			
			new iPlayer = cmd_target(id, szArg, 0)
			if(!iPlayer) return PLUGIN_HANDLED
			
			replace(szMessage, charsmax(szMessage), szArg, "")
			client_cmd(id, "amx_psay #%i %s", get_user_userid(iPlayer), szMessage)
		}
		case TSAY_TEAMSAY:
		{
			szMessage[0] = ' '
			trim(szMessage)
			
			new szArg[32]
			parse(szMessage, szArg, charsmax(szArg))
			
			if(is_blank(szArg))
				return PLUGIN_HANDLED
			
			replace(szMessage, charsmax(szMessage), szArg, "")
			client_cmd(id, "amx_teamsay %s %s", szArg, szMessage)
		}
		default: return PLUGIN_CONTINUE
	}
	
	return PLUGIN_HANDLED
}

public cmdSay(id, level, cid)
{
	if(!cmd_access(id, level, cid, 2))
		return PLUGIN_HANDLED
	
	new szArg[192]
	read_args(szArg, charsmax(szArg))
	remove_quotes(szArg)
	trim(szArg)
	
	if(is_blank(szArg))
		return PLUGIN_HANDLED
	
	new szMessage[192], szName[32]
	get_user_name(id, szName, charsmax(szName))
	
	if(is_anonymous(id, szArg))
		get_message(id, 0, g_eAMessages[msgSay], szArg, szMessage)
	else
		get_message(id, 0, g_eMessages[msgSay], szArg, szMessage)
	
	new iPlayers[32], iPnum
	get_players(iPlayers, iPnum)
	
	for(new i; i < iPnum; i++)
		ColorChat(iPlayers[i], Color:g_eColors[clrSay], szMessage)
	
	message_log(szName, szArg, "amx_say")
	return PLUGIN_HANDLED
}

public cmdAsay(id, level, cid)
{
	if(!cmd_access(id, level, cid, 2))
		return PLUGIN_HANDLED
	
	new szArg[192]
	read_args(szArg, charsmax(szArg))
	remove_quotes(szArg)
	trim(szArg)
	
	if(is_blank(szArg))
		return PLUGIN_HANDLED
	
	new szMessage[192], szName[32]
	get_user_name(id, szName, charsmax(szName))
	
	if(is_anonymous(id, szArg))
		get_message(id, 0, g_eAMessages[msgAsay], szArg, szMessage)
	else
		get_message(id, 0, g_eMessages[msgAsay], szArg, szMessage)
		
	new iPlayers[32], iPnum, iReceiver
	get_players(iPlayers, iPnum)
	
	for(new i; i < iPnum; i++)
	{
		iReceiver = iPlayers[i]
		if(get_user_flags(iReceiver) & read_flags(g_eFlags[flagReadAdmin]) || id == iReceiver) ColorChat(iReceiver, Color:g_eColors[clrAsay], szMessage)
	}
	
	message_log(szName, szArg, "amx_asay")
	return PLUGIN_HANDLED
}

public cmdChat(id, level, cid)
{
	if(!cmd_access(id, level, cid, 2))
		return PLUGIN_HANDLED
	
	new szArg[192]
	read_args(szArg, charsmax(szArg))
	remove_quotes(szArg)
	trim(szArg)
	
	if(is_blank(szArg))
		return PLUGIN_HANDLED
	
	new szMessage[192], szName[32]
	get_user_name(id, szName, charsmax(szName))
	
	if(is_anonymous(id, szArg))
		get_message(id, 0, g_eAMessages[msgChat], szArg, szMessage)
	else
		get_message(id, 0, g_eMessages[msgChat], szArg, szMessage)
		
	new iPlayers[32], iPnum, iReceiver
	get_players(iPlayers, iPnum)
	
	for(new i; i < iPnum; i++)
	{
		iReceiver = iPlayers[i]
		if(get_user_flags(iReceiver) & read_flags(g_eFlags[flagReadVip])) ColorChat(iReceiver, Color:g_eColors[clrChat], szMessage)
	}
	
	message_log(szName, szArg, "amx_chat")
	return PLUGIN_HANDLED
}

public cmdPsay(id, level, cid)
{
	if(!cmd_access(id, level, cid, 3))
		return PLUGIN_HANDLED
	
	new szArg[180], szPlayer[32]
	read_args(szArg, charsmax(szArg))
	read_argv(1, szPlayer, charsmax(szPlayer))
	
	new iPlayer = cmd_target(id, szPlayer, 0)
	
	if(!iPlayer)
		return PLUGIN_HANDLED
	
	replace(szArg, charsmax(szArg), szPlayer, "")
	trim(szArg)
	
	if(is_blank(szArg))
		return PLUGIN_HANDLED
	
	new szMessage[192], szName[68], szName2[32]
	get_user_name(id, szName, charsmax(szName))
	get_user_name(iPlayer, szName2, charsmax(szName2))
	
	if(is_anonymous(id, szArg))
		get_message(id, iPlayer, g_eAMessages[msgPsay], szArg, szMessage)
	else
		get_message(id, iPlayer, g_eMessages[msgPsay], szArg, szMessage)
		
	add(szName, charsmax(szName), " > ")
	add(szName, charsmax(szName), szName2)
		
	new iPlayers[32], iPnum, iReceiver
	get_players(iPlayers, iPnum)
	
	for(new i; i < iPnum; i++)
	{
		iReceiver = iPlayers[i]
		if(get_user_flags(iReceiver) & read_flags(g_eFlags[flagPsay]) || iPlayer == iReceiver || id == iReceiver) ColorChat(iReceiver, Color:g_eColors[clrPsay], szMessage)
	}
	
	client_cmd(iPlayer, "spk %s", g_eSettings[stgPsaySound])
	message_log(szName, szArg, "amx_psay")
	return PLUGIN_HANDLED
}

public cmdTeamSay(id, level, cid)
{
	if(!cmd_access(id, level, cid, 3))
		return PLUGIN_HANDLED
	
	new szArg[180], szTeam[32], iTeam
	read_args(szArg, charsmax(szArg))
	read_argv(1, szTeam, charsmax(szTeam))
	
	switch(szTeam[0])
	{
		case 't': iTeam = stgTeamT
		case 'c': iTeam = stgTeamCT
		case 's': iTeam = stgTeamSpec
		default: return PLUGIN_HANDLED
	}
	
	replace(szArg, charsmax(szArg), szTeam, "")
	trim(szArg)
	
	if(is_blank(szArg))
		return PLUGIN_HANDLED
	
	new szMessage[192], szName[68]
	get_user_name(id, szName, charsmax(szName))
	
	if(is_anonymous(id, szArg))
		get_message(id, iTeam, g_eAMessages[msgTeamSay], szArg, szMessage)
	else
		get_message(id, iTeam, g_eMessages[msgTeamSay], szArg, szMessage)
		
	add(szName, charsmax(szName), " > ")
	add(szName, charsmax(szName), g_eSettings[iTeam])
		
	new iPlayers[32], iPnum, iReceiver
	get_players(iPlayers, iPnum)
	
	for(new i; i < iPnum; i++)
	{
		iReceiver = iPlayers[i]
		if(get_user_flags(iReceiver) & read_flags(g_eFlags[flagPsay]) || get_user_team(iReceiver) == iTeam || id == iReceiver) ColorChat(iReceiver, Color:g_eColors[clrTeamSay], szMessage)
	}
	
	message_log(szName, szArg, "amx_teamsay")
	return PLUGIN_HANDLED
}

public cmdHsay(id, level, cid)
{
	if(!cmd_access(id, level, cid, 3))
		return PLUGIN_HANDLED
	
	new szArg[180]
	read_args(szArg, charsmax(szArg))
	trim(szArg)
	
	if(equal(szArg, ""))
		return PLUGIN_HANDLED
		
	new szColor[10], iEffect
	parse(szArg, szColor, charsmax(szColor))
	replace(szArg, charsmax(szArg), szColor, "")
		
	if(contain(szArg, HUD_BLINK) != -1)
	{
		replace(szArg, charsmax(szArg), HUD_BLINK, "")
		iEffect = 1
	}
	else if(contain(szArg, HUD_TYPEWRITER) != -1)
	{
		replace(szArg, charsmax(szArg), HUD_TYPEWRITER, "")
		iEffect = 2
	}
	
	new szMessage[192], szName[32], szCommand[10], iType, iColor
	get_user_name(id, szName, charsmax(szName))
	read_argv(0, szCommand, charsmax(szCommand))
	
	if(is_anonymous(id, szArg))
		get_message(id, 0, g_eAMessages[msgHsay], szArg, szMessage)
	else
		get_message(id, 0, g_eMessages[msgHsay], szArg, szMessage)
	
	if(++g_iMessageChannel > 6 || g_iMessageChannel < 3)
		g_iMessageChannel = 3
	
	switch(szCommand[4])
	{
		case 'b': iType = CMD_BSAY
		case 'c': iType = CMD_CSAY
		case 'r': iType = CMD_RSAY
		case 't': iType = CMD_TSAY
	}
	
	if(equal(szColor, "default"))
		copy(szColor, charsmax(szColor), g_eSettings[stgHudDefault])
	
	for(iColor = 0; iColor < sizeof(g_szHudColors); iColor++)
	{
		if(equal(szColor, g_szHudColors[iColor]))
			break
	}
	
	if(iColor >= sizeof(g_szHudColors))
		iColor = 0
	
	new iHud = (szCommand[8] == '2') ? 1 : 0
	new bool:blRandom = (iColor == 1) ? true : false
	
	blRandom ? send_hudmessage(iHud, random(256), random(256), random(256), iType, szMessage, iEffect) : send_hudmessage(iHud, g_iHudValues[iColor][R], g_iHudValues[iColor][G], g_iHudValues[iColor][B], iType, szMessage, iEffect)
	client_print(0, print_console, "[%sHUD] %s", iHud ? "D" : "", szMessage)
	message_log(szName, szArg, szCommand)
	return PLUGIN_HANDLED
}

public plugin_precache()
{
	fileRead()
	
	if(!is_blank(g_eSettings[stgPsaySound]))
		precache_sound(g_eSettings[stgPsaySound])
}

message_log(szName[], szMessage[], szCommand[])
	log_amx("[%s] %s : %s", szCommand, szName, szMessage)
	
send_hudmessage(iHud, iRed, iGreen, iBlue, iType, szMessage[], iEffect)
{
	new Float:flPosition = g_flPositions[iType][Y] + float(g_iMessageChannel) / 35.0
	
	switch(iHud)
	{
		case 0:
		{
			set_hudmessage(iRed, iGreen, iBlue, g_flPositions[iType][X], flPosition, iEffect, 1.0, g_eSettings[stgHudTime], 0.1, 0.15, -1)
			show_hudmessage(0, szMessage)
		}
		case 1:
		{
			set_dhudmessage(iRed, iGreen, iBlue, g_flPositions[iType][X], flPosition, iEffect, 1.0, g_eSettings[stgHudTime], 0.1, 0.15)
			show_dhudmessage(0, szMessage)
		}
	}
}

get_message(id, iPlayer, szMsg[], szArg[], szMessage[192])
{
	new szInfo[32]
	formatex(szMessage, charsmax(szMessage), "%s", szMsg)
	
	if(contain(szMessage, "%name%") != -1)
	{
		is_user_connected(id) ? get_user_name(id, szInfo, charsmax(szInfo)) : copy(szInfo, charsmax(szInfo), g_eSettings[stgServerName])
		replace_all(szMessage, charsmax(szMessage), "%name%", szInfo)
	}
	
	if(contain(szMessage, "%name2%") != -1)
	{
		get_user_name(iPlayer, szInfo, charsmax(szInfo))
		replace_all(szMessage, charsmax(szMessage), "%name2%", szInfo)
	}
	
	if(contain(szMessage, "%level%") != -1)
	{
		new iPrefix = get_user_flags(id) & read_flags(g_eFlags[flagAdmin]) ? stgAdminPrefix : is_user_admin(id) ? stgVipPrefix : stgPlayerPrefix
		copy(szInfo, charsmax(szInfo), g_eSettings[iPrefix])
		replace_all(szMessage, charsmax(szMessage), "%level%", szInfo)
	}
	
	if(contain(szMessage, "%team%") != -1)
		replace_all(szMessage, charsmax(szMessage), "%team%", g_eSettings[iPlayer])
		
	if(contain(szMessage, "%message%") != -1)
		replace_all(szMessage, charsmax(szMessage), "%message%", szArg)
	
	if(contain(szMessage, "%") != -1)
		replace_all(szMessage, charsmax(szMessage), "%", "")
		
	if(contain(szMessage, g_eSettings[stgSymAnonymous]) != -1)
		if(get_user_flags(id) & read_flags(g_eFlags[flagAnonymous])) replace_all(szMessage, charsmax(szMessage), g_eSettings[stgSymAnonymous], "")
		
	for(new i; i < sizeof(g_szColors) - 1; i += 2)
		replace_all(szMessage, charsmax(szMessage), g_szColors[i], g_szColors[i + 1])
}

bool:is_blank(szMessage[])
	return (szMessage[0] == EOS) ? true : false

bool:is_anonymous(id, szMessage[])
	return (g_eSettings[stgAnonymous] || ((contain(szMessage, g_eSettings[stgSymAnonymous]) != -1) && get_user_flags(id) & read_flags(g_eFlags[flagAnonymous]))) ? true : false

ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)
{
	static message[256];

	switch(type)
	{
		case NORMAL: // clients scr_concolor cvar color
		{
			message[0] = 0x01;
		}
		case GREEN: // Green
		{
			message[0] = 0x04;
		}
		default: // White, Red, Blue
		{
			message[0] = 0x03;
		}
	}

	vformat(message[1], charsmax(message) - 4, msg, 4);
	
	replace_all(message, charsmax(message), "!n", "^x01");
	replace_all(message, charsmax(message), "!t", "^x03");
	replace_all(message, charsmax(message), "!g", "^x04");

	// Make sure message is not longer than 192 character. Will crash the server.
	message[192] = '^0';

	static team, ColorChange, index, MSG_Type;
	
	if(id)
	{
		MSG_Type = MSG_ONE;
		index = id;
	} else {
		index = FindPlayer();
		MSG_Type = MSG_ALL;
	}
	
	team = get_user_team(index);
	ColorChange = ColorSelection(index, MSG_Type, type);

	ShowColorMessage(index, MSG_Type, message);
		
	if(ColorChange)
	{
		Team_Info(index, MSG_Type, TeamName[team]);
	}
}

ShowColorMessage(id, type, message[])
{
	message_begin(type, g_msgSayText, _, id);
	write_byte(id)		
	write_string(message);
	message_end();	
}

Team_Info(id, type, team[])
{
	message_begin(type, g_msgTeamInfo, _, id);
	write_byte(id);
	write_string(team);
	message_end();

	return 1;
}

ColorSelection(index, type, Color:Type)
{
	switch(Type)
	{
		case RED:
		{
			return Team_Info(index, type, TeamName[1]);
		}
		case BLUE:
		{
			return Team_Info(index, type, TeamName[2]);
		}
		case GREY:
		{
			return Team_Info(index, type, TeamName[0]);
		}
	}

	return 0;
}

FindPlayer()
{
	static i;
	i = -1;

	while(i <= g_iMaxPlayers)
	{
		if(is_user_connected(++i))
		{
			return i;
		}
	}

	return -1;
}
Cs-Plovdiv.com - Aim Attack - 93.123.16.4:27022 :gamer1:

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OciXCrom's Admin Chat [adminchat.amxx]

Мнение от OciXCrom » 04 Мар 2021, 14:22

Не разбрах нищо от въпроса ти и какво общо има с Chat Manager.
Не работи защото имаш плъгин/модул който забранява # в чата.
Цветовете си ги променяш от .ini файла.

В момента пренаписвам целия плъгин и ще бъде значително подобрен. Днес/утре би трябвало да е готов.

Аватар
bustA
Извън линия
Потребител
Потребител
Мнения: 264
Регистриран на: 20 Юни 2020, 11:47
Се отблагодари: 42 пъти
Получена благодарност: 27 пъти
Обратна връзка:

OciXCrom's Admin Chat [adminchat.amxx]

Мнение от bustA » 04 Мар 2021, 19:36

OciXCrom написа: 04 Мар 2021, 14:22 Не разбрах нищо от въпроса ти и какво общо има с Chat Manager.
Не работи защото имаш плъгин/модул който забранява # в чата.
Цветовете си ги променяш от .ini файла.

В момента пренаписвам целия плъгин и ще бъде значително подобрен. Днес/утре би трябвало да е готов.
Мисля че няма такъв плъгин който забранява #.
Идеята ми е като напиша на say #ника (да оцвети ника в зелено) а като напиша ##ника текст да изпраща лично съобщение. Синфола ако има вариант може и да е с !
Cs-Plovdiv.com - Aim Attack - 93.123.16.4:27022 :gamer1:

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OciXCrom's Admin Chat [adminchat.amxx]

Мнение от OciXCrom » 06 Мар 2021, 16:37

Изображение
  • Дългоочакваното пренаписване е тук! Плъгинът е изцяло пренаписан от нулата, кодът е значително подобрен и оптимизиран.
  • Имайте предвид, че старият конфигурационен файл вече не е съвместим с новата версия тъй като и той е изцяло променен. Задъжлително е да обновите файла при ъпдейта.
  • Плъгинът вече не ползва "client_cmd" за изпълняване администраторски команди. Това означава, че плъгинът ще работи за всички играчи и вече няма да виждате предупреждения от типа на "Server tried to send invalid command".
  • Добавена е защита срещу chat exploits ползвайки символите '#' и '%'.
  • Вече напълно можете да промените синонимните чат команди директно от .ini файла.
  • Името на плъгина е променено на "crx_adminchat". Автоматично се проверява дали "adminchat.amxx" е включен и същият бива изключен.
  • Добавена е нова команда "amx_centersay" която изпраща съобщение до всички играчи по средата на екрана.
  • Добавена е нова команда за моментално презареждане на .ini файла - "ac_reload". Имайте предвид, че промени по звуците стъпват в сила при смяна на мапа.
  • Плъгинът вече ползва "cromchat" библиотеката вместо вграден colorchat. Това означава, че старите символи за цветовете (!g, !t, !n) са заменени с &x04, &x03 и &x01.
  • Играчите могат да променят цвета на съобщението си ако имат флага "COLORCHAT_FLAG" зададен в .ini файла.
  • Вече можете да зададете уникален звук за всяка една команда, както и да определите дали този който изпраща съобщението ще може да чува звука.
  • Звуците вече ползват "precache_generic" вместо "precache_sound, така че не заемат ресурсно пространство.
  • Добавен e многоезичен файл.
  • Добавена е нова настройка ALLOW_EMPTY_MESSAGES която определя дали играчите могат да изпращат празни съобщения.
  • Добавена е настройка за ползване на custom log файл или логването напълно да бъде изключено.
  • Добавена е опция за показване на името на сървъра когато командите се ползват от сървърната конзола.
  • Добавена е вградена поддръжка за някои мои плъгини: OciXCrom's Rank System, Chat Manager & Admin Groups. Можете да ползвате техните опции в съобощенията, на пример ранк, ниво, префикс и прочие.
  • Оправено е показването на произволни кавички при "amx_psay" и "amx_teamsay".
  • Всяко (D)HUD съобщение вече ползва отделна позиция на екрана което означава, че съобщенията няма произволно да променят местоположението си.
  • Добавена е опция за ръчен избор на канала за изпращане на HUD съобщенията. Това може да се ползва в сървъри които имат голям брой HUD съобщения на екрана. Със задаване на канал, само 1 HUD съобщение ще се показва на екрана наведнъж. Това също ще предотврати движение на съобщенията нагоре и надолу.
  • Добавени са настройки за координатите на (D)HUD съобщенията.
  • Вече напълно можете да настроите цветовете на (D)HUD съобщенията от .ini файла. Добавил съм и опция за ползване на произволна стойност.
  • Цветът по подразбиране за (D)HUD съобщенията е променен от напълно произволен на жълто-зелено произволен. Новата опция е зададена като Y в списъка с цветове, а предишната X все още може ръчно да се ползва.
  • Добавен е администраторски флаг за ползване на ефекти при (D)HUD съобщенията. Същите могат да бъдат променени от .ini файла.
  • Добавени са настройки за пълен контрол върху параметрите на (D)HUD съобщенията, включвайки FX, времетраене, движение, брой на позиции и прочие.
  • Администраторските флагове за четене на чужди съобщения от "amx_psay" и "amx_teamsay" са отделени.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OciXCrom's Admin Chat - 2021 UPDATE!

Мнение от OciXCrom » 07 Мар 2021, 16:47

Изображение
  • Добавена поддръжка за всички игри. Плъгинът вече не изисква Counter-Strike за да работи. Разликата при други игри е това, че командата "amx_teamsay" ще е изключена и съобщенията няма да бъдат оцветени.
  • Премахната е защитата срещу "#" символа благодарение на новата вградена защита в CromChat.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OciXCrom's Admin Chat - 2021 UPDATE!

Мнение от OciXCrom » 13 Мар 2021, 21:46

Изображение
  • Добавена е нова команда "amx_rawsay" която изпраща неформатирано чат съобщение до всички играчи.
  • Добавена е нова команда "amx_speak" която се опитва да изпрати гласово съобщение ползвайки "vox/fvox" или да пусне звук за всички играчи.
  • Добавена проверка за празни звуци въведени в .ini файла която предотвратява краш на сървъра.
  • Оправена е работата на $customname$ при ползване на команда чрез сървърната конзола.
  • Вече не може да се изпращат празни съобщения които съдържат само интервали.
  • Премахнати са цветовете от името на играча/сървъра в (D)HUD/center/console съобщения.
  • Сървърът вече се показва в логовете ако команда е използвана чрез сървърната конзола.
  • amx_centersay съобщенията вече се показват в конзолата по същия начин като (D)HUD.
  • Активиран "amx_teamsay" и цветен чат за Counter-Strike: Condition Zero.
  • Добавена е нова настройка "NEWLINE_SHORTCUT". Когато е въведена в някоя команда, съобщението бива преместено на нов ред.
За ъпдейт от предишната версия, нужно е да обновите само crx_adminchat.sma/amxx и да добавите новата настройка в AdminChat.ini:

Код за потвърждение: Избери целия код

# Using this in a message will transfer it on the next line.
NEWLINE_SHORTCUT = !n

Аватар
rian18
Извън линия
Foreigner
Foreigner
Мнения: 17
Регистриран на: 19 Юли 2020, 12:11
Се отблагодари: 10 пъти

OciXCrom's Admin Chat - 2021 UPDATE!

Мнение от rian18 » 14 Мар 2021, 14:36

German translation:

[de] -- rian CRXADMINCHAT_RELOAD_SUCCESS = * Konfigurationsdatei erfolgreich neu geladen! CRXADMINCHAT_RELOAD_LOG = %s hat die Konfigurationsdatei neu geladen CRXADMINCHAT_MSG_EMPTY = Du kannst keine leeren Nachrichten senden CRXADMINCHAT_TEAM_NOT_FOUND = Ungültiges Team "%s"

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OciXCrom's Admin Chat - 2021 UPDATE!

Мнение от OciXCrom » 14 Мар 2021, 14:40

Added, thanks!

Аватар
weedy
Извън линия
Потребител
Потребител
Мнения: 31
Регистриран на: 13 Фев 2021, 17:44
Местоположение: софия
Получена благодарност: 5 пъти
Обратна връзка:

OciXCrom's Admin Chat - 2021 UPDATE!

Мнение от weedy » 09 Май 2021, 10:34

А възможно ли е да се преработи, смисъл да има например: както има админ чат и вип чат, ми трябва ОЛНЕР ЧАТ ?

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Одобрени плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 18 госта