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,225
Помог
44 раз(а)
Что конкретно не работает?
 
Сообщения
52
Реакции
60
Помог
2 раз(а)
Minni, нет перемещений игроков, логи дебаг из плагина пусты
5 Авг 2018
перенесите в раздел, https://dev-cs.ru/forums/90/
готов оплатить потраченное время!
 
Сообщения
3,010
Реакции
1,730
Помог
79 раз(а)
ex3m777, перенести нельзя, так как тема для раздела покупки оформлена неверно.
 
Сообщения
2,750
Реакции
3,013
Помог
61 раз(а)
ex3m777,
1. Где этот #include <gameme> и где его API представлено?
 
Сообщения
2,750
Реакции
3,013
Помог
61 раз(а)
ex3m777, логируй ВСЁ, что получаешь от этого API. Это важный момент, данное API вообще ниразу не гарантия
 

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

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