constant unittype UNIT_TYPE_CUSTOM

XeRo13g

New Member
Reaction score
3
I've made several tests and searched around but I've found nothing...

Is there a way to add new classifications to be used with IsUnitType native?
That could really make things 1000% easier.

Thnx.-
 

Dirac

22710180
Reaction score
147
New classifications besides the ones imposed by warcraft? No.

You would have to create a struct that reads unit's custom value and have multiple "pseudo" types created into it
JASS:
struct CustomUnitType extends array
    
    boolean fish
    boolean unicorn
    
    static method makeFish takes unit whichUnit returns nothing
        local thistype this=GetUnitUserData(whichUnit)
        set this.fish=true
    endmethod
    
    static method isFish takes unit whichUnit returns boolean
        return thistype(GetUnitUserData(whichUnit).fish
    endmethod
    
endstruct
 

XeRo13g

New Member
Reaction score
3
Thanks for the answer.
The problem is that I've read about structs yesterday for the first time and from what I understand, you need a specific unit for using it, not a unit type.

In this particular instance, I need the classification to distinguish 'sold units'.
If I'm to run the method to attach a new classification to each sold unit, it defeats the purpose of the actual classification. I just wanted to make the code more adjustable and avoid a very long:

JASS:
If u=='xxxx' and u=='xxxy' or u=='xxyy' etc


Of course, since I'm not very familiar with structs, I might be easily wrong.
 

Dirac

22710180
Reaction score
147
Ok this is what I understand from what you're telling me.
You want units of type [ljass]'xxxx'[/ljass] to have an specific type.
There are 2 ways of doing it.

First way, add the type for each unit once it enters the map, using an unit indexer, like AIDS
JASS:
struct CustomTypeIndexer extends array
    
    boolean fish
    
    method AIDS_onIndex takes nothing returns nothing
        if GetUnitTypeId(this.unit)=='xxxx' then
            set this.fish=true
        endif
    endmethod
    
    //! runtextmacro AIDS()

endstruct
That way provides flexibility, if you later want that unit to stop being a fish you can revert it
To check do [ljass]CustomTypeIndexer[GetUnitUserData(unit)].fish==true[/ljass]

The other way doesn't provide that type of flexibility and uses Hashtables
JASS:
globals
    private Table UNIT_TYPE_FISH
endglobals


function onInit takes nothing returns nothing
    set UNIT_TYPE_FISH=Table.create()
    
    set UNIT_TYPE_FISH.boolean['xxxx']=true
endfunction

To check do [ljass]UNIT_TYPE_FISH.boolean['xxxx']==true[/ljass]
 

luorax

Invasion in Duskwood
Reaction score
67
There's no AIDS_onIndex method atm.

JASS:
struct CustomTypeIndexer extends array
    boolean fish
    
    method AIDS_onCreate takes nothing returns nothing
        set this.fish = GetUnitTypeId(this.unit) == 'xxxx'
    endmethod
    
    //! runtextmacro AIDS()
endstruct


Your way Dirac would also leave "fish" as true once the unit gets deindexed, and since "[]" uses the unit's custom index to return the struct instance (that will be given to the unit no matter whant "AIDS_filter" returns), it might return invalid information if a non-fish unit inherits a fish's old id.
 

Dirac

22710180
Reaction score
147
I never use AIDS, sue me.
And those were examples, he should write it his own way

I already told Laiev on skype, but idk why i never saw that i could do it that way. Very nice
 

luorax

Invasion in Duskwood
Reaction score
67
Well, I still stick to J4L's resources, 'cuz I prefer readibility and usefulness, that minor speed gain doesn't bother me (Laiev uses/used AIDS tho' and he didn't notice it either)

Well, inlining booleans that way is indeed very nice, I was a little but surprised too when I saw them first time in a TextTag library.
 

XeRo13g

New Member
Reaction score
3
It seems that after a good night sleep, I've come to realize that there are many ways to make such classification but not in the "logically correct" way I was trying to. Using: Unit has an ability, is flying, is ranger and so on...would have the desired effects as far as my current problem concerns. I'm just posting this, just in case it helps someone, somewhere.

Thanks everyone for the useful suggestions, +rep

PS. Dirac, even though I've managed to give you +rep, you seem to be more helpful than the reputation limitations allow; Thus I always find difficult to grant you rep:)
 

luorax

Invasion in Duskwood
Reaction score
67
Using: Unit has an ability

Creating dummy abils based on "Sphere" is a good way for sure, I'm using it to create custom "classifications" such as "Dummy Unit", "Hero", "Out This Dimension", etc.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top