код показался очень занятным, поэтому для истории запомним ссылочку
]]>а можно чтобы эффект стробоскопов включался/отключался например при нажатии кнопки U
а то у меня стоит скрипт включения/отключения фар
Охото чтобы можно было ездить и просто с горяшими фарами и со страбаскопами
Можно.
while true wait 250 if and Player.Defined($PLAYER_CHAR) 0AB0: key_pressed 0x55 Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 1@ = car 0@ struct 1@ += 0x5A0 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 1 0 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 0 1 wait 300 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 0 0 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 1 1 wait 300 end end
Вроде так...
]]>[center][large]Управление фарами[/large][/center]
Вчера мною и listener'ом был разобран весьма интересный класс в движке игры, который в частности позволяет получить полный контроль над фарами машины. Сразу оговорюсь, поворотниками управлять нельзя
Через этот класс можно чинить фары машины, если они разбиты.
Передние фары (левая и правая) чинятся по отдельности, задние - только обе сразу.
Итак, как это делается.
1. Сначала получаем адрес машины в памяти
03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 1@ = car 0@ struct2. Теперь получаем адрес нужного класса, путем прибавления смещения к начальному адресу машины
1@ += 0x5A03. Теперь можно чинить фары. Делается это строкой
0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 1 0Последние 2 цифры - параметры. Предпоследняя цифра (1) означает состояние фары (1 - разбита, 0 - не разбита ). Последняя цифра - номер фары (0 - передняя левая, 1 - передняя правая, 3 - задние фары). Другие цифры не работают.
Число 1@ - это адрес класса, который мы получили выше.Варьируя номера фар и их состояние можно получить эффект стробоскопов (выключаем левую/правую переднюю фару по очереди) (проверять нужно ночью, когда фары включены):
while true wait 250 if Player.Defined($PLAYER_CHAR) then if Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 1@ = car 0@ struct 1@ += 0x5A0 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 1 0 // выключили переднюю левую 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 0 1 // включили переднюю правую wait 300 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 0 0 // включили переднюю левую 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 1 1 // выключили переднюю правую wait 300 end end end
а можно чтобы эффект стробоскопов включался/отключался например при нажатии кнопки U
а то у меня стоит скрипт включения/отключения фар
Охото чтобы можно было ездить и просто с горяшими фарами и со страбаскопами
0AA5: call 0x0043A0B6 num_params 1 pop 1 #INFERNUS
#INFERNUS - это желаемая модель машины. Все остальное (загрузку модели, расчет координат) сделает игра.
(подробнее здесь и ниже по тексту).
]]>Вчера мною и listener'ом был разобран весьма интересный класс в движке игры, который в частности позволяет получить полный контроль над фарами машины. Сразу оговорюсь, поворотниками управлять нельзя
Через этот класс можно чинить фары машины, если они разбиты.
Передние фары (левая и правая) чинятся по отдельности, задние - только обе сразу.
Итак, как это делается.
1. Сначала получаем адрес машины в памяти
03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 1@ = car 0@ struct
2. Теперь получаем адрес нужного класса, путем прибавления смещения к начальному адресу машины
1@ += 0x5A0
3. Теперь можно чинить фары. Делается это строкой
0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 1 0
Последние 2 цифры - параметры. Предпоследняя цифра (1) означает состояние фары (1 - разбита, 0 - не разбита ). Последняя цифра - номер фары (0 - передняя левая, 1 - передняя правая, 3 - задние фары). Другие цифры не работают.
Число 1@ - это адрес класса, который мы получили выше.
Варьируя номера фар и их состояние можно получить эффект стробоскопов (выключаем левую/правую переднюю фару по очереди) (проверять нужно ночью, когда фары включены):
while true wait 250 if Player.Defined($PLAYER_CHAR) then if Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 1@ = car 0@ struct 1@ += 0x5A0 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 1 0 // выключили переднюю левую 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 0 1 // включили переднюю правую wait 300 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 0 0 // включили переднюю левую 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 1 1 // выключили переднюю правую wait 300 end end end
<hr>
Аналогичным способом можно проверить - разбита фара или нет. Для этого используется такая строка:
0AA8: call_function_method 0x6C2130 struct 1@ num_params 1 pop 0 1 0@
Здесь последние 2 параметра означают: номер фары (1 - это передняя правая) и переменную, в которую будет записан результат (0@). Значение 0@ равное 0 означает, что фара не разбита, 1 - разбита.
struct 1@ означает все тот же адрес класса, как и в примере выше.
while true wait 250 if Player.Defined($PLAYER_CHAR) then if Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 1@ = car 0@ struct 1@ += 0x5A0 0AA8: call_function_method 0x6C2130 struct 1@ num_params 1 pop 0 1 0@ // записываем в 0@ состояние передней правой фары if 0@ == 1 then 03E5: show_text_box 'HELP101' // вы разбили правую фару. сейчас починим 0AA6: call_method 0x006C2100 struct 1@ num_params 2 pop 0 0 1 // включили переднюю правую end end end end]]>
Только вот времени бы побольше .
Да там недолго Вот мои исходники если нужно http://foolroot.nm.ru/source/
]]>хорошо надо будет сделать общий патч для всех стандартных ехе .
У меня кроме 1.0 больше нет
]]>Команда, отвечающая за уменьшение здоровья при падении с байка:
004B3296 D865 04 FSUB DWORD PTR SS:[EBP+4]
Команда, отвечающая за уменьшение здоровья:
004B3314 D865 04 FSUB DWORD PTR SS:[EBP+4]
Команда, отвечающая за уменьшение текущего количества патрон в машине:
0073FA85 48 DEC EAX
Команда, отвечающая за уменьшения общего количества патрон в машине:
0073FAAF FF4E 0C DEC DWORD PTR DS:[ESI+C]
Команда, отвечающая за уменьшение текущего количества патрон пешком:
007428AF 48 DEC EAX
Команда, отвечающая за уменьшения общего количества патрон пешком:
007428E6 FF4E 0C DEC DWORD PTR DS:[ESI+C]
Можно все команды занопить (90h), тогда патроны и здоровье заканчиваться не будут, или DEC заменить на INC, а FSUB заменить на FADD – патроны и здоровье будет прибавлятся.
Можно пропатчить как сам экзешник, так и процесс. Все адреса для версии gta_sa.exe v1.0
Скачать патч (патчится сам процесс, только для v1.0):
1) для заморозки жизней;
2) для заморозки патронов.
Вывод: юзайте английский язык
]]>