- Joined
- Nov 30, 2007
- Messages
- 1,202
Can I save a struct in a hashtable? Want to attach it to a unit. Preferably without Unit Indexer.
Try using SaveInteger.
private function OnStart takes nothing returns boolean
if Spell() then
if hex[index] == null then
set hex[index] = Hex.create()
endif
set hex[index].u = GetTriggerUnit()
set hex[index].x = GetLocationX(GetSpellTargetLoc())
set hex[index].y = GetLocationY(GetSpellTargetLoc())
call SaveInteger(hash, GetHandleId(hex[index].u), 1, index)
set index = index + 1
endif
return false
endfunction
private function OnStop takes nothing returns boolean
local integer i
local integer j
if Spell() then
set i = LoadInteger(hash, GetHandleId(GetTriggerUnit()), 1)
set j = index - 1
call FlushChildHashtable(hash, GetHandleId(hex[i].u))
call FlushChildHashtable(hash, GetHandleId(hex[j].u))
call SaveInteger(hash, GetHandleId(hex[j].u), 1, i)
set hex[i] = hex[j]
call hex[j].destroy()
set index = j
endif
return false
endfunction
method groupFilter takes nothing returns boolean
return not IsUnitInGroup(GetFilterUnit(), .hexed) and IsPlayerEnemy(GetOwningPlayer(.u), GetOwningPlayer(GetFilterUnit()))
endmethod
method addUnitsInRange takes group g returns group
call GroupEnumUnitsInRangeOfLoc(g, Location(.x, .y), RADIUS, function .groupFilter)
return g
endmethod
call FlushChildHashtable(hash, GetHandleId(hex[i].u))
call FlushChildHashtable(hash, GetHandleId(hex[j].u))
call SaveInteger(hash, GetHandleId(hex[j].u), 1, i)
call FlushChildHashtable(hash, GetHandleId(hex[i].u))
call SaveInteger(hash, GetHandleId(hex[j].u), 1, i)
call GroupEnumUnitsInRangeOfLoc(g, Location(.x, .y), RADIUS, function .groupFilter)
The function "GroupEnumUnitsInRangeOfLoc" expects a function which "takes nothing returns boolean". You are giving it a function which "takes integer structref returns boolean".why is this statement illegal?
private static STRUCTNAMEGOESHERE fmreg
static method groupFilter takes nothing returns boolean
return not IsUnitInGroup(GetFilterUnit(), fmreg.hexed) and IsPlayerEnemy(GetOwningPlayer(fmreg.u), GetOwningPlayer(GetFilterUnit()))
endmethod
method addUnitsInRange takes group g returns group
set fmreg = this
call GroupEnumUnitsInRangeOfLoc(g, Location(.x, .y), RADIUS, function STRUCTNAMEGOESHERE.groupFilter)
return g
endmethod
Yes that looks about right. Did it compile?