Добавлен Super cool
Всем здравствуйте, у меня проблема , у меня есть башня с способностю цепная молния , вот сделал его автоматическим с помощью триггеров , когда враги идут этот башня наносит с расстояния атаки башни , радиус способности 1000 а моя башня атакует с дальностю 500 , как сделать чтобы способность применялся с расстояния 1000?
Принятый ответ
Super cool, Jass это встроенный язык программирования варкрафта, т.е код что на GUI - пользовательский интерфейс, только в виде кода. GUI ограничен, на нем могут вылезти утечки. Из-за чего могут быть лаги в картах.
подробнее про Jass Тут
Ну и конечно нужен JNGP, если на 1.26 патче или рефорджет. Скачать можно тут
Создаем триггер и конвертируем его в текст. Затем копируем и вставляем код.
подробнее про Jass Тут
Ну и конечно нужен JNGP, если на 1.26 патче или рефорджет. Скачать можно тут
Создаем триггер и конвертируем его в текст. Затем копируем и вставляем код.
udg_Tower - твоя башня, триггер рассчитан на 1 башню если нужно на несколько, используй другой код и заноси каждую башню в группу
Тогда нужно создать группу для башен, т.е GroupTowers.
Тогда нужно создать группу для башен, т.е GroupTowers.
Код для 1 башни
scope LightningAutoCast
globals
private unit filterUnit //Юнит для перебора
private group GroupEnumG = CreateGroup() //Группа для перебора юнитов
//udg_Tower = Башня
endglobals
native UnitAlive takes unit id returns boolean //Нативка на жив ли юнит
function DistanceBetweenXY takes real x1, real y1, real x2, real y2 returns real //Дистанция между координатами
return SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
endfunction
function AOE_Lightning_Filter takes nothing returns boolean //Фильтр функция
local real x = GetUnitX(udg_Tower) //Координата Х башни
local real y = GetUnitY(udg_Tower) //Координата Y башни
local real x1
local real y1
set filterUnit = GetFilterUnit()
set x1 = GetUnitX(filterUnit) //Координата X фильтр юнита
set y1 = GetUnitY(filterUnit) //Координата Y фильтр юнита
return IsUnitEnemy(filterUnit, GetOwningPlayer(udg_Tower)) and filterUnit != udg_Tower and not IsUnitType(filterUnit, UNIT_TYPE_STRUCTURE) and DistanceBetweenXY( x, y, x1, y1) > 500
//Условия: Юнит враг Игроку Башни и Юнит не равен самой Башни и Юнит не является зданием и Дистанция между координатами юнита и башни > 500
endfunction
function AOE_Lightning_Actions takes nothing returns nothing
local real radius = 1000 // Радиус
local real x = GetUnitX(udg_Tower) //Координата Х башни
local real y = GetUnitY(udg_Tower) //Координата Y башни
local unit uf // Юнит для перебора в цикле
call GroupEnumUnitsInRange(GroupEnumG, x, y, radius, function AOE_Lightning_Filter) // Пикаем юнитов в радиусе от координат башни и перебираем в функции фильтре
loop
set uf = FirstOfGroup(GroupEnumG) // GroupPickRandomUnit(GroupEnumG) -- Если нужен случайный юнит в радиусе, удаляем FirstOfGroup(GroupEnumG) и ставим эту функцию
exitwhen uf == null
if UnitAlive(uf) then
call IssueTargetOrder(udg_Tower, "chainlightning", uf) //Кастуем молнию на юнита
endif
call GroupRemoveUnit( GroupEnumG, uf) //Удаляем юнита из группы
set uf = null //Обнуляем переменную
endloop
call GroupClear(GroupEnumG) //Очищаем группу
endfunction
function InitTrig_LightningAutoCast takes nothing returns nothing
call TimerStart( CreateTimer(), 0.03, true, function AOE_Lightning_Actions) //Создаем периодический таймер
endfunction
endscope
Код для несколько башень
scope LightningAutoCastGroup
globals
private unit filterUnit //Юнит для перебора
private group GroupEnumG = CreateGroup() //Группа для перебора юнитов
//udg_Tower = Башня
endglobals
native UnitAlive takes unit id returns boolean //Нативка на жив ли юнит
function DistanceBetweenXY takes real x1, real y1, real x2, real y2 returns real //Дистанция между координатами
return SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
endfunction
function AOE_Lightning_Filter takes nothing returns boolean //Фильтр функция
local real x = GetUnitX(GetEnumUnit()) //Координата Х башни
local real y = GetUnitY(GetEnumUnit()) //Координата Y башни
local real x1
local real y1
set filterUnit = GetFilterUnit()
set x1 = GetUnitX(filterUnit) //Координата X фильтр юнита
set y1 = GetUnitY(filterUnit) //Координата Y фильтр юнита
return IsUnitEnemy(filterUnit, GetOwningPlayer(GetEnumUnit())) and filterUnit != GetEnumUnit() and not IsUnitType(filterUnit, UNIT_TYPE_STRUCTURE) and DistanceBetweenXY( x, y, x1, y1) > 500
//Условия: Юнит враг Игроку Башни и Юнит не равен самой Башни и Юнит не является зданием и Дистанция между координатами юнита и башни > 500
endfunction
function AOE_Lightning_Actions takes nothing returns nothing
local real radius = 1000 // Радиус
local real x = GetUnitX(GetEnumUnit()) //Координата Х башни
local real y = GetUnitY(GetEnumUnit()) //Координата Y башни
local unit uf // Юнит для перебора в цикле
call GroupEnumUnitsInRange(GroupEnumG, x, y, radius, function AOE_Lightning_Filter) // Пикаем юнитов в радиусе от координат башни и перебираем в функции фильтре
loop
set uf = GroupPickRandomUnit(GroupEnumG) // GroupPickRandomUnit(GroupEnumG) -- Если нужен случайный юнит в радиусе, удаляем FirstOfGroup(GroupEnumG) и ставим эту функцию
exitwhen uf == null
if UnitAlive(uf) then
call IssueTargetOrder(GetEnumUnit(), "chainlightning", uf) //Кастуем молнию на юнита
endif
call GroupRemoveUnit( GroupEnumG, uf) //Удаляем юнита из группы
set uf = null //Обнуляем переменную
endloop
call GroupClear(GroupEnumG) //Очищаем группу
endfunction
function AOE_Lightning_Actions_GroupTower takes nothing returns nothing
call ForGroup( udg_GroupTowers, function AOE_Lightning_Actions)
endfunction
function InitTrig_LightningAutoCastGroup takes nothing returns nothing
call TimerStart( CreateTimer(), 0.03, true, function AOE_Lightning_Actions_GroupTower) //Создаем периодический таймер
endfunction
endscope
Результат для 1 башни
Результат для группы башен
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
но это лучше делать на Jass-е.
Отредактирован SoulRazor
подробнее про Jass Тут
Ну и конечно нужен JNGP, если на 1.26 патче или рефорджет. Скачать можно тут
Создаем триггер и конвертируем его в текст. Затем копируем и вставляем код.
Тогда нужно создать группу для башен, т.е GroupTowers.
Отредактирован SoulRazor
В коде есть комментарии для обучения Jass-у, как все устроено.