Newbie questions about HAIL usage

Darius34

New Member
Reaction score
30
1. Can handles and non-handles be attached to handles without the usage of a struct to reference them collectively (say, if you only have one variable to attach to a periodic timer)? Is there a difference between attaching a variable directly and attaching a struct instead with a reference to that variable?

2. Since most of the time I'll be dealing with attached structs, can a universal struct (integer) attachment function be created and used everywhere instead of using multiple use-specific functions? Are there any merits to creating multiple specific functions, besides readability?

Thanks.

I'll use this thread if I have any more in future.
 

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
1. If you use a system that attaches an integer to a handle, yes. This means you won't be using HAIL. You just have to create a global array of the type, and create a topindex to deal with the variable. You'll also need a system to recycle them, so that you don't go over the 8192 array limit. Let me know if you don't understand.

2. I believe you can use a universal struct.
It kind of depends on what you're creating. Are you creating your own system?
 

Darius34

New Member
Reaction score
30
1. Umm, yeah, I don't really understand. I am using HAIL. Let me rephrase my question a bit: it's more whether HAIL can be used to attach handles and other variable types to things directly, instead of through a struct/integer.

2. I'm creating spells, miscellaneous stuff. I was just wondering if the functions created by HAIL could be reused repeatedly, for example GetStruct() for all spells that attach structs.
 

Flare

Stops copies me!
Reaction score
662
1) If you take a look at Strilanc's example in the HAIL thread, he attached a rect to a unit, I believe (or, at least, a rect to some particular handle), so I would assume it can attach just about anything to a handle.

EDIT: Found it! :p
This macro creates three functions: GetUnitWaypoint, SetUnitWaypoint, and ResetUnitWaypoint. You use these functions to access the waypoint property you have just created. So when you spawn a unit you call SetUnitWaypoint(spawnedUnit, firstWaypoint). When a unit reaches a waypoint you check if the waypoint it has reached is equivalent to GetUnitWaypoint(reachingUnit). When a unit dies you remove the waypoint property using ResetUnitWaypoint(dyingUnit).

2) Ye, the generated functions can be used anywhere, just declare them in a library and leave the scope argument blank e.g.

JASS:
library HAILInit requires HAIL
//! runtextmacro HAIL_CreateProperty ("Struct", "integer", "")
endlibrary
 

Darius34

New Member
Reaction score
30
Okay, thank you.

When must the scope argument be blank and when must it not be? What other values can it take?

Edit: Also, this is off-topic, but since I didn't want to create a whole new topic for it...

Would this cause a desync?

JASS:
function functionname takes nothing returns nothing
    local unit subject = GetTriggerUnit()

    if IsUnitEnemy(subject, GetLocalPlayer()) then
        return
    else
        // Actions
    endif

    set subject = null
endfunction
 

Flare

Stops copies me!
Reaction score
662
When must the scope argument be blank and when must it not be? What other values can it take?

Scope argument can be " ", "public" or "private".

If you want a very general function to use everywhere, just declare it once in a library with blank or public scope argument. If you want individual functions for each scope/library, give it private in the argument
 
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