В чате бесконечно спамится сообщение

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
50
Реакции
1
Помог
1 раз(а)
Сделал так, чтобы на меню открывалось только после 3 раунда, добавил сообщение: Меню будет доступно через %d раунд(а)
В итоге, после нажатия на меню до 3-го раунда, в чате начинает спамить этим сообщением.
Что нужно сделать?
 

Вложения

Сообщения
18
Реакции
7
Mem4ik, В проверке вы сделали так, что если количество раундов меньше числа в кваре, код будет постоянно заставлять игрока вводить эту команду снова и снова (client_cmd), в следствии чего получается такой реквием из спама)


Код:
public Counter_check(id){
    
    if(g_Round_counter >= get_cvar_num("amx_f_every_rounds")){
        
        client_cmd(id, "kadmsakml]awaldmenu")
        client_print(id,print_chat,"Exec you function")
        
        g_Round_counter = 0
    }else{
    
        client_cmd(id, "kadmsakml]awaldmenu")
        client_print(id,print_chat,"Меню будет доступно через %d раунд(а)",get_cvar_num("amx_f_every_rounds")-g_Round_counter)
    }
}
В else удалите
Код:
client_cmd(id, "kadmsakml]awaldmenu")
И спам пропадёт
Когда достигнуто нужное количество раундов, определённое кваром (как вы сказали, на третий раунд), замените
client_cmd(id, "kadmsakml]awaldmenu") на cmdMenu(id), таким образом, игроку id вызовется меню, сформированное в cmdMenu

И так строится логическая цепочка кода. Ни один из public'ов сам себя не вызовет :)
 
Сообщения
50
Реакции
1
Помог
1 раз(а)
Levka4, Спасибо, сработало!
Кажется я напортачил, где-то, т.к. в первом раунде можно взять оружие, а потом опять нельзя
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
g_Round_counter = 0 это для чего? Если игрок выполнит команду, раунды сбросятся
 
Сообщения
18
Реакции
7
Mem4ik, Пожалуйста. Также я заметил, что вы сбрасываете счётчик раундов, если достигнуто необходимое за кваром количество раундов каждый раз, когда условный админ вводит команду на вывод меню (имеется ввиду g_Round_counter = 0). Если таковая механика не была вами задумана, советую убрать)
 
Сообщения
50
Реакции
1
Помог
1 раз(а)
Code_0xABC, Я на просторах интернета увидел, как сделать открытие меню после определённого раунда. Там была эта строчка
30 Дек 2023
Levka4, Да, убрал, ещё раз спасибо!) Теперь получилось так, что оружие можно брать без ограничений в любом раундеxD
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Это надо делать в определенном событии, а если сервер посвежее и есть реапи, то воспользоваться хуком для этого, тем заменить регистрацию 2 ух событий. Так что для начала надо указывать информацию об вашем сервере, для того что бы знать, как правильно вам подсказать
 
Сообщения
50
Реакции
1
Помог
1 раз(а)
Code_0xABC, Да, есть реапи. Я понял, в след. раз укажу информацию
 
Сообщения
18
Реакции
7
Mem4ik, А тьфу! Так вы же в plugin_init присваиваете счётчику значение самого квара, на который он равняется! Конечно он с первого раунда берётся XD
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Mem4ik, и зачем каждый раз получать значение квара, если оно не меняется в коде, закешируйте его
 
Сообщения
18
Реакции
7
Mem4ik, Нет, уберите в plugin_init строчку g_Round_counter = get_cvar_num("amx_f_every_rounds")
 
Сообщения
50
Реакции
1
Помог
1 раз(а)
Ура, сработало. Спасибо всем!
Теперь выдаётся так, как надо )
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Mem4ik, тебе нужно что бы можно было открывать меню с 3 раунда, я правильно понял?
Код:
#include <amxmodx>
#include <reapi>

#define CHECK_ACCESS             //если не нужна проверка на флаг доступа, закоментируйте

#if defined CHECK_ACCESS
    #define ACCESS ADMIN_LEVEL_D
    #define IS_ACCESS(%0) bool:(get_user_flags(%0) & ACCESS)
#endif

new g_Cvar;

public plugin_init() {
    register_clcmd("kadmsakml]awaldmenu", "Counter_check");

    bind_pcvar_num(create_cvar("amx_f_every_rounds", "3"), g_Cvar);
    AutoExecConfig(true);
}

public Counter_check(id) {
    #if defined CHECK_ACCESS
        if(!IS_ACCESS(id))
            return;
    #endif

    new Round_Counter = get_member_game(m_iTotalRoundsPlayed) +1;

    if(Round_Counter >= g_Cvar) {
        cmdMenu(id);
        client_print(id, print_chat, "Вы открыли меню [PREMIUM]");
    }

    else client_print(id, print_chat, "Меню будет доступно через %i раунд(а)",  g_Cvar - Round_Counter);
}

public cmdMenu(id) {
    new i_Menu = menu_create("PREMIUM меню", "menu_handler");
    menu_additem(i_Menu, "\rPREMIUM \wM4A1 \r[250%]", "1", 0);
    menu_additem(i_Menu, "\rPREMIUM \wAK47 \r[250%]", "2", 0);
    menu_setprop(i_Menu, MPROP_NEXTNAME, "Далее");
    menu_setprop(i_Menu, MPROP_BACKNAME, "Назад");
    menu_setprop(i_Menu, MPROP_EXITNAME, "Выход");

    menu_display(id, i_Menu, 0);
}

public menu_handler(id, menu, item) {
    menu_destroy(menu);

    if(item != MENU_EXIT) {
        switch(item) {
            case 0: client_cmd(id, "give_msadwqadsdmajismdaomxcak");
            case 1: client_cmd(id, "give_padspkwqmsiadmw");
        }
    }
}
 
Последнее редактирование:
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Mem4ik, ну и добавлю, если меню не меняется в коде, то его можно сделать глобальным
 

AUF

Сообщения
91
Реакции
8
Code_0xABC, проверка на раунды.
C++:
new iRounds = get_member_game(m_iTotalRoundsPlayed) +1
Без лишнего кода и подсчета.
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
AUF, это правильнее, надо пометить, а то я забываю про это
 
Последнее редактирование:

AUF

Сообщения
91
Реакции
8
Code_0xABC, как же меня бесит это выражение... решайте сами) лично я не вижу смысла вызывать
C++:
RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound_Pre")
 
Статус
В этой теме нельзя размещать новые ответы.

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

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