Help with struct

Laiev

Hey Listen!!
Reaction score
188
wrong section but anyway...

in jasshelper manual:

create
onDestroy
onInit


other you create
 

Komaqtion

You can change this now in User CP.
Reaction score
469
And to specify them a bit:

The 'create' method needs to be static, return the struct-type it's in, and the struct type (Generally) should be allocated in it :p

Example:

JASS:
struct Meh
    static method create takes nothing returns thistype // You can also use &#039;Meh&#039; here, but thistype is the same thing basically <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite7" alt=":p" title="Stick Out Tongue    :p" loading="lazy" data-shortname=":p" />
        local thistype this = thistype.allocate() // It&#039;s here we actually &quot;create&quot; the struct, and again you can use &#039;Meh&#039; instead of &#039;thistype&#039;
        //and you can also use any other letters than &#039;this&#039; but if you use &#039;this&#039; you will not need to write stuff like call data.destroy()
        //(In this case, &#039;data&#039; is what was used instead of &#039;this&#039; <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite2" alt=";)" title="Wink    ;)" loading="lazy" data-shortname=";)" />) you can just write call destroy() and it will destroy the struct <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite8" alt=":D" title="Big Grin    :D" loading="lazy" data-shortname=":D" />

        return this // Here we return the newly created struct to the &quot;system&quot; <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite8" alt=":D" title="Big Grin    :D" loading="lazy" data-shortname=":D" />
    endmethod
endstruct


Now, the onDestroy method is the method that' called when a struct is about to be destroyed.

Example of use:

JASS:
struct Meh
    location loc

    static method create takes unit u returns thistype
        local thistype this = thistype.allocate()

        set loc = GetUnitLoc( u ) // We will want to clean this up after the struct is 
        //destroyed (Or is about to be) and that&#039;s where the &#039;onDestroy&#039; method comes in <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite2" alt=";)" title="Wink    ;)" loading="lazy" data-shortname=";)" />

        call destroy() // This will now destroy this struct, and also call the &#039;onDestroy&#039; method <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite8" alt=":D" title="Big Grin    :D" loading="lazy" data-shortname=":D" />

        return this
    endmethod

    method onDestroy takes nothing returns nothing
        call RemoveLocation( loc) // And here we clean up the leak <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite8" alt=":D" title="Big Grin    :D" loading="lazy" data-shortname=":D" />
    endmethod
endstruct


Now to the 'onInit' method.
This method is, as it sound, called on Map Initialization (Or when the map is loading) meaning that you won't be able to see what's happening here, in-game.
This method is probably mostly used as the normal 'Init' function in all of the triggers, to register events to the trigger and add the actions and conditions.
And you do this just as you'd do in functions.

Example time ! :

JASS:
struct Meh
    location loc

    static method create takes unit u returns thistype
        local thistype this = thistype.allocate()

        set loc = GetUnitLoc( u )

        return this
    endmethod

    method onDestroy takes nothing returns nothing
        call RemoveLocation( loc)
    endmethod

    static method Actions takes nothing returns nothing
        local unit u = GetTriggerUnit()
        local thistype this = thistype.create( u )

        set u = null
    endmethod

    static method Conditions takes nothing returns boolean
        return GetSpellAbilityId() == &#039;test&#039;
    endmethod

    static method onInit takes nothing returns nothing
        local trigger t = CreateTrigger()

        call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
        call TriggerAddCondition( t, Condition( function Conditions ) )
        call TriggerAddAction( t, function Actions )
    endmethod
endstruct


Hope you understand a bit better now :D
 

Bribe

vJass errors are legion
Reaction score
67
allocate() deallocate() thistype.methodname.exists method operator readonly extends interface extends array etc.

It's all here.
 

Tyman2007

Ya Rly >.
Reaction score
74
Method is another name for a function

Scope is a group of functions

Allocating is simply taking the variables for use inside a method, most of the time requiring arguments and returning the data after use.

I'm not fully 100% sure on what EVERYTHING is, but I have a good understanding. The manuel will REALLY help you in coding with vJass.
 

Bribe

vJass errors are legion
Reaction score
67
scope is essentially another name for namespace which is used in many programming languages.

struct -> class
structname.create() -> new structname()

protected doesn't really have a vJass equivelant yet, though similar protocols are stub methods, delegates, and the five universal vJass methods (create, destroy, onDestroy, allocate, deallocate).
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top