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

Тема в разделе "Программирование / Скриптинг", создана пользователем pokypka20, 30 июл 2014.

  1. pokypka20

    pokypka20

    Сообщения:
    250
    Симпатии:
    30
    Не знаю как правильно описать что нужно, постараюсь конкретно примером.

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

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

    [АдминPlayerD
    [змадминStasik
    [гладминPorovoz
    Если можно полностью код.
     
  2. ☆★☆БАТЯ☆★☆™

    ☆★☆БАТЯ☆★☆™

    Сообщения:
    2.585
    Симпатии:
    1.341
    pokypka20, Вывод каждый раунд - имхо, слишком часто. Раундов через 3-5 хотя бы.
     
    pokypka20 нравится это.
  3. pokypka20

    pokypka20

    Сообщения:
    250
    Симпатии:
    30
    Вот, вот идея хорошая не подумал. Если возможно сделать подкиньте код.
     
  4. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Учись, делать сам, халявщик.
     
  5. pokypka20

    pokypka20

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

    Оффтоп
     
  6. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    надо по порядку? или можно в перемешку?

    Добавлено через 5 минут
    PHP:
            for(new client 1client <= 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);
                    }
                }
            }
     
    Последнее редактирование: 30 июл 2014
    pokypka20 нравится это.
  7. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Где, что, я выкладывал и выдавал плагин за свой? Укажите мне.
     
  8. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.540
    Симпатии:
    1.984
    TolikCorp, сойдёт. Я вообще просто написал:
    PHP:
    public OnPluginStart() HookEvent("round_start"Event_RoundStartEventHookMode_PostNoCopy);

    public 
    Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    {
        for (new 
    1<= MaxClientsi++)
        {
            if (
    IsClientInGame(i))
            {
                if (
    GetUserFlagBits(i) & ADMFLAG_GENERICPrintToChatAll("[Админ] %N"i);
                else if (
    GetUserFlagBits(i) & ADMFLAG_CUSTOM2PrintToChatAll("[Зм. админ] %N"i);
                else if (
    GetUserFlagBits(i) & ADMFLAG_ROOTPrintToChatAll("[Гл. админ] %N"i);
            }
        }
    }
    Оффтоп
     
    pokypka20 нравится это.
  9. pokypka20

    pokypka20

    Сообщения:
    250
    Симпатии:
    30
    TolikCorp, AlmazON, спасибо.
     
  10. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    Не стоит 10 раз её выполнять. Лучше в переменную и далее сравнивать...
     
  11. pokypka20

    pokypka20

    Сообщения:
    250
    Симпатии:
    30
    Оффтоп

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

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.540
    Симпатии:
    1.984
    Не стоит вообще делать так, как мы сделали. По-умному нужно: проверять админа на входе и записывать в буфер. Если нет админов - событие не хукать/унхукнуть, если вышел. С буфера уже просто выводить в чат.
    Может организуешь релиз? :) А я просто пример дал...
    Оффтоп
    Нет.
    Так и будет.
     
    pokypka20 нравится это.
  13. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    PHP:
    new admin_power[MAXPLAYERS+1];
    public 
    OnPluginStart() HookEvent("round_start"Event_RoundStartEventHookMode_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 1client <= GetMaxClients(); client++) 
            if (
    IsClientInGame(client)) 
                switch(
    admin_power[client])
                {
                    case 
    1PrintToChatAll("[Гл. админ] %N"client);
                    case 
    2PrintToChatAll("[Зм. админ] %N"client);
                    case 
    3PrintToChatAll("[Админ] %N"client);
                }
     
    pokypka20 нравится это.
  14. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.540
    Симпатии:
    1.984
    Слабенько... Switch сюда никак?)
    И вообще, ну и какой смысл всего этого? Ведь опять же, проверок не меньше в раунде, чем было. Едва ли это можно назвать оптимизацией.
    Оффтоп
     
  15. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    запрос к флагам только один раз, далее берем данные из массива. PROFIT?
     
  16. AlmazON

    AlmazON деревянный © yand3xmail

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

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    PHP:
    public OnPluginStart() HookEvent("round_start"Event_RoundStartEventHookMode_PostNoCopy); 
    public 
    Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast
        for(new 
    client 1client <= 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 не надо делать. Цикл и так стартует с первого индекса.
     
    Последнее редактирование: 30 июл 2014
  18. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.540
    Симпатии:
    1.984
    Тут тоже? :)
     
  19. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
  20. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.990
    TolikCorp, только Action: не нужен
     
    TolikCorp нравится это.