Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Автобаланс команды

, Автобаланс команды
loran
сообщение 7.8.2016, 20:31
Сообщение #1
Стаж: 10 лет

Сообщений: 2072
Благодарностей: 801
Полезность: 305

Всем привет! Расскажу в кратце что произошло. Поставил плагин автобаланса от 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
Причина: Выдано устное предупреждение!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя iShot
сообщение 8.8.2016, 9:09
Сообщение #2


Стаж: 11 лет

Сообщений: 1340
Благодарностей: 463
Полезность: 845

Меценат Меценат

loran,
Цитата
SZ_GetSpace: overflow on
много информации передаётся игроку в какой-то момент времени, скорее всего это связано с чатом, худами, спрайтами и другое, тем что грузит канал.


улыбнись :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: