Ошибка плагина
|
|
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 |
|
Сообщений: 563
Репутация: 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 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
код?
|
|
| |
OwIq
|
Дата: Воскресенье, 16.06.2019, 22:12:32 | Сообщение # 7 |
|
Сообщений: 14
Репутация: 0 [ +/- ]
|
|
Я сделал по другому, так работает и нет ошибок, но я не уверен что он правильный)))
Проверял чтоб выбирало 8 игроков, переменная m_max так же на сервере было больше 8 игроков))))
Гости не могут скачивать файлы
|
Сообщение отредактировал OwIq - Воскресенье, 16.06.2019, 22:14:04 |
|
| |
TEIN
|
Дата: Воскресенье, 16.06.2019, 23:03:00 | Сообщение # 8 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
в целом, странное решение, при этом если игроков будет 0, то ошибка будет на 33 строке и чтобы удалить из массива, используй RemoveFromArray
|
|
| |