Смещение мира для энтити

  • Автор темы Автор темы CH3L74
  • Дата начала Дата начала

CH3L74

Заблокированный
Сообщения
21
Реакции
7
Баллы
3
Обратите внимание, что если вы хотите заключить сделку с этим пользователем, он заблокирован.
Столкнулся с проблемой на одной карте. Весь мир будто продублирован со сдвигом на несколько юнитов. Визуально этого не видно, но MOVETYPE_BOUNCE энтити тачится с этой невидимой копией и иногда в ней застревает. Уже проверял границы энтити, его размер корректен. Куда копать?
 
Столкнулся с проблемой на одной карте. Весь мир будто продублирован со сдвигом на несколько юнитов. Визуально этого не видно, но MOVETYPE_BOUNCE энтити тачится с этой невидимой копией и иногда в ней застревает. Уже проверял границы энтити, его размер корректен. Куда копать?
Сталкивался с таким, когда в bspguy worldspawn origin сместил случайно. Тоже визуально не видно было, но при броске гранат они попадали в невидимые препятствия (по факту это были стены/ящики и т.д., которые сместились случайно вместе с worldspawn)
 
Последнее редактирование:
Обратите внимание, что если вы хотите заключить сделку с этим пользователем, он заблокирован.
Сталкивался с таким, когда в bspguy worldspawn origin сместил случайно. Тоже визуально не видно было, но при броске гранат они попадали в невидимые препятствия (по факту это были стены/ящики и т.д., которые сместились случайно вместе с worldspawn)
Попробовал подвигать worldspawn, не мой случай. Сдвигаются только всякие энтити карты, по типу func_wall. У меня же BSP модель продублирована будто.

Стой, куда ты? Ну ты и соня! Как тебя зовут? 😁
 
Советую копнуть в клиптайп, или в хуллы.
Смею предположить что скомпилена карта с -nohull2 или определенным клиптайпом, каким именно сказать не могу
 
Обратите внимание, что если вы хотите заключить сделку с этим пользователем, он заблокирован.
Немного поковырялся и появилось предположение, что в коде разрабатываемого мной мода может таиться ошибка. Может быть, я где-то миру задаю что-то случайно. Может ли это вызвать такое смещение?

Советую копнуть в клиптайп, или в хуллы.
Смею предположить что скомпилена карта с -nohull2 или определенным клиптайпом, каким именно сказать не могу
А это для меня тёмный лес пока что. И карту не я делал, поэтому тут не могу сказать. Просто хочется выяснить, что фиксить перед тем, как фиксить.
 
Попробуй сравнить свой плагин на другой карте, если бага нет, то сама карта неправильно скомпилена.
 
Последнее редактирование:
Конечно, изменив позицию worldspawn (или другой энтити на карте), визуально ничего не поменяется, но вот коллизия (трейс) с этой энтити будет смещена.
 
Обратите внимание, что если вы хотите заключить сделку с этим пользователем, он заблокирован.
В общем, удалось кое-что накопать. Видимо, проблема в кастомном энтити, а не в карте. Протестил на другой карте, та же проблема. После чего, начал экспериментировать с порядком операций при создании энтити.

Если сначала выставлять модель, а потом размеры энтити - появляется баг. Если сначала выставлять размеры, а потом модель - размеры перестают учитываться. Энтити проваливается сквозь пол и видимо опирается на единственную кость, находящуюся в центре, но нигде не застревает. Что с этим делать, пока не очень понятно.
 
Обратите внимание, что если вы хотите заключить сделку с этим пользователем, он заблокирован.
Кода создания кастомной энтити конечно же не будет?
 
Обратите внимание, что если вы хотите заключить сделку с этим пользователем, он заблокирован.
Кода создания кастомной энтити конечно же не будет?
Там ничего особенного:
Код:
pEntity = rg_create_entity("info_target")

set_entvar(pEntity, var_classname, g_szClassName)
set_entvar(pEntity, var_solid, SOLID_TRIGGER)
set_entvar(pEntity, var_movetype, MOVETYPE_BOUNCE)

engfunc(EngFunc_SetModel, pEntity, g_szModel)
engfunc(EngFunc_SetSize, pEntity, Float:{ -6.0, -6.0, -6.0 }, Float:{ 6.0, 6.0, 6.0 })
engfunc(EngFunc_SetOrigin, pEntity, fOrigin)

SetTouch(pEntity, "Entity_Touch")
SetThink(pEntity, "Entity_Think")

set_entvar(pEntity, var_nextthink, get_gametime() + ENTITY_THINK)

Экзотическое сочетание SOLID_TRIGGER + MOVETYPE_BOUNCE ни при чём. Уже пробовал менять на SOLID_BBOX, баг остаётся.
 
Там ничего особенного:
Код:
pEntity = rg_create_entity("info_target")

set_entvar(pEntity, var_classname, g_szClassName)
set_entvar(pEntity, var_solid, SOLID_TRIGGER)
set_entvar(pEntity, var_movetype, MOVETYPE_BOUNCE)

engfunc(EngFunc_SetModel, pEntity, g_szModel)
engfunc(EngFunc_SetSize, pEntity, Float:{ -6.0, -6.0, -6.0 }, Float:{ 6.0, 6.0, 6.0 })
engfunc(EngFunc_SetOrigin, pEntity, fOrigin)

SetTouch(pEntity, "Entity_Touch")
SetThink(pEntity, "Entity_Think")

set_entvar(pEntity, var_nextthink, get_gametime() + ENTITY_THINK)

Экзотическое сочетание SOLID_TRIGGER + MOVETYPE_BOUNCE ни при чём. Уже пробовал менять на SOLID_BBOX, баг остаётся.
у тебя здесь rg_create_entity может возвращать 0 в случае, если энтити не удалось создать, при этом никакой валидации этого у тебя нет. Возможно поэтому бывает кейс, когда ты буквально делаешь engfunc(EngFunc_SetOrigin, 0, fOrigin)
 
@Xelson, насколько часто такое бывает?) Лично у меня — ни разу
я не знаю на сколько часто это бывает, но сам факт настораживает. Помимо happy path необходимо обрабатывать и ошибочные ветвления кода. А учитывая, что тут set origin есть, беспокойство довольно большое
 
Обратите внимание, что если вы хотите заключить сделку с этим пользователем, он заблокирован.
у тебя здесь rg_create_entity может возвращать 0 в случае, если энтити не удалось создать, при этом никакой валидации этого у тебя нет. Возможно поэтому бывает кейс, когда ты буквально делаешь engfunc(EngFunc_SetOrigin, 0, fOrigin)
Этот энтити создаётся только один раз за карту, поэтому сам факт его существования уже исключает то, что там 0 может быть.

По коду в дальнейшем нигде не может засетаться вордспавну ориджин. Другие плагины отключал, тоже дело не в них.

Могу кому-то, кого знаю, полный код скинуть в телегу. Может быть, ускорит процесс.
 
Последнее редактирование:
Без полного исходника плагина или минимального POC смысла искать нету.
 
@CH3L74 Скинул исходник, проблема совсем не с коллизией а точнее реализация динамической коллизии в кастомном Touch/Think хуке у этой энтити со стороны плагина "дает баги".
 
Обратите внимание, что если вы хотите заключить сделку с этим пользователем, он заблокирован.
А кто отметил проблему как решённую? Убрал отметку, так как ещё нет чёткого понимания, какая именно часть кода вызвала баг. В публичной форумной теме главная задача ведь не указать на баг конкретно мне, а предоставить вариант для решения проблемы тому, кто тоже в будущем столкнётся с подобным.
 
Последнее редактирование:

Кто просматривает тему

Назад
Верх