Внедрение кваров в плагин

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
101
Реакции
17
Помог
2 раз(а)
Добрый день товарищи.
Пользуюсь этим простым плагином лет 5, переодически что-то меняя.
Вот сейчас захотелось добавить квары, чтобы плагин каждый раз не перекомпилировать и можно было менять все на ходу.
Кол-во рестартов я вставить смог, но как засунуть квар кол-ва раундов, я не знаю, т.к. через switch case у меня это не выходит(заменял case 50 и case 51 на case get_cvar_num("квар") или переменную), очевидно, что-то не так делаю, а через if выглядит не очень, да еще и с варнингами 211.
Прошу помощи, модет кто подскажет правильное, красивое решение)
Код:
#include <amxmodx>
#include <cstrike>

new curRound;
new curRestartRound;

public plugin_init()
{
    register_event("TextMsg", "evGameStart", "a", "2&#Game_C", "2&#Game_w", "2&#Game_will_restart_in")
    register_event("HLTV", "evRoundStart", "a", "1=0", "2=0");

    register_cvar("om_maxrest", "5"); //количество рестартов
}

public evGameStart()
{
    curRound = 0;
}

public evRoundStart(id)
{
    curRound++;
    ChatColor(id, "^1Раунд: ^4%d ^1из^4 50", curRound);
    switch(curRound)
        {
            case 50:
            {
                set_hudmessage(255, 255, 255, 0.02, 0.21, 0, 30.0, 30.0, 0.0, 0.5, -1);
                show_hudmessage(0, "Последний раунд");
            }
            case 51:
            {
                curRestartRound++;
                if (curRestartRound <= get_cvar_num("om_maxrest"))
                {
                    server_cmd("swapteams");
                }
                else server_cmd("rtv");
            }
        }
}

stock ChatColor(const id, const szMessage[], any:...)
{
    static pnum, players[32], szMsg[190], IdMsg;
    vformat(szMsg, charsmax(szMsg), szMessage, 3);

    if(!IdMsg) IdMsg = get_user_msgid("SayText");

    if(id)
    {
        players[0] = id;
        pnum = 1;
    }
    else get_players(players, pnum, "ch");

    for(new i; i < pnum; i++)
    {
        message_begin(MSG_ONE, IdMsg, .player = players[i]);
        write_byte(players[i]);
        write_string(szMsg);
        message_end();
    }
}
 
Сообщения
775
Реакции
294
Помог
11 раз(а)
@muhycspb,через if делай
16 Дек 2021
Есть одна истина, которую мало кто знает. Switch - это группировка условий if. Т.е. в твоем случае идет if(curRound == 50)
16 Дек 2021
Так что сделай
if(curRound == cvar)
else if(curRound > cvar )
 
Сообщения
101
Реакции
17
Помог
2 раз(а)
maFFyoZZyk, блин, точняк, проблема была в том, что делая через if я ставил if(curRound = cvar), а не if(curRound == cvar) и меня смущал этот варнинг, спасибо)
 
Сообщения
775
Реакции
294
Помог
11 раз(а)
zhorzh78, кажется на форуме амыкс писали за это. К примеру если написать switch(kills)
{
Case 1:
Case 2:
Case 13... 100
}

И как тут ты объяснишь
16 Дек 2021
Мне говорили что при компилировании это все равно развернется как if и будут if для каждого от 13 до 100
16 Дек 2021
Возможно ты прав и можно сделать все через pointer
16 Дек 2021
muhycspb, ради теста задай поинтер к квару и запиши поинтер в кейс
 
Последнее редактирование:
Сообщения
101
Реакции
17
Помог
2 раз(а)
zhorzh78, видимо я не правильно использую swith case, толи проблема в синтаксисе, толи в логике, а может во всем)
1639660668919.png
Код:
public evRoundStart(id)
{
    curRound++;
    ChatColor(id, "^1Раунд: ^4%d ^1из^4 50", curRound);
    switch(curRound)
        {
            case curRound = get_cvar_num("om_maxround"):
            {
                set_hudmessage(255, 255, 255, 0.02, 0.21, 0, 30.0, 30.0, 0.0, 0.5, -1);
                show_hudmessage(0, "Последний раунд");
            }
            case curRound = (get_cvar_num("om_maxround")+1):
            {
                curRestartRound++;
                if (curRestartRound <= get_cvar_num("om_maxrest"))
                {
                    server_cmd("swapteams");
                }
                else server_cmd("rtv");
            }
        }
}
 
Сообщения
775
Реакции
294
Помог
11 раз(а)
muhycspb, ну да, не правильно
16 Дек 2021
muhycspb, напиши в телегу, попробуем.. Выложишь тут результат, мне самому интересно
 
Сообщения
271
Реакции
348
Помог
15 раз(а)
Код:
maxRound = get_cvar_num("om_maxround");

if (curRound==maxRound):
    ...
else if (curRound==maxRound+1):
    ...
 
  • Нравится
Реакции: Ayk
Сообщения
775
Реакции
294
Помог
11 раз(а)
Denzer, к этому пришли давно, просто закралась Толика сомнений, что квары можно использовать в кейсах
 
Сообщения
101
Реакции
17
Помог
2 раз(а)
видимо можно закрывать)
 
Сообщения
336
Реакции
417
Помог
7 раз(а)
То, что нужно было автору
Код:
#include <amxmodx>

enum _:Round
{
    CUR_ROUND,
    CUR_RESTART,
    MAX_ROUND,
    MAX_RESTART,
    CMD_RESTART[32]
};

new g_eRound[Round];

public plugin_init()
{
    register_plugin("Max Restart/Round", "0.0.1", "Albertio");

    register_event("TextMsg", "evGameStart", "a", "2&#Game_C", "2&#Game_w", "2&#Game_will_restart_in")
    register_event("HLTV", "evRoundStart", "a", "1=0", "2=0");
    
    bind_pcvar_num(create_cvar("om_maxround", "50"), g_eRound[MAX_ROUND]); // количество раундов
    bind_pcvar_num(create_cvar("om_maxrestart", "5"), g_eRound[MAX_RESTART]); // количество рестартов
    bind_pcvar_string(create_cvar("om_cmdrestart", "rtv"), g_eRound[CMD_RESTART], charsmax(g_eRound[CMD_RESTART])); // команда рестарта
}

public evGameStart()
{
    g_eRound[CUR_ROUND] = 0;
}

public evRoundStart(id)
{
    g_eRound[CUR_ROUND]++;

    client_print_color(id, print_team_default, "^1Раунд:^4 %d^1 из^4 50", g_eRound[CUR_ROUND]);

    if(g_eRound[CUR_ROUND] == g_eRound[MAX_ROUND])
    {
        set_hudmessage(255, 255, 255, 0.02, 0.21, 0, 30.0, 30.0, 0.0, 0.5);
        show_hudmessage(0, "Последний раунд");
    }
    else if(g_eRound[CUR_ROUND] == (g_eRound[MAX_ROUND] + 1))
    {
        g_eRound[CUR_RESTART]++;

        if(g_eRound[CUR_RESTART] <= g_eRound[MAX_RESTART])
        {
            server_cmd("swapteams");
        }
        else
        {
            server_cmd(g_eRound[CMD_RESTART]);
        }
    }
}
 
Статус
В этой теме нельзя размещать новые ответы.

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

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