#1 Re: Вопросы по скриптингу » Один вопрос » 13-07-2019 13:57

написал тестовый скрипт который меняет клиренс автомобиля. Все работает есть CJ сидит в автомобиле, если выйти из него, то клиренс не меняется. Я что-то не так делаю, или нельзя менять настройки автомобиля не находясь в нём? Делал все через адреса памяти.

#2 Re: Вопросы по скриптингу » Один вопрос » 24-11-2018 13:09

Ребятки, помогите, плиз! Вот кусок кода для перемещения колес автомобиля по оси Y. Но мне нужно перемещение по оси Z. Работает перемещение по X, по Y, а по Z никак не хотят колеса двигаться!

:NONAME_12
wait 0
0A97: 1@ = car 0@ struct
0A97: 2@ = car 0@ struct
0A97: 3@ = car 0@ struct 
0A97: 4@ = car 0@ struct  
1@ += 0x650
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
1@ += 0x10
1@ += 52
2@ += 0x65C
0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
2@ += 0x10
2@ += 52
3@ += 0x658
0A8D: 3@ = read_memory 3@ size 4 virtual_protect 0
3@ += 0x10
3@ += 52
4@ += 0x664
0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0
4@ += 0x10
4@ += 52
jump @NONAME_13

:NONAME_13
wait 50
if
00E1:   player 0 pressed_key 11
then
5@ += 0.01 
end
if
00E1:   player 0 pressed_key 10
then
5@ -= 0.01 
end
if or
1@ <> 0
2@ <> 0
3@ <> 0
4@ <> 0
then
0A8C: write_memory 1@ size 4 value 5@ virtual_protect 0
0A8C: write_memory 2@ size 4 value 5@ virtual_protect 0
0A8C: write_memory 3@ size 4 value 5@ virtual_protect 0
0A8C: write_memory 4@ size 4 value 5@ virtual_protect 0
end
jump @NONAME_13

#3 Re: Вопросы по скриптингу » Один вопрос » 13-09-2014 15:46

Vitlgt wrote:
{$cleo}
 
0000:
while true
    wait 250
    if
        0AB0:   key_pressed 45 // Insert
    then
        0A8C: write_memory 0x0053E1E0 size 4 value 0x90909090 virtual_protect 0 //  выключить
	0A8C: write_memory 0x0053E1E4 size 1 value 0x90 virtual_protect 0
    end
    if
        0AB0:   key_pressed 46 // Delete
    then
        0A8C: write_memory 0x0053E1E0 size 4 value 0x204B0BE8 virtual_protect 0 // включить
        0A8C: write_memory 0x0053E1E4 size 1 value 0x0 virtual_protect 0
	end
end

Спасибо огромное! Это просто суперская тема. Щас интегрирую в свой скрипт.

#4 Re: Вопросы по скриптингу » Один вопрос » 12-09-2014 08:04

Seemann wrote:

Попробуй так

{$cleo}

0000:
while true
    wait 250
    if
        0AB0:   key_pressed 45 // Insert
    then
        0A8C: write_memory 0x00B6F065 size 1 value 1 virtual_protect 0 //  выключить
    end
    if
        0AB0:   key_pressed 46 // Home
    then
        0A8C: write_memory 0x00B6F065 size 1 value 0 virtual_protect 0 // включить
    end
end

немного другой подход, но эффект должен быть такой же

Спасибо, но это не то( Тут убирается прицел и включается режим фильма. А мне нужно просто отключение прицела.

#5 Re: Вопросы по скриптингу » Один вопрос » 11-09-2014 18:08

Seemann wrote:

ну смотри. стандартный вызов какой-то функции в exe выглядит так:

call <какой-то адрес>

call в архитектуре x86 - это обычно опкод E8
http://www.mathemainzel.info/files/x86asmref.html#call

адрес  - это какое-то число (смещение до вызываемой функции), в данном случае его размер 4 байта

144 - это 0x90 или опкод команды NOP
https://ru.wikipedia.org/wiki/NOP

То, что ты сделал, это перезаписал вызов функции отрисовки прицела в ехе, т.е. вместо e3 xx xx xx xx ты записал туда 0x90 90 90 90 90
Поэтому, когда игра приходит в это место, она просто ничего не делает и идет дальше, а не вызывает отрисовку прицела.

Чтобы вернуть прицел, нужно сначала запомнить, что находится в этом адресе изначально, потом записать туда NOP (0x90 или 144), а потом в нужный момент вернуть оригинальное значение.

Оригинальное значение можно узнать либо прочитав его в переменную командой read_memory, либо посмотрев код exe в программе IDA.

Спасибо, но я ничего не понял. Вы не знаете, что конкретно надо написать, чтобы прицел появился?

#6 Re: Вопросы по скриптингу » Один вопрос » 11-09-2014 06:30

Я нашел адрес прицела. Делаю так и прицел исчезает: 0A8C: write_memory 5497312 size 5 value 144 virtual_protect 0
Только как сделать чтобы он обратно появился? И откуда берётся число 144? Для разных адресов это число разное. Ужас какой-то, магия...

#7 Re: Справочная информация » Адреса и функции gta_sa.exe 1.0 » 07-09-2014 16:44

Кто-то подскажет адрес памяти прицела?

#8 Re: Вопросы по скриптингу » Один вопрос » 07-09-2014 14:35

SHooZ wrote:
Dimoman wrote:
SHooZ wrote:
Dimoman wrote:

Подскажите плиз как отключить отображение иконок оружия в HUD, а не весь HUD?

Можно занопить функцию, которая рисует эти иконки. Ёё адресс - 0x58D7D0.

Спасибо.  Только что значит "занопить"?

Как убрать прицел после определенного условия?

Занопить - это, грубо говоря, затереть. Т.е. игра прыгает на функцию, которая рисует иконку, но эта функция чистая - состоит из нопов(нулей) ничего не делает. По этому иконки нет.  Код нопа - 0х90
Пример:

{$CLEO}
0000:
while true
   wait 0
   if 0ab0: 9
   then
        0A8C: write_memory 0x58D7D0 size 450 value 0x90 virtual_protect 1
    end
end // while

Если честно, этот способ не совсем коректный, т.к. он затирает функцию, а нужно затереть её вызов. Но его адреса я, увы, не нашел  hmm

Насчет прицела все надо делать аналогично: нашёл вызов, затер его когда тебе надо и возобновил, когда не надо.

Спасибо!
А как найти нужный вызов (нужный вызов=адрес памяти?)? В этом вся проблема(. Может какая-то программа нужна?

#9 Re: Вопросы по скриптингу » Один вопрос » 01-09-2014 08:58

SHooZ wrote:
Dimoman wrote:

Подскажите плиз как отключить отображение иконок оружия в HUD, а не весь HUD?

Можно занопить функцию, которая рисует эти иконки. Ёё адресс - 0x58D7D0.

Спасибо.  Только что значит "занопить"?

Как убрать прицел после определенного условия?

#10 Re: Вопросы по скриптингу » Один вопрос » 29-07-2014 11:58

kenking wrote:
Dimoman wrote:

Подскажите как написать проверку  "Если игрок садится в машину, то..." (именно садится, а не когда уже сидит).

Можно проверить, что игрок пешком (not Actor.Driving($PLAYER_ACTOR)) и нажатие клавиши входа в авто (00E1: key_pressed 0 15) ну и наличие при этом возле игрока транспорта (0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@ //  0@ > 0)

Сложно и не работает.

mfisto wrote:
09DE:   actor $PLAYER_ACTOR entering_car

Спасибо, щас попробуем.

Работает)

#11 Re: Вопросы по скриптингу » Один вопрос » 29-07-2014 08:29

Подскажите как написать проверку  "Если игрок садится в машину, то..." (именно садится, а не когда уже сидит).

#12 Re: Вопросы по скриптингу » Один вопрос » 27-07-2014 17:31

Voron295 wrote:

Я так понимаю, соответствующего опкода нет? Можно получить его так:

0A8D: 0@ = read_memory 0xB7CF70 size 4 virtual_protect 0

Это дробное число, максимум вроде как 1000.

А как вы это нашли? В интернете ничего нет, в SB вообще туториал просто мизерный.

При компиляции SB пишет "неизвестная команда о."

#13 Re: Вопросы по скриптингу » Один вопрос » 25-07-2014 09:40

Как получить уровень кислорода для SECOND_PLAYER_ACTOR? Это второй игрок в однопользовательском режиме.

#15 Re: Вопросы по скриптингу » Один вопрос » 01-07-2014 11:20

Подскажите плиз как отключить отображение иконок оружия в HUD, а не весь HUD?

Board footer

Powered by FluxBB