CreateEntityByName("prop_ragdoll"); и AcceptEntityInput(ent, "Kill");

Banana

Участник
Сообщения
892
Реакции
113
C-подобный:
int tempRag = CreateEntityByName("prop_ragdoll");
            decl String:sModelName[PLATFORM_MAX_PATH];
            GetClientModel(client, sModelName, sizeof(sModelName));
            DispatchKeyValue(tempRag, "model", sModelName);
            DispatchSpawn(tempRag);

            SetEntProp(tempRag, Prop_Data, "m_nSolidType", 1); //6
            SetEntProp(tempRag, Prop_Data, "m_CollisionGroup", 2);
               
            TeleportEntity(tempRag, vecPos, NULL_VECTOR, NULL_VECTOR);
i_Ragdoll[client] = EntIndexToEntRef(tempRag);

Создаю труп на карте. Заметил необъяснимы баг с крашем сервера - когда игрок выходит с сервера я удаляю его "труп" который создал в момент смерти через CreateEntityByName("prop_ragdoll"); через функцию -
AcceptEntityInput(ent, "Kill");, предварительно проверяя через EntRefToEntIndex что удаляю то что нужно.

Иногда сервер падает без сообщений в логи. Акселератор сообщает об краше на функции "linux-gate.so!__kernel_vsyscall + 0x9".

Сегодня тестировали карту в мапером и он ошибся в процессе создания карты - при нажатии на кнопку открытия дверей получалось так что кнопка вызывала сама себя (образовалась рекурсия) - и сервер упал с 100% такой-же ошибкой как и при использовании AcceptEntityInput(ent, "Kill"); для удаления CreateEntityByName("prop_ragdoll"); ...

Получается AcceptEntityInput(ent, "Kill"); может сделать некую рекурсию и сервер падает... (догадка), замечу что RemoveEntity(ent); - проблему не решает (краши тоже..).
Может кто знает в чем может быть причина этого бага?
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Если сделать AcceptEntityInput (или иные способы) на нулевой ент (0), то ты убьешь сам сервер, потому что 0 - это сервер, то-есть перед удаление обязательно проверяем. Как я помню, то в ксго спавн prop_ragdoll вызвет краш сервера
 
Сверху Снизу