- Joined
- Jul 23, 2009
- Messages
- 1,032
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.
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
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.
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
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!
