You are not logged in.
Pages: 1
написал тестовый скрипт который меняет клиренс автомобиля. Все работает есть CJ сидит в автомобиле, если выйти из него, то клиренс не меняется. Я что-то не так делаю, или нельзя менять настройки автомобиля не находясь в нём? Делал все через адреса памяти.
Ребятки, помогите, плиз! Вот кусок кода для перемещения колес автомобиля по оси 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
{$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
Спасибо огромное! Это просто суперская тема. Щас интегрирую в свой скрипт.
Попробуй так
{$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немного другой подход, но эффект должен быть такой же
Спасибо, но это не то( Тут убирается прицел и включается режим фильма. А мне нужно просто отключение прицела.
ну смотри. стандартный вызов какой-то функции в 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.
Спасибо, но я ничего не понял. Вы не знаете, что конкретно надо написать, чтобы прицел появился?
Я нашел адрес прицела. Делаю так и прицел исчезает: 0A8C: write_memory 5497312 size 5 value 144 virtual_protect 0
Только как сделать чтобы он обратно появился? И откуда берётся число 144? Для разных адресов это число разное. Ужас какой-то, магия...
Кто-то подскажет адрес памяти прицела?
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Если честно, этот способ не совсем коректный, т.к. он затирает функцию, а нужно затереть её вызов. Но его адреса я, увы, не нашел
![]()
Насчет прицела все надо делать аналогично: нашёл вызов, затер его когда тебе надо и возобновил, когда не надо.
Спасибо!
А как найти нужный вызов (нужный вызов=адрес памяти?)? В этом вся проблема(. Может какая-то программа нужна?
Dimoman wrote:Подскажите плиз как отключить отображение иконок оружия в HUD, а не весь HUD?
Можно занопить функцию, которая рисует эти иконки. Ёё адресс - 0x58D7D0.
Спасибо. Только что значит "занопить"?
Как убрать прицел после определенного условия?
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)
Сложно и не работает.
09DE: actor $PLAYER_ACTOR entering_car
Спасибо, щас попробуем.
Работает)
Подскажите как написать проверку "Если игрок садится в машину, то..." (именно садится, а не когда уже сидит).
Я так понимаю, соответствующего опкода нет? Можно получить его так:
0A8D: 0@ = read_memory 0xB7CF70 size 4 virtual_protect 0Это дробное число, максимум вроде как 1000.
А как вы это нашли? В интернете ничего нет, в SB вообще туториал просто мизерный.
При компиляции SB пишет "неизвестная команда о."
Как получить уровень кислорода для SECOND_PLAYER_ACTOR? Это второй игрок в однопользовательском режиме.
У меня кстати аналогичная просьба)
Подскажите плиз как отключить отображение иконок оружия в HUD, а не весь HUD?
Pages: 1