Wake of Gods Forum | Форум Во Имя Богов

Full Version: Вопросы по моддингу
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
(01.02.2021 18:42)Raistlin Wrote: [ -> ]Собственно, я даже догадался, в чем заключается проблема, но решить я ее не могу.

Копируй ассемблерный код на берсерк, если не получается написать его самостоятельно.

(01.02.2021 18:42)Raistlin Wrote: [ -> ]   "lea edx, [eax-1]" означает, что в edx запишется адрес из eax, а затем будет забрана единица, или же, что в edx запишется значение по адресу, хранящемся в eax, со смещением в -1? А может это будет значение по адресу eax, уменьшенное на 1? Подскажите пожалуйста, а то непонятно, как данная команда работает.

mov edx, eax
dec edx
(01.02.2021 21:03)XEPOMAHT Wrote: [ -> ]Копируй ассемблерный код на берсерк, если не получается написать его самостоятельно.
Со сменой цели и атакой все нормально, у меня не выходит построить маршрут до цели и вообще узнать, можно ли до нее добраться за определённое количество шагов.

(01.02.2021 21:03)XEPOMAHT Wrote: [ -> ]mov edx, eax
dec edx
Спасибо 132
Подскажите пожалуйста, где содержится указатель на def объекта? В структуре _MapItem_ я что-то данное поле не вижу...
(03.02.2021 01:45)Raistlin Wrote: [ -> ]Подскажите пожалуйста, где содержится указатель на def объекта? В структуре _MapItem_ я что-то данное поле не вижу...

MapItem.H3Vector<H3ObjectDraw> objectDrawing - a vector of DEFs to draw on this tile.

Если нужна загрузка, то уже здесь:

H3ObjectDetails.setup.

Само имя дефа для загрузки - в H3ObjectAttributes.defName.

Точнее лучше спрашивать у Кавалериста (он хорошо в этом разбирается).
Извините за глупый вопрос, но как туда добраться? Может быть Вам известен адрес массива соответствующих структур?
(03.02.2021 01:54)Raistlin Wrote: [ -> ]Извините за глупый вопрос, но как туда добраться? Может быть Вам известен адрес массива соответствующих структур?

Туда лучше не соваться. Структуры _Object_ и _Template_ являются техническими, для моддеров полезного там особо ничего нет (безопасно можно только считывать, все действия - содовскими функциями, либо изменением соответствующих текстовиков).
Спасибо, я понял.
Номер объекта на карте - это ведь последнее поле структуры _MapItem_? Или надо где-то еще смотреть?

Сама структура (Click to View)

Судя по исходникам ERM, _MapItem_ тут как-то используется, но логика мне не совсем понятна. Помогите пожалуйста разобраться Ab
Code:
int  v;
...
_MapItem_ *mip=GetMapItem2(MixPos);
_CMGarden_ *stp=(_CMGarden_ *)mip;
...
case 'N': // N# установить номер (5)
v=stp->Number;
Apply(&v,4,Mp,0);
stp->Number=(Word)v;
break;
...
// первые 4 байта для магического сада - настройка в 4C
struct _CMGarden_{ // type 0x37
  unsigned  Number  :  5;
  unsigned _u1      :  1;
  unsigned  ResType :  4; // всегда = 5
  unsigned  HasRes  :  1; // =1 - есть ресурс
  unsigned _u2      : 21;
};
(05.02.2021 15:20)Raistlin Wrote: [ -> ]Номер объекта на карте - это ведь последнее поле структуры _MapItem_?

Да.

(05.02.2021 15:20)Raistlin Wrote: [ -> ]Судя по исходникам ERM, _MapItem_ тут как-то используется, но логика мне не совсем понятна. Помогите пожалуйста разобраться Ab

Большую статью десятилетней давности про ключевые слова выкладывали даже во вконтакте. Рекомендую ознакомиться, тогда надеюсь будет понятно назначение первых 4-х байтов _MapItem_.
Я знаю эту статью, но до этого момента я, правда, не знал, что ключевое слово хранится именно в первых четырёх байтах. Спасибо за информацию! Собственно, что делать, мне теперь ясно, однако одну деталь я все-таки хотел бы уточнить: если номер объекта хранится в последнем поле, то почему тогда его нужно считывать из первого байта?
(05.02.2021 16:42)Raistlin Wrote: [ -> ]если номер объекта хранится в последнем поле, то почему тогда его нужно считывать из первого байта?

В последнем - номер объекта, который моддерам не нужен, это не игровые данные (это для рендера). Внимательнее изучайте структуры (или используйте русские - я пользуюсь русскими).

В первом - сетап или по-нашему - ключевое слово, где находятся сами игровые настройки объекта (разработчики пожмотились на них, увы, поэтому там всё жестко лимитировано, но формат вполне изменяем, например в MoP 2.19 некоторые ключевые слова изменены, чтобы хранить в них больше информации).
Любопытно Ab

Quote:Внимательнее изучайте структуры (или используйте русские - я пользуюсь русскими).
Русские структуры? А где их можно найти, если не секрет?
(05.02.2021 17:17)Raistlin Wrote: [ -> ]Русские структуры? А где их можно найти, если не секрет?

В исходниках MoP. Например мапитем:

Code:
struct MapItem
      контрольное_слово dd ?    ;0
      тип_почвы db ?        ;4
      подтип_почвы db ?        ;5
      тип_реки db ?        ;6
      подтип_реки db ?        ;7
      тип_дороги db ?        ;8
      подтип_дороги db ?    ;9
      db ?            ;A
      db ?            ;B
      Зеркало db ?        ;C
      маска_доступа db ?    ;D бит 1 - проходимость, 2 - water edge see 0x4FEA32, 10h - вход
      db 16 dup (?); H3Vector<H3ObjectDraw> objectDrawing - a vector of DEFs to draw on this tile
      тип_объекта dd ?        ;1E
      подтип_объекта dw ?    ;22 = _AdvMgr_.monsterCountBattle
      номер_отрисовки dw ?    ;24 = _AdvMgr_.monsterTypeBattle
ends

;Зеркало:
;tileH      0x01 -    tileV    0x02
;riverH        0x04 -    riverH    0x08
;roadH        0x10 -    roadV    0x20
;can dig    0x40
;animated    0x80 (river, water or lava terrain)
Благодарю, я понял.
Друзья, подскажите пожалуйста, как можно "триггернуть" определенное место на карте, координаты которого изначально неизвестны? Мне нужно что-то вроде "!?FU(OnLocalEvent %V1024/%V1025/%V1026)", но такой подход, к сожалению не работает, даже несмотря на то, что я заранее создал там событие с помощью UN:I...
Reference URL's