Написание плагинов

Webman

Nevermind
Сообщения
803
Реакции
330
DarklSide, Прекеш перед загрузкой самого файла? Мне кажется, что порядок влияет.

hanson, указывать игру нужно.
 

Sokret

Участник
Сообщения
33
Реакции
4
Кто может сделать плагин
gangs
смысл плагина кто прописан ну допустим(data/gangs_players.txt) они смогут создавать банду сама банда дает клан тег
 

Денис Быков

Участник
Сообщения
40
Реакции
2
Доброго времени суток, форумчане!
Есть такой плагин Army Ranks, который добавляет звания в игру. Но этот плагин имеет много багов и недочетов. Сабж
Мне хочется изменить работу чата. Он составлен так, что все сообщения в чате видны всем игрокам.
Необходимо сделать так, чтобы живые не видели сообщения мертвых и спектаторов. А мертвые и спектаторы, могли без проблем общаться друг с другом, ну и видеть чат живых.

К сожалению, я не знаю языка SourcePawn, но немного знаю C++. Просмотрев исходник:
C-подобный:
#include <army_ranks>
#include <basecomm>

#define MORE_COLORS
#if defined MORE_COLORS
 #include <morecolors>
#else
 #include <colors>
#endif

new	String: PrefixColor[MAXPLAYERS+1][20],
	String: NameColor[MAXPLAYERS+1][20],
	String: TextColor[MAXPLAYERS+1][20],
	String: DeathColor[MAXPLAYERS+1][20],
	String: SpecColor[MAXPLAYERS+1][20],
	String:	g_sRank[MAXPLAYERS+1][36],
	g_iLastSay[MAXPLAYERS+1];
	
public Plugin:myinfo = 
{
    name = "[ ARMY ] Чат/Chat",
    author = "sahapro33",
    description = "",
    version = "1.1 BaseComm"
}

public OnPluginStart()
{	
	AddCommandListener(Command_Say, "say");
	AddCommandListener(Command_Say_Team, "say_team");
	AddCommandListener(CommandBack, "jointeam");
}
public Action:CommandBack(client, const String:command[], args) GetChatColor(client);
public ARMY_PlayerSpawn(client) GetChatColor(client);
public ARMY_ArmyUp(client) GetChatColor(client);
public OnClientPutInServer(client) g_iLastSay[client] = 0;

public Action:Command_Say_Team(client, const String:command[], argc)
{
	if ( 0 < client <= MaxClients && IsClientInGame(client) && !BaseComm_IsClientGagged(client) )
	{
		new iTime = GetTime();
		if ( g_iLastSay[client] > iTime )
		{
			return Plugin_Handled;
		}
		g_iLastSay[client] = iTime +2;
		decl String:sName[64], String:sMessage[256];
		GetClientName(client, sName, sizeof(sName) - 1);
		GetCmdArgString(sMessage, sizeof(sMessage) - 1);
		StripQuotes(sMessage);
		if(!Army_GetStringRank(client,g_sRank[client])) SetFailState("Error");
		switch(GetClientTeam(client))
		{
			case 1:
			{
				Format(sMessage, 500, "(Наблюдатель) {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
			}
			case 2:
			{
				Format(sMessage, 500, "(Террорист) {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
			}
			case 3:
			{
				Format(sMessage, 500, "(Спецназовец) {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
			}
		}
		for (new i = 1; i<MaxClients; i++)
		{
			if (IsClientInGame(i)&&GetClientTeam(client)==GetClientTeam(i))
			{
				CPrintToChatEx(i,client,sMessage);
			}
		}
		return Plugin_Handled;
	}
	return Plugin_Continue;
}
public Action:Command_Say(client, const String:command[], argc)
{
	if (0 < client <= MaxClients && IsClientInGame(client) && !BaseComm_IsClientGagged(client))
	{
		new iTime = GetTime();
		if ( g_iLastSay[client] > iTime )
		{
			return Plugin_Handled;
		}
		decl String:sName[64], String:sMessage[500];
		GetClientName(client, sName, sizeof(sName) - 1);
		GetCmdArgString(sMessage, sizeof(sMessage) - 1);
		StripQuotes(sMessage);
		if(!Army_GetStringRank(client,g_sRank[client])) SetFailState("Error");
		if ( IsPlayerAlive(client) )
		{			
			Format(sMessage, 500, "{slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
			CPrintToChatAllEx(client,sMessage);
		}
		else
		{
			if ( GetClientTeam(client) > 1  )
			{
				Format(sMessage, 500, "%s*УБИТ* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",DeathColor[client],PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
				CPrintToChatAllEx(client,sMessage);
			}
			else
			{
				Format(sMessage, 500, "%s*СПЕК* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",SpecColor[client],PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
				CPrintToChatAllEx(client,sMessage);		
			}
		}
		return Plugin_Handled;
	}
	return Plugin_Continue;
}

GetChatColor(client)
{
	if(!Army_GetStringAtributes(client,"PrefixColor","{green}",PrefixColor[client]))SetFailState("Error");
	if(!Army_GetStringAtributes(client,"NameColor","{teamcolor}",NameColor[client]))SetFailState("Error");
	if(!Army_GetStringAtributes(client,"TextColor","{default}",TextColor[client]))SetFailState("Error");
	if(!Army_GetStringAtributes(client,"DeathColor","{default}",DeathColor[client]))SetFailState("Error");
	if(!Army_GetStringAtributes(client,"SpecColor","{default}",SpecColor[client]))SetFailState("Error");
}

Я нашел многие сходства с C++ и смог найти кусок кода, который нужно изменить.
Вот он:
C-подобный:
if ( IsPlayerAlive(client) )
		{			
			Format(sMessage, 500, "{slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
			CPrintToChatAllEx(client,sMessage);
		}
		else
		{
			if ( GetClientTeam(client) > 1  )
			{
				Format(sMessage, 500, "%s*УБИТ* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",DeathColor[client],PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
				CPrintToChatAllEx(client,sMessage);
			}
			else
			{
				Format(sMessage, 500, "%s*СПЕК* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",SpecColor[client],PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
				CPrintToChatAllEx(client,sMessage);		
			}
		}

Пожалуйста, помогите его переделать так, как написано в начале поста.
В исходнике используется библиотека morecolors.inc.

Добавлено через 3 часа 28 минут
Поразмыслив вечером над куском этого кода, сделал вот что:
C-подобный:
public Action:Command_Say(client, const String:command[], argc)
{
	if (0 < client <= MaxClients && IsClientInGame(client) && !BaseComm_IsClientGagged(client))
	{
		new iTime = GetTime();
		if ( g_iLastSay[client] > iTime )
		{
			return Plugin_Handled;
		}
		decl String:sName[64], String:sMessage[500];
		GetClientName(client, sName, sizeof(sName) - 1);
		GetCmdArgString(sMessage, sizeof(sMessage) - 1);
		StripQuotes(sMessage);
		if(!Army_GetStringRank(client,g_sRank[client])) SetFailState("Error");
		
		switch(IsPlayerAlive(client))
		{
		case 0:
		{
		if ( GetClientTeam(client) > 1  )
			{
				Format(sMessage, 500, "%s*УБИТ* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",DeathColor[client],PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
				
			}
			else
			{
				Format(sMessage, 500, "%s*СПЕК* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",SpecColor[client],PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
					
			}
		}
		case 1:
		{
			Format(sMessage, 500, "{slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
			
		}
		}
		if (IsPlayerAlive(client)) 
			{
			CPrintToChatAllEx(client,sMessage);
			}
		for (new i = 1; i<MaxClients; i++)
		{
			if (!IsPlayerAlive(client)) 
			{
				[B]if (IsClientInGame(i)&&GetClientTeam(client)==GetClientTeam(i))
				{
					CPrintToChatEx(i,client,sMessage);
				}[/B]
			}
		}		
		return Plugin_Handled;
	}
	return Plugin_Continue;
}

Так я получил, что живые могут общаться друг с другом, но не видят мертвых и спеков.
Однако возникла такая проблема:
Мертвые теры, кт и спеки НЕ ВИДЯТ сообщения друг друга!

Как сделать чтобы мертвые и спеки видели сообщения? Нужно как-то исправить выделенный жирным кусок кода. Помогите пожалуйста!

Может кто-нибудь помочь?
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393

DarklSide

Участник
Сообщения
931
Реакции
468
Денис Быков,
PHP:
//***
if (!Army_GetStringRank(client,g_sRank[client])) SetFailState("Error");
if (IsPlayerAlive(client))Format(sMessage, 500, "{slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
else
{
	if (GetClientTeam(client) > 1)Format(sMessage, 500, "%s*УБИТ* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",DeathColor[client],PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
	else Format(sMessage, 500, "%s*СПЕК* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s",SpecColor[client],PrefixColor[client],g_sRank[client],NameColor[client],sName,TextColor[client],sMessage);
}
for (new i = 1; i <= MaxClients; ++i)
{
	if (IsClientInGame(i))
	{
		//if (GetClientTeam(i) == GetClientTeam(client))
		if (IsPlayerAlive(i) && IsPlayerAlive(client))CPrintToChatEx(i, client, sMessage);
		else CPrintToChatEx(i, client, sMessage);
	}
}
return Plugin_Handled;
 

Денис Быков

Участник
Сообщения
40
Реакции
2
DarklSide, спасибо, скрипт работает, но живые снова стали видеть спеков и убитых.
Наверное, функции из morecolors пишут либо в команду, либо сразу всем.
Есть еще какие-нибудь идеи?
 

hjishkjdw

Участник
Сообщения
6
Реакции
0
Помогите, нужен плагин, который не дает раунду перезапуститься при заходе игрока или бота в пустую команду. Игра КС ГО. Спасибо
 
Последнее редактирование:

DarklSide

Участник
Сообщения
931
Реакции
468
hjishkjdw,
PHP:
#include <cstrike>
#pragma newdecls required 
public Action CS_OnTerminateRound(float &delay, CSRoundEndReason &reason)
{
    switch (reason)
    {
        case CSRoundEnd_GameStart:return Plugin_Handled;
    }
    return Plugin_Continue;
}
P.S.: фиксированные очки команд.
 

DarklSide

Участник
Сообщения
931
Реакции
468
Денис Быков,

PHP:
public Action:Command_Say_Team(client, const String:command[], argc)
{
    if (0 < client <= MaxClients && IsClientInGame(client) && !BaseComm_IsClientGagged(client))
    {
        new iTime = GetTime();
        if (g_iLastSay[client] > iTime)
        {
            return Plugin_Handled;
        }
        g_iLastSay[client] = iTime + 2;
        decl String:sName[64], String:sMessage[256];
        GetClientName(client, sName, sizeof(sName) - 1);
        GetCmdArgString(sMessage, sizeof(sMessage) - 1);
        StripQuotes(sMessage);
        if (!Army_GetStringRank(client, g_sRank[client]))SetFailState("Error");
        if (IsPlayerAlive(client))Format(sMessage, sizeof(sMessage), "{slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
        else
        {
            if (GetClientTeam(client) > 1)Format(sMessage, sizeof(sMessage), "%s*УБИТ* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", DeathColor[client], PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
            else Format(sMessage, sizeof(sMessage), "%s*СПЕК* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", SpecColor[client], PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
        }
        for (new i = 1; i <= MaxClients; ++i)
        {
            if (IsClientInGame(i))
            {
                if (GetClientTeam(i) == GetClientTeam(client))
                {
                    if (IsPlayerAlive(i) && IsPlayerAlive(client))CPrintToChatEx(i, client, sMessage);
                    else CPrintToChatEx(i, client, sMessage);
                }
            }
        }
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
public Action:Command_Say(client, const String:command[], argc)
{
    if (0 < client <= MaxClients && IsClientInGame(client) && !BaseComm_IsClientGagged(client))
    {
        new iTime = GetTime();
        if (g_iLastSay[client] > iTime)
        {
            return Plugin_Handled;
        }
        decl String:sName[64], String:sMessage[500];
        GetClientName(client, sName, sizeof(sName) - 1);
        GetCmdArgString(sMessage, sizeof(sMessage) - 1);
        StripQuotes(sMessage);
        if (!Army_GetStringRank(client, g_sRank[client]))SetFailState("Error");
        if (IsPlayerAlive(client))Format(sMessage, 500, "{slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
        else
        {
            if (GetClientTeam(client) > 1)Format(sMessage, 500, "%s*УБИТ* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", DeathColor[client], PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
            else Format(sMessage, 500, "%s*СПЕК* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", SpecColor[client], PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
        }
        for (new i = 1; i <= MaxClients; ++i)
        {
            if (IsClientInGame(i))
            {
                if (IsPlayerAlive(i) && IsPlayerAlive(client))CPrintToChatEx(i, client, sMessage);
                else CPrintToChatEx(i, client, sMessage);
            }
        }
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Добавлено через 12 минут
применяется новый синтаксис
только принуждает её основы, пока что некоторые - старые аспекты сохраняются.
 
Последнее редактирование:

Денис Быков

Участник
Сообщения
40
Реакции
2
DarklSide, та же самая проблема: живые видят сообщения мертвых и спеков.
Странно почему так происходит, вроде все написано верно.
P.S. Командный чат в оригинале тоже работал правильно, сообщения приходили только своей команде. Но косяк именно с выводом общего чата, живые не должны видеть сообщения спеков и мертвых.
 

DarklSide

Участник
Сообщения
931
Реакции
468
Денис Быков,
PHP:
else CPrintToChatEx(i, client, sMessage);
-> в двух местах:
PHP:
else if (!IsPlayerAlive(i) && !IsPlayerAlive(client))CPrintToChatEx(i, client, sMessage);
 

Денис Быков

Участник
Сообщения
40
Реакции
2
DarklSide, спасибо большое) Сейчас все работает почти как нужно.
Осталось только два момента:
1) Живым поступают сообщения от мертвых тиммейтов;
2) Мертвые и спеки не видят сообщения живых.


Второй пункт я исправил в коде:
C-подобный:
public Action:Command_Say(client, const String:command[], argc)
{
    if (0 < client <= MaxClients && IsClientInGame(client) && !BaseComm_IsClientGagged(client))
    {
        new iTime = GetTime();
        if (g_iLastSay[client] > iTime)
        {
            return Plugin_Handled;
        }
        decl String:sName[64], String:sMessage[500];
        GetClientName(client, sName, sizeof(sName) - 1);
        GetCmdArgString(sMessage, sizeof(sMessage) - 1);
        StripQuotes(sMessage);
        if (!Army_GetStringRank(client, g_sRank[client]))SetFailState("Error");
        if (IsPlayerAlive(client))Format(sMessage, 500, "{slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
        else
        {
            if (GetClientTeam(client) > 1)Format(sMessage, 500, "%s*УБИТ* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", DeathColor[client], PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
            else Format(sMessage, 500, "%s*СПЕК* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", SpecColor[client], PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
        }
		[B][I]if (IsPlayerAlive(client))CPrintToChatAllEx(client, sMessage);[/I]
        for (new i = 1; i <= MaxClients; ++i)
        {
            if (IsClientInGame(i))
            {
                if (!IsPlayerAlive(i) && !IsPlayerAlive(client))CPrintToChatEx(i, client, sMessage); 
            }
        }[/B]
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Надпись выделенную курсивом вынес из под цикла и изменил условие, теперь сообщения от живых приходят всем. Правильно ли такое написание?

Или можно еще вот так:
C-подобный:
for (new i = 1; i <= MaxClients; ++i)
        {
            if (IsClientInGame(i))
            {
		if (IsPlayerAlive(client))CPrintToChatEx(i, client, sMessage);
                if (!IsPlayerAlive(i) && !IsPlayerAlive(client))CPrintToChatEx(i, client, sMessage); 
            }
        }
В этом случае, сообщения от живых тоже приходят всем игрокам.

С первым пунктом пока проблемы. Видимо надо также сделать проверку на IsPlayerAlive.
UPD. Забыл заменить строчку по вашему последнему посту в первой процедуре. Теперь первый пункт исправлен. Чат работает как надо, еще раз спасибо!

Разобрался я таки с кодом, теперь все работает как и хотел. Осталось привести в порядок косметику, вернуть подписи в командный чат, но с этим я сам разберусь. А сейчас вот такой код получился:
PHP:
#include <army_ranks>
#include <basecomm>

#define MORE_COLORS
#if defined MORE_COLORS
 #include <morecolors>
#else
 #include <colors>
#endif

new	String: PrefixColor[MAXPLAYERS+1][20],
	String: NameColor[MAXPLAYERS+1][20],
	String: TextColor[MAXPLAYERS+1][20],
	String: DeathColor[MAXPLAYERS+1][20],
	String: SpecColor[MAXPLAYERS+1][20],
	String:	g_sRank[MAXPLAYERS+1][36],
	g_iLastSay[MAXPLAYERS+1];
	
public Plugin:myinfo = 
{
    name = "[ ARMY ] Чат/Chat",
    author = "sahapro33",
    description = "",
    version = "1.1 BaseComm"
}

public OnPluginStart()
{	
	AddCommandListener(Command_Say, "say");
	AddCommandListener(Command_Say_Team, "say_team");
	AddCommandListener(CommandBack, "jointeam");
}
public Action:CommandBack(client, const String:command[], args) GetChatColor(client);
public ARMY_PlayerSpawn(client) GetChatColor(client);
public ARMY_ArmyUp(client) GetChatColor(client);
public OnClientPutInServer(client) g_iLastSay[client] = 0;

public Action:Command_Say_Team(client, const String:command[], argc) 
{ 
    if (0 < client <= MaxClients && IsClientInGame(client) && !BaseComm_IsClientGagged(client)) 
    { 
        new iTime = GetTime(); 
        if (g_iLastSay[client] > iTime) 
        { 
            return Plugin_Handled; 
        } 
        g_iLastSay[client] = iTime + 2; 
        decl String:sName[64], String:sMessage[256]; 
        GetClientName(client, sName, sizeof(sName) - 1); 
        GetCmdArgString(sMessage, sizeof(sMessage) - 1); 
        StripQuotes(sMessage); 
        if (!Army_GetStringRank(client, g_sRank[client]))SetFailState("Error"); 
        if (IsPlayerAlive(client))Format(sMessage, sizeof(sMessage), "%s(Команде) {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", DeathColor[client], PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage); 
        else 
        { 
            if (GetClientTeam(client) > 1)Format(sMessage, sizeof(sMessage), "%s*УБИТ*(Команде) {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", DeathColor[client], PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage); 
            else Format(sMessage, sizeof(sMessage), "%s(Наблюдателям) {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", SpecColor[client], PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage); 
        } 
        for (new i = 1; i <= MaxClients; ++i) 
        { 
            if (IsClientInGame(i)) 
            { 
                if (GetClientTeam(i) == GetClientTeam(client)) 
                { 
                    if (!IsPlayerAlive(i) && !IsPlayerAlive(client))CPrintToChatEx(i, client, sMessage); 
                    else if (IsPlayerAlive(client))CPrintToChatEx(i, client, sMessage); 
                } 
            } 
        } 
        return Plugin_Handled; 
    } 
    return Plugin_Continue; 
}
public Action:Command_Say(client, const String:command[], argc)
{
    if (0 < client <= MaxClients && IsClientInGame(client) && !BaseComm_IsClientGagged(client))
    {
        new iTime = GetTime();
        if (g_iLastSay[client] > iTime)
        {
            return Plugin_Handled;
        }
        decl String:sName[64], String:sMessage[500];
        GetClientName(client, sName, sizeof(sName) - 1);
        GetCmdArgString(sMessage, sizeof(sMessage) - 1);
        StripQuotes(sMessage);
        if (!Army_GetStringRank(client, g_sRank[client]))SetFailState("Error");
        if (IsPlayerAlive(client))Format(sMessage, 500, "{slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
        else
        {
            if (GetClientTeam(client) > 1)Format(sMessage, 500, "%s*УБИТ* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", DeathColor[client], PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
            else Format(sMessage, 500, "%s*НАБЛЮДАТЕЛЬ* {slategrey}[%s%s{slategrey}] %s%s{default}: %s%s", SpecColor[client], PrefixColor[client], g_sRank[client], NameColor[client], sName, TextColor[client], sMessage);
        }
        for (new i = 1; i <= MaxClients; ++i)
        {
            if (IsClientInGame(i))
            {
                if (!IsPlayerAlive(i) && !IsPlayerAlive(client))CPrintToChatEx(i, client, sMessage);
				else if (IsPlayerAlive(client))CPrintToChatEx(i, client, sMessage);
            }
        }
        return Plugin_Handled;
    }
    return Plugin_Continue;
}  

GetChatColor(client)
{
	if(!Army_GetStringAtributes(client,"PrefixColor","{green}",PrefixColor[client]))SetFailState("Error");
	if(!Army_GetStringAtributes(client,"NameColor","{teamcolor}",NameColor[client]))SetFailState("Error");
	if(!Army_GetStringAtributes(client,"TextColor","{default}",TextColor[client]))SetFailState("Error");
	if(!Army_GetStringAtributes(client,"DeathColor","{default}",DeathColor[client]))SetFailState("Error");
	if(!Army_GetStringAtributes(client,"SpecColor","{default}",SpecColor[client]))SetFailState("Error");
}
Спасибо большое за помощь! Поставил бы + в репутацию, но почему-то нет такой возможности.

UPD. Почему-то, если писать в командный чат быстро, то сообщения отправляются через раз. А если с интервалом в секунду, то отправляется каждое сообщение. Отчего такое может быть?

UPD. После установки данного плагина, оригинала или мода, не поступают сообщения в историю hlstatsx ce. Поступает только команда hlstatsx. С чем это может быть связано?
 
Последнее редактирование:

DarklSide

Участник
Сообщения
931
Реакции
468
UPD. Почему-то, если писать в командный чат быстро, то сообщения отправляются через раз. А если с интервалом в секунду, то отправляется каждое сообщение. Отчего такое может быть?
PHP:
g_iLastSay[MAXPLAYERS+1];
public OnClientPutInServer(client) g_iLastSay[client] = 0;
new iTime = GetTime();
if ( g_iLastSay[client] > iTime )
{
    return Plugin_Handled;
}
g_iLastSay[client] = iTime +2;

UPD. После установки данного плагина, оригинала или мода, не поступают сообщения в историю hlstatsx ce. Поступает только команда hlstatsx. С чем это может быть связано?

Посмотри в фильтр чата.

P.S.:
$whereclause $whereclause2 AND *
 

Денис Быков

Участник
Сообщения
40
Реакции
2
Посмотри в фильтр чата.

P.S.:
$whereclause $whereclause2 AND *
Не совсем понял зачем нужен фильтр, он не был установлен. На всякий случай поменял строки на те что вы кинули, но ничего не изменилось.

Добавлено через 2 часа 11 минут
Понял от чего не идут сообщения в история чата HLSTATSX.
Вот это:
PHP:
return Plugin_Handled;

Отключает дефолтный чат. А то что выводит сервер, это уже сообщения переработанные плагином, которые HLSTATS не распознает.

То есть, если удалить эту строку, то в чат пойдут два сообщения. Что бы было понятней, скрин:
1DDC4E98ED3BBA8D4A8E00910F9ACA6C6CBA864D

Так вот, есть ли иные способы скрыть дефолтный чат, но не отключать его полностью?
 
Последнее редактирование:
Сверху Снизу