Struct Breaking

Naga'sShadow

Ultra Cool Member
Reaction score
49
Could someone tell me what's wrong with this struct? It allway's fails right after the debugmsg marked 1. By fails I mean hangs and does nothing even though there are no waits in it. Even with the set's commented out and already having a value nothing happens.

JASS:
    private keyword lights
    
    globals
        private lights l
    endglobals
    
    private struct lights
        unit source
        unit target
        real x1 = 0
        real x2 = 0
        real y1 = 0
        real y2 = 0
        timer t = CreateTimer()
        lightning chain
        effect add
        effect drain
        real ticker = .05
        
        static method update takes nothing returns nothing
            set l.ticker = l.ticker + .05
            set l.x1 = GetUnitX(l.source)
            set l.y1 = GetUnitY(l.source)
            set l.x2 = GetUnitX(l.target)
            set l.y2 = GetUnitY(l.target)
            call MoveLightning(l.chain, true, l.x1, l.y1, l.x2, l.y2)
            
            if l.ticker >= 2.0 then
                call DestroyEffect(l.add)
                call DestroyEffect(l.drain)
                call DestroyLightning(l.chain)
                set l.source = null
                set l.target = null
                call PauseTimer(l.t)
                call DestroyTimer(l.t)
            endif
        endmethod
        
        static method create takes unit a, unit aa returns lights
            local integer index = 1
            local real x3 = 0
            local real y3 = 0
            call BJDebugMsg("1")
            set l.x1 = GetUnitX(a)
            call BJDebugMsg("1.1")
            set l.y1 = GetUnitY(a)
            call BJDebugMsg("1.2")
            set l.x2 = GetUnitX(aa)
            call BJDebugMsg("1.3")
            set l.y2 = GetUnitY(aa)
            call BJDebugMsg("1.4")
            set l.chain = AddLightningEx(LIGHTNING, true, l.x1, l.y1, 0, l.x2, l.y2, 0)
            call BJDebugMsg("1.5")
            loop 
                exitwhen index == 5
                set x3 = l.x1 + 50 * Cos(360/index)
                set y3 = l.y1 + 50 * Sin(360/index)
                call DestroyEffect(AddSpecialEffect(SFX1, x3, y3))
                set index = index + 1
            endloop
            
            set l.ticker = .01
            set l.source = a
            set l.target = aa
            set l.add = AddSpecialEffectTarget(SFX2, a, "origin")
            set l.drain = AddSpecialEffectTarget(SFX3, aa, "origin")
            call TimerStart(l.t, .05, true, function lights.update)
            return 0
        endmethod
    endstruct


Edit: Nevermind. I stopped using keywords that I only partially understand and made it work. Thanks but its fixed.
 

RaiJin

New Member
Reaction score
40
post the whole trigger?

why dont u have scope or library?

u can't use private/public's unless u use scopes/library

i dont even think u created a new instance
 

No_exit

Regular User (What is Custom User Title?)
Reaction score
40
You're trying to acces a struct which hasn't been allocated yet.

Any of the following lines will have to be somewhere in your code:
JASS:
set your_variable_name = lights.allocate()
or
JASS:
local lights your_variable_name = lights.allocate()


For your code (or the way you are currently trying to do things), you probably want to change it to this:
JASS:
static method create takes unit a, unit aa returns lights
            local integer index = 1
            local real x3 = 0
            local real y3 = 0
            set l = lights.allocate()
            call BJDebugMsg("1")
            ...


But I'm warning you that at this moment you can only have 1 lights at a time as it seems :/.
 
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