You are not logged in.
Ага оно, спасибо! Ещё вопросы: а на флаги handling, как потом выйти? И проверить есть ли второй глушитель? Для VC когда-то ты помнится объяснял про проверку второго глушителя через опкод 05F9. Не могу тот пост, к сожалению, найти. Просьба пояснить ещё раз на примере для GTA3.
В VC было так:
05E7: STRUCT_AVTO = car AVTO struct STRUCT_AVTO += 0x120 05E0: STRUCT_AVTO = read_memory STRUCT_AVTO size 4 virtual_protect 0 0085: EXHAUST = STRUCT_AVTO EXHAUST += 0xCC 05E0: EXHAUST = read_memory EXHAUST size 4 virtual_protect 0 05F9: 8@ = EXHAUST AND 0x100 if 8@ > 0 then EXHAUST = 2 else EXHAUST = 1 end
Offline
Смотри если ты знаешь номер бита с 0 итд то можно проверять значение вот так:
05F9: 8@ = EXHAUST AND BIT if 8@ > 0
где BIT равен, если нулевой то = 1, если первый то = 2, второй = 4, третий = 8 итд. Т.е. умножаешь на 2
Структуру handling для gta 3 я к сожалению не знаю...
Last edited by mfisto (23-07-2016 17:19)
I know everything and nothing...
Offline
Спасибо, буду разбираться. А в CLEO GTA3 вместо опкода
05F9: 8@ = EXHAUST AND BIT
этот?
0B10: 0@ = 0@ AND 0xFF
Offline
Смещение на флаги handling нашёл 0xC8, может кому ещё понадобится. С проверкой битов разобрался, спасибо.
Offline
Почему игра зависает при столкновении об чего-либо на максимальной скорости, если изменить максимальную скорость авто через структуру хендлинга 0xC2B9DC по смещению 0x84 ?
вот примерно так подменяю значение:
{$CLEO .cs} 0000: while true wait 0 if and 00DF: actor $PLAYER_ACTOR driving 0AB0: key_pressed 48 // 0 then 03C0: 0@ = actor $PLAYER_ACTOR car 0AB1: @getVehHandlingOffset 1 from_car 0@ store_to 2@ 2@ += 0x84 0A8C: write_memory 2@ size 4 value 1.155 virtual_protect 0 // TransmissionData.fMaxVelocity end end // source http://gtaforums.com/topic/429194-changing-car-handling/#entry1059632226 :getVehicleNum { Parameters: Passed: 0@ - vehicle handle Result: 1@ - vehicle number Example: 0AB1: @getVehicleNum 1 from_car 0@ store_to 1@ } 0441: 1@ = car 0@ model 1@ -= 400 0AB2: ret 1 1@ :getVehHandlingOffset { Parameters: Passed: 0@ - vehicle handle Result: 3@ - vehicle handling offset Example: 0AB1: @getVehHandlingOffset 1 from_car 0@ store_to 1@ } 0AB1: @getVehicleNum 1 from_car 0@ store_to 1@ 0085: 2@ = 1@ 2@ *= 0x308 2@ += 0xB1F650 2@ += 0x4E 0A8D: 3@ = read_memory 2@ size 2 virtual_protect 0 // get handling ID 3@ *= 0xE0 3@ += 0xC2B9DC 0AB2: ret 1 3@ :getVehHandlingOffset_onID 0@ -= 400 0085: 2@ = 0@ 2@ *= 0x308 2@ += 0xB1F650 2@ += 0x4E 0A8D: 3@ = read_memory 2@ size 2 virtual_protect 0 // get handling ID 3@ *= 0xE0 3@ += 0xC2B9DC 0AB2: ret 1 3@
Offline
Доброго времени суток!
(Общая идея топика - градусное фиксированное вращение автомобиля, как 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, но увы, такого нет.
Кто может здравую мысль подкинуть?)
Offline
+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. Скорее всего это и есть четвёртый компонент кватерниона, вечером проверю.
Offline
Это всё конечно здорово, но мне не понятен один момент. При:
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)
Разве не правильней будет удалить одну строчку тут???:
(1) 0A97: 10@ = car $car struct (2) 10@ += 20 (3) Вот эту>>>>>>>>>>>>>0A8D: 10@ = read_memory 10@ size 4 virtual_protect 0 // pointer (4) ИЛИ эту(на выбор)>>>0A8D: 4@ = read_memory 10@ size 4 virtual_protect 0 // x rot in grad ...
???
А иначе, насколько я понял, получается, что мы высчитываем поинтер X ротации(1,2), потом читаем значение, записанное туда(3), а потом читаем значение по адресу, который равен(sic!) X ротации автомобиля(4)!
Offline
Не соглашусь с тобой.
Все работает и лишних строк там нет.
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@
Last edited by Hedgy (04-09-2016 13:00)
Offline
Продолжаю штурм вопросами.
Возможно ли передвинуть сферу коллизии в транспорте посредством скрипта в игре?
Или деактивировать, что тоже сойдет.
Хм, как-то же сделан погрузчик, надо покопать этот момент.
Last edited by Hedgy (14-09-2016 06:17)
Offline
1) Можно передвинуть и можно уменьшить (можно даже попробовать поставить радиус в 0 и глянуть, что получится).
2) Можно удалить.
Могу показать как это выглядит в С++, в CLEO надо будет копипастить кучу read/write_memory, что есть нечитабельный код.
static void VehicleRemoveSphere(CVehicle *vehicle) { CColData *colData = vehicle->GetColModel()->m_pColData; for (unsigned int i = 0; i < colData->m_wNumSpheres; i++) { if (colData->m_pSpheres[i].m_nFlags == 19) { // windscreen col sphere colData->m_pSpheres[i].m_fRadius = 0.0f; colData->m_pSpheres[i].m_vCenter = {0.0f, 0.0f, 0.0f}; } } }
PS Модели коллизии - общие для всех авто с одной моделью, копии не создаются.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
О, спасибо, интересно! Общая коллизия - не проблема, в принципе.
Проблема в С++. Срочно буду его осваивать тогда, ибо весь бмх-мод хорошо бы увидеть в виде плагина.
Тогда ещё вопрос, в гта на мото и велосипедах у персонажа руки крепятся к координатам дамми bargrip и его зеркалу по Х. Ты где-то писал ноп, чтобы не удалялись эти дамми, так что теперь я могу двигать его.
Вопрос в том, как выйти на адрес координат для левой руки (тех зеркальных координат по Х*-1)?
---UPD
По поводу коллизии погрузчика - у него подвижная часть коллизии соединена с крышей :о
Вопрос - как игра отцепляет этот кусок и двигает? Хм.
Last edited by Hedgy (15-09-2016 11:53)
Offline
Тогда ещё вопрос, в гта на мото и велосипедах у персонажа руки крепятся к координатам дамми bargrip и его зеркалу по Х. Ты где-то писал ноп, чтобы не удалялись эти дамми, так что теперь я могу двигать его.
Вопрос в том, как выйти на адрес координат для левой руки (тех зеркальных координат по Х*-1)?
Увы, про nop я ничего не помню.
И вопрос я что-то не очень понял. Можно же просто умножить x-координату на (-1), нет?
Координаты bargrip записаны в VehicleStruct, в массиве позиций дамми:
CVector bargripRight = CModelInfo::ms_modelInfoPtrs[bike->m_wModelIndex]->m_pVehicleStruct->m_vDummyPos[10];
Компонент bargrip (RwFrame) действительно удаляется игрой (удаляются все компоненты, которые используются только для определения позиции - headlights, engine, exhaust и прочие, а их позиции записываются в массиве в VehiceStruct).
По поводу коллизии погрузчика - у него подвижная часть коллизии соединена с крышей :о
Вопрос - как игра отцепляет этот кусок и двигает? Хм.
Всё очень просто. Всем сферам и треугольникам коллизии, которые отвечают за подвижную часть, присвоен материал CAR_MOVINGCOMPONENT (ID: 65). Ищем все такие сферы/треугольники и перемещаем их.
Срочно буду его осваивать тогда, ибо весь бмх-мод хорошо бы увидеть в виде плагина.
Удачи. По всем вопросам можешь обращаться в skype (dk22pac).
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
И вопрос я что-то не очень понял. Можно же просто умножить x-координату на (-1), нет?
Ан-нет, вопрос именно в нахождении адреса, где присваиваются координаты для кости левой руки.
По поводу материала коллизии погрузчика - не знал такого свойства.
Но с коллизией все равно разбираться и разбираться..
Offline
как в SA через cleo активировать возможность использования оружий всех типов?
т.е. по несколку винтовок, автоматов и оружий ближнего боя.
но не так чтоб выдать тупо все оружия, а именно что бы можно было и пикапом поднимать оружия без замены и через скрипт дать так же.
Offline
Как можно узнать, что машина поддерживает набор винил? (097D: get_car $CARMOD_CAR number_of_possible_paintjobs_to $10084
- не то)
Last edited by Mr.GeniusZ (21-09-2016 07:54)
Offline
Как можно узнать, что машина поддерживает набор винил? (097D: get_car $CARMOD_CAR number_of_possible_paintjobs_to $10084
- не то)
06EC: get_car AVTO number_of_possible_paintjobs_to SUM_VINIL_AVTO
Offline
Mr.GeniusZ wrote:Как можно узнать, что машина поддерживает набор винил? (097D: get_car $CARMOD_CAR number_of_possible_paintjobs_to $10084
- не то)06EC: get_car AVTO number_of_possible_paintjobs_to SUM_VINIL_AVTO
Спасибо!
Offline
Еще один вопрос: как узнать включен воздушный трафик или нет?
Offline
0A8D: 0@ = read_memory 0x008D33BC size 1 virtual_protect 0
Offline