Random Effect at Point

tuantai120

Cool Member
Reaction score
1
why does it not work ??
JASS:
scope Star initializer Init

globals
    private constant integer SID = 'A002'
    private constant integer DID = 'h000'
    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
 

scorpion182

New Member
Reaction score
5
it should be like this??

JASS:

scope Star initializer Init

globals
    private constant integer SID = 'A000'
    private constant integer DID = 'h000'
    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
 

Attachments

  • Testing.w3x
    28.2 KB · Views: 100

tuantai120

Cool Member
Reaction score
1
@scorpion182 : thanks very much , but i dont know anything about statict method
can you explain it ??
 

T.s.e

Wish I was old and a little sentimental
Reaction score
133
JASS:
local real rad = an * .0175


Why not put it? It the faster...
Why not "put this" and scrap the conversion?
JASS:
    private constant real Angle = 6.283185


JASS:
    local real ra = GetRandomReal(1,Angle)
    local real xx = x + dist * Cos(ra)
    local real yy = y + dist * Sin(ra)


Static method is usually used in struct Init..
Jesus christ, that explains nothing. Atleast try to make sense.

Tuantai, I reccomend that you read this. It should explain any questions you have about the features of vJASS.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top