You are not logged in.
Voron295 wrote:1) Как узнать ид машины, только ид нужен.
Пробовал 1@ = Car.Id (0@) выдает ошибку при комплированиеЕсли идёт речь о ID модели машины, то это должно подойти:
10441:
1@
= car
0@
model
При условии, что в 0@ записан хендл машины и эта машина существует.
Насчёт флагов - ты их читать хочешь или записывать?
По идее они же включаются и выключается, мне надо чтоб я мог включить каждый флаг и отключить и еще хотелось бы узнать статус определенного флага т.е, узнать включен ли флаг или выключен
Last edited by HH (04-02-2014 10:23)
Offline
Просьба подсказать, как протестировать нужный бит, когда характеристика определяется битовым флагом в VC? Например, наличие второй выхлопной трубы, ведь опкода подобного SA 08B7: test 1@ bit 13 в VC нет.
Offline
Там есть побитовые операции.
05F9: 1@ = 1@ AND 0@
05FA: 1@ = 1@ OR 0@
05FC: 1@ = NOT 0@
Вот с помощью них.
Вот, например, AND проверяет два числа, не важно в каком порядке, скажем, число 128 и число 4. В итоге будет ноль, так как если посмотреть на числа, у них не совпадают биты, вот например числа 2 и 3 совпадают первым битом, значит и результат будет итоговый 2. Или скажем числа 22 и 14 результат будет 6, так как только первый и второй совпадают. Ну итд. Вообще в итоге мы имеем такую картину: при операции AND те биты у двух чисел, которые совпадают, и дают итоговое число. Что это дает, например, тебе нужно проверить, что число 20@ имеет 3 бит. Что мы делаем, пишем...:
1 2 3 4 5 6 | 05F9: 1@ = 20@ AND 8 // здесь получается, что мы сравниваем два числа, одно из которых имеет лишь 3 бит, что нам и надо if // потом просто делаем проверку такую 1@ <> 0 then //значит что 3 бит у числа 20@ есть end |
Операция OR делает следующее: два числа сравниваются тоже без разницы в каком порядке. Если биты не совпадают, все равно итог будет за существующим битом, т.е, например, числа 22 и 14 в итоге дадут 30, так как мы суммируем все биты.
Это можно применять для установки бита.
Например, тебе нужен 3 бит у числа 20@
Делаем...:
1 | 05FA: 20@ = 20@ OR 8 // в итоге число 20@ содержит 3 бит |
Ну и операция NOT. Как ты можешь догадаться, можно использовать для снятия бита.
Т.е. NOT переворачивает биты. Например, число 6 в итоге будет -7 из расчета, что число 4 байта (в игре используется именно 4 байта на любое число).
Чтоб снять бит делаем...:
1 2 3 | 05FC: 20@ = NOT 20@ 05FA: 20@ = 20@ OR 8 05FC: 20@ = NOT 20@ // в итоге в числе 20@ 3 бит пропадает |
Last edited by mfisto (09-10-2014 19:52)
I know everything and nothing...
Offline
Хочу сделать скрипт, чтобы лодка двигалась за лодкой игрока, но не могу найти команды. Для машины есть Car.Drive to. А вот для лодки какая? Видел, в игре полицейская лодка ж гонится за игроком, но увы, такого скрипта не нашёл в мейне, где он может быть? Спасибо.
Offline
например, тебе нужно проверить, что число 20@ имеет 3 бит
Нет, мне нужно проверить включен или выключен нужный бит. Вот, например, я прочитал значение из handling
1 2 3 4 5 6 7 8 9 10 | 05E7: 1@ = car 0@ struct 1@ += 0x 120 05E0: 1@ = read_memory 1@ size 4 virtual_protect 0 1@ += 0xCC 05E0: 1@ = read_memory 1@ size 4 virtual_protect 0 // дальше, как проверить, что 8-й бит вкл или выкл? // в SA я бы сделал так // if // 08B7: test 1@ bit 8 //then |
Offline
mfisto все правильно написал. Чтобы проверить установлен bit или нет, нужно сделать операцию AND (логическое умножение) двух чисел. Одним из этих чисел будет проверяемая переменная 1@, а другим - число, у которого нужный бит (восьмой) установлен в 1. Это число 0b10000000 или 0x80 или 128.
1 2 3 4 5 | 05F9: 2@ = 1@ AND 0x 80 if 2@ > 0 then // 8й бит установлен |
Операция AND побитово перемножит два числа. Поскольку у 0x80 только 8й бит равен 1, остальные биты при умножении дадут 0. Если в 1@ восьмой бит равен 0 результат умножения (2@) будет равен 0 (0 and 0 = 0), если равен 1, то 2@ будет больше 0.
На всякий случай таблица умножения:
0 and 0 = 0
1 and 0 = 0
0 and 1 = 0
1 and 1 = 1
Offline
mfisto, Seemann, спасибо.
С этим разобрался, но возник по-ходу дела ещё вопрос. Вот в SA
1 2 3 4 | 1st digit 1: IS_VAN 2: IS_BUS 4: IS_LOW 8: IS_BIG 2nd digit 1: REVERSE_BONNET 2: HANGING_BOOT 4: TAILGATE_BOOT 8: NOSWING_BOOT 3rd digit 1: NO_DOORS 2: TANDEM_SEATS 4: SIT_IN_BOAT 8: CONVERTIBLE 4th digit 1: NO_EXHAUST 2: DOUBLE_EXHAUST 4: NO1FPS_LOOK_BEHIND 8: FORCE_DOOR_CHECK |
флаг DOUBLE_EXHAUST считывался 13-м битом, т.е. с нуля считал
08B7: test 1@ bit 13
В VC
1 2 3 | 1st digit = 1: 1G_BOOST 2: 2G_BOOST 4: REV_BONNET 8: HANGING_BOOT 2nd digit = 1: NO_DOORS 2: IS_VAN 4: IS_BUS 8: IS_LOW 3rd digit = 1: DBL_EXHAUST 2: TAILGATE_BOOT 4: NOSWING_BOOT 8: NONPLAYER_STABILISER |
почему-то этот флаг надо считывать с 1
05F9: 2@ = 1@ AND 0x100
Почему?
Offline
Хочу сделать скрипт, чтобы лодка двигалась за лодкой игрока, но не могу найти команды. Для машины есть Car.Drive to. А вот для лодки какая? Видел, в игре полицейская лодка ж гонится за игроком, но увы, такого скрипта не нашёл в мейне, где он может быть? Спасибо.
Вот этим опкодом можно заставить лодку плыть к точке.
1 | 02D3: boat $2696 drive_to 171.0578 942.3843 6.0 |
Или можно заставить лодку двигаться по записанному раннее маршруту, это работает только в GTA SA. Маршрут записывается в rrr скрипт, который можно потом добавить в img архив под соответствующим номером, и путем специальных опкодов лодка поплывет по этому маршруту. Для создания rrr скрипта есть cs скрипт. Он доступен для скачивания на сайте cleo.li.
I know everything and nothing...
Offline
Все верно биты считаются с 0, у тебя 0x100 это и есть 8 бит, а точнее 9 по порядку если.
число, у которого нужный бит (восьмой) установлен в 1. Это число 0b10000000 или 0x80 или 128.
С битами раньше не связывался. Вот и запутался поэтому.
Ну теперь разобрался, спасибо mfisto и Seemann
Offline
Hetzer wrote:Хочу сделать скрипт, чтобы лодка двигалась за лодкой игрока, но не могу найти команды. Для машины есть Car.Drive to. А вот для лодки какая? Видел, в игре полицейская лодка ж гонится за игроком, но увы, такого скрипта не нашёл в мейне, где он может быть? Спасибо.
Вот этим опкодом можно заставить лодку плыть к точке.
102D3: boat
$2696
drive_to
171.0578
942.3843
6.0
Или можно заставить лодку двигаться по записанному раннее маршруту, это работает только в GTA SA. Маршрут записывается в rrr скрипт, который можно потом добавить в img архив под соответствующим номером, и путем специальных опкодов лодка поплывет по этому маршруту. Для создания rrr скрипта есть cs скрипт. Он доступен для скачивания на сайте cleo.li.
Спасибо. Однако, это к точке, а как быть с перемещающимся игроком/персонажем? Видать, надо через store_coords что-то думать?
Offline
может так?
03C0: 0@ = actor $PLAYER_ACTOR car
00AA: store_car 0@ position_to 1@ 2@ 3@
//0407: store_coords_to 1@ 2@ 3@ from_car 0@ with_offset 0.0 -3.0 0.0
02D3: boat 4@ drive_to 1@ 2@ 3@
Offline
Видать, надо через store_coords что-то думать?
Да видимо так и надо.
А насчет битов, то мне тоже когда-то объясняли, это был Alien. Вот с тех пор я стал разбираться. Вопрос битов стал меня волновать еще с СА. А вот в ВС этого действительно не было. И когда я стал выяснять, как применить побитовые опкоды, он мне и объяснил заодно и внедрил в клео ВС. А вот в третьей части таких опкодов нет, и там приходится делать асм вставки. Клео для 3 части разрабатывает на данный момент DK. Он уже эти опкоды добавил. Пока все на этапе тестирования.
I know everything and nothing...
Offline
а что ж, где можно найти скрипты действия полиции? Или они в экзе файле?
Offline
В базе для gta3 нет описания структур. Или у меня левая база?
Offline
А у кого есть с описанием структур? Поделитесь пожалуйста.
Offline
Когда нажимаю "Компилировать" выдаёт ошибку "Неизвестная команда" Причем любая команда, даже wait.
Offline
Когда нажимаю "Компилировать" выдаёт ошибку "Неизвестная команда" Причем любая команда, даже wait.
http://i.imgur.com/miKwYjk.jpg
Какой стоит режим редактирования?
Offline
max99ru wrote:Когда нажимаю "Компилировать" выдаёт ошибку "Неизвестная команда" Причем любая команда, даже wait.
http://i.imgur.com/miKwYjk.jpgКакой стоит режим редактирования?
GTA SA SCR
Offline
Seemann wrote:max99ru wrote:Когда нажимаю "Компилировать" выдаёт ошибку "Неизвестная команда" Причем любая команда, даже wait.
http://i.imgur.com/miKwYjk.jpgКакой стоит режим редактирования?
GTA SA SCR
Выбери GTA SA.
Offline
Подскажите опкод на полное отключение трафика, пожалуйста.
Your Banny Wrote
Offline
Подскажите опкод на полное отключение трафика, пожалуйста.
1 2 | 01EB: set_traffic_density_multiplier_to 0.0 // выключить трафик транспорта 0% 03DE: set_pedestrians_density_multiplier_to 0.0 // выключить трафик актёров 0% |
Offline
Спасибо, kenking.
А вот такой вопрос:
Как сделать так, чтобы при управлении игроком, он шел спокойно, как будто зажата клавиша Alt?
Your Banny Wrote
Offline