Интересует вопрос по префиксам к нику в сообщении say.

santazx

Участник
Сообщения
23
Реакции
5
На днях для сервера начал делать плагин и все сделал что хотел, но осталась проблема.

1. Когда один и пишу в чат видно только одно сообщение.
2. Как только заходит 2 игрок когда пишу сообщение, оно повторяется два раз в чат.

Вот пример кода, где я ошибся? :(

PHP:
public Action:say(client, const String:command[], args)
{    
    if (client > 0 && args > 0)
    {
        decl String:text[255];
        GetCmdArgString(text, sizeof(text));
        StripQuotes(text);
        new AdminId:adminid = GetUserAdmin(client);
    
    for (new i = 1; i <= MaxClients; i++)
    {
        if (IsClientInGame(i) && !IsFakeClient(i))
        {
            if(adminid == INVALID_ADMIN_ID)
            {
                switch (GetEntProp(i, Prop_Data, "m_iFrags"))
                {
                    case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20:
                    {
                        CPrintToChatAll("[РАНГ-1]%N:%s", client, text);
                    }
                    case 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40:
                    {
                        CPrintToChatAll("[РАНГ-2]%N:%s", client, text);
                    }
                    case 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60:
                    {
                        CPrintToChatAll("[РАНГ-3]%N:%s", client, text);
                    }
                    case 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80:
                    {
                        CPrintToChatAll("[РАНГ-4]%N:%s", client, text);
                    }
                    case 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100:
                    {
                        CPrintToChatAll("[РАНГ-5]%N:%s", client, text);
                    }
                    case 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120:
                    {
                        CPrintToChatAll("[РАНГ-6]%N:%s", client, text);
                    }
                    case 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140:
                    {
                        CPrintToChatAll("[РАНГ-7]%N:%s", client, text);
                    }
                    case 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
                         161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
                         181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200:
                    {
                        CPrintToChatAll("[РАНГ-8]%N:%s", client, text);
                    }
                    default:
                    {
                        CPrintToChatAll("[РАНГ-9]%N:%s", client, text);
                     }
                }
            }
            else {
                CPrintToChatAll("[АДМИН]%N:%s", client, text);
            }
        }
    }
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Всё разобрался, сделал проверку на команду. :))
 
Последнее редактирование:

Хитрый_Ёжик

Участник
Сообщения
287
Реакции
111
CPrintToChatAll - выводит сообщение всем игрокам. Ты проходишься по списку всех игроков и на каждой итерации делаешь CPrintToChatAll. Если игроков 2, то CPrintToChatAll будет выполнен 2 раза.

Зачем это в цикле?
C-подобный:
adminid == INVALID_ADMIN_ID

ИСПОЛЬЗУЙ IF!!

Ну и на последок советую посмотреть это: http://forums.alliedmods.net/showthread.php?t=186695. Не надо изобретать велосипед.
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #3
santazx, таким образом switch не поможет. Так перебирать нельзя. Лучше используй операторы if и else if.
PHP:
public Action:say(client, const String:text[], args)
{    
    if (client > 0 && args > 0)
    {
        StripQuotes(text);
        new AdminId:adminid = GetUserAdmin(client);
        new iFrags = GetEntProp(client, Prop_Data, "m_iFrags");
    
        if (IsClientInGame(client) && !IsFakeClient(client))
        {
            if(adminid == INVALID_ADMIN_ID)
            {
                if (iFlags < 21) 
                {
                    CPrintToChatAll("[РАНГ-1]%N:%s", client, text);
                }
                else if (20 < iFlags < 41)
                {
                    CPrintToChatAll("[РАНГ-2]%N:%s", client, text);
                }
                else if (40 < iFlags < 61)
                 {
                    CPrintToChatAll("[РАНГ-3]%N:%s", client, text);
                 }
                 else if (60 < iFlags < 81)
                 {
                    CPrintToChatAll("[РАНГ-4]%N:%s", client, text);
                 }
                 else if (80 < iFlags < 101)
                 {
                    CPrintToChatAll("[РАНГ-5]%N:%s", client, text);
                 }
                 else if (100 < iFlags < 121)
                 {
                    CPrintToChatAll("[РАНГ-6]%N:%s", client, text);
                 }
                 else if (120 < iFlags < 141)
                 {
                    CPrintToChatAll("[РАНГ-7]%N:%s", client, text);
                 }
                 else if (140 < iFlags <= 200)
                 {
                    CPrintToChatAll("[РАНГ-8]%N:%s", client, text);
                 }
                 else
                 {
                    CPrintToChatAll("[РАНГ-9]%N:%s", client, text);
                 }
            }
            else
            {
                CPrintToChatAll("[АДМИН]%N:%s", client, text);
            }
        }
    }
    return Plugin_Continue;
}

Добавлено через 1 минуту
Ну и на последок советую посмотреть это: http://forums.alliedmods.net/showthread.php?t=186695. Не надо изобретать велосипед.
Этот плагин не поможет, если он считает фраги и выдает за них префиксы.
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
А боты умеют писать?)
И, кстати, в таком виде командный чат также станет общим.
PHP:
public Action:say(client, const String:text[], args)
{    
	if (client > 0 && args > 0 && IsClientInGame(client))
	{
		StripQuotes(text);
		if(GetUserAdmin(client) == INVALID_ADMIN_ID)
		{
			new iFrags = GetEntProp(client, Prop_Data, "m_iFrags");
			if (iFlags < 21) 
			{
				CPrintToChatAll("[РАНГ-1]%N:%s", client, text);
			}
			else if (20 < iFlags < 41)
			{
				CPrintToChatAll("[РАНГ-2]%N:%s", client, text);
			}
			else if (40 < iFlags < 61)
			{
				CPrintToChatAll("[РАНГ-3]%N:%s", client, text);
			}
			else if (60 < iFlags < 81)
			{
				CPrintToChatAll("[РАНГ-4]%N:%s", client, text);
			}
			else if (80 < iFlags < 101)
			{
				CPrintToChatAll("[РАНГ-5]%N:%s", client, text);
			}
			else if (100 < iFlags < 121)
			{
				CPrintToChatAll("[РАНГ-6]%N:%s", client, text);
			}
			else if (120 < iFlags < 141)
			{
				CPrintToChatAll("[РАНГ-7]%N:%s", client, text);
			}
			else if (140 < iFlags < 201)
			{
				CPrintToChatAll("[РАНГ-8]%N:%s", client, text);
			}
			else
			{
				CPrintToChatAll("[РАНГ-9]%N:%s", client, text);
			}
		}
		else
		{
			CPrintToChatAll("[АДМИН]%N:%s", client, text);
		}
		return Plugin_Handled;
	}
	return Plugin_Continue;
}
Лучше неохота расписывать)
 

Хитрый_Ёжик

Участник
Сообщения
287
Реакции
111
Этот плагин не поможет, если он считает фраги и выдает за них префиксы.
Если для пользователя заданы настройки цветов или тега, то после его сообщения вызывается следующий форвард:
C-подобный:
forward Action:CCC_OnColor(client, const String:message[], CCC_ColorType:type);
В котором всё это дело можно без проблем проверять.

Также, вообще так делать плохо и по хорошему бы следовало изменять тег непосредственно после совершения убийства.
 

santazx

Участник
Сообщения
23
Реакции
5
Всем спасибо, за идеи и как лучше сделать.
Постигать ещё долго, надеюсь со временем смогу делать хорошие плагины. :)

Добавлено через 5 минут
И по плагину, вся идея была просто менять префиксы не используя базу. :)
Хотел с базой использовать, но надобность отпала. :)
 
Последнее редактирование:
Сверху Снизу