Добавлен  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 башни
Результат для группы башен
    
        
            
                `
            
            
                
        
    
    ОЖИДАНИЕ РЕКЛАМЫ...
            
                    
                        Чтобы оставить комментарий, пожалуйста, войдите на сайт.
                    
                
             
                        
                        
                    
 WC3
                                WC3
                            



 
                    
                


но это лучше делать на Jass-е.
Ред. SoulRazor
подробнее про Jass Тут
Ну и конечно нужен JNGP, если на 1.26 патче или рефорджет. Скачать можно тут
Создаем триггер и конвертируем его в текст. Затем копируем и вставляем код.
Тогда нужно создать группу для башен, т.е GroupTowers.
Ред. SoulRazor
В коде есть комментарии для обучения Jass-у, как все устроено.