You are not logged in.
есть GTA San Andreas loader & script injector with source code by op9080, в котором убирался лимит на высоту взлета (нажатие клавиш Alt-F8). В исходниках можно адрес посмотреть, но я в MSVC ничего не понимаю.
Offline
кстате эта высота, помоему, от чего то зависит, так что один адрес изменить не получится, там как то еще с памятью связано отведенной на игровой процесс, у ребята я не спец но это гемор!
I know everything and nothing...
Offline
Ааа... В смысле того, что разработчики писали игру на Си++ в хорошем стиле, использовали константу типа FLY_MAX, и сравнивали с ней координаты в выражениях. Но как известно все константы заменеются на численные значения во время компиляции, поэтому выудить константу трудно, а изменить невозможно.
Выходит они использовали переменную?
Last edited by JNikc (30-05-2009 23:01)
Offline
Короче, вот:
0A8C: write_memory 0x6D261D size 1 value 2 virtual_protect 1
Убирает предел на высоту взлета. Вроде работает. Адрес подходит для 1.00 us/eu.@JNikc - в том-то и дело, что все переменные не есть что-то абстрактное, а конкретные значения, которые хранятся, читаются, пишутся в адресном пространстве процесса. Эти переменные находятся по некоторым адресам, которые большие и умные дяденьки умеют находить и патчить процесс, тем самым изменяя оные переменные так, как им надо. А константы наверное тоже в памяти находятся, а не заменяются на число во время компиляции. Просто на них стоит атрибут PAGE_READONLY - запрет на запись. Возможно, я ошибаюсь.
Offline
А константы наверное тоже в памяти находятся, а не заменяются на число во время компиляции
Ну я просто помню Керниган с Риччи (тоже между прочим умные дяденьки :-) хвастались, что в компиляторе C константы заменяются н а значения при компиляции...
0A8C: write_memory 0x6D261D size 1 value 2 virtual_protect 1
Отлично, значит это переменная в сегменте данных (возможно).
И всё таки, как маркеры сделать видимыми в интерьере?
Offline
Нет, по этому адресу не данные, а код. Там условный переход заменяется на нечто другое (0x7b на 0x02). Того же самого эффекта можно было добиться, пропатчив exe...
.text:006D261A test ah, 5 .text:006D261D jnp short loc_6D263D .text:006D261F fld [esp+arg_0]
Last edited by Alien (31-05-2009 07:55)
Offline
Ясно. Неблагодарное это дело, менять в игре вещи, которые не предполагалось менять. Интересно в R* предполагали, что люди будут скиптить и всё такое? Думаю да, потому что у них явно был высокоуровневый компилятор (есть все признаки в main.scm) и они думали так: ну вот надоест людям играть в игру, они глянут, хмм, да тут целый скриптовый язык, а давай скриптить. И ещё игра проживет.
Offline
Alien, и вообще, как вы находите значения адресов памяти? Где такая таблица?
Offline
И еще: как поместить актера 1@ на ближайшие пути? Вот он у меня создан, а потом при нажатии чего-нибудь он идет как пешеход по путям.
Offline
В смысле ж\д пути?? А как можно получить их координаты? ;-0
Offline
Если было, то дайте ссылку. если нет - ответьте, можно-ли создать перед игроком как бы невидимую стену.
Offline
2mfisto: В чем соль?
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007 {$VERSION 3.1.0027} {$CLEO .cs} //-------------MAIN--------------- 0000: NOP :NONAME_17 wait 0 if Player.Defined($PLAYER_CHAR) jf @NONAME_17 if 0AB0: key_pressed 17 jf @NONAME_17 04C4: store_coords_to 2@ 3@ 4@ from_actor $PLAYER_ACTOR with_offset 30.0 30.0 1.0 1@ = Actor.Create(Gang2, #WMYBP, 2@, 3@, 4@) 05DE: AS_actor 1@ walk_around_ped_path else_jump @NONAME_155 :NONAME_155 wait 0 if or Actor.Dead($PLAYER_ACTOR) Actor.Dead(1@) wasted_or_busted jf @NONAME_155 Actor.DestroyWithFade(1@) jump @NONAME_17
И еще вопрос: как педа убрать с путей? И еще вопрос: как тачку так же поместить на пути, а так же как ее убрать с путей?
Last edited by GTASA (01-06-2009 04:21)
Offline
можно просто сделать lock_actor
Наверное не совсем понял...
Например когда какие-то города ещё не открыты, там стоят дорожные блоки через которые не перепрыгнешь и не перелетишь (В самом начале игры на мост Гант приехать, будет блок, а за ним-то как раз невидимая стена).
Мне как раз это и нужно.
Offline
@Sw[ee]t, там модель колизии используется.
Offline
Помогите мне плиз!! Псто 989! Очень надо!
Offline
GTASA
Ты в коде, кстати, забыл модель загрузить:
Model.Load(#WMYBP) :NONAME_325 wait 10 if Model.Available(#WMYBP) else_jump @NONAME_325
Alien
0A8C: write_memory 0x6D261D size 1 value 2 virtual_protect 1
Так этот код снимает предел в интерьере 0. В true интерьерах ЛЕТАТЬ НЕЛЬЗЯ?
Кто-нибудь летал по Либерти нормально? На транспорте/джетпаке, а не с помощью клавиш и ПутАт?
Offline
@Sw[ee]t - взять подходящий объект и поместить перед игроком, предварительно установив ему интерьер отличный от текущего- должно сработать:)
Поправьте меня если я ошибаюсь
только вежливо :)
Offline
Тогда для jetpack'а (версия 1.00):
{$CLEO} 0A8C: write_memory 0x67F268 size 4 value 0x44e9 virtual_protect 1 0A8C: write_memory 0x67F26c size 1 value 0 virtual_protect 1 repeat wait 10 until player.Defined($player_char) select_interior 1 0860: link_actor $PLAYER_ACTOR to_interior 1 04E4: unknown_refresh_game_renderer_at -750.5782 490.7358 0A0B: set_rendering_origin_at_3D_coord -750.5782 490.7358 1371.7162 angle 82.0 Actor.SetImmunities($PLAYER_ACTOR, 1, 1, 1, 1, 1) 0792: disembark_instantly_actor $PLAYER_ACTOR Actor.PutAt($PLAYER_ACTOR, -750.5782, 490.7358, 1371.7162) 07A7: put_jetpack_on_actor $PLAYER_ACTOR 0A93: end_custom_thread
Кстати, почему нельзя писать вот так:
0A8C: write_memory 0x67F268 size 5 value 0x44e9 virtual_protect 1
А нужно вот так:
0A8C: write_memory 0x67F268 size 4 value 0x44e9 virtual_protect 1 0A8C: write_memory 0x67F26c size 1 value 0 virtual_protect 1
? Главное в этом деле не забывать переворачивать байты.=)
@Sw[ee]t - есть еще опкод 0750...
Offline
Привет! Команда 05DE: AS_actor 1@ walk_around_ped_path дает педу пути, а как наоборот педа убрать с путей?
Как тачку так же поместить на пути, как того педа, и как ее убрать с путей?
Можете написать или где-нить из мэйна достать скрипт, генерирующий всех прохожих на улицах, которые ходят, болтают? В общем, без которого улицы СА были бы пустыми. Очень надо!
Alien, почему у меня не работает скрипт, который должен активировать чит? Я не понимаю в адресах памяти, может мне надо так же написать две команды 0A8C сразу, как и ты сделал?
{$VERSION 3.1.0027}
{$CLEO .cs}
0000: NOP
:ass
wait 0
0A8C: write_memory 0x96915B size 1 value 2 virtual_protect 1
jump @ass
Last edited by GTASA (02-06-2009 07:09)
Offline
{$CLEO} 0A8C: write_memory 0x96915B size 1 value 1 virtual_protect 0 0A93: end_custom_thread
Offline
Кстати, почему нельзя писать вот так:
0A8C: write_memory 0x67F268 size 5 value 0x44e9 virtual_protect 1А нужно вот так:
0A8C: write_memory 0x67F268 size 4 value 0x44e9 virtual_protect 1
0A8C: write_memory 0x67F26c size 1 value 0 virtual_protect 1
Видимо, чтобы закончить строку в памяти нулевым сиволом - признак конца строки/памяти в С.
Все заработало! Списибо! Это реальный город призрак.
Забавно, что так "легко" сделать маппинг, обычно говорят сложно и виндовс будес запрещать.
Last edited by JNikc (02-06-2009 08:57)
Offline
Спасибо, Alien. А не мог бы ты мне помочь с остальными вопросами?
Offline
Можете написать или где-нить из мэйна достать скрипт, генерирующий всех прохожих на улицах, которые ходят, болтают? В общем, без которого улицы СА были бы пустыми. Очень надо!
jump @ass
Если не ошибаюсь, их exe генерирует и в мэйне этого нет.
Offline