Русское сообщество по скриптингу

Online голосование [ Остановка плагина ]  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Online голосование [ Остановка плагина ]  [Решено]

Сообщение MayroN » 29 май 2018, 23:00

Начал тестировать онлайн Голосование и заметил странную особенность.В оффлайн режиме всё работает прекрасно ( с начала голос за Мод,а потом за карту ).
А при онлайн - остановка.Тоисть игроки обездвижены и ничего непроисходит.А должен быть чёрный екран ,меню карт и т.п..Как и по коду функции
Код: Выделить всё
public start_vote()
{

        new players[32], iCount, player;
        get_players(players, iCount, "ah");

        for (new i; i < iCount; i++)
        {
        player = players[i];

        set_pev(player, pev_flags, pev(player, pev_flags) | FL_FROZEN)
        fm_set_user_godmode(player, 1);
        }

        SetBlackScreenFade(2);
        set_task(1.0, "SetBlackScreenFade", 1);
        g_alreadyvoted = true
        remove_task
(TASK_VOTEMOD)
        remove_task(TASK_CHVOMOD)

    new menu[512], mkeys, iPercent, i
    new pos 
= format(menu, 511, g_coloredmenus ? "\y%L:\w^n^n" : "%L:^n^n", LANG_PLAYER, "MM_CHOOSE")

    for(i=0; i<= g_modcount; i++) 
        
{

        pos += format(menu[pos], 511, "\r%d.\w %s\d \y•\w \r%d\w \y%%\w^n^n", i + 1, g_modnames[i], iPercent)
        g_votemodcount[i] = 0
        mkeys 
|= (1<<i)
    }

    new szMenuName[63]
    formatex(szMenuName, charsmax(szMenuName), "%L", LANG_PLAYER, "MM_VOTE")
    server_print("show menu %s %s %i", menu, g_menuname, mkeys)
    show_menu(0, mkeys, menu, 15, g_menuname)
    client_cmd(0, "spk Vote/golosovanie_start")

    set_task(15.0, "check_vote", TASK_CHVOMOD)
    return


И ето происходит именно на Моде GunGame ( с остальными Модами всё впорядке ).
Как только появляеться победное MOTD окно - и всё -больше ничего нет.В самом плагине GunGame есть участок кода где можно прописать соответствующую функцию для голосования ( тоесть функцию для голоса )

Код: Выделить всё
// start a map vote
stock start_mapvote()
{
    new dmmName[24], plugin;
    
    
// Galileo - galileo.amxx
    if(galileoID != -1)
    {
        log_amx("Starting a map vote from Galileo");
        
        server_cmd
("gal_startvote -nochange");
    }

    // AMXX Nextmap Chooser - mapchooser.amxx
    else if((plugin = is_plugin_loaded("Nextmap Chooser")) != -1)
    {
        log_amx("Starting a map vote from Nextmap Chooser");

        new oldWinLimit = get_cvar_num("mp_winlimit"), oldMaxRounds = get_cvar_num("mp_maxrounds");
        set_cvar_num("mp_winlimit",0); // skip winlimit check
        set_cvar_num("mp_maxrounds",-1); // trick plugin to think game is almost over

        // call the vote
        if(callfunc_begin_i(get_func_id("voteNextmap",plugin),plugin) == 1)
            callfunc_end();

        // set maxrounds back
        set_cvar_num("mp_winlimit",oldWinLimit);
        set_cvar_num("mp_maxrounds",oldMaxRounds);
    }

    // Deagles' Map Management 2.30b - deagsmapmanage230b.amxx
    else if((plugin = is_plugin_loaded("DeagsMapManage")) != -1)
    {
        dmmName = "DeagsMapManage";
    }

    // Deagles' Map Management 2.40 - deagsmapmanager.amxx
    else if((plugin = is_plugin_loaded("DeagsMapManager")) != -1)
    {
        dmmName = "DeagsMapManager";
    }

    //  Mapchooser4 - mapchooser4.amxx
    else if((plugin = is_plugin_loaded("Nextmap Chooser 4")) != -1)
    {
        log_amx("Starting a map vote from Nextmap Chooser 4");
    
        new oldWinLimit 
= get_cvar_num("mp_winlimit"), oldMaxRounds = get_cvar_num("mp_maxrounds");
        set_cvar_num("mp_winlimit",0); // skip winlimit check
        set_cvar_num("mp_maxrounds",1); // trick plugin to think game is almost over

        // deactivate g_buyingtime variable
        if(callfunc_begin_i(get_func_id("buyFinished",plugin),plugin) == 1)
            callfunc_end();

        // call the vote
        if(callfunc_begin_i(get_func_id("voteNextmap",plugin),plugin) == 1)
        {
            callfunc_push_str("",false);
            callfunc_end();
        }

        // set maxrounds back
        set_cvar_num("mp_winlimit",oldWinLimit);
        set_cvar_num("mp_maxrounds",oldMaxRounds);
    }

    // NOTHING?
    else log_amx("Using gg_vote_setting without any compatible plugins: could not start a vote!");

    // do DMM stuff
    if(dmmName[0])
    {
        log_amx("Starting a map vote from %s",dmmName);

        // allow voting
        /*if(callfunc_begin("dmapvotemode",dmmName) == 1)
                    {
            callfunc_push_int(0); // server
            callfunc_end();
        }*/

        new oldWinLimit = get_cvar_num("mp_winlimit"), Float:oldTimeLimit = get_cvar_float("mp_timelimit");
        set_cvar_num("mp_winlimit",99999); // don't allow extending
        set_cvar_float("mp_timelimit",0.0); // don't wait for buying
        set_cvar_num("enforce_timelimit",1); // don't change map after vote

        // call the vote
        if(callfunc_begin_i(get_func_id("startthevote",plugin),plugin) == 1)
            callfunc_end();

        set_cvar_num("mp_winlimit",oldWinLimit);
        set_cvar_float("mp_timelimit",oldTimeLimit);

        // disallow further voting
        /*if(callfunc_begin("dmapcyclemode",dmmName) == 1)
        {
            callfunc_push_int(0); // server
            callfunc_end();
        }*/
        
        set_task
(20.1,"dmm_stop_mapchange");
    }
}
 


Но я пошол в обход,и в конфигурационном файле GunGame прописал следующее ( команда вызова меню голосования )
Код: Выделить всё
gg_vote_setting 0 
gg_vote_custom 
"" 
gg_changelevel_custom 
"amx_votemod" 

И так то работает,но только оффлайн

В заключении я думаю что,нужно в Моде корректно прописать вызов функции голосования,а в конфиге мода сделать так
Код: Выделить всё
gg_changelevel_custom "ето поле оставить пустым" 


Если,что-то неясно - спрашивайте.Постараюсь ещё более подробно обьяснить
Спасибо за Вашу помощь !

Добавлено спустя 1 час 56 минут 42 секунды:
Решено:
Оказалось всё банально просто.Нужно было в другой функции вызвать ( там где Motd окно показываеться )
Добавить:
Код: Выделить всё
    callfunc_begin("start_vote", "multimod.amxx");
    callfunc_end(); 

Далее убрать автоматический рестарт ( проверку на наличие ,если нет голосования )
И в cfg сделать так:
Код: Выделить всё
gg_vote_setting 0 
gg_vote_custom 
"" 
gg_changelevel_custom 
"" 
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14