XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Hard & Soft
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
_Red

offline
Опыт: 4,095
Активность:
Mod Launcher v2
собственно хочется переделать эту штуковину подробности о утилите читайте в теме
что хочется
утилита делает так:
  1. Warcraft пытается найти некий файл в архиве карты (*.w3x, *.w3m).
  2. Если его там нет, он ищет его в ВАШЕМ архиве.
  3. Если нет и там, то в war3patch.mpq
  4. Затем - в war3xlocal.mpq
  5. war3x.mpq
  6. war3.mpq
но хочется чтобы было так:
  1. Warcraft пытается найти некий файл в ВАШЕМ архиве.
  2. Если его там нет, он ищет его в архиве карты (*.w3x, *.w3m).
  3. Если нет и там, то в war3patch.mpq
  4. Затем - в war3xlocal.mpq
  5. war3x.mpq
  6. war3.mpq
исходники присутствуют, собственно как их допилить чтобы делалось то что надо?

upd
Путем беглого осмотра исходников выяснилось что подгрузка доп. архива происходит здесь
» код
;Этот файл содержит базонезависимый код, осуществляющий
;загрузку дополнительного MPQ в целевой процесс.
;При старте в lpBase он получает значение адреса,
;по которому его отобразили в целевой процесс.
;Кроме того, таблица функций должна быть заполнена
proc LoadMPQ,.lpBase
enter
 ;1. Получим адреса всех требуемых функций из Storm.dll
 ;int 3
 mov    esi,[.lpBase]                   ;читаем значение базы
 sub    esi,LoadMPQ                     ;вычисляем дельта-смещение
 
 lea    ecx,[esi+szStorm]
 push   ecx
 call   [esi+fGetModuleHandle]          ;получить хэндл Storm.dll
 
 invoke esi+fGetProcAddress,eax,NUM_OPENARCHIVE
 
 lea    ecx,[esi+szStorm]
 push   ecx
 push   0
 push   15
 lea    ecx,[esi+szMPQName]
 push   ecx
 call   eax                             ;открытие архива
 invoke esi+fExitThread,ebx             ;выход
 
;Встроенный набор данных
 fGetProcAddress        dd ?            ;ещё один указатель
 fGetModuleHandle       dd ?            ;и ещё указатель
 fExitThread            dd ?            ;и ещё указатель
 szStorm                db 'storm.dll',0
 szMPQName              dd 0,0,0,0,0,0,0,0,0
 LoadMPQ_End:
return
Логично что тут и нужно вносить правки, но какие? и здесь ли?
Старый 19.02.2011, 17:08
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
_Red, в общем не понимаю, зачем тебе это???
И честно, то ты промазал с выбором участка тут он только находит функции в storm.dll
Старый 19.02.2011, 17:30
_Red

offline
Опыт: 4,095
Активность:
alexprey, в некоторых картах звуковые эффекты и п.р. очень сильно пережаты, слушать такое слушать довольно... противно, собственно для подобного и затевается все
Старый 19.02.2011, 17:37
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
_Red, в общем кинь мне в лс полный исходник, может че найду
Старый 19.02.2011, 23:58
ScorpioT1000
Работаем
offline
Опыт: отключен
_Red, чем не устраивает просто копировать файл в папку игры ?
Старый 20.02.2011, 03:52
_Red

offline
Опыт: 4,095
Активность:
ScorpioT1000, тем что не прокатит, как уже написано варик в первую очередь берет файлы из карты,а потом уже из архивов
alexprey, исходник xgm.ru/forum/attachment.php?attachmentid=7401
Старый 20.02.2011, 23:50
ScorpioT1000
Работаем
offline
Опыт: отключен
причем тут архив ? *facepalm*
Старый 21.02.2011, 07:26
_Red

offline
Опыт: 4,095
Активность:
ScorpioT1000, при том
Смотри, в карте есть импортнутые файлы (например, музыка), я хочу чтобы варкрафт использовал не то что импортировано в карту, а то что укажу я, для такого способа вариант
ScorpioT1000:
просто копировать файл в папку игры
не подходит
Старый 21.02.2011, 12:07
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
_Red, не знаю зачем тебе это надо. Ну раз взялся тебе помочь. В общем глянул исходники.
Прога только заставляет вар просмотреть еще один архив после карты.
Вот в этом коде происходит загрузка доп. кода
Код:
invoke VirtualAllocEx,[pi.hProcess],ebx,4096,\
        MEM_COMMIT or MEM_RESERVE or MEM_TOP_DOWN,PAGE_EXECUTE_READWRITE
 mov    [hMem],eax
 invoke WriteProcessMemory,[pi.hProcess],eax,LoadMPQ,\
        LoadMPQ_End-LoadMPQ,dwTmp


alexprey добавил:
Тебе нужно только найти смещение где идет поиск файлов в карте

Отредактировано alexprey, 21.02.2011 в 18:37.
Старый 21.02.2011, 18:39
_Red

offline
Опыт: 4,095
Активность:
чтож, постараемся что то сделать, если что получится отпишу здесь
Старый 21.02.2011, 21:22
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
_Red, главное найти правильное смещение

alexprey добавил:
_Red, кст файл launcher.asm
Старый 21.02.2011, 21:29
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 11:25.