You are not logged in.
Pages: 1
И вопрос я что-то не очень понял. Можно же просто умножить x-координату на (-1), нет?
Ан-нет, вопрос именно в нахождении адреса, где присваиваются координаты для кости левой руки.
По поводу материала коллизии погрузчика - не знал такого свойства.
Но с коллизией все равно разбираться и разбираться..
О, спасибо, интересно! Общая коллизия - не проблема, в принципе.
Проблема в С++. Срочно буду его осваивать тогда, ибо весь бмх-мод хорошо бы увидеть в виде плагина.
Тогда ещё вопрос, в гта на мото и велосипедах у персонажа руки крепятся к координатам дамми bargrip и его зеркалу по Х. Ты где-то писал ноп, чтобы не удалялись эти дамми, так что теперь я могу двигать его.
Вопрос в том, как выйти на адрес координат для левой руки (тех зеркальных координат по Х*-1)?
---UPD
По поводу коллизии погрузчика - у него подвижная часть коллизии соединена с крышей :о
Вопрос - как игра отцепляет этот кусок и двигает? Хм.
Продолжаю штурм вопросами.
Возможно ли передвинуть сферу коллизии в транспорте посредством скрипта в игре?
Или деактивировать, что тоже сойдет.
Хм, как-то же сделан погрузчик, надо покопать этот момент.
Не соглашусь с тобой.
Все работает и лишних строк там нет.
0A97: 10@ = car $car struct 10@ += 20 // смещение на поинтер матрицы 0A8D: 10@ = read_memory 10@ size 4 virtual_protect 0 //сам переход к матрице 10@ += 48 // смещение на мировую XYZ позицию 0A8D: 4@ = read_memory 10@ size 4 virtual_protect 0 //чтение X позиции в мировых координатах 10@ += 4 0A8D: 5@ = read_memory 10@ size 4 virtual_protect 0 10@ += 4 0A8D: 6@ = read_memory 10@ size 4 virtual_protect 0
А вот если не осуществлять переход на матрицу, считая, что +20 к структуре это указатель на Х-поворот, то результат выдаст равным 0.0.
--Edit Использовал NO опкоды работы с матрицами, проблема решена.
0A97: 10@ = car $car struct 10@ += 20 0A8D: 4@ = read_memory 10@ size 4 virtual_protect 0 0D06: get_matrix 4@ position_to 1@ 2@ 3@ 10@ = car.Angle($car) 10@ /= 57.2958 // перевод в радианы 11@ = 1.0471975511965977461542144610932 0D08: set_matrix 4@ rotation 0.0 11@ 10@ //радианы 0D05: set_matrix 4@ position 1@ 2@ 3@
+20 = [byte] Contains a pointer to the rotation/position matrix (84 bytes): +0 = [float] X-axis Rotation (Grad) +4 = [float] Y-axis Rotation (Grad) +8 = [float] Z-axis Rotation (Grad) +16 = [float] X-axis Rotation (Looking)
Идея имеет место, т.к. после Z-axis Rotation не указано смещение +12. Скорее всего это и есть четвёртый компонент кватерниона, вечером проверю.
Доброго времени суток!
(Общая идея топика - градусное фиксированное вращение автомобиля, как 0453: set_object $CRANE_MAGNET XY_rotation 15.0 0.0 angle $TEMPVAR_ANGLE для объекта)
)
Возник вопрос такого рода - дано смещение для машины в пуле, выводящее на углы поворота в градусах (возможно в градах, но не в этом суть).
For each vehicle in the pool: +20 = [byte] Contains a pointer to the rotation/position matrix (84 bytes): +0 = [float] X-axis Rotation (Grad) +4 = [float] Y-axis Rotation (Grad) +8 = [float] Z-axis Rotation (Grad)
Правильно ли прибавлять это смещение сразу к структуре авто?
0A97: 10@ = car $car struct 10@ += 20 0A8D: 10@ = read_memory 10@ size 4 virtual_protect 0 // pointer 0A8D: 4@ = read_memory 10@ size 4 virtual_protect 0 // x rot in grad ...
При таком развитии событий, градусы совсем не градусы, а как будто значения тригонометрической окружности, строго от -1.0 до 1.0, с привязкой к ориентации мировых координат.
Хочется получить эффект, как у опкода
0731: set_car $car y_angle_to 60.0
, однако запись своего значения (у = 1.0 к примеру) такого эффекта не дает и не фиксируется.
Проблему можно было бы решить, имея опкод XXXX: set_car $car X_angle_to 60.0, но увы, такого нет.
Кто может здравую мысль подкинуть?)
Дмитрий, а можешь показать какой-нибудь простой пример хука, если не сложно? Я в этом профан, а поднабить руку хочется.
P.s. И если можно, какой нибудь мудрый тост - как искать эту зловещую функцию?
Спасибо, что читаешь-отвечаешь
//Edit.
Был давным-давно фикс от Рьюзуке "bikearmfix.asi". Может его поковырять? Вроде это то, что надо
собственно, сабж
//Edit еще раз
Да, этот плагин нопит функцию, остается только как-то перемещать кость по мировым коорд-м.
С данными опкодами знаком, но вектор смещения работает только в локальных координатах от родительской кости.
А кватернионы работают исключительно в одиночной версии игры. В САМП'е значение кватерниона перезаписывается, но визуально ничего не меняется.
P.S. В опкодах получения указателя на матрицу и в опкоде получения хэндла кости используются разные нумерации, что немного неудобно)
Но, в любом случае, спасибо за newOpcodes!
P.p.s. Опкод получения хэндла наотрез не работает с "L/R Finger", когда плейер на байке..
День добрый!
Возникла пара вопросов по работе с костями актера.
Как можно переместить кость по мировым координатам? Делать пересчет из мировых в локальные?
Если так, то немного прошу помощи в этом. Мировые координаты кости нашел, в смещении +48 (вроде бы) от указателя на матрицу. Сама матрица при перемещении никаких визуальных эффектов не производит, кость на месте.
И вот такая проблема:
В стандартной гта са, у актера, сидящего на велосипеде, кость руки перемещается постоянно в местоположение даммиса bargrip. Это делается для компенсации отрыва рук при стандартных анимациях. Т.е. как-то кость перемещается.
Скриптово смещать кость локально не получается - стандартная функция напрочь блокирует любые перемещения, если кость уже "занята" аттачем к даммису. Интересно, что при поворотах, когда байк наклоняется вбок, координаты даммиса остаются на месте, как будто байк стоит ровно.
Это значит, что функция крепления кости использует координаты, считанные в момент посадки на байк и потом уже не меняет их.
Надеюсь, что кто-то это прочтет и сможет помочь. Хоть пересчетом глобальных в локальные, хоть NOP'ом это функции.. найти б её еще.
Pages: 1