AMX MOD X
Пятница, 09.01.2026, 02:13:57



Приветствую Вас Гость | RSS
[ Главная ] [ Несколько вопросов.TraceHull/TraceLine? - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Несколько вопросов.TraceHull/TraceLine?
LtRATДата: Среда, 10.09.2008, 16:58:48 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 33
Репутация: 1
Статус: Не в сети
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
Репутация: 13
Статус: Не в сети
Quote (LtRAT)
1) Чем отличаются TraceHull от TraceLine? Если можно описание с более-менее детальной работой этих функций (не встречал описаний способных разрешить данный вопрос)

ответ


 
LtRATДата: Среда, 10.09.2008, 18:22:13 | Сообщение # 3
Сержант
Группа: Пользователи
Сообщений: 33
Репутация: 1
Статус: Не в сети
Спасибо, стали более менее понятны основные различия...
Но все же там написанно что идет сфера при проверке, но что задают тогда 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
Репутация: 13
Статус: Не в сети
посмотри как используются эти константы в этом плагине

а также 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
Репутация: 16
Статус: Не в сети
2) sv_gravity0
Учти атрибут, отвечающий за дополнительное трение в кс

4) 1 траслайн вниз каждый постсинк(пост) быстрее всего

5) смотри раздел Полезная информация, юзай поиск

 
LtRATДата: Четверг, 11.09.2008, 00:00:56 | Сообщение # 6
Сержант
Группа: Пользователи
Сообщений: 33
Репутация: 1
Статус: Не в сети
1) ладно, с первым вопросом решили, дальше уже буду тестить :) и прменять к тому что мне надо :)

2) sv_gravity 0 как бы не совсем подходит :) да и у игрока свой коэффициент гравити есть, ее учитывать итп :) да и в случае с бхопом все не так уж и хорошо выглдяит

3) пожалуй мне вопрос №1 нужен был как раз для небаговой эмуляции PM_Friction, как я понял др способа нет :) хотя на вопрос еще не отвечали :)

4) нус 1 трэйслайном не обойтись, как минимум 3, допустим опускаем один в середине прыжка (от уровня ног при прыжке) удостоверяемся что это на блоке, потом делаем примерно оттуда еще 1 до первого блока (с которого прыгали) и оттуда уже третий, перпедикулярный стене, до противоположной стенки... плюс накладываются проблемы не с прямыми а кривыми блоками итп итд, что все надо учитывать...

5) да вот ничего подобного не видел :) видать придется делать из "дизассемблера" распаковщик, а из компилятора упаковщик, эх :(

 
slogicДата: Четверг, 11.09.2008, 03:48:08 | Сообщение # 7
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
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
Репутация: 1
Статус: Не в сети
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
Репутация: 13
Статус: Не в сети
о каком плагине идёт речь в пятом вопросе? почему ты думаешь что не достать исходник?

 
DaTaДата: Четверг, 11.09.2008, 10:42:18 | Сообщение # 10
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
slogic, зачетный способ, запомню
 
ArgusДата: Четверг, 11.09.2008, 11:02:50 | Сообщение # 11
AMXModX Fan
Группа: Cупер-модеры
Сообщений: 379
Репутация: 8
Статус: Не в сети
Quote (LtRAT)
5) Есть задача сделать ХардКрак одному из плагинов, отсюда вопрос, есть ли программы для изменения amxx файлов непосредственно...

http://amxmodx.ucoz.ru/forum/8-463-1


Правила форума
Поиск плагинов
Последние сообщения форума
 
LtRATДата: Четверг, 11.09.2008, 13:43:57 | Сообщение # 12
Сержант
Группа: Пользователи
Сообщений: 33
Репутация: 1
Статус: Не в сети
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
Репутация: 16
Статус: Не в сети
не 0.01 а frametime

Добавлено (2008-09-11, 9:54 Pm)
---------------------------------------------
и учти неточность расчета значений с плавающей точкой а так же особенности компиляции выражений на Visual Studio...

 
LtRATДата: Пятница, 12.09.2008, 21:04:38 | Сообщение # 14
Сержант
Группа: Пользователи
Сообщений: 33
Репутация: 1
Статус: Не в сети
Quote (DaTa)
и учти неточность расчета значений с плавающей точкой

а выкинь последние 3-4 знака, как раз эту неточность (правда не только на floating point) и получишь Константную ошибку движка...
Если посмотреть как происходит движение по горизонтали и вертикали каждый фрейм в ХЛСДК, то ее можно вычислить и оттуда...

Вообще говоря, это не единственный баг, Если идти по коду движка, то получим что высота прыжка не 45.0 как заложенно, и Velocity[2] слегка другая... нуу хотя смотря что подгонять из-за бага, можно velocity можно gravity.

 
DaTaДата: Среда, 08.10.2008, 11:56:44 | Сообщение # 15
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
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, в других модах физика может быть другая

 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026