create_entity checks

Сообщения
219
Реакции
42
After creating an entity, is needed to check if was succesfully created?

For example, using pev_valid
Код:
new ent = create_entity("info_target")
if (!pev_valid(ent)) return;

// do many things with new entity
When can create_entity native fails?
Can this happen sometimes or rarely?

Any other alternative? Other native or what do when this happens
 
Сообщения
75
Реакции
36
Помог
4 раз(а)
Пример: превышен лимит сущностей в текущий момент на карте, объект не создаст и вернет NULL
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
CSBishop, разве краша не будет в случае превышения лимит эдиктов?
 
Сообщения
75
Реакции
36
Помог
4 раз(а)
Nordic Warrior, нет, он просто не создастся.

Как раз таки как в примере выше тебя от краша и спасет проверка на валидность. Ибо если её не будет и в переменную вернет NULLENT, дальше допустим попытаешься засетить какой-то пев, в итоге сетишь не валидной сущности и ловишь краш
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
Ибо если её не будет и в переменную вернет NULLENT, дальше допустим попытаешься засетить какой-то пев, в итоге сетишь не валидной сущности и ловишь краш
Код:
new const sClass[] = "CRASH";
set_pev(FM_NULLENT, pev_classname, sClass, charsmax(sClass));
Итог: [FAKEMETA] Invalid Entity
Лог еррор. Без падения.

Не так всё просто. Вызвать краш можно цепочкой событий, где зависнет управление или будет попытка происходить абсурдным вещам, которые не понравятся движку.
2 Июл 2022
Да и чисто в теории такое превышение лимита случается очень крайне редко, поэтому после создания энтити каждый раз делать проверку - глупость. Пустая трата триллионов наносекунд ЦП.
 

d3m37r4

111111
Сообщения
1,454
Реакции
1,194
Помог
10 раз(а)
bizon, удалить невалидную энтити попробуй разными способами.
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
превышен лимит сущностей
@CSBishop, разве краша не будет в случае превышения лимит эдиктов?
@Nordic Warrior, нет, он просто не создастся.
1656834506335.png
1) https://github.com/alliedmodders/am...2882d7049ce1f6/modules/engine/entity.cpp#L112
2) https://github.com/dreamstalker/reh...f3ff15d1110b07/rehlds/engine/pr_cmds.cpp#L904
3) https://github.com/dreamstalker/reh...5a4924a3cef271/rehlds/engine/pr_edict.cpp#L67
Как раз таки как в примере выше тебя от краша и спасет проверка на валидность.
не спасает?

4) https://github.com/dreamstalker/reh...4328f49f64bb39/rehlds/engine/sys_dll.cpp#L492

Google: crash no free edicts "hlds"
превышение лимита случается очень крайне редко
не редко?
 
Последнее редактирование:
Сообщения
75
Реакции
36
Помог
4 раз(а)
SergeyShorokhov, почему-то всегда думал что наоборот, а оказывается сразу краш. Был не прав, но если верить нативам (engine/fakemeta/reapi) что в переменную может попасть 0, тогда проверка pEntity > 0 имеет право быть.
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
если смотреть в масштабе - не редко. Если писать код по нормальному - никогда до конца не известно о масштабах проекта, а так же введённых в конфигурации ограничениях.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу