Размещаю изыскания
Master Of Puppets, по его же просьбе.
Особые земли (Реализация) Уже довольно давно художники рисуют новые "особые" земли, любители вставляют их в игру... а вот проблема задать какие бы то ни было свойства такой земле до сих пор остаётся. Единственный раз решение было некогда предложено Михаником, но решение это было - очень мягко говоря - неоптимальным.
Проблема, по сути, всего одна - !!TR никак не реагирует на новые "подстилки". Решив это, на основании полученного значения можно задать какие угодно свойства новой земле с помощью ERM. Это-то я и сделал.
В стандартной игре есть 8 никак не реализовавших себя типов объектов - 50, 139, 140, 141, 142, 144, 145, 146. Для них-то этот код:
ZVSE
!#UN:C5231917/4/683267817 C5231921/1/0 C7900936/4/261033101 C7900940/4/3611717252 C7900944/2/15871;
!#UN:C7900946/4/50; - проверка на тип 50
!#UN:C7900950/4/1180926991 C7900954/2/65495 C7900956/1/61;
!#UN:C7900957/4/139; - проверка на тип 139
!#UN:C7900961/4/1180206095 C7900965/2/65495 C7900967/1/61;
!#UN:C7900968/4/140; - проверка на тип 140
!#UN:C7900972/4/1179485199 C7900976/2/65495 C7900978/1/61;
!#UN:C7900979/4/141; - проверка на тип 141
!#UN:C7900983/4/1178764303 C7900987/2/65495 C7900989/1/61;
!#UN:C7900990/4/142; - проверка на тип 142
!#UN:C7900994/4/1178043407 C7900998/2/65495 C7901000/1/61;
!#UN:C7901001/4/144; - проверка на тип 144
!#UN:C7901005/4/1177322511 C7901009/2/65495 C7901011/1/61;
!#UN:C7901012/4/145; - проверка на тип 145
!#UN:C7901016/4/1176601615 C7901020/2/65495 C7901022/1/61;
!#UN:C7901023/4/146; - проверка на тип 146
!#UN:C7901027/4/1175880719 C7901031/4/3303669719 C7901035/4/16766789;
Впрочем, для "ЭРAфийцев" лучше всё оформить в виде бинарника для памяти:
4FD52D E9D6B92800; JMP 00788F08
788F08 8D0C8F; LEA ECX,DWORD PTR DS:[EDI+ECX*4]
788F0B 0F846E46D7FF; JE 004FD57F
788F11 3D32000000; CMP EAX,32
788F16 0F846346D7FF; JE 004FD57F
788F1C 3D8B000000; CMP EAX,8B
788F21 0F845846D7FF; JE 004FD57F
788F27 3D8C000000; CMP EAX,8C
788F2C 0F844D46D7FF; JE 004FD57F
788F32 3D8D000000; CMP EAX,8D
788F37 0F844246D7FF; JE 004FD57F
788F3D 3D8E000000; CMP EAX,8E
788F42 0F843746D7FF; JE 004FD57F
788F48 3D90000000; CMP EAX,90
788F4D 0F842C46D7FF; JE 004FD57F
788F53 3D91000000; CMP EAX,91
788F58 0F842146D7FF; JE 004FD57F
788F5E 3D92000000; CMP EAX,92
788F63 0F841646D7FF; JE 004FD57F
788F69 E9C445D7FF; JMP 004FD532
Ладно, код модифицирован. Проверяем: даём имя типу в objnames.txt, ставим на карту землю с этим типом. Загружаем карту. При клике или наведении мыши на новую землю подсказка работает корректно.
Ну гуд. Теперь пишем в скрипте:
!?CM;
!!CM:R P?v1/?v2/?v3;
!!TR1:G?y1;
!!IF:M0/4/^%Y1^;
Перезапускаем карту, щёлкаем ПКМ на нашей земле... всё верно?

BU:G не реагирует на новую землю, но это и не особо нужно. Для битвы нужно всего лишь получить её координаты (BA:P) и проверить землю в этих координатах с помощью того же TR.
Спасибо за внимание.