HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Наши проекты (https://hlfx.ru/forum/forumdisplay.php?forumid=1)
-- Немного о будущем XDM3038 (https://hlfx.ru/forum/showthread.php?threadid=4641)
Отправлено mittorn 09-11-2016 в 15:38:
~ X ~ это не единственное использование MOVETYPE_BOUNCEMISSILE
И используй тег cpp
Отправлено XaeroX 09-11-2016 в 15:41:
Цитата:
mittorn писал:
это не единственное использование MOVETYPE_BOUNCEMISSILE
Не мешай Мастеру излагать мудрость!
Мы наслаждаемся.__________________
Отправлено Crystallize 09-11-2016 в 16:10:
XaeroX ты что он же Очень Опытный Программист
Отправлено XaeroX 09-11-2016 в 16:15:
Crystallize
Я не спорю. Я же говорю - вы герою рот не затыкайте, пожалуйста, потому что он - очень важная персона. И если он говорит о крокодилах, то это есть очень важно для обороны страны.
__________________
Отправлено Дядя Миша 09-11-2016 в 18:32:
Цитата:
~ X ~ писал:
Но, как я подозреваю, в реальности не всё так мило, правда?
Есть долгоживущие дамаги, которые коцают, даже когда игрок уже покинул зону триггера.
Предположим у игрока 5 хп, он заходит в зону с повышенной радиоактивностью. Потом выходит его еще коцает какое-то время, пока он не откинет конькикоробочку.
Цитата:
mittorn писал:
Как известно, если что-то мелкое запустить с большой скоростью в стенку - оно пролетит сквозь неё.
SV_PushEntity видишь? Это гарантия того, что не пролетит, кроме совсем уж пограничных случаев.
Сквозь триггеры - там да, пролетает со свистом, поскольку триггеры устроены на манер современных физ.двигов - сперва подвинуть тело, а потом уже разобраться куда попал. В принципе можно переписать триггеры таким образом, чтобы они корректно хэндлили быстрые тела, но для этого как минимум понадобится кастомная физика из ксаша. На чистой халфе не сделаешь. Ну и соображалку надо включать, а не орать на каждом углу про хаки.
Цитата:
~ X ~ писал:
Всё равно мне не понятно, почему для неподвижных вепонбоксов не вызывается точ триггера.
Потому что триггер_тач вызывается при вызове SV_LinkEdict (ну или имплиситно - через UTIL_SetOrigin), а когда предмет стоит в покое, ему UTIL_SetOrigin не вызывается, а сама концепция ни кваки ни халфы не подразумевает двигающихся триггеров.
C++ Source Code:
1 | void SV_Physics_Toss( edict_t *ent ) |
11 | if( !SV_RunThink( ent )) return; |
13 | ground = ent->v.groundentity; |
15 | if( ent->v.velocity[2] > 0.0f || !SV_IsValidEdict( ground ) || ground->v.flags & (FL_MONSTER|FL_CLIENT) || svgame.globals->changelevel ) |
17 | ent->v.flags &= ~FL_ONGROUND; |
20 | // if on ground and not moving, return. |
21 | if( ent->v.flags & FL_ONGROUND && VectorIsNull( ent->v.velocity )) |
23 | VectorClear( ent->v.avelocity ); |
25 | if( VectorIsNull( ent->v.basevelocity )) |
вот на этом ретарне для неподвижных коробочек всё и кончается.
Добавлено 09-11-2016 в 21:29:
Цитата:
Crystallize писал:
ты что он же Очень Опытный Программист
Дать бы тебе плюс за тавтологию, но у нас нет такого наказания.
Цитата:
XaeroX писал:
Не мешай Мастеру излагать мудрость!
Дело в том, что в 2000-м году я ходил на анекдот.ру, а теперь мне уже не нужно.
Добавлено 09-11-2016 в 21:32:
ЗОГбавно, щас в ксаш-мод заглянул - я там давно уже такие триггеры сделал, но вроде как немного не доделал, оставил на потом.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено thambs 09-11-2016 в 18:54:
>уже такие триггеры сделал
Т.е. одноюнитные триггеры будут корректно работать даже в мультиплаере? Гуд.
__________________
http://www.moddb.com/mods/monorail-quest
Отправлено ~ X ~ 09-11-2016 в 21:31:
Цитата:
thambs писал:
Предположим у игрока 5 хп, он заходит в зону с повышенной радиоактивностью.
Я не об этом. Это ТБД в коде игрока.
Про СетОригин() я догадываюсь. Вот только принудительно вызывать его каждый кадр для баночек (коих бывают сотни на карте) почему-то не хочется. Хотя, современные процы - что их жалеть?
Так почему же не убрать квантование по полсекунды в триггере? Я не о том, что это должно включить колоизацию, а о том, что туда хотя бы всё будет попадать хоть раз.
XaeroX у тебя от чего-то бугурт? Ты вроде вообще убегал из треда 
ХОБОСТИ:
YAY! XDM почти компилится под ARM! 
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Дядя Миша 09-11-2016 в 21:45:
Цитата:
~ X ~ писал:
Вот только принудительно вызывать его каждый кадр для баночек (коих бывают сотни на карте) почему-то не хочется.
Да ты растолкуй пошто этим баночкам вообще вызывать сеторигин?
Это же итем и у него солид_триггер.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 10-11-2016 в 02:37:
Цитата:
~ X ~ писал:
а о том, что туда хотя бы всё будет попадать хоть раз.
Сделаю предположение. Картина такая: коробка попала в trigger_butthurt, волшебный момент упущен, дамаги она не получает. Так почему бы не заставить её тчинкать и проверять (каждые 5 секунд, например), в триггере она, или нет, когда неподвижна? Если в триггере, да ещё и наносящем урон, то наносить ей урон из её же кода. Или это снова грязный хак?
Веапонбокс в обычной халфе наследуется прямо от CBaseEntity, так что тчинкать вполне себе может. Не знаю, как в XDM, я эту часть сорцев не смотрел.
Отправлено mittorn 10-11-2016 в 04:53:
Дядя Миша, во всяком случае при скорости 2000 и более PushMove пробивает стены. Это трейс так работает или баг какой? Как работают и как "исправить" тригеры я и так знаю.
Добавлено 10-11-2016 в 07:53:
~X~, поменяй TOSS на Bounce и запили псевдофизику в стиле того, что у меня в ветке gravgun. Тогда коробочка какое-то время будет ещё прыгать в триггере, трогая его. Думаю, этого хватит почти всегда.
Отправлено ~ X ~ 10-11-2016 в 06:27:
Цитата:
Дядя Миша писал:
Это же итем и у него солид_триггер.
Ну-ну. Повыставляй итемам солид_триггер.
Цитата:
Дядя Миша писал:
Да ты растолкуй пошто этим баночкам вообще вызывать сеторигин?
Толкую:
- игрок дохнет у стенки... или даже просто так (но не от взрыва)
- из него вылетает банка, банка хотя бы частично внутри игрока
- банка меееееееееееедленно движется вниз
- игрок респаунится
- банка как двигалась, так и движется - ей всё равно
- банка движется сквозь пол
- банка движется в бесконечность
Цитата:
Ku2zoff писал:
Сделаю предположение. Картина такая: коробка попала в trigger_butthurt, волшебный момент упущен, дамаги она не получает. Так почему бы не заставить её тчинкать и проверять (каждые 5 секунд, например), в триггере она, или нет, когда неподвижна? Если в триггере, да ещё и наносящем урон, то наносить ей урон из её же кода. Или это снова грязный хак?
В ХЛСДК это точно было бы нельзя ибо ты представь себе, что почти у всех энтить кастомный Think(). У меня есть CheckEnvironment(), только расскажи мне про слова "Если в триггере". Нибось, перебором всех энтить будешь проверять?
Цитата:
mittorn писал:
Дядя Миша, во всяком случае при скорости 2000 и более PushMove пробивает стены.
Ох, лолки! Так это crossbow_bolt и lightp в зоне риска...
Цитата:
mittorn писал:
Тогда коробочка какое-то время будет ещё прыгать в триггере, трогая его.
Это не совсем решение проблемы. Проблема подробно описана здесь чуть выше ^__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Ku2zoff 10-11-2016 в 06:57:
Цитата:
~ X ~ писал:
Нибось, перебором всех энтить будешь проверять?
Трейсы в пяти направлениях из центра коробки с игнором самой коробки. Если хоть один из них попадает в SOLID_TRIGGER, то вызываем FindEntityInSphere в радиусе по длине трейса. Ну и ищем по класснейму. Тут уж точно не все энтити надо перебирать.
Эта теория такая. На практике ХЗ, сработает ли.
Добавлено 10-11-2016 в 13:57:
Цитата:
~ X ~ писал:
- банка меееееееееееедленно движется вниз
- игрок респаунится
- банка как двигалась, так и движется - ей всё равно
- банка движется сквозь пол
- банка движется в бесконечность
Так этот баг довольно часто появляется в хл при убийстве монстров рядом со стенкой. Таки да, дело в движке. Разве что в момент спауна оружия насильно выталкивать его из стены.
Отправлено ~ X ~ 10-11-2016 в 07:04:
Цитата:
Ku2zoff писал:
Трейсы в пяти направлениях из центра коробки с игнором самой коробки. Если хоть один из них попадает в SOLID_TRIGGER, то вызываем FindEntityInSphere в радиусе по длине трейса. Ну и ищем по класснейму. Тут уж точно не все энтити надо перебирать.
Эта теория такая. На практике ХЗ, сработает ли.

1. пять трейсов - это уже охрененно медленно
2. трейс не определяет SOLID_TRIGGER, только contents
3. угадай, что делает FindEntityInSphere()? подскажу: перебор всех энтить и отсев по дистанции.
4. много ты триггеров будешь по класснеймам искать? а если юзер свой триггер новый создаст?
Видишь как всё непросто.
Что полезного я могу сделать с коробками - это при POINT_CONTENTS(origin) == CONTENTS_SOLID вызывать Killed(angrybeaver, gman, GIB_SOMETIMES); но... это будет очень скоро, либо, если пол тонкий, проваливаться сквозь пол.__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Ku2zoff 10-11-2016 в 07:14:
Цитата:
~ X ~ писал:
Видишь как всё непросто.
На то она и теория, чтобы её или подтвердить или опровергнуть.
Цитата:
~ X ~ писал:
либо, если пол тонкий
Насколько тонкий? < 4 юнитов?
Добавлено 10-11-2016 в 14:14:
Цитата:
~ X ~ писал:
при POINT_CONTENTS(origin) == CONTENTS_SOLID вызывать Killed
А если попробовать выталкивать банку из стены, типа как работает PM_CheckStuck для игрока? Опять же, трейсить надо. Но всё-таки наверное лучше, чем уничтожать её.
Отправлено XaeroX 10-11-2016 в 07:35:
Цитата:
~ X ~ писал:
пять трейсов - это уже охрененно медленно
Я вам как-нибудь покажу свой движок-рейкастер для халфовских уровней. Там для разрешения 640х480 выполняется 307200 трейсов каждый кадр. И это без учёта переотражений. Но тем не менее, на современных компах вполне себе выжимает играбельный фпс, а не слайдшоу.__________________