PDA

Просмотр полной версии : [Вопрос] Выход из предела (vehicle foreach)



scory
21.12.2015, 05:09
Не могу понять что с кодом не так
На сервер даже 900 транспорт не создается
A тут выход из предела

new Iterator:Vehicle<MAX_VEHICLES>;

stock foreach_wr_CreateVehicle(modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay)
{
new veh = CreateVehicle(modelid, x, y, z, angle, color1, color2, respawn_delay);
Itter_Add(Vehicle, veh);
return veh;
}
#if defined _ALS_CreateVehicle
#undef CreateVehicle
#else
#define _ALS_CreateVehicle
#endif
#define CreateVehicle(%0) foreach_wr_CreateVehicle(%0)

stock foreach_wr_AddStaticVehicleEx(modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay)
{
new veh = AddStaticVehicleEx(modelid, x, y, z, angle, color1, color2, respawn_delay);
Itter_Add(Vehicle, veh);
return veh;
}
#if defined _ALS_AddStaticVehicleEx
#undef AddStaticVehicleEx
#else
#define _ALS_AddStaticVehicleEx
#endif
#define AddStaticVehicleEx(%0) foreach_wr_AddStaticVehicleEx(%0)

stock foreach_wr_AddStaticVehicle(modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2)
{
new veh = AddStaticVehicle(modelid, x, y, z, angle, color1, color2);
Itter_Add(Vehicle, veh);
return veh;
}
#if defined _ALS_AddStaticVehicle
#undef AddStaticVehicle
#else
#define _ALS_AddStaticVehicle
#endif
#define AddStaticVehicle(%0) foreach_wr_AddStaticVehicle(%0)

stock foreach_wr_DestroyVehicle(veh)
{
Itter_Remove(Vehicle, veh);
return DestroyVehicle(veh);
}
#if defined _ALS_DestroyVehicle
#undef DestroyVehicle
#else
#define _ALS_DestroyVehicle
#endif
#define DestroyVehicle(%0) foreach_wr_DestroyVehicle(%0)

[19:37:40] [debug] Run time error 4: "Array index out of bounds"
[19:37:40] [debug] Accessing element at index 2001 past array upper bound 2000
[19:37:40] [debug] AMX backtrace:
[19:37:40] [debug] #0 001a0448 in public cmd_spveh
[19:37:40] [debug] #1 native DC_CMD () [f7769b50] from dc_cmd.so

CMD:spveh(playerid,params[])
{
if(sscanf(params,"d",params[0])) return SendClientMessage(playerid,COLOR_WHITE," Введите: /spveh [радиус]");
new Float:car_x,Float:car_y,Float:car_z;
foreach(new i:Vehicle)
{
if(GetVehicleModel(i) == 0)
continue;
GetVehiclePos(i,car_x,car_y,car_z);
if(IsPlayerInRangeOfPoint(playerid,params[0],car_x,car_y,car_z))
SetVehicleToRespawn(i);
}
return true;
}

VVWVV
21.12.2015, 09:01
А где команда aspawncars?

scory
21.12.2015, 13:43
А где команда aspawncars?
Всё

L0ndl3m
21.12.2015, 17:03
Всё
Что значит "всё" ?
Если вы решили данную проблему, то будьте добры выложите и решение.

$continue$
21.12.2015, 18:41
Что значит "всё" ?
Если вы решили данную проблему, то будьте добры выложите и решение.

Под все - я подразумеваю, что команда: "spveh" была добавлена в #1 пост.

L0ndl3m
21.12.2015, 18:53
Под все - я подразумеваю, что команда: "spveh" была добавлена в #1 пост.
ТС добавил эту команду при создании темы.

VVWVV
21.12.2015, 18:58
ТС исправил наименование команды в логе сервера, а также исправил саму ошибку.
Очень много вопросов к коде: зачем вы проверяете машину на существование, если вы создаёте её сами, с помощью foreach (он за вас делает всю грязную работу). По поводу ошибки: на данном форуме уже есть тема с решением (Как бороться с выходами за пределы массива (CrashDetect) (http://pro-pawn.ru/showthread.php?12957-%D0%9A%D0%B0%D0%BA-%D0%B1%D0%BE%D1%80%D0%BE%D1%82%D1%8C%D1%81%D1%8F-%D1%81-%D0%B2%D1%8B%D1%85%D0%BE%D0%B4%D0%B0%D0%BC%D0%B8-%D0%B7%D0%B0-%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%8B-%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0-%28CrashDetect%29)).

scory
21.12.2015, 20:43
Что значит "всё" ?
Исправил название команды в логе.


Если вы решили данную проблему, то будьте добры выложите и решение.
когда решу - выложу



По поводу ошибки: на данном форуме уже есть тема с решением (Как бороться с выходами за пределы массива (CrashDetect) (http://pro-pawn.ru/showthread.php?12957-%D0%9A%D0%B0%D0%BA-%D0%B1%D0%BE%D1%80%D0%BE%D1%82%D1%8C%D1%81%D1%8F-%D1%81-%D0%B2%D1%8B%D1%85%D0%BE%D0%B4%D0%B0%D0%BC%D0%B8-%D0%B7%D0%B0-%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%8B-%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0-%28CrashDetect%29)).
Не вижу где тут выход из предела
Иначе сам бы исправил


На сервер даже 900 транспорт не создается

Daniel_Cortez
21.12.2015, 21:45
Я так понимаю, вы взяли за основу код, который я выкладывал больше года назад (http://pro-pawn.ru/showthread.php?7824&p=32070&viewfull=1#post32070).
Ок, завтра посмотрю, что с ним может быть не так, а заодно и выложу в виде инклуда, чтобы не нужно было вшивать его в мод.

scory
22.12.2015, 19:44
Ок, завтра посмотрю, что с ним может быть не так, а заодно и выложу в виде инклуда, чтобы не нужно было вшивать его в мод.

Cпасибо, ожидаю.

scory
23.12.2015, 19:23
Поднимаю

scory
23.12.2015, 20:57
Ок, завтра посмотрю, что с ним может быть не так, а заодно и выложу в виде инклуда, чтобы не нужно было вшивать его в мод.
когда примерно инклуд выложите?

Daniel_Cortez
24.12.2015, 19:12
когда примерно инклуд выложите?
http://pro-pawn.ru/showthread.php?13061-dc_foreach_veh

scory
28.12.2015, 22:36
Ничего не изменилось, тот же ошибки, на сервер при пик онлайна где-то 600 автомобиль создан был, выхода из предела нет, ставил вариант от Caypen ошибок нет

vovandolg
29.12.2015, 02:30
Ничего не изменилось, тот же ошибки, на сервер при пик онлайна где-то 600 автомобиль создан был, выхода из предела нет, ставил вариант от Caypen ошибок нет
Какая ошибка если не секрет?

Daniel_Cortez
30.12.2015, 00:25
Ничего не изменилось, тот же ошибки, на сервер при пик онлайна где-то 600 автомобиль создан был, выхода из предела нет, ставил вариант от Caypen ошибок нет
Скорее всего, вы где-то подменяете значение MAX_VEHICLES, причём делаете это до подключения моего инклуда.
Ищите у себя в моде такой код:


#undef MAX_VEHICLES
#define MAX_VEHICLES 600

или такой:


#undef MAX_VEHICLES
const MAX_VEHICLES = 600;



Ещё более "экзотические" варианты:


#if defined MAX_VEHICLES
#undef MAX_VEHICLES
#endif
#define MAX_VEHICLES 600



#undef MAX_VEHICLES
enum {MAX_VEHICLES = 600};

scory
31.12.2015, 01:34
Только после подключение инклуда:

#undef MAX_VEHICLES
#define MAX_VEHICLES 1000

Daniel_Cortez
31.12.2015, 13:05
Инклуды foreach и dc_foreach_veh подключаются в моде самыми первыми после a_samp? Или вы, возможно, создаёте/удаляете транспорт через фильтрскрипты?

scory
31.12.2015, 20:25
Инклуды foreach и dc_foreach_veh подключаются в моде самыми первыми после a_samp?
Да

возможно, создаёте/удаляете транспорт через фильтрскрипты?
FS не подключен

Daniel_Cortez
01.01.2016, 01:19
Протестировал вашу команду на своём моде, никакого краша нет. Боюсь, без вашего мода воспроизвести баг не получится.

scory
01.01.2016, 21:11
Крашится именно при SetVehicleToRespawn, и то не всегда, за весь день 1-3 краш