|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
|
Несколько вопросов.TraceHull/TraceLine?
|
|
| LtRAT | Дата: Среда, 10.09.2008, 16:58:48 | Сообщение # 1 |
|
Сержант
Группа: Пользователи
Сообщений: 33
Статус: Не в сети
| 1) Чем отличаются TraceHull от TraceLine? Если можно описание с более-менее детальной работой этих функций (не встречал описаний способных разрешить данный вопрос) 2) Есть ли способ получить напрямую Вертикальное ускорение после прыжка не измененное гравитацией? т.е. (sqrt(2 * 800 * 45.0) = 268.328155) а не 260,328155 и то в следующей фрейме (если через pev_velocity)... да и при ltime!=0.01 у нас будет совершенно другое значение 3) Возможно ли получить значение коэффициента затормаживания игрока при подбегании к пропасти, без эмулирования кода PM_Friction. 4) Есть задача измерить ширину пропасти через которую перепрыгнули, как можно сделать пошустрее? Я вижу два способа: *.1) делать несколько Трэйсов и кучу Чеков (убедится что прыжок между объектами, и определить сами объекты ну итп)) *.2) работать с bsp файлом - определять угол к которому ближе всего стояла модель при прыжке и при приземлении, и уже измерять расстояния между ними. Не мало работы с сортировками, быстрым поиском итп да и всеравно будут нные вопросы с этим Отсюда и вопрос, что будет предпочтительнее, а может есть и другие способы ?) 5) Есть задача сделать ХардКрак одному из плагинов, отсюда вопрос, есть ли программы для изменения amxx файлов непосредственно... Для начала достаточно, но еще не все вопросы вспомнил 
Сообщение отредактировал LtRAT - Среда, 10.09.2008, 17:00:06 |
| |
|
|
| se7h | Дата: Среда, 10.09.2008, 17:44:22 | Сообщение # 2 |
 Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| Quote (LtRAT) 1) Чем отличаются TraceHull от TraceLine? Если можно описание с более-менее детальной работой этих функций (не встречал описаний способных разрешить данный вопрос) ответ
|
| |
|
|
| LtRAT | Дата: Среда, 10.09.2008, 18:22:13 | Сообщение # 3 |
|
Сержант
Группа: Пользователи
Сообщений: 33
Статус: Не в сети
| Спасибо, стали более менее понятны основные различия... Но все же там написанно что идет сфера при проверке, но что задают тогда HULL_POINT, HULL_HUMAN, HULL_LARGE, HULL_HEAD.
Сообщение отредактировал LtRAT - Среда, 10.09.2008, 18:24:03 |
| |
|
|
| se7h | Дата: Среда, 10.09.2008, 22:56:06 | Сообщение # 4 |
 Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| посмотри как используются эти константы в этом плагине а также pawn-функция выборки HULL в зависимости от класса персонажа и его положения для HL1 мода Natural Selection: Code // hullsize-stock directly taken from unstuck stock getHullSize(id) { switch (ns_get_class(id)) { case 1,2,3: return HULL_HEAD case 4,6,7,8: return (entity_get_int(id, EV_INT_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN case 5: return (entity_get_int(id, EV_INT_flags) & FL_DUCKING) ? HULL_HUMAN : HULL_LARGE default: return HULL_LARGE } return HULL_LARGE }
Сообщение отредактировал se7h - Среда, 10.09.2008, 22:57:47 |
| |
|
|
| DaTa | Дата: Среда, 10.09.2008, 23:39:11 | Сообщение # 5 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| 2) sv_gravity0 Учти атрибут, отвечающий за дополнительное трение в кс 4) 1 траслайн вниз каждый постсинк(пост) быстрее всего 5) смотри раздел Полезная информация, юзай поиск
|
| |
|
|
| LtRAT | Дата: Четверг, 11.09.2008, 00:00:56 | Сообщение # 6 |
|
Сержант
Группа: Пользователи
Сообщений: 33
Статус: Не в сети
| 1) ладно, с первым вопросом решили, дальше уже буду тестить и прменять к тому что мне надо 2) sv_gravity 0 как бы не совсем подходит да и у игрока свой коэффициент гравити есть, ее учитывать итп да и в случае с бхопом все не так уж и хорошо выглдяит 3) пожалуй мне вопрос №1 нужен был как раз для небаговой эмуляции PM_Friction, как я понял др способа нет хотя на вопрос еще не отвечали 4) нус 1 трэйслайном не обойтись, как минимум 3, допустим опускаем один в середине прыжка (от уровня ног при прыжке) удостоверяемся что это на блоке, потом делаем примерно оттуда еще 1 до первого блока (с которого прыгали) и оттуда уже третий, перпедикулярный стене, до противоположной стенки... плюс накладываются проблемы не с прямыми а кривыми блоками итп итд, что все надо учитывать... 5) да вот ничего подобного не видел видать придется делать из "дизассемблера" распаковщик, а из компилятора упаковщик, эх 
|
| |
|
|
| slogic | Дата: Четверг, 11.09.2008, 03:48:08 | Сообщение # 7 |
|
Генералиссимус
Группа: Админы
Сообщений: 1941
Статус: Не в сети
| Quote (LtRAT) 4) Есть задача измерить ширину пропасти через которую перепрыгнули, как можно сделать пошустрее? Нк я бы так сделал для примерно горизонтального прыжка. Определил положение самой нижней точки box игрока в начале прыжка (А), и в конце (B). Взял минимальную координату z из этих двух точек, отнял от 1 до 5 единиц, получил z*, нашел середину отрезка в пути прыжка, что дало бы мне координаты x,y. из точки {x,y,z*} я бы сделал два traceline в точки A и B отрезка, с координатами по оси Z равной z*. Сложил и получил длину пропасти.
|
| |
|
|
| LtRAT | Дата: Четверг, 11.09.2008, 09:59:56 | Сообщение # 8 |
|
Сержант
Группа: Пользователи
Сообщений: 33
Статус: Не в сети
| Quote (slogic) Нк я бы так сделал для примерно горизонтального прыжка. Определил положение самой нижней точки box игрока в начале прыжка (А), и в конце (B). Взял минимальную координату z из этих двух точек, отнял от 1 до 5 единиц, получил z*, нашел середину отрезка в пути прыжка, что дало бы мне координаты x,y. из точки {x,y,z*} я бы сделал два traceline в точки A и B отрезка, с координатами по оси Z равной z*. Сложил и получил длину пропасти. Ладно, Трэйслайны так ТрэйсЛайны, с ними все-таки как-то понадежнее, но именно в таком описанном алгоритме, при перепрыгивании пропасти по диагонали получим немножко не тот результат который хотели
|
| |
|
|
| se7h | Дата: Четверг, 11.09.2008, 10:06:40 | Сообщение # 9 |
 Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| о каком плагине идёт речь в пятом вопросе? почему ты думаешь что не достать исходник?
|
| |
|
|
| DaTa | Дата: Четверг, 11.09.2008, 10:42:18 | Сообщение # 10 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| slogic, зачетный способ, запомню
|
| |
|
|
| Argus | Дата: Четверг, 11.09.2008, 11:02:50 | Сообщение # 11 |
 AMXModX Fan
Группа: Cупер-модеры
Сообщений: 379
Статус: Не в сети
| Quote (LtRAT) 5) Есть задача сделать ХардКрак одному из плагинов, отсюда вопрос, есть ли программы для изменения amxx файлов непосредственно... http://amxmodx.ucoz.ru/forum/8-463-1
Правила форума Поиск плагинов Последние сообщения форума
|
| |
|
|
| LtRAT | Дата: Четверг, 11.09.2008, 13:43:57 | Сообщение # 12 |
|
Сержант
Группа: Пользователи
Сообщений: 33
Статус: Не в сети
| 5) плагин весит около 50кб в AMXX файле, те после рваспаковки там еще будет гораздо больше / 2 такой плагин обратно в исходник вручную переводить как "предлагает" Argus - себе дороже А поправить то всего ничего надо, одно из присваиваний переменных в клайнт_коннект, текстовую строку с "say /..." и убрать вызов пары функций... Исходник никогда не выходил в сеть, чел который писал и выдавал бета версии плага, забросил его и теперь до него никак не достучаться  Добавлено (2008-09-11, 1:43 Pm) --------------------------------------------- Да и есть забавный баг движка, может знаете может нет... Лог Origin и Velocity по [2] координате, во время прыжка и после, с нормальной гравитацией = 800 0 | -155,968750 | 0 - прыгнули 1 | -153,325469 | 260,328155 2 | -150,762191 | 252,328155 3 | -148,278915 | 244,328155 как видно каждый раз Velocity изменяется правильно - по 8 юнитов за сек, везде ltime == 0.01 но давайте пересчитаем Origin[2] по данной скорости: 2. = (260.328155*0.01)+(-153,325469)=-150,7221875, а движок же выдал -150,762191 итого разница 0,04000355 3. = (252,328155*0.01)+(-150,762191)=-148,2389095, у движка -148,278915 итого разница в 0,04000655 юнита Возможно будут вещи, где придется делать поправки на этот баг 
|
| |
|
|
| DaTa | Дата: Четверг, 11.09.2008, 21:54:02 | Сообщение # 13 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| не 0.01 а frametime Добавлено (2008-09-11, 9:54 Pm) --------------------------------------------- и учти неточность расчета значений с плавающей точкой а так же особенности компиляции выражений на Visual Studio...
|
| |
|
|
| LtRAT | Дата: Пятница, 12.09.2008, 21:04:38 | Сообщение # 14 |
|
Сержант
Группа: Пользователи
Сообщений: 33
Статус: Не в сети
| Quote (DaTa) и учти неточность расчета значений с плавающей точкой а выкинь последние 3-4 знака, как раз эту неточность (правда не только на floating point) и получишь Константную ошибку движка... Если посмотреть как происходит движение по горизонтали и вертикали каждый фрейм в ХЛСДК, то ее можно вычислить и оттуда... Вообще говоря, это не единственный баг, Если идти по коду движка, то получим что высота прыжка не 45.0 как заложенно, и Velocity[2] слегка другая... нуу хотя смотря что подгонять из-за бага, можно velocity можно gravity.
|
| |
|
|
| DaTa | Дата: Среда, 08.10.2008, 11:56:44 | Сообщение # 15 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| Quote (LtRAT) 3) Возможно ли получить значение коэффициента затормаживания игрока при подбегании к пропасти, без эмулирования кода PM_Friction. мы уже выяснили это в аське, но может кто-то еще копает в сторону high jump hlsdk\multiplayer\pm_shared\pm_shared.c void PM_Friction (void) Code //... // apply ground friction if (pmove->onground != -1) // On an entity that is the ground { vec3_t start, stop; pmtrace_t trace;
start[0] = stop[0] = pmove->origin[0] + vel[0]/speed*16; start[1] = stop[1] = pmove->origin[1] + vel[1]/speed*16; start[2] = pmove->origin[2] + pmove->player_mins[pmove->usehull][2]; stop[2] = start[2] - 34;
trace = pmove->PM_PlayerTrace (start, stop, PM_NORMAL, -1 );
if (trace.fraction == 1.0) friction = pmove->movevars->friction*pmove->movevars->edgefriction; else friction = pmove->movevars->friction; //... предполагаю, что тут edgefriction - это cvar движка(ст. значение 2), если поставить 1 - то high jump пропадет этот код относится к Half-Life, в других модах физика может быть другая
|
| |
|
|
 | AMX Mod X Russian Community © 2006-2026  |  |
|
| |