Advice about data storage for aggro system

Embrace_It

New Member
Reaction score
9
Hi guys,

I'm making an aggro system, like in WoW.

I need some kind of system that can store the data.
I need to store the following:

- The unit registered to the system
- The five units on the above unit's aggro list
- The five units' aggro (integers)

I was considering using AIDS, but then I read this in the documentation:
- You cannot use array members.

Please suggest an alternative :) I'm thinking hashtables, but I'm having a hard time figured how to save it. Maybe something like:

JASS:

call SaveUnit(HT, GetHandleId(registered), 0, registered)
call SaveUnit(HT, GetHandleId(registered), 1, unit1)
...
call SaveInteger(HT, GetHandleId(registered), 1, aggro1) // &lt;-- collision? I figure blizz would take this into account <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" />
 
>- You cannot use array members.
I would suggest AIDS:
JASS:
struct FiveUnits
    private unit array data[5]
    method operator [] takes integer index returns unit
        return this.data[index]
    endmethod
    method operator []= takes integer index, unit whichUnit returns nothing
        set this.data[index]=whichUnit
    endmethod
endstruct
struct MyAIDSDataStruct extends array
    private FiveUnits units // now functions same as private unit array units[5]
    //! runtextmacro AIDS()
    private method AIDS_onCreate takes nothing returns nothing
        set this.units=FiveUnits.create()
    endmethod
    private method AIDS_onDestroy takes nothing returns nothing
        call this.units.destroy()
    endmethod
endstruct

It's not really true that you can't use array members... :)

By the way, the alternative is you can use a wrapper. It will still be faster than hashtables off memory:
JASS:
struct MyUnitData
    private unit unit
    private unit array units[5]
    private unit array aggro[5]
    
    static method create takes unit u returns thistype
        local thistype this=thistype.allocate()
        set this.unit=u
        return this
    endmethod
endstruct
struct MyUnitDataWrapper extends array
    MyUnitData data
    //! runtextmacro AIDS()
    private method AIDS_onCreate takes nothing returns nothing
        set this.data=MyUnitData.create(this.unit)
    endmethod
    private method AIDS_onDestroy takes nothing returns nothing
        call this.data.destroy()
    endmethod
endstruct
function GetData takes unit u returns MyUnitData
    return MyUnitDataWrapper<u>.data // inlines to Array[Native(u)]
endfunction
</u>
 
Or you can use AIDS in conjunction with a 2 stacks.

That'd be best you were wanting a dynamic number (not exactly 5 each time) ;).

Although, you could want 5 each time, in which case Jesus4Lyf's method is best ; )
 
>Or you can use AIDS in conjunction with a 2 stacks.
Not stacks, linked lists. But the nice thing would be making them a linked list means each node would be a struct, meaning each node could contain a unit, the aggro value, and anything else to attach...
I'd do it. But my point with my post was actually AIDS structs can have array members. :p
 
It's not really true that you can't use array members...

You should probably edit your documentation then :) For the rest of us that aren't that advanced in vJass, this is missleading, although I understand now :thup:

AIDS it is then, thanks again Jesus4Lyf and Nestharus!

EDIT: Gotta spread some rep first. You help me all too often :p
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • The Helper The Helper:
    It is weird seeing a way more realistic users online number
  • The Helper The Helper:
    Happy Tuesday Night!
    +1
  • V-SNES V-SNES:
    Happy Friday!
    +1
  • The Helper The Helper:
    News portal has been retired. Main page of site goes to Headline News forum now
  • The Helper The Helper:
    I am working on getting access to the old news portal under a different URL for those that would rather use that for news before we get a different news view.
  • Ghan Ghan:
    Easily done
    +1
  • The Helper The Helper:
    https://www.thehelper.net/pages/news/ is a link to the old news portal - i will integrate it into the interface somewhere when i figure it out
  • Ghan Ghan:
    Need to try something
  • Ghan Ghan:
    Hopefully this won't cause problems.
  • Ghan Ghan:
    Hmm
  • Ghan Ghan:
    I have converted the Headline News forum to an Article type forum. It will now show the top 20 threads with more detail of each thread.
  • Ghan Ghan:
    See how we like that.
  • The Helper The Helper:
    I do not see a way to go past the 1st page of posts on the forum though
  • The Helper The Helper:
    It is OK though for the main page to open up on the forum in the view it was before. As long as the portal has its own URL so it can be viewed that way I do want to try it as a regular forum view for a while
  • Ghan Ghan:
    Yeah I'm not sure what the deal is with the pagination.
  • Ghan Ghan:
    It SHOULD be there so I think it might just be an artifact of having an older style.
  • Ghan Ghan:
    I switched it to a "Standard" article forum. This will show the thread list like normal, but the threads themselves will have the first post set up above the rest of the "comments"
  • The Helper The Helper:
    I don't really get that article forum but I think it is because I have never really seen it used on a multi post thread
  • Ghan Ghan:
    RpNation makes more use of it right now as an example: https://www.rpnation.com/news/
  • The Helper The Helper:

      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