No problem marcos!
Ando trabajando en esto nuevamente:
[jass]library DimensionalArray/*
****************************************************************************************
*
* DimensionalArray
* ________________
* v2.0.0.0
* by Thelordmarshall
*
*
****************************************************************************************/
//CONFIGURATION
//====================================================================
globals
private constant integer MAX_INSTANCES = 8191
endglobals
//====================================================================
//ENDCONFIGURATION
globals
private hashtable h=InitHashtable()
private integer key=0
private integer size=0
private integer keySize=0
private string array keyId
private integer array list[MAX_INSTANCES]
private boolean array active[MAX_INSTANCES]
endglobals
struct ArrayCore
private method operator hash takes nothing returns hashtable
if(active[this] and ""!=keyId[keySize])then
set key=StringHash(keyId[keySize])
set keyId[keySize]=""
if(0 set keySize=keySize-1
endif
return h
endif
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"[Dimensional-Array] error: null Array ("+I2S(this)+" )")
return null
endmethod
method flush takes nothing returns nothing
call FlushChildHashtable(.hash,this)
endmethod
//! textmacro ARRAY_OPERATOR takes OPERATOR,ARGUMENT,FUNC1,FUNC2
method operator $OPERATOR$= takes $ARGUMENT$ value returns nothing
call Save$FUNC1$(.hash,this,key,value)
endmethod
method has$FUNC2$ takes nothing returns boolean
return HaveSaved$FUNC2$(.hash,this,key)
endmethod
method remove$FUNC2$ takes nothing returns nothing
call RemoveSaved$FUNC2$(.hash,this,key)
endmethod
//! endtextmacro
//! runtextmacro ARRAY_OPERATOR("boolean","boolean","Boolean","Boolean")
//! runtextmacro ARRAY_OPERATOR("handle","agent","AgentHandle","Handle")
//! runtextmacro ARRAY_OPERATOR("integer","integer","Integer","Integer")
//! runtextmacro ARRAY_OPERATOR("real","real","Real","Real")
//! runtextmacro ARRAY_OPERATOR("string","string","Str","String")
//! textmacro ARRAY_TYPE takes TYPEA,TYPEB
method operator $TYPEA$ takes nothing returns $TYPEA$
return Load$TYPEB$(.hash,this,key)
endmethod
//! endtextmacro
// type list:
//=========================| Type | FuncType |================
//! runtextmacro ARRAY_TYPE( "boolean", "Boolean" )
//! runtextmacro ARRAY_TYPE( "boolexpr", "BooleanExprHandle" )
//! runtextmacro ARRAY_TYPE( "button", "ButtonHandle" )
//! runtextmacro ARRAY_TYPE( "defeatcondition", "DefeatConditionHandle" )
//! runtextmacro ARRAY_TYPE( "destructable", "DestructableHandle" )
//! runtextmacro ARRAY_TYPE( "dialog", "DialogHandle" )
//! runtextmacro ARRAY_TYPE( "effect", "EffectHandle" )
//! runtextmacro ARRAY_TYPE( "fogmodifier", "FogModifierHandle" )
//! runtextmacro ARRAY_TYPE( "fogstate", "FogStateHandle" )
//! runtextmacro ARRAY_TYPE( "force", "ForceHandle" )
//! runtextmacro ARRAY_TYPE( "group", "GroupHandle" )
//! runtextmacro ARRAY_TYPE( "image", "ImageHandle" )
//! runtextmacro ARRAY_TYPE( "integer", "Integer" )
//! runtextmacro ARRAY_TYPE( "item", "ItemHandle" )
//! runtextmacro ARRAY_TYPE( "itempool", "ItemPoolHandle" )
//! runtextmacro ARRAY_TYPE( "leaderboard", "LeaderboardHandle" )
//! runtextmacro ARRAY_TYPE( "lightning", "LightningHandle" )
//! runtextmacro ARRAY_TYPE( "location", "LocationHandle" )
//! runtextmacro ARRAY_TYPE( "multiboard", "MultiboardHandle" )
//! runtextmacro ARRAY_TYPE( "multiboarditem", "MultiboardItemHandle" )
//! runtextmacro ARRAY_TYPE( "player", "PlayerHandle" )
//! runtextmacro ARRAY_TYPE( "quest", "QuestHandle" )
//! runtextmacro ARRAY_TYPE( "questitem", "QuestItemHandle" )
//! runtextmacro ARRAY_TYPE( "real", "Real" )
//! runtextmacro ARRAY_TYPE( "rect", "RectHandle" )
//! runtextmacro ARRAY_TYPE( "region", "RegionHandle" )
//! runtextmacro ARRAY_TYPE( "sound", "SoundHandle" )
//! runtextmacro ARRAY_TYPE( "string", "Str" )
//! runtextmacro ARRAY_TYPE( "texttag", "TextTagHandle" )
//! runtextmacro ARRAY_TYPE( "timerdialog", "TimerDialogHandle" )
//! runtextmacro ARRAY_TYPE( "timer", "TimerHandle" )
//! runtextmacro ARRAY_TYPE( "trackable", "TrackableHandle" )
//! runtextmacro ARRAY_TYPE( "triggeraction", "TriggerActionHandle" )
//! runtextmacro ARRAY_TYPE( "triggercondition","TriggerConditionHandle" )
//! runtextmacro ARRAY_TYPE( "event", "TriggerEventHandle" )
//! runtextmacro ARRAY_TYPE( "trigger", "TriggerHandle" )
//! runtextmacro ARRAY_TYPE( "ubersplat", "UbersplatHandle" )
//! runtextmacro ARRAY_TYPE( "unit", "UnitHandle" )
//! runtextmacro ARRAY_TYPE( "unitpool", "UnitPoolHandle" )
//! runtextmacro ARRAY_TYPE( "widget", "WidgetHandle" )
//! runtextmacro ARRAY_TYPE( "hashtable", "HashtableHandle" )
endstruct
//! textmacro ARRAY_DIMENSIONAL takes NAME,RETURNS,EXTENDS
struct $NAME$ extends $EXTENDS$
method operator [] takes integer id returns $RETURNS$
set keyId[keySize]=keyId[keySize]+","+I2S(id)
return this
endmethod
endstruct
//! endtextmacro
//! runtextmacro ARRAY_DIMENSIONAL("Array4D","ArrayCore","array")
//! runtextmacro ARRAY_DIMENSIONAL("Array3D","Array4D","ArrayCore")
//! runtextmacro ARRAY_DIMENSIONAL("Array2D","Array3D","ArrayCore")
struct Array extends ArrayCore
method operator [] takes integer id returns Array2D
set keySize=keySize+1
set keyId[keySize]=I2S(id)
return this
endmethod
static method create takes nothing returns Array
local thistype this=list[0]
if(0==this)then
set this=size+1
set size=this
else
set list[0]=list[this]
endif
set active[this]=true
return this
endmethod
method destroy takes nothing returns nothing
call ArrayCore(this).flush()
set active[this]=false
set list[this]=list[0]
set list[0]=this
endmethod
endstruct
endlibrary[/jass]

![[vJass] Ayuda con un codigo pls! Wc3scr10](https://i.servimg.com/u/f58/19/62/13/34/wc3scr10.jpg)