Помощь, сделать информер КТ и ТТ - VIP

Сообщения
38
Реакции
-1
Помог
1 раз(а)
18682

Выше на скине, я был один на сервере.

Пытался сделать информер для КТ и ТТ VIP.То бишь, чтобы отображались вип игроки в разных командах.
VIP CT: 0
VIP TT: 0

У меня либо показывает то что випы только за ТТ, на самом деле, все были в разных командах.
Либо показывало что и там и там по 3 игрока, когда 3-е были на сервере, либо же когда я один проверял, было за тт и кт написано что по 1 випу есть.

пытаюсь уже около часа что то сделать, не могу.
 

Download all Attachments

  • 879 байт Просмотры: 16
Сообщения
2,288
Реакции
1,740
Помог
31 раз(а)
DEVCS, Лучше приложите исходный код сюда сразу
 
Сообщения
400
Реакции
147
Помог
11 раз(а)
Pokemoshka,
C++:
#include <amxmodx>
#include <cstrike>
#include <amxmisc>
#include <fun>

new PL[] = "[AMXX] Date and Time"
new VE[] = "0.2"
new AU[] = "ServerBy905 Team & Tom"

new admin, admintt

public plugin_init()
    register_plugin(PL, VE, AU)

public client_putinserver(id)
{
    set_task(1.0, "DateAndTime", id, _, _, "b")
    if(get_user_flags(id) & ADMIN_LEVEL_H)
    admin++
    admintt++
}

public client_disconnected(id)
{
    if(get_user_flags(id) & ADMIN_LEVEL_H)
    admin--
    admintt--
}

public DateAndTime(id) {
    if(get_user_team(id) == CS_TEAM_CT)
    {
        set_hudmessage(10, 255, 255,  0.01, 0.26, 0, 6.0, 5.0, 0.08, 2.0)
        show_hudmessage(id, "VIP CT: %d^n VIP TT: %d", admin, admintt)
    }
    else
    {
        set_hudmessage(255, 0, 0,  0.01, 0.26, 0, 6.0, 5.0, 0.08, 2.0)
        show_hudmessage(id, "VIP CT: %d^n VIP TT: %d", admin, admintt)
    }
    return PLUGIN_CONTINUE
}
 
Сообщения
25
Реакции
41
Помог
1 раз(а)
Код:
#include <amxmodx>
#include <reapi>

new iVip_CT = 0;
new iVip_T = 0;

public plugin_init()
{
    register_plugin("VIP Informer", "1.0" , "rrr");
    RegisterHookChain(RG_HandleMenu_ChooseTeam, "HandleMenu_ChooseTeam_Pre", false);
    RegisterHookChain(RG_HandleMenu_ChooseTeam, "HandleMenu_ChooseTeam_Post", true);
}

public HandleMenu_ChooseTeam_Pre(const id, const MenuChooseTeam:slot)
{
    if(get_user_flags(id) & ADMIN_LEVEL_H)
    {
        if(get_member(id, m_iTeam) == CS_TEAM_CT)
            iVip_CT--;
        else if(get_member(id, m_iTeam) == CS_TEAM_T)
            iVip_T--;
    }
}

public HandleMenu_ChooseTeam_Post(const id, const MenuChooseTeam:slot)
{
    if(get_user_flags(id) & ADMIN_LEVEL_H)
    {
        if(get_member(id, m_iTeam) == CS_TEAM_CT)
            iVip_CT++;
        else if(get_member(id, m_iTeam) == CS_TEAM_T)
            iVip_T++;
    }
}

public client_putinserver(id)
    set_task(1.0, "HUD", id, _, _, "b");

public client_disconnected(id)
{
    if(get_user_flags(id) & ADMIN_LEVEL_H)
    {
        if(get_member(id, m_iTeam) == CS_TEAM_CT)
            iVip_CT--;
        else if(get_member(id, m_iTeam) == CS_TEAM_T)
            iVip_T--;
    }
}

public HUD(id)
{
    if(get_member(id, m_iTeam) == CS_TEAM_CT)
    {
        set_hudmessage(10, 255, 255,  0.01, 0.26, 0, 6.0, 5.0, 0.08, 2.0);
        show_hudmessage(id, "VIP CT: %d^nVIP TT: %d", iVip_CT, iVip_T);
    }
    else if(get_member(id, m_iTeam) == CS_TEAM_T)
    {
        set_hudmessage(255, 0, 0,  0.01, 0.26, 0, 6.0, 5.0, 0.08, 2.0);
        show_hudmessage(id, "VIP CT: %d^nVIP TT: %d", iVip_CT, iVip_T);
    }
    return PLUGIN_CONTINUE;
}
Не тестил, но должно работать.
RG_HandleMenu_ChooseTeam раньше не использовал, при смене команды балансером все скорее всего пойдет "криво", так же и со сменой команды через админку.
 
Сообщения
198
Реакции
16
Помог
1 раз(а)
DEVCS, нет проверки на команду. ты добавляешь/отнимаешь и там, и там, поэтому так происходит
5 Сен 2019
Rias, а не лучше использовать один худ для всех, заменяя параметры исходя из команды?
 
  • Нравится
Реакции: Rias
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
*Полгода обсуждения о том как лучше и попытки сделать очередную 0.0.54 финал версию*

Код:
#pragma semicolon 1

#include <amxmodx>
#include <reapi>

public plugin_init()
{
    register_plugin("VIP Informer", "1.0", "fl0wer");

    set_task(10.0, "@Task_ShowInformer", .flags ="b");
}

@Task_ShowInformer(task)
{
    new playersNumber[TeamName];

    for (new i = 1; i <= MaxClients; i++)
    {
        if (!is_user_connected(i))
            continue;

        if (~get_user_flags(i) & ADMIN_LEVEL_H)
            continue;

        playersNumber[get_member(i, m_iTeam)]++;
    }

    set_hudmessage(255, 255, 255,  0.01, 0.26, 0, 6.0, 10.1, 0.08, 2.0);
    show_hudmessage(0, "VIP TT: %d^nVIP CT: %d", playersNumber[TEAM_TERRORIST], playersNumber[TEAM_CT]);
}
 
Сообщения
278
Реакции
137
DEVCS,
Can you try that?
PHP:
#include <amxmodx>
#include <reapi>

new g_t_vip = 0;
new g_ct_vip = 0;
new g_team[MAX_CLIENTS + 1];

public plugin_init() {
    register_plugin("Hudmessage", "1.0", "PurposeLess");

    RegisterHookChain(RG_HandleMenu_ChooseTeam, "@HandleMenu_ChooseTeam", .post=false);
}

@HandleMenu_ChooseTeam(const id, const MenuChooseTeam:key)
{
    if(~get_user_flags(id) & ADMIN_LEVEL_H)
    {
        return;
    }

    switch(key)
    {
        case MenuChoose_T: {
            g_t_vip++;
            g_team[id] = 1;
        }
        case MenuChoose_CT, MenuChoose_VIP: {
            g_ct_vip++;
            g_team[id] = 2;
        }
    }
}

public client_putinserver(id)
{
    g_team[id] = 0;
    set_task(10.0, "@showhud", id, .flags = "b");
}

public client_disconnected(id)
{
    switch(g_team[id])
    {
        case 1: {
            g_t_vip--;
        }
        case 2: {
            g_ct_vip--;
        }
    }
    remove_task(id);
}

@showhud(const id)
{
    switch(get_member(id, m_iTeam))
    {
        case TEAM_TERRORIST: {
            set_hudmessage(255, 0, 0,  0.01, 0.26, 0, 6.0, 5.0, 0.08, 2.0);
            show_hudmessage(id, "VIP CT: %d^nVIP TT: %d", g_ct_vip, g_t_vip);
        }
        case TEAM_CT: {
            set_hudmessage(10, 255, 255,  0.01, 0.26, 0, 6.0, 5.0, 0.08, 2.0);
            show_hudmessage(id, "VIP CT: %d^nVIP TT: %d", g_ct_vip, g_t_vip);
        }
    }
}

***
I didn't see that problem is fixed.
No problem it's working.
***
 
Последнее редактирование:
Сообщения
198
Реакции
16
Помог
1 раз(а)
fl0wer, чисто для интереса хочется узнать. если считать вначале раунда, будет ли это производительнее, чем бесконечный таск?
американец (простите, если ошибся) сделал то, что требует ТЗ. мог бы - влепил лайк!
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
kucklovod, i did this for "actual" data.
 
Сообщения
198
Реакции
16
Помог
1 раз(а)
fl0wer, да я понимаю русский, выразился видимо непонятно :derisive:. этой фразой (американец (простите, если ошибся) сделал то, что требует ТЗ. мог бы - влепил лайк!) я выразил благодарность PurposeLess'y
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
kucklovod, а я что, не по ТЗ сделал?
 
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
kucklovod,
если считать вначале раунда, будет ли это производительнее, чем бесконечный таск?
Даже если таск будет тикать раз в секунду, - толком эта "оптимизация через кеш" ничего не даст. Лучше один таск на всех, чем по таску игрока. Как раз как у Фловера, и выводить фактические данные. Это ж не фуллпак, в конце концов.

Господа, вы ставя на плеера персональный таск с "b", хотя бы снимать его при выходе не забывайте :)
 
Последнее редактирование:
Сообщения
198
Реакции
16
Помог
1 раз(а)
BlackSignature, вопрос не в том, какой таск использовать (глобальный/на игрока), вопрос в том, как выгодней посчитать кол-во вип (таском, или в начале нового раунда)? выгоднее в плане производительности.

fl0wer, не будет ли проще выполнить цикл используя get_players_ex? как работает натив я не знаю (может в нём for используется, тогда вопрос отпадает), просто интересно
 
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
kucklovod,
вопрос в том, как выгодней
вопрос многогранный, на самом деле.
1) Фактическая выгода в производительности
2) Читаемость
3) Объём кода

Можно "наоптимизировать" так, что потом без поллитра не разберёшься, зачем нужна определённая цепь кода, как она работает, и как внести в неё правки без того чтобы что-то сломать. Ладно, когда это 1 плагин строк на 100. А когда в плагине 2к строк? Каждый такой "полезный" кеш это код, который надо прочитать и переварить в голове. На это уходит время.

Вариант Фловера гонит каждый раз цикл с проверкой флагов игроков, без какого либо кеша. Просто и понятно. А вы предлагаете кеш? Нужно учесть дисконнект игрока, нужно в идеале учесть потерю им флагов? Вот щас у меня есть флаги, а через секунду я ник сменил, и...? Затриггерил в админ-лоадере рефреш флагов, а вариант на кеше так и будет думать, что я VIP. Т.е. нам нужно ещё и смену ника ловить. Ладно. Ну а сторонние плагины? Допустим мне какой-то плагин выдал требуемый флаг. Но я в кеш уже попал, и за VIP меня считать не будет. И что с этим делать? Надо кидать форвард из плагина что выдаёт, и ловить в этом плагине. И в совокупности вот это вот всё... Не кажется, что это не оптимизация, а наоборот, деоптимизация?

Вообще никому из начинающих не советую без особой нужды кешировать флаги игрока. Ладно если пишете для себя. Но если кому-то/в паблик, высока вероятность что потом начнутся проблемы совместимости с другими плагинами.
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
kucklovod, да что ж вы не уйметесь, все уже давно продумали за вас. Как ты випов посчитаешь в гетплаерс? Или мне что, сначала тратиться на вызов натива амхх с циклом, и потом ещё опять самому циклом выбирать випов?
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу