Всем привет как двигать адекватно юнита к юниту с таймером? Не переместить юнита а именно двигать к юниту. (И не приказать идти)

Принятый ответ

Так движение юнита без приказа это и есть перемещение)
Такое можно и на гуи спокойно сделать

Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
27
3 года назад
0
Nikolay36, тю лол, в чем проблема закинуть всех юнитов в группу и проделать те же действия?)
2
32
3 года назад
2
rsfghd, лучше пусть напишет что задумал, то выяснится что очередная ахинея и никаких юнитов ненужно.
0
27
3 года назад
0
quq_CCCP, может он вообще хочет узнать принцип работы группы юнитов на джассе? Типо как создать, добавлять, перебирать
0
2
3 года назад
0
quq_CCCP, короче кастер притягивает себе юнитов от 1000 до 100 метров, варкрафте метр это радиус, если радиус становится 100 то удалить юнита из группы которые притягиваются к кастеру. (Задумка такая)

rsfghd, я на jass, кодирую не плохо, у меня только проблемы с математикой
0
27
3 года назад
0
Nikolay36, )
Но тут уже дело не в математике, на самом деле она даже практически не нужна тут))

Могу сделать этот спелл чуть позже, если никто не преуспеет
0
2
3 года назад
0
rsfghd, как не нужна? Как же * - +?
0
27
3 года назад
Отредактирован rsfghd
0
Nikolay36, я сказал практически)
всё что тебе нужно по факту это угол с координатами и насколько сдвинуть юнита, знать математику и думать тут вообще не надо, нужно лишь знать принцип работы)

у меня у самого знания шестиклассника

раскрыть
library mylib initializer InitTrig_fd
globals
    constant hashtable H = InitHashtable()
    private group TempG
    private group TempG1 = CreateGroup()
    private real TempX
    private real TempY
endglobals

native UnitAlive takes unit id returns boolean

private function DBC takes real x, real y, real x1, real y1 returns real
   return SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1)) 
endfunction

private function mycond takes nothing returns boolean
    set bj_lastReplacedUnit = GetFilterUnit()
    return UnitAlive(bj_lastReplacedUnit) and IsUnitEnemy(bj_lastReplacedUnit,GetOwningPlayer(bj_lastCreatedUnit))
endfunction

private function move1 takes nothing returns nothing
    local unit u = GetEnumUnit()
    local real x = GetUnitX(u)
    local real y = GetUnitY(u)
    local real a = Atan2(TempY-y,TempX-x)
    
    set x = x+20.*Cos(a)
    set y = y+20.*Sin(a)
    call SetUnitX(u,x)
    call SetUnitY(u,y)
    if DBC(TempX,TempY,x,y) <= 100. then
        call SetUnitPosition(u,x,y)
        call UnitDamageTarget(bj_lastCreatedUnit,u,100.,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,null)
        call GroupRemoveUnit(TempG,u)
    endif
    
    set u = null
endfunction

private function move takes nothing returns nothing
    local timer t = GetExpiredTimer()
    set TempG = LoadGroupHandle(H,GetHandleId(t),1)
    set bj_lastCreatedUnit = LoadUnitHandle(H,GetHandleId(t),0)
    
    set TempX = GetUnitX(bj_lastCreatedUnit)
    set TempY = GetUnitY(bj_lastCreatedUnit)
    call ForGroup(TempG,function move1)
    
    if FirstOfGroup(TempG) == null then
        call DestroyGroup(TempG)
        call FlushChildHashtable(H,GetHandleId(t))
        call PauseTimer(t)
        call DestroyTimer(t)
    endif
    
    set t = null
    set TempG = null
    set bj_lastCreatedUnit = null
endfunction

private function Trig_fd_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local boolexpr b = Condition(function mycond)
    set TempG = CreateGroup()
    set bj_lastCreatedUnit = GetTriggerUnit()
    
    call GroupEnumUnitsInRange(TempG,GetUnitX(bj_lastCreatedUnit),GetUnitY(bj_lastCreatedUnit),1000.,b)
    call SaveUnitHandle(H,GetHandleId(t),0,bj_lastCreatedUnit)
    call SaveGroupHandle(H,GetHandleId(t),1,TempG)
    call TimerStart(t,.02,true,function move)
    
    set b = null
    set t = null
    set TempG = null
    set bj_lastCreatedUnit = null
endfunction

//===========================================================================
private function cancel takes nothing returns nothing
    local timer t = GetExpiredTimer()
    call IssueImmediateOrder(LoadUnitHandle(H,GetHandleId(t),0),"stop")
    call FlushChildHashtable(H,GetHandleId(t))
    call DestroyTimer(t)
    set t = null
    
    call BJDebugMsg("Рядом никого нет")
endfunction

private function Trig_fd_Conditions takes nothing returns boolean
    if GetSpellAbilityId() == 'A000' then
        call Trig_fd_Actions()
    endif
    return false
endfunction
private function Trig_fd_Conditions1 takes nothing returns boolean
    local timer t
    if GetSpellAbilityId() == 'A000' then
        set bj_lastCreatedUnit = GetTriggerUnit()
        call GroupEnumUnitsInRange(TempG1,GetUnitX(bj_lastCreatedUnit),GetUnitY(bj_lastCreatedUnit),1000.,Condition(function mycond))
        if FirstOfGroup(TempG1) == null then
            set t = CreateTimer()
            call SaveUnitHandle(H,GetHandleId(t),0,bj_lastCreatedUnit)
            call TimerStart(t,0.,false,function cancel)
            set t = null
        else
            call GroupClear(TempG1)
        endif
        set bj_lastCreatedUnit = null
    endif
    return false
endfunction
private function InitTrig_fd takes nothing returns nothing
    local trigger t = CreateTrigger()
    local integer i = 0
    set gg_trg_fd = CreateTrigger(  )
    loop
        call TriggerRegisterPlayerUnitEvent(gg_trg_fd, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_CAST, null)
        set i = i+1
        exitwhen i == 16
    endloop
    call TriggerAddCondition( gg_trg_fd, Condition( function Trig_fd_Conditions ) )
    call TriggerAddCondition( t, Condition( function Trig_fd_Conditions1 ) )
    set t = null
endfunction
endlibrary
Загруженные файлы
2
2
3 года назад
2
rsfghd, благодарю! это то что я хотел сделать.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.