Crystallize
Я не спорю. Я же говорю - вы герою рот не затыкайте, пожалуйста, потому что он - очень важная персона. И если он говорит о крокодилах, то это есть очень важно для обороны страны.
~ X ~ писал: Но, как я подозреваю, в реальности не всё так мило, правда?
Есть долгоживущие дамаги, которые коцают, даже когда игрок уже покинул зону триггера.
Предположим у игрока 5 хп, он заходит в зону с повышенной радиоактивностью. Потом выходит его еще коцает какое-то время, пока он не откинет конькикоробочку.
Цитата:
mittorn писал: Как известно, если что-то мелкое запустить с большой скоростью в стенку - оно пролетит сквозь неё.
SV_PushEntity видишь? Это гарантия того, что не пролетит, кроме совсем уж пограничных случаев.
Сквозь триггеры - там да, пролетает со свистом, поскольку триггеры устроены на манер современных физ.двигов - сперва подвинуть тело, а потом уже разобраться куда попал. В принципе можно переписать триггеры таким образом, чтобы они корректно хэндлили быстрые тела, но для этого как минимум понадобится кастомная физика из ксаша. На чистой халфе не сделаешь. Ну и соображалку надо включать, а не орать на каждом углу про хаки.
Цитата:
~ X ~ писал: Всё равно мне не понятно, почему для неподвижных вепонбоксов не вызывается точ триггера.
Потому что триггер_тач вызывается при вызове SV_LinkEdict (ну или имплиситно - через UTIL_SetOrigin), а когда предмет стоит в покое, ему UTIL_SetOrigin не вызывается, а сама концепция ни кваки ни халфы не подразумевает двигающихся триггеров.
thambs писал: Предположим у игрока 5 хп, он заходит в зону с повышенной радиоактивностью.
Я не об этом. Это ТБД в коде игрока.
Про СетОригин() я догадываюсь. Вот только принудительно вызывать его каждый кадр для баночек (коих бывают сотни на карте) почему-то не хочется. Хотя, современные процы - что их жалеть?
Так почему же не убрать квантование по полсекунды в триггере? Я не о том, что это должно включить колоизацию, а о том, что туда хотя бы всё будет попадать хоть раз.
XaeroX у тебя от чего-то бугурт? Ты вроде вообще убегал из треда
~ X ~ писал: а о том, что туда хотя бы всё будет попадать хоть раз.
Сделаю предположение. Картина такая: коробка попала в trigger_butthurt, волшебный момент упущен, дамаги она не получает. Так почему бы не заставить её тчинкать и проверять (каждые 5 секунд, например), в триггере она, или нет, когда неподвижна? Если в триггере, да ещё и наносящем урон, то наносить ей урон из её же кода. Или это снова грязный хак?
Веапонбокс в обычной халфе наследуется прямо от CBaseEntity, так что тчинкать вполне себе может. Не знаю, как в XDM, я эту часть сорцев не смотрел.
Дядя Миша, во всяком случае при скорости 2000 и более PushMove пробивает стены. Это трейс так работает или баг какой? Как работают и как "исправить" тригеры я и так знаю.
Добавлено 10-11-2016 в 07:53:
~X~, поменяй TOSS на Bounce и запили псевдофизику в стиле того, что у меня в ветке gravgun. Тогда коробочка какое-то время будет ещё прыгать в триггере, трогая его. Думаю, этого хватит почти всегда.
Дядя Миша писал: Это же итем и у него солид_триггер.
Ну-ну. Повыставляй итемам солид_триггер.
Цитата:
Дядя Миша писал: Да ты растолкуй пошто этим баночкам вообще вызывать сеторигин?
Толкую:
- игрок дохнет у стенки... или даже просто так (но не от взрыва)
- из него вылетает банка, банка хотя бы частично внутри игрока
- банка меееееееееееедленно движется вниз
- игрок респаунится
- банка как двигалась, так и движется - ей всё равно
- банка движется сквозь пол
- банка движется в бесконечность
Цитата:
Ku2zoff писал: Сделаю предположение. Картина такая: коробка попала в trigger_butthurt, волшебный момент упущен, дамаги она не получает. Так почему бы не заставить её тчинкать и проверять (каждые 5 секунд, например), в триггере она, или нет, когда неподвижна? Если в триггере, да ещё и наносящем урон, то наносить ей урон из её же кода. Или это снова грязный хак?
В ХЛСДК это точно было бы нельзя ибо ты представь себе, что почти у всех энтить кастомный Think(). У меня есть CheckEnvironment(), только расскажи мне про слова "Если в триггере". Нибось, перебором всех энтить будешь проверять?
Цитата:
mittorn писал: Дядя Миша, во всяком случае при скорости 2000 и более PushMove пробивает стены.
Ох, лолки! Так это crossbow_bolt и lightp в зоне риска...
Цитата:
mittorn писал: Тогда коробочка какое-то время будет ещё прыгать в триггере, трогая его.
Это не совсем решение проблемы. Проблема подробно описана здесь чуть выше ^
~ X ~ писал: Нибось, перебором всех энтить будешь проверять?
Трейсы в пяти направлениях из центра коробки с игнором самой коробки. Если хоть один из них попадает в SOLID_TRIGGER, то вызываем FindEntityInSphere в радиусе по длине трейса. Ну и ищем по класснейму. Тут уж точно не все энтити надо перебирать.
Эта теория такая. На практике ХЗ, сработает ли.
Добавлено 10-11-2016 в 13:57:
Цитата:
~ X ~ писал: - банка меееееееееееедленно движется вниз
- игрок респаунится
- банка как двигалась, так и движется - ей всё равно
- банка движется сквозь пол
- банка движется в бесконечность
Так этот баг довольно часто появляется в хл при убийстве монстров рядом со стенкой. Таки да, дело в движке. Разве что в момент спауна оружия насильно выталкивать его из стены.
Ku2zoff писал: Трейсы в пяти направлениях из центра коробки с игнором самой коробки. Если хоть один из них попадает в SOLID_TRIGGER, то вызываем FindEntityInSphere в радиусе по длине трейса. Ну и ищем по класснейму. Тут уж точно не все энтити надо перебирать.
Эта теория такая. На практике ХЗ, сработает ли.
1. пять трейсов - это уже охрененно медленно
2. трейс не определяет SOLID_TRIGGER, только contents
3. угадай, что делает FindEntityInSphere()? подскажу: перебор всех энтить и отсев по дистанции.
4. много ты триггеров будешь по класснеймам искать? а если юзер свой триггер новый создаст?
Видишь как всё непросто.
Что полезного я могу сделать с коробками - это при POINT_CONTENTS(origin) == CONTENTS_SOLID вызывать Killed(angrybeaver, gman, GIB_SOMETIMES); но... это будет очень скоро, либо, если пол тонкий, проваливаться сквозь пол.
На то она и теория, чтобы её или подтвердить или опровергнуть.
Цитата:
~ X ~ писал: либо, если пол тонкий
Насколько тонкий? < 4 юнитов?
Добавлено 10-11-2016 в 14:14:
Цитата:
~ X ~ писал: при POINT_CONTENTS(origin) == CONTENTS_SOLID вызывать Killed
А если попробовать выталкивать банку из стены, типа как работает PM_CheckStuck для игрока? Опять же, трейсить надо. Но всё-таки наверное лучше, чем уничтожать её.
~ X ~ писал: пять трейсов - это уже охрененно медленно
Я вам как-нибудь покажу свой движок-рейкастер для халфовских уровней. Там для разрешения 640х480 выполняется 307200 трейсов каждый кадр. И это без учёта переотражений. Но тем не менее, на современных компах вполне себе выжимает играбельный фпс, а не слайдшоу.