23

» WarCraft 3 / Проблема с созданием предмета

Похожие вопросы:

ответ
Андреич:
Все карты кампании с нестандартными обьектами надо запускать в игре через "Доп. Кампании".Хоть в JNGP, хоть в просто WE.
ответ
GearOfRage, в данном случае надо тестировать кампанию, а не саму карту. Открываешь через игру доп кампанию и играешь нужную миссию (для этого надо сделать все миссии временно доступными)
ответ
Виджитайзер норм, если правильно все делать. Ultimate Slk Opt быстрый, но надо держать ухо в остро, то будет карта с иероглифами.
AntiMage:
quq_CCCP, виджитайзер слишком медленный, Ultimate opt непонятный, +они оба ведь защишают карту, мне этого ненужно тоесть я хочу чтоб мои обьектные данные о войсках и.т.д обратно восстановились когда угодно, чтоб world editor мог открывать
А нах юному IceFrog'у понадобилась слк оптимизация? Тем более виджитайзер ничего не защищает, но чтобы работать с данными карты в редакторе достаточно распаковать их из карты в папку с варом и все, странно что у вас нет других проблем о которых бы следовало спросить на форуме.
ответ
логика такова
цикл от 1 до всех предметов в карте призван Установить для Каждого Item_Init[Cnt_Item_Init]
Значение взятое из SetItemUserData
для удобства занес эти Значения в Переменную типа Массив чтобы Оперировать с ними там где мне это нужно
и когда в инвентаре окажется Индекс этого предмета я буду знать что этот предмет мне нужен для Удаления
для этого есть функция
function F_H_Section_ReturnItem takes unit u, integer id returns nothing
set Cnt_Inv = 0
loop
exitwhen Cnt_Inv > Min_Inv
set ItemsInSlots[Cnt_Inv] = UnitItemInSlot(u, Cnt_Inv)
if LoadBoolean(H, StringHash("H"), StringHash("RemoveItems")) then
call SaveBoolean(H, StringHash("H"), StringHash("RemoveItems"), false)
call RemoveItem(ItemsInSlots[Cnt_Inv])
else
if GetItemTypeId(ItemsInSlots[Cnt_Inv]) == id then
call SaveBoolean(H, StringHash("H"), StringHash("RemoveItem"), true)
call RemoveItem(ItemsInSlots[Cnt_Inv])
endif
endif
set Cnt_Inv = Cnt_Inv + 1
endloop
set Cnt_Inv = 0
loop
exitwhen Cnt_Inv > Min_Inv
set ItemsInSlots[Cnt_Inv] = null
set Cnt_Inv = Cnt_Inv + 1
endloop
endfunction
достаточно одно SaveBoolean и готово
а дальше Создание предмета ПО Индексу расположенный в Item_Init

call SaveBoolean(H, StringHash("H"), StringHash("RemoveItems"), false)
призван удалить Все предметы из инвентаря Без проверки GetItemTypeId

либо использовать вариант который написал nazarpunk:

тут уже мне решать

function F_Pick_Item takes nothing returns nothing

set Cnt_Item_Init = 1
loop
exitwhen Cnt_Item_Init > Item_Init_Number_End
call SaveBoolean(H, StringHash("H"), StringHash("ItemUserDataSave"), true)
call SaveItemHandle(H, StringHash("H"), StringHash("ItemUserData"), GetManipulatedItem())

if GetItemTypeId(GetManipulatedItem()) == Item_Init[Cnt_Item_Init] then
set ItemUserDataMas[ItemUserDataAmount] = Cnt_Item_Init
endif

set Cnt_Item_Init = Cnt_Item_Init + 1
endloop

call F_H_Section_ItemUserData()

Я походу нашёл где ChatGPT обучается кодить...
я похож на ИИ?
даже мне стало интересно на что он способен :)

function F_H_Section_ItemUserData takes nothing returns integer
local item ItemUserData = LoadItemHandle(H, StringHash("H"), StringHash("ItemUserData"))
local integer I
set I = GetItemUserData(ItemUserData)
if LoadBoolean(H, StringHash("H"), StringHash("ItemUserDataSave")) then
call SaveInteger(H, StringHash("H"), StringHash("GetItemUserData"), I)
call SaveItemHandle(H, StringHash("H"), StringHash("ItemUserDataHandle"), ItemUserData)
call SaveInteger(H, StringHash("H"), StringHash("UserDataPlayerId"), GetPlayerId(GetItemPlayer(ItemUserData)))
call SaveInteger(H, StringHash("H"), StringHash("UserDataItemId"), GetItemTypeId(ItemUserData))
call SaveInteger(H, StringHash("H"), StringHash("ItemLevel"), GetItemLevel(ItemUserData))
call SaveBoolean(H, StringHash("H"), StringHash("ItemUserDataSave"), false)
endif
if ItemUserDataAmount < Size then
call SetItemUserData(ItemUserData, ItemUserDataMas[ItemUserDataAmount])
call SaveInteger(H, StringHash("H"), StringHash("ItemUserDataAmount")+ItemUserDataAmount, ItemUserDataMas[ItemUserDataAmount])
if LoadBoolean(H, StringHash("H"), StringHash("ItemUserDataIndicator")) then
set HRed[2] = GetRandomReal(0, 255)
set HGreen[2] = GetRandomReal(0, 255)
set HBlue[2] = GetRandomReal(0, 255)
call ItemAddIndicatorBJ(ItemUserData, HRed[2], HGreen[2], HBlue[2], 0)
endif
return I
else
call Text("|cFFFF0000ERROR: F_H_Section_ItemUserData - clear bad key|r")
set ItemUserDataAmount = Size - 1
return ItemUserDataAmount
endif
endfunction
constant integer Size = JASS_MAX_ARRAY_SIZE

спасибо за ответы, останусь на этом примере пожалуй

23

» WarCraft 3 / Герой: Hogger

Ваш ресурс не прошёл автомодерацию. Пожалуйста, внесите исправления или ожидайте проверки модератором.
Причина
Типы файлов: png и не содержат один из: mdl, mdx, fbx, obj, max, blend, mb, ma, 3ds, dae, dxf, usd, usdz, stl, stp, wrl, m2, zip, 7z, rar, tar, gz, apk, gzip, jar, lzip, tgz, tbz2, bz2, zipx, zz, dmg, ipg, z, iso
Your resource has not passed automoderation. Please make corrections or wait for the moderator to check.
Reason
File types are: png and don't contain one of: mdl, mdx, fbx, obj, max, blend, mb, ma, 3ds, dae, dxf, usd, usdz, stl, stp, wrl, m2, zip, 7z, rar, tar, gz, apk, gzip, jar, lzip, tgz, tbz2, bz2, zipx, zz, dmg, ipg, z, iso
// CID2
23

» WarCraft 3 / Зрители

Похожие вопросы:

ответ
зрители и обсы не взаимодействуют ни с какими триггерами, они вне игры
ответ
GoJustGo, зрители это и есть те самые 2 игрока, просто в лтд за них компы, а если есть зрители, то они играют роль ботов, так же в доте.
ответ
Ну если взять стандартное мили 1х1, где обычно катки длятся 10-15 минут, то думаю афк на 2 минуты уничтожит игрока на первых 10 минутах. Если катка затянулась на полчаса, то афк 5-10 минут может уничтожить игрока. Если игра затянулась на 10 часов, то думаю, часок можно и поафкашить.
Вот тут афк на 6.5 часов было норм для игроков
Так что все зависит от игры, геймплея, условий, где это критично а где нет. Может быть у тебя будет не конкретное число минут для определения афк и передача войск союзнику, а прогрессирующая шкала, чем дальше катка тем дольше можно быть афк, ибо самая жара действий обычно происходит на старте-середине игры.
И я не уверен, что стоит кикать игрока, можно просто передать контроль союзникам, пока он не вернется. Но это уже твоя авторская идея и система, как посчитаешь правильным для своей карты.

И да, АФК - от англ. AFK = Away From Keyboard, что в переводе отошел от клавиатуры.

23

» WarCraft 3 / Проблема с тестом карты

Похожие вопросы:

ответ
Даже так не хочет работать. Я добавляю игрока и сразу же вызываю функцию.

нельзя делать call DestroyForce
или call RemoveRect после этого ты их ни разу не сможешь юзнуть даже указав новую переменную
Как видишь выше, дело не в этом. Да и не уничтожал я их.

Может она просто не работает в массиве?...

Закрою вопрос и перефразирую для понимания.

23

» WarCraft 3 / Изображение

Похожие вопросы:

ответ
JIEGEND, в смысле как, фотошоп тебе для чего?


ответ
Как я понимаю, тебе подойдет создание фрейма с какой-нибудь картинкой (иконкой)
Для примера могу посоветовать ресурс от Bergi
LUA, Reforged Варкрафт, если что.
В частности если подойдет, то попробуй поиграться со значением BlzFrameSetAbsPoint(), а точнее с параметрами x и y.
ответ
Создай изображение размером 256x256. Конвертируй его в формат TGA. Переименуйте в war3mapPreview.tga и загрузите в карту, в карте уберите путь war3mapimported
ответ
WellDoneTrooper, если используешь более поздние версии, 1.27, 28 и тд, могут выскакивать свои приколы.

23

» WarCraft 3 / ИИ героев

Похожие вопросы:

ответ
Совсем зазнались вы ребята. Вы чё совсем оборзели засерать пользователей !
Q/A для того и создан !
Не хочешь отвечать, молчи.
Учи то, учи это.
Я про конкретную наработку спросил. Зазнались, и обленились. Этим всё сказано...
ответ
WW перестаёт становиться DIS, когда у героя более одной абилки WW
типа что бы ты мог активировать другой, пока работает первый... но разблокировка идёт на все сразу (и на сам себя тоже)
ответ
за дальность выбора героя магазином отвечает способность магазина - выбор героя, выбор воина и пр. тобы настроить, смотрите в настройках абилы
ответ
Extremator предлагает делать переключение через выделения таверн через триггеры. Выделение с одной снял, выделение на другую переключил.

Хоттаб, предлагаю другой вариант - ОДНУ таверну со всеми героями. пример с итемами, там переключение система 14 верс
есть пример, тоже самое можно сделать например для героев. По идее можно всех-всех героев заранее забить в таверну. Так можно сделать ОДНУ таверну со всеми героями, но с переключением списков. Так можно сделать, это надо в РО забить всех героев в таверну, если не получается пробуйте через клавишу Shift. Но будет отображаться только первые 10-12, остальные не вместятся на панеле. Поэтому надо разбить героев на списки.
Можно спрятать всех героев, кроме определенных героев, находящей на первой странице. А когда нажимаешь, то прячешь для игрока одних героев на 1 странице, и показываешь других героев на след странице.

как прятать героев вот ссылка когда задаешь лимит обучения данного типа ноль, то иконка этого героя исчезает. прячешь одних. разблокируешь других.
ответ
Тригером выдавать на время указанный тип боевой еденицы (твоего героя)
Через время его убивать, разве не очевидно)))?

23

» WarCraft 3 / Невосприимчивость к аурам

Похожие вопросы:

ответ
Еще раз, 'Aams' - щит от магии, он дает маг имун и только. 'Aam2' - нейтрализует урон от магии, при этом в цель можно применять заклинания, обрати внимание там другой бафф.

23

» WarCraft 3 / Вариации моделей юнита.

Похожие вопросы:

ответ
Вписываешь Alternate в РО в пункт "нужная анимация"
ответ
Для каждого дерева нужны три модели: обычная, неактивная (с названием Doodads\Terrain\AshenTree\AshenTree0S.mdx, например) и неактивная разрушенная (Doodads\Terrain\AshenTree\AshenTree0D.mdx). У неактивных моделей должна быть только одна анимация — Stand. У первой — только деревце, у второй — только пенёк, соответственно.
Когда с деревом никто не взаимодействует, отображаются неактивные модели. Ты их не заменил, потому такая вот фигня.
Как сделать полноценно работающие деревья с моделями, не заменяющими стандартные, я не знаю. Возможно, никак.
ответ
Мб оно связано с морфом, или с какими то параметрами заклинания - в доте аватар превращал тинкера в танк..
Можно попробовать морфнутся в альтернативного тинкера скиллом 'Aave' - превратится в сфинкса, тогда он навсегда останется тинкером в ульте.
ответ
В редакторе скелета
ответ
Не должно так критовать. А ты добавлял юнитов в unit ui slk и unit abilities slk? Туда тоже надо добавлять.
Ещё желательно править не neutral unit string, а human unit string или orc unit string.
Кроме того, надо править human unit func. txt или orc unit func. txt
Далее: custom v0 и melee v0 не обязательно править, достаточно добавить файлы в папку units архива и в папку custom v1.
просто непонятно, зачем делать юнитов для версии Roc

23

» WarCraft 3 / Карта не запускается

Похожие вопросы:

ответ
SirDragdord, никак, последние патчи баганые, там много чего не работает, играть там не вочто, хотите поиграть - 1.26а к вашим услугам, старшие патчи вара только для ознакомления и обучения, пока не вышел рефордж там нечего делать.
ответ
XGM Bot:
Похожие вопросы:

ответ
Кажется проблему решили, ответ крылся в текстурах, скорее всего в типе сжатия Sequental JPEG при пресохранени с другим типом сжатия (Пересохранил текстуры в тга и обратно в блп) - проблема решилась (По крайней мере сейчас так кажется).
Из чего могу предположить, то при определенных обстоятельства Варик или система неадекватно воспринимает текстуры с этим типом сжатия и выпадает
ответ
Чувак, ты JASS API хоть 1 сек смотрел?
Что за trig?, что за c?
	local trigger trig = CreateTrigger()
У тебя переменные не объявлены, а ты пытаешься к ним обратится, ясно что выдаст ошибку.
ответ
vovana123, на данный момент штатный телепат в отпуске
дождитесь его возвращения либо сообщите всю необходимую информацию, а именно:
  1. версия war3 на старом компьютере
  2. версия на новом компьютере
  3. используется ли в картах рб/мемхак
  4. настройки графики в обоих war3
  5. карта которая не запускается

ответ
На айкапе если играете? Кикает антихак, нужно скрывать мемхак, это умеет делать анрайз. И другие, кто активно юзает мемхак в своих проектах.
ответ
РБ был запрещен в определенный момент. Поэтому эти старые карты не работают на 1.26

23

» WarCraft 3 / Сделайте наработку.

Похожие вопросы:

ответ
Создаем целочисленную переменную.
В редакторе тригеров:
Действия: Время суток становится 6 утра
Условия: Ставим если надо
Действия:
Установить переменная + 1
Вывести текст на экран наша переменная
ответ
пиши в тему для заказов
здесь только вопросы
ответ
Сделал за 5 минут не тестировал
library RPGText
    globals
        private unit array s
        private real array d
    endglobals
    
    function displayTextExp takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local unit u = s[GetHandleId(t)]
        local real r = d[GetHandleId(u)]
        
        // дальше уже можно шаманить с текстом
        
        
        // Очишаем утечки
        call DestroyTimer(t)
        set u = null
        
        // А также очистка массива 
        //
        //
        //
    endfunction
    
    function createText takes unit u, real r, code c returns nothing
        local integer i =  GetHandleId(u)
        local timer t 
        
        if d[i] == 0 then
            set t = CreateTimer()
            
            // Записиваем значение
            set s[GetHandleId(t)] = u
            set d[i] = r 
            
            call TimerStart(t, 0.03, false, c)
            set t = null
        else
            set d[i] = d[i] + r // Увеличивает число
        endif
        
        set u = null
    endfunction
endlibrary
ответ
~8gabriel8:
Слева есть панель WARCRAFT 3, а там кнопка Добавить ресурс
ответ
Такую систему сделать можно, но через создание локальных (через локальные переменные) триггера входа в область, области, таймера и принудительной смены координат входящего в область юнита, после проверки на владельца юнита, с добавлением спецэффектов в точке входа и в точке перемещения. После истечения таймера удалить область, таймер и триггер. Получится временный портал, работающий на опрелеленных юнитов. Такая система будет MUI, но её не получится сделать с помощью только GUI... придётся кодить

23

» WarCraft 3 / Undead Doodad Pack

Ваш ресурс не прошёл автомодерацию. Пожалуйста, внесите исправления или ожидайте проверки модератором.
Причина
Число вставленных изображений: 0, а требуется не менее 1
Your resource has not passed automoderation. Please make corrections or wait for the moderator to check.
Reason
Count of inserted images is: 0, but required not less than 1
// CID3
23

» WarCraft 3 / Как обнулить данный тип переменной

Похожие вопросы:

ответ
Нашёл систему, где звук передаётся в таймер, который истекает через 0 секунд. В результате один и тот же звук может проигрываться несколько раз без всяких проблем. В инетике пишут мол это такой баг движка.
ответ
Юнитов поднимает тогда же, когда и опускает, потому что я удаляю их из DedG[3], но забываю удалить из группы снарядов, таким образом, к тем кто попал под падение, уже навечно задействован акт снарядов(опускание), пока они в DedG[3]
ответ
похоже более всего на мусор, попадающий в память откуда-то извне. Обычно пропущенная строка автокаста такой фигней страдает. Нельзя точно сказать, нужно менять поля и смотреть. К счастью, описания можно менять и локально, не перепаковывая карту
ответ
Вопрос в том, что мне делать с ней при каждом новом присвоении.
Ничего
я не могу понять, глобальная она или локальная
Почитайте про локальные переменные. Статьи тоже будут полезны.
Не знаю, не понимаю, что лучше, или оба, но в какой последовательности?
Я тоже ничего не понимаю, когда не вижу кода.

23

» WarCraft 3 / области

Похожие вопросы:

ответ
можно задать постоянную музыку при входе юнита в область.
А выключать её по событию "юнит покидает область".
Они же рядом события эти, чего усложнятьв сё.
ответ
Aльфонс, можно же изображение в комментарий вставлять.
ответ
Ну, только массивами. У тебя просто нет бд, где прописаны области.
Либо, вы берете записываете бд:
R - массив областей rect, это прямокгольные области rectangle
В триггере инициализайии прописываешь все массивы:
R [1] = область 0001
R [2] = область 0002
R [3] = область 0003
Когда нужно, создать юнита в ранд точке в R [ random от 1 до 3]
Другой вариант. Есть только регион Region, но там не помню как работает. В него можно засунуть несколько rect. Есть функция добавления области в регион. Но аот применять этот регион сложна. Я помню есть функция, поищи: рандомная точка в регион. Ты можешь сразу спавнить в рандом точке. К сожалению, не нашел нв хигаме GetRandomPointInRegion()
ответ
Правда с 1.26а вроде были какие-то косяки с этими картинками, и мб даже лучше будет моделька кастомная (и проще).

23

» WarCraft 3 / Неизвестная ошибка

Похожие вопросы:

ответ
Просто используй не рынок а любой другой юнит со способностью "продажа предметов" и чекни.
кстати идея то годная, насчёт рынка как комод для переодевания.
ответ
Эта проблема вызывается физическими повреждениями железа, как я нагуглил
Детали так сходу не скажу, но SFile.cpp - кусок storm.dll, вроде как обработчик строк
ответ
  1. к глобалкам созданным через гуи надо дописывать udg_
udg_ab
  1. округли вниз переводом в целое с помощью R2I
... + I2S(R2I(damage)) + ...
ответ
Был недавно вопрос. Можно поставить дистанцию получения автоприказа на 0 или дать классификацию Рабочий.

23

» WarCraft 3 / Вопрос по триггерам

Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
Создай новый триггер
событие- Боевая единица входит в нужную область (A Units enters MYREGION)
условие - Боевая единица - Мой Герой (Unittype или Unit Comparison /+ Player comparison)
действие - Победа (Игра-Victory)
Предварительно создай область MYREGION
ответ
В Lua есть таблицы, которые можно использовать как массивы. Читайте документацию Lua.
ответ
Удалить дебафф в момент отлова урона. Его продолжительность не имеет в таком случае никакого значения.
В версии 1.31 можно проверить тип получаемого/наносимого урона. Урон типа NORMAL всегда идет от атаки.
ответ
Set mana = get mana + 1
Если тебе текущее значение поменять
Это как поставить целых 2? У меня только так получается))
Вместо 1.00 кликни на значение и найди параметр "Arifmetic"/"Arithmetic" или "Арифметика", если русифицирован редактор.
Там поставь вместо value + 1 то, что выше сказал Borodach.

23

» WarCraft 3 / Ошибка

Похожие вопросы:

ответ
Но вот что может приводить к мгновенному крашу при запуске... я даже не догадываюсь -.-
Есть мнение, что другие триггеры.
ответ
Артилерия - не годится для героев и для тех кто может иметь орбы, иначе игра падает.
Выбери - Снаряд Взрыв, а чтобы можно было стрелять по местности, сделай абилку из канала и триггер который создает дамми юнита в указанном месте и приказывает герою стрелять по этому дамику.
ответ
Перенеси все строки, где личный сценарий local xxx = xxxx, в самый верх действий, перед All remove, и все ок будет
И да, саму All remove , без udg_, редактор будет ругать как необъявленную, либо сделай её тоже как local

23

» WarCraft 3 / влияние ауры на здание

Похожие вопросы:

ответ
Gerych, сюда тоже можно но вопрос будет закрыт через неделю с момента последнего ответа
ну а вообще для таких вещей стоит создать бложик и там в качестве ресурса подобное спрашивать

23

» WarCraft 3 / Требуется помощь с триггером

Похожие вопросы:

ответ
Я сам разобрался с проблемой. Конечно тут две новые появились, но на них забью уже:
  1. ИИ не нравился герой, из-за него вообще никто не нанимался.
  2. ИИ посчитал, что улучшив главное здание, он лишается главного здания, а значит нужно его снова строить. То есть, например, улучшив ратушу до крепости, он считает, что ратуши больше нет и необходимо построить ещё одну. Потом он крепость улучшит до замка, посчитает, что разрушили крепость, улучшит до крепости ратушу№2, снова потеряет ратушу и построит уже третью.
ответ
Вот условие на проверку баффа. Но тут может быть проблема, если у тебя есть станящие способности, которые используют не этот бафф.
Но мой способ, предложенный выше, также должен работать, причём независимо от того, какой станящий бафф наложен.
ответ
Чисто для галочки:
Три года назад он мне уже писал.
Я ему поэтапно, с его "да/нет", сделал некий ряд изменений в скрипте карты.
По итогу я скинул ему карту, и он ответил мне - "Хорошо, я посмотрю и скину деньги"
С тех пор, он так ни разу и не написал...
Сейчас же, когда я ему об этом напомнил, он отвечает что-то типа "у меня нет переписки".
Я ему скопировал его же сообщения, от отвечает - "А, ну значит мне что-то не понравилось"
Имейте ввиду, кароче.
ответ
Sicre, только на 1 вопрос будем отвечать в этой теме, у тебя за убийство все пачки или за каждого юнита отдельный дроп?
Если за каждого, то по событию юнит определённого типа умирает, создвай предмет в точке смерти, можно также прописать шанс.
Если же ты работаешь с группой и даёшь общую награду за смерть группы, тогда надо группу создать, обозвать её например (пауки у фантана), добавить туда юнитов, и отслеживать смерть всей группы, ну и так будет каждый раз собственно

23

» WarCraft 3 / IssueTargetOrderById

Похожие вопросы:

ответ
Делаешь отлов ивентов или ищешь тут:
УКРАЛ ИЗ ИНТЕРНЕТА (id приказов)
library ORDER
globals
    //strange ones at bottom
    public constant integer OFFSET=851970
    
    public constant integer absorb=852529
    public constant integer acidbomb=852662
    public constant integer acolyteharvest=852185
    public constant integer AImove=851988
    public constant integer ambush=852131
    public constant integer ancestralspirit=852490
    public constant integer ancestralspirittarget=852491
    public constant integer animatedead=852217
    public constant integer antimagicshell=852186
    public constant integer attack=851983
    public constant integer attackground=851984
    public constant integer attackonce=851985
    public constant integer attributemodskill=852576
    public constant integer auraunholy=852215
    public constant integer auravampiric=852216
    public constant integer autodispel=852132
    public constant integer autodispeloff=852134
    public constant integer autodispelon=852133
    public constant integer autoentangle=852505
    public constant integer autoentangleinstant=852506
    public constant integer autoharvestgold=852021
    public constant integer autoharvestlumber=852022
    public constant integer avatar=852086
    public constant integer avengerform=852531
    public constant integer awaken=852466
    public constant integer banish=852486
    public constant integer barkskin=852135
    public constant integer barkskinoff=852137
    public constant integer barkskinon=852136
    public constant integer battleroar=852099
    public constant integer battlestations=852099
    public constant integer bearform=852138
    public constant integer berserk=852100
    public constant integer blackarrow=852577
    public constant integer blackarrowoff=852579
    public constant integer blackarrowon=852578
    public constant integer blight=852187
    public constant integer blink=852525
    public constant integer blizzard=852089
    public constant integer bloodlust=852101
    public constant integer bloodlustoff=852103
    public constant integer bloodluston=852102
    public constant integer board=852043
    public constant integer breathoffire=852580
    public constant integer breathoffrost=852560
    public constant integer build=851994
    public constant integer burrow=852533
    public constant integer cannibalize=852188
    public constant integer carrionscarabs=852551
    public constant integer carrionscarabsinstant=852554
    public constant integer carrionscarabsoff=852553
    public constant integer carrionscarabson=852552
    public constant integer carrionswarm=852218
    public constant integer chainlightning=852119
    public constant integer channel=852600
    public constant integer charm=852581
    public constant integer chemicalrage=852663
    public constant integer cloudoffog=852473
    public constant integer clusterrockets=852652
    public constant integer coldarrows=852244
    public constant integer coldarrowstarg=852243
    public constant integer controlmagic=852474
    public constant integer corporealform=852493
    public constant integer corrosivebreath=852140
    public constant integer coupleinstant=852508
    public constant integer coupletarget=852507
    public constant integer creepanimatedead=852246
    public constant integer creepdevour=852247
    public constant integer creepheal=852248
    public constant integer creephealoff=852250
    public constant integer creephealon=852249
    public constant integer creepthunderbolt=852252
    public constant integer creepthunderclap=852253
    public constant integer cripple=852189
    public constant integer curse=852190
    public constant integer curseoff=852192
    public constant integer curseon=852191
    public constant integer cyclone=852144
    public constant integer darkconversion=852228
    public constant integer darkportal=852229
    public constant integer darkritual=852219
    public constant integer darksummoning=852220
    public constant integer deathanddecay=852221
    public constant integer deathcoil=852222
    public constant integer deathpact=852223
    public constant integer decouple=852509
    public constant integer defend=852055
    public constant integer detectaoe=852015
    public constant integer detonate=852145
    public constant integer devour=852104
    public constant integer devourmagic=852536
    public constant integer disassociate=852240
    public constant integer disenchant=852495
    public constant integer dismount=852470
    public constant integer dispel=852057
    public constant integer divineshield=852090
    public constant integer doom=852583
    public constant integer drain=852487
    public constant integer dreadlordinferno=852224
    public constant integer dropitem=852001
    public constant integer drunkenhaze=852585
    public constant integer earthquake=852121
    public constant integer eattree=852146
    public constant integer elementalfury=852586
    public constant integer ensnare=852106
    public constant integer ensnareoff=852108
    public constant integer ensnareon=852107
    public constant integer entangle=852147
    public constant integer entangleinstant=852148
    public constant integer entanglingroots=852171
    public constant integer etherealform=852496
    public constant integer evileye=852105
    public constant integer faeriefire=852149
    public constant integer faeriefireoff=852151
    public constant integer faeriefireon=852150
    public constant integer fanofknives=852526
    public constant integer farsight=852122
    public constant integer fingerofdeath=852230
    public constant integer firebolt=852231
    public constant integer flamestrike=852488
    public constant integer flamingarrows=852174
    public constant integer flamingarrowstarg=852173
    public constant integer flamingattack=852540
    public constant integer flamingattacktarg=852539
    public constant integer flare=852060
    public constant integer forceboard=852044
    public constant integer forceofnature=852176
    public constant integer forkedlightning=852586
    public constant integer freezingbreath=852195
    public constant integer frenzy=852561
    public constant integer frenzyoff=852563
    public constant integer frenzyon=852562
    public constant integer frostarmor=852225
    public constant integer frostarmoroff=852459
    public constant integer frostarmoron=852458
    public constant integer frostnova=852226
    public constant integer getitem=851981
    public constant integer gold2lumber=852233
    public constant integer grabtree=852511
    public constant integer harvest=852018
    public constant integer heal=852063
    public constant integer healingspray=852664
    public constant integer healingward=852109
    public constant integer healingwave=852501
    public constant integer healoff=852065
    public constant integer healon=852064
    public constant integer hex=852502
    public constant integer holdposition=851993
    public constant integer holybolt=852092
    public constant integer howlofterror=852588
    public constant integer humanbuild=851995
    public constant integer immolation=852177
    public constant integer impale=852555
    public constant integer incineratearrow=852670
    public constant integer incineratearrowoff=852672
    public constant integer incineratearrowon=852671
    public constant integer inferno=852232
    public constant integer innerfire=852066
    public constant integer innerfireoff=852068
    public constant integer innerfireon=852067
    public constant integer instant=852200
    public constant integer invisibility=852069
    public constant integer lavamonster=852667
    public constant integer lightningshield=852110
    public constant integer load=852046
    public constant integer loadarcher = 852142
    public constant integer loadcorpse=852050
    public constant integer loadcorpseinstant=852053
    public constant integer locustswarm=852556
    public constant integer lumber2gold=852234
    public constant integer magicdefense=852478
    public constant integer magicleash=852480
    public constant integer magicundefense=852479
    public constant integer manaburn=852179
    public constant integer manaflareoff=852513
    public constant integer manaflareon=852512
    public constant integer manashieldoff=852590
    public constant integer manashieldon=852589
    public constant integer massteleport=852093
    public constant integer mechanicalcritter=852564
    public constant integer metamorphosis=852180
    public constant integer militia=852072
    public constant integer militiaconvert=852071
    public constant integer militiaoff=852073
    public constant integer militiaunconvert=852651
    public constant integer mindrot=852565
    public constant integer mirrorimage=852123
    public constant integer monsoon=852591
    public constant integer mount=852469
    public constant integer mounthippogryph=852143
    public constant integer move=851986
    public constant integer nagabuild=852467
    public constant integer neutraldetectaoe=852023
    public constant integer neutralinteract=852566
    public constant integer neutralspell=852630
    public constant integer nightelfbuild=851997
    public constant integer orcbuild=851996
    public constant integer parasite=852601
    public constant integer parasiteoff=852603
    public constant integer parasiteon=852602
    public constant integer patrol=851990
    public constant integer phaseshift=852514
    public constant integer phaseshiftinstant=852517
    public constant integer phaseshiftoff=852516
    public constant integer phaseshifton=852515
    public constant integer phoenixfire=852481
    public constant integer phoenixmorph=852482
    public constant integer poisonarrows=852255
    public constant integer poisonarrowstarg=852254
    public constant integer polymorph=852074
    public constant integer possession=852196
    public constant integer preservation=852568
    public constant integer purge=852111
    public constant integer rainofchaos=852237
    public constant integer rainoffire=852238
    public constant integer raisedead=852197
    public constant integer raisedeadoff=852199
    public constant integer raisedeadon=852198
    public constant integer ravenform=852155
    public constant integer recharge=852157
    public constant integer rechargeoff=852159
    public constant integer rechargeon=852158
    public constant integer rejuvination=852160
    public constant integer renew=852161
    public constant integer renewoff=852163
    public constant integer renewon=852162
    public constant integer repair=852024
    public constant integer repairoff=852026
    public constant integer repairon=852025
    public constant integer replenish=852542
    public constant integer replenishlife=852545
    public constant integer replenishlifeoff=852547
    public constant integer replenishlifeon=852546
    public constant integer replenishmana=852548
    public constant integer replenishmanaoff=852550
    public constant integer replenishmanaon=852549
    public constant integer replenishoff=852544
    public constant integer replenishon=852543
    public constant integer request_hero=852239
    public constant integer requestsacrifice=852201
    public constant integer restoration=852202
    public constant integer restorationoff=852204
    public constant integer restorationon=852203
    public constant integer resumebuild=851999
    public constant integer resumeharvesting=852017
    public constant integer resurrection=852094
    public constant integer returnresources=852020
    public constant integer revenge=852241
    public constant integer revive=852039
    public constant integer roar=852164
    public constant integer robogoblin=852656
    public constant integer root=852165
    public constant integer sacrifice=852205
    public constant integer sanctuary=852569
    public constant integer scout=852181
    public constant integer selfdestruct=852040
    public constant integer selfdestructoff=852042
    public constant integer selfdestructon=852041
    public constant integer sentinel=852182
    public constant integer setrally=851980
    public constant integer shadowsight=852570
    public constant integer shadowstrike=852527
    public constant integer shockwave=852125
    public constant integer silence=852592
    public constant integer sleep=852227
    public constant integer slow=852075
    public constant integer slowoff=852077
    public constant integer slowon=852076
    public constant integer smart=851971
    public constant integer soulburn=852668
    public constant integer soulpreservation=852242
    public constant integer spellshield=852571
    public constant integer spellshieldaoe=852572
    public constant integer spellsteal=852483
    public constant integer spellstealoff=852485
    public constant integer spellstealon=852484
    public constant integer spies=852235
    public constant integer spiritlink=852499
    public constant integer spiritofvengeance=852528
    public constant integer spirittroll=852573
    public constant integer spiritwolf=852126
    public constant integer stampede=852593
    public constant integer standdown=852113
    public constant integer starfall=852183
    public constant integer stasistrap=852114
    public constant integer steal=852574
    public constant integer stomp=852127
    public constant integer stoneform=852206
    public constant integer stop=851972
    public constant integer submerge=852604
    public constant integer summonfactory=852658
    public constant integer summongrizzly=852594
    public constant integer summonphoenix=852489
    public constant integer summonquillbeast=852595
    public constant integer summonwareagle=852596
    public constant integer tankdroppilot=852079
    public constant integer tankloadpilot=852080
    public constant integer tankpilot=852081
    public constant integer taunt=852520
    public constant integer thunderbolt=852095
    public constant integer thunderclap=852096
    public constant integer tornado=852597
    public constant integer townbelloff=852083
    public constant integer townbellon=852082
    public constant integer tranquility=852184
    public constant integer transmute=852665
    public constant integer unavatar=852087
    public constant integer unavengerform=852532
    public constant integer unbearform=852139
    public constant integer unburrow=852534
    public constant integer uncoldarrows=852245
    public constant integer uncorporealform=852494
    public constant integer undeadbuild=851998
    public constant integer undefend=852056
    public constant integer undivineshield=852091
    public constant integer unetherealform=852497
    public constant integer unflamingarrows=852175
    public constant integer unflamingattack=852541
    public constant integer unholyfrenzy=852209
    public constant integer unimmolation=852178
    public constant integer unload=852047
    public constant integer unloadall=852048
    public constant integer unloadallcorpses=852054
    public constant integer unloadallinstant=852049
    public constant integer unpoisonarrows=852256
    public constant integer unravenform=852156
    public constant integer unrobogoblin=852657
    public constant integer unroot=852166
    public constant integer unstableconcoction=852500
    public constant integer unstoneform=852207
    public constant integer unsubmerge=852605
    public constant integer unsummon=852210
    public constant integer unwindwalk=852130
    public constant integer vengeance=852521
    public constant integer vengeanceinstant=852524
    public constant integer vengeanceoff=852523
    public constant integer vengeanceon=852522
    public constant integer volcano=852669
    public constant integer voodoo=852503
    public constant integer ward=852504
    public constant integer waterelemental=852097
    public constant integer wateryminion=852598
    public constant integer web=852211
    public constant integer weboff=852213
    public constant integer webon=852212
    public constant integer whirlwind=852128
    public constant integer windwalk=852129
    public constant integer wispharvest=852214
    
    public constant integer scrollofspeed=852285
    public constant integer cancel=851976
    public constant integer moveslot1=852002
    public constant integer moveslot2=852003
    public constant integer moveslot3=852004
    public constant integer moveslot4=852005
    public constant integer moveslot5=852006
    public constant integer moveslot6=852007
    public constant integer useslot1=852008
    public constant integer useslot2=852009
    public constant integer useslot3=852010
    public constant integer useslot4=852011
    public constant integer useslot5=852012
    public constant integer useslot6=852013
    public constant integer skillmenu=852000
    public constant integer stunned=851973

    public constant integer instant1=851991      //?
    public constant integer instant2=851987      //?
    public constant integer instant3=851975      //?
    public constant integer instant4=852019      //?
endglobals
endlibrary
ответ
Всё время выдает один и тот же хендл. Думаю ошибка здесь
    function onIllusionSummon takes nothing returns nothing
        call BJDebugMsg(I2S(GetHandleId(GetSummoningUnit( ))))
        set lastCreatedIllusion  =  GetSummoningUnit( )
    endfunction
Короче, поменяй GetSummoningUnit( ) на GetSummonedUnit( )
ответ
AllChosen, строки
TrigSpell = 0
TrigPlayer = null

EnumPlayer = null
EnumUnitType = 0
Строка
EnumUnit = null
тоже лишняя, так как условием выхода из цикла loop является
exitwhen EnumUnit == null
Старайтесь использовать координаты вместо локаций:
GetSpellTargetLoc() -> GetSpellTargetX(), GetSpellTargetY()
GroupEnumUnitsInRangeOfLoc() -> GroupEnumUnitsInRange()
CreateUnitAtLoc() -> CreateUnit()
ответ
Алексей Андреич:
Типичная ошибка при не правильном использовании дефайнов. Скорее всего гдето забыт "=" После скобок.
Да, я и сам сталкивался с тем, что порой забывал ставить "==", но не в данной ситуации.
И да, я забыл вторую "=" в блоке if
if CheckRect(centX, centY) = true {
...
Но и это не корень проблемы...

В общем, я долблюсь в глаза, а дебаг - всему голова.
Причина проблемы - забыл указать тип у локальных переменных
local centX = ((startX+i*TILESIZE)+(startX+i*TILESIZE+size*TILESIZE))/2
local centY = ((startY-v*TILESIZE)+(startY-v*TILESIZE-size*TILESIZE))/2
похоже,из-за этого компилятор оч. странно реагировал на строку
if CheckRect(centX, centY) == true {
...
и выдавал ошибку "Too many nested ifs (Max is 50)"
Все как всегда, нужно дебажить свой код и тщательно все проверять
Вопрос закрыт, всем спасибо.