#201 Работа с памятью, EXE » Запуск двух GTA SA » 23-07-2011 17:58

Jack Daniel's
Replies: 6

Итак, давно хотел сделать запуск двух гташек (Точнее сделал).

Но вот проблема! Только что заметил, что миссия грузится только на половину при запуске (В смысле две игры запускаются, но при начале игры, у одной из них загрузка останавливается ровно на середине). Заметил только сейчас, т.к наработкой никогда не пользовался.
Как я сделал запуск двух гта:

Рокстар юзнули простой api FindWindowA, чтобы находить вторую запущенную гта и "подавлять" ее загрузку.

Вот оригинальный кусок:

007468E8  |.  6A 00         PUSH 0                                   ; |ManualReset = FALSE
007468EA  |.  6A 00         PUSH 0                                   ; |pSecurity = NULL
007468EC  |.  FF15 2C818500 CALL DWORD PTR DS:[<&KERNEL32.CreateEven>; \CreateEventA
007468F2  |.  FF15 94808500 CALL DWORD PTR DS:[<&KERNEL32.GetLastErr>; [GetLastError
007468F8  |.  3D B7000000   CMP EAX,0B7
007468FD  |.  75 39         JNZ SHORT gta_sa.00746938
007468FF  |.  8B0D 4070C100 MOV ECX,DWORD PTR DS:[C17040]
00746905  |.  8B15 24628D00 MOV EDX,DWORD PTR DS:[8D6224]            ;  gta_sa.00872ED8
0074690B  |.  51            PUSH ECX                                 ; /Title => NULL
0074690C  |.  52            PUSH EDX                                 ; |Class => "Grand theft auto San Andreas"
0074690D  |.  FF15 B4828500 CALL DWORD PTR DS:[<&USER32.FindWindowA>>; \FindWindowA
00746913  |.  85C0          TEST EAX,EAX
00746915  |.  74 0D         JE SHORT gta_sa.00746924
00746917  |.  50            PUSH EAX                                 ; /hWnd
00746918  |.  FF15 B8828500 CALL DWORD PTR DS:[<&USER32.SetForegroun>; \SetForegroundWindow
0074691E  |.  B8 01000000   MOV EAX,1
00746923  |.  C3            RETN
00746924  |>  A1 5470C100   MOV EAX,DWORD PTR DS:[C17054]
00746929  |.  8B08          MOV ECX,DWORD PTR DS:[EAX]
0074692B  |.  51            PUSH ECX                                 ; /hWnd
0074692C  |.  FF15 B8828500 CALL DWORD PTR DS:[<&USER32.SetForegroun>; \SetForegroundWindow
00746932  |.  B8 01000000   MOV EAX,1
00746937  |.  C3            RETN
00746938  |>  33C0          XOR EAX,EAX
0074693A  \.  C3            RETN

Достаточно изменить JNZ SHORT gta_sa.00746938 на JMP 00746938, чтобы все было ок. Но я в первой строке куска вбил xor eax,eax, во второй retn. В результате эффект почти одинаковый.

А теперь суть:
Я не заставляю никого хватать отладчик/дизассемблер и бежать искать способы. Я обращаюсь к тем, кто исследовал гта (Особенно к Листенеру и Симану), если вы знаете про это что-нибудь, то любая информация будет полезной. Спасибо.

P.S Попутный вопрос: при сворачивании игры, довольно часто курсор автоматом прилипает к левому верхнему углу экрана (это бесит grin). Так вот, как думаете, все дело в тех же api? (SetCursorPos и тд).

#202 Re: Вопросы по скриптингу » Циклы » 23-07-2011 09:27

{$CLEO .cs}
wait 4000

:1
repeat        
wait 1    //Проверка существования игрока
until Player.Defined($PLAYER_CHAR)

      repeat
        wait 1     //Проверка нажатия "1"
      until 0AB0:   key_pressed 0x31

        repeat
        wait 0
          
      00A1: put_actor $PLAYER_ACTOR at 2229.7996 -2284.3499 13.5469  //Телепортация по этим двум координатам пока зажата кнопка "1"
   
        wait 3000                    
  
      00A1: put_actor $PLAYER_ACTOR at 2171.4026 -2255.0449 13.3036
   
        wait 3000 
  
      until 8AB0:  key_pressed 31   //Проверка на то, отпущена ли кнопка "1", если отпущена, то выход из цикла

jump @1

P.S число 8 в начале опкода 0AB0 означает обратное действие опкода. Это работает и на других опкодах проверки чего-либо.

#203 Re: Вопросы по скриптингу » Циклы » 19-07-2011 22:04

А почему не по нажатию? Просто при спавне?
Тогда:

{$CLEO}
wait 5000                   //просто ждем 5сек, игра все равно загружается
repeat                     //Основной цикл
wait 0                    //Чтобы не вылетело        
          repeat         //Цикл проверки того, существует ли игрок
             wait 0                                                 
          until Player.Defined($PLAYER_CHAR)            
             00A1: put_actor $PLAYER_ACTOR at 1455.405 750.6191 11.0234 
             wait 3000     //Ожидание 3 сек, чтобы все успело прогрузиться при очередной телепортации, да и чтобы успеть увидеть, куда попал
             00A1: put_actor $PLAYER_ACTOR at 1000.6517 640.98744 8.647687
             wait 3000
             00A1: put_actor $PLAYER_ACTOR at 1132.6357 350.3544 15.653587
             wait 3000
             00A1: put_actor $PLAYER_ACTOR at 535.63517 653.98534 1.6535
             wait 3000
             00A1: put_actor $PLAYER_ACTOR at 1150.65537 51.987524 1.523687
             wait 3000
until false                //Цикл будет выполняться бесконечно

Ну и можно еще обычными if..then..else. Способов еще много.

#204 Re: Беседка » Установка винды с флешки » 18-07-2011 10:50

BIOS только от твоей материнки, ну или максимум - от материнки твоей линейки моделей, но не советую. А на ноутбуках совсем другие биосы, там с GUI интерфейсом, но мне как-то удобнее стандартный.

А винды на ноуте и компе одинаковы?

#205 Re: Беседка » Установка винды с флешки » 18-07-2011 08:28

~AquaZ~ wrote:

т.к. я с неё ставил винду на ноут

Ха ха, недавно пробовал поставить тоже на ноут, в итоге: испробовал 5 дистрибутивов, ~4 способа записи, да и вообще кучу времени и нервов потратил; а все дело было из-за железа ноута.

~AquaZ~ wrote:

На компе и на ноуте если врубить звук на полную и не слушать музон, то слышен раздражающий писк.

А к ноуту и компу ты подключаешь одни и те же динамики? Т.к почти у всех динамиков писк, если выставить звук на ~максимум. Хотя ты сказал, что при перетаскивании окон звук заглушается, тогда хз в чем проблема может быть.

#206 Re: Беседка » Установка винды с флешки » 17-07-2011 21:26

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

#207 Re: Работа с памятью, EXE » Вопрос по памяти » 07-07-2011 08:53

Сомневаюсь, что мультиплеер хранит в нем все данные. И я не нашел ничего об этом пуле (кроме структуры из базы Листенера). Придется самому копаться(

#209 Re: Программирование » Краткое руководство по ассемблеру » 05-07-2011 21:03

Читай туториалы Нарвахи (На васме есть). Там все основы ассемблера в первых ~10 главах описаны. А далее в 10-57 главах очень интересный материал по крекингу идет... Ну и, конечно, есть еще сотни книг/сайтов, посвященных этой теме.

#210 Re: Работа с памятью, EXE » Вопрос по памяти » 05-07-2011 20:58

Я понимаю, что вопрос, который я задам, слишком прямолинеен, но он меня мучает продолжительное количество времени.
Вопрос: Существует ли такой кусок в памяти игры, который хранит в себе все координаты маркеров-целей (в сампе маркеры игроков обозначаются как "цели миссии")?
Я понимаю, что вы не занимаетесь модификациями мультиплеера и прочее, но как бы все же grin
Мультиплеер тоже интересен для модифицирования. Как раз недавно даже исходники чуть более ранней версии отрыл...

Алсо,
не примите за проходимца-нуба с 0 постами. Я перечитал ваш форум вдоль и поперек. Не говоря про изучение гташки/сампа/мта.

Board footer

Powered by FluxBB