Current time: 23.03.2024, 02:29 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Вопросы по моддингу
» (обсуждаем моддинг здесь)
Author Message
feanor Offline

Posts: 622
Post: #226

Quote:Можно ли добавить несколько новых почв в герои (так, чтобы у замка, оплота и сопряжения у каждого была своя трава, например)?
Предположим, нет.

Quote:И можно ли менять почву на клетках карты уже во время игры?
Да.

Quote:И какой формат у клеток почвы? То есть, в редакторе карт сделать почву размером 1 на X сделать невозможно, минимальный размер по любому направлению 2. Если менять вручную, это будет также?
Нет.

Quote:И что на деле происходит в тех клетках, где рисунок почвы идет по диагонали? Внутри там одно значение или два?
Нет. Одно, конечно, в дефы глянь.

//------------------------------------------------------
Quote:2) Как можно изменить параметры вторичных навыков?
Если без подробностей - вот здесь адреса http://forum.df2.ru/index.php?showtopic=6139

Quote:3) Началась игра, загрузилась карта. Как получить ее адрес, адрес клетки на карте?
У тебя чтоль чужих исходников нет?
09.04.2014 03:58
Find all posts by this user Quote this message in a reply
Arseniy Offline

Posts: 123
Post: #227

Quote:У тебя чтоль чужих исходников нет?
Исходников? О_о
Каких?
У меня есть дизассемблированная база под IDA, но во-первых, что-либо найти в ней очень затруднительно, если не знаешь базового адреса, где искать (то есть подходит только, чтобы что-то уточнять), во-вторых, как я понимаю, карта создается в динамической памяти и в иде ее быть не может.
За ответы спасибо, ссылка
Quote:http://forum.df2.ru/index.php?showtopic=6139
очень годная.


- Как я сегодня балагурю?
- Вы прекрасны, сир! (с)
09.04.2014 22:02
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 622
Post: #228

Quote:Исходников? О_о
Каких?
WoG, сергроевская база, HD где-то был, декомпилят по сергрожевской базе.

Quote:У меня есть дизассемблированная база под IDA, но во-первых, что-либо найти в ней очень затруднительно, если не знаешь базового адреса, где искать (то есть подходит только, чтобы что-то уточнять
если это готовая - по названиям ищи

Quote:во-вторых, как я понимаю, карта создается в динамической памяти и в иде ее быть не может.
вкладку Structs нажми в сергробазе.




Энивей:

Quote:3) Началась игра, загрузилась карта. Как получить ее адрес, адрес клетки на карте?

Адвенчаменеджер
Code:
#define o_AdvMgr (*(_AdvMgr_**)0x6992B8)
В нем
Code:
..
_GameMap_* map; //+92 (десятичное)
..

Или

Игроменеджер
Code:
#define o_GameMgr (*(_GameMgr_**)0x699538)

В нем:
Code:
..
  _MapHeader_ map_header; // +1F86Ch
  _GameMap_ Map; // +1FB70h
..

Теперь:

Code:
NOALIGN struct _GameMap_ : public _Struct_
{
  // Список шаблонов объектов карты.
  _List_<_Template_> Templates; // +0
  // Список объектов на карте.
  _List_<_Object_> Objects; // +16
  
  _byte_ f20[128]; // +32
  
  // Список лагерей героя на карте.
  _List_<_PlaceHolder_> PlaceHolders; // +160
  
  _byte_ fB0[32]; // +176
  
  // Адрес 3-мерного массива [L][Y][X], хранящего свойства объекта каждой клетки карты.
  _MapItem_* items; // +208
  // Размер карты (по-горизонтали и по-вертикали).
  _int_ size; // +212
  // Есть ли у карты подземный уровень.
  _bool8_ has_underground; // +216
  
  _byte_ fD9[3715]; // +217
  
  
  //normal
  // Получение клетки по координатам (из массива items).
  inline _MapItem_* GetItem(_int_ x, _int_ y, _int_ z)
  {
     return CALL_4(_MapItem_*, __thiscall, 0x4086D0, this, x, y, z);
  }
};

Или, если надо чистую UN:C реализацию - вот исходник этой 0x4086D0

Code:
//----- (004086D0) --------------------------------------------------------
int __thiscall GetMapItemPoByXY(int this, int a2, int a3, int a4)
{
  return *(_DWORD *)(this + 208) + 38 * (a2 + *(_DWORD *)(this + 212) * (a3 + a4 * *(_DWORD *)(this + 212)));
}

Теперь сама _MapItem_


Code:
NOALIGN struct _MapItem_ : public _Struct_
{
_dword_  setup; //+0
_byte_  land; // +4
_byte_  land_type;//+5
_byte_  river;//+6
_byte_  river_type;//+7
_byte_  road;//+8
_byte_  road_type;//+9
_word_  field_0A;//+10
_byte_  mirror;//+12
_byte_  attrib;//+13
_word_  field_0E_bits;//+14
_word_  field_10;//+16
_dword_  draw;//+18
_dword_  draw_end;//+22
_dword_  draw_end_2;//+26

_dword_  object_type;//+30

_word_  os_type; //+34
_word_  draw_num;//+36
}


Quote:1) Подскажите, как поправить Horde Growth. Оказалось, что этот параметр в CRTRAITS.TXT не влияет на игру. О_о

Code:
// 642E30: using guessed type int HordeBuildings[4];
..
// 6887F0: using guessed type _HordeBuildingData_ TownHordeBuildings[18];
Code:
00000000 _HordeBuildingData_ struc ; (sizeof=0x10)
00000000 Monster             dd ?
00000004 Count               dw ?                                    ; base 10
00000006 Level               dw ?                                    ; base 10
00000008 UpgMonster          dd ?
0000000C UpgCount            dw ?                                    ; = Level + 7
0000000E UpgLevel            dw ?                                    ; base 10
00000010 _HordeBuildingData_ ends
(This post was last modified: 09.04.2014 23:05 by feanor.)
09.04.2014 22:53
Find all posts by this user Quote this message in a reply
Arseniy Offline

Posts: 123
Post: #229

Огромное спасибо!
Буду разбираться.

UPDATE: Hordes заработали. Правда для чего нужно
using guessed type int HordeBuildings[4],
я не понял. Работает без него.


- Как я сегодня балагурю?
- Вы прекрасны, сир! (с)
(This post was last modified: 10.04.2014 23:30 by Arseniy.)
10.04.2014 11:51
Find all posts by this user Quote this message in a reply
Arseniy Offline

Posts: 123
Post: #230

#define o_GameMgr (*(_GameMgr_**)0x699538)
Я не понимаю, что делать с вот этим вот.
Вот мой код:
Quote:int ptr;
int result = ReadProcessMemory(_handle, LPCVOID(6919480), &ptr, 4, (SIZE_T*)&_readBytes);
int ptr2;
result = ReadProcessMemory(_handle, LPCVOID(ptr), &ptr2, 4, (SIZE_T*)&_readBytes);
int mapSize;
result = ReadProcessMemory(_handle, LPCVOID(ptr2 + 129904 + 212), &mapSize, 4, (SIZE_T*)&_readBytes);
Что я делаю не так?


- Как я сегодня балагурю?
- Вы прекрасны, сир! (с)
(This post was last modified: 11.04.2014 13:01 by Arseniy.)
11.04.2014 12:54
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 622
Post: #231

Code:
int advManager;
int result = ReadProcessMemory(_handle, LPCVOID(0x699538), &advManager, 4, (SIZE_T*)&_readBytes);
int gameMap;
result = ReadProcessMemory(_handle, LPCVOID(ptr+0x1FB70), &gameMap, 4, (SIZE_T*)&_readBytes);
int mapSize;
result = ReadProcessMemory(_handle, LPCVOID(ptr2 + 212), &mapSize, 4, (SIZE_T*)&_readBytes);

При этом, если делать из-под процесса игры, лучше использовать

Code:
int advManager = *(int*)0x699538;
int gameMap= *(int*)(advManager+0x1FB70);
int mapSize= *(int*)(gameMap+212);
или говнокодом
Code:
int mapSize = *(int*)((*(int*)((*(int*)0x699538)+0x1FB70))+212);

А еще лучше структуры, своеописанные или готовый заголовочник
(This post was last modified: 11.04.2014 16:43 by feanor.)
11.04.2014 13:59
Find all posts by this user Quote this message in a reply
Arseniy Offline

Posts: 123
Post: #232

Спасибо! Код игроменеджера у меня не заработал, заработал следующий через адвенчерменеджер:
Quote:int advManager;
ReadProcessMemory(_handle, LPCVOID(0x6992B8), &advManager, 4, (SIZE_T*)&_readBytes);
int gameMap;
ReadProcessMemory(_handle, LPCVOID(advManager + 92), &gameMap, 4, (SIZE_T*)&_readBytes);
int mapSize;
ReadProcessMemory(_handle, LPCVOID(gameMap + 212), &mapSize, 4, (SIZE_T*)&_readBytes);
Из процесса игры было бы делать проще, но я пока не разобрался с патчером, поэтому прописываю мод при запущенной игре из своего ехе.


- Как я сегодня балагурю?
- Вы прекрасны, сир! (с)
11.04.2014 17:41
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 622
Post: #233

Quote:Из процесса игры было бы делать проще, но я пока не разобрался с патчером
зачем патчер?
12.04.2014 01:18
Find all posts by this user Quote this message in a reply
Arseniy Offline

Posts: 123
Post: #234

Ну я использую конфигурацию Heroes 3 Complete Edition + HD Mod, как я понимаю, чтобы модифицировать ехе в данном случае, нужно api патчера использовать, чтобы потом все срослось.
Или в винде можно запустить мой код в процессе игры просто через виндовозное api?

У меня тут еще вопрос появился. Я пока не разобрался, как организовано хранение объектов (героев, замков, существ) и их привязка к карте.
В _MapItem_ есть следующие поля, которые могут иметь к этому отношения:
Dword SetUp; // +0
...
int OType; // +1E
Word OSType; // +22
Как я понял, в первое кидается указатель на нейтральных монстров, если они есть, иначе 0, правильно?
Про последние два в документации ничего толкового не написано и я не нашел какого-то обобщенного типа вроде Object, в котором может содержаться указатель на любой объект (героя, шахту и т.д.)
Есть тип _Types_ для карты, но как я понял, он для препятствий.
В общем, мне нужно из клетки на карте вытащить, стоит ли там монстр, герой, есть ли в ней вход в замок, шахту и получить указатель на этот объект. Для героя, как я понимаю, он потом должен быть приведен к _THero_/_Hero_, для замка к _CastleSetup_.
Или из карты это вытащить нельзя и надо отдельно просматривать список городов и героев?

По структуре _CMonster_
Quote:struct _CMonster_{
unsigned Number :12; // +00 число
unsigned Agression : 5; // +0C 1C-присоединяется, 0A-кровожадное
unsigned NoRun : 1; // +12 не убегает 3.58 fix
unsigned NoMore : 1; // +11 не растет
unsigned SetUpInd : 8; // +13 номер в настройке объектов (P1+44)
unsigned _u1 : 4; // +1B
unsigned HasSetUp : 1; // +1F имеет настройку структуры монстра
};
Непонятны смыслы полей SetUpInd, _u1, HasSetUp. Как из нее получить номер монстра, тот же, что используется CRTRAITS.TXT, а из него параметры монстра?


- Как я сегодня балагурю?
- Вы прекрасны, сир! (с)
(This post was last modified: 12.04.2014 06:52 by Arseniy.)
12.04.2014 06:37
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 622
Post: #235

Quote:Про последние два в документации ничего толкового не написано и я не нашел какого-то обобщенного типа вроде Object, в котором может содержаться указатель на любой объект (героя, шахту и т.д.)
Это тип и подтип объекта.

Quote:Ну я использую конфигурацию Heroes 3 Complete Edition + HD Mod, как я понимаю, чтобы модифицировать ехе в данном случае, нужно api патчера использовать, чтобы потом все срослось.
Совершенно не обязательно. Патчер, в общем-то, нужен только ради удобства написания хуков.
Дллки HD-мод может подгружать и так.
12.04.2014 16:11
Find all posts by this user Quote this message in a reply
Arseniy Offline

Posts: 123
Post: #236

Я понял, что Dword SetUp; // +0 относится только к тому, получают ли игроки за убийство монстра, если на этой клетке монстр, ресурсы.
Самый главный вопрос остается открытым : как получить указатель на тот объект, который лежит в конкретной клетке карты, если в _MapItem_ этого указателя нет?
Допустим, по _MapItem_ стало ясно, что в этой клетке лежит город сопряжение. Как получить указатель на именно то актуальное сопряжение, которое там находится?


- Как я сегодня балагурю?
- Вы прекрасны, сир! (с)
12.04.2014 19:28
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 622
Post: #237

Quote:Допустим, по _MapItem_ стало ясно, что в этой клетке лежит город сопряжение. Как получить указатель на именно то актуальное сопряжение, которое там находится?

Code:
inline _int_  FindTownIdByXYZ(_int_ x, _int_ y, _int_ z) {return CALL_4(_int_, __thiscall, 0x4BB530,this, x, y, z);} //номер города по координатам, от gameMgr. И таки да, в оригинале это делается перебором

inline _Town_*  GetTown(_int_ town_id) {return ((_Town_*)(*(_ptr_*)(((_ptr_)this) + 0x21614) + 360 * town_id));} //указатель по номеру
004BB5C0 - номер двеллинга по координатам
12.04.2014 23:56
Find all posts by this user Quote this message in a reply
Arseniy Offline

Posts: 123
Post: #238

Можешь мне скинуть именно те исходники, что у тебя?
У меня опенсорсные Сергея Роженко с ГитХаба : https://github.com/GrayFace/wog
В них нет никакой обобщающей структуры ни геймменеджера, ни адвенчерменеджера (есть только их упоминания), нет тех функций, которые ты скинул.
По тем ссылкам, которые ты приводил ранее, ссылки на исходники битые.


- Как я сегодня балагурю?
- Вы прекрасны, сир! (с)
13.04.2014 07:43
Find all posts by this user Quote this message in a reply
axignom99 Offline

Posts: 95
Post: #239

Доброго времени суток,направьте плз.Хочу заменить в башне големов на модели скаченных гномов,подскажите как это сделать не удаляя из игры големов,и где лежат файлы со статами и названиями существ и зданий.Спасибо .
(This post was last modified: 11.06.2014 20:07 by axignom99.)
11.06.2014 20:04
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #240

(11.06.2014 20:04)axignom99 Wrote:  где лежат файлы со статами и названиями существ и зданий.Спасибо .
советую глянуть http://forum.df2.ru/index.php?showtopic=16223

что до замены без удаления...
ставите ERA
и кидаете ссылку на ваших новых гномов...
сделаем вам мини-мод для удобной замены моделей големов (уточните потом каких именно заменять)
11.06.2014 20:33
Visit this user's website Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group