You are not logged in.
Pages: 1
 Программы для GTA SannyBuilder.com Forums_files/669.jpg)
Я немного переделал исходники, чтоб плеер работал в GTA 3 и VC. В текущей версии всё работает точно так же, как и в SA, а также добавлена возможность моментально завершить игру нажатием кнопки End.
Установка проста - radio.asi кидаем в корневую директорию игры, radio.ini в папку CLEO.
По умолчанию кнопки управления в radio.ini настроены так:
1 2 3 4 5 6 7 8 9 10 11 | [keys]key_on=123 //F12 - включить/выключитьkey_prev=120 //F9 - предыдущий трек в спискеkey_next=121 //F10 - следующий трек в спискеkey_pause=119 //F8 - паузаkey_shuffle=122 //F11 - режим перемешивания (треки будут играть в случайном порядке)key_end=35 //END - завершение процесса игры[playlist]C:\Users\13\Music\OST Midnight Club L.A\Electronic\Midnight Madness.mp3C:\Users\13\Music\GTA4 TBoGT OST\Vice City FM |
В разделе [playlist] указываются имена треков или папок с mp3.
Видео - http://www.youtube.com/watch?v=K9rulG_AeSY
Скачать - http://www.sendspace.com/file/7mwd3j
Скачать - http://www.sendspace.com/file/nonvcp
Last edited by Sergey81 (14-03-2011 22:58)
Offline
Сообщения сделать в принципе можно, я даже нашёл необходимые адреса, но функция ShowTextBox в SA отличается от аналогичной функции VC, я так и не разобрался как её правильно переделать в Delphi(может посмотрит кто?).
Я не смотрел, но скорее всего ты используешь тип PAnsiChar для передачи строки. Попробуй PWideChar (ну или какой там тип для юникода - я уже не помню). В Delphi, вообще говоря, принято использовать просто тип PChar или String, но в последних версиях Delphi этим типам соответствуют юникодные реализации, а в любимом многими Delphi 7 - ANSI реализации. Когда требуется делать какие-то низкоуровневые операции, на эти различия нужно обращать внимание.
Last edited by Alien (13-03-2011 22:14)
Offline
 Программы для GTA SannyBuilder.com Forums_files/669.jpg)
@Alien - Там загвоздка, насколько я могу судить, даже не в этом.
SanApi.pas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | unit SanApi;interface uses Windows;function KeyPressed(const Key: Smallint): Boolean; stdcall;var ShowTextBox: procedure(Text: PChar; Flag1, Infinite, Flag3: Byte); cdecl;procedure RemoveTextBox;implementationprocedure RemoveTextBox;begin ShowTextBox(Nil, 1, 0, 0);end;function KeyPressed(const Key: Smallint): Boolean; stdcall;begin Result := Hi(GetKeyState(Key))=$FF;end;begin if PLongInt(Ptr($008A6168))^ = $465E60 then begin @ShowTextBox := Ptr($00588BE0); end else begin @ShowTextBox := Ptr($005893B0); end;end. |
Для VC соответственно меняю адреса:
1 2 3 4 5 6 7 8 | if PLongInt(Ptr($00XXXXXX))^ = $XXXXXX thenbegin @ShowTextBox := Ptr($0055BFC0);end else begin @ShowTextBox := Ptr($0055BFE0);end; |
Вместо XXXXXX можно тот же 55BFC0 подставить, но не суть важно.
В SA функция ShowTextBox вот такая:
1 2 3 4 5 6 7 8 9 10 11 12 13 | .text:00588BE0 _?ShowTextBox proc near ; CODE XREF: _checkCheatcode+D3p.text:00588BE0 ; sub_43DC10+8p.text:00588BE0 ; sub_43DC60+23p.text:00588BE0 ; CGameLogic__update+EBp ....text:00588BE0.text:00588BE0 arg_0 = dword ptr 4.text:00588BE0 arg_4 = byte ptr 8.text:00588BE0 arg_8 = byte ptr 0Ch.text:00588BE0 arg_C = byte ptr 10h.text:00588BE0....text:00588D3C 000 retn.text:00588D3C _?ShowTextBox endp |
В VC же, такая:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | .text:0055BFC0 ; void __cdecl TextBox(wchar_t *, char, int permanent).text:0055BFC0 TextBox proc near ; CODE XREF: sub_430A60+12B6p.text:0055BFC0 ; sub_430A60+2E20p.text:0055BFC0 ; CPickup__Process+AFCp.text:0055BFC0 ; CPickup__Process+14DEp ....text:0055BFC0.text:0055BFC0 text = dword ptr 4.text:0055BFC0 arg_4 = byte ptr 8.text:0055BFC0 permanent = dword ptr 0Ch.text:0055BFC0.text:0055BFC0 000 cmp ds:replayStage, 1....text:0055C1EE 000 retn.text:0055C1EE TextBox endp |
Нужно видоизменить var ShowTextBox в третьей строке и потом все её вызовы, я правильно понимаю?
Last edited by Sergey81 (14-03-2011 02:18)
Offline
О чем я и говорю, в VC используются игровые тексты с шириной символа 2 байта, а в SA - 1 байт. Для SA такое объявление:
1 | ShowTextBox: procedure(Text: PAnsiChar; Flag1, Infinite, Flag3: Byte); cdecl; |
Для VC такое:
1 | ShowTextBox: procedure(Text: PWideChar; Flag1, Infinite: Byte); cdecl; |
Никогда не знал хорошо Delphi, но, погуглив, накопал такой код вызова:
1 | ShowTextBox(PWideChar(WideString('string')), 0, 0) |
PS: кажется, mp3-плеер, использовавшийся Seemann'ом несколько баженный.
Offline
 Программы для GTA SannyBuilder.com Forums_files/669.jpg)
@Alien - Ага, спасибо, всё получилось:
Доделаю поддержку гта 3 и разных версий экзешников, выложу с исходником.
PS: кажется, mp3-плеер, использовавшийся Seemann'ом несколько баженный.
Ну конечно не идеал, например фризы при загрузке трека, иногда бывают вылеты при переключении треков, но, учитывая что под 3 и вайс мп3 плееров насколько я знаю нет вобще, вполне сойдёт.
Я даже потестил ещё с десяток миссий на предмет ошибок IV hud под Vice City FM  Программы для GTA SannyBuilder.com Forums_files/smile.gif)
UPD. Всё доделал, выложил и обновил первый пост.
Offline
 Программы для GTA SannyBuilder.com Forums_files/1156.gif)
Кхе-кхе, начал я с того, что кинул в трёшку вайсовские файлы, но всё равно плеер завопил так, что кинулся выключать колонки (игра зависла, она вобще так делала, когда плееру "в песнях не везло") и вспомнил, почему его в Сане не использую - а можно использовать не системные настройки громкости, а игры, например?
Вобщем, ярлыки не умеет подхватывать, дал папку, как начинал одну и ту же песню орать, игра зависала... Думал, может много файлов (109) или папок (~6), выкинул папки, начинает на тот же песне и...
Ладно, из плейлиста выдернул около 20 песен, в ини файл вставил, стал прокручивать, на песне (музыка вся на другом разделе того же жёсткого) с русским названием зависло, но только игра, а не музыка! (кнопка END хорошо иногда всё-таки срабатывала!), выкинул из *.ini эту строчку, на
F:\Music\1_Sborka\Tiesto_vsMaxi_jazz-dance4life.mp3
снова, Вайс не смотрел, поздно уже было...
Offline
 Программы для GTA SannyBuilder.com Forums_files/669.jpg)
Странно, версия для GTA 3 внезапно стала вешать игру при нажатии F12. Хотя раньше работала. Зависание явно вызвано функцией показа текст бокса, но что ей опять не нравится я пока не разобрался.
Offline
 Программы для GTA SannyBuilder.com Forums_files/1937.jpg)
Странно, версия для GTA 3 внезапно стала вешать игру при нажатии F12. Хотя раньше работала. Зависание явно вызвано функцией показа текст бокса, но что ей опять не нравится я пока не разобрался.
А где у тебя функции обрабатываются в таймере?
Offline
что прописать в ини чтобы сборка осталась портабельной, чтобы плагин изначально считывал файлы с папки мп3 ?
И что насчёт поддержки онлайн радиостанций?
Last edited by DarkFlame (12-10-2014 08:35)
Offline
Pages: 1