#4501 04-02-2014 10:21

HH
Registered: 21-01-2014
Posts: 24

Re: Один вопрос

HH wrote:
Voron295 wrote:

1) Как узнать ид машины, только ид нужен.
Пробовал 1@ = Car.Id (0@) выдает ошибку при комплирование

Если идёт речь о ID модели машины, то это должно подойти:

1
0441: 1@ = car 0@ model

При условии, что в 0@ записан хендл машины и эта машина существует.

Насчёт флагов - ты их читать хочешь или записывать?

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

Last edited by HH (04-02-2014 10:23)

Offline

#4502 09-10-2014 15:34

kenking
From: Казахстан, Чимкент
Registered: 28-06-2010
Posts: 149

Re: Один вопрос

Просьба подсказать, как протестировать нужный бит, когда характеристика определяется битовым флагом в VC? Например, наличие второй выхлопной трубы, ведь опкода подобного SA 08B7:  test 1@ bit 13 в VC нет.

Offline

#4503 09-10-2014 19:23

mfisto
From: Perm
Registered: 01-02-2008
Posts: 448
Website

Re: Один вопрос

Там есть побитовые операции.
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

#4504 10-10-2014 10:31

Hetzer
Registered: 22-07-2013
Posts: 6

Re: Один вопрос

Хочу сделать скрипт, чтобы лодка двигалась за лодкой игрока, но не могу найти команды. Для машины есть Car.Drive to. А вот для лодки какая? Видел, в игре полицейская лодка ж гонится за игроком, но увы, такого скрипта не нашёл в мейне, где он может быть? Спасибо.

Offline

#4505 10-10-2014 10:59

kenking
From: Казахстан, Чимкент
Registered: 28-06-2010
Posts: 149

Re: Один вопрос

mfisto wrote:

например, тебе нужно проверить, что число 20@ имеет 3 бит

Нет, мне нужно проверить включен или выключен нужный бит. Вот, например, я прочитал значение из handling

1
2
3
4
5
6
7
8
9
10
05E7: 1@ = car 0@ struct
1@ += 0x120
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

#4506 10-10-2014 12:17

Seemann
Registered: 07-08-2006
Posts: 1,867

Re: Один вопрос

mfisto все правильно написал. Чтобы проверить установлен bit или нет, нужно сделать операцию AND (логическое умножение) двух чисел. Одним из этих чисел будет проверяемая переменная 1@, а другим - число, у которого нужный бит (восьмой) установлен в 1. Это число 0b10000000 или 0x80 или 128.

1
2
3
4
5
05F9: 2@ = 1@ AND 0x80
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

#4507 10-10-2014 13:55

kenking
From: Казахстан, Чимкент
Registered: 28-06-2010
Posts: 149

Re: Один вопрос

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

#4508 10-10-2014 14:02

mfisto
From: Perm
Registered: 01-02-2008
Posts: 448
Website

Re: Один вопрос

Hetzer wrote:

Хочу сделать скрипт, чтобы лодка двигалась за лодкой игрока, но не могу найти команды. Для машины есть 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

#4509 10-10-2014 14:07

mfisto
From: Perm
Registered: 01-02-2008
Posts: 448
Website

Re: Один вопрос

kenking wrote:

Почему?

Все верно биты считаются с 0, у тебя 0x100 это и есть 8 бит, а точнее 9 по порядку если.


I know everything and nothing...

Offline

#4510 10-10-2014 15:44

kenking
From: Казахстан, Чимкент
Registered: 28-06-2010
Posts: 149

Re: Один вопрос

mfisto wrote:

Все верно биты считаются с 0, у тебя 0x100 это и есть 8 бит, а точнее 9 по порядку если.

Seemann wrote:

число, у которого нужный бит (восьмой) установлен в 1. Это число 0b10000000 или 0x80 или 128.

С битами раньше не связывался. grin Вот и запутался поэтому. grin
Ну теперь разобрался, спасибо mfisto и Seemann

Offline

#4511 10-10-2014 16:07

Hetzer
Registered: 22-07-2013
Posts: 6

Re: Один вопрос

mfisto wrote:
Hetzer wrote:

Хочу сделать скрипт, чтобы лодка двигалась за лодкой игрока, но не могу найти команды. Для машины есть Car.Drive to. А вот для лодки какая? Видел, в игре полицейская лодка ж гонится за игроком, но увы, такого скрипта не нашёл в мейне, где он может быть? Спасибо.

Вот этим опкодом можно заставить лодку плыть к точке.

1
02D3: boat $2696 drive_to 171.0578 942.3843 6.0

Или можно заставить лодку двигаться по записанному раннее маршруту, это работает только в GTA SA. Маршрут записывается в rrr скрипт, который можно потом добавить в img архив под соответствующим номером, и путем специальных опкодов лодка поплывет по этому маршруту. Для создания rrr скрипта есть cs скрипт. Он доступен для скачивания на сайте cleo.li.

Спасибо. Однако, это к точке, а как быть с перемещающимся игроком/персонажем? Видать, надо через store_coords что-то думать?

Offline

#4512 10-10-2014 17:18

kenking
From: Казахстан, Чимкент
Registered: 28-06-2010
Posts: 149

Re: Один вопрос

может так?
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

#4513 10-10-2014 17:30

mfisto
From: Perm
Registered: 01-02-2008
Posts: 448
Website

Re: Один вопрос

Hetzer wrote:

Видать, надо через store_coords что-то думать?

Да видимо так и надо.

А насчет битов, то мне тоже когда-то объясняли, это был Alien. Вот с тех пор я стал разбираться. Вопрос битов стал меня волновать еще с СА. А вот в ВС этого действительно не было. И когда я стал выяснять, как применить побитовые опкоды, он мне и объяснил заодно и внедрил в клео ВС. А вот в третьей части таких опкодов нет, и там приходится делать асм вставки. Клео для 3 части разрабатывает на данный момент DK. Он уже эти опкоды добавил. Пока все на этапе тестирования.


I know everything and nothing...

Offline

#4514 13-10-2014 15:28

Hetzer
Registered: 22-07-2013
Posts: 6

Re: Один вопрос

а что ж, где можно найти скрипты действия полиции? Или они в экзе файле?

Offline

#4515 13-10-2014 17:33

mfisto
From: Perm
Registered: 01-02-2008
Posts: 448
Website

Re: Один вопрос

Hetzer wrote:

Или они в экзе файле?

точно так


I know everything and nothing...

Offline

#4516 14-10-2014 20:25

kenking
From: Казахстан, Чимкент
Registered: 28-06-2010
Posts: 149

Re: Один вопрос

В базе для gta3 нет описания структур. wow Или у меня левая база? grin

Offline

#4517 14-10-2014 22:17

mfisto
From: Perm
Registered: 01-02-2008
Posts: 448
Website

Re: Один вопрос

в базе, что listiner выкладывал нету вроде.


I know everything and nothing...

Offline

#4518 15-10-2014 15:27

kenking
From: Казахстан, Чимкент
Registered: 28-06-2010
Posts: 149

Re: Один вопрос

А у кого есть с описанием структур? Поделитесь пожалуйста.

Offline

#4519 19-10-2014 19:38

max99ru
Registered: 19-10-2014
Posts: 2

Re: Один вопрос

Когда нажимаю "Компилировать" выдаёт ошибку "Неизвестная команда" Причем любая команда, даже wait.
miKwYjk.jpg

Offline

#4520 19-10-2014 22:03

Seemann
Registered: 07-08-2006
Posts: 1,867

Re: Один вопрос

max99ru wrote:

Когда нажимаю "Компилировать" выдаёт ошибку "Неизвестная команда" Причем любая команда, даже wait.
http://i.imgur.com/miKwYjk.jpg

Какой стоит режим редактирования?

Offline

#4521 19-10-2014 23:46

max99ru
Registered: 19-10-2014
Posts: 2

Re: Один вопрос

Seemann wrote:
max99ru wrote:

Когда нажимаю "Компилировать" выдаёт ошибку "Неизвестная команда" Причем любая команда, даже wait.
http://i.imgur.com/miKwYjk.jpg

Какой стоит режим редактирования?

GTA SA SCR

Offline

#4522 20-10-2014 00:18

НикИТОС
Registered: 05-06-2013
Posts: 77
Website

Re: Один вопрос

max99ru wrote:
Seemann wrote:
max99ru wrote:

Когда нажимаю "Компилировать" выдаёт ошибку "Неизвестная команда" Причем любая команда, даже wait.
http://i.imgur.com/miKwYjk.jpg

Какой стоит режим редактирования?

GTA SA SCR

Выбери GTA SA.

Offline

#4523 23-10-2014 23:15

JuSskeee*
From: Мариуполь
Registered: 25-11-2011
Posts: 53

Re: Один вопрос

Подскажите опкод на полное отключение трафика, пожалуйста.


Your Banny Wrote

Offline

#4524 24-10-2014 08:59

kenking
From: Казахстан, Чимкент
Registered: 28-06-2010
Posts: 149

Re: Один вопрос

JuSskeee* wrote:

Подскажите опкод на полное отключение трафика, пожалуйста.

1
2
01EB: set_traffic_density_multiplier_to 0.0 // выключить трафик транспорта 0%
03DE: set_pedestrians_density_multiplier_to 0.0 // выключить трафик актёров 0%

Offline

#4525 24-10-2014 14:24

JuSskeee*
From: Мариуполь
Registered: 25-11-2011
Posts: 53

Re: Один вопрос

Спасибо, kenking.
А вот такой вопрос:
Как сделать так, чтобы при управлении игроком, он шел спокойно, как будто зажата клавиша Alt?


Your Banny Wrote

Offline

Board footer

Powered by FluxBB