> > > > >

Помощь по упрощению+ReAPI

Сообщения
135
Рейтинг
27
#1
Приветствую всех, имеется
Код:
#include <amxmodx>

#define WAIT_TIME 10
#define OLD_TIME 0

#define Task_WAP_ID 666

new const PLUGINS[][] =
{
    "warmup.amxx", "vip_rbs.amxx", "ad_manager.amxx"
}

new message[128]

new g_pFreezeTime, g_pWaitRound, g_HudSync, g_pCountDown

public plugin_init()
{
    register_plugin("Wait All Players", "1.1", "WILL BE")

    register_event("TextMsg", "EV_Start_Game", "a", "2=#Game_Commencing")
    register_event("HLTV", "EV_Start_Round", "a", "1=0", "2=0")

    g_pFreezeTime = get_cvar_pointer("mp_freezetime")

    g_HudSync = CreateHudSyncObj()
}

public EV_Start_Game()
{
    g_pWaitRound = 0
    Toggle_Plugins(false)
}

public EV_Start_Round()
{
    if(++g_pWaitRound == 1)
    {
        if(task_exists(Task_WAP_ID)) return
        g_pCountDown = WAIT_TIME
        set_task(0.1, "Task_WAP", Task_WAP_ID)
        set_pcvar_num(g_pFreezeTime, WAIT_TIME)

        Toggle_Plugins(true)
    }
    return;
}

public Task_WAP()
{
    g_pCountDown--

    if(g_pCountDown > 0)
    {
        format(message, sizeof(message) - 1, "Ожидание игроков!^nДо рестарта %i сек!", g_pCountDown)
        set_hudmessage(220, 160, 0, -1.0, 0.3, 1, 0.0, 1.03, 0.0, 0.0, 5)
        show_hudmsg(0)
    }
    else if(g_pCountDown == 0)
    {
        set_cvar_num("sv_restart", 1)
        set_pcvar_num(g_pFreezeTime, OLD_TIME);
    }

    set_task(1.0, "Task_WAP", Task_WAP_ID)
}

show_hudmsg(id)
{
    ShowSyncHudMsg(id, g_HudSync, "%s", message)
}

Toggle_Plugins(const bool:enable)
{
    for (new i = 0; i < sizeof(PLUGINS); i++)
    {
        enable ? unpause("ac", PLUGINS[i]) : pause("ac", PLUGINS[i])
    }
}

public plugin_end()
{
    if(task_exists(Task_WAP_ID)) remove_task(Task_WAP_ID)
}
Хотел бы узнать, что можно в нем упростить/изменить, делал все "хардкорово":crazy:. И хотел бы узнать, как отловить изначальный mp_freezetime?
И есть ли смысл переводить на ReAPI?
 
 
Сообщения
532
Рейтинг
760
#2
Советую глянуть уже готовые реализации коих куча, например Advanced Re Warmup.
Кратко могу сказать только:
  • Нет хардкоду, без хардкода лучше. Сюда относится как список отключаемых плагинов (я думаю всё же лучше в конфиг, дабы не компилировать плагин каждый раз когда нужно добавить или убрать какой-то плагин) так и настройки.
  • format() -> formatex() и sizeof() - 1 -> charsmax()
  • ShowSyncHudMsg(id, g_HudSync, "%s", message) -> ShowSyncHudMsg(id, g_HudSync, message)
  • enable ? unpause("ac", PLUGINS[i]) : pause("ac", PLUGINS[i]) ну код не для роботов, куда сложнее читается в таком формате, я бы делал if/else, от такого тернарного условия лучше никому не будет (оптимизаторам разве что).
  • Для удаления таска не нужно проверять существует ли он, эта проверка уже есть при удалении таска. А вообще есть смысл удалять его в plugin_end()? Очень сомневаюсь что таски не удаляются сами.
Изначальный mp_freezetime тот что при старте карты? Ну в начале карты и получать значение.
Реализация на ReAPI подразумевает что меньшее количество людей сможет использовать плагин.
 
6  

Похожие темы

Ответы
9
Просмотры
668
Ответы
1
Просмотры
150
> > > > >