#1 Re: Вопросы по скриптингу » Один вопрос » 15-09-2016 18:02

DK22Pac wrote:

И вопрос я что-то не очень понял. Можно же просто умножить x-координату на (-1), нет?

Ан-нет, вопрос именно в нахождении адреса, где присваиваются координаты для кости левой руки.

По поводу материала коллизии погрузчика - не знал такого свойства. good
Но с коллизией все равно разбираться и разбираться..

#2 Re: Вопросы по скриптингу » Один вопрос » 14-09-2016 06:29

О, спасибо, интересно!  Общая коллизия - не проблема, в принципе.
Проблема в С++. Срочно буду его осваивать тогда, ибо весь бмх-мод хорошо бы увидеть в виде плагина.

Тогда ещё вопрос, в гта на мото и велосипедах у персонажа руки крепятся к координатам дамми bargrip и его зеркалу по Х. Ты где-то писал ноп, чтобы не удалялись эти дамми, так что теперь я могу двигать его.
Вопрос в том, как выйти на адрес координат для левой руки (тех зеркальных координат по Х*-1)?

---UPD
По поводу коллизии погрузчика - у него подвижная часть коллизии соединена с крышей :о
Вопрос - как игра отцепляет этот кусок и двигает? Хм.

#3 Re: Вопросы по скриптингу » Один вопрос » 12-09-2016 19:13

Продолжаю штурм вопросами.

Возможно ли передвинуть сферу коллизии в транспорте посредством скрипта в игре?
Или деактивировать, что тоже сойдет.

Хм, как-то же сделан погрузчик, надо покопать этот момент.

#4 Re: Вопросы по скриптингу » Один вопрос » 03-09-2016 23:19

Не соглашусь с тобой.
Все работает и лишних строк там нет.

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@

#5 Re: Вопросы по скриптингу » Один вопрос » 01-09-2016 12:09

+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. Скорее всего это и есть четвёртый компонент кватерниона, вечером проверю.

#6 Re: Вопросы по скриптингу » Один вопрос » 01-09-2016 00:13

Доброго времени суток!
(Общая идея топика - градусное фиксированное вращение автомобиля, как 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, но увы, такого нет.
Кто может здравую мысль подкинуть?)

#7 Re: Вопросы по скриптингу » Один вопрос » 17-02-2015 02:19

Дмитрий, а можешь показать какой-нибудь простой пример хука, если не сложно? Я в этом профан, а поднабить руку хочется.

P.s. И если можно, какой нибудь мудрый тост - как искать эту зловещую функцию?

Спасибо, что читаешь-отвечаешь

//Edit.
Был давным-давно фикс от Рьюзуке "bikearmfix.asi". Может его поковырять? Вроде это то, что надо
собственно, сабж

//Edit еще раз

Да, этот плагин нопит функцию, остается только как-то перемещать кость по мировым коорд-м.

#8 Re: Вопросы по скриптингу » Один вопрос » 16-02-2015 10:57

С данными опкодами знаком, но вектор смещения работает только в локальных координатах от родительской кости.
А кватернионы работают исключительно в одиночной версии игры. В САМП'е значение кватерниона перезаписывается, но визуально ничего не меняется.

P.S. В опкодах получения указателя на матрицу и в опкоде получения хэндла кости используются разные нумерации, что немного неудобно)
Но, в любом случае, спасибо за newOpcodes!

P.p.s. Опкод получения хэндла наотрез не работает с "L/R Finger", когда плейер на байке..

#9 Re: Вопросы по скриптингу » Один вопрос » 15-02-2015 23:33

День добрый!

Возникла пара вопросов по работе с костями актера.
Как можно переместить кость по мировым координатам? Делать пересчет из мировых в локальные?
Если так, то немного прошу помощи в этом. Мировые координаты кости нашел, в смещении +48 (вроде бы) от указателя на матрицу. Сама матрица при перемещении никаких визуальных эффектов не производит, кость на месте.

И вот такая проблема:
В стандартной гта са, у актера, сидящего на велосипеде, кость руки перемещается постоянно в местоположение даммиса  bargrip. Это делается для компенсации отрыва рук при стандартных анимациях. Т.е. как-то кость перемещается.
Скриптово смещать кость локально не получается - стандартная функция напрочь блокирует любые перемещения, если кость уже "занята" аттачем к даммису. Интересно, что при поворотах, когда байк наклоняется вбок, координаты даммиса остаются на месте, как будто байк стоит ровно.
Это значит, что функция крепления кости использует координаты, считанные в момент посадки на байк и потом уже не меняет их.

Надеюсь, что кто-то это прочтет и сможет помочь. Хоть пересчетом глобальных в локальные, хоть NOP'ом это функции.. найти б её еще. rolleyes

Board footer

Powered by FluxBB