Bomb Transfer

Сообщения
184
Реакции
316
Помог
1 раз(а)
Хочу чтобы бомба передавалась игроку у которого наименьший ранк (топ игроку)
Но бомба выдается рандомно.
Если убрать комментарии, то в логи идет топовый игрок, но бомба все равно выдается рандомно.
C++:
#include <amxmodx>
#include <csstatsx_sql>
#include <reapi>

#define PLUGIN "BombTransfer"
#define VERSION "0.1"
#define AUTHOR "perf"

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    RegisterHookChain(RG_CSGameRules_GiveC4, "CSGameRules_GiveC4", .post = true);
    //register_logevent("Event_RoundStart",2,"1=Round_Start")
}

public CSGameRules_GiveC4()
{
    client_print(0, print_console, "[0] CSGameRules_GiveC4 = true");
    new players[MAX_CLIENTS], num;
    new Stats[8], Bodyhits[8], iRank[MAX_CLIENTS];
    
    get_players(players, num, "aeh", "TERRORIST");
    for (new i,player; i < num; i++)
    {
        client_print(0, print_console, "[] %d terrorist", num);

        player = players[i];

        iRank[player] = get_user_stats_sql(player, Stats, Bodyhits);

        CombSortOpt(iRank);

        new name[MAX_NAME_LENGTH];
        get_user_name(player, name, charsmax(name));
        client_print(0, print_console, "[] Top Rank is is %d", iRank);
        client_print(0, print_console, "[] Bomb transfer to %s", name);

        rg_transfer_c4(players[i], player);
        //return HC_CONTINUE;
    }   
    //return HC_CONTINUE;
}
stock CombSortOpt(array[], array_size = sizeof(array))
{
    static gap, swap_status, i, j, end, val1, val2, addr1;
    gap = array_size;
    swap_status = true;
    while (gap != 1 || swap_status)
    {
        if((gap = (gap * 10) / 13) == 0)
            gap = 1;
        swap_status = false;
        i = 0, j = gap - 1, end = array_size - gap;
        while (i < end)
        {
            if(array[i] < array[++j])
            {
                #emit    load.s.alt    array
                #emit    load.pri    i
                #emit    idxaddr
                #emit    move.alt
                #emit    load.i
                #emit    stor.pri    val1
                #emit    stor.alt    addr1
                #emit    load.pri    gap
                #emit    idxaddr
                #emit    move.alt
                #emit    load.i
                #emit    stor.pri    val2
                #emit    load.pri    val1
                #emit    stor.i
                #emit    load.alt    addr1
                #emit    load.pri    val2
                #emit    stor.i
                swap_status = true;
            }
            ++i;
        }
    }
    return 1;
}
 

Download all Attachments

Сообщения
29
Реакции
62
На каком-то игроке надо остановиться, иначе ты выдашь каждому теру бомбу.
И зачем массив сортировать каждый раз в цикле? Ты шо)))

Я бы сначала пробежался циклом по терам, их ранки записал бы в массив. Отсортировал ранки, и там уже определял как-то кому выдавать...

И еще, флаг "e" в нативе get_players бывает бажит. Может быть, что итерация проходит только раз и массив players[] отдает "0"... А второй аргумент rg_transfer_c4 при значении "0" выдает бомбу рандомному игроку. Это не больше чем предположение.
Ранее такое замечал. На 1.8.3 не уверен, но вроде все гуд.
Только посмотрел скрины)
С итерацией все нормально. Надо смотреть как работает rg_transfer_c4..
30 Янв 2018
Насколько понимаю:
rg_transfer_c4(<"у кого отобрать">, <"кому передать">);
30 Янв 2018
https://github.com/s1lentq/reapi/bl...eapi/src/natives/natives_misc.cpp#L1505-L1538
 
Последнее редактирование:
Сообщения
184
Реакции
316
Помог
1 раз(а)
SerGrib, Да все так, и это работает в afk_control от неугомона. Оттуда и взял. Свой плагин прописал выше его на всякий.
30 Янв 2018
Я просто не понимаю, чему нет связи в сортировке и выдаче? Ведь сортирует нормально
 
Сообщения
29
Реакции
62
Естественно будет бажить. функция не передает другому игроку бомбу, если у первого игрока (первый аргумент) бомбы нету.
А что ты пытался сделать, я так и не понял...


C++:
        player = players[i];
        rg_transfer_c4(players[i], player);
"отбираем у игрока бомбу, отдаем ему же".

Да и... зачем эту задачу делать в цикле? Получи только индекс игрока, у которого бомба, и запиши ранки игроков в массив.
30 Янв 2018
Я просто не понимаю, чему нет связи в сортировке и выдаче? Ведь сортирует нормально
Нормально. Но зачем это делать в цикле "сколько там в команде человек" раз, если эту же операцию можно сделать ЕДИНАЖДЫ за циклом? Экономим на всем.
 

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

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