Вывести админов в чат, по флагам

pokypka20

Участник
Сообщения
244
Реакции
31
Не знаю как правильно описать что нужно, постараюсь конкретно примером.

нужно выводить админов в чат в начале раунда примерно так:
PHP:
[Админ] --> онлайн админы по флагу b
[зм. админ] --> онлайн админы по флагу p
[гл. админ] --> онлайн админы по флагу z
тоесть дать каждому админу свой префикс, я видел пример как делать при подключении, но нужно чтобы каждый ник админа был с новой строки со своим префиксом.

PHP:
// примерно так

[Админ] PlayerD
[зм. админ] Stasik
[гл. админ] Porovoz

Если можно полностью код.
 

pokypka20

Участник
Сообщения
244
Реакции
31
Учись, делать сам, халявщик.

:clapp: таким людям которые умничают на форумах, а потом нагло берут код который скинули в теме и выдают за свой плагин.

Оффтоп
 

TolikCorp

Участник
Сообщения
874
Реакции
334
надо по порядку? или можно в перемешку?

Добавлено через 5 минут
PHP:
        for(new client = 1; client <= GetMaxClients(); client++)
        {
            if (IsClientInGame(client))
            {
                new flags = GetUserFlagBits(client);
                if(flags & ADMFLAG_ROOT)
                {
                    PrintToChatAll( "ГЛАВНЫЙ - %N", client);
                }
                else if(flags & ADMFLAG_CUSTOM2)
                {
                    PrintToChatAll( "ЗАМ - %N", client);
                }
                else if(flags & ADMFLAG_GENERIC)
                {
                    PrintToChatAll( "ЗАМ ЗАМ - %N", client);
                }
            }
        }
 
Последнее редактирование:

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
:clapp: таким людям которые умничают на форумах, а потом нагло берут код который скинули в теме и выдают за свой плагин.

Оффтоп

Где, что, я выкладывал и выдавал плагин за свой? Укажите мне.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
TolikCorp, сойдёт. Я вообще просто написал:
PHP:
public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	for (new i = 1; i <= MaxClients; i++)
	{
		if (IsClientInGame(i))
		{
			if (GetUserFlagBits(i) & ADMFLAG_GENERIC) PrintToChatAll("[Админ] %N", i);
			else if (GetUserFlagBits(i) & ADMFLAG_CUSTOM2) PrintToChatAll("[Зм. админ] %N", i);
			else if (GetUserFlagBits(i) & ADMFLAG_ROOT) PrintToChatAll("[Гл. админ] %N", i);
		}
	}
}
Оффтоп
 

pokypka20

Участник
Сообщения
244
Реакции
31
Где, что, я выкладывал и выдавал плагин за свой? Укажите мне.
Оффтоп

Добавлено через 3 минуты
TolikCorp, сойдёт. Я вообще просто написал:
PHP:
public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	for (new i = 1; i <= MaxClients; i++)
	{
		if (IsClientInGame(i))
		{
			if (GetUserFlagBits(i) & ADMFLAG_GENERIC) PrintToChatAll("[Админ] %N", i);
			else if (GetUserFlagBits(i) & ADMFLAG_CUSTOM2) PrintToChatAll("[Зм. админ] %N", i);
			else if (GetUserFlagBits(i) & ADMFLAG_ROOT) PrintToChatAll("[Гл. админ] %N", i);
		}
	}
}
Оффтоп

Вопрос, если админов много то они по идеи будут написаны в строчку?
можно ли сделать чтобы каждый префикс и ник был с новой строки?
PHP:
Админы онлайн: Вася, Петя, Дядя, Дук
[Админ] Вася
[Админ] Петя
[Админ] Дядя
[зм. админ] Дук
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Не стоит 10 раз её выполнять
Не стоит вообще делать так, как мы сделали. По-умному нужно: проверять админа на входе и записывать в буфер. Если нет админов - событие не хукать/унхукнуть, если вышел. С буфера уже просто выводить в чат.
Может организуешь релиз? :) А я просто пример дал...
Оффтоп
будут написаны в строчку?
Нет.
префикс и ник был с новой строки
Так и будет.
 

TolikCorp

Участник
Сообщения
874
Реакции
334
PHP:
new admin_power[MAXPLAYERS+1];
public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);

public OnClientPostAdminCheck(client)
{
    new flags = GetUserFlagBits(client);
    if(flags & ADMFLAG_ROOT)
        admin_power[client] = 1;
    else if(flags & ADMFLAG_CUSTOM2)
        admin_power[client] = 2;
    else if(flags & ADMFLAG_GENERIC)
        admin_power[client] = 3;
    else
        admin_power[client] = 0;
}

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    for(new client = 1; client <= GetMaxClients(); client++) 
        if (IsClientInGame(client)) 
            switch(admin_power[client])
            {
                case 1: PrintToChatAll("[Гл. админ] %N", client);
                case 2: PrintToChatAll("[Зм. админ] %N", client);
                case 3: PrintToChatAll("[Админ] %N", client);
            }
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
new flags = GetUserFlagBits(client);
    if(flags & ADMFLAG_ROOT)
        admin_power[client] = 1;
    else if(flags & ADMFLAG_CUSTOM2)
        admin_power[client] = 2;
    else if(flags & ADMFLAG_GENERIC)
        admin_power[client] = 3;
Слабенько... Switch сюда никак?)
И вообще, ну и какой смысл всего этого? Ведь опять же, проверок не меньше в раунде, чем было. Едва ли это можно назвать оптимизацией.
Оффтоп
 

TolikCorp

Участник
Сообщения
874
Реакции
334
запрос к флагам только один раз, далее берем данные из массива. PROFIT?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
запрос к флагам только один раз
Ты думаешь эти флаги так нагружают? Это почти, как обычная проверка !IsFakeClient(client), которую, кстати, ни один из нас не удосужился добавить (ещё у ботов не хватало флаги проверять).
Проблема в том, что у тебя опять же цикл, опять же сверки после него, да ещё значение переменной на каждого клиента. Не, это бессмысленно.
Оффтоп
pokypka20, не применяй его последний код - он поспешил, написав его.
Вот первый хорош (можно и лучше).
 

TolikCorp

Участник
Сообщения
874
Реакции
334
PHP:
public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); 
public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast) 
    for(new client = 1; client <= GetMaxClients(); client++) 
        if(IsClientInGame(client) && !IsFakeClient(client)) 
        { 
            new flags = GetUserFlagBits(client); 
            if(flags & ADMFLAG_ROOT)
                PrintToChatAll("[Гл. админ] %N", client); 
            else if(flags & ADMFLAG_CUSTOM2)
                PrintToChatAll("[Зм. админ] %N", client);
            else if(flags & ADMFLAG_GENERIC)
                PrintToChatAll("[Админ] %N", client); 
        }
Короч, оставляй так и не парься.
Проверку на client не надо делать. Цикл и так стартует с первого индекса.
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #20
TolikCorp, только Action: не нужен
 
Сверху Снизу