[ZP] Best Players

[ZP] Best Players 1.0.2

Нет прав для скачивания
Сообщения
1,042
Реакции
206
Предупреждения
1
Помог
6 раз(а)
Сообщения
91
Реакции
141
Помог
1 раз(а)
Думал кто то из знающих уже укажет на твою главную ошибку, но так как ответов нет, сам скажу

Код:
#define PlayersInGame (get_member_game(m_iNumTerrorist) + get_member_game(m_iNumCT))
...

for(new i = 1; i < PlayersInGame; i++){
Задумка с циклом по игрокам интересная, жаль что это так не будет работать. Вот у тебя 10 игроков на сервере, у тебя будет 10 итераций цикла, с 1 по 10, все окей, затем 1 из игроков вышел с сервера, представим что у него айди 5, теперь у нас 9 игроков и будет 9 итераций цикла, с 1 по 9, но наши 9 игроков имеют такие айди в данный момент:
Код:
1, 2, 3, 4, 6, 7, 8, 9, 10
Думаю проблема ясна, что до игрока с айди 10 цикл не дойдет.
Выход из ситуации - сделать цикл с помощью get_players или по кол-ву слотов.

Это конечно круто что ты решил возродить мой старый плагин, но можно было лучше это все сделать, а не просто перенеся все на reapi.
 
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
t3rkecorejz, он по другому не умеет)))
 
Сообщения
1,042
Реакции
206
Предупреждения
1
Помог
6 раз(а)
t3rkecorejz, даже если проверять через is_user_connected через continue все равно будет косяк?
 
Сообщения
3,582
Реакции
1,570
Помог
137 раз(а)
BiZaJe, вроде он доходчиво объяснил что и как будет происходить.
 
Сообщения
1,042
Реакции
206
Предупреждения
1
Помог
6 раз(а)
Nordic Warrior, Я просто уточнил инфу про пропуск итерации
 
Сообщения
91
Реакции
141
Помог
1 раз(а)
BiZaJe, а что изменилось? Принцип такой же. Если ты используешь get_players, то цикл по игрокам ты уже делаешь с помощью массива полученного из get_players.
То есть твой код должен быть таким +-

Код:
    new iPlayers[MAX_CLIENTS], pCount;
    get_players(iPlayers, pCount, "ch");

    if(pCount <= 0){
        return;
    }

    for(new i = 0, pPlayer; i < pCount; i++){
        pPlayer = iPlayers[i];

        if(!is_user_connected(pPlayer)){
            continue;
        }
       
        if(g_iPlayer[INFECT][pPlayer] > g_iData[TYPE][INFECT]){
            g_iData[TYPE][INFECT] = g_iPlayer[INFECT][pPlayer];
            g_iData[BEST_PLAYER][INFECT] = pPlayer;
        }

        if(g_iPlayer[KILL][pPlayer] > g_iData[TYPE][KILL]){
            g_iData[TYPE][KILL] = g_iPlayer[KILL][pPlayer];
            g_iData[BEST_PLAYER][KILL] = pPlayer;
        }

        if(g_iPlayer[DAMAGE][pPlayer] > g_iData[TYPE][DAMAGE]){
            g_iData[TYPE][DAMAGE] = g_iPlayer[DAMAGE][pPlayer];
            g_iData[BEST_PLAYER][DAMAGE] = pPlayer;
        }

        g_iPlayer[INFECT][pPlayer] = 0;
        g_iPlayer[KILL][pPlayer] = 0;
        g_iPlayer[DAMAGE][pPlayer] = 0;
    }
А еще проверка на pCount не нужна, потому что нижний код не сработает. А если pCount равен нулю, то твой цикл даже и не отработает.
Ты тестил хотя бы, перед тем, как выложить, потому что проблема которая была ранее - остается
 
Сообщения
1,042
Реакции
206
Предупреждения
1
Помог
6 раз(а)
t3rkecorejz, а зачем мне отрабатывать код если pCount будет иметь сумму индексов 0?
может только в этот моменте косяк
pPlayer = iPlayers[i];
 
Сообщения
91
Реакции
141
Помог
1 раз(а)
а зачем мне отрабатывать код если pCount будет иметь сумму индексов 0?
ну окей, он тебе не нужен, но сам факт того, что в след раунде твоя переменная g_iData не будет нулевой, а в ней уже могут быть данные. Тогда выход такой
Код:
    if(pCount <= 0){
        g_iData[TYPE] = { 0, 0, 0 };
        g_iData[BONUS] = { 0, 0, 0 };
        g_iData[BEST_PLAYER] = { 0, 0, 0 };

        return;
    }
 
Сообщения
1,042
Реакции
206
Предупреждения
1
Помог
6 раз(а)
t3rkecorejz, понял теперь в чем мой косяк
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
BiZaJe, в самом нативе уже существует впроверка на коннект игрока
Код:
get_players(iPlayers, pCount, "ch");
-
if(!is_user_connected(iPlayer))
   ontinue;
 
Сообщения
1,042
Реакции
206
Предупреждения
1
Помог
6 раз(а)
Code_0xABC, if (pPlayer->ingame || ((flags & 256) && pPlayer->initialized))
А разве эта проверка не уходит после вызова client_disconnected?
Т.е проверку на дисконнект все равно мне кажется делать надо т.к даже после дисконнекта id еще остается
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
BiZaJe, ты с помощью натива получаешь индексы игроков, потом через цикл ты подстовляешь каждое id,которое ты уже прроверил на коннект
 

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

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