Всем привет! Расскажу в кратце что произошло. Поставил плагин автобаланса от DUKKHAZ0R. Сначала работал очень хорошо. Потом начали появляться надписи в консоли
Цитата
SZ_GetSpace: overflow on future murderer
SZ_GetSpace: overflow on 555-555-555
SZ_GetSpace: overflow on da
SZ_GetSpace: overflow on Sponge BoB
SZ_GetSpace: overflow on Den4ik)
SZ_GetSpace: overflow on doroga v ray
SZ_GetSpace: overflow on future murderer
SZ_GetSpace: overflow on 555-555-555
SZ_GetSpace: overflow on da
После появления этих надписей сервер зависал. Приходилось в ручную перезапускать сервер. Допустим я утром ушел на работу, прихожу вечером с работы и узнаю, что сервер был целый день выключен. В начале я не знал, что проблема именно в этом плагине. Начал искать решение проблемы в интернете. И нашел решение именно на этом сайте. В одной из тем администратор
iLLuSioN написал, что в каком то из плагинов присутствует надпись
MSG_ONE. Именно в этом плагине я нашел эту надпись. Отключил после этого плагин и все встало на свои места. Аналогов этому плагину я не видел. Как можно исправить эту проблему в этом плагине? Попробовал плагин от неугомона, но он то балансирует то вообще по неизвестным причинам баланс перестает работать. Сейчас стоит плагин Ptahhotep's Team Balancer 1.8b3. Но так как там много лишней не нужной инфы, то меня он не устраивает. Вот кстати сам плагин
Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#define MAX_FLUX 4 //Максимальное кол-во разницы в очках команд, после чего будет совершен баланс по силам.
#define REPLACE_INTERVAL 2 //Интервал между балансировкой команд по силам.
#define RESET_INTERVAL 5 //Интервал между обнулением иммунитета от переброса у перенесенных.
#define ADMIN_FLAG ADMIN_BAN //Необходимый флаг для получения иммунитета от автобаланса [0 - Выключить].
enum _:TEAMS {TT, CT};
new apPlayers[32], iPlayers, i, bool:g_bWasReplaced[33], bool:g_bImmunity[33], bool:g_bNeedReplace[33], g_iFrags[33], g_iDeaths[33], g_iRoundCount, g_iScore[TEAMS];
public plugin_init()
{
register_plugin("Team Balancer Lite", "1.0", "DUKKHAZ0R");
RegisterHam(Ham_Spawn, "player", "fw_HamPlayerSpawn_Pre");
register_logevent("LogEventRoundEnd", 2, "1=Round_End");
register_event("DeathMsg", "eDeathMsg", "a", "1>0");
register_event("TeamScore", "eTeamScore", "a");
register_event("HLTV", "eRoundStart", "a", "1=0", "2=0");
}
public eRoundStart()
{
if(g_iRoundCount++ >= RESET_INTERVAL)
{
arrayset(g_bWasReplaced, false, 33);
g_iRoundCount = 0;
}
}
#if ADMIN_FLAG != 0
public client_putinserver(id)
g_bImmunity[id] = (get_user_flags(id) & ADMIN_FLAG) ? true : false;
#endif
public client_disconnect(id)
{
g_bNeedReplace[id] = g_bWasReplaced[id] = false;
g_iFrags[id] = g_iDeaths[id] = 0;
}
public eDeathMsg()
{
g_iFrags[read_data(1)]++;
g_iDeaths[read_data(2)]++;
}
public eTeamScore()
{
static Team[32]; read_data(1, Team, charsmax(Team));
switch(Team[0])
{
case 'T': g_iScore[TT] = read_data(2);
case 'C': g_iScore[CT] = read_data(2);
}
}
public fw_HamPlayerSpawn_Pre(id)
{
if(g_bNeedReplace[id])
{
fm_set_user_team(id, 3 - get_pdata_int(id, 114));
g_bNeedReplace[id] = false;
g_bWasReplaced[id] = true;
}
}
public LogEventRoundEnd()
{
static iNumTt, iNumCt, iTeam, iReplaceCount; get_players_in_team(iNumTt, iNumCt);
if(iReplaceCount++ >= REPLACE_INTERVAL && abs(g_iScore[TT] - g_iScore[CT]) >= MAX_FLUX)
{
static iDistance, pBestPlayer, pLooser, iBestPlayerFrags, iLooserFrags, iLeaderTeam, szLooserName[32], szBestPlayerName[32];
iLeaderTeam = (g_iScore[TT] > g_iScore[CT]) ? 1 : 2;
pBestPlayer = pLooser = iBestPlayerFrags = iLooserFrags = 0;
get_players(apPlayers, iPlayers, "ch");
for(i = 0; i < iPlayers; i++)
{
iTeam = get_pdata_int(apPlayers[i], 114);
iDistance = g_iFrags[apPlayers[i]] - g_iDeaths[apPlayers[i]];
if(g_bWasReplaced[apPlayers[i]] || g_bImmunity[apPlayers[i]]) continue;
if(iTeam == iLeaderTeam && iDistance > iBestPlayerFrags)
{
pBestPlayer = apPlayers[i];
iBestPlayerFrags = iDistance;
}
else if(iTeam == (3 - iLeaderTeam) && iDistance < iLooserFrags)
{
pLooser = apPlayers[i];
iLooserFrags = iDistance;
}
}
if(pBestPlayer && pLooser)
{
iReplaceCount = 0;
g_bNeedReplace[pBestPlayer] = g_bNeedReplace[pLooser] = true;
get_user_name(pLooser, szLooserName, charsmax(szLooserName));
get_user_name(pBestPlayer, szBestPlayerName, charsmax(szBestPlayerName));
ChatColor("^1[^4Lite TeamBalancer^1] Сильного ^3%s ^1заменили на слабого ^3%s^1!", szBestPlayerName, szLooserName);
}
}
while(abs(iNumTt - iNumCt) > 1)
{
static pTarget, szTargetName[32], iTargetTeam; iTargetTeam = (iNumTt > iNumCt) ? 1 : 2;
get_players(apPlayers, iPlayers, "ch");
for(i = 0; i < iPlayers; i++)
{
iTeam = get_pdata_int(apPlayers[i], 114);
if(!g_bWasReplaced[apPlayers[i]] && !g_bImmunity[apPlayers[i]] && !g_bNeedReplace[apPlayers[i]] && iTargetTeam == iTeam)
{
iTeam == 1 ? iNumCt++ : iNumTt++; iTeam == 1 ? iNumTt-- : iNumCt--;
pTarget = apPlayers[i];
break;
}
}
g_bNeedReplace[pTarget] = true;
get_user_name(pTarget, szTargetName, charsmax(szTargetName));
ChatColor("^1[^4Lite TeamBalancer^1] Игрок ^3%s ^1перенесен за %s", szTargetName, iTeam == 1 ? "контр-террористов." : "террористов.");
}
}
stock get_players_in_team(&iNumTt, &iNumCt)
{
#if AMXX_VERSION_NUM < 182
iNumTt = iNumCt = 0;
get_players(apPlayers, iPlayers, "h");
for(i = 0; i < iPlayers; i++)
{
switch(get_pdata_int(apPlayers[i], 114))
{
case 1: iNumTt++;
case 2: iNumCt++;
}
}
#else
get_players(apPlayers, iNumTt, "e", "TERRORIST");
get_players(apPlayers, iNumCt, "e", "CT");
#endif
}
stock ChatColor(const input[], any:...)
{
static szMsg[191]; vformat(szMsg, charsmax(szMsg), input, 2);
get_players(apPlayers, iPlayers, "ch");
for(new i; i < iPlayers; i++)
{
message_begin(MSG_ONE_UNRELIABLE, 76, _, apPlayers[i]);
write_byte(apPlayers[i]);
write_string(szMsg);
message_end();
}
}
stock fm_set_user_team(const id, const iTeam)
{
set_pdata_int(id, 114, iTeam, 5);
dllfunc(DLLFunc_ClientUserInfoChanged, id, engfunc(EngFunc_GetInfoKeyBuffer, id));
static MsgId_TeamInfo; if(!MsgId_TeamInfo) MsgId_TeamInfo = get_user_msgid("TeamInfo");
message_begin(MSG_ALL, MsgId_TeamInfo);
write_byte(id);
write_string(iTeam == 1 ? "TERRORIST" : "CT");
message_end();
| i |
| Уведомление: Неверный раздел, тщательно выбирайте раздел для новых тем, перевёл. + Для оформления кода используйте тег PAWN или CODE SPOILER  |
Отредактировал: iShot, - 8.8.2016, 8:58
Причина: Выдано устное предупреждение!