You are not logged in.
Итак, давно хотел сделать запуск двух гташек (Точнее сделал).
Но вот проблема! Только что заметил, что миссия грузится только на половину при запуске (В смысле две игры запускаются, но при начале игры, у одной из них загрузка останавливается ровно на середине). Заметил только сейчас, т.к наработкой никогда не пользовался.
Как я сделал запуск двух гта:
Рокстар юзнули простой 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 Попутный вопрос: при сворачивании игры, довольно часто курсор автоматом прилипает к левому верхнему углу экрана (это бесит
). Так вот, как думаете, все дело в тех же api? (SetCursorPos и тд).
{$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 @1P.S число 8 в начале опкода 0AB0 означает обратное действие опкода. Это работает и на других опкодах проверки чего-либо.
А почему не по нажатию? Просто при спавне?
Тогда:
{$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. Способов еще много.
BIOS только от твоей материнки, ну или максимум - от материнки твоей линейки моделей, но не советую. А на ноутбуках совсем другие биосы, там с GUI интерфейсом, но мне как-то удобнее стандартный.
А винды на ноуте и компе одинаковы?
т.к. я с неё ставил винду на ноут
Ха ха, недавно пробовал поставить тоже на ноут, в итоге: испробовал 5 дистрибутивов, ~4 способа записи, да и вообще кучу времени и нервов потратил; а все дело было из-за железа ноута.
На компе и на ноуте если врубить звук на полную и не слушать музон, то слышен раздражающий писк.
А к ноуту и компу ты подключаешь одни и те же динамики? Т.к почти у всех динамиков писк, если выставить звук на ~максимум. Хотя ты сказал, что при перетаскивании окон звук заглушается, тогда хз в чем проблема может быть.
Проблемы либо с флешкой, либо с самим пк, не думаю, что дело в прошивке биоса. Но попробуй наоборот поставить одну из самых ранних версий прошивки или даже самую первую. Если не прокатит, то для подтверждения того, что проблема в флешке/компе, можно попробовать вставить другую флешку и проверить, будет ли распознаваться она в бут девайсах.
Сомневаюсь, что мультиплеер хранит в нем все данные. И я не нашел ничего об этом пуле (кроме структуры из базы Листенера). Придется самому копаться(
Да уж. "Сложная" защита : D
Читай туториалы Нарвахи (На васме есть). Там все основы ассемблера в первых ~10 главах описаны. А далее в 10-57 главах очень интересный материал по крекингу идет... Ну и, конечно, есть еще сотни книг/сайтов, посвященных этой теме.
Я понимаю, что вопрос, который я задам, слишком прямолинеен, но он меня мучает продолжительное количество времени.
Вопрос: Существует ли такой кусок в памяти игры, который хранит в себе все координаты маркеров-целей (в сампе маркеры игроков обозначаются как "цели миссии")?
Я понимаю, что вы не занимаетесь модификациями мультиплеера и прочее, но как бы все же 
Мультиплеер тоже интересен для модифицирования. Как раз недавно даже исходники чуть более ранней версии отрыл...
Алсо,
не примите за проходимца-нуба с 0 постами. Я перечитал ваш форум вдоль и поперек. Не говоря про изучение гташки/сампа/мта.