When to check if entity is valid?

Сообщения
219
Реакции
42
This thread is to talk about when is a must to check if entity is valid.

For example, I see on many plugins that check if entity is valid inside:
  • Fakemeta hooks like FM_ShouldCollide.
  • Hamsandwich hooks like Ham_Item_AddToPlayer.
  • Engine hooks like register_touch.

Is this check necessary?
I'm trying to achieve remove unnecessary calls to pev_valid or similars like is_nullent introduced on ReAPI.

I'm talking about this:
Код:
register_forward(FM_ShouldCollide, "fw_ShouldCollide");

public fw_ShouldCollide(playerindex, entindex) {
    if( !pev_valid(playerindex) || !pev_valid(entindex) )
        return FMRES_IGNORED;
    
    // continue code....
}
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
raulitop, entity can be removed and you get invalid entity in next function inside frame.
 
Сообщения
219
Реакции
42
raulitop, entity can be removed and you get invalid entity in next function inside frame.
Well, that doesn't quite answer the question.
That could be a reason to check if you have some plugins interacting, like this dude: https://forums.alliedmods.net/showthread.php?t=302217
So basically every single time that ent touches me, it gets destroyed, then it triggers the FM_Touch in my other plugin and causes invalid entity errors for pev().

I remember to read one comment from @PRoSToTeM@ (don't know his name here) saying on hamsandwich hooks, the entity is already verifyed to be valid.
Now I only found this comment: https://forums.alliedmods.net/showthread.php?p=2535131#post2535131
if(pev_valid(iWeapon) >= 2) is not need here.
 
Сообщения
201
Реакции
20
Помог
5 раз(а)
In some cases I've seen they tend to skip the call to native, they just check to see if it returns null.

Код:
if( !playerindex || !entindex )
        return FMRES_IGNORED;
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
Вы занимаетесь слишком усердной оптимизацией.
Добавляйте проверку is_nullent в описанных вами событиях, чтобы быть уверенным в том, что работа каких-то плагинов не приведёт к падению сервера.
Нагрузки вы не увидите из-за этой функции.
17 Мар 2024
mlibre, некоторые null возвращают -1. Так что логичнее проверять < 0. Хотя тоже сомнительно это.
17 Мар 2024
И, в конце концов, используйте уже ReAPI.
 
Сообщения
219
Реакции
42
Вы занимаетесь слишком усердной оптимизацией.
Добавляйте проверку is_nullent в описанных вами событиях, чтобы быть уверенным в том, что работа каких-то плагинов не приведёт к падению сервера.
This thread is not about optimization, it's about doing things correctly.

For example, on my tests I checked Hamsandwich hooks call always valid entities.
So, we can avoid the valid entity check here, is redundant.

But I have the doubt about Fakemeta and Engine hooks.
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
mlibre, yes, but if you remove_entity (not FL_KILLME) in pre and do something in post it's was error.
 

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

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