ElectricStalin
Участник
- Сообщения
- 24
- Реакции
- 0
Добрый день.
Столкнулся с багом, который никак не удается исправить. В моем плагине игровая сессия состоит из 2 раундов. Первый-разминочный, продолжается до момента, как подключатся все игроки. Второй основной - обычный 6 минутный ДМ раунд.
В процессе игры есть возможность подбирать и использовать неограниченное количество оружия. Все оно хранится в массиве clientsWeapon[client][]. Мне посоветовали хранить не индексы оружия, а ссылки на индексы.
В процессе разминочного раунда все работает, как часы. Но после старта основного раунда все ломается из-за того, что в массиве на месте ненулевых элементов появляются индексы -1. Здесь я обнуляю массив:
начинаю основной раунд командой mp_restartgame 1
Пример:
Содержание массива на конец разминочного раунда clientsWeapon[1] = {0, -123123, -321321,0,...,0}
Содержание массива на начало основного раунда clientsWeapon[1] = {0, -1, -1, 0,...,0} (здесь не совсем содержание массива, в логи выводил EntRefToEntIndex уже. То есть в массиве такие ссылки, которые ведут на индексы -1).
Плагин очень объемный, весь код нет смысла сюда выкладывать. Если, чтобы разобраться, нужны еще какие-то части, выложу.
PS Вчера пытался исправить в течение 4 часов, отключил весь доп функционал, результат нулевой. Очень надеюсь на вашу помощь.
Столкнулся с багом, который никак не удается исправить. В моем плагине игровая сессия состоит из 2 раундов. Первый-разминочный, продолжается до момента, как подключатся все игроки. Второй основной - обычный 6 минутный ДМ раунд.
В процессе игры есть возможность подбирать и использовать неограниченное количество оружия. Все оно хранится в массиве clientsWeapon[client][]. Мне посоветовали хранить не индексы оружия, а ссылки на индексы.
В процессе разминочного раунда все работает, как часы. Но после старта основного раунда все ломается из-за того, что в массиве на месте ненулевых элементов появляются индексы -1. Здесь я обнуляю массив:
C-подобный:
public OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
int j=1;
if (g_iGameState == STATE_MATCH)
{
CreateTimer(362.0, EndGame, _, TIMER_FLAG_NO_MAPCHANGE);
}
for(int client=1;client<GetMaxClients();client++)
{
while(clientsWeapon[client][j]!=0)
{
RemoveEdict(EntRefToEntIndex(clientsWeapon[client][j]));
weaponAmmo[client][j]=0;
clientsWeapon[client][j]=0;
j++;
}
weaponInHand[client]=0;
}
SpawnWeapons();
}
Пример:
Содержание массива на конец разминочного раунда clientsWeapon[1] = {0, -123123, -321321,0,...,0}
Содержание массива на начало основного раунда clientsWeapon[1] = {0, -1, -1, 0,...,0} (здесь не совсем содержание массива, в логи выводил EntRefToEntIndex уже. То есть в массиве такие ссылки, которые ведут на индексы -1).
Плагин очень объемный, весь код нет смысла сюда выкладывать. Если, чтобы разобраться, нужны еще какие-то части, выложу.
PS Вчера пытался исправить в течение 4 часов, отключил весь доп функционал, результат нулевой. Очень надеюсь на вашу помощь.
Последнее редактирование: