(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
Спасибо 

 
 
Подскажите пожалуйста, где содержится указатель на 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_? Или надо где-то еще смотреть?
Code:
_MapItem_           struc ; (sizeof=0x26, mappedto_32)      ; XREF: .rdata:BuildDepends8/o
00000000 SetUp               dd ?                                    ; XREF: Hero_Show+B6/r
00000000                                                             ; Hero_Show+C8/w
00000004 Land                db ?                                    ; XREF: TryToDigGrail:loc_0040EDF7/r
00000004                                                             ; Cast_SummonBoat+8C/r ...
00000005 LType               db ?
00000006 River               db ?
00000007 RType               db ?
00000008 Road                db ?
00000009 RdType              db ?
0000000A _u1                 dw ?
0000000C Mirror              db ?                                    ; XREF: AdvMgr_MauseMoove+3D3/r
0000000C                                                             ; Hero_Show+A9/r
0000000D Attrib              db ?                                    ; XREF: Hero_Show+BE/w
0000000E _Bits               dw ?
00000010 _u2                 dw ?
00000012 Draw                dd ?                                    ; struct offset (_ODraw_)
00000016 DrawEnd             dd ?                                    ; struct offset (_ODraw_)
0000001A DrawEnd2            dd ?                                    ; struct offset (_ODraw_)
0000001E Type                dd ?                                    ; XREF: AdvMgr_MauseMoove+219/r
0000001E                                                             ; AdvMgr_MauseMoove+2A6/r ...
00000022 SubType             dw ?                                    ; XREF: AdvMgr_DwellingVisit+24/r
00000024 DrawNum             dw ?                                    ; XREF: AdvMap_DeleteObjectOnMap+D/r
00000026 _MapItem_           ends
 
 
Судя по исходникам ERM, _MapItem_ тут как-то используется, но логика мне не совсем понятна. Помогите пожалуйста разобраться 
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_ тут как-то используется, но логика мне не совсем понятна. Помогите пожалуйста разобраться 
Большую статью десятилетней давности про ключевые слова выкладывали даже во вконтакте. Рекомендую ознакомиться, тогда надеюсь будет понятно назначение первых 4-х байтов _MapItem_.
 
 
Я знаю эту статью, но до этого момента я, правда, не знал, что ключевое слово хранится именно в первых четырёх байтах. Спасибо за информацию! Собственно, что делать, мне теперь ясно, однако одну деталь я все-таки хотел бы уточнить: если номер объекта хранится в последнем поле, то почему тогда его нужно считывать из первого байта?
 
 (05.02.2021 16:42)Raistlin Wrote: [ -> ]если номер объекта хранится в последнем поле, то почему тогда его нужно считывать из первого байта?
В последнем - номер объекта, который моддерам не нужен, это не игровые данные (это для рендера). Внимательнее изучайте структуры (или используйте русские - я пользуюсь русскими).
В первом - сетап или по-нашему - ключевое слово, где находятся сами игровые настройки объекта (разработчики пожмотились на них, увы, поэтому там всё жестко лимитировано, но формат вполне изменяем, например в MoP 2.19 некоторые ключевые слова изменены, чтобы хранить в них больше информации).
 
 
Любопытно 
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...