Аргументы функции лучше размещать первыми командами сразу под !?FU(XX) или комментарием описания функции.
Если аргументы не x/y/z и более трёх, то лучше каждый с отдельной строки. Так можно дать описание наиболее сложным хотя бы.
objtype => objType, objsubtype => objSubtype (два слова в camelCase, subtype исключение, так как sub — приставка).
Если переменная логического типа «является проходимым», то за исключением некоторым случаев выразительнее именование
isYellowSquare (это жёлтая клетка?). Иногда глаголом в прошлом времени: checksPassed = TRUE (проверки пройдены).
WOG_OnPassThroughAllObjects — возможно, имелось в виду OnIterateAllMapObjects. «Пройтись по чём-то» чаще всего именуют IterateSomething.
Quote:!!VR(random:y):S0 T9;
Более ёмкая команда сразу устанавливающая значение переменной в случайное в заданном произвольном диапазоне:
Quote:!!SN:T^wog_109.objName^/?(objName:z);
Альтернатива для простых переводов по фиксированному ключу:
Quote:!!IF:M1/(title);
Оптимальный вызов:
Quote:!!HE(ANY_HERO)
Бывает, что -1 в контексте любой, но в данном нужен текущий.
Quote:(movePoints)<500
500 в константу !#DC(OPT_MARKET_OF_TIME_MIN_MOVEPOINTS) = 500
Это, вероятнее всего, именно скриптовое требование на наличие определённого числа очков хода.
Ниже под (iterator) имеется в виду secSkillPicInd, то есть индекс картинки вторичного навыка в массива.
или (numMatchedSecSkills) — счётчик подходящих вторичных навыков, который используется и для индексирования.
Просто iterator — слишком общее имя, чаще всего имеющее некомую объектную структуру.
Quote:!!if&(iterator)<(TRUE):;
; result - id вторичного навыка или -1
Quote:!#VA(arrayPicType:x) (arrayPicSubType:x) (firstItem:x) (result:x);
; init vars
!#VA(picType[8]:y) (picSubType[8]:y) (pType:y) (pSType:y) (currentItem:y);
; get pictures: type and subtype
Добавлю !#DC(NO_SKILLL) = -1;
Quote:!!en:;
; configure message
После окончания блока и комментария для дальнейших команд пустая строка.