- Joined
- Jul 23, 2009
- Messages
- 1,033
Is it possible to use more than one unit indexer in the same map or will it mess something up? I have 2 systems which both need different unit indexers in my map.
Only one will work
and that one is much slower than the other one
You certainly don't need 2 unit indexers in your map. They nearly always use the same method (changing the custom value of units), so you can safely remove one of them without any negative consequences.
Thanks for the reply muzzel.
Here is the first indexer which I currently use for a threat system:
And here is the other one that I need for a stun system:
- Unit Indexer
- Events
- Map initialization
- Conditions
- Actions
- Custom script: call ExecuteFunc("InitializeUnitIndexer")
- Custom script: endfunction
- Custom script:
- Custom script: function ClearUnitIndex takes nothing returns nothing
- Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
- (Custom value of UDexUnits[UDex]) Equal to (==) 0
- Then - Actions
- Set UnitIndexLock[UDex] = (UnitIndexLock[UDex] - 1)
- Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
- UnitIndexLock[UDex] Equal to (==) 0
- Then - Actions
- Set UDexNext[UDexPrev[UDex]] = UDexNext[UDex]
- Set UDexPrev[UDexNext[UDex]] = UDexPrev[UDex]
- Set UDexPrev[UDex] = 0
- Set UnitIndexEvent = 0.00
- Set UnitIndexEvent = 2.00
- Set UnitIndexEvent = 0.00
- Set UDexUnits[UDex] = No unit
- Set UDexNext[UDex] = UDexRecycle
- Set UDexRecycle = UDex
- Else - Actions
- Else - Actions
- Custom script: endfunction
- Custom script:
- Custom script: function IndexUnit takes nothing returns boolean
- Custom script: local integer pdex = udg_UDex
- Custom script: local integer ndex
- -------- - --------
- -------- You can customize the following block - if conditions are false the (Matching unit) won't be indexed. --------
- -------- - --------
- Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
- UnitIndexerEnabled Equal to (==) True
- (Custom value of (Matching unit)) Equal to (==) 0
- Then - Actions
- Set UDexWasted = (UDexWasted + 1)
- Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
- UDexWasted Equal to (==) 15
- Then - Actions
- Set UDexWasted = 0
- Set UDex = UDexNext[0]
- Custom script: loop
- Custom script: exitwhen udg_UDex == 0
- Custom script: set ndex = udg_UDexNext[udg_UDex]
- Custom script: call ClearUnitIndex()
- Custom script: set udg_UDex = ndex
- Custom script: endloop
- Else - Actions
- Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
- UDexRecycle Equal to (==) 0
- Then - Actions
- Set UDex = (UDexGen + 1)
- Set UDexGen = UDex
- Else - Actions
- Set UDex = UDexRecycle
- Set UDexRecycle = UDexNext[UDex]
- Set UDexUnits[UDex] = (Matching unit)
- Unit - Set the custom value of UDexUnits[UDex] to UDex
- Set UDexPrev[UDexNext[0]] = UDex
- Set UDexNext[UDex] = UDexNext[0]
- Set UDexNext[0] = UDex
- Set UnitIndexLock[UDex] = 1
- Set UnitIndexEvent = 0.00
- Set UnitIndexEvent = 1.00
- Set UnitIndexEvent = 0.00
- Custom script: set udg_UDex = pdex
- Else - Actions
- Custom script: return false
- Custom script: endfunction
- Custom script:
- Custom script: function InitializeUnitIndexer takes nothing returns nothing
- Custom script: local integer i = 16
- Custom script: local boolexpr b = Filter(function IndexUnit)
- Custom script: local region re = CreateRegion()
- Custom script: local trigger t = GetTriggeringTrigger()
- Custom script: local rect r = GetWorldBounds()
- Custom script: call RegionAddRect(re, r)
- Custom script: call TriggerRegisterEnterRegion(t, re, b)
- Custom script: call TriggerClearActions(t)
- Custom script: call TriggerAddAction(t, function ClearUnitIndex)
- Set UnitIndexerEnabled = True
- Custom script: loop
- Custom script: set i = i - 1
- Custom script: call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup, Player(i), b)
- Custom script: exitwhen i == 0
- Custom script: endloop
- Custom script: call RemoveRect(r)
- Custom script: set re = null
- Custom script: set r = null
- Custom script: set t = null
- Custom script: set b = null
- Set UnitIndexEvent = 3.00
- Set UnitIndexEvent = 0.00
- Unit indexer by Bribe
- Events
- Map initialization
- Conditions
- Actions
- Custom script: call ExecuteFunc("InitializeUnitIndexer")
- Custom script: endfunction
- Custom script: function IndexUnit takes nothing returns boolean
- Custom script: local integer pdex = udg_UDex
- Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
- UnitIndexerEnabled Equal to (==) True
- Then - Actions
- Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
- UDexRecycle Equal to (==) 0
- Then - Actions
- Set UDex = (UDexGen + 1)
- Set UDexGen = UDex
- Else - Actions
- Set UDex = UDexRecycle
- Set UDexRecycle = UDexNext[UDex]
- Set UDexUnits[UDex] = (Matching unit)
- Unit - Set the custom value of UDexUnits[UDex] to UDex
- Set UDexPrev[UDexNext[0]] = UDex
- Set UDexNext[UDex] = UDexNext[0]
- Set UDexNext[0] = UDex
- Set UnitIndexEvent = 0.00
- Set UnitIndexEvent = 1.00
- Set UnitIndexEvent = 0.00
- Custom script: set udg_UDex = pdex
- Else - Actions
- Custom script: return false
- Custom script: endfunction
- Custom script: function IndexNewUnit takes nothing returns boolean
- Custom script: local integer pdex = udg_UDex
- Custom script: local integer ndex
- Set UDexWasted = (UDexWasted + 1)
- Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
- UDexWasted Equal to (==) 15
- Then - Actions
- Set UDexWasted = 0
- Set UDex = UDexNext[0]
- Custom script: loop
- Custom script: exitwhen udg_UDex == 0
- Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
- (Custom value of UDexUnits[UDex]) Equal to (==) 0
- Then - Actions
- Custom script: set ndex = udg_UDexNext[udg_UDex]
- Custom script: set udg_UDexNext[udg_UDexPrev[udg_UDex]] = ndex
- Custom script: set udg_UDexPrev[ndex] = udg_UDexPrev[udg_UDex]
- Set UDexPrev[UDex] = 0
- Set UnitIndexEvent = 2.00
- Set UnitIndexEvent = 0.00
- Set UDexUnits[UDex] = No unit
- Set UDexNext[UDex] = UDexRecycle
- Set UDexRecycle = UDex
- Custom script: set udg_UDex = ndex
- Else - Actions
- Set UDex = UDexNext[UDex]
- Custom script: endloop
- Custom script: set udg_UDex = pdex
- Else - Actions
- Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
- (Custom value of (Matching unit)) Equal to (==) 0
- Then - Actions
- Custom script: call IndexUnit()
- Else - Actions
- Custom script: return false
- Custom script: endfunction
- Custom script: function InitializeUnitIndexer takes nothing returns nothing
- Custom script: local integer i = 0
- Custom script: local region re = CreateRegion()
- Custom script: local rect r = GetWorldBounds()
- Set UnitIndexerEnabled = True
- Custom script: call RegionAddRect(re, r)
- Custom script: call TriggerRegisterEnterRegion(CreateTrigger(), re, Filter(function IndexNewUnit))
- Custom script: call RemoveRect(r)
- Custom script: set re = null
- Custom script: set r = null
- Custom script: loop
- Custom script: call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup, Player(i), Filter(function IndexUnit))
- Custom script: set i = i + 1
- Custom script: exitwhen i == 16
- Custom script: endloop
- Set UnitIndexEvent = 3.00
- Set UnitIndexEvent = 0.00
muzzel u mustve misread something cause dr super good listed a plausible solution to sunchips problem
Last edited by Pharaoh_; Today at 04:01 AM. Reason: None whatsoever, i just enjoy deleting your stuff
I hope you understand that.muzzel said:Why cant i give ppl -rep? They deserve it!