tuantai120
Cool Member
- Reaction score
- 1
how to make a spell with create random effect around x,y of caster ????
function tes takes nothing returns nothing
local unit caster=GetSpellAbilityUnit()
local real AOE=600.
local real an = GetRandomReal ( 1 , 360 )
local real dis = GetRandomReal ( 1 , AOE )
local real rad = an *3.14159/180
local real x = GetUnitX (caster) + dis * Cos ( rad )
local real y = GetUnitY (caster) + dis * Sin ( rad )
call DestroyEffect(AddSpecialEffect("YourEffect.mdx",x,y))
....
scope Star initializer Init
globals
private constant integer SID = 039;A002039;
private constant integer DID = 039;h000039;
private constant string SFX = "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl"
private constant string Order = "channel"
private constant real Interval = 0.04
private constant real AOE = 600.
private constant real Angle = 360.
endglobals
private struct sr
unit caster
unit dummy
real time
real dist
real angle
endstruct
private function Star takes nothing returns nothing
local timer t = GetExpiredTimer()
local sr d = GetCSData(t)
local real x = GetUnitX(d.caster)
local real y = GetUnitY(d.caster)
local real dist = GetRandomReal(1,AOE)
local real ra = GetRandomReal(1,Angle)
local real rad = ra * 3.14159/180
local real xx = x + dist * Cos(rad)
local real yy = y + dist * Sin(rad)
call DestroyEffect(AddSpecialEffect(SFX,xx,yy))
set d.time = d.time - Interval
if OrderId2String(GetUnitCurrentOrder(d.caster)) != Order or d.time <= 0 then
call ReleaseTimer(t)
call d.destroy()
set t = null
endif
endfunction
private function Act takes nothing returns nothing
local timer t
local sr d
local unit u = GetTriggerUnit()
local integer i = 1
local unit dumm
local integer max = 20
local real x = GetUnitX(u)
local real y = GetUnitY(u)
set d = sr.create()
set t = NewTimer()
call SetCSData(t,d)
set d.caster = u
set d.time = 250
set d.dummy = dumm
call BJDebugMsg("help")
call TimerStart(t,Interval,true,function Star)
set u = null
endfunction
private function Cond takes nothing returns boolean
return GetSpellAbilityId() == SID
endfunction
private function Init takes nothing returns nothing
local trigger s = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(s,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(s,Condition (function Cond))
call TriggerAddAction(s,function Act)
endfunction
endscope
local real xx = x + dist * Cos(ra * bj_DEGTORAD)
local real yy = y + dist * Sin(ra * bj_DEGTORAD)
scope Star initializer Init
globals
private constant integer SID = 039;A000039;
private constant integer DID = 039;h000039;
private constant string SFX = "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl"
private constant string Order = "channel"
private constant real Interval = 0.3
private constant real AOE = 600.
private constant real Angle = 360.
endglobals
private struct sr
unit caster
real dist
real angle
timer t
static method create takes unit c, timer t returns sr
local sr d=sr.allocate()
set d.caster=c
set d.t=t
return d
endmethod
private method onDestroy takes nothing returns nothing
call ReleaseTimer(.t)
endmethod
endstruct
private function Star takes nothing returns nothing
local timer t = GetExpiredTimer()
local sr d = sr(GetTimerData(t))
local real x = GetUnitX(d.caster)
local real y = GetUnitY(d.caster)
local real dist = GetRandomReal(1,AOE)
local real ra = GetRandomReal(1,Angle)
local real rad = ra * 3.14159/180
local real xx = x + dist * Cos(rad)
local real yy = y + dist * Sin(rad)
if OrderId2String(GetUnitCurrentOrder(d.caster)) != Order then
call d.destroy()
else
call DestroyEffect(AddSpecialEffect(SFX,xx,yy))
endif
set t=null
endfunction
private function Act takes nothing returns nothing
local timer t=NewTimer()
local sr d=sr.create(GetSpellAbilityUnit(),t)
call SetTimerData(t,integer(d))
call TimerStart(t,Interval,true,function Star)
set t = null
endfunction
private function Cond takes nothing returns boolean
return GetSpellAbilityId() == SID
endfunction
private function Init takes nothing returns nothing
local trigger s = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(s,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(s,Condition (function Cond))
call TriggerAddAction(s,function Act)
set s=null
endfunction
endscope
Why not "put this" and scrap the conversion?
private constant real Angle = 6.283185
Jesus christ, that explains nothing. Atleast try to make sense.Static method is usually used in struct Init..