Help with custom create method

dudeim

New Member
Reaction score
22
Hey,

I'm having a bit of a problem with creating a custom create method the way I want to.

Quick example of how I want to do it (may not even run and could be a few errors in it):

JASS:
library a

struct Unit
    integer value1
    integer value2
    unit U
    //etc.. anything i need in here
    
    static method create takes unit uc returns Unit
        local Unit u = Unit.allocate()
        set u.U = uc
        set u.value1 = 15 //just an example
        set u.value2 = 20
        return u
    endmethod
    
endstruct

endlibrary

//ok this is done but now I have a trigger which fires when I press esc

function Trig_Untitled_Trigger_002_Actions takes nothing returns nothing
local Unit u = Unit(//say we input a unit A in here the unit is a preset and is thereby in this case always the same)
//now if I do this
    call BJDebugMsg("Value1: " +I2S(u.value1)) //this always displays 15
    call BJDebugMsg("Value2: " +I2S(u.value2)) //this always displays 20
    set u.value1 = 35
    set u.value2 = 120
    call BJDebugMsg("Value1: " +I2S(u.value1)) //this always displays 35
    call BJDebugMsg("Value2: " +I2S(u.value2)) //this always displays 120
    //now I want to keep the value1 and value2 the same if I change them somewhere for the particular unit
    //how can I do that?
endfunction

//===========================================================================
function InitTrig_Untitled_Trigger_002 takes nothing returns nothing
    set gg_trg_Untitled_Trigger_002 = CreateTrigger(  )
    call TriggerRegisterPlayerEventEndCinematic( gg_trg_Untitled_Trigger_002, Player(0) )
    call TriggerAddAction( gg_trg_Untitled_Trigger_002, function Trig_Untitled_Trigger_002_Actions )
endfunction


This is just an example of how I want to do it
Basicly I want to attach values to units and I want to be able to change them anytime anywhere and keep the same values then.
So how do I do that?

Thanks!
 

tooltiperror

Super Moderator
Reaction score
231
Basically the idea behind doing something like this is attaching an integer to a unit, or pretty much just AIDS.

The other thing you can do is manually do this. Which is to say, a pain. Here's something to get you started, you're going to need an indexer or you'll have to use a hashtable struct which is more inefficient (how it should basically look[noparse]:)[/noparse]

JASS:

struct Unit extends array
	readonly unit unit
	integer weight

	static method create takes unit u returns thistype
		local thistype this=thistype(GetUnitUserData(u))
		set this.unit = u
		return this
	endmethod

endstruct

// somewhere
local Unit foo = Unit.create(CreateUnit(...))
set foo.weight = 100 // lbs
 

dudeim

New Member
Reaction score
22
Ok thanks! Got it to work;)
Also another quick question how would I do something like this for an item type?
So I have sword 1 and sword 2 and each has their own values just like for the units.
 

tooltiperror

Super Moderator
Reaction score
231
You would have to hash based on Handle Id, I think.
 

dudeim

New Member
Reaction score
22
Could you give me an example never hashed nor used hashtables (think I need to use them:p)
 

tooltiperror

Super Moderator
Reaction score
231
JASS:
globals
	hashtable Hash = InitHashtable() // You must declare it with this method
endglobals

function SetItemData takes item i, integer value returns item
	// Hash           | The table we're using
	// 0              | The first dimension to save in.
	// GetHandleId(i) | Save the second dimension as the Handle Id of the item.
	// value          | The actual value to save there.
	call SaveInteger(Hash, 0, GetHandleId(i), value)
	// I return the item in case someone wants to inline 
	return i
endfunction

function GetItemData takes item i returns integer
	// Hash           | The table we're using
	// 0              | The same parent key as above
	// GetHandleId(i) | We utilize the idea that the Handle ID is the same
	return LoadInteger(Hash, 0, GetHandleId(i))
endfunction


It will help you to read the Hashtable API.
 
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