Участник
Пользователь
- Сообщения
- 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.4 KB Просмотры: 23
Последнее редактирование модератором: