Как сделать свиток телепорта из доты?
Я гуглил по всякому, но ничего не нашел. По большей части потому что везде лишь гайды, описания, т.е. различные сайты-вики по Dota Allstars, но нет ни одного гайда по созданию этого итема, хотя он явно не так прост, как казалось до того, как взялся за его создание.
Не то чтобы я не мог его сделать(я даже не пробовал), но изобретать велосипед нет смысла и я думаю есть люди, которые знают, как он работает, так что быстрей будет спросить.

Без ответа.


Просмотров: 233

DracoL1ch #1 - 3 недели назад 2
вызов торнадо с длительностью 20 с
по истечению определенного времени назначать новые координаты юниту и паузить-анпаузить для прерывания каста
Darknessay #2 - 2 недели назад 0
DracoL1ch:
вызов торнадо с длительностью 20 с
по истечению определенного времени назначать новые координаты юниту и паузить-анпаузить для прерывания каста
Не догнал про пауз-анпауз. Торнадо дает ченнел в предмете? Если нет, то почему именно торнадо, а не любой поинт-таргет? И зачем мне пауза, если в ней у юнита нет приказов, чтобы он мог прервать ТП при желании?
Clamp #3 - 2 недели назад 0
Darknessay, есть приказ "оглушён (пауза)", id не помню, но суть в том, что у юнита в паузе именно он
Darknessay #4 - 2 недели назад -2
Clamp:
Darknessay, есть приказ "оглушён (пауза)", id не помню, но суть в том, что у юнита в паузе именно он
  1. Не приказ, а бафф.
  2. В стане нельзя отдавать приказы.
  3. В паузе у юнита пауза, никак не связанная ни с какими баффами или приказами.
Doc #5 - 2 недели назад 0
Сказано же, пауза чтобы прервать торнадо при удачном касте
Darknessay #6 - 2 недели назад 0
Doc:
Сказано же, пауза чтобы прервать торнадо при удачном касте
Прошу прощения. Я морально уничтожен, не могу думать, или просто не увидел.
DracoL1ch:
вызов торнадо с длительностью 20 с
по истечению определенного времени назначать новые координаты юниту и паузить-анпаузить для прерывания каста
Спасибо.
Darknessay #7 - 2 недели назад 0
quq_CCCP #8 - 2 недели назад (отредактировано ) 0
Darknessay, оно и неудивительно. Где триггер с событием юнит завершает применение способности, юнит начинает применять способность, триггер время истекло.
Все вейты нафиг удаляем, это никогда не будет работать...
Необходимо отловить начало каста, потом следить сбили ли каст и найти ближайшее здание возле точки телепорта, если время вышло и юниту не сбили телепорт, переместить юнита в ближашую точку возде здания, иначе ничего не делать...
» код свитка из доты
//Calls:
//    M7I
//    Q3I
//Functions as argument:
//    ZWO
function ZXO takes nothing returns boolean
    local trigger t = GetTriggeringTrigger()
    local integer MDI = GetHandleId(t)
    local unit MJI = LoadUnitHandle(XY, MDI, 14)
    local unit TFI = LoadUnitHandle(XY, MDI, 17)
    local real x = LoadReal(XY, MDI, 6)
    local real y = LoadReal(XY, MDI, 7)
    local unit ZHO = LoadUnitHandle(XY, MDI, 448)
    local unit ZZO = LoadUnitHandle(XY, MDI, 447)
    local ubersplat O11 = LoadUbersplatHandle(XY, MDI, 131)
    local integer M4I = LoadInteger(XY, MDI, 34)
    local real BH1 = LoadReal(XY, MDI, 57)
    local real EJ1 = LoadReal(XY, MDI, 442)
    local integer id = GetPlayerId(GetOwningPlayer(MJI))
    local boolean ZVO = false
    local integer i = 0
    local integer CS1

    if GetTriggerEventId() == EVENT_UNIT_SPELL_ENDCAST then
        if GetSpellAbilityId() == 'A231' then
            call DestroyEffect(LoadEffectHandle(XY, MDI, 175))
            call DestroyEffect(LoadEffectHandle(XY, MDI, 176))
            call DestroyEffect(LoadEffectHandle(XY, MDI, 177))
            call SaveInteger(XY, GetHandleId(MJI), 4256, 2)
            call KillUnit(ZHO)
            call KillUnit(ZZO)
            call DestroyUbersplat(O11)
            call FlushChildHashtable(XY, MDI)
            call M7I(t)
            call UnitRemoveType(TFI, UNIT_TYPE_PEON)
        endif
    elseif GetTriggerEventId() == EVENT_UNIT_DEATH then
        call DestroyEffect(LoadEffectHandle(XY, MDI, 175))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 176))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 177))
        call UnitRemoveType(TFI, UNIT_TYPE_PEON)
        call SaveInteger(XY, GetHandleId(MJI), 4256, 2)
        call KillUnit(ZHO)
        call KillUnit(ZZO)
        call DestroyUbersplat(O11)
        call FlushChildHashtable(XY, MDI)
        call M7I(t)
    else
        call DestroyEffect(LoadEffectHandle(XY, MDI, 175))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 176))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 177))
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTarget.mdl&​quot;, GetUnitX(MJI), GetUnitY(MJI)))
        call SaveInteger(XY, GetHandleId(MJI), 4256, 2)
        call KillUnit(ZHO)
        call KillUnit(ZZO)
        call DestroyUbersplat(O11)
        call FlushChildHashtable(XY, MDI)
        call M7I(t)
        call UnitRemoveType(TFI, UNIT_TYPE_PEON)
        call Q3I(GetUnitX(TFI) - 1, GetUnitY(TFI) - 1, 240)
        call SetUnitX(MJI, GetUnitX(TFI) - 1)
        call SetUnitY(MJI, GetUnitY(TFI) - 1)
        call PauseUnit(MJI, true)
        call PauseUnit(MJI, false)
        set CK = MJI
        call ExecuteFunc("ZWO")
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTarget.mdl&​quot;, GetUnitX(MJI), GetUnitY(MJI)))
    endif
    set t = null
    set MJI = null
    set ZHO = null
    set ZZO = null
    set O11 = null
    set TFI = null
    return false
endfunction

//Calls:
//    N7I
//    ZAO
//    PII
//    R1I
//    R5I
//    Z5O
//    Z6O
//    Z4O
//    Z3O
//    QAI
//    I51
//Functions as argument:
//    ZGO
function ZYO takes nothing returns nothing
    local unit MJI = GetTriggerUnit()
    local unit TFI = GetSpellTargetUnit()
    local location l
    local real x
    local real y
    local real a
    local trigger t
    local integer MDI
    local unit ZHO
    local unit ZZO
    local ubersplat O11
    local integer id = GetPlayerId(GetOwningPlayer(MJI))
    local integer M4I
    local real ZJO

    set t = CreateTrigger()
    set MDI = GetHandleId(t)
    call SaveInteger(XY, GetHandleId(MJI), 4256, 1)
    if TFI == null then
        set l = GetSpellTargetLoc()
        set x = GetLocationX(l)
        set y = GetLocationY(l)
        if x == LU0[id] and y == M00[id] then
            if N7I(GetOwningPlayer(MJI)) then
                set x = GetUnitX(LQ)
                set y = GetUnitY(LQ)
            else
                set x = GetUnitX(BF0)
                set y = GetUnitY(BF0)
            endif
        endif
        set TFI = ZAO(MJI, x, y)
        call RemoveLocation(l)
    else
        set x = GetUnitX(TFI)
        set y = GetUnitY(TFI)
    endif
    if PII(x, y, GetUnitX(TFI), GetUnitY(TFI)) > M50 then
        set a = Atan2(y - GetUnitY(TFI), x - GetUnitX(TFI))
        set x = GetUnitX(TFI) + M50 * Cos(a)
        set y = GetUnitY(TFI) + M50 * Sin(a)
    elseif PII(x, y, GetUnitX(TFI), GetUnitY(TFI)) < 50 then
        set a = Atan2(y - GetUnitY(TFI), x - GetUnitX(TFI))
        set x = GetUnitX(TFI) + 120 * Cos(a)
        set y = GetUnitY(TFI) + 120 * Sin(a)
    endif
    if IsPointInRegion(XN, x, y) == true then
        set a = Atan2(y - GetUnitY(TFI), x - GetUnitX(TFI))
        set x = GetUnitX(TFI) + 200 * Cos(a)
        set y = GetUnitY(TFI) + 200 * Sin(a)
    endif
    set x = R1I(x)
    set y = R5I(y)
    if (IsUnitAlly(MJI, GetLocalPlayer()) and GetLocalPlayer() != GetOwningPlayer(MJI)) or (C2 and (GetLocalPlayer() == D10 or GetLocalPlayer() == DO0)) then
        call PingMinimapEx(x, y, 3, 255, 255, 255, false)
    endif
    set ZZO = CreateUnit(GetOwningPlayer(MJI), Z5O(id), x, y, 0)
    set ZHO = CreateUnit(GetOwningPlayer(MJI), Z6O(id), GetUnitX(MJI), GetUnitY(MJI), 0)
    set O11 = CreateUbersplat(GetUnitX(MJI), GetUnitY(MJI), "SCTP", 255, 255, 255, 255, false, false)
    if IsUnitVisible(MJI, GetLocalPlayer()) == true then
        call SetUbersplatRenderAlways(O11, true)
    else
        call SetUbersplatRenderAlways(O11, false)
    endif
    set M4I = Z4O(GetPlayerId(GetOwningPlayer(MJI)), x, y)
    set ZJO = 3
    if M4I > 0 then
        set ZJO = 4.5 + 0.5 * M4I
    endif
    call Z3O(GetPlayerId(GetOwningPlayer(MJI)), x, y)
    if M4I > 0 then
        call SetUnitAnimationByIndex(ZHO, 2)
        call SetUnitAnimationByIndex(ZZO, 2)
    endif
    call TriggerRegisterTimerEvent(t, ZJO - 3, false)
    call TriggerRegisterTimerEvent(t, ZJO, false)
    call TriggerRegisterUnitEvent(t, MJI, EVENT_UNIT_SPELL_ENDCAST)
    call TriggerAddCondition(t, Condition(function ZGO))
    call QAI(GetOwningPlayer(MJI), ZJO, x, y, 200)
    call SaveUnitHandle(XY, MDI, 447, ZZO)
    call SaveUnitHandle(XY, MDI, 448, ZHO)
    call SaveReal(XY, MDI, 6, (x * 1.0))
    call SaveReal(XY, MDI, 7, (y * 1.0))
    call SaveReal(XY, MDI, 442, (TimerGetElapsed(M) * 1.0))
    call SaveReal(XY, MDI, 57, (ZJO * 1.0))
    call SaveUbersplatHandle(XY, MDI, 131, O11)
    call SaveUnitHandle(XY, MDI, 14, MJI)
    call SaveInteger(XY, MDI, 34, 0)
    call I51(MJI, XF, x, y, 2400)
    set MJI = null
    set TFI = null
    set ZHO = null
    set ZZO = null
    set l = null
    set t = null
    set O11 = null
endfunction

//Calls:
//    N7I
//    ZFO
//    QAI
//    I51
//Functions as argument:
//    ZXO
function ZKO takes nothing returns nothing
    local unit MJI = GetTriggerUnit()
    local unit TFI = GetSpellTargetUnit()
    local location l
    local real x
    local real y
    local real a
    local trigger t
    local integer MDI
    local unit ZHO
    local unit ZZO
    local ubersplat O11
    local integer id = GetPlayerId(GetOwningPlayer(MJI))
    local integer M4I
    local real ZJO

    set t = CreateTrigger()
    set MDI = GetHandleId(t)
    if TFI == null then
        set l = GetSpellTargetLoc()
        set x = GetLocationX(l)
        set y = GetLocationY(l)
        if x == LU0[id] and y == M00[id] then
            if N7I(GetOwningPlayer(MJI)) then
                set x = GetUnitX(LQ)
                set y = GetUnitY(LQ)
            else
                set x = GetUnitX(BF0)
                set y = GetUnitY(BF0)
            endif
        endif
        set TFI = ZFO(MJI, x, y)
        call RemoveLocation(l)
    endif
    call SaveInteger(XY, GetHandleId(MJI), 4256, 1)
    set x = GetUnitX(TFI)
    set y = GetUnitY(TFI)
    if (IsUnitAlly(MJI, GetLocalPlayer()) and GetLocalPlayer() != GetOwningPlayer(MJI)) or (C2 and (GetLocalPlayer() == D10 or GetLocalPlayer() == DO0)) then
        call PingMinimapEx(x, y, 3, 255, 255, 255, false)
    endif
    set O11 = CreateUbersplat(GetUnitX(MJI), GetUnitY(MJI), "SCTP", 255, 255, 255, 255, false, false)
    if IsUnitVisible(MJI, GetLocalPlayer()) == true then
        call SetUbersplatRenderAlways(O11, true)
    else
        call SetUbersplatRenderAlways(O11, false)
    endif
    set ZJO = 3
    call UnitAddType(TFI, UNIT_TYPE_PEON)
    call TriggerRegisterTimerEvent(t, ZJO, false)
    call TriggerRegisterUnitEvent(t, MJI, EVENT_UNIT_SPELL_ENDCAST)
    call TriggerRegisterUnitEvent(t, TFI, EVENT_UNIT_DEATH)
    call TriggerAddCondition(t, Condition(function ZXO))
    call QAI(GetOwningPlayer(MJI), ZJO, x, y, 200)
    call SaveReal(XY, MDI, 6, (x * 1.0))
    call SaveReal(XY, MDI, 7, (y * 1.0))
    call SaveReal(XY, MDI, 442, (TimerGetElapsed(M) * 1.0))
    call SaveReal(XY, MDI, 57, (ZJO * 1.0))
    call SaveUbersplatHandle(XY, MDI, 131, O11)
    call SaveUnitHandle(XY, MDI, 14, MJI)
    call SaveUnitHandle(XY, MDI, 17, TFI)
    call SaveInteger(XY, MDI, 34, 0)
    call SaveEffectHandle(XY, MDI, 175, AddSpecialEffectTarget("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTo.mdl", MJI, "origin"))
    call SaveEffectHandle(XY, MDI, 176, AddSpecialEffectTarget("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportCaster.mdl", MJI, "origin"))
    call SaveEffectHandle(XY, MDI, 177, AddSpecialEffectTarget("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTo.mdl", TFI, "origin"))
    call I51(MJI, XF, x, y, 2400)
    set MJI = null
    set TFI = null
    set ZHO = null
    set ZZO = null
    set l = null
    set t = null
    set O11 = null
endfunction

//Calls:
//    STI
//    ZYO
//    ZKO
function ZLO takes nothing returns nothing
    if GetSpellAbilityId() == 'A1R5' and STI(GetTriggerUnit()) == false then
        call ZYO()
    endif
    if GetSpellAbilityId() == 'A231' then
        call ZKO()
    endif
endfunction
А вот сам спелл.
прикреплены файлы
Darknessay #9 - 2 недели назад 0
quq_CCCP:
Darknessay, оно и неудивительно. Где триггер с событием юнит завершает применение способности, юнит начинает применять способность, триггер время истекло.
Все вейты нафиг удаляем, это никогда не будет работать...
Необходимо отловить начало каста, потом следить сбили ли каст и найти ближайшее здание возле точки телепорта, если время вышло и юниту не сбили телепорт, переместить юнита в ближашую точку возде здания, иначе ничего не делать...
» код свитка из доты
//Calls:
//    M7I
//    Q3I
//Functions as argument:
//    ZWO
function ZXO takes nothing returns boolean
    local trigger t = GetTriggeringTrigger()
    local integer MDI = GetHandleId(t)
    local unit MJI = LoadUnitHandle(XY, MDI, 14)
    local unit TFI = LoadUnitHandle(XY, MDI, 17)
    local real x = LoadReal(XY, MDI, 6)
    local real y = LoadReal(XY, MDI, 7)
    local unit ZHO = LoadUnitHandle(XY, MDI, 448)
    local unit ZZO = LoadUnitHandle(XY, MDI, 447)
    local ubersplat O11 = LoadUbersplatHandle(XY, MDI, 131)
    local integer M4I = LoadInteger(XY, MDI, 34)
    local real BH1 = LoadReal(XY, MDI, 57)
    local real EJ1 = LoadReal(XY, MDI, 442)
    local integer id = GetPlayerId(GetOwningPlayer(MJI))
    local boolean ZVO = false
    local integer i = 0
    local integer CS1

    if GetTriggerEventId() == EVENT_UNIT_SPELL_ENDCAST then
        if GetSpellAbilityId() == 'A231' then
            call DestroyEffect(LoadEffectHandle(XY, MDI, 175))
            call DestroyEffect(LoadEffectHandle(XY, MDI, 176))
            call DestroyEffect(LoadEffectHandle(XY, MDI, 177))
            call SaveInteger(XY, GetHandleId(MJI), 4256, 2)
            call KillUnit(ZHO)
            call KillUnit(ZZO)
            call DestroyUbersplat(O11)
            call FlushChildHashtable(XY, MDI)
            call M7I(t)
            call UnitRemoveType(TFI, UNIT_TYPE_PEON)
        endif
    elseif GetTriggerEventId() == EVENT_UNIT_DEATH then
        call DestroyEffect(LoadEffectHandle(XY, MDI, 175))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 176))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 177))
        call UnitRemoveType(TFI, UNIT_TYPE_PEON)
        call SaveInteger(XY, GetHandleId(MJI), 4256, 2)
        call KillUnit(ZHO)
        call KillUnit(ZZO)
        call DestroyUbersplat(O11)
        call FlushChildHashtable(XY, MDI)
        call M7I(t)
    else
        call DestroyEffect(LoadEffectHandle(XY, MDI, 175))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 176))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 177))
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTarget.mdl&​quot;, GetUnitX(MJI), GetUnitY(MJI)))
        call SaveInteger(XY, GetHandleId(MJI), 4256, 2)
        call KillUnit(ZHO)
        call KillUnit(ZZO)
        call DestroyUbersplat(O11)
        call FlushChildHashtable(XY, MDI)
        call M7I(t)
        call UnitRemoveType(TFI, UNIT_TYPE_PEON)
        call Q3I(GetUnitX(TFI) - 1, GetUnitY(TFI) - 1, 240)
        call SetUnitX(MJI, GetUnitX(TFI) - 1)
        call SetUnitY(MJI, GetUnitY(TFI) - 1)
        call PauseUnit(MJI, true)
        call PauseUnit(MJI, false)
        set CK = MJI
        call ExecuteFunc("ZWO")
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTarget.mdl&​quot;, GetUnitX(MJI), GetUnitY(MJI)))
    endif
    set t = null
    set MJI = null
    set ZHO = null
    set ZZO = null
    set O11 = null
    set TFI = null
    return false
endfunction

//Calls:
//    N7I
//    ZAO
//    PII
//    R1I
//    R5I
//    Z5O
//    Z6O
//    Z4O
//    Z3O
//    QAI
//    I51
//Functions as argument:
//    ZGO
function ZYO takes nothing returns nothing
    local unit MJI = GetTriggerUnit()
    local unit TFI = GetSpellTargetUnit()
    local location l
    local real x
    local real y
    local real a
    local trigger t
    local integer MDI
    local unit ZHO
    local unit ZZO
    local ubersplat O11
    local integer id = GetPlayerId(GetOwningPlayer(MJI))
    local integer M4I
    local real ZJO

    set t = CreateTrigger()
    set MDI = GetHandleId(t)
    call SaveInteger(XY, GetHandleId(MJI), 4256, 1)
    if TFI == null then
        set l = GetSpellTargetLoc()
        set x = GetLocationX(l)
        set y = GetLocationY(l)
        if x == LU0[id] and y == M00[id] then
            if N7I(GetOwningPlayer(MJI)) then
                set x = GetUnitX(LQ)
                set y = GetUnitY(LQ)
            else
                set x = GetUnitX(BF0)
                set y = GetUnitY(BF0)
            endif
        endif
        set TFI = ZAO(MJI, x, y)
        call RemoveLocation(l)
    else
        set x = GetUnitX(TFI)
        set y = GetUnitY(TFI)
    endif
    if PII(x, y, GetUnitX(TFI), GetUnitY(TFI)) > M50 then
        set a = Atan2(y - GetUnitY(TFI), x - GetUnitX(TFI))
        set x = GetUnitX(TFI) + M50 * Cos(a)
        set y = GetUnitY(TFI) + M50 * Sin(a)
    elseif PII(x, y, GetUnitX(TFI), GetUnitY(TFI)) < 50 then
        set a = Atan2(y - GetUnitY(TFI), x - GetUnitX(TFI))
        set x = GetUnitX(TFI) + 120 * Cos(a)
        set y = GetUnitY(TFI) + 120 * Sin(a)
    endif
    if IsPointInRegion(XN, x, y) == true then
        set a = Atan2(y - GetUnitY(TFI), x - GetUnitX(TFI))
        set x = GetUnitX(TFI) + 200 * Cos(a)
        set y = GetUnitY(TFI) + 200 * Sin(a)
    endif
    set x = R1I(x)
    set y = R5I(y)
    if (IsUnitAlly(MJI, GetLocalPlayer()) and GetLocalPlayer() != GetOwningPlayer(MJI)) or (C2 and (GetLocalPlayer() == D10 or GetLocalPlayer() == DO0)) then
        call PingMinimapEx(x, y, 3, 255, 255, 255, false)
    endif
    set ZZO = CreateUnit(GetOwningPlayer(MJI), Z5O(id), x, y, 0)
    set ZHO = CreateUnit(GetOwningPlayer(MJI), Z6O(id), GetUnitX(MJI), GetUnitY(MJI), 0)
    set O11 = CreateUbersplat(GetUnitX(MJI), GetUnitY(MJI), "SCTP", 255, 255, 255, 255, false, false)
    if IsUnitVisible(MJI, GetLocalPlayer()) == true then
        call SetUbersplatRenderAlways(O11, true)
    else
        call SetUbersplatRenderAlways(O11, false)
    endif
    set M4I = Z4O(GetPlayerId(GetOwningPlayer(MJI)), x, y)
    set ZJO = 3
    if M4I > 0 then
        set ZJO = 4.5 + 0.5 * M4I
    endif
    call Z3O(GetPlayerId(GetOwningPlayer(MJI)), x, y)
    if M4I > 0 then
        call SetUnitAnimationByIndex(ZHO, 2)
        call SetUnitAnimationByIndex(ZZO, 2)
    endif
    call TriggerRegisterTimerEvent(t, ZJO - 3, false)
    call TriggerRegisterTimerEvent(t, ZJO, false)
    call TriggerRegisterUnitEvent(t, MJI, EVENT_UNIT_SPELL_ENDCAST)
    call TriggerAddCondition(t, Condition(function ZGO))
    call QAI(GetOwningPlayer(MJI), ZJO, x, y, 200)
    call SaveUnitHandle(XY, MDI, 447, ZZO)
    call SaveUnitHandle(XY, MDI, 448, ZHO)
    call SaveReal(XY, MDI, 6, (x * 1.0))
    call SaveReal(XY, MDI, 7, (y * 1.0))
    call SaveReal(XY, MDI, 442, (TimerGetElapsed(M) * 1.0))
    call SaveReal(XY, MDI, 57, (ZJO * 1.0))
    call SaveUbersplatHandle(XY, MDI, 131, O11)
    call SaveUnitHandle(XY, MDI, 14, MJI)
    call SaveInteger(XY, MDI, 34, 0)
    call I51(MJI, XF, x, y, 2400)
    set MJI = null
    set TFI = null
    set ZHO = null
    set ZZO = null
    set l = null
    set t = null
    set O11 = null
endfunction

//Calls:
//    N7I
//    ZFO
//    QAI
//    I51
//Functions as argument:
//    ZXO
function ZKO takes nothing returns nothing
    local unit MJI = GetTriggerUnit()
    local unit TFI = GetSpellTargetUnit()
    local location l
    local real x
    local real y
    local real a
    local trigger t
    local integer MDI
    local unit ZHO
    local unit ZZO
    local ubersplat O11
    local integer id = GetPlayerId(GetOwningPlayer(MJI))
    local integer M4I
    local real ZJO

    set t = CreateTrigger()
    set MDI = GetHandleId(t)
    if TFI == null then
        set l = GetSpellTargetLoc()
        set x = GetLocationX(l)
        set y = GetLocationY(l)
        if x == LU0[id] and y == M00[id] then
            if N7I(GetOwningPlayer(MJI)) then
                set x = GetUnitX(LQ)
                set y = GetUnitY(LQ)
            else
                set x = GetUnitX(BF0)
                set y = GetUnitY(BF0)
            endif
        endif
        set TFI = ZFO(MJI, x, y)
        call RemoveLocation(l)
    endif
    call SaveInteger(XY, GetHandleId(MJI), 4256, 1)
    set x = GetUnitX(TFI)
    set y = GetUnitY(TFI)
    if (IsUnitAlly(MJI, GetLocalPlayer()) and GetLocalPlayer() != GetOwningPlayer(MJI)) or (C2 and (GetLocalPlayer() == D10 or GetLocalPlayer() == DO0)) then
        call PingMinimapEx(x, y, 3, 255, 255, 255, false)
    endif
    set O11 = CreateUbersplat(GetUnitX(MJI), GetUnitY(MJI), "SCTP", 255, 255, 255, 255, false, false)
    if IsUnitVisible(MJI, GetLocalPlayer()) == true then
        call SetUbersplatRenderAlways(O11, true)
    else
        call SetUbersplatRenderAlways(O11, false)
    endif
    set ZJO = 3
    call UnitAddType(TFI, UNIT_TYPE_PEON)
    call TriggerRegisterTimerEvent(t, ZJO, false)
    call TriggerRegisterUnitEvent(t, MJI, EVENT_UNIT_SPELL_ENDCAST)
    call TriggerRegisterUnitEvent(t, TFI, EVENT_UNIT_DEATH)
    call TriggerAddCondition(t, Condition(function ZXO))
    call QAI(GetOwningPlayer(MJI), ZJO, x, y, 200)
    call SaveReal(XY, MDI, 6, (x * 1.0))
    call SaveReal(XY, MDI, 7, (y * 1.0))
    call SaveReal(XY, MDI, 442, (TimerGetElapsed(M) * 1.0))
    call SaveReal(XY, MDI, 57, (ZJO * 1.0))
    call SaveUbersplatHandle(XY, MDI, 131, O11)
    call SaveUnitHandle(XY, MDI, 14, MJI)
    call SaveUnitHandle(XY, MDI, 17, TFI)
    call SaveInteger(XY, MDI, 34, 0)
    call SaveEffectHandle(XY, MDI, 175, AddSpecialEffectTarget("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTo.mdl", MJI, "origin"))
    call SaveEffectHandle(XY, MDI, 176, AddSpecialEffectTarget("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportCaster.mdl", MJI, "origin"))
    call SaveEffectHandle(XY, MDI, 177, AddSpecialEffectTarget("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTo.mdl", TFI, "origin"))
    call I51(MJI, XF, x, y, 2400)
    set MJI = null
    set TFI = null
    set ZHO = null
    set ZZO = null
    set l = null
    set t = null
    set O11 = null
endfunction

//Calls:
//    STI
//    ZYO
//    ZKO
function ZLO takes nothing returns nothing
    if GetSpellAbilityId() == 'A1R5' and STI(GetTriggerUnit()) == false then
        call ZYO()
    endif
    if GetSpellAbilityId() == 'A231' then
        call ZKO()
    endif
endfunction
А вот сам спелл.
Я делаю не точную копию свитка из доты, у меня есть четкие области куда юнита должно ТПшить, мне нужно только сделать чтобы телепортация была:
  1. в предмете
  2. ченнелинг
Я втыкал в предмет и канал и торнадо, оно никак не ченнелится из итема. Почему ты рассказываешь мне что у меня что то не так в тригорах, если спелл даже не ченнелится в итеме и потому не работает? Может я в предмете накосячил, хз, вот предмет еще:
прикреплены файлы
quq_CCCP #10 - 2 недели назад 0
Darknessay, Канал не чанеллистя в предметах и точка, это могут лишь некоторые абилки.
Пробуй юзнуть Звездопад (Starfall ), Вейты не юзай, иначе ничего работать не будет никогда!
PT153 #11 - 2 недели назад 0
Darknessay:
Clamp:
Darknessay, есть приказ "оглушён (пауза)", id не помню, но суть в том, что у юнита в паузе именно он
  1. Не приказ, а бафф.
Вообще-то есть такой приказ.
Darknessay #12 - 2 недели назад -2
Вообще-то есть такой приказ.
Хорошо, буду знать. Это помогает мне в моем вопросе?..(
Darknessay, Канал не чанеллистя в предметах и точка, это могут лишь некоторые абилки.
Слушай, но скролл в доте же ченнелится, верно?
Я пробовал добавить способность в спеллбук и при касте предмета добавлять его, блокировать и заставлять юнита кастовать оттуда способность, в надежде что он сможет читерным образом, через приказ, скастовать спелл из скрытого бука - не работает.
Я не шарю в тот джасс код. Если есть возможность обьяснить, что со свитком в д, то обьясните. Может там искусственный ченнел?