gameme balancer

Сообщения
52
Реакции
60
Помог
2 раз(а)
Всем привет, пытался написать балансер на основ статистики gameme, по логике я все сделал правильно (но это не точно), но на практике ничего не работает, помогите разобраться пожалуйста

Код:
// Спасибо neugomon за плагин [ReAPI] Lite TeamBalancer, за основу был взят его плагин
//
//

#include <amxmodx>
#include <reapi>
#include <gameme>

#define SCORE_DIFF    2        // Разница в счете между командами (Вкл. аланс по скиллу, если одна команда перееигрывает другую на n раундов)
#define DEBUG                // логирование перемещений

new g_mPlayers[MAX_PLAYERS + 1];

public plugin_init()
{
#define VERSION "gameme"
    register_plugin("[ReAPI] Lite TeamBalancer", VERSION, "neugomon");

    RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound_Pre", false);
}

public QueryGameMEStatsCallback(command, payload, client, &DataPack:datapack) {
    if (client && (command == RAW_MESSAGE_CALLBACK_PLAYER)) {
        ResetPack(datapack);
        SetPackPosition(datapack, 18);
        g_mPlayers[client] = ReadPackCell(datapack);
        DestroyDataPack(datapack);
    }
    return PLUGIN_HANDLED;
}

public CSGameRules_RestartRound_Pre()
{
    for(new iClient = 1; iClient <= MaxClients; iClient++) {
        if(!is_user_connected(iClient)) continue;
        QueryGameMEStats("playerinfo", iClient, "QueryGameMEStatsCallback", QUERY_TYPE_OTHER);
    }
    
    new players[MAX_PLAYERS], pnum;
    new iTTWins = get_member_game(m_iNumTerroristWins), iCTWins = get_member_game(m_iNumCTWins);

    if (abs(iTTWins - iCTWins) >= SCORE_DIFF)
    {
        new pEnt1, pEnt2;
        get_players(players, pnum);
        for(new i, TeamName:iTeam, TeamName:iLeader = (iTTWins > iCTWins) ? TEAM_TERRORIST : TEAM_CT, iStats, iCache[2]; i < pnum; i++)
        {           
            switch((iTeam = get_member(players[i], m_iTeam)))
            {
                case TEAM_TERRORIST, TEAM_CT:
                {
                    iStats = g_mPlayers[players[i]];
                    if(iTeam == iLeader)
                    {
                        if(iStats > iCache[0])
                        {
                            pEnt1 = players[i];
                            iCache[0] = iStats;
                        }
                    }   
                    else if(iCache[1] > iStats)
                    {
                        pEnt2 = players[i];
                        iCache[1] = iStats;
                    }
                }
            }
        }
        if(pEnt1 && pEnt2)
        {   
            rg_switch_team(pEnt1);
            rg_switch_team(pEnt2);
            #if defined DEBUG
            new szName1[MAX_NAME_LENGTH], szName2[MAX_NAME_LENGTH];
            get_entvar(pEnt1, var_netname, szName1, charsmax(szName1));
            get_entvar(pEnt2, var_netname, szName2, charsmax(szName2));
            log_amx("Игрок % [%d] заменен на %s [%d]", szName1, g_mPlayers[pEnt1], szName2, g_mPlayers[pEnt2]);
            #endif
        }
    }
}
 

Вложения

Последнее редактирование модератором:
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
Что конкретно не работает?
 
Сообщения
52
Реакции
60
Помог
2 раз(а)
Minni, нет перемещений игроков, логи дебаг из плагина пусты
5 Авг 2018
перенесите в раздел, https://dev-cs.ru/forums/90/
готов оплатить потраченное время!
 
Сообщения
2,840
Реакции
1,666
Помог
75 раз(а)
ex3m777, перенести нельзя, так как тема для раздела покупки оформлена неверно.
 
Сообщения
2,722
Реакции
2,997
Помог
60 раз(а)
ex3m777,
1. Где этот #include <gameme> и где его API представлено?
 
Сообщения
2,722
Реакции
2,997
Помог
60 раз(а)
ex3m777, логируй ВСЁ, что получаешь от этого API. Это важный момент, данное API вообще ниразу не гарантия
 

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

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