Наткнулся на краш на довольно простой карте (в аттаче).
Возьмите костюм и обе батарейки.
Крашится в момент деактивации trigger_hurt, причем как в ГС так и на Ксаше.
code:
0xf6ddc53d in SV_TouchLinks (ent=0xf298d350, node=0xf7731418 <sv_areanodes+760> ) at ../engine/server/sv_world.c:514
514 next = l->next;
(gdb) bt
#0 0xf6ddc53d in SV_TouchLinks (ent=0xf298d350, node=0xf7731418 <sv_areanodes+760> ) at ../engine/server/sv_world.c:514
#1 0xf6ddc72a in SV_TouchLinks (ent=0xf298d350, node=0xf77313f0 <sv_areanodes+720> ) at ../engine/server/sv_world.c:579
#2 0xf6ddc72a in SV_TouchLinks (ent=0xf298d350, node=0xf77313c8 <sv_areanodes+680> ) at ../engine/server/sv_world.c:579
#3 0xf6ddc72a in SV_TouchLinks (ent=0xf298d350, node=0xf77313a0 <sv_areanodes+640> ) at ../engine/server/sv_world.c:579
#4 0xf6ddc710 in SV_TouchLinks (ent=0xf298d350, node=0xf7731120 <sv_areanodes> ) at ../engine/server/sv_world.c:581
#5 0xf6ddca5d in SV_LinkEdict (ent=<optimized out>, touch_triggers=<optimized out> ) at ../engine/server/sv_world.c:695
#6 0xf6dd624b in SV_RunCmd (cl=0xbd07102c, ucmd=0xffffbf4c, random_seed=102) at ../engine/server/sv_pmove.c:1116
#7 0xf6dad62d in SV_ParseClientMove ([email protected]=0xbd07102c, [email protected]=0xf750437c <net_message> ) at ../engine/server/sv_client.c:3229
#8 0xf6daf7ae in SV_ExecuteClientMessage (cl=0xbd07102c, msg=0xf750437c <net_message> ) at ../engine/server/sv_client.c:3489
#9 0xf6dc7b2d in SV_ReadPackets () at ../engine/server/sv_main.c:432
#10 0xf6dc8090 in Host_ServerFrame () at ../engine/server/sv_main.c:645
#11 0xf6d471e7 in Host_Frame (time=0.0166647565) at ../engine/common/host.c:709
#12 0xf6d48755 in Host_RunFrame (time=0.0166647565) at ../engine/common/host_state.c:144
#13 0xf6d488e4 in COM_Frame (time=0.0166647565) at ../engine/common/host_state.c:194
#14 0xf6d4806a in Host_Main (argc=<optimized out>, argv=0xffffcf44, progname=<optimized out>, bChangeGame=<optimized out>, func=0x565564b0 <Sys_ChangeGame(char const*)> )
at ../engine/common/host.c:1249
#15 0x5655626c in Sys_Start () at ../game_launch/game.cpp:166
#16 main (argc=2, argv=0xffffcf44) at ../game_launch/game.cpp:179
(gdb) print l
$1 = (link_t *) 0x0
Как лечить больную карту?
Вложение: testcrash.zip (38.0 кб)
Этот файл был скачан 21 раз.
FreeSlave , Интересно как. тестил на нонстим HL 1.1.1.0 - у меня крашнулось на подборе второй батарейки. При том, краш повязан каким-то образом на game_counter. А может и нет. Заменил вторую батарейку на лонгджамп - краша не было.
Добавлено 07-01-2023 в 19:54:
Пардон, 1.1.1.1 версия была.
на 1.1.1.0 аналогичный краш.
Теоретически force_retouch может приводить к проблемам, т.к. он происходит не на следующем кадре, а прямо из функции Use.
Наверное это не вполне правильно.
Добавлено 07-01-2023 в 22:30:
Там сам механизм дебильный. Вместо того чтобы синхронизировать retouch_state с внутренним состоянием энтити, там предполагается ловить это состояние, если оно не равно нулю. Способ самый дешевый из всех, но иногда приводит к проблемам, да.