Нанесение урона происходит после события. Логика такова, что ты востановишь юниту здоровье в тот момент когда у него и так максимум, а после наносится урон. Лечится таймером в 0.0 сек. Возможно, еще понадобится добавление способности повышающая макс.здоровье и после окончания таймера ее удаление
function GetNearbyUnits takes unit u, real range returns group
group g = CreateGroup()
set g = GetUnitsInRangeOfLocAll(range, GetUnitLoc(u))
call GroupRemoveUnit(g, u)
return g
endfunction
Утекает переменная, но в целом если задавать уточняющие вопросы сможет написать кое какой код за тебя
Не было созданой переменной local unit u, она сразу при cоздании юнита прописала set unit u =.
CreateUnit принимает х,у координаты. CreateUnitAtLoc (если не ошибаюсь) на нее можно заменить или создать координаты х,у и CreateUnit(GetOwningPlayer(caster), 'hfoo', х, у, bj_UNIT_FACING)
Попробую с пояснением:
переменная - тип Триггер галочка что массив и размер на единицу больше количества триггеров название например MyTriggers,
переменая - тип целочисленнаяназвание MyTriggerMax
Событие при инитиализации карты
Установить переменная MyTriggers[1] = триггер из списка
Установить переменная MyTriggers[2] = другой триггер из списка
и так же с остальными которые будут запускатся
В конце установить переменная MyTriggersMax равно количеству установленых триггеров.
Переменной х(любая целочислення) ставим случайное число от 1 до MyTriggerMax
Запускаем триггер MyTriggers[х]
Установить переменную MyTriggers[x] равно MyTriggers[MyTriggerMax], то есть, на место триггера который больше не будет использоваться переносим триггер из конца списка, а максимальное количество списка уменьшим на 1, и тогда конец списка не випадет, так как случайное число от 1 до макс. количества.
Установить переменную MyTriggersMax равную (Арифметика) MyTriggersMax - 1
function Skill1 takes unit caster returns nothing
local integer i = 0
local location loc = GetUnitLoc(caster)
local unit u
loop
exitwhen i >= 5
set i = i + 1
set loc = OffsetLocation(loc, 128.0, 360.0 / 5.0 * i)
set u = CreateUnit(GetOwningPlayer(caster), 'hfoo', loc, bj_UNIT_FACING)
call SetUnitOwner(u, GetOwningPlayer(caster), true)
set loc = GetUnitLoc(caster)
endloop
loop
set i = 0
exitwhen i >= 5
set i = i + 1
set u = GetNearbyEnemy(caster, 300.0, true)
if u != null and IsUnitType(u, UNIT_TYPE_HERO) == false and IsUnitType(u, UNIT_TYPE_STRUCTURE) == false then
call UnitDamageTarget(u, caster, 100, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
call KillUnit(GetEnumUnit())
endif
endloop
endfunction
Так ошибка исправится, но такой код не подойдет под твою задумку. В нем юниты все время создаются по кругу, а не двигают созданых., урон окружающие наносят кастеру., убивает юнита которого нет., нет проверки что юнит столкновения не являеться кастером.
local integer l = 0
local integer i = 0
loop
exitwhen i >= 10
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING and GetPlayerSlotState(Player(i)) != PLAYER_SLOT_STATE_EMPTY then
call MultiboardSetRowCount(udg_MB, l + 2)
set l = l + 1
endif
set i = i + 1
endloop
Урон такой же. Там можно выбрать тип урона, чтоб нанести чистый урон, учитывалась броня или маг.резист.
Второй вопрос не совсем понял, но правильной постройке триггера глюков не будет.
И да, забыл добавить, Y2 ограничение имеет, откуда Y3? Напоминаю, что столбов (X) 4 (0-3) а строк (Y) 3 (0-2). И получается 4 * 3 = 12 (11 индекс). А ты хочешь получить 4 * 4 = 16ый индекс, вопрос откуда и куда.
Я ошибся с обозначением х,у. Позиция х2 и у2 = Child(0). -1 индекс указал чисто проверить, думал если Child(0) = x2;y2 и Child(10) = x0;y0 то -1 может быть x3;y2
ОШИБКА
This application has encountered a critical error:
FATAL ERROR!
Program: D:\Games\WarCraft3\Warcraft 3 Frozen Throne\war3.exe
Exception: 0xC0000005 (ACCESS_VIOLATION) at 0023:0222279A
The instruction at '0x0222279A' referenced memory at '0x00000010'.
The memory could not be 'read'.
Borodach, Но если такая функция будет вызвана 2 раза за короткое время, первый last created может затеряться. Особенно если функция растянута во времени, то есть имеет вейты. nazarpunk, Так даже в гуи она проблемы может создать... Last created group хорошо это показывает, с утечками групп.
Нужно сначала создать локальную, затем создать юнита/кнопку/текстаг или другое, локальную установить = lastCreated и только потом вейт, тогда ничего не затеряеться.
Именно в групах создаеться локальная и она же возвращаеться, то есть не проходит очистка
SсRealm, get last created что либо - это вообще бредовая выдумка, с кучей проблем в работе. Особенно если постоянно юзать её, а не для первоначального определения чего либо. Зачем её ввести в гуи - непонятно. Лучше бы локалки ввели.
Такая штука, что функция, к примеру, должна вернуть "хендл". После возврата значения, все последующие команды не выполняться, та созданная локальная зависнет в памяти и у тебя не получится устранить утечку. Так вот ети глобальные lastCreated, удобний "транспортировщик" чтоб избежать утечек.
Нашел "кнопку" обновления. И сейчас при установке флажка "LoadLibrary" крашит варкрафт. Путь на war3.exe указан.
Если не стоит, то карта не открывается с одной глобальной
Ред. Borodach
» Unryze Jass API / UjAPI
Ред. Borodach
» WarCraft 3 / Щит аббадона или же пассивка воина свет из ЖНА
Ред. Borodach
» WarCraft 3 / Проблема в редакторе Warcraft III
» WarCraft 3 / [vJass/Jass] не могу понять, что не так с кодом?)
Ред. Borodach
» WarCraft 3 / [vJass/Jass] не могу понять, что не так с кодом?)
CreateUnit принимает х,у координаты. CreateUnitAtLoc (если не ошибаюсь) на нее можно заменить или создать координаты х,у и
CreateUnit(GetOwningPlayer(caster), 'hfoo', х, у, bj_UNIT_FACING)
Ред. Borodach
» WarCraft 3 / Запустить рандом триггер и убрать его
переменная - тип Триггер галочка что массив и размер на единицу больше количества триггеров название например MyTriggers,
переменая - тип целочисленная название MyTriggerMax
Событие при инитиализации карты
Установить переменная MyTriggers[1] = триггер из списка
Установить переменная MyTriggers[2] = другой триггер из списка
и так же с остальными которые будут запускатся
В конце установить переменная MyTriggersMax равно количеству установленых триггеров.
Запускаем триггер MyTriggers[х]
Установить переменную MyTriggers[x] равно MyTriggers[MyTriggerMax], то есть, на место триггера который больше не будет использоваться переносим триггер из конца списка, а максимальное количество списка уменьшим на 1, и тогда конец списка не випадет, так как случайное число от 1 до макс. количества.
Установить переменную MyTriggersMax равную (Арифметика) MyTriggersMax - 1
Ред. Borodach
» WarCraft 3 / [vJass/Jass] не могу понять, что не так с кодом?)
» WarCraft 3 / Пропадают все объекты на карте
» WarCraft 3 / [GUI] Шансовое срабатывание яда
» WarCraft 3 / Изменение переменной в тригере
Ред. Borodach
» WarCraft 3 / Доска Статистики
» WarCraft 3 / Нанесение урона триггерным способом
» WarCraft 3 / Нанесение урона триггерным способом
Второй вопрос не совсем понял, но правильной постройке триггера глюков не будет.
» WarCraft 3 / Крафт с помощью способности
» WarCraft 3 / [GUI] Тригер "отказывает" в запуске карты, или крашит игру.
» WarCraft 3 / Опыт после убийства крипа
» WarCraft 3 / Не работает триггер с условиями
» Unryze Jass API / UjAPI
ОШИБКА
» WarCraft 3 / jass Переменные
» WarCraft 3 / jass Переменные
Именно в групах создаеться локальная и она же возвращаеться, то есть не проходит очистка
» WarCraft 3 / Помощь с таймерами, подсчёт скорости прокаста способностей
Ред. Borodach
» WarCraft 3 / jass Переменные
Ред. Borodach
» WarCraft 3 / Есть ли эффекты атаки, снимаемые рассеиванием чар?
Ред. Borodach
» Unryze Jass API / UjAPI
» Unryze Jass API / UjAPI
Если не стоит, то карта не открывается с одной глобальной