Вопрос по Pawn

Сообщения
1,031
Реакции
827
Помог
10 раз(а)
Вот тут ошибся. Самый первый твой вариант с циклом был верный
id = 1
id = 2
id = 3
id = 4
id = 5
id = 6
id = 7
id = 8
id = 9
id = 10
id = 11
id = 12
id = 13
id = 14
id = 15
id = 16
id = 17
id = 18
Хотя при смене карты он мне сразу показывает что 2 раунд пошел, но затем каждый раунд прибавляет стабильно +1

18 Апр 2020
про read_data(1,2,3,4,5....) и нихера не понял,
тут посмотри

про эвенты тут посмотри

список всех эвентов тута
18 Апр 2020
fantom, а, все допер, он часто вызывается, при коннекте +1, при выборе команды +1, ну и каждый раунд соответственно +1
18 Апр 2020
TTox421, все правильно тогда, возвращаемся к исходному варианту, делаем цикл и прибавляем
 
Последнее редактирование:
Сообщения
63
Реакции
1
Объясните пожалуйста, почему раунд не прибавляет. Когда ввожу команду roundme выводит всегда 0
Вот алгоритм выполнения который понимаю я, поправьте если не верно
1. Объявление библиотек
2. Объявление define
3. Объявление переменных и массива размером 33 и названием NeuRound, и переменную, i которой сразу присваиваем 0
4. Начало плагина
5. Регистрация плагина
6. Регистрация события рестарт раунда и старт раунда с возвратом аргументов которые должны равняться оба 0 и вызывать функция Event_RoundRestart, Event_RoundStart, каждый раунд
7. Выполнение функции Event_RoundRestart, а именно обнуление счетчика раундов, каждый элемент массива равен 0
8. Выполнение функции Event_RoundStart, а именно цикл while смотрит, если у тебя i меньше либо равно 31, то выполняется процедура
1. i + 1
2. элемент массива который равен 1 равен = 0, и мы прибавляем к нему +1
9. Снова смотрим while i равно 1 на данный момент, что является меньше 33, по этому мы выплняем ещё раз
1. i + 1 (i равен 2)
2. 2 элемент массива получает +1
и так до 31,
10. Смотрим i равно 31, значит выполняем процедуру
1. i+1 (i равен 32)
2. 32 элемент массива получает +1
и.т.д


C#:
/* Plugin generated by AMXX-Studio */
 
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <colorchat>
 
#define PLUGIN "TestNaWarning"
#define VERSION "1.0"
#define AUTHOR "TTox421"
  
new RoundNum[33], i = 0;

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)

    register_event("TextMsg",   "Event_RoundRestart",   "a",    "2&#Game_C",    "2&#Game_w");
    register_event("HLTV",      "Event_RoundStart",     "a",    "1=0",          "2=0");
    register_clcmd("obnulenie","testcmd");
    register_clcmd("roundme","round");
}

public Event_RoundRestart()
    arrayset(RoundNum, 0, sizeof(RoundNum));

public Event_RoundStart(){
    while(31 <= i)
    {
        i++;
        RoundNum[i]++;
    }
}

public testcmd(id){
    RoundNum[id] = 0;
    client_print_color(id,Red,"Сейчас %i раунд", RoundNum[id]);
}

public round(id)
    client_print_color(id,Red,"Сейчас %i раунд", RoundNum[id])
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Javekson, это ивент вызываетсям много где. И трюк состоит в том, что при старте раунда он вызывается с аргументами 0 и 0. Именно на это и стоит фильтр в register_event. Событие глобальное, поэтому о никаком ид в качестве аргумента речи быть не может.
18 Апр 2020
TTox421, я не до конца понимаю вашу задачу. Она состоит в том, чтобы вывести в чат какой сейчас раунд всем игрокам или сколько раундов проиграл каждый из игроков? Если первое, то массив игроков вам не нужен. А в целом в реапи вынесен мембер из GameRules. Я думаю если заглянуть в геймдату, то вполне возможно его получить и хамом
18 Апр 2020
В принципе как и говорил https://github.com/alliedmodders/am...s/cstrike/offsets-chalflifemultiplay.txt#L527
Только натив не в хаме, а в фейкмете https://dev-cs.ru/amxx/fakemeta/get_gamerules_int/view
Итого код для получения количества сыгранных раундов будет таков
Код:
new totalRoundsPlayed = get_gamerules_int("CHalfLifeMultiplay", "m_iTotalRoundsPlayed");
Учтите, что 1-ый раунд будет иметь значение 0, поэтому стоит также прибавлять +1 при выводе.
18 Апр 2020
УТОЧНЮ: код выше актуален только при использовании амхх 1.8.3 и выше. А также при наличии актуальной gamedata.
 
Сообщения
1,031
Реакции
827
Помог
10 раз(а)
TTox421, цикл не правильный, подумай почему, и вообще учись дебажать такие вещи, например
Код:
public Event_RoundStart( )
{
    log_amx( "до цикла i = %d", i );
    
    while(31 <= i)
    {
        log_amx( "во время цикла i = %d", i );
        i++;
        RoundNum[i]++;
    }
    
    log_amx( "после цикла i = %d", i );
}
Выполни и посмотри, что будет в логе
 
Сообщения
63
Реакции
1
Моя задача при старте раунда записывать на каждого игрока сколько раундов он отыграл. Когда набирается 3 раунда он пишет команду и его раунды обнуляются и счётчик начинается с 0 именно для того, кто написал определённую команду.
Я прочту материалы что вы скинули спасибо
18 Апр 2020
Javekson, спасибо попробую, а куда логи пойдут в консоль или какой то фаил?
 
Сообщения
1,031
Реакции
827
Помог
10 раз(а)
TTox421, /addons/amxmodx/logs - L20200418.log, наименование лога зависит от даты
 
Сообщения
225
Реакции
90
Помог
1 раз(а)
TTox421, если нужно игроков перебрать, то удобнее for использовать и в нём локальную переменную создать, а не глобально i хранить.
Если задача высчитать сколько раундов играет (точнее начинает) игрок, нужно в цикле проверку на подключение игрока сделать. А также обнулять ячейку при коннекте.
 
Сообщения
63
Реакции
1
irrumabo_me_nomen, Да я знаю про обнуление ячейки при конекте, пока что моя задача, это сделать так, что бы у каждого игрока был свой элемент массива, в который каждый раунд дает +1, а когда он пишет команду его элемент обнулятся до нуля

А ну и устраивать проверку, если эллмент массива равен 3 к которому привязан игрок, тогда можно использовать команду
19 Апр 2020
Javekson, Спасибо чувак благодоря тебе я понял что я тупой, перепутать < и > местами это надо уметь...
19 Апр 2020
xD
 
Сообщения
63
Реакции
1
Когда пишешь is_user_alive ну или на подобии который узнает в какой команде играет игрок, в каком формате это записывается в переменную, там есть данные например типо 0 = тт, 1 = к-т, 2 = спек, или типо Counter-Terrorist, Terrorist, Spectator или труе фолс типо того
 

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
TTox421, пользуйся переводчиком, смысл поймешь)
Инклуды никто на русский переводить не будет. Конечно можно нагуглить примеры/полазить по amxxmodx.ru/amx-x.ru/dev-cs.ru и т.д, но доки то тоже надо читать.
 
Сообщения
63
Реакции
1
Ребят, с этим куском кода ошибка в консось [AMXX] Run time error 10 (plugin "shagibessimnii.amxx") (native "get_user_footsteps") - debug not enabled!

C++:
public reset_foot(id)
{
    footsteps = get_user_footsteps(id);

    if( footsteps == 1)
    {
        set_user_footsteps(id, 0);
    }
}
Весь код


C#:
/* Plugin generated by AMXX-Studio */
 
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <colorchat>
#include <fun>
 
#define PLUGIN "TestNaWarning"
#define VERSION "1.0"
#define AUTHOR "TTox421"

#define GOLD ADMIN_LEVEL_B // флаг доступа дл¤ привилегии Gold n
#define PLATINUM ADMIN_PASSWORD // флаг доступа дл¤ привилегии платинум k
#define LORD ADMIN_VOTE // флаг доступа дл¤ привилегии лорд j
#define RoundOpen 3  // каждые сколько раундом можно покупать бесшумный шаг
#define MoneyShopG 1500 // сколько будет стоить дл¤ голд
#define MoneyShopP 1200 // сколько будет стоить дл¤ платинум
#define MoneyShopL 850 // сколько будет стоить дл¤ лорд
  
new RoundNum[33], i = 0, footsteps;

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)

    register_event("TextMsg",   "Event_RoundRestart",   "a",    "2&#Game_C",    "2&#Game_w");
    register_event("HLTV",      "Event_RoundStart",     "a",    "1=0",          "2=0");

    RegisterHam(Ham_Spawn, "player", "reset_foot", 1)

    register_clcmd("tixiisagi","foot_steps");
}

public Event_RoundRestart()
    arrayset(RoundNum, 1, sizeof(RoundNum));

public Event_RoundStart()
{
    while(31 >= i)
    {
        i++;
        RoundNum[i]++;
    }

    i = 0;
}

public client_connect(id)
    RoundNum[id] = 1;


public client_disconnected(id)
    RoundNum[id] = 1;

public reset_foot(id)
{
    footsteps = get_user_footsteps(id);

    if( footsteps == 1)
    {
        set_user_footsteps(id, 0);
    }
}

public foot_steps(id) {
    if(get_user_flags(id) & LORD) {
        BuyFootSteps(id, MoneyShopL, "Lord")
    }
    else if(get_user_flags(id) & PLATINUM) {
        BuyFootSteps(id, MoneyShopP, "Platinum ViP")
    }
    else if(get_user_flags(id) & GOLD) {
        BuyFootSteps(id, MoneyShopG, "Gold ViP")
    }
    else {
        client_print_color(id, Red, "Недостаточно прав, для использования данной команды!");
        return PLUGIN_HANDLED_MAIN;
    }

    return PLUGIN_HANDLED_MAIN;
}

BuyFootSteps(id, money, prefix[]) {
    if(RoundOpen <= RoundNum[id]) {
        if(cs_get_user_money(id) > money) {
            set_user_footsteps(id, 1);
            cs_set_user_money(id, cs_get_user_money(id) - money);
            RoundNum[id] = 0;
            client_print_color(0, NORMAL, "[^4%s^1] игрок^3 %n^1, взял бесшумный бег", prefix, id);
            return PLUGIN_HANDLED_MAIN;
        }
        else {
            client_print_color(id, Red, "Недостаточно средств!");
            return PLUGIN_HANDLED_MAIN;
        }
    }
    else {
        client_print_color(id, Red, "Брать бесшумные шаги можно раз в^4 3 ^3раунда, подождите еще ^4%i ^3раунда", RoundOpen-RoundNum[id]);
        return PLUGIN_HANDLED_MAIN;
    }
}
19 Апр 2020
Как это исправить, что не так?
 
Сообщения
63
Реакции
1
Я насколько понял, плагин не успевает выполнить эти функции в момент спавна игрока?
 
Сообщения
63
Реакции
1
Shel, Можно по подробнее не понял в чем тут проблема
20 Апр 2020
Shel, Колор чат как то конфликтует с выходом игрока из сервера?
20 Апр 2020
Вот что пишет дебаг
L 04/20/2020 - 00:48:06: [FUN] Invalid player 1
L 04/20/2020 - 00:48:06: [AMXX] Displaying debug trace (plugin "shagibessimnii.amxx", version "1.0")
L 04/20/2020 - 00:48:06: [AMXX] Run time error 10: native error (native "get_user_footsteps")
L 04/20/2020 - 00:48:06: [AMXX] [0] shagibessimnii.sma::reset_foot (line 56)
20 Апр 2020
Не могу понять что не так с get_user_footsteps
 

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

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