Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обсуждение инженерного анализа
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Моды
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9
easy-to-kill
Думаешь тебе так прямо кто-то и скажет? Чертас-два.
Ну а если серьезно то надо формулировать свой вопрос поконкретнее.
Меня к примеру интересует как в вог организована интерпретация ерм команд.
gamecreator
Цитата(easy-to-kill @ 26 Sep 2007, 15:32)
Меня к примеру интересует как в вог организована интерпретация ерм команд.

hard coded
Чёртос-2 (Chortos-2)
Игродел, твой ответ немного не в тему. Потому что тема как раз таки про то, как игра устроена изнутри. Я вот знаю, что Сергей (который SergRoj) знает, в какой структуре данных хранится информация о существах. В принципе, я хочу собрать всё, что можно — начиная от структур данных и заканчивая адресами этих самых структур данных и функций.
gamecreator
Борн упорно молчит?
pokrik1
Господин Irh, а случаем не посещали темку Магические заклинания в WoG? Про заклинания что-нибудь знаете на таком же уровне? (где сидят, как поменять и т.д.)
Irh
Нет, с заклинаниями не разбирался.

sergroj, +

Добавлено ([mergetime]1191101640[/mergetime]):
Может, стоит сразу разбить тему на две? unsure.gif Данные и обсуждения... А то будет как в остальных - десять страниц, из них 9 - вопросы и обсуждения. Что тоже важно, но когда нужна инфа, искать неудобно.
Black Phantom
Цитата(sergroj @ 28 Sep 2007, 22:30)
Таблица монстров состоит из таких структур: (одинакова для игры и редактора карт)
Код
   Town: int;
   Level: int;
   SoundName: PChar; // 4 буквы, с которых начинаются звуки монстра
   DefName: PChar;
   Flags: int;
   Name: PChar;
   PluralName: PChar;
   Features: PChar; // (описание способностей)
   CostWood: int;
   CostMercury: int;
   CostOre: int;
   CostSulfor: int;
   CostCrystal: int;
   CostGems: int;
   CostGold: int;
   FightValue: int;
   AIValue: int;
   Growth: int;
   HordeGrowth: int;
   HitPoints: int;
   Speed: int;
   Attack: int;
   Defence: int;
   DamageLow: int;
   DamageHigh: int;
   Shots: int;
   Spells: int;
   AdvLow: int;  // ?
   AdvHigh: int; // ?


В файле h3wog.exe таблица стандартных монстров находится по адресу $2703B8, а новые монстры - $31C188.

Таблица артефактов (проверял только в редакторе)
Код
   ArTraits: array[0..6] of int;
   CantAdd: int;

ArTraits я не описывал, но он полностью соответствует столбцам файла ArTraits.txt
CantAdd - если не 0, то в Редакторе карт артефакт не показывается в списке тех, которые можно дать герою, поставить наградой за задание провидца и т.п.


А почему всё-таки никто кроме ZVS не умеет добавлять новых монстров, если структура EXE известна многим? Ведь есть же на форуме много толковых людей хорошо владеющих прграммированием на C++.
Berserker
Дело вовсе не в языке программирования. Подойдёт любой язык программирования, который разрешает прямую записаь и чтение из памяти. Чтобы встроить монстра, надо во многих местах ввести дополнительный код, чтобы игра корректно обрабатывала его. Остальное - к ZVS
easy-to-kill
У меня вопрос насчет пресловутого лимита существ. Кто-нибудь пытался найти ячейку памяти где храниться их кол-во?

Чертас-Два каким дизассемблером пользуешься? Можешь ссылку кинуть?
sergroj
Лимит существ нигде не хранится. Просто когда номер существа записан в один байт, он никак не может быть больше 255.

Цитата(Berserker @ 01 Oct 2007, 00:25)
Чтобы встроить монстра, надо во многих местах ввести дополнительный код, чтобы игра корректно обрабатывала его.

Точнее, не дополнительный код, а просто менять существующий в куче мест - везде (!), где используется кол-во монстров и, возможно, везде, где используется ссылка на таблицу монстров.
Чёртос-2 (Chortos-2)
Цитата(easy-to-kill @ 01 Oct 2007, 13:28)
Чертас-Два каким дизассемблером пользуешься? Можешь ссылку кинуть?
Пользуюсь двумя сразу — одним, встроенным в PE Explorer от компании Heaventools (в свое время я о нём узнал от Bourn’а), который полноценно дизассемблирует весь код, пытаясь эмулировать выполнение кода процессором, и другим, встроенным в Hiew, который дизассемблирует на ходу то, что влезает в буфер, зато позволяет код не только смотреть, но сразу и менять (в том числе, можно писать не только машинный код, но и ассемблерный). [Оба продукта платные, что немного осложняет их использование.] Хочу попробовать IDA, в первую очередь, сравнить его с поделкой Heaventools.
Bisik
У меня вот такой вопрос: для нового мода людского замка я хотел бы поменять абилки некоторым юнитам, поэтому не мог бы кто нибудь мне рассказать где это меняется? Я уже получил много ответов типа "это невозможно", но ведь разработчики ВоГа сделали нейтральный замок и добились полностью перепотрошить элементалей, поэтому, если кто нибудь из вас что нибудь об этом знает, плиз не утаивайте smile.gif
easy-to-kill
Цитата
Лимит существ нигде не хранится. Просто когда номер существа записан в один байт, он никак не может быть больше 255.

Так я и не спрашиваю где лимит монстров хранится. Я спрашиваю где хранится количество монстров.
Arseny
В этом байте и хранится их количество.
easy-to-kill
По какому адресу этот байт?
Irh
Где-то в коде программы - в нескольких местах и в различных видах - кроме того, оно влияет на расположение данных. Поэтому поменять его непросто. Точно сказать не могу.
Чёртос-2 (Chortos-2)
По просьбам трудящихся открываю отдельную тему для обсуждения инженерного анализа.
Docent Picolan
может сам анализ прилепить? тема-то важная
sergroj
Цитата(easy-to-kill @ 02 Oct 2007, 12:48)
Так я и не спрашиваю где лимит монстров хранится. Я спрашиваю где хранится количество монстров.

А про это написано ниже в том же посте smile.gif Это маленькая константа, поэтому всюду, где она используется, она подставлена своим значением. + для введения новых монстров, вероятно, потребуется менять адрес таблицы монстров, а это еще такая же куча адресов на таблицу.
Demiurg
Адрес (или указатель на) таблицы с героями подскажите плз.
Тоже относится к битве. Интересуют адреса копий героев. (Доступ к которым осуществляется через !!HE-10, !!HE-20)
Irh
Хм... Попробуй задать герою, скажем, первичные навыки, а потом найти эти числа с помощью Art Money или hex редактора. Значение первичного навыка хранится в одном байте.
gamecreator
нех редакторы вроде не умеют память редактировать
Irh
010 Editor
Irh
Цитата(Д'якон @ 17 Nov 2007, 17:00)
По указателю 0х004С2001  +224091

содержаться адреса с шагом 4 отвечающие за подсказку в гильдии
1. Хм... не совсем понял, это адрес в памяти? Я там как-то не нашел ничего похожего. lupa.gif idontno.gif
2. Прикол с русскими буквами заценил.
Д'якон
Вобщем я пока плохо разбираюсь в коде игры, поэтому обьясню в виде скрипта, который меняет заклы в гильдии вместе с описанием:
Код
!!FU1:Pх1/х2/х3; - где х1 - порядковый номер замка (как на карте), х2 - номер слота в гильдии, х3 - закл, который Вы бы хотели там видеть
!?FU1;
!!VRy1:S360 *x1;
!!VRy2:S4 *x2;
!!UN:C61871708/4/?y3;
!!VRy3:+428;
!!VRy4:Sy1 +y2 +y3;
!!UN:Cy4/4/x3;

Для ТЕ.
Д'якон
Причем в каждом уровне по 6 слотов. Т.е. если хотите менять 1 слот 2-го уровня - номер слота 7.
Irh
Ну... это сами заклинания в гильдии - их, кстати, грааль не меняет, просто стоят проверки при отображении и посещении гильдии героем. Ладно, спасибо.
Entuser
А как можно поменять exe навсегда? Я хочу поменять значение, отвечающее за число загружаемых строк в ZCRTARITS.txt, но его переписывает другая часть кода. Может, где-то храниться таблица(в файле) ответственная за правку кода?

Цитата
нех редакторы вроде не умеют память редактировать


Я пользуюсь OllyDbg - он умеет дизассемблировать и изм. код прямо в процессе редактирования, ставить брекпойнты на память и редактировать её.
Irh
Мой первый пост в инженерном анализе - кое-что есть про копирование таблиц; хотя там, по-моему, про 357.
А вообще, как я понял, указатель на таблицу существ хранится по адресу 0x6747B0 в памяти - но в этом направлении я не изучал, так что конкретнее сказать не могу.
Entuser
7AD78 - тут в екзишнеке храниться число 5 - после загрузки изменяется на 34(HEX) - влияет на число загружаемых строк в ZCRTRAITS.
mem 007012A4 / file 29C2A4 - изменяет это значение и много других

А как подключить свою библиотеку к h3wog?
Irh
Цитата(Entuser @ 21 Jan 2008, 11:46)
А как подключить свою библиотеку к h3wog?
Можно, например, как в теме Изменение Вида Города - заменить библиотеку rhook.dll на свою. Там, кажется, это описано в дистрибутиве, но только под ТЕ.
gamecreator
Можно поспрашивать Берсеркера.
Чёртос-2 (Chortos-2)
Цитата(Entuser @ 21 Jan 2008, 11:46)
7AD78 - тут в екзишнеке храниться число 5 - после загрузки изменяется на 34(HEX) - влияет на число загружаемых строк в ZCRTRAITS.
mem 007012A4 / file 29C2A4 - изменяет это значение и много других
Отпиши это, пожалуйста, в основную тему инженерного анализа.
Entuser
Попытался изменить значение 7AD78 (после того, как оно изменяется на 34) на другое (пробовал 33,35 - соответственно добавляя строки). Игра загружалась нормально, но при загрузке карты ошибка по адресу mem 00764678. Код в этом месте абсолютно не логичен:

Код
00774675 C3 - RETN
00774676 2BC3 - SUB EAX, EBX
00774678 8900 - MOV DWORD PTR DS:[EAX],EAX - здесь ошибка
0077467A CC - INT 3
0077467B CC - INT 3


Причем EAX равен единице. Но даже если бы не было этой ошибки, то все равно бы код уперся в бреакпойнт.

Прямых ссылок на эти адреса нет(типа call 00774678) , так что скорее всего был вызов непрямой (из библиотеки или относительный). Можно как-нибудь узнать, что за функция вызывалась перед этим? Кто-нибудь сталкивался с этой проблемой?
sergroj
Могу сказать только что это Славин код. А какая версия exe'шника?
Irh
ТЕ? Угадал? Просто весьма похоже на его защиту... Модифицировать код ехе нельзя - попробуй либо под 358, либо скачай в теме "Изменение вида города" патченный h3te Берсеркера - где-то ближе к концу темы. yes.gif
Чёртос-2 (Chortos-2)
Кто-нибудь может пояснить, что за адреса указал major? Не нахожу ничего такого, как ни пытаюсь над ними издеваться, ни в 3.58f, ни в «Полном собрании». sad.gif
sergroj
Это адреса в exe'шнике 3.58f. В самом файле. Адрес в памяти - на 400000 больше.
Чёртос-2 (Chortos-2)
Я понял: виртуальные адреса на самом деле на 465000 больше. smile.gif
Irh
Это зависит от сегмента, насколько я помню... а их известно два.
http://forum.df2.ru/index.php?showtopic=6803&pid=230542&st=3
Чёртос-2 (Chortos-2)
А ведь я это читал! banghead.gif
major
А все же как подключить библиотеку dll к h3wog? У меня проблема: нашел в нем пустую часть кода (может там и должно быть пусто) в районе 0031А55А и изменил так кое-что. В результате все, что я хотел стало работать, но появился жесткий баг - нельзя ни зайти, ни выйти из подземелья, пишет, что проход типа завален, будто нет другого туннеля. Так на всех картах. Пробовал в другой части кода ближе к концу - та же ерунда. НИД ХЕЛП.
gamecreator
может эта область внутри какой-то функции, а ты нарушил что-то там.
major
Вот отрывок кода

Код
0031A342   8D42 FF          LEA EAX,DWORD PTR DS:[EDX-1]
0031A345   5B               POP EBX
0031A346   C3               RETN
0031A347   8D42 FE          LEA EAX,DWORD PTR DS:[EDX-2]
0031A34A   5E               POP ESI
0031A34B   5F               POP EDI
0031A34C   5B               POP EBX
0031A34D   C3               RETN
0031A34E   8D42 FD          LEA EAX,DWORD PTR DS:[EDX-3]
0031A351   5E               POP ESI
0031A352   5F               POP EDI
0031A353   5B               POP EBX
0031A354   C3               RETN
0031A355   8D42 FC          LEA EAX,DWORD PTR DS:[EDX-4]
0031A358   5E               POP ESI
0031A359   5F               POP EDI
0031A35A   5B               POP EBX
0031A35B   C3               RETN
0031A35C   CC               INT3
0031A35D   CC               INT3
0031A35E   CC               INT3
0031A35F   CC               INT3
0031A360   FF25 A4007800    JMP DWORD PTR DS:[7800A4]
0031A366   0000             ADD BYTE PTR DS:[EAX],AL
0031A368   0000             ADD BYTE PTR DS:[EAX],AL
0031A36A   0000             ADD BYTE PTR DS:[EAX],AL
0031A36C   0000             ADD BYTE PTR DS:[EAX],AL

Дальше идут сплошные нули, а затем

Код
0031AFF8   0000             ADD BYTE PTR DS:[EAX],AL
0031AFFA   0000             ADD BYTE PTR DS:[EAX],AL
0031AFFC   0000             ADD BYTE PTR DS:[EAX],AL
0031AFFE   0000             ADD BYTE PTR DS:[EAX],AL
0031B000   EE               OUT DX,AL
0031B001   0D 0800B00B      OR EAX,0BB00008
0031B006   0800             OR BYTE PTR DS:[EAX],AL
0031B008   C40B             LES ECX,FWORD PTR DS:[EBX]
0031B00A   0800             OR BYTE PTR DS:[EAX],AL
0031B00C   FC               CLD
0031B00D   0D 0800000C      OR EAX,0C000008
0031B012   0800             OR BYTE PTR DS:[EAX],AL
0031B014   0E               PUSH CS
0031B015   0C 08            OR AL,8
0031B017   0022             ADD BYTE PTR DS:[EDX],AH
0031B019   0C 08            OR AL,8
0031B01B   00340C           ADD BYTE PTR SS:[ESP+ECX],DH
0031B01E   0800             OR BYTE PTR DS:[EAX],AL
0031B020   44               INC ESP

На функцию не особо похоже. Хотя может я и ошибаюсь.
Поэтому и нид хелп.
FakerNeo
Цитата
Дальше идут сплошные нули, а затем

Код
0031AFF8   0000             ADD BYTE PTR DS:[EAX],AL
0031AFFA   0000             ADD BYTE PTR DS:[EAX],AL
0031AFFC   0000             ADD BYTE PTR DS:[EAX],AL
0031AFFE   0000             ADD BYTE PTR DS:[EAX],AL
0031B000   EE               OUT DX,AL
0031B001   0D 0800B00B      OR EAX,0BB00008
0031B006   0800             OR BYTE PTR DS:[EAX],AL
0031B008   C40B             LES ECX,FWORD PTR DS:[EBX]
0031B00A   0800             OR BYTE PTR DS:[EAX],AL
0031B00C   FC               CLD
0031B00D   0D 0800000C      OR EAX,0C000008
0031B012   0800             OR BYTE PTR DS:[EAX],AL
0031B014   0E               PUSH CS
0031B015   0C 08            OR AL,8
0031B017   0022             ADD BYTE PTR DS:[EDX],AH
0031B019   0C 08            OR AL,8
0031B01B   00340C           ADD BYTE PTR SS:[ESP+ECX],DH
0031B01E   0800             OR BYTE PTR DS:[EAX],AL
0031B020   44               INC ESP

На функцию не особо похоже. Хотя может я и ошибаюсь.
Поэтому и нид хелп.

Это больше похоже на данные чем на код. Ткие участки кода в дизассемблере не смотрятся. Посмотри его в дампе. Больше похоже на какую-то структуру данных...


Вот те код где лично я вносил изменения

Код
0050CA4A  |> /8B43 20       /MOV EAX,DWORD PTR [EBX+20]
0050CA4D  |. |8BCF          |MOV ECX,EDI
0050CA4F  |. |8B14B0        |MOV EDX,DWORD PTR [EAX+ESI*4]
0050CA52  |. |E8 99010000   |CALL h3wog.0050CBF0
0050CA57  |. |47            |INC EDI
0050CA58  |. |46            |INC ESI
0050CA59  |. |83FF 0E       |CMP EDI,0E
0050CA5C  |.^\7C EC         \JL SHORT h3wog.0050CA4A
0050CA5E  |.  83C6 03       ADD ESI,3
0050CA61  |.  C745 FC 0E000>MOV [LOCAL.1],0E
0050CA68  |>  8B4B 20       /MOV ECX,DWORD PTR [EBX+20]
0050CA6B  |.  8B14B1        |MOV EDX,DWORD PTR [ECX+ESI*4]
0050CA6E  |.  8BCF          |MOV ECX,EDI
0050CA70  |.  E8 7B010000   |CALL h3wog.0050CBF0
0050CA75  |.  8B45 FC       |MOV EAX,[LOCAL.1]
0050CA78  |.  47            |INC EDI
0050CA79  |.  46            |INC ESI
0050CA7A  |.  48            |DEC EAX
0050CA7B  |.  8945 FC       |MOV [LOCAL.1],EAX
0050CA7E  |.^ 75 E8         \JNZ SHORT h3wog.0050CA68
0050CA80  |.  83C6 03       ADD ESI,3
0050CA83  |.  C745 FC 0E000>MOV [LOCAL.1],0E
0050CA8A  |>  8B53 20       /MOV EDX,DWORD PTR [EBX+20]
0050CA8D  |.  8BCF          |MOV ECX,EDI
0050CA8F  |.  8B14B2        |MOV EDX,DWORD PTR [EDX+ESI*4]
0050CA92  |.  E8 59010000   |CALL h3wog.0050CBF0
0050CA97  |.  8B45 FC       |MOV EAX,[LOCAL.1]
0050CA9A  |.  47            |INC EDI
0050CA9B  |.  46            |INC ESI
0050CA9C  |.  48            |DEC EAX
0050CA9D  |.  8945 FC       |MOV [LOCAL.1],EAX
0050CAA0  |.^ 75 E8         \JNZ SHORT h3wog.0050CA8A
0050CAA2  |.  83C6 03       ADD ESI,3
0050CAA5  |.  C745 FC 0E000>MOV [LOCAL.1],0E
0050CAAC  |>  8B43 20       /MOV EAX,DWORD PTR [EBX+20]
0050CAAF  |.  8BCF          |MOV ECX,EDI
0050CAB1  |.  8B14B0        |MOV EDX,DWORD PTR [EAX+ESI*4]
0050CAB4  |.  E8 37010000   |CALL h3wog.0050CBF0
0050CAB9  |.  8B45 FC       |MOV EAX,[LOCAL.1]
0050CABC  |.  47            |INC EDI
0050CABD  |.  46            |INC ESI
0050CABE  |.  48            |DEC EAX
0050CABF  |.  8945 FC       |MOV [LOCAL.1],EAX
0050CAC2  |.^ 75 E8         \JNZ SHORT h3wog.0050CAAC
0050CAC4  |.  83C6 03       ADD ESI,3
0050CAC7  |.  C745 FC 0E000>MOV [LOCAL.1],0E
0050CACE  |>  8B4B 20       /MOV ECX,DWORD PTR [EBX+20]
0050CAD1  |.  8B14B1        |MOV EDX,DWORD PTR [ECX+ESI*4]
0050CAD4  |.  8BCF          |MOV ECX,EDI
0050CAD6  |.  E8 15010000   |CALL h3wog.0050CBF0
0050CADB  |.  8B45 FC       |MOV EAX,[LOCAL.1]
0050CADE  |.  47            |INC EDI
0050CADF  |.  46            |INC ESI
0050CAE0  |.  48            |DEC EAX
0050CAE1  |.  8945 FC       |MOV [LOCAL.1],EAX
0050CAE4  |.^ 75 E8         \JNZ SHORT h3wog.0050CACE
0050CAE6  |.  83C6 03       ADD ESI,3
0050CAE9  |.  C745 FC 0E000>MOV [LOCAL.1],0E
0050CAF0  |>  8B53 20       /MOV EDX,DWORD PTR [EBX+20]
0050CAF3  |.  8BCF          |MOV ECX,EDI
0050CAF5  |.  8B14B2        |MOV EDX,DWORD PTR [EDX+ESI*4]
0050CAF8  |.  E8 F3000000   |CALL h3wog.0050CBF0
0050CAFD  |.  8B45 FC       |MOV EAX,[LOCAL.1]
0050CB00  |.  47            |INC EDI
0050CB01  |.  46            |INC ESI
0050CB02  |.  48            |DEC EAX
0050CB03  |.  8945 FC       |MOV [LOCAL.1],EAX
0050CB06  |.^ 75 E8         \JNZ SHORT h3wog.0050CAF0
0050CB08  |.  83C6 03       ADD ESI,3
0050CB0B  |.  C745 FC 0E000>MOV [LOCAL.1],0E
0050CB12  |>  8B43 20       /MOV EAX,DWORD PTR [EBX+20]
0050CB15  |.  8BCF          |MOV ECX,EDI
0050CB17  |.  8B14B0        |MOV EDX,DWORD PTR [EAX+ESI*4]
0050CB1A  |.  E8 D1000000   |CALL h3wog.0050CBF0
0050CB1F  |.  8B45 FC       |MOV EAX,[LOCAL.1]
0050CB22  |.  47            |INC EDI
0050CB23  |.  46            |INC ESI
0050CB24  |.  48            |DEC EAX
0050CB25  |.  8945 FC       |MOV [LOCAL.1],EAX
0050CB28  |.^ 75 E8         \JNZ SHORT h3wog.0050CB12


А вот сами изменения, с подгруженными библиотеками. Как видно высвободилось туева хуча куда

Код
0050CA41   > \56            PUSH ESI
0050CA42   .  57            PUSH EDI
0050CA43   .  33FF          XOR EDI,EDI
0050CA45   .  BE 02000000   MOV ESI,2
0050CA4A   >  8B43 20       MOV EAX,DWORD PTR [EBX+20]
0050CA4D   .  8BCF          MOV ECX,EDI
0050CA4F   .  8B14B0        MOV EDX,DWORD PTR [EAX+ESI*4]
0050CA52   .  E8 99010000   CALL h3te_cra.0050CBF0
0050CA57   .  47            INC EDI
0050CA58   .  46            INC ESI
0050CA59   .  83FF 0E       CMP EDI,0E
0050CA5C   .^ 7C EC         JL SHORT h3te_cra.0050CA4A
0050CA5E   >  83C6 03       ADD ESI,3
0050CA61   .  C745 FC 0E000>MOV DWORD PTR [EBP-4],0E
0050CA68   >  8B4B 20       MOV ECX,DWORD PTR [EBX+20]
0050CA6B   .  8B14B1        MOV EDX,DWORD PTR [ECX+ESI*4]
0050CA6E   .  8BCF          MOV ECX,EDI
0050CA70   .  E8 7B010000   CALL h3te_cra.0050CBF0
0050CA75   .  8B45 FC       MOV EAX,DWORD PTR [EBP-4]
0050CA78   .  47            INC EDI
0050CA79   .  46            INC ESI
0050CA7A   .  48            DEC EAX
0050CA7B   .  8945 FC       MOV DWORD PTR [EBP-4],EAX
0050CA7E   .^ 75 E8         JNZ SHORT h3te_cra.0050CA68
0050CA80   .  83FE 32       CMP ESI,32
0050CA83   .^ 7C D9         JL SHORT h3te_cra.0050CA5E
0050CA85   .  83FE 43       CMP ESI,43
0050CA88   .^ 7C D4         JL SHORT h3te_cra.0050CA5E
0050CA8A   .  83FE 54       CMP ESI,54
0050CA8D   .^ 7C CF         JL SHORT h3te_cra.0050CA5E
0050CA8F   .  83FE 65       CMP ESI,65
0050CA92   .^ 7C CA         JL SHORT h3te_cra.0050CA5E
0050CA94   .  83FE 76       CMP ESI,76
0050CA97   .^ 7C C5         JL SHORT h3te_cra.0050CA5E
0050CA99   .  E9 AE000000   JMP h3te_cra.0050CB4C
0050CA9E   .  4D 6F 6E 73 7>ASCII "Monstr.dll",0
0050CAA9   .  4D 6E 73 74 7>ASCII "MnstrStr",0
0050CAB2   >  60            PUSHAD
0050CAB3   .  9C            PUSHFD
0050CAB4   .  68 9ECA5000   PUSH h3te_cra.0050CA9E                 ; /FileName = "Monstr.dll"
0050CAB9   .  E8 B9522F7C   CALL kernel32.LoadLibraryA             ; \LoadLibraryA
0050CABE   .  68 A9CA5000   PUSH h3te_cra.0050CAA9                 ; /ProcNameOrOrdinal = "MnstrStr"
0050CAC3   .  50            PUSH EAX                               ; |hModule
0050CAC4   .  E8 D7E22F7C   CALL kernel32.GetProcAddress           ; \GetProcAddress
0050CAC9   .  FFD0          CALL NEAR EAX
0050CACB   .  9D            POPFD
0050CACC   .  61            POPAD
0050CACD   .  E9 CE600F00   JMP h3te_cra.00602BA0
0050CAD2   .  48 61 6C 6C 5>ASCII "HallStr",0
0050CADA      90            NOP
0050CADB      90            NOP
0050CADC      90            NOP
0050CADD      90            NOP
0050CADE      90            NOP
0050CADF   .  60            PUSHAD
0050CAE0   .  9C            PUSHFD
0050CAE1   .  8BD8          MOV EBX,EAX
0050CAE3   .  68 9ECA5000   PUSH h3te_cra.0050CA9E                 ; /FileName = "Monstr.dll"
0050CAE8   .  E8 8A522F7C   CALL kernel32.LoadLibraryA             ; \LoadLibraryA
0050CAED   .  68 D2CA5000   PUSH h3te_cra.0050CAD2                 ; /ProcNameOrOrdinal = "HallStr"
0050CAF2   .  50            PUSH EAX                               ; |hModule
0050CAF3   .  E8 A8E22F7C   CALL kernel32.GetProcAddress           ; \GetProcAddress
0050CAF8   .  90            NOP
0050CAF9   .  FFD0          CALL NEAR EAX
0050CAFB   .  9D            POPFD
0050CAFC   .  61            POPAD
0050CAFD   .- FF25 0BA95C00 JMP NEAR DWORD PTR [5CA90B]
0050CB03      90            NOP
0050CB04      90            NOP
0050CB05      90            NOP
0050CB06      90            NOP
0050CB07      90            NOP
0050CB08      90            NOP
0050CB09      90            NOP
0050CB0A      90            NOP
0050CB0B      90            NOP
0050CB0C      90            NOP
0050CB0D      90            NOP
0050CB0E      90            NOP
0050CB0F      90            NOP
0050CB10      90            NOP
0050CB11      90            NOP
0050CB12      90            NOP
0050CB13      90            NOP
0050CB14      90            NOP
0050CB15      90            NOP
0050CB16      90            NOP
0050CB17      90            NOP
0050CB18      90            NOP
0050CB19      90            NOP
0050CB1A      90            NOP
0050CB1B      90            NOP
0050CB1C      90            NOP
0050CB1D      90            NOP
0050CB1E      90            NOP
0050CB1F      90            NOP
0050CB20      90            NOP
0050CB21      90            NOP
0050CB22      90            NOP
0050CB23      90            NOP
0050CB24      90            NOP
0050CB25      90            NOP
0050CB26      90            NOP
0050CB27      90            NOP
0050CB28      90            NOP
0050CB29      90            NOP
0050CB2A      90            NOP
0050CB2B      90            NOP
0050CB2C      90            NOP
0050CB2D      90            NOP
0050CB2E      90            NOP
0050CB2F      90            NOP
0050CB30      90            NOP
0050CB31      90            NOP
0050CB32      90            NOP
0050CB33      90            NOP
0050CB34      90            NOP
0050CB35      90            NOP
0050CB36      90            NOP
0050CB37      90            NOP
0050CB38      90            NOP
0050CB39      90            NOP
0050CB3A      90            NOP
0050CB3B      90            NOP
0050CB3C      90            NOP
0050CB3D      90            NOP
0050CB3E      90            NOP
0050CB3F      90            NOP
0050CB40      90            NOP
0050CB41      90            NOP
0050CB42      90            NOP
0050CB43      90            NOP
0050CB44      90            NOP
0050CB45      90            NOP
0050CB46      90            NOP
0050CB47      90            NOP
0050CB48      90            NOP
0050CB49      90            NOP
0050CB4A      90            NOP
0050CB4B      90            NOP


И таких мест в героях валом. Успехов.
major
Да, не очень понятно.

Код
0050CA7E   .^ 75 E8         JNZ SHORT h3te_cra.0050CA68
0050CA80   .  83FE 32       CMP ESI,32
0050CA83   .^ 7C D9         JL SHORT h3te_cra.0050CA5E
0050CA85   .  83FE 43       CMP ESI,43
0050CA88   .^ 7C D4         JL SHORT h3te_cra.0050CA5E
0050CA8A   .  83FE 54       CMP ESI,54
0050CA8D   .^ 7C CF         JL SHORT h3te_cra.0050CA5E
0050CA8F   .  83FE 65       CMP ESI,65
0050CA92   .^ 7C CA         JL SHORT h3te_cra.0050CA5E
0050CA94   .  83FE 76       CMP ESI,76
0050CA97   .^ 7C C5         JL SHORT h3te_cra.0050CA5E
0050CA99   .  E9 AE000000   JMP h3te_cra.0050CB4C

Это чтоб сократить код как я понял?

Код
0050CA9E   .  4D 6F 6E 73 7>ASCII "Monstr.dll",0
0050CAA9   .  4D 6E 73 74 7>ASCII "MnstrStr",0
0050CAB2   >  60            PUSHAD
0050CAB3   .  9C            PUSHFD
0050CAB4   .  68 9ECA5000   PUSH h3te_cra.0050CA9E                ; /FileName = "Monstr.dll"
0050CAB9   .  E8 B9522F7C   CALL kernel32.LoadLibraryA            ; \LoadLibraryA
0050CABE   .  68 A9CA5000   PUSH h3te_cra.0050CAA9                ; /ProcNameOrOrdinal = "MnstrStr"
0050CAC3   .  50            PUSH EAX                              ; |hModule
0050CAC4   .  E8 D7E22F7C   CALL kernel32.GetProcAddress          ; \GetProcAddress
0050CAC9   .  FFD0          CALL NEAR EAX

А это подгружаются библиотеки? Типа Monstr.dll. А что такое MnstrStr? Я в библиотеках не очень.
FakerNeo
//Это чтоб сократить код как я понял?
именно

//А это подгружаются библиотеки? Типа Monstr.dll. А что такое MnstrStr? Я в библиотеках не очень.

Ты ж вроде подгружал библиотеку? MnstrStr - это название процедуры вызываемой из библиотеки
major
2FakerNeo

Цитата(FakerNeo @ 02 Jul 2008, 15:53)
Ты ж вроде подгружал библиотеку?

Нет не приходилось. Вот и хотел узнать, как это делать. Хотя наверно лучше найти/очистить часть кода, к которому бы игра не обращалась, и использовать его по своей нужде. Сможешь помочь?
sergroj
В конце секции кода Героев, как и во всех прогах, есть место. А для чего тебе?
major
Мне нужно поменять некоторые параметры монстров. Ну к примеру поставить регенерацию, количество контратак, выстрел облаком смерти и т.д. Не хочу использовать ЕРМ.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.