Заказать Сервер Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Ошибка плагина (Странная ошибка)
Ошибка плагина
OwIq Дата: Четверг, 13.06.2019, 17:35:46 | Сообщение # 1
Сообщений: 14
Репутация: 0 [ +/- ]
Не могу понять что тут не так, в начале раунда должно выбрать игроков и перевести в команду КТ.
ругается на строку int player_i = GetArrayCell(g_eList, r_int);

[SM] Exception reported: Invalid index 0 (count: 0)
[SM] Call stack trace:
[SM] [0] GetArrayCell
[SM] [1] Line 37, D:\Компилятор\плагин.sp::event_RoundStart

Код
Handle g_eList;

public void OnPluginStart()
{
g_eList = CreateArray(128);
HookEvent("round_start", event_RoundStart);
}

public Action event_RoundStart(Event event,const char[] name, bool dontBroadcast)
{
ClearArray(g_eList);
for(int i=1; i<=MaxClients; i++) {
if(IsClientInGame(i) && !IsFakeClient(i) && GetClientTeam(i) != 1) {
CS_SwitchTeam(i, 3);
PushArrayCell(g_eList, i);
}
}

int i_plist = GetArraySize(g_eList);
int i_max = 0;
if(i_plist < 7) {
m_max = 1;
}
else if(i_plist < 12) {
m_max = 2;
}
else if(i_plist < 24) {
m_max = 3;
}
else {
m_max = 4;
}

int i_count = 0;
while(i_count < i_max) {
int r_int = GetRandomInt(0, i_plist-1);
int player_i = GetArrayCell(g_eList, r_int);
RemoveFromArray(g_eList, r_int);
CS_SwitchTeam(player_i, 2);
i_count++;
}
}


Сообщение отредактировал OwIq - Четверг, 13.06.2019, 17:39:15
 
_wS_ Дата: Четверг, 13.06.2019, 19:57:38 | Сообщение # 2
Ну логика. Ты сделал
if (i_plist < 7) { m_max = 1; }
А ниже цикл
int i_count = 0;
while(i_count < i_max)
но i_plist то может быть 0.
 
OwIq Дата: Пятница, 14.06.2019, 12:52:48 | Сообщение # 3
Сообщений: 14
Репутация: 0 [ +/- ]
Не совсем понял, можешь исправить?)
 
TEIN Дата: Суббота, 15.06.2019, 09:16:38 | Сообщение # 4
Сообщений: 568
Репутация: 78 [ +/- ]
добавь проверку, что i_plist больше 0 после получения размера массива

Добавлено (15.06.2019, 09:18:22)
---------------------------------------------
и еще
int r_int = GetRandomInt(0, i_plist-1); -> int r_int = GetRandomInt(0, i_plist-1-i_count);

Добавлено (15.06.2019, 09:27:42)
---------------------------------------------
еще GetClientTeam(i) != 1 -> GetClientTeam(i) > 1

 
OwIq Дата: Воскресенье, 16.06.2019, 13:17:06 | Сообщение # 5
Сообщений: 14
Репутация: 0 [ +/- ]
Не помогло ;(
 
TEIN Дата: Воскресенье, 16.06.2019, 19:53:58 | Сообщение # 6
Сообщений: 568
Репутация: 78 [ +/- ]
код?
 
OwIq Дата: Воскресенье, 16.06.2019, 22:12:32 | Сообщение # 7
Сообщений: 14
Репутация: 0 [ +/- ]
Я сделал по другому, так работает и нет ошибок, но я не уверен что он правильный)))

Проверял чтоб выбирало 8 игроков, переменная m_max
так же на сервере было больше 8 игроков))))

Прикрепления: random.sp(0.9 Kb)


Сообщение отредактировал OwIq - Воскресенье, 16.06.2019, 22:14:04
 
TEIN Дата: Воскресенье, 16.06.2019, 23:03:00 | Сообщение # 8
Сообщений: 568
Репутация: 78 [ +/- ]
в целом, странное решение, при этом если игроков будет 0, то ошибка будет на 33 строке и чтобы удалить из массива, используй RemoveFromArray
 
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Ошибка плагина (Странная ошибка)
  • Страница 1 из 1
  • 1
Поиск: