jube1412
New Member
- Reaction score
- 2
Edit: PROBLEM SOLVED!!!
More searches take me to [thread=42918]this[/thread], which gave me a solution. Apparently one can have a filter function inside a struct (or at least that's what I've understood).
Thank you all who have taken a look. Please close the thread and have a great day <3.
===================================================================
The spell is a Shockwave made from scratch. It would create a dummy unit with the Shockwave model and move it on a straight line, dealing damage to those on its path.
The movement part of the spell is finished, what is left now is the damage part.
My idea is simply: Pick all units in an area around the dummy Shockwave, run them through a Filter function, deal damage to those units who pass the filter, add them to a separate group to avoid hitting the same units twice, and finally release the group when the Shockwave ends.
That is exactly the wall I'm hitting. With my current JASS knowledge I can't find an efficient way to implement that concept.
I'm using Timer32 and GroupUtils for the spell.
The (working) initial code with just the "movement" part:
Any help or input would be much appreciated. <3 Thank you and have a nice day.
More searches take me to [thread=42918]this[/thread], which gave me a solution. Apparently one can have a filter function inside a struct (or at least that's what I've understood).
Thank you all who have taken a look. Please close the thread and have a great day <3.
===================================================================
The spell is a Shockwave made from scratch. It would create a dummy unit with the Shockwave model and move it on a straight line, dealing damage to those on its path.
The movement part of the spell is finished, what is left now is the damage part.
My idea is simply: Pick all units in an area around the dummy Shockwave, run them through a Filter function, deal damage to those units who pass the filter, add them to a separate group to avoid hitting the same units twice, and finally release the group when the Shockwave ends.
That is exactly the wall I'm hitting. With my current JASS knowledge I can't find an efficient way to implement that concept.
I'm using Timer32 and GroupUtils for the spell.
The (working) initial code with just the "movement" part:
JASS:
scope CustomShockwave initializer init
private struct MoveShockwave
unit d
real x
real y
real ang
real dist
real limDist
real curDist = 0
real dmg
private method periodic takes nothing returns nothing
if .curDist >= .limDist then
call .stopPeriodic()
call .destroy()
endif
set .curDist = .curDist+.dist
set .x = .x+.dist*Cos(.ang*bj_DEGTORAD)
set .y = .y+.dist*Sin(.ang*bj_DEGTORAD)
call SetUnitX(.d,.x)
call SetUnitY(.d,.y)
endmethod
static method create takes unit d, real x, real y, real ang, real dist, real limDist, real dmg returns MoveShockwave
local MoveShockwave data = MoveShockwave.allocate()
set data.d = d
set data.x = x
set data.y = y
set data.ang = ang
set data.dist = dist
set data.limDist = limDist
set data.dmg = dmg
call data.startPeriodic()
return data
endmethod
method onDestroy takes nothing returns nothing
call KillUnit(.d)
set .d = null
endmethod
implement T32x
endstruct
private function CustomShockwave takes nothing returns boolean
local unit c = GetTriggerUnit()
local unit d
local real x = GetSpellTargetX()
local real y = GetSpellTargetY()
local real ang = bj_RADTODEG*Atan2(y-GetUnitY(c),x-GetUnitX(c))
local real dist = 30.
local real limDist = 800.
local real dmg = 300.
local player p = GetOwningPlayer(c)
local MoveShockwave data
if GetSpellAbilityId() == 039;A003039; then
set d = CreateUnit(p,039;e005039;,x,y,ang)
set data = MoveShockwave.create(d,x,y,ang,dist,limDist,dmg)
endif
set c = null
set d = null
return false
endfunction
private function init takes nothing returns nothing
local trigger t = CreateTrigger()
local integer i = 0
loop
call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i = i+1
exitwhen i == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(t,Condition(function CustomShockwave))
endfunction
endscope
Any help or input would be much appreciated. <3 Thank you and have a nice day.