Кто-то пробовал сделать этот скилл феникса из доты? Не понимаю с чего начать, может, кто подскажет?
Вот демонстрация скилла: www.youtube.com/watch?v=SkPpbb1n2M4&ab_channel=EmmanuelCampe

Accepted answer

Вот, лови
Uploaded files
`
LOADING AD...
26
Буду вечером дома - скину героя целиком. Ожидай.
32
Достаточно сложный, и кривой в доте, могу кинуть код с доты.
3
Просто не понимаю, как сделать эллипс, по которому героя нужно двигать
32
Вот так:
function YK5 takes nothing returns boolean
local trigger t=GetTriggeringTrigger()
local integer S5I=GetHandleId(t)
local unit P7I=(LoadUnitHandle(HashData,(S5I),(2)))
local unit P8I=(LoadUnitHandle(HashData,(S5I),(17)))
local integer SUI=(LoadInteger(HashData,(S5I),(5)))
if GetTriggerEventId()==EVENT_WIDGET_DEATH or GetTriggerEvalCount(t)==4 or RKI(P8I)then
call DestroyEffect((LoadEffectHandle(HashData,(S5I),(32))))
call UnitRemoveAbility(P8I,'A2O7')
call UnitRemoveAbility(P8I,'B0GC')
call FlushChildHashtable(HashData,(S5I))
call S0I(t)
endif
if GetTriggerEventId()!=EVENT_WIDGET_DEATH then
call DamageTarget(P7I,P8I,1,20*SUI-10)
endif
set t=null
set P7I=null
set P8I=null
return false
endfunction
function YL5 takes unit P7I,unit P8I,integer SUI returns nothing
local trigger t=CreateTrigger()
local integer S5I=GetHandleId(t)
call AddPermanentAbility(P8I,'A2O7')
call TriggerRegisterTimerEvent(t,1,true)
call TriggerRegisterDeathEvent(t,P8I)
call TriggerAddCondition(t,Condition(function YK5))
call SaveUnitHandle(HashData,(S5I),(2),(P7I))
call SaveUnitHandle(HashData,(S5I),(17),(P8I))
call SaveInteger(HashData,(S5I),(5),(SUI))
call SaveEffectHandle(HashData,(S5I),(32),(AddSpecialEffectTarget("Environment\\LargeBuildingFire\\LargeBuildingFire1.mdl",P8I,"chest")))
set t=null
endfunction
function YM5 takes nothing returns boolean
if IsUnitInGroup(GetEnumUnit(),WKI)==false and RKI(GetEnumUnit())==false then
call GroupAddUnit(WKI,GetEnumUnit())
call DestroyEffect(AddSpecialEffectTarget("war3mapImported\\FireBlast.mdx",GetEnumUnit(),"chest"))
call YL5(WMI,GetEnumUnit(),WLI)
endif
return false
endfunction
function YN5 takes nothing returns boolean
local trigger t=GetTriggeringTrigger()
local integer S5I=GetHandleId(t)
local integer NPI=(LoadInteger(HashData,(S5I),(34)))
local unit P7I=(LoadUnitHandle(HashData,(S5I),(2)))
local real QXI=(LoadReal(HashData,(S5I),(189)))
local real QYI=(LoadReal(HashData,(S5I),(190)))
local real QJI=(LoadReal(HashData,(S5I),(47)))
local real QKI=(LoadReal(HashData,(S5I),(48)))
local real a=(LoadReal(HashData,(S5I),(13)))
local real YS5=(1-I2R(NPI)/50)*bj_PI
local real YT5=1400/2*Cos(YS5)
local real YR5=500/2*Sin(YS5)
local real x=PTI(QJI+YT5*Cos(a)-YR5*Sin(a))
local real y=PUI(QKI+YT5*Sin(a)+YR5*Cos(a))
local group JAO=(LoadGroupHandle(HashData,(S5I),(133)))
local group g
local integer SUI=GetUnitAbilityLevel(P7I,'A1RJ')
if GetTriggerEventId()==EVENT_UNIT_DEATH or(GetTriggerEventId()==EVENT_UNIT_SPELL_EFFECT and NPI>0 and(GetSpellAbilityId()=='A20N' or GetSpellAbilityId()=='A1RK'))or NPI>100 or BH1(P7I)then
call UPI(x,y,300)
call SetUnitVertexColor(P7I,255,255,255,255)
if(LoadInteger(HashData,(GetHandleId(P7I)),(704)))==0 or(LoadInteger(HashData,(GetHandleId(P7I)),(704)))=='A1RJ' then
call SetPlayerAbilityAvailable(GetOwningPlayer(P7I),'A1RJ',true)
endif
call SetPlayerAbilityAvailable(GetOwningPlayer(P7I),'A20N',false)
call SetUnitPathing(P7I,true)
call NSI(JAO)
call FlushChildHashtable(HashData,(S5I))
call S0I(t)
else
if ModuloInteger(NPI,10)==0 then
call UPI(x,y,200)
endif
call SaveInteger(HashData,(S5I),(34),(NPI+1))
call SetUnitX(P7I,x)
call SetUnitY(P7I,y)
call SetUnitFacing(P7I,(a+YS5-bj_PI/2)*bj_RADTODEG)
set g=NTI()
set WKI=JAO
set GK=P7I
set WMI=P7I
set WLI=GetUnitAbilityLevel(P7I,'A1RJ')
call GroupEnumUnitsInRange(g,x,y,225,Condition(function CE1))
call ForGroup(g,function YM5)
call NSI(g)
endif
set t=null
set P7I=null
set g=null
set JAO=null
return false
endfunction
function YP5 takes nothing returns nothing
local trigger t=CreateTrigger()
local integer S5I=GetHandleId(t)
local unit P7I=GetTriggerUnit()
local real QXI=GetUnitX(P7I)
local real QYI=GetUnitY(P7I)
local real a=UEI(QXI,QYI,GetSpellTargetX(),GetSpellTargetY())*bj_DEGTORAD
local real QJI=QXI+1400/2*Cos(a)
local real QKI=QYI+1400/2*Sin(a)
call SetUnitState(P7I,UNIT_STATE_LIFE,GetUnitState(P7I,UNIT_STATE_LIFE)-GetUnitState(P7I,UNIT_STATE_LIFE)*0.15)
call SCI(P7I,4301,2)
call SCI(P7I,4415,2)
call TriggerRegisterTimerEvent(t,0.02,true)
call TriggerRegisterUnitEvent(t,P7I,EVENT_UNIT_DEATH)
call TriggerRegisterUnitEvent(t,P7I,EVENT_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t,Condition(function YN5))
call SaveUnitHandle(HashData,(S5I),(2),(P7I))
call SaveReal(HashData,(S5I),(189),((QXI)*1.0))
call SaveReal(HashData,(S5I),(190),((QYI)*1.0))
call SaveReal(HashData,(S5I),(47),((QJI)*1.0))
call SaveReal(HashData,(S5I),(48),((QKI)*1.0))
call SaveReal(HashData,(S5I),(13),((a)*1.0))
call SaveGroupHandle(HashData,(S5I),(133),(NTI()))
call SetUnitPathing(P7I,false)
call SetUnitVertexColor(P7I,255,255,255,50)
call AddPermanentAbility(P7I,'A20N')
call SetPlayerAbilityAvailable(GetOwningPlayer(P7I),'A1RJ',false)
call SetPlayerAbilityAvailable(GetOwningPlayer(P7I),'A20N',true)
set t=null
set P7I=null
endfunction
function YQ5 takes nothing returns boolean
if GetSpellAbilityId()=='A1RJ' then
call YP5()
endif
return false
endfunction
function RC1 takes nothing returns nothing
local trigger t=CreateTrigger()
call UMI(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t,Condition(function YQ5))
set t=null
endfunction
Собственно синусоеда по оси движения и все.
26
как сделать эллипс
Можно просто двигать по кругу, но домножать радиус описываемой окружности на некое плавающее значение.
29
как сделать эллипс, по которому героя нужно двигать
Как-то так.
To leave a comment please sign in to the site.