Получить топ игроков.

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
850
Реакции
144
Помог
25 раз(а)
Всем привет ребят, пытаюсь получить топ игрока по значению массива (массив сделал чисто для теста). Выставляю значения массива ботам 4, а людям 3. Но дело в том, что оно не корректно работает, сделал в чат сообщение debug_top (если человек в топе), иначе, выводим сообщение debug_not_top. По сути, мне должно вывести debug_not_top, так как значение массива у меня меньше, чем у бота, но мне всё-равно, почему-то выводит debug_top.
Код:
#include <AmxModX>
#include <AmxMisc>
#include <ReApi>
//#include <GameCms5>

new const szInfo[][] = {
    "[GameCMS] Addon: Bonus For Top10 Time",
    "0.1",
    "Immortal-"
};

const TASKID_BONUS = 123456;

enum _:ePlayerData {
    PLAYER_ID,
    TIME
};

new g_ArrayData[MAX_PLAYERS + 1][ePlayerData];
new g_iPlayerTime[MAX_PLAYERS + 1];

#define IsPlayer(%1)    (1 <= %1 <= get_member_game(m_nMaxPlayers))

public client_putinserver(iPlayer) {
    //g_iPlayerTime[iPlayer] = cmsapi_get_user_gametime(iPlayer);
    
    if(is_user_bot(iPlayer)) {
        g_iPlayerTime[iPlayer] = 4;
    }
    else {
        g_iPlayerTime[iPlayer] = 3;
    }

    set_task(15.0, "Task_Give_Bonuse", iPlayer + TASKID_BONUS);
}

public plugin_init() {
    register_plugin(szInfo[0], szInfo[1], szInfo[2]);
}

public Task_Give_Bonuse(iPlayer) {
    iPlayer -= TASKID_BONUS;

    if(!is_user_connected(iPlayer))
        return;

    new iBestPlayerId, iBestPlayerTime;

    for(new i = 1; i <= MaxClients; i++) {
        g_ArrayData[i][PLAYER_ID] = iPlayer;
        g_ArrayData[i][TIME] = _:g_iPlayerTime[iPlayer];   
    }
    
    SortCustom2D(g_ArrayData, sizeof(g_ArrayData), "SortPlayerTime");

    iBestPlayerId = g_ArrayData[0][PLAYER_ID];
    iBestPlayerTime = g_ArrayData[0][TIME];   

    if(IsPlayer(iBestPlayerId) && iBestPlayerTime >= 1) {
        client_print(0, print_chat, "debug_top");
    }
    else {
        client_print(0, print_chat, "debug_not_top");
    }   
}

public SortPlayerTime(const elem1[], const elem2[])
    return(elem1[TIME] < elem2[TIME]) ? 1 : (elem1[TIME] > elem2[TIME]) ? -1 : 0;
Помогите, пожалуйста, понять, что я не так делаю?
 

iPlague

♿️
Сообщения
230
Реакции
129
Помог
2 раз(а)
new massiv[33], best_i, worst_i;

Код:
...

best_i = massiv[1], worst_i = massiv[1];
for(new i=1;i<33;i++){
if(massiv[i] > best_i) best_i = massiv[i];
if(massiv[i] < worst_i) worst_i = massiv[i];
}
14 Окт 2021
ну или вместо if
best_i = max(massive[i], best_i)
 
Последнее редактирование:
Сообщения
850
Реакции
144
Помог
25 раз(а)
new massiv[33], best_i, worst_i;

Код:
...

best_i = massiv[1], worst_i = massiv[1];
for(new i=1;i<33;i++){
if(massiv[i] > best_i) best_i = massiv[i];
if(massiv[i] < worst_i) worst_i = massiv[i];
}
14 Окт 2021
ну или вместо if
best_i = max(massive[I], best_i)
Помог, спасибо. И ещё такой вопрос, возможно ли получить не топ1, а топ10 игроков?
 

iPlague

♿️
Сообщения
230
Реакции
129
Помог
2 раз(а)
Benzogang_BabyTape, можно, если написать соответствующий цикл.
Но проще всего из БД получать топ, там есть функция для сортировки.
 
Статус
В этой теме нельзя размещать новые ответы.

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

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