- Joined
- Feb 27, 2019
- Messages
- 401
Looking for
- Your advices to optimize/clean it, and optionally your code-reviews.
- Your ideas of other libraries that can use this one to provide usefull features !
- Your toughts about this library
Content
Here is a project of mine of library that lists World Editor Object IDs. World Editor Objects are all 7 types you can see in the Object Editor: Units, Items, Destructibles, Doodads, Abilities, Buffs & Upgrades.
The goal was to make it real-time as much as possible. Currently it requires a few seconds at most depending of the amount of custom IDs in your map. Plus, in case your game as a start phase (pick, settings, ...), you can slow the execution pace with a periodic timer in order to avoid freezes or lags.
How does it work ?
Performances
- You can get any or all World Editor Object IDs. Ex below for only Abilities:
- Execution time depends of the amount of custom IDs: depending on the type (all test functions are not equivaly performant), count 2 to 6ms per custom ID. In my case, 278 custom abilities are scanned in approximatively 1,6s.
Code
My teachers always learned me to separate data from treatments, thus there are:
1 - One library "Id" that carries all IDs and make them available for read-only access
2 - One library "IdScanner" with a manager that handles execution and base templates to implement scanners for each type.
3 - Per type, one library "XxxxxxIdScanner" that implements an ID scanner for this type. You can enable only the ones you need to shorten processing time with right-click > Disable Trigger (from Trigger Editor).
4 - (Optional) One very basic library "IdScanLauncher" that starts the processing on map initialization.
Pros
- Execution time goes from real-time to a few seconds.
- Possibility to slow execution pace to hide it behind your map initialization.
- Many potentiel uses:
Cons
- Currently coded with 1.31 standard object lists.
- Only works if you let World Editor allocates IDs in Object Editor (default behavior). Do not use the new 1.31 feature that allows to choose manually an ID. Otherwise you will have to hardcoded these ones...
- Currently does not work with Doodads, Buffs and Upgrade whose name is null, because GetObjectName was the only choice to test these types.
- Creates 1 dummy unit for ability IDs scan, and dummy corpses/items/destructibles respectively for units, items and destructibles.
Attached
A test map with the code and some custom object IDs if you want to test/play with the library.
Prerequisites
- Ascii (by Nestharus, Bribe)
- NextPrev ObjectId (originally by IcemanBo, modified by Ricola3D to only browse potential custom IDs)
Source code
Id
IdScanner
UnitIdScanner
ItemIdScanner
DestructibleIdScanner
DoodadIdScanner
AbilityIdScanner
BuffIdScanner
UpgradeIdScanner
IdScanLauncher
Similar project I was inspired of
List Unit Abilities (by IcemanBo)
- Your advices to optimize/clean it, and optionally your code-reviews.
- Your ideas of other libraries that can use this one to provide usefull features !
- Your toughts about this library
Content
Here is a project of mine of library that lists World Editor Object IDs. World Editor Objects are all 7 types you can see in the Object Editor: Units, Items, Destructibles, Doodads, Abilities, Buffs & Upgrades.
The goal was to make it real-time as much as possible. Currently it requires a few seconds at most depending of the amount of custom IDs in your map. Plus, in case your game as a start phase (pick, settings, ...), you can slow the execution pace with a periodic timer in order to avoid freezes or lags.
How does it work ?
1 - Standard objects IDs are hardcoded.
2 - Custom object IDs are scanned using the following assumptions:
> For each type, IDs start by a set of letter (ex: 'D' for Doodads, 'A' and 'S' for Abilities)
> The 3 other letters are in character set [A-Z0-9]
> By default, World Editor uses '<letter>000' as first custom ID, '<letter>001' then, etc...
3 - Thus, ID scanning jumps from potentiel ID to consecutive potential ID, tests it, and stops after a given number of fails to avoid browsing the whole range ('<letter>000' to '<letter>ZZZ') !
4 - For each type, I tried to find the faster test functions to minimize execution time.
5 - In the end, standard and custom IDs are merged per type, in increasing value order, in globals arrays.
6 - IdScannerEvent's to be notified when scan starts and ends.
2 - Custom object IDs are scanned using the following assumptions:
> For each type, IDs start by a set of letter (ex: 'D' for Doodads, 'A' and 'S' for Abilities)
> The 3 other letters are in character set [A-Z0-9]
> By default, World Editor uses '<letter>000' as first custom ID, '<letter>001' then, etc...
3 - Thus, ID scanning jumps from potentiel ID to consecutive potential ID, tests it, and stops after a given number of fails to avoid browsing the whole range ('<letter>000' to '<letter>ZZZ') !
4 - For each type, I tried to find the faster test functions to minimize execution time.
5 - In the end, standard and custom IDs are merged per type, in increasing value order, in globals arrays.
6 - IdScannerEvent's to be notified when scan starts and ends.
Performances
- You can get any or all World Editor Object IDs. Ex below for only Abilities:
Code
My teachers always learned me to separate data from treatments, thus there are:
1 - One library "Id" that carries all IDs and make them available for read-only access
2 - One library "IdScanner" with a manager that handles execution and base templates to implement scanners for each type.
3 - Per type, one library "XxxxxxIdScanner" that implements an ID scanner for this type. You can enable only the ones you need to shorten processing time with right-click > Disable Trigger (from Trigger Editor).
4 - (Optional) One very basic library "IdScanLauncher" that starts the processing on map initialization.
Pros
- Execution time goes from real-time to a few seconds.
- Possibility to slow execution pace to hide it behind your map initialization.
- Many potentiel uses:
> Get unit ability ID list
> Get unit buff ID list
> Get items ability ID list
> Indexers
....
> Get unit buff ID list
> Get items ability ID list
> Indexers
....
Cons
- Currently coded with 1.31 standard object lists.
- Only works if you let World Editor allocates IDs in Object Editor (default behavior). Do not use the new 1.31 feature that allows to choose manually an ID. Otherwise you will have to hardcoded these ones...
- Creates 1 dummy unit for ability IDs scan, and dummy corpses/items/destructibles respectively for units, items and destructibles.
Attached
A test map with the code and some custom object IDs if you want to test/play with the library.
Prerequisites
- Ascii (by Nestharus, Bribe)
- NextPrev ObjectId (originally by IcemanBo, modified by Ricola3D to only browse potential custom IDs)
JASS:
library NextPrevCustomObjectId /* v1.0
Derivate of NextPrevObjectId but that only considers custom object ids.
Custom object ids is a subset of all ids:
- Fourth byte takes values in [0-9A-Za-Z]
- First 3 bytes take values only in [A-Z0-9]
Ex:
- 'A01Z' is a possible custom id
- 'A01z' is not a possible custom id
API
function GetNextCustomObjectId takes integer objectId returns integer
function GetPrevCustomObjectId takes integer objectId returns integer
*/
globals
private integer array pow256
private integer array gapValue
private integer array jumpValue
endglobals
private function GetNextCustomObjectId_private takes integer objectId, integer bytenumber returns integer
local integer currentByteValue
if ( bytenumber > -1 and bytenumber < 4 ) then
set currentByteValue = ModuloInteger(objectId, pow256[bytenumber + 1]) / pow256[bytenumber]
else
return objectId
endif
if ( currentByteValue != '9' and currentByteValue != 'Z' and currentByteValue != 'z' ) then
return objectId + pow256[bytenumber]
else
if ( currentByteValue == '9' ) then
return objectId + gapValue[currentByteValue] * pow256[bytenumber]
elseif ( currentByteValue == 'Z' ) then
if ( bytenumber == 3 ) then
// 4th byte, allowed to use [a-z]
return objectId + gapValue[currentByteValue] * pow256[bytenumber]
else
// First 3 bytes, cannot use [a-z], increase next byte
return GetNextCustomObjectId_private(objectId - jumpValue[currentByteValue] * pow256[bytenumber], (bytenumber + 1))
endif
else // currentByteValue == 'z' (should never happen)
return GetNextCustomObjectId_private(objectId - gapValue[currentByteValue] * pow256[bytenumber], (bytenumber + 1))
endif
endif
endfunction
private function GetPrevCustomObjectId_private takes integer objectId, integer bytenumber returns integer
local integer currentByteValue
if ( bytenumber > -1 and bytenumber < 4 ) then
set currentByteValue = ModuloInteger(objectId, pow256[bytenumber + 1]) / pow256[bytenumber]
else
return objectId
endif
if ( currentByteValue != '0' and currentByteValue != 'A' and currentByteValue != 'a' ) then
return objectId - pow256[bytenumber]
else
if ( currentByteValue == '0' ) then
return GetPrevCustomObjectId_private(objectId + jumpValue[currentByteValue] * pow256[bytenumber], (bytenumber + 1))
elseif ( currentByteValue == 'A' ) then
return objectId - gapValue[currentByteValue] * pow256[bytenumber]
else // currentByteValue == 'a' (should never happen)
return objectId - gapValue[currentByteValue] * pow256[bytenumber]
endif
endif
endfunction
function GetPrevCustomObjectId takes integer objectId returns integer
return GetPrevCustomObjectId_private(objectId, 0)
endfunction
function GetNextCustomObjectId takes integer objectId returns integer
return GetNextCustomObjectId_private(objectId, 0)
endfunction
private module M
private static method onInit takes nothing returns nothing
local integer i = 0
loop
exitwhen i > 4
set pow256[i] = R2I(Pow(256, i))
set i = i + 1
endloop
set gapValue['9'] = 'A' - '9'
set gapValue['Z'] = 'a' - 'Z'
set gapValue['z'] = 'z' - '0'
set gapValue['A'] = gapValue['9']
set gapValue['a'] = gapValue['Z']
set gapValue['0'] = gapValue['z']
set jumpValue['Z'] = 'Z' - '0'
set jumpValue['0'] = jumpValue['Z']
endmethod
endmodule
private struct S extends array
implement M
endstruct
endlibrary
Source code
Id
JASS:
/*
Id lib v1.0.0 (21/10/2019) by Ricola3D
Content:
Very simple library to store all World Editor object ids a in game, and expose it to developers.
This library doesn't retrieve the content, it just stores and exposes it. IdScanner is responsible for filling the lists.
Note: by construction, all lists are sorted by increasing value.
API:
- staticIdList: simple read-only array struct with size() method and [] operator. Internaly works with a global array, not a hashtable, so access speed is maximal.
- GetAllUnitIds: takes nothing returns staticIdList
- GetAllItemIds: takes nothing returns staticIdList
- GetAllDestructibleIds: takes nothing returns staticIdList
- GetAllDoodadIds: takes nothing returns staticIdList
- GetAllAbilityIds: takes nothing returns staticIdList
- GetAllBuffIds: takes nothing returns staticIdList
- GetAllUpgradeIds: takes nothing returns staticIdList
*/
library Id
/*
Struct-like interface for a read-only integer array. Can be used as function parameter or return.
*/
interface staticIdList
method size takes nothing returns integer
method operator [] takes integer i returns integer
endinterface
/*
Macro to add a new object editor type: Units, Items, Destructibles, ...
*/
//! textmacro DECL_WORLDEDITOR_TYPE takes TYPE_NAME
globals
// All World Editor $TYPE_NAME$ ids
private integer array $TYPE_NAME$Ids
private integer $TYPE_NAME$Count = 0
// Browser for read-only access to all World Editor $TYPE_NAME$ ids
private staticIdList $TYPE_NAME$IdBrowser
endglobals
/*
A very simple structure that exposes read-only access to a predefined private global dynamic array.
*/
private struct all$TYPE_NAME$IdBrowser extends staticIdList
method size takes nothing returns integer
return $TYPE_NAME$Count
endmethod
method operator [] takes integer i returns integer
return $TYPE_NAME$Ids[i]
endmethod
endstruct
/*
RegisterXxxxxId: function used by scanners to append an Xxxxxx to the list
*/
function Register$TYPE_NAME$Id takes integer id returns nothing
set $TYPE_NAME$Ids[$TYPE_NAME$Count] = id
set $TYPE_NAME$Count = $TYPE_NAME$Count + 1
endfunction
/*
GetAllXxxxxÎds: API function to get all abilities in the game
*/
function GetAll$TYPE_NAME$Ids takes nothing returns staticIdList
return $TYPE_NAME$IdBrowser
endfunction
private module $TYPE_NAME$Init
private static method onInit takes nothing returns nothing
set $TYPE_NAME$IdBrowser = all$TYPE_NAME$IdBrowser.create()
endmethod
endmodule
private struct $TYPE_NAME$Initializer extends array
implement $TYPE_NAME$Init
endstruct
//! endtextmacro
/*
Add all editor item types
*/
//! runtextmacro DECL_WORLDEDITOR_TYPE ("Unit")
//! runtextmacro DECL_WORLDEDITOR_TYPE ("Item")
//! runtextmacro DECL_WORLDEDITOR_TYPE ("Destructible")
//! runtextmacro DECL_WORLDEDITOR_TYPE ("Doodad")
//! runtextmacro DECL_WORLDEDITOR_TYPE ("Ability")
//! runtextmacro DECL_WORLDEDITOR_TYPE ("Buff")
//! runtextmacro DECL_WORLDEDITOR_TYPE ("Upgrade")
endlibrary
IdScanner
JASS:
/*
IdScanner lib v1.0.0 (21/10/2019) by Ricola3D
Content:
Base mechanism to retrieve World Editor object ids and store them in the Id library.
AbstractIdScanner provides a base class to derivate & declare a scanner for 1 type.
IdScannerManager is a singleton class to manage all scanners and launch them on a clock pace (usefull to avoid freezing).
You can activate/unactivate any "XxxxIdScanner" available with right-click > Enable/Disable Trigger.
Configuration:
- real TICK_PERIOD: pace of the execution clock
- integer ITERATIONS_PER_SECOND: max number of IDs tested by second. Per scanner. -1 for no limit.
- integer CONSECUTIVE_FAIL_COUNT_FOR_STOP: for optimization, stops after this number of consecutive unused IDs
API (vJass):
- real IdScannerEvent: allows to catch the following events
> IdScannerEvent == 1.0: Scanning starts
> IdScannerEvent == 2.0: Scanning is complete
API (GUI friendly):
- real udg_IdScannerEvent: same behavior as above.
*/
library IdScanner requires Id, NextPrevCustomObjectId, Ascii
globals
// Configuration
constant real TICK_PERIOD = 0.04 // Time between 2 ticks
constant integer ITERATIONS_PER_SECOND = -1 // -1 to disable, positive number to delay the process in several frames.
constant integer CONSECUTIVE_FAIL_COUNT_FOR_STOP = 31 // -1 to disable. Impact of performances is drastic.
constant integer ITERATIONS_PER_TICK = R2I(I2R(ITERATIONS_PER_SECOND) * TICK_PERIOD) // DO NOT EDIT
// Event (JASS)
real IdScannerEvent = 0.0
endglobals
/*
A base abstract class to implement scanner for one World Editor object type.
*/
struct AbstractIdScanner
// Public members
string scanRangePrefixes // Potentiel first letter of IDs
readonly integer totalCounter = 0 // counter for total tested IDs
readonly integer succeedCounter = 0 // counter for total valid IDs
readonly boolean ended = true // When scan is finished
// Private members
private integer currentRangeIndex = -1 // Index of first letter being scanned
private integer consecutiveFailCounter = 0 // Counter for consecutive fails
integer startId = -1 // Start ID for the current range
integer endId = -1 // End ID for the current range
/*
Method executed once on scan start
*/
method start takes nothing returns nothing
local boolean empty = false
set ended = false
set totalCounter = 0
set succeedCounter = 0
set consecutiveFailCounter = 0
set currentRangeIndex = 0
call onStart()
set empty = (not setScanRange(currentRangeIndex) )
call saveStandardRange(currentRangeIndex)
if ( empty ) then
call end()
endif
endmethod
/*
Method executed once on start and once more for each additional range.
In charge of setting startId & endId for the requested range.
Returns false after last range, true otherwise.
*/
method setScanRange takes integer index returns boolean
local integer length = StringLength(scanRangePrefixes)
local string firstChar
local integer firstByte
if ( length > index ) then
set firstChar = SubString(scanRangePrefixes, index, index + 1)
set firstByte = Char2Ascii(firstChar)
set startId = firstByte * 256 * 256 * 256 + 48 * 256 * 256 + 48 * 256 + 48 // '<Letter>000'
set endId = firstByte * 256 * 256 * 256 + 57 * 256 * 256 + 90 * 256 + 90 // '<Letter>9ZZ' ( 9=57, Z=90)
else
set startId = -1
set endId = -1
endif
return ( -1 != startId )
endmethod
/*
Method executed on each clock tick to scan ITERATIONS_PER_TICK ids of this World Editor object type.
Calls setScanRange(i) & saveStandardRange(i) at range end.
Calls end() at last range end or after CONSECUTIVE_FAIL_COUNT_FOR_STOP consecutive fails.
*/
method tick takes nothing returns nothing
local integer startCounter = totalCounter
local integer id = 0
local integer nextId = startId
local boolean isValidId = false
local boolean timeoutCondition = false
local boolean endCondition = false
local boolean last = false
loop
set id = nextId
set totalCounter = totalCounter + 1
// Test if this is the ID is valid
set isValidId = isValidId(id)
if ( isValidId ) then
call saveId(succeedCounter, id)
set succeedCounter = succeedCounter + 1
set consecutiveFailCounter = 0
else
set consecutiveFailCounter = consecutiveFailCounter + 1
endif
// Next loop index
set nextId = GetNextCustomObjectId(id)
// Stop loop if timeout or end condition is matched
set timeoutCondition = ( (ITERATIONS_PER_SECOND >= 0 ) and ( ITERATIONS_PER_TICK <= totalCounter - startCounter ) )
set endCondition = ( ( id == endId ) or ( CONSECUTIVE_FAIL_COUNT_FOR_STOP == consecutiveFailCounter ) )
exitwhen( timeoutCondition or endCondition )
endloop
// Update start point for next tick
set startId = nextId
// Change scan range when the current range is done
if ( endCondition ) then
set currentRangeIndex = currentRangeIndex + 1
set last = ( not setScanRange(currentRangeIndex) )
call saveStandardRange(currentRangeIndex)
if ( last ) then
call end()
endif
endif
endmethod
/*
Method called at last range end.
Notifies the manager.
*/
private method end takes nothing returns nothing
set ended = true
call onEnd()
call IdScannerManager.OnScannerEnd(this)
endmethod
/*
This method is called once per tested ID to check if it is used or not.
Shall return true is valid, false otherwise.
Default: return true if GetObjectName does not return null.
You can overide it with a quicker or more reliable method!
*/
stub method isValidId takes integer id returns boolean
local boolean isValid = false
local string testString = GetObjectName(id)
if ( null != testString ) then
set isValid = true
endif
return isValid
endmethod
/*
Method called to save the valid IDs in Id library
*/
stub method saveId takes integer index, integer id returns nothing
endmethod
/*
This method allows to save the standard IDs from a hardcoded list instead of wasting time to scan them.
Called once per range, before scanning it.
To respect sort by increasing value, save standard Ids of letter X after scanning range X!
*/
stub method saveStandardRange takes integer index returns nothing
endmethod
/*
Method called once on scan start.
Overide it if you need to execute custom code.
*/
stub method onStart takes nothing returns nothing
endmethod
/*
Method called once on scan end.
Overide it if you need to execute custom code.
*/
stub method onEnd takes nothing returns nothing
endmethod
endstruct
/*
Scan manager. Singleton.
In charges of:
- Instanciating & deleting al scanners
- Executing all scanners on clock pace
- Firing IdScannerEvent's
*/
struct IdScannerManager
private static boolexpr array scannerCreateFuncs // Functions to instanciate scanners
private static integer lastScannerCreateFuncIndex = -1 // Size of the array above
private static AbstractIdScanner array scanners // Scanners
private static integer lastScannerIndex = -1 // Size of the array above
private static timer clock // Clock used to fix pace
private static integer pendingScannerCount = 0 // Count of scanners whose execution is not finished.
/*
Static method to register a new World Editor ID type scanner.
*/
static method RegisterScannerType takes boolexpr createFunc returns nothing
set lastScannerCreateFuncIndex = lastScannerCreateFuncIndex + 1
set scannerCreateFuncs[lastScannerCreateFuncIndex] = createFunc
endmethod
/*
Static method to register a newly instanciated ID scanner
*/
static method RegisterScanner takes AbstractIdScanner scanner returns nothing
set lastScannerIndex = lastScannerIndex + 1
set scanners[lastScannerIndex] = scanner
endmethod
/*
Static method that fires IdScannerEvent's
*/
private static method FireScannerEvent takes real eventId returns nothing
if ( 0.0 != eventId ) then
// For JASS users
set IdScannerEvent = 0.0
set IdScannerEvent = eventId
set IdScannerEvent = 0.0
// For GUI users
set udg_IdScannerEvent = 0.0
set udg_IdScannerEvent = eventId
set udg_IdScannerEvent = 0.0
endif
endmethod
/*
Static method that starts all the ID scanners
*/
static method Start takes nothing returns nothing
local integer index
local trigger t = CreateTrigger()
local boolean allScannersCreated = false
call FireScannerEvent(1.0)
set pendingScannerCount = 0
if ( -1 != lastScannerCreateFuncIndex ) then
// Create all scanners
set index = -1
loop
set index = index + 1
call TriggerAddCondition(t, scannerCreateFuncs[index])
exitwhen (lastScannerCreateFuncIndex == index)
endloop
set allScannersCreated = TriggerEvaluate(t)
if (allScannersCreated) then
// Start all scanners
set index = -1
loop
set index = index + 1
call scanners[index].start()
set pendingScannerCount = lastScannerIndex + 1
exitwhen (lastScannerIndex == index)
endloop
// Start the tick timer
set clock = CreateTimer()
call TimerStart(clock, TICK_PERIOD, true, function IdScannerManager.Tick )
else
call BJDebugMsg("IdScannerManager - Failed to create all scanners")
call OnScannerEnd(-1)
endif
else
call BJDebugMsg("IdScannerManager - No scanners")
call OnScannerEnd(-1)
endif
call DestroyTrigger(t)
set t = null
endmethod
/*
Static method that starts all the ID scanners
*/
private static method Tick takes nothing returns nothing
local integer index
if ( 0 < pendingScannerCount ) then
// Propagate tick to all registered scanners
set index = -1
loop
set index = index + 1
if ( not scanners[index].ended ) then
call scanners[index].tick()
endif
exitwhen (lastScannerIndex == index)
endloop
else
call End()
endif
endmethod
/*
Static method that is called once each time a scanner ends,
Updates the pending scanners count.
*/
static method OnScannerEnd takes AbstractIdScanner scanner returns nothing
if ( -1 != scanner ) then
set pendingScannerCount = pendingScannerCount - 1
// Note: when pending count reachs 0, Tick stops
endif
endmethod
/*
Static method called once on end of last scanner execution
In charge of cleaning memory.
*/
private static method End takes nothing returns nothing
local integer index
// Release timer
call PauseTimer(clock)
call DestroyTimer(clock)
// Destroy all scanners
set index = -1
loop
set index = index + 1
call scanners[index].destroy()
set scanners[index] = 0
exitwhen (lastScannerIndex == index)
endloop
// Fire end event
call FireScannerEvent(2.0)
endmethod
/*
Singleton emulated in vJASS: all methods are static, constructor is private and has no effect.
*/
private static method create takes nothing returns IdScannerManager
return 0
endmethod
endstruct
/*
Simple macro to register a new scanner type in the scanner manager
*/
//! textmacro DECL_NEW_SCANNER_TYPE takes STRUCT_NAME
function Create$STRUCT_NAME$ takes nothing returns boolean
local $STRUCT_NAME$ newScanner= $STRUCT_NAME$.create()
call IdScannerManager.RegisterScanner(newScanner)
return true
endfunction
private module $STRUCT_NAME$Init
private static method onInit takes nothing returns nothing
local boolexpr createFunc = Condition(function Create$STRUCT_NAME$)
call IdScannerManager.RegisterScannerType(createFunc)
endmethod
endmodule
private struct $STRUCT_NAME$Initializer extends array
implement $STRUCT_NAME$Init
endstruct
//! endtextmacro
endlibrary
UnitIdScanner
JASS:
/*
UnitIdScanner lib v1.0.0 (21/10/2019) by Ricola3D
Content:
Id scanner for World Editor units.
*/
library UnitIdScanner requires IdScanner
//! runtextmacro DECL_NEW_SCANNER_TYPE ("UnitIdScanner")
/*
*/
struct UnitIdScanner extends AbstractIdScanner
method isValidId takes integer id returns boolean
local boolean isValid = false
local string testValue = UnitId2String(id)
set isValid = ( null != testValue )
return isValid
endmethod
method saveId takes integer index, integer id returns nothing
call RegisterUnitId(id)
endmethod
/*
836 hardcoded standard units, sorted by increasing value
*/
method saveStandardRange takes integer index returns nothing
if ( 1 == index ) then
// After custom 'E' abilities
call RegisterUnitId('Ecen')
call RegisterUnitId('Edem')
call RegisterUnitId('Edmm')
call RegisterUnitId('Eevi')
call RegisterUnitId('Eevm')
call RegisterUnitId('Efur')
call RegisterUnitId('Eidm')
call RegisterUnitId('Eill')
call RegisterUnitId('Eilm')
call RegisterUnitId('Ekee')
call RegisterUnitId('Ekgg')
call RegisterUnitId('Emfr')
call RegisterUnitId('Emns')
call RegisterUnitId('Emoo')
call RegisterUnitId('Etyr')
call RegisterUnitId('Ewar')
call RegisterUnitId('Ewrd')
elseif ( 2 == index ) then
// After custom 'H' abilities
call RegisterUnitId('Hamg')
call RegisterUnitId('Hant')
call RegisterUnitId('Hapm')
call RegisterUnitId('Harf')
call RegisterUnitId('Hart')
call RegisterUnitId('Hblm')
call RegisterUnitId('Hdgo')
call RegisterUnitId('Hgam')
call RegisterUnitId('Hhkl')
call RegisterUnitId('Hjai')
call RegisterUnitId('Hkal')
call RegisterUnitId('Hlgr')
call RegisterUnitId('Hmbr')
call RegisterUnitId('Hmgd')
call RegisterUnitId('Hmkg')
call RegisterUnitId('Hpal')
call RegisterUnitId('Hpb1')
call RegisterUnitId('Hpb2')
call RegisterUnitId('Huth')
call RegisterUnitId('Hvsh')
call RegisterUnitId('Hvwd')
elseif ( 3 == index ) then
// After custom 'N' abilities
call RegisterUnitId('Naka')
call RegisterUnitId('Nal2')
call RegisterUnitId('Nal3')
call RegisterUnitId('Nalc')
call RegisterUnitId('Nalm')
call RegisterUnitId('Nbbc')
call RegisterUnitId('Nbrn')
call RegisterUnitId('Nbst')
call RegisterUnitId('Nfir')
call RegisterUnitId('Nkjx')
call RegisterUnitId('Nklj')
call RegisterUnitId('Nmag')
call RegisterUnitId('Nman')
call RegisterUnitId('Nngs')
call RegisterUnitId('Npbm')
call RegisterUnitId('Npld')
call RegisterUnitId('Nplh')
call RegisterUnitId('Nrob')
call RegisterUnitId('Nsjs')
call RegisterUnitId('Ntin')
elseif ( 4 == index ) then
// After custom 'O' abilities
call RegisterUnitId('Obla')
call RegisterUnitId('Ocb2')
call RegisterUnitId('Ocbh')
call RegisterUnitId('Odrt')
call RegisterUnitId('Ofar')
call RegisterUnitId('Ogld')
call RegisterUnitId('Ogrh')
call RegisterUnitId('Opgh')
call RegisterUnitId('Orex')
call RegisterUnitId('Orkn')
call RegisterUnitId('Osam')
call RegisterUnitId('Oshd')
call RegisterUnitId('Otcc')
call RegisterUnitId('Otch')
call RegisterUnitId('Othr')
elseif ( 5 == index ) then
// After custom 'U' abilities
call RegisterUnitId('Uanb')
call RegisterUnitId('Ubal')
call RegisterUnitId('Uclc')
call RegisterUnitId('Ucrl')
call RegisterUnitId('Udea')
call RegisterUnitId('Udre')
call RegisterUnitId('Udth')
call RegisterUnitId('Uear')
call RegisterUnitId('Uktl')
call RegisterUnitId('Ulic')
call RegisterUnitId('Umal')
call RegisterUnitId('Usyl')
call RegisterUnitId('Utic')
call RegisterUnitId('Uvar')
call RegisterUnitId('Uvng')
call RegisterUnitId('Uwar')
elseif ( 6 == index ) then
// After custom 'e' abilities
call RegisterUnitId('eaoe')
call RegisterUnitId('eaom')
call RegisterUnitId('eaow')
call RegisterUnitId('earc')
call RegisterUnitId('eate')
call RegisterUnitId('ebal')
call RegisterUnitId('ebsh')
call RegisterUnitId('echm')
call RegisterUnitId('edcm')
call RegisterUnitId('eden')
call RegisterUnitId('edes')
call RegisterUnitId('edob')
call RegisterUnitId('edoc')
call RegisterUnitId('edos')
call RegisterUnitId('edot')
call RegisterUnitId('edry')
call RegisterUnitId('edtm')
call RegisterUnitId('efdr')
call RegisterUnitId('efon')
call RegisterUnitId('egol')
call RegisterUnitId('ehip')
call RegisterUnitId('ehpr')
call RegisterUnitId('eilw')
call RegisterUnitId('emow')
call RegisterUnitId('emtg')
call RegisterUnitId('enec')
call RegisterUnitId('ensh')
call RegisterUnitId('esen')
call RegisterUnitId('eshd')
call RegisterUnitId('eshy')
call RegisterUnitId('espv')
call RegisterUnitId('etoa')
call RegisterUnitId('etoe')
call RegisterUnitId('etol')
call RegisterUnitId('etrp')
call RegisterUnitId('etrs')
call RegisterUnitId('even')
call RegisterUnitId('ewsp')
elseif ( 7 == index ) then
// After custom 'h' abilities
call RegisterUnitId('halt')
call RegisterUnitId('harm')
call RegisterUnitId('haro')
call RegisterUnitId('hars')
call RegisterUnitId('hatw')
call RegisterUnitId('hbar')
call RegisterUnitId('hbew')
call RegisterUnitId('hbla')
call RegisterUnitId('hbot')
call RegisterUnitId('hbsh')
call RegisterUnitId('hcas')
call RegisterUnitId('hcth')
call RegisterUnitId('hctw')
call RegisterUnitId('hdes')
call RegisterUnitId('hdhw')
call RegisterUnitId('hfoo')
call RegisterUnitId('hgra')
call RegisterUnitId('hgry')
call RegisterUnitId('hgtw')
call RegisterUnitId('hgyr')
call RegisterUnitId('hhdl')
call RegisterUnitId('hhes')
call RegisterUnitId('hhou')
call RegisterUnitId('hkee')
call RegisterUnitId('hkni')
call RegisterUnitId('hlum')
call RegisterUnitId('hmil')
call RegisterUnitId('hmpr')
call RegisterUnitId('hmtm')
call RegisterUnitId('hmtt')
call RegisterUnitId('hpea')
call RegisterUnitId('hphx')
call RegisterUnitId('hprt')
call RegisterUnitId('hpxe')
call RegisterUnitId('hrdh')
call RegisterUnitId('hrif')
call RegisterUnitId('hrtt')
call RegisterUnitId('hshy')
call RegisterUnitId('hsor')
call RegisterUnitId('hspt')
call RegisterUnitId('htow')
call RegisterUnitId('hvlt')
call RegisterUnitId('hwat')
call RegisterUnitId('hwt2')
call RegisterUnitId('hwt3')
call RegisterUnitId('hwtw')
elseif ( 8 == index ) then
// After custom 'n' abilities
call RegisterUnitId('nadk')
call RegisterUnitId('nadr')
call RegisterUnitId('nadw')
call RegisterUnitId('nahy')
call RegisterUnitId('nalb')
call RegisterUnitId('nanb')
call RegisterUnitId('nanc')
call RegisterUnitId('nane')
call RegisterUnitId('nanm')
call RegisterUnitId('nano')
call RegisterUnitId('nanw')
call RegisterUnitId('narg')
call RegisterUnitId('nass')
call RegisterUnitId('nba2')
call RegisterUnitId('nbal')
call RegisterUnitId('nban')
call RegisterUnitId('nbda')
call RegisterUnitId('nbdk')
call RegisterUnitId('nbdm')
call RegisterUnitId('nbdo')
call RegisterUnitId('nbdr')
call RegisterUnitId('nbds')
call RegisterUnitId('nbdw')
call RegisterUnitId('nbee')
call RegisterUnitId('nbel')
call RegisterUnitId('nbfl')
call RegisterUnitId('nbld')
call RegisterUnitId('nbnb')
call RegisterUnitId('nbot')
call RegisterUnitId('nbrg')
call RegisterUnitId('nbse')
call RegisterUnitId('nbsm')
call RegisterUnitId('nbsp')
call RegisterUnitId('nbsw')
call RegisterUnitId('nbt1')
call RegisterUnitId('nbt2')
call RegisterUnitId('nbwd')
call RegisterUnitId('nbwm')
call RegisterUnitId('nbzd')
call RegisterUnitId('nbzk')
call RegisterUnitId('nbzw')
call RegisterUnitId('ncap')
call RegisterUnitId('ncat')
call RegisterUnitId('ncaw')
call RegisterUnitId('ncb0')
call RegisterUnitId('ncb1')
call RegisterUnitId('ncb2')
call RegisterUnitId('ncb3')
call RegisterUnitId('ncb4')
call RegisterUnitId('ncb5')
call RegisterUnitId('ncb6')
call RegisterUnitId('ncb7')
call RegisterUnitId('ncb8')
call RegisterUnitId('ncb9')
call RegisterUnitId('ncba')
call RegisterUnitId('ncbb')
call RegisterUnitId('ncbc')
call RegisterUnitId('ncbd')
call RegisterUnitId('ncbe')
call RegisterUnitId('ncbf')
call RegisterUnitId('ncea')
call RegisterUnitId('ncen')
call RegisterUnitId('ncer')
call RegisterUnitId('ncfs')
call RegisterUnitId('ncg1')
call RegisterUnitId('ncg2')
call RegisterUnitId('ncg3')
call RegisterUnitId('ncgb')
call RegisterUnitId('nchg')
call RegisterUnitId('nchp')
call RegisterUnitId('nchr')
call RegisterUnitId('nchw')
call RegisterUnitId('ncim')
call RegisterUnitId('nckb')
call RegisterUnitId('ncks')
call RegisterUnitId('ncmw')
call RegisterUnitId('ncnk')
call RegisterUnitId('ncnt')
call RegisterUnitId('ncop')
call RegisterUnitId('ncp2')
call RegisterUnitId('ncp3')
call RegisterUnitId('ncpn')
call RegisterUnitId('ncrb')
call RegisterUnitId('nct1')
call RegisterUnitId('nct2')
call RegisterUnitId('ncta')
call RegisterUnitId('ncte')
call RegisterUnitId('nctl')
call RegisterUnitId('ndch')
call RegisterUnitId('nder')
call RegisterUnitId('ndfl')
call RegisterUnitId('ndgt')
call RegisterUnitId('ndh0')
call RegisterUnitId('ndh1')
call RegisterUnitId('ndh2')
call RegisterUnitId('ndh3')
call RegisterUnitId('ndh4')
call RegisterUnitId('ndke')
call RegisterUnitId('ndkw')
call RegisterUnitId('ndmg')
call RegisterUnitId('ndmu')
call RegisterUnitId('ndog')
call RegisterUnitId('ndqn')
call RegisterUnitId('ndqp')
call RegisterUnitId('ndqs')
call RegisterUnitId('ndqt')
call RegisterUnitId('ndqv')
call RegisterUnitId('ndr1')
call RegisterUnitId('ndr2')
call RegisterUnitId('ndr3')
call RegisterUnitId('ndrb')
call RegisterUnitId('ndrd')
call RegisterUnitId('ndrf')
call RegisterUnitId('ndrg')
call RegisterUnitId('ndrh')
call RegisterUnitId('ndrj')
call RegisterUnitId('ndrk')
call RegisterUnitId('ndrl')
call RegisterUnitId('ndrm')
call RegisterUnitId('ndrn')
call RegisterUnitId('ndro')
call RegisterUnitId('ndrp')
call RegisterUnitId('ndrr')
call RegisterUnitId('ndrs')
call RegisterUnitId('ndrt')
call RegisterUnitId('ndru')
call RegisterUnitId('ndrv')
call RegisterUnitId('ndrw')
call RegisterUnitId('ndrz')
call RegisterUnitId('ndsa')
call RegisterUnitId('ndt1')
call RegisterUnitId('ndt2')
call RegisterUnitId('ndtb')
call RegisterUnitId('ndth')
call RegisterUnitId('ndtp')
call RegisterUnitId('ndtr')
call RegisterUnitId('ndtt')
call RegisterUnitId('ndtw')
call RegisterUnitId('ndwm')
call RegisterUnitId('nech')
call RegisterUnitId('necr')
call RegisterUnitId('nef0')
call RegisterUnitId('nef1')
call RegisterUnitId('nef2')
call RegisterUnitId('nef3')
call RegisterUnitId('nef4')
call RegisterUnitId('nef5')
call RegisterUnitId('nef6')
call RegisterUnitId('nef7')
call RegisterUnitId('nefm')
call RegisterUnitId('negf')
call RegisterUnitId('negm')
call RegisterUnitId('negt')
call RegisterUnitId('negz')
call RegisterUnitId('nehy')
call RegisterUnitId('nelb')
call RegisterUnitId('nele')
call RegisterUnitId('nemi')
call RegisterUnitId('nenc')
call RegisterUnitId('nenf')
call RegisterUnitId('nenp')
call RegisterUnitId('nepl')
call RegisterUnitId('nerd')
call RegisterUnitId('ners')
call RegisterUnitId('nerw')
call RegisterUnitId('net1')
call RegisterUnitId('net2')
call RegisterUnitId('nfa1')
call RegisterUnitId('nfa2')
call RegisterUnitId('nfac')
call RegisterUnitId('nfbr')
call RegisterUnitId('nfel')
call RegisterUnitId('nfgb')
call RegisterUnitId('nfgl')
call RegisterUnitId('nfgo')
call RegisterUnitId('nfgt')
call RegisterUnitId('nfgu')
call RegisterUnitId('nfh0')
call RegisterUnitId('nfh1')
call RegisterUnitId('nfnp')
call RegisterUnitId('nfod')
call RegisterUnitId('nfoh')
call RegisterUnitId('nfor')
call RegisterUnitId('nfot')
call RegisterUnitId('nfov')
call RegisterUnitId('nfpc')
call RegisterUnitId('nfpe')
call RegisterUnitId('nfpl')
call RegisterUnitId('nfps')
call RegisterUnitId('nfpt')
call RegisterUnitId('nfpu')
call RegisterUnitId('nfr1')
call RegisterUnitId('nfr2')
call RegisterUnitId('nfra')
call RegisterUnitId('nfrb')
call RegisterUnitId('nfre')
call RegisterUnitId('nfrg')
call RegisterUnitId('nfrl')
call RegisterUnitId('nfrm')
call RegisterUnitId('nfro')
call RegisterUnitId('nfrp')
call RegisterUnitId('nfrs')
call RegisterUnitId('nfrt')
call RegisterUnitId('nfsh')
call RegisterUnitId('nfsp')
call RegisterUnitId('nft1')
call RegisterUnitId('nft2')
call RegisterUnitId('nftb')
call RegisterUnitId('nftk')
call RegisterUnitId('nftr')
call RegisterUnitId('nftt')
call RegisterUnitId('nfv0')
call RegisterUnitId('nfv1')
call RegisterUnitId('nfv2')
call RegisterUnitId('nfv3')
call RegisterUnitId('nfv4')
call RegisterUnitId('ngad')
call RegisterUnitId('ngbl')
call RegisterUnitId('ngdk')
call RegisterUnitId('nggr')
call RegisterUnitId('ngh1')
call RegisterUnitId('ngh2')
call RegisterUnitId('ngir')
call RegisterUnitId('nglm')
call RegisterUnitId('ngme')
call RegisterUnitId('ngna')
call RegisterUnitId('ngnb')
call RegisterUnitId('ngnh')
call RegisterUnitId('ngni')
call RegisterUnitId('ngno')
call RegisterUnitId('ngns')
call RegisterUnitId('ngnv')
call RegisterUnitId('ngnw')
call RegisterUnitId('ngob')
call RegisterUnitId('ngol')
call RegisterUnitId('ngrd')
call RegisterUnitId('ngrk')
call RegisterUnitId('ngrw')
call RegisterUnitId('ngsp')
call RegisterUnitId('ngst')
call RegisterUnitId('ngt2')
call RegisterUnitId('ngwr')
call RegisterUnitId('ngz1')
call RegisterUnitId('ngz2')
call RegisterUnitId('ngz3')
call RegisterUnitId('ngz4')
call RegisterUnitId('ngza')
call RegisterUnitId('ngzc')
call RegisterUnitId('ngzd')
call RegisterUnitId('nhar')
call RegisterUnitId('nhcn')
call RegisterUnitId('nhdc')
call RegisterUnitId('nhea')
call RegisterUnitId('nheb')
call RegisterUnitId('nhef')
call RegisterUnitId('nhem')
call RegisterUnitId('nhew')
call RegisterUnitId('nhfp')
call RegisterUnitId('nhhr')
call RegisterUnitId('nhmc')
call RegisterUnitId('nhns')
call RegisterUnitId('nhrh')
call RegisterUnitId('nhrq')
call RegisterUnitId('nhrr')
call RegisterUnitId('nhrw')
call RegisterUnitId('nhyc')
call RegisterUnitId('nhyd')
call RegisterUnitId('nhyh')
call RegisterUnitId('nhym')
call RegisterUnitId('nico')
call RegisterUnitId('nina')
call RegisterUnitId('ninc')
call RegisterUnitId('ninf')
call RegisterUnitId('ninm')
call RegisterUnitId('nitb')
call RegisterUnitId('nith')
call RegisterUnitId('nitp')
call RegisterUnitId('nitr')
call RegisterUnitId('nits')
call RegisterUnitId('nitt')
call RegisterUnitId('nitw')
call RegisterUnitId('njg1')
call RegisterUnitId('njga')
call RegisterUnitId('njgb')
call RegisterUnitId('njks')
call RegisterUnitId('nkob')
call RegisterUnitId('nkog')
call RegisterUnitId('nkol')
call RegisterUnitId('nkot')
call RegisterUnitId('nlds')
call RegisterUnitId('nlkl')
call RegisterUnitId('nlpd')
call RegisterUnitId('nlpr')
call RegisterUnitId('nlps')
call RegisterUnitId('nlrv')
call RegisterUnitId('nlsn')
call RegisterUnitId('nltc')
call RegisterUnitId('nltl')
call RegisterUnitId('nlur')
call RegisterUnitId('nlv1')
call RegisterUnitId('nlv2')
call RegisterUnitId('nlv3')
call RegisterUnitId('nmam')
call RegisterUnitId('nmbg')
call RegisterUnitId('nmcf')
call RegisterUnitId('nmdm')
call RegisterUnitId('nmdr')
call RegisterUnitId('nmed')
call RegisterUnitId('nmer')
call RegisterUnitId('nmfs')
call RegisterUnitId('nmg0')
call RegisterUnitId('nmg1')
call RegisterUnitId('nmgd')
call RegisterUnitId('nmgr')
call RegisterUnitId('nmgv')
call RegisterUnitId('nmgw')
call RegisterUnitId('nmh0')
call RegisterUnitId('nmh1')
call RegisterUnitId('nmit')
call RegisterUnitId('nmmu')
call RegisterUnitId('nmoo')
call RegisterUnitId('nmpe')
call RegisterUnitId('nmpg')
call RegisterUnitId('nmr0')
call RegisterUnitId('nmr2')
call RegisterUnitId('nmr3')
call RegisterUnitId('nmr4')
call RegisterUnitId('nmr5')
call RegisterUnitId('nmr6')
call RegisterUnitId('nmr7')
call RegisterUnitId('nmr8')
call RegisterUnitId('nmr9')
call RegisterUnitId('nmra')
call RegisterUnitId('nmrb')
call RegisterUnitId('nmrc')
call RegisterUnitId('nmrd')
call RegisterUnitId('nmre')
call RegisterUnitId('nmrf')
call RegisterUnitId('nmrk')
call RegisterUnitId('nmrl')
call RegisterUnitId('nmrm')
call RegisterUnitId('nmrr')
call RegisterUnitId('nmrv')
call RegisterUnitId('nmsc')
call RegisterUnitId('nmsh')
call RegisterUnitId('nmsn')
call RegisterUnitId('nmtw')
call RegisterUnitId('nmyr')
call RegisterUnitId('nmys')
call RegisterUnitId('nnad')
call RegisterUnitId('nndk')
call RegisterUnitId('nndr')
call RegisterUnitId('nnfm')
call RegisterUnitId('nnht')
call RegisterUnitId('nnmg')
call RegisterUnitId('nnrg')
call RegisterUnitId('nnrs')
call RegisterUnitId('nnsa')
call RegisterUnitId('nnsg')
call RegisterUnitId('nnsu')
call RegisterUnitId('nnsw')
call RegisterUnitId('nntg')
call RegisterUnitId('nntt')
call RegisterUnitId('nnwa')
call RegisterUnitId('nnwl')
call RegisterUnitId('nnwq')
call RegisterUnitId('nnwr')
call RegisterUnitId('nnws')
call RegisterUnitId('nnzg')
call RegisterUnitId('noga')
call RegisterUnitId('nogl')
call RegisterUnitId('nogm')
call RegisterUnitId('nogn')
call RegisterUnitId('nogo')
call RegisterUnitId('nogr')
call RegisterUnitId('nomg')
call RegisterUnitId('now2')
call RegisterUnitId('now3')
call RegisterUnitId('nowb')
call RegisterUnitId('nowe')
call RegisterUnitId('nowk')
call RegisterUnitId('nowl')
call RegisterUnitId('npfl')
call RegisterUnitId('npfm')
call RegisterUnitId('npgf')
call RegisterUnitId('npgr')
call RegisterUnitId('npig')
call RegisterUnitId('nplb')
call RegisterUnitId('nplg')
call RegisterUnitId('npn1')
call RegisterUnitId('npn2')
call RegisterUnitId('npn3')
call RegisterUnitId('npn4')
call RegisterUnitId('npn5')
call RegisterUnitId('npn6')
call RegisterUnitId('npng')
call RegisterUnitId('npnw')
call RegisterUnitId('nqb1')
call RegisterUnitId('nqb2')
call RegisterUnitId('nqb3')
call RegisterUnitId('nqb4')
call RegisterUnitId('nqbh')
call RegisterUnitId('nrac')
call RegisterUnitId('nrat')
call RegisterUnitId('nrdk')
call RegisterUnitId('nrdr')
call RegisterUnitId('nrel')
call RegisterUnitId('nrog')
call RegisterUnitId('nrvd')
call RegisterUnitId('nrvf')
call RegisterUnitId('nrvi')
call RegisterUnitId('nrvl')
call RegisterUnitId('nrvs')
call RegisterUnitId('nrwm')
call RegisterUnitId('nrzb')
call RegisterUnitId('nrzg')
call RegisterUnitId('nrzm')
call RegisterUnitId('nrzs')
call RegisterUnitId('nrzt')
call RegisterUnitId('nsat')
call RegisterUnitId('nsbm')
call RegisterUnitId('nsbs')
call RegisterUnitId('nsc2')
call RegisterUnitId('nsc3')
call RegisterUnitId('nsca')
call RegisterUnitId('nscb')
call RegisterUnitId('nsce')
call RegisterUnitId('nsea')
call RegisterUnitId('nsel')
call RegisterUnitId('nser')
call RegisterUnitId('nsgb')
call RegisterUnitId('nsgg')
call RegisterUnitId('nsgh')
call RegisterUnitId('nsgn')
call RegisterUnitId('nsgt')
call RegisterUnitId('nsha')
call RegisterUnitId('nshe')
call RegisterUnitId('nshf')
call RegisterUnitId('nshp')
call RegisterUnitId('nshr')
call RegisterUnitId('nshw')
call RegisterUnitId('nska')
call RegisterUnitId('nske')
call RegisterUnitId('nskf')
call RegisterUnitId('nskg')
call RegisterUnitId('nskk')
call RegisterUnitId('nskm')
call RegisterUnitId('nsko')
call RegisterUnitId('nslf')
call RegisterUnitId('nslh')
call RegisterUnitId('nsll')
call RegisterUnitId('nslm')
call RegisterUnitId('nsln')
call RegisterUnitId('nslr')
call RegisterUnitId('nslv')
call RegisterUnitId('nsno')
call RegisterUnitId('nsnp')
call RegisterUnitId('nsns')
call RegisterUnitId('nsoc')
call RegisterUnitId('nsog')
call RegisterUnitId('nspb')
call RegisterUnitId('nspc')
call RegisterUnitId('nspd')
call RegisterUnitId('nspg')
call RegisterUnitId('nspp')
call RegisterUnitId('nspr')
call RegisterUnitId('nsqa')
call RegisterUnitId('nsqe')
call RegisterUnitId('nsqo')
call RegisterUnitId('nsqt')
call RegisterUnitId('nsra')
call RegisterUnitId('nsrh')
call RegisterUnitId('nsrn')
call RegisterUnitId('nsrv')
call RegisterUnitId('nsrw')
call RegisterUnitId('nssn')
call RegisterUnitId('nssp')
call RegisterUnitId('nsth')
call RegisterUnitId('nstl')
call RegisterUnitId('nsts')
call RegisterUnitId('nstw')
call RegisterUnitId('nsty')
call RegisterUnitId('nsw1')
call RegisterUnitId('nsw2')
call RegisterUnitId('nsw3')
call RegisterUnitId('ntav')
call RegisterUnitId('nten')
call RegisterUnitId('nth0')
call RegisterUnitId('nth1')
call RegisterUnitId('nthl')
call RegisterUnitId('nthr')
call RegisterUnitId('ntka')
call RegisterUnitId('ntkc')
call RegisterUnitId('ntkf')
call RegisterUnitId('ntkh')
call RegisterUnitId('ntks')
call RegisterUnitId('ntkt')
call RegisterUnitId('ntkw')
call RegisterUnitId('ntn2')
call RegisterUnitId('ntnt')
call RegisterUnitId('ntor')
call RegisterUnitId('ntrd')
call RegisterUnitId('ntrg')
call RegisterUnitId('ntrh')
call RegisterUnitId('ntrs')
call RegisterUnitId('ntrt')
call RegisterUnitId('ntrv')
call RegisterUnitId('ntt1')
call RegisterUnitId('ntt2')
call RegisterUnitId('ntws')
call RegisterUnitId('ntx2')
call RegisterUnitId('nubk')
call RegisterUnitId('nubr')
call RegisterUnitId('nubw')
call RegisterUnitId('nvde')
call RegisterUnitId('nvdg')
call RegisterUnitId('nvdl')
call RegisterUnitId('nvdw')
call RegisterUnitId('nvil')
call RegisterUnitId('nvk2')
call RegisterUnitId('nvl2')
call RegisterUnitId('nvlk')
call RegisterUnitId('nvlw')
call RegisterUnitId('nvr0')
call RegisterUnitId('nvr1')
call RegisterUnitId('nvr2')
call RegisterUnitId('nvul')
call RegisterUnitId('nw2w')
call RegisterUnitId('nwad')
call RegisterUnitId('nwat')
call RegisterUnitId('nwc1')
call RegisterUnitId('nwc2')
call RegisterUnitId('nwe1')
call RegisterUnitId('nwe2')
call RegisterUnitId('nwe3')
call RegisterUnitId('nwen')
call RegisterUnitId('nwgs')
call RegisterUnitId('nwgt')
call RegisterUnitId('nwiz')
call RegisterUnitId('nwld')
call RegisterUnitId('nwlg')
call RegisterUnitId('nwlt')
call RegisterUnitId('nwna')
call RegisterUnitId('nwnr')
call RegisterUnitId('nwns')
call RegisterUnitId('nwrg')
call RegisterUnitId('nws1')
call RegisterUnitId('nwwd')
call RegisterUnitId('nwwf')
call RegisterUnitId('nwwg')
call RegisterUnitId('nwzd')
call RegisterUnitId('nwzg')
call RegisterUnitId('nwzr')
call RegisterUnitId('nzep')
call RegisterUnitId('nzin')
call RegisterUnitId('nzlc')
call RegisterUnitId('nzom')
elseif ( 9 == index ) then
// After custom 'o' abilities
call RegisterUnitId('oalt')
call RegisterUnitId('obar')
call RegisterUnitId('obea')
call RegisterUnitId('obot')
call RegisterUnitId('ocat')
call RegisterUnitId('ocbw')
call RegisterUnitId('odes')
call RegisterUnitId('odkt')
call RegisterUnitId('odoc')
call RegisterUnitId('oeye')
call RegisterUnitId('ofor')
call RegisterUnitId('ofrt')
call RegisterUnitId('ogre')
call RegisterUnitId('ogrk')
call RegisterUnitId('ogru')
call RegisterUnitId('ohun')
call RegisterUnitId('ohwd')
call RegisterUnitId('ojgn')
call RegisterUnitId('okod')
call RegisterUnitId('omtg')
call RegisterUnitId('onzg')
call RegisterUnitId('oosc')
call RegisterUnitId('opeo')
call RegisterUnitId('orai')
call RegisterUnitId('oshm')
call RegisterUnitId('oshy')
call RegisterUnitId('osld')
call RegisterUnitId('osp1')
call RegisterUnitId('osp2')
call RegisterUnitId('osp3')
call RegisterUnitId('osp4')
call RegisterUnitId('ospm')
call RegisterUnitId('ospw')
call RegisterUnitId('ostr')
call RegisterUnitId('osw1')
call RegisterUnitId('osw2')
call RegisterUnitId('osw3')
call RegisterUnitId('oswy')
call RegisterUnitId('otau')
call RegisterUnitId('otbk')
call RegisterUnitId('otbr')
call RegisterUnitId('otot')
call RegisterUnitId('otrb')
call RegisterUnitId('otto')
call RegisterUnitId('ovlj')
call RegisterUnitId('ovln')
call RegisterUnitId('owar')
call RegisterUnitId('ownr')
call RegisterUnitId('owtw')
call RegisterUnitId('owyv')
elseif ( 10 == index ) then
// After custom 'u' abilities
call RegisterUnitId('uabc')
call RegisterUnitId('uabo')
call RegisterUnitId('uaco')
call RegisterUnitId('uaod')
call RegisterUnitId('uarb')
call RegisterUnitId('uban')
call RegisterUnitId('ubdd')
call RegisterUnitId('ubdr')
call RegisterUnitId('ubon')
call RegisterUnitId('ubot')
call RegisterUnitId('ubsp')
call RegisterUnitId('ucrm')
call RegisterUnitId('ucry')
call RegisterUnitId('ucs1')
call RegisterUnitId('ucs2')
call RegisterUnitId('ucs3')
call RegisterUnitId('ucsB')
call RegisterUnitId('ucsC')
call RegisterUnitId('udes')
call RegisterUnitId('ufro')
call RegisterUnitId('ugar')
call RegisterUnitId('ugho')
call RegisterUnitId('ugol')
call RegisterUnitId('ugrm')
call RegisterUnitId('ugrv')
call RegisterUnitId('uktg')
call RegisterUnitId('uktn')
call RegisterUnitId('uloc')
call RegisterUnitId('umtw')
call RegisterUnitId('unec')
call RegisterUnitId('unp1')
call RegisterUnitId('unp2')
call RegisterUnitId('unpl')
call RegisterUnitId('uobs')
call RegisterUnitId('uplg')
call RegisterUnitId('usap')
call RegisterUnitId('usep')
call RegisterUnitId('ushd')
call RegisterUnitId('ushp')
call RegisterUnitId('uske')
call RegisterUnitId('uskm')
call RegisterUnitId('uslh')
call RegisterUnitId('uswb')
call RegisterUnitId('utod')
call RegisterUnitId('utom')
call RegisterUnitId('uubs')
call RegisterUnitId('uzg1')
call RegisterUnitId('uzg2')
call RegisterUnitId('uzig')
elseif ( 11 == index ) then
// After custom 'z' abilities
call RegisterUnitId('zcso')
call RegisterUnitId('zhyd')
call RegisterUnitId('zjug')
call RegisterUnitId('zmar')
call RegisterUnitId('zshv')
call RegisterUnitId('zsmc')
call RegisterUnitId('zzrg')
endif
endmethod
method onStart takes nothing returns nothing
set scanRangePrefixes = "EHNOUehnouz"
endmethod
method onEnd takes nothing returns nothing
local staticIdList units = GetAllUnitIds()
call BJDebugMsg( "UnitIdScanner - Total ids: " + I2S( units.size() ) + " (" + I2S(succeedCounter) + " customs)" )
endmethod
endstruct
endlibrary
ItemIdScanner
JASS:
/*
ItemIdScanner lib v1.0.0 (21/10/2019) by Ricola3D
Content:
Id scanner for World Editor items.
*/
library ItemIdScanner requires IdScanner
//! runtextmacro DECL_NEW_SCANNER_TYPE ("ItemIdScanner")
/*
*/
struct ItemIdScanner extends AbstractIdScanner
method isValidId takes integer id returns boolean
local boolean isValid = false
local item testItem = CreateItem(id, 0, 0)
if ( null != testItem ) then
call RemoveItem(testItem)
set isValid = true
endif
return isValid
endmethod
method saveId takes integer index, integer id returns nothing
call RegisterItemId(id)
endmethod
/*
276 hardcoded standard items, sorted by increasing value
*/
method saveStandardRange takes integer index returns nothing
if ( 1 == index ) then
// After custom 'I' abilities
call RegisterItemId('afac')
call RegisterItemId('ajen')
call RegisterItemId('amrc')
call RegisterItemId('anfg')
call RegisterItemId('ankh')
call RegisterItemId('arsc')
call RegisterItemId('arsh')
call RegisterItemId('asbl')
call RegisterItemId('axas')
call RegisterItemId('azhr')
call RegisterItemId('belv')
call RegisterItemId('bfhr')
call RegisterItemId('bgst')
call RegisterItemId('blba')
call RegisterItemId('brac')
call RegisterItemId('brag')
call RegisterItemId('bspd')
call RegisterItemId('btst')
call RegisterItemId('bzbe')
call RegisterItemId('bzbf')
call RegisterItemId('ccmd')
call RegisterItemId('ches')
call RegisterItemId('ciri')
call RegisterItemId('ckng')
call RegisterItemId('clfm')
call RegisterItemId('clsd')
call RegisterItemId('cnhn')
call RegisterItemId('cnob')
call RegisterItemId('cosl')
call RegisterItemId('crdt')
call RegisterItemId('crys')
call RegisterItemId('desc')
call RegisterItemId('dkfw')
call RegisterItemId('dphe')
call RegisterItemId('drph')
call RegisterItemId('dsum')
call RegisterItemId('dthb')
call RegisterItemId('dtsb')
call RegisterItemId('dust')
call RegisterItemId('engs')
call RegisterItemId('envl')
call RegisterItemId('esaz')
call RegisterItemId('evtl')
call RegisterItemId('fgdg')
call RegisterItemId('fgfh')
call RegisterItemId('fgrd')
call RegisterItemId('fgrg')
call RegisterItemId('fgsk')
call RegisterItemId('fgun')
call RegisterItemId('flag')
call RegisterItemId('frgd')
call RegisterItemId('frhg')
call RegisterItemId('fwss')
call RegisterItemId('gcel')
call RegisterItemId('gemt')
call RegisterItemId('gfor')
call RegisterItemId('gldo')
call RegisterItemId('glsk')
call RegisterItemId('gmfr')
call RegisterItemId('gobm')
call RegisterItemId('gold')
call RegisterItemId('gomn')
call RegisterItemId('gopr')
call RegisterItemId('grsl')
call RegisterItemId('gsou')
call RegisterItemId('guvi')
call RegisterItemId('gvsm')
call RegisterItemId('hbth')
call RegisterItemId('hcun')
call RegisterItemId('hlst')
call RegisterItemId('horl')
call RegisterItemId('hslv')
call RegisterItemId('hval')
call RegisterItemId('infs')
call RegisterItemId('iwbr')
call RegisterItemId('jdrn')
call RegisterItemId('jpnt')
call RegisterItemId('k3m1')
call RegisterItemId('k3m2')
call RegisterItemId('k3m3')
call RegisterItemId('kgal')
call RegisterItemId('klmm')
call RegisterItemId('kpin')
call RegisterItemId('ktrm')
call RegisterItemId('kybl')
call RegisterItemId('kygh')
call RegisterItemId('kymn')
call RegisterItemId('kysn')
call RegisterItemId('ledg')
call RegisterItemId('lgdh')
call RegisterItemId('lhst')
call RegisterItemId('lmbr')
call RegisterItemId('lnrn')
call RegisterItemId('lure')
call RegisterItemId('manh')
call RegisterItemId('mcou')
call RegisterItemId('mcri')
call RegisterItemId('mgtk')
call RegisterItemId('mlst')
call RegisterItemId('mnsf')
call RegisterItemId('mnst')
call RegisterItemId('modt')
call RegisterItemId('moon')
call RegisterItemId('mort')
call RegisterItemId('nflg')
call RegisterItemId('nspi')
call RegisterItemId('ocor')
call RegisterItemId('odef')
call RegisterItemId('ofir')
call RegisterItemId('oflg')
call RegisterItemId('ofr2')
call RegisterItemId('ofro')
call RegisterItemId('oli2')
call RegisterItemId('olig')
call RegisterItemId('oslo')
call RegisterItemId('oven')
call RegisterItemId('pams')
call RegisterItemId('pclr')
call RegisterItemId('pdiv')
call RegisterItemId('penr')
call RegisterItemId('pghe')
call RegisterItemId('pgin')
call RegisterItemId('pgma')
call RegisterItemId('phea')
call RegisterItemId('phlt')
call RegisterItemId('pinv')
call RegisterItemId('plcl')
call RegisterItemId('pman')
call RegisterItemId('pmna')
call RegisterItemId('pnvl')
call RegisterItemId('pnvu')
call RegisterItemId('pomn')
call RegisterItemId('pres')
call RegisterItemId('prvt')
call RegisterItemId('pspd')
call RegisterItemId('rag1')
call RegisterItemId('ram1')
call RegisterItemId('ram2')
call RegisterItemId('ram3')
call RegisterItemId('ram4')
call RegisterItemId('rat3')
call RegisterItemId('rat6')
call RegisterItemId('rat9')
call RegisterItemId('ratc')
call RegisterItemId('ratf')
call RegisterItemId('rde0')
call RegisterItemId('rde1')
call RegisterItemId('rde2')
call RegisterItemId('rde3')
call RegisterItemId('rde4')
call RegisterItemId('rdis')
call RegisterItemId('rej1')
call RegisterItemId('rej2')
call RegisterItemId('rej3')
call RegisterItemId('rej4')
call RegisterItemId('rej5')
call RegisterItemId('rej6')
call RegisterItemId('rhe1')
call RegisterItemId('rhe2')
call RegisterItemId('rhe3')
call RegisterItemId('rhth')
call RegisterItemId('rin1')
call RegisterItemId('ritd')
call RegisterItemId('rlif')
call RegisterItemId('rma2')
call RegisterItemId('rman')
call RegisterItemId('rnec')
call RegisterItemId('rnsp')
call RegisterItemId('rots')
call RegisterItemId('rre1')
call RegisterItemId('rre2')
call RegisterItemId('rreb')
call RegisterItemId('rres')
call RegisterItemId('rspd')
call RegisterItemId('rspl')
call RegisterItemId('rsps')
call RegisterItemId('rst1')
call RegisterItemId('rugt')
call RegisterItemId('rump')
call RegisterItemId('rwat')
call RegisterItemId('rwiz')
call RegisterItemId('sand')
call RegisterItemId('sbch')
call RegisterItemId('sbok')
call RegisterItemId('schl')
call RegisterItemId('sclp')
call RegisterItemId('scul')
call RegisterItemId('sehr')
call RegisterItemId('sfog')
call RegisterItemId('shar')
call RegisterItemId('shas')
call RegisterItemId('shcw')
call RegisterItemId('shdt')
call RegisterItemId('shea')
call RegisterItemId('shen')
call RegisterItemId('shhn')
call RegisterItemId('shrs')
call RegisterItemId('shtm')
call RegisterItemId('shwd')
call RegisterItemId('silk')
call RegisterItemId('skrt')
call RegisterItemId('sksh')
call RegisterItemId('skul')
call RegisterItemId('sman')
call RegisterItemId('sneg')
call RegisterItemId('sor1')
call RegisterItemId('sor2')
call RegisterItemId('sor3')
call RegisterItemId('sor4')
call RegisterItemId('sor5')
call RegisterItemId('sor6')
call RegisterItemId('sor7')
call RegisterItemId('sor8')
call RegisterItemId('sor9')
call RegisterItemId('sora')
call RegisterItemId('sorf')
call RegisterItemId('soul')
call RegisterItemId('spre')
call RegisterItemId('sprn')
call RegisterItemId('spro')
call RegisterItemId('spsh')
call RegisterItemId('srbd')
call RegisterItemId('sreg')
call RegisterItemId('sres')
call RegisterItemId('sror')
call RegisterItemId('srrc')
call RegisterItemId('srtl')
call RegisterItemId('ssan')
call RegisterItemId('ssil')
call RegisterItemId('stel')
call RegisterItemId('stpg')
call RegisterItemId('stre')
call RegisterItemId('stwa')
call RegisterItemId('stwp')
call RegisterItemId('tbak')
call RegisterItemId('tbar')
call RegisterItemId('tbsm')
call RegisterItemId('tcas')
call RegisterItemId('tdex')
call RegisterItemId('tdx2')
call RegisterItemId('tels')
call RegisterItemId('texp')
call RegisterItemId('tfar')
call RegisterItemId('tgrh')
call RegisterItemId('tgxp')
call RegisterItemId('thdm')
call RegisterItemId('thle')
call RegisterItemId('tin2')
call RegisterItemId('tint')
call RegisterItemId('tkno')
call RegisterItemId('tlum')
call RegisterItemId('tmmt')
call RegisterItemId('tmsc')
call RegisterItemId('totw')
call RegisterItemId('tpow')
call RegisterItemId('tret')
call RegisterItemId('tsct')
call RegisterItemId('tst2')
call RegisterItemId('tstr')
call RegisterItemId('uflg')
call RegisterItemId('vamp')
call RegisterItemId('vddl')
call RegisterItemId('war2')
call RegisterItemId('ward')
call RegisterItemId('wcyc')
call RegisterItemId('whwd')
call RegisterItemId('wild')
call RegisterItemId('will')
call RegisterItemId('wlsd')
call RegisterItemId('wneg')
call RegisterItemId('wneu')
call RegisterItemId('wolg')
call RegisterItemId('woms')
call RegisterItemId('wshs')
call RegisterItemId('wswd')
call RegisterItemId('wtlg')
endif
endmethod
method onStart takes nothing returns nothing
set scanRangePrefixes = "I"
endmethod
method onEnd takes nothing returns nothing
local staticIdList items = GetAllItemIds()
call BJDebugMsg( "ItemIdScanner - Total ids: " + I2S( items.size() ) + " (" + I2S(succeedCounter) + " customs)" )
endmethod
endstruct
endlibrary
DestructibleIdScanner
JASS:
/*
DestructibleIdScanner lib v1.0.0 (21/10/2019) by Ricola3D
Content:
Id scanner for World Editor destructibles.
*/
library DestructibleIdScanner requires IdScanner
//! runtextmacro DECL_NEW_SCANNER_TYPE ("DestructibleIdScanner")
/*
*/
struct DestructibleIdScanner extends AbstractIdScanner
method isValidId takes integer id returns boolean
local boolean isValid = false
local destructable testDestructible = CreateDeadDestructable(id, 0, 0, 0, 1, 0)
if ( null != testDestructible ) then
call RemoveDestructable(testDestructible)
set isValid = true
endif
return isValid
endmethod
method saveId takes integer index, integer id returns nothing
call RegisterDestructibleId(id)
endmethod
/*
247 hardcoded standard destructibles, sorted by increasing value
*/
method saveStandardRange takes integer index returns nothing
if ( 0 == index ) then
// Before custom 'B' abilities
call RegisterDestructibleId('ATg1')
call RegisterDestructibleId('ATg2')
call RegisterDestructibleId('ATg3')
call RegisterDestructibleId('ATg4')
call RegisterDestructibleId('ATt0')
call RegisterDestructibleId('ATt1')
call RegisterDestructibleId('ATtc')
call RegisterDestructibleId('ATtr')
call RegisterDestructibleId('ATwf')
elseif ( 1 == index ) then
// After custom 'B' abilities
call RegisterDestructibleId('BTrs')
call RegisterDestructibleId('BTrx')
call RegisterDestructibleId('BTsc')
call RegisterDestructibleId('BTtc')
call RegisterDestructibleId('BTtw')
call RegisterDestructibleId('CTtc')
call RegisterDestructibleId('CTtr')
call RegisterDestructibleId('DTc1')
call RegisterDestructibleId('DTc2')
call RegisterDestructibleId('DTep')
call RegisterDestructibleId('DTes')
call RegisterDestructibleId('DTfp')
call RegisterDestructibleId('DTfx')
call RegisterDestructibleId('DTg1')
call RegisterDestructibleId('DTg2')
call RegisterDestructibleId('DTg3')
call RegisterDestructibleId('DTg4')
call RegisterDestructibleId('DTg5')
call RegisterDestructibleId('DTg6')
call RegisterDestructibleId('DTg7')
call RegisterDestructibleId('DTg8')
call RegisterDestructibleId('DTlv')
call RegisterDestructibleId('DTrc')
call RegisterDestructibleId('DTrf')
call RegisterDestructibleId('DTrx')
call RegisterDestructibleId('DTs1')
call RegisterDestructibleId('DTs2')
call RegisterDestructibleId('DTs3')
call RegisterDestructibleId('DTsb')
call RegisterDestructibleId('DTsh')
call RegisterDestructibleId('DTsp')
call RegisterDestructibleId('Dofv')
call RegisterDestructibleId('Dofw')
call RegisterDestructibleId('FTtw')
call RegisterDestructibleId('GTsh')
call RegisterDestructibleId('IOt0')
call RegisterDestructibleId('IOt1')
call RegisterDestructibleId('IOt2')
call RegisterDestructibleId('ITag')
call RegisterDestructibleId('ITcr')
call RegisterDestructibleId('ITf1')
call RegisterDestructibleId('ITf2')
call RegisterDestructibleId('ITf3')
call RegisterDestructibleId('ITf4')
call RegisterDestructibleId('ITg1')
call RegisterDestructibleId('ITg2')
call RegisterDestructibleId('ITg3')
call RegisterDestructibleId('ITg4')
call RegisterDestructibleId('ITi2')
call RegisterDestructibleId('ITi3')
call RegisterDestructibleId('ITi4')
call RegisterDestructibleId('ITib')
call RegisterDestructibleId('ITig')
call RegisterDestructibleId('ITtc')
call RegisterDestructibleId('ITtg')
call RegisterDestructibleId('ITtw')
call RegisterDestructibleId('ITw0')
call RegisterDestructibleId('ITw1')
call RegisterDestructibleId('ITw2')
call RegisterDestructibleId('ITw3')
call RegisterDestructibleId('ITx1')
call RegisterDestructibleId('ITx2')
call RegisterDestructibleId('ITx3')
call RegisterDestructibleId('ITx4')
call RegisterDestructibleId('JTct')
call RegisterDestructibleId('JTtw')
call RegisterDestructibleId('KTtw')
call RegisterDestructibleId('LOcg')
call RegisterDestructibleId('LT00')
call RegisterDestructibleId('LT01')
call RegisterDestructibleId('LT02')
call RegisterDestructibleId('LT03')
call RegisterDestructibleId('LT04')
call RegisterDestructibleId('LT05')
call RegisterDestructibleId('LT06')
call RegisterDestructibleId('LT07')
call RegisterDestructibleId('LT08')
call RegisterDestructibleId('LT09')
call RegisterDestructibleId('LT10')
call RegisterDestructibleId('LT11')
call RegisterDestructibleId('LTba')
call RegisterDestructibleId('LTbr')
call RegisterDestructibleId('LTbs')
call RegisterDestructibleId('LTbx')
call RegisterDestructibleId('LTcr')
call RegisterDestructibleId('LTe1')
call RegisterDestructibleId('LTe2')
call RegisterDestructibleId('LTe3')
call RegisterDestructibleId('LTe4')
call RegisterDestructibleId('LTex')
call RegisterDestructibleId('LTg1')
call RegisterDestructibleId('LTg2')
call RegisterDestructibleId('LTg3')
call RegisterDestructibleId('LTg4')
call RegisterDestructibleId('LTlt')
call RegisterDestructibleId('LTr1')
call RegisterDestructibleId('LTr2')
call RegisterDestructibleId('LTr3')
call RegisterDestructibleId('LTr4')
call RegisterDestructibleId('LTr5')
call RegisterDestructibleId('LTr6')
call RegisterDestructibleId('LTr7')
call RegisterDestructibleId('LTr8')
call RegisterDestructibleId('LTrc')
call RegisterDestructibleId('LTs1')
call RegisterDestructibleId('LTs2')
call RegisterDestructibleId('LTs3')
call RegisterDestructibleId('LTs4')
call RegisterDestructibleId('LTs5')
call RegisterDestructibleId('LTs6')
call RegisterDestructibleId('LTs7')
call RegisterDestructibleId('LTs8')
call RegisterDestructibleId('LTt0')
call RegisterDestructibleId('LTt1')
call RegisterDestructibleId('LTt2')
call RegisterDestructibleId('LTt3')
call RegisterDestructibleId('LTt4')
call RegisterDestructibleId('LTt5')
call RegisterDestructibleId('LTtc')
call RegisterDestructibleId('LTtx')
call RegisterDestructibleId('LTw0')
call RegisterDestructibleId('LTw1')
call RegisterDestructibleId('LTw2')
call RegisterDestructibleId('LTw3')
call RegisterDestructibleId('NTbd')
call RegisterDestructibleId('NTtc')
call RegisterDestructibleId('NTtw')
call RegisterDestructibleId('OTds')
call RegisterDestructibleId('OTip')
call RegisterDestructibleId('OTis')
call RegisterDestructibleId('OTsp')
call RegisterDestructibleId('OTtw')
call RegisterDestructibleId('VTlt')
call RegisterDestructibleId('Volc')
call RegisterDestructibleId('WTst')
call RegisterDestructibleId('WTtw')
call RegisterDestructibleId('XOk1')
call RegisterDestructibleId('XOk2')
call RegisterDestructibleId('XOkt')
call RegisterDestructibleId('XTbd')
call RegisterDestructibleId('XTm5')
call RegisterDestructibleId('XTmp')
call RegisterDestructibleId('XTmx')
call RegisterDestructibleId('XTvt')
call RegisterDestructibleId('XTx5')
call RegisterDestructibleId('YSdb')
call RegisterDestructibleId('YSdc')
call RegisterDestructibleId('YT00')
call RegisterDestructibleId('YT01')
call RegisterDestructibleId('YT02')
call RegisterDestructibleId('YT03')
call RegisterDestructibleId('YT04')
call RegisterDestructibleId('YT05')
call RegisterDestructibleId('YT06')
call RegisterDestructibleId('YT07')
call RegisterDestructibleId('YT08')
call RegisterDestructibleId('YT09')
call RegisterDestructibleId('YT10')
call RegisterDestructibleId('YT11')
call RegisterDestructibleId('YT12')
call RegisterDestructibleId('YT13')
call RegisterDestructibleId('YT14')
call RegisterDestructibleId('YT15')
call RegisterDestructibleId('YT16')
call RegisterDestructibleId('YT17')
call RegisterDestructibleId('YT18')
call RegisterDestructibleId('YT19')
call RegisterDestructibleId('YT20')
call RegisterDestructibleId('YT21')
call RegisterDestructibleId('YT22')
call RegisterDestructibleId('YT23')
call RegisterDestructibleId('YT24')
call RegisterDestructibleId('YT25')
call RegisterDestructibleId('YT26')
call RegisterDestructibleId('YT27')
call RegisterDestructibleId('YT28')
call RegisterDestructibleId('YT29')
call RegisterDestructibleId('YT30')
call RegisterDestructibleId('YT31')
call RegisterDestructibleId('YT32')
call RegisterDestructibleId('YT33')
call RegisterDestructibleId('YT34')
call RegisterDestructibleId('YT35')
call RegisterDestructibleId('YT36')
call RegisterDestructibleId('YT37')
call RegisterDestructibleId('YT38')
call RegisterDestructibleId('YT39')
call RegisterDestructibleId('YT40')
call RegisterDestructibleId('YT41')
call RegisterDestructibleId('YT42')
call RegisterDestructibleId('YT43')
call RegisterDestructibleId('YT44')
call RegisterDestructibleId('YT45')
call RegisterDestructibleId('YT46')
call RegisterDestructibleId('YT47')
call RegisterDestructibleId('YT48')
call RegisterDestructibleId('YT49')
call RegisterDestructibleId('YT50')
call RegisterDestructibleId('YT51')
call RegisterDestructibleId('YTab')
call RegisterDestructibleId('YTac')
call RegisterDestructibleId('YTce')
call RegisterDestructibleId('YTct')
call RegisterDestructibleId('YTcx')
call RegisterDestructibleId('YTfb')
call RegisterDestructibleId('YTfc')
call RegisterDestructibleId('YTft')
call RegisterDestructibleId('YTlb')
call RegisterDestructibleId('YTpb')
call RegisterDestructibleId('YTpc')
call RegisterDestructibleId('YTst')
call RegisterDestructibleId('YTwt')
call RegisterDestructibleId('Ytlc')
call RegisterDestructibleId('ZTd1')
call RegisterDestructibleId('ZTd2')
call RegisterDestructibleId('ZTd3')
call RegisterDestructibleId('ZTd4')
call RegisterDestructibleId('ZTd5')
call RegisterDestructibleId('ZTd6')
call RegisterDestructibleId('ZTd7')
call RegisterDestructibleId('ZTd8')
call RegisterDestructibleId('ZTg1')
call RegisterDestructibleId('ZTg2')
call RegisterDestructibleId('ZTg3')
call RegisterDestructibleId('ZTg4')
call RegisterDestructibleId('ZTnc')
call RegisterDestructibleId('ZTr0')
call RegisterDestructibleId('ZTr1')
call RegisterDestructibleId('ZTr2')
call RegisterDestructibleId('ZTr3')
call RegisterDestructibleId('ZTsg')
call RegisterDestructibleId('ZTsx')
call RegisterDestructibleId('ZTtc')
call RegisterDestructibleId('ZTtw')
call RegisterDestructibleId('ZTw0')
call RegisterDestructibleId('ZTw1')
call RegisterDestructibleId('ZTw2')
call RegisterDestructibleId('ZTw3')
endif
endmethod
method onStart takes nothing returns nothing
set scanRangePrefixes = "B"
endmethod
method onEnd takes nothing returns nothing
local staticIdList destructibles = GetAllDestructibleIds()
call BJDebugMsg( "DestructibleIdScanner - Total ids: " + I2S( destructibles.size() ) + " (" + I2S(succeedCounter) + " customs)" )
endmethod
endstruct
endlibrary
DoodadIdScanner
JASS:
/*
DoodadIdScanner lib v1.0.0 (21/10/2019) by Ricola3D
Content:
Id scanner for World Editor doodads.
*/
library DoodadIdScanner requires IdScanner
//! runtextmacro DECL_NEW_SCANNER_TYPE ("DoodadIdScanner")
/*
*/
struct DoodadIdScanner extends AbstractIdScanner
method saveId takes integer index, integer id returns nothing
call RegisterDoodadId(id)
endmethod
/*
469 hardcoded standard Doodads, sorted by increasing value
*/
method saveStandardRange takes integer index returns nothing
if ( 0 == index ) then
// Before custom 'D' abilities
call RegisterDoodadId('AObd')
call RegisterDoodadId('AObo')
call RegisterDoodadId('AObr')
call RegisterDoodadId('AOgs')
call RegisterDoodadId('AOhs')
call RegisterDoodadId('AOks')
call RegisterDoodadId('AOla')
call RegisterDoodadId('AOlg')
call RegisterDoodadId('AOnt')
call RegisterDoodadId('AOob')
call RegisterDoodadId('AOsk')
call RegisterDoodadId('AOsr')
call RegisterDoodadId('APbs')
call RegisterDoodadId('APct')
call RegisterDoodadId('APms')
call RegisterDoodadId('APtv')
call RegisterDoodadId('ARrk')
call RegisterDoodadId('ASbc')
call RegisterDoodadId('ASbl')
call RegisterDoodadId('ASbr')
call RegisterDoodadId('ASpr')
call RegisterDoodadId('ASpt')
call RegisterDoodadId('ASr1')
call RegisterDoodadId('ASra')
call RegisterDoodadId('ASv0')
call RegisterDoodadId('ASv1')
call RegisterDoodadId('ASv2')
call RegisterDoodadId('ASv3')
call RegisterDoodadId('ASv4')
call RegisterDoodadId('ASwt')
call RegisterDoodadId('ASx0')
call RegisterDoodadId('ASx1')
call RegisterDoodadId('ASx2')
call RegisterDoodadId('AWfl')
call RegisterDoodadId('AWfs')
call RegisterDoodadId('AWlp')
call RegisterDoodadId('AZrf')
call RegisterDoodadId('BObo')
call RegisterDoodadId('BOct')
call RegisterDoodadId('BOth')
call RegisterDoodadId('BOtt')
call RegisterDoodadId('BPca')
call RegisterDoodadId('BPtw')
call RegisterDoodadId('BRcr')
call RegisterDoodadId('BRfs')
call RegisterDoodadId('BRgs')
call RegisterDoodadId('BRrk')
call RegisterDoodadId('BRrp')
call RegisterDoodadId('BRrs')
call RegisterDoodadId('BRsp')
call RegisterDoodadId('BSar')
call RegisterDoodadId('BSr1')
call RegisterDoodadId('BSra')
call RegisterDoodadId('BSrc')
call RegisterDoodadId('BSrv')
call RegisterDoodadId('BSrw')
call RegisterDoodadId('CObl')
call RegisterDoodadId('CObo')
call RegisterDoodadId('COdf')
call RegisterDoodadId('COhs')
call RegisterDoodadId('COla')
call RegisterDoodadId('COlg')
call RegisterDoodadId('COob')
call RegisterDoodadId('CPbs')
call RegisterDoodadId('CPct')
call RegisterDoodadId('CPlp')
call RegisterDoodadId('CPms')
call RegisterDoodadId('CRfs')
call RegisterDoodadId('CRrk')
call RegisterDoodadId('CRrs')
call RegisterDoodadId('CSbc')
call RegisterDoodadId('CSbl')
call RegisterDoodadId('CSbr')
call RegisterDoodadId('CSr1')
call RegisterDoodadId('CSra')
elseif ( 1 == index ) then
// After custom 'D' abilities
call RegisterDoodadId('DOab')
call RegisterDoodadId('DOas')
call RegisterDoodadId('DObh')
call RegisterDoodadId('DObk')
call RegisterDoodadId('DObw')
call RegisterDoodadId('DOch')
call RegisterDoodadId('DOcp')
call RegisterDoodadId('DOcr')
call RegisterDoodadId('DOim')
call RegisterDoodadId('DOjp')
call RegisterDoodadId('DOkb')
call RegisterDoodadId('DOlc')
call RegisterDoodadId('DOmc')
call RegisterDoodadId('DOme')
call RegisterDoodadId('DOob')
call RegisterDoodadId('DOsv')
call RegisterDoodadId('DOsw')
call RegisterDoodadId('DOtb')
call RegisterDoodadId('DOtc')
call RegisterDoodadId('DOtp')
call RegisterDoodadId('DOtt')
call RegisterDoodadId('DRfc')
call RegisterDoodadId('DRrk')
call RegisterDoodadId('DRst')
call RegisterDoodadId('DSa1')
call RegisterDoodadId('DSa2')
call RegisterDoodadId('DSah')
call RegisterDoodadId('DSar')
call RegisterDoodadId('DSp0')
call RegisterDoodadId('DSp9')
call RegisterDoodadId('GOlc')
call RegisterDoodadId('GOob')
call RegisterDoodadId('GPsh')
call RegisterDoodadId('GRfc')
call RegisterDoodadId('GRrk')
call RegisterDoodadId('GRst')
call RegisterDoodadId('GSa1')
call RegisterDoodadId('GSa2')
call RegisterDoodadId('GSah')
call RegisterDoodadId('GSar')
call RegisterDoodadId('GSp0')
call RegisterDoodadId('GSp9')
call RegisterDoodadId('IOch')
call RegisterDoodadId('IOic')
call RegisterDoodadId('IOob')
call RegisterDoodadId('IOpr')
call RegisterDoodadId('IOsl')
call RegisterDoodadId('IOsm')
call RegisterDoodadId('IOss')
call RegisterDoodadId('IOst')
call RegisterDoodadId('IRcy')
call RegisterDoodadId('IRgc')
call RegisterDoodadId('IRic')
call RegisterDoodadId('IRrk')
call RegisterDoodadId('IRrs')
call RegisterDoodadId('ISa1')
call RegisterDoodadId('ISar')
call RegisterDoodadId('ISrb')
call RegisterDoodadId('ISs1')
call RegisterDoodadId('ISsr')
call RegisterDoodadId('IWbg')
call RegisterDoodadId('IWie')
call RegisterDoodadId('IWw0')
call RegisterDoodadId('IZft')
call RegisterDoodadId('IZrw')
call RegisterDoodadId('IZww')
call RegisterDoodadId('JOgr')
call RegisterDoodadId('JSar')
call RegisterDoodadId('JSax')
call RegisterDoodadId('JSc2')
call RegisterDoodadId('JSc3')
call RegisterDoodadId('JSc4')
call RegisterDoodadId('JSco')
call RegisterDoodadId('JScs')
call RegisterDoodadId('JScx')
call RegisterDoodadId('JSr6')
call RegisterDoodadId('JSrc')
call RegisterDoodadId('JZif')
call RegisterDoodadId('JZud')
call RegisterDoodadId('KOdr')
call RegisterDoodadId('KOst')
call RegisterDoodadId('LCc0')
call RegisterDoodadId('LCc2')
call RegisterDoodadId('LOam')
call RegisterDoodadId('LOar')
call RegisterDoodadId('LObr')
call RegisterDoodadId('LObz')
call RegisterDoodadId('LOca')
call RegisterDoodadId('LOcb')
call RegisterDoodadId('LOce')
call RegisterDoodadId('LOch')
call RegisterDoodadId('LOct')
call RegisterDoodadId('LOfl')
call RegisterDoodadId('LOgr')
call RegisterDoodadId('LOh1')
call RegisterDoodadId('LOhb')
call RegisterDoodadId('LOhc')
call RegisterDoodadId('LOhp')
call RegisterDoodadId('LOic')
call RegisterDoodadId('LOlp')
call RegisterDoodadId('LOo1')
call RegisterDoodadId('LOo2')
call RegisterDoodadId('LOpg')
call RegisterDoodadId('LOrb')
call RegisterDoodadId('LOrc')
call RegisterDoodadId('LOrh')
call RegisterDoodadId('LOsc')
call RegisterDoodadId('LOsh')
call RegisterDoodadId('LOsk')
call RegisterDoodadId('LOsm')
call RegisterDoodadId('LOsp')
call RegisterDoodadId('LOss')
call RegisterDoodadId('LOsw')
call RegisterDoodadId('LOt1')
call RegisterDoodadId('LOth')
call RegisterDoodadId('LOtr')
call RegisterDoodadId('LOtz')
call RegisterDoodadId('LOwb')
call RegisterDoodadId('LOwf')
call RegisterDoodadId('LOwp')
call RegisterDoodadId('LOwr')
call RegisterDoodadId('LOxx')
call RegisterDoodadId('LPcr')
call RegisterDoodadId('LPcw')
call RegisterDoodadId('LPfp')
call RegisterDoodadId('LPlp')
call RegisterDoodadId('LPrs')
call RegisterDoodadId('LPwb')
call RegisterDoodadId('LPwh')
call RegisterDoodadId('LRrk')
call RegisterDoodadId('LSba')
call RegisterDoodadId('LSeb')
call RegisterDoodadId('LSgr')
call RegisterDoodadId('LSgs')
call RegisterDoodadId('LSin')
call RegisterDoodadId('LSr1')
call RegisterDoodadId('LSra')
call RegisterDoodadId('LSrg')
call RegisterDoodadId('LSsb')
call RegisterDoodadId('LSsf')
call RegisterDoodadId('LSsi')
call RegisterDoodadId('LSst')
call RegisterDoodadId('LSwb')
call RegisterDoodadId('LSwl')
call RegisterDoodadId('LSwm')
call RegisterDoodadId('LWw0')
call RegisterDoodadId('LZth')
call RegisterDoodadId('NOal')
call RegisterDoodadId('NObc')
call RegisterDoodadId('NObk')
call RegisterDoodadId('NObo')
call RegisterDoodadId('NObt')
call RegisterDoodadId('NOfg')
call RegisterDoodadId('NOfl')
call RegisterDoodadId('NOfp')
call RegisterDoodadId('NOft')
call RegisterDoodadId('NOgv')
call RegisterDoodadId('NOok')
call RegisterDoodadId('NOtb')
call RegisterDoodadId('NPth')
call RegisterDoodadId('NRfs')
call RegisterDoodadId('NRic')
call RegisterDoodadId('NRrk')
call RegisterDoodadId('NRwr')
call RegisterDoodadId('NSct')
call RegisterDoodadId('NSr1')
call RegisterDoodadId('NSra')
call RegisterDoodadId('NSrb')
call RegisterDoodadId('NWf1')
call RegisterDoodadId('NWf2')
call RegisterDoodadId('NWf3')
call RegisterDoodadId('NWf4')
call RegisterDoodadId('NWfb')
call RegisterDoodadId('NWfp')
call RegisterDoodadId('NWi1')
call RegisterDoodadId('NWi2')
call RegisterDoodadId('NWi3')
call RegisterDoodadId('NWi4')
call RegisterDoodadId('NWpa')
call RegisterDoodadId('NWrd')
call RegisterDoodadId('NWrw')
call RegisterDoodadId('NWsd')
call RegisterDoodadId('NWsp')
call RegisterDoodadId('NWwh')
call RegisterDoodadId('OOal')
call RegisterDoodadId('OOgr')
call RegisterDoodadId('OOob')
call RegisterDoodadId('OOsd')
call RegisterDoodadId('OOsk')
call RegisterDoodadId('OOst')
call RegisterDoodadId('OPop')
call RegisterDoodadId('ORfk')
call RegisterDoodadId('ORmk')
call RegisterDoodadId('ORrk')
call RegisterDoodadId('ORrr')
call RegisterDoodadId('ORrs')
call RegisterDoodadId('OSa1')
call RegisterDoodadId('OSar')
call RegisterDoodadId('OZfc')
call RegisterDoodadId('OZsp')
call RegisterDoodadId('VOal')
call RegisterDoodadId('VOas')
call RegisterDoodadId('VOfl')
call RegisterDoodadId('VOfs')
call RegisterDoodadId('VSvb')
call RegisterDoodadId('XOcl')
call RegisterDoodadId('XOcs')
call RegisterDoodadId('XOmr')
call RegisterDoodadId('YCc1')
call RegisterDoodadId('YCc2')
call RegisterDoodadId('YCc3')
call RegisterDoodadId('YCc4')
call RegisterDoodadId('YCd1')
call RegisterDoodadId('YCd2')
call RegisterDoodadId('YCd3')
call RegisterDoodadId('YCd4')
call RegisterDoodadId('YCg1')
call RegisterDoodadId('YCg2')
call RegisterDoodadId('YCg3')
call RegisterDoodadId('YCg4')
call RegisterDoodadId('YCl1')
call RegisterDoodadId('YCl2')
call RegisterDoodadId('YCl3')
call RegisterDoodadId('YCl4')
call RegisterDoodadId('YCo1')
call RegisterDoodadId('YCo2')
call RegisterDoodadId('YCo3')
call RegisterDoodadId('YCo4')
call RegisterDoodadId('YCp1')
call RegisterDoodadId('YCp2')
call RegisterDoodadId('YCp3')
call RegisterDoodadId('YCp4')
call RegisterDoodadId('YCr1')
call RegisterDoodadId('YCr2')
call RegisterDoodadId('YCr3')
call RegisterDoodadId('YCr4')
call RegisterDoodadId('YCs1')
call RegisterDoodadId('YCs2')
call RegisterDoodadId('YCs3')
call RegisterDoodadId('YCs4')
call RegisterDoodadId('YCt1')
call RegisterDoodadId('YCt2')
call RegisterDoodadId('YCt3')
call RegisterDoodadId('YCt4')
call RegisterDoodadId('YCu1')
call RegisterDoodadId('YCu2')
call RegisterDoodadId('YCu3')
call RegisterDoodadId('YCu4')
call RegisterDoodadId('YCx1')
call RegisterDoodadId('YCx2')
call RegisterDoodadId('YCx3')
call RegisterDoodadId('YCx4')
call RegisterDoodadId('YCx5')
call RegisterDoodadId('YCx6')
call RegisterDoodadId('YCx7')
call RegisterDoodadId('YCx8')
call RegisterDoodadId('YObb')
call RegisterDoodadId('YObg')
call RegisterDoodadId('YObs')
call RegisterDoodadId('YObw')
call RegisterDoodadId('YOcp')
call RegisterDoodadId('YOec')
call RegisterDoodadId('YOf1')
call RegisterDoodadId('YOf2')
call RegisterDoodadId('YOf3')
call RegisterDoodadId('YOfb')
call RegisterDoodadId('YOfn')
call RegisterDoodadId('YOfr')
call RegisterDoodadId('YOfs')
call RegisterDoodadId('YOgr')
call RegisterDoodadId('YOks')
call RegisterDoodadId('YOlb')
call RegisterDoodadId('YOlp')
call RegisterDoodadId('YOob')
call RegisterDoodadId('YOr1')
call RegisterDoodadId('YOr2')
call RegisterDoodadId('YOsa')
call RegisterDoodadId('YOst')
call RegisterDoodadId('YOsw')
call RegisterDoodadId('YOta')
call RegisterDoodadId('YOtf')
call RegisterDoodadId('YOth')
call RegisterDoodadId('YOts')
call RegisterDoodadId('YOwa')
call RegisterDoodadId('YOwb')
call RegisterDoodadId('YOws')
call RegisterDoodadId('YPbs')
call RegisterDoodadId('YPfa')
call RegisterDoodadId('YPfs')
call RegisterDoodadId('YPpp')
call RegisterDoodadId('YS00')
call RegisterDoodadId('YS01')
call RegisterDoodadId('YS02')
call RegisterDoodadId('YS03')
call RegisterDoodadId('YS04')
call RegisterDoodadId('YS05')
call RegisterDoodadId('YS06')
call RegisterDoodadId('YS07')
call RegisterDoodadId('YS08')
call RegisterDoodadId('YS09')
call RegisterDoodadId('YS10')
call RegisterDoodadId('YS11')
call RegisterDoodadId('YS12')
call RegisterDoodadId('YS13')
call RegisterDoodadId('YS14')
call RegisterDoodadId('YS15')
call RegisterDoodadId('YSa1')
call RegisterDoodadId('YSaw')
call RegisterDoodadId('YSc2')
call RegisterDoodadId('YSc3')
call RegisterDoodadId('YSc4')
call RegisterDoodadId('YSc5')
call RegisterDoodadId('YSca')
call RegisterDoodadId('YScd')
call RegisterDoodadId('YSco')
call RegisterDoodadId('YScr')
call RegisterDoodadId('YScs')
call RegisterDoodadId('YSll')
call RegisterDoodadId('YSls')
call RegisterDoodadId('YSlt')
call RegisterDoodadId('YSlx')
call RegisterDoodadId('YSr0')
call RegisterDoodadId('YSr1')
call RegisterDoodadId('YSr2')
call RegisterDoodadId('YSr3')
call RegisterDoodadId('YSr4')
call RegisterDoodadId('YSr5')
call RegisterDoodadId('YSr6')
call RegisterDoodadId('YSr7')
call RegisterDoodadId('YSr8')
call RegisterDoodadId('YSr9')
call RegisterDoodadId('YSra')
call RegisterDoodadId('YSrb')
call RegisterDoodadId('YSrc')
call RegisterDoodadId('YSrd')
call RegisterDoodadId('YSre')
call RegisterDoodadId('YSrf')
call RegisterDoodadId('YSta')
call RegisterDoodadId('YSw0')
call RegisterDoodadId('YSw1')
call RegisterDoodadId('YSw2')
call RegisterDoodadId('YSw3')
call RegisterDoodadId('YZef')
call RegisterDoodadId('ZCv1')
call RegisterDoodadId('ZCv2')
call RegisterDoodadId('ZOba')
call RegisterDoodadId('ZObz')
call RegisterDoodadId('ZOd2')
call RegisterDoodadId('ZOdt')
call RegisterDoodadId('ZOfo')
call RegisterDoodadId('ZOfp')
call RegisterDoodadId('ZOls')
call RegisterDoodadId('ZOob')
call RegisterDoodadId('ZOrb')
call RegisterDoodadId('ZOrc')
call RegisterDoodadId('ZOrp')
call RegisterDoodadId('ZOrt')
call RegisterDoodadId('ZOsb')
call RegisterDoodadId('ZOsh')
call RegisterDoodadId('ZOss')
call RegisterDoodadId('ZOst')
call RegisterDoodadId('ZOt2')
call RegisterDoodadId('ZOtb')
call RegisterDoodadId('ZOtr')
call RegisterDoodadId('ZOvr')
call RegisterDoodadId('ZPfw')
call RegisterDoodadId('ZPlp')
call RegisterDoodadId('ZPms')
call RegisterDoodadId('ZPru')
call RegisterDoodadId('ZPsh')
call RegisterDoodadId('ZPtw')
call RegisterDoodadId('ZPvp')
call RegisterDoodadId('ZRbd')
call RegisterDoodadId('ZRbs')
call RegisterDoodadId('ZRrk')
call RegisterDoodadId('ZRrs')
call RegisterDoodadId('ZRsp')
call RegisterDoodadId('ZSa1')
call RegisterDoodadId('ZSab')
call RegisterDoodadId('ZSar')
call RegisterDoodadId('ZSas')
call RegisterDoodadId('ZSb1')
call RegisterDoodadId('ZSrb')
call RegisterDoodadId('ZSs1')
call RegisterDoodadId('ZWbg')
call RegisterDoodadId('ZWca')
call RegisterDoodadId('ZWcl')
call RegisterDoodadId('ZWfs')
call RegisterDoodadId('ZWsf')
call RegisterDoodadId('ZWsw')
call RegisterDoodadId('ZZcd')
call RegisterDoodadId('ZZdt')
call RegisterDoodadId('ZZgr')
call RegisterDoodadId('ZZys')
endif
endmethod
method onStart takes nothing returns nothing
set scanRangePrefixes = "D"
endmethod
method onEnd takes nothing returns nothing
local staticIdList Doodads = GetAllDoodadIds()
call BJDebugMsg( "DoodadIdScanner - Total ids: " + I2S( Doodads.size() ) + " (" + I2S(succeedCounter) + " customs)" )
endmethod
endstruct
endlibrary
AbilityIdScanner
JASS:
/*
AbilityIdScanner lib v1.0.0 (21/10/2019) by Ricola3D
Content:
Id scanner for World Editor abilities.
*/
library AbilityIdScanner requires IdScanner
//! runtextmacro DECL_NEW_SCANNER_TYPE ("AbilityIdScanner")
/*
*/
struct AbilityIdScanner extends AbstractIdScanner
static constant string UNSET_ABILITY_ICON_VALUE = "ReplaceableTextures\\CommandButtons\\BTNTemp.blp"
static constant integer DUMMY_UNIT_ID = 'n00E'
private static unit DummyUnit
method isValidId takes integer id returns boolean
/*
Notes:
- GetObjectName (=GetAbilityName) and 'UnitAddAbility or UnitRemoveAbility' are slow (1-5ms).
- Abilities can have null name, icon, tooltips, ...
- 'UnitAddAbility or UnitRemoveAbility' crashes for unused IDs
- BlzGetAbility<string attribute> functions cannot differenciate unused IDs from abilities with default empty value
- BlzSetAbility<string attribute> does not work on custom abilities with field whose value is default empty
- BlzSetAbilityPoxX works even for unused IDs too
*/
local boolean isValid = false
local string testValue = null
// Quick test - get all abilities with an icon
set testValue = BlzGetAbilityIcon(id)
if ( UNSET_ABILITY_ICON_VALUE != testValue ) then
// Enough, this ID is a valid ability
set isValid = true
else
// Slow test - test abilities without icons or unused IDs
set isValid = ( UnitAddAbility(DummyUnit,id) or UnitRemoveAbility(DummyUnit, id) )
endif
return isValid
endmethod
method saveId takes integer index, integer id returns nothing
call RegisterAbilityId(id)
endmethod
/*
803 hardcoded standard abilities, sorted by increasing value
*/
method saveStandardRange takes integer index returns nothing
if ( 1 == index ) then
// After custom 'A' abilities
call RegisterAbilityId('AAns')
call RegisterAbilityId('ACac')
call RegisterAbilityId('ACad')
call RegisterAbilityId('ACah')
call RegisterAbilityId('ACam')
call RegisterAbilityId('ACat')
call RegisterAbilityId('ACav')
call RegisterAbilityId('ACba')
call RegisterAbilityId('ACbb')
call RegisterAbilityId('ACbc')
call RegisterAbilityId('ACbf')
call RegisterAbilityId('ACbh')
call RegisterAbilityId('ACbk')
call RegisterAbilityId('ACbl')
call RegisterAbilityId('ACbn')
call RegisterAbilityId('ACbz')
call RegisterAbilityId('ACc2')
call RegisterAbilityId('ACc3')
call RegisterAbilityId('ACca')
call RegisterAbilityId('ACcb')
call RegisterAbilityId('ACce')
call RegisterAbilityId('ACch')
call RegisterAbilityId('ACcl')
call RegisterAbilityId('ACcn')
call RegisterAbilityId('ACcr')
call RegisterAbilityId('ACcs')
call RegisterAbilityId('ACct')
call RegisterAbilityId('ACcv')
call RegisterAbilityId('ACcw')
call RegisterAbilityId('ACcy')
call RegisterAbilityId('ACd2')
call RegisterAbilityId('ACdc')
call RegisterAbilityId('ACde')
call RegisterAbilityId('ACdm')
call RegisterAbilityId('ACdr')
call RegisterAbilityId('ACds')
call RegisterAbilityId('ACdv')
call RegisterAbilityId('ACen')
call RegisterAbilityId('ACes')
call RegisterAbilityId('ACev')
call RegisterAbilityId('ACf2')
call RegisterAbilityId('ACf3')
call RegisterAbilityId('ACfa')
call RegisterAbilityId('ACfb')
call RegisterAbilityId('ACfd')
call RegisterAbilityId('ACff')
call RegisterAbilityId('ACfl')
call RegisterAbilityId('ACfn')
call RegisterAbilityId('ACfr')
call RegisterAbilityId('ACfs')
call RegisterAbilityId('ACfu')
call RegisterAbilityId('AChv')
call RegisterAbilityId('AChw')
call RegisterAbilityId('AChx')
call RegisterAbilityId('ACif')
call RegisterAbilityId('ACim')
call RegisterAbilityId('ACls')
call RegisterAbilityId('ACm2')
call RegisterAbilityId('ACm3')
call RegisterAbilityId('ACmf')
call RegisterAbilityId('ACmi')
call RegisterAbilityId('ACmo')
call RegisterAbilityId('ACmp')
call RegisterAbilityId('ACnr')
call RegisterAbilityId('ACpa')
call RegisterAbilityId('ACps')
call RegisterAbilityId('ACpu')
call RegisterAbilityId('ACpv')
call RegisterAbilityId('ACpy')
call RegisterAbilityId('ACr1')
call RegisterAbilityId('ACr2')
call RegisterAbilityId('ACrd')
call RegisterAbilityId('ACrf')
call RegisterAbilityId('ACrg')
call RegisterAbilityId('ACrj')
call RegisterAbilityId('ACrk')
call RegisterAbilityId('ACrn')
call RegisterAbilityId('ACro')
call RegisterAbilityId('ACs7')
call RegisterAbilityId('ACs8')
call RegisterAbilityId('ACs9')
call RegisterAbilityId('ACsa')
call RegisterAbilityId('ACsf')
call RegisterAbilityId('ACsh')
call RegisterAbilityId('ACsi')
call RegisterAbilityId('ACsk')
call RegisterAbilityId('ACsl')
call RegisterAbilityId('ACsm')
call RegisterAbilityId('ACsp')
call RegisterAbilityId('ACss')
call RegisterAbilityId('ACst')
call RegisterAbilityId('ACsw')
call RegisterAbilityId('ACt2')
call RegisterAbilityId('ACtb')
call RegisterAbilityId('ACtc')
call RegisterAbilityId('ACtn')
call RegisterAbilityId('ACua')
call RegisterAbilityId('ACuf')
call RegisterAbilityId('ACvp')
call RegisterAbilityId('ACvs')
call RegisterAbilityId('ACwb')
call RegisterAbilityId('ACwe')
call RegisterAbilityId('AEIl')
call RegisterAbilityId('AEah')
call RegisterAbilityId('AEar')
call RegisterAbilityId('AEbl')
call RegisterAbilityId('AEbu')
call RegisterAbilityId('AEer')
call RegisterAbilityId('AEev')
call RegisterAbilityId('AEfk')
call RegisterAbilityId('AEfn')
call RegisterAbilityId('AEim')
call RegisterAbilityId('AEmb')
call RegisterAbilityId('AEme')
call RegisterAbilityId('AEpa')
call RegisterAbilityId('AEsb')
call RegisterAbilityId('AEsf')
call RegisterAbilityId('AEsh')
call RegisterAbilityId('AEst')
call RegisterAbilityId('AEsv')
call RegisterAbilityId('AEtq')
call RegisterAbilityId('AEvi')
call RegisterAbilityId('AGbu')
call RegisterAbilityId('AHab')
call RegisterAbilityId('AHad')
call RegisterAbilityId('AHav')
call RegisterAbilityId('AHbh')
call RegisterAbilityId('AHbn')
call RegisterAbilityId('AHbu')
call RegisterAbilityId('AHbz')
call RegisterAbilityId('AHca')
call RegisterAbilityId('AHdr')
call RegisterAbilityId('AHds')
call RegisterAbilityId('AHer')
call RegisterAbilityId('AHfa')
call RegisterAbilityId('AHfs')
call RegisterAbilityId('AHhb')
call RegisterAbilityId('AHmt')
call RegisterAbilityId('AHpx')
call RegisterAbilityId('AHre')
call RegisterAbilityId('AHta')
call RegisterAbilityId('AHtb')
call RegisterAbilityId('AHtc')
call RegisterAbilityId('AHwe')
call RegisterAbilityId('AI2m')
call RegisterAbilityId('AIa1')
call RegisterAbilityId('AIa3')
call RegisterAbilityId('AIa4')
call RegisterAbilityId('AIa6')
call RegisterAbilityId('AIaa')
call RegisterAbilityId('AIad')
call RegisterAbilityId('AIae')
call RegisterAbilityId('AIam')
call RegisterAbilityId('AIan')
call RegisterAbilityId('AIar')
call RegisterAbilityId('AIat')
call RegisterAbilityId('AIau')
call RegisterAbilityId('AIav')
call RegisterAbilityId('AIaz')
call RegisterAbilityId('AIba')
call RegisterAbilityId('AIbb')
call RegisterAbilityId('AIbf')
call RegisterAbilityId('AIbg')
call RegisterAbilityId('AIbh')
call RegisterAbilityId('AIbk')
call RegisterAbilityId('AIbl')
call RegisterAbilityId('AIbm')
call RegisterAbilityId('AIbr')
call RegisterAbilityId('AIbs')
call RegisterAbilityId('AIbt')
call RegisterAbilityId('AIbx')
call RegisterAbilityId('AIcb')
call RegisterAbilityId('AIcd')
call RegisterAbilityId('AIcf')
call RegisterAbilityId('AIcl')
call RegisterAbilityId('AIcm')
call RegisterAbilityId('AIco')
call RegisterAbilityId('AIcs')
call RegisterAbilityId('AIct')
call RegisterAbilityId('AIcy')
call RegisterAbilityId('AId0')
call RegisterAbilityId('AId1')
call RegisterAbilityId('AId2')
call RegisterAbilityId('AId3')
call RegisterAbilityId('AId4')
call RegisterAbilityId('AId5')
call RegisterAbilityId('AId7')
call RegisterAbilityId('AId8')
call RegisterAbilityId('AIda')
call RegisterAbilityId('AIdb')
call RegisterAbilityId('AIdc')
call RegisterAbilityId('AIdd')
call RegisterAbilityId('AIdf')
call RegisterAbilityId('AIdg')
call RegisterAbilityId('AIdi')
call RegisterAbilityId('AIdm')
call RegisterAbilityId('AIdn')
call RegisterAbilityId('AIdp')
call RegisterAbilityId('AIds')
call RegisterAbilityId('AIdv')
call RegisterAbilityId('AIe2')
call RegisterAbilityId('AIem')
call RegisterAbilityId('AIev')
call RegisterAbilityId('AIfa')
call RegisterAbilityId('AIfb')
call RegisterAbilityId('AIfd')
call RegisterAbilityId('AIfe')
call RegisterAbilityId('AIff')
call RegisterAbilityId('AIfg')
call RegisterAbilityId('AIfh')
call RegisterAbilityId('AIfl')
call RegisterAbilityId('AIfm')
call RegisterAbilityId('AIfn')
call RegisterAbilityId('AIfo')
call RegisterAbilityId('AIfr')
call RegisterAbilityId('AIfs')
call RegisterAbilityId('AIft')
call RegisterAbilityId('AIfu')
call RegisterAbilityId('AIfw')
call RegisterAbilityId('AIfx')
call RegisterAbilityId('AIfz')
call RegisterAbilityId('AIg2')
call RegisterAbilityId('AIgd')
call RegisterAbilityId('AIgf')
call RegisterAbilityId('AIgm')
call RegisterAbilityId('AIgo')
call RegisterAbilityId('AIgu')
call RegisterAbilityId('AIgx')
call RegisterAbilityId('AIh1')
call RegisterAbilityId('AIh2')
call RegisterAbilityId('AIh3')
call RegisterAbilityId('AIha')
call RegisterAbilityId('AIhb')
call RegisterAbilityId('AIhl')
call RegisterAbilityId('AIhm')
call RegisterAbilityId('AIhw')
call RegisterAbilityId('AIhx')
call RegisterAbilityId('AIi1')
call RegisterAbilityId('AIi3')
call RegisterAbilityId('AIi4')
call RegisterAbilityId('AIi6')
call RegisterAbilityId('AIil')
call RegisterAbilityId('AIim')
call RegisterAbilityId('AIin')
call RegisterAbilityId('AIir')
call RegisterAbilityId('AIl1')
call RegisterAbilityId('AIl2')
call RegisterAbilityId('AIlb')
call RegisterAbilityId('AIlf')
call RegisterAbilityId('AIll')
call RegisterAbilityId('AIlm')
call RegisterAbilityId('AIlp')
call RegisterAbilityId('AIls')
call RegisterAbilityId('AIlu')
call RegisterAbilityId('AIlx')
call RegisterAbilityId('AIlz')
call RegisterAbilityId('AIm1')
call RegisterAbilityId('AIm2')
call RegisterAbilityId('AImb')
call RegisterAbilityId('AImh')
call RegisterAbilityId('AImo')
call RegisterAbilityId('AImr')
call RegisterAbilityId('AIms')
call RegisterAbilityId('AImt')
call RegisterAbilityId('AImv')
call RegisterAbilityId('AImx')
call RegisterAbilityId('AImz')
call RegisterAbilityId('AInd')
call RegisterAbilityId('AInm')
call RegisterAbilityId('AInv')
call RegisterAbilityId('AIob')
call RegisterAbilityId('AIos')
call RegisterAbilityId('AIp1')
call RegisterAbilityId('AIp2')
call RegisterAbilityId('AIp3')
call RegisterAbilityId('AIp4')
call RegisterAbilityId('AIp5')
call RegisterAbilityId('AIp6')
call RegisterAbilityId('AIpb')
call RegisterAbilityId('AIpg')
call RegisterAbilityId('AIpl')
call RegisterAbilityId('AIpm')
call RegisterAbilityId('AIpr')
call RegisterAbilityId('AIps')
call RegisterAbilityId('AIpv')
call RegisterAbilityId('AIpx')
call RegisterAbilityId('AIpz')
call RegisterAbilityId('AIra')
call RegisterAbilityId('AIrb')
call RegisterAbilityId('AIrc')
call RegisterAbilityId('AIrd')
call RegisterAbilityId('AIre')
call RegisterAbilityId('AIri')
call RegisterAbilityId('AIrl')
call RegisterAbilityId('AIrm')
call RegisterAbilityId('AIrn')
call RegisterAbilityId('AIrr')
call RegisterAbilityId('AIrs')
call RegisterAbilityId('AIrt')
call RegisterAbilityId('AIrv')
call RegisterAbilityId('AIrx')
call RegisterAbilityId('AIs1')
call RegisterAbilityId('AIs2')
call RegisterAbilityId('AIs3')
call RegisterAbilityId('AIs4')
call RegisterAbilityId('AIs6')
call RegisterAbilityId('AIsa')
call RegisterAbilityId('AIsb')
call RegisterAbilityId('AIse')
call RegisterAbilityId('AIsh')
call RegisterAbilityId('AIsi')
call RegisterAbilityId('AIsl')
call RegisterAbilityId('AIsm')
call RegisterAbilityId('AIso')
call RegisterAbilityId('AIsp')
call RegisterAbilityId('AIsr')
call RegisterAbilityId('AIsw')
call RegisterAbilityId('AIsx')
call RegisterAbilityId('AIsz')
call RegisterAbilityId('AIt6')
call RegisterAbilityId('AIt9')
call RegisterAbilityId('AIta')
call RegisterAbilityId('AItb')
call RegisterAbilityId('AItc')
call RegisterAbilityId('AItf')
call RegisterAbilityId('AItg')
call RegisterAbilityId('AIth')
call RegisterAbilityId('AIti')
call RegisterAbilityId('AItj')
call RegisterAbilityId('AItk')
call RegisterAbilityId('AItl')
call RegisterAbilityId('AItm')
call RegisterAbilityId('AItn')
call RegisterAbilityId('AItp')
call RegisterAbilityId('AItx')
call RegisterAbilityId('AIuf')
call RegisterAbilityId('AIuv')
call RegisterAbilityId('AIuw')
call RegisterAbilityId('AIv1')
call RegisterAbilityId('AIv2')
call RegisterAbilityId('AIva')
call RegisterAbilityId('AIvl')
call RegisterAbilityId('AIvu')
call RegisterAbilityId('AIwb')
call RegisterAbilityId('AIwd')
call RegisterAbilityId('AIwm')
call RegisterAbilityId('AIx1')
call RegisterAbilityId('AIx2')
call RegisterAbilityId('AIx3')
call RegisterAbilityId('AIx4')
call RegisterAbilityId('AIx5')
call RegisterAbilityId('AIxk')
call RegisterAbilityId('AIxm')
call RegisterAbilityId('AIxs')
call RegisterAbilityId('AIzb')
call RegisterAbilityId('ANab')
call RegisterAbilityId('ANak')
call RegisterAbilityId('ANav')
call RegisterAbilityId('ANb2')
call RegisterAbilityId('ANba')
call RegisterAbilityId('ANbf')
call RegisterAbilityId('ANbh')
call RegisterAbilityId('ANbl')
call RegisterAbilityId('ANbr')
call RegisterAbilityId('ANbs')
call RegisterAbilityId('ANbu')
call RegisterAbilityId('ANc1')
call RegisterAbilityId('ANc2')
call RegisterAbilityId('ANc3')
call RegisterAbilityId('ANca')
call RegisterAbilityId('ANcf')
call RegisterAbilityId('ANch')
call RegisterAbilityId('ANcl')
call RegisterAbilityId('ANcr')
call RegisterAbilityId('ANcs')
call RegisterAbilityId('ANd1')
call RegisterAbilityId('ANd2')
call RegisterAbilityId('ANd3')
call RegisterAbilityId('ANdb')
call RegisterAbilityId('ANdc')
call RegisterAbilityId('ANde')
call RegisterAbilityId('ANdh')
call RegisterAbilityId('ANdo')
call RegisterAbilityId('ANdp')
call RegisterAbilityId('ANdr')
call RegisterAbilityId('ANef')
call RegisterAbilityId('ANeg')
call RegisterAbilityId('ANen')
call RegisterAbilityId('ANfa')
call RegisterAbilityId('ANfb')
call RegisterAbilityId('ANfd')
call RegisterAbilityId('ANfl')
call RegisterAbilityId('ANfs')
call RegisterAbilityId('ANfy')
call RegisterAbilityId('ANg1')
call RegisterAbilityId('ANg2')
call RegisterAbilityId('ANg3')
call RegisterAbilityId('ANha')
call RegisterAbilityId('ANhs')
call RegisterAbilityId('ANht')
call RegisterAbilityId('ANhw')
call RegisterAbilityId('ANhx')
call RegisterAbilityId('ANia')
call RegisterAbilityId('ANic')
call RegisterAbilityId('ANin')
call RegisterAbilityId('ANlm')
call RegisterAbilityId('ANmo')
call RegisterAbilityId('ANmr')
call RegisterAbilityId('ANms')
call RegisterAbilityId('ANpa')
call RegisterAbilityId('ANpi')
call RegisterAbilityId('ANpr')
call RegisterAbilityId('ANr2')
call RegisterAbilityId('ANr3')
call RegisterAbilityId('ANrc')
call RegisterAbilityId('ANre')
call RegisterAbilityId('ANrf')
call RegisterAbilityId('ANrg')
call RegisterAbilityId('ANrn')
call RegisterAbilityId('ANs1')
call RegisterAbilityId('ANs2')
call RegisterAbilityId('ANs3')
call RegisterAbilityId('ANsa')
call RegisterAbilityId('ANsb')
call RegisterAbilityId('ANse')
call RegisterAbilityId('ANsg')
call RegisterAbilityId('ANsh')
call RegisterAbilityId('ANsi')
call RegisterAbilityId('ANsl')
call RegisterAbilityId('ANso')
call RegisterAbilityId('ANsq')
call RegisterAbilityId('ANss')
call RegisterAbilityId('ANst')
call RegisterAbilityId('ANsw')
call RegisterAbilityId('ANsy')
call RegisterAbilityId('ANt2')
call RegisterAbilityId('ANta')
call RegisterAbilityId('ANth')
call RegisterAbilityId('ANtm')
call RegisterAbilityId('ANto')
call RegisterAbilityId('ANtr')
call RegisterAbilityId('ANvc')
call RegisterAbilityId('ANwk')
call RegisterAbilityId('ANwm')
call RegisterAbilityId('AOae')
call RegisterAbilityId('AObu')
call RegisterAbilityId('AOcl')
call RegisterAbilityId('AOcr')
call RegisterAbilityId('AOeq')
call RegisterAbilityId('AOfs')
call RegisterAbilityId('AOhw')
call RegisterAbilityId('AOhx')
call RegisterAbilityId('AOls')
call RegisterAbilityId('AOmi')
call RegisterAbilityId('AOr2')
call RegisterAbilityId('AOr3')
call RegisterAbilityId('AOre')
call RegisterAbilityId('AOs2')
call RegisterAbilityId('AOsf')
call RegisterAbilityId('AOsh')
call RegisterAbilityId('AOsw')
call RegisterAbilityId('AOvd')
call RegisterAbilityId('AOw2')
call RegisterAbilityId('AOwk')
call RegisterAbilityId('AOws')
call RegisterAbilityId('AOww')
call RegisterAbilityId('APdi')
call RegisterAbilityId('APh1')
call RegisterAbilityId('APh2')
call RegisterAbilityId('APh3')
call RegisterAbilityId('APmg')
call RegisterAbilityId('APmr')
call RegisterAbilityId('APra')
call RegisterAbilityId('APrl')
call RegisterAbilityId('APrr')
call RegisterAbilityId('APsa')
call RegisterAbilityId('APwt')
call RegisterAbilityId('ARal')
call RegisterAbilityId('AUan')
call RegisterAbilityId('AUau')
call RegisterAbilityId('AUav')
call RegisterAbilityId('AUbu')
call RegisterAbilityId('AUcb')
call RegisterAbilityId('AUcs')
call RegisterAbilityId('AUdc')
call RegisterAbilityId('AUdd')
call RegisterAbilityId('AUdp')
call RegisterAbilityId('AUdr')
call RegisterAbilityId('AUds')
call RegisterAbilityId('AUfa')
call RegisterAbilityId('AUfn')
call RegisterAbilityId('AUfu')
call RegisterAbilityId('AUim')
call RegisterAbilityId('AUin')
call RegisterAbilityId('AUls')
call RegisterAbilityId('AUsl')
call RegisterAbilityId('AUts')
call RegisterAbilityId('Aabr')
call RegisterAbilityId('Aabs')
call RegisterAbilityId('Aadm')
call RegisterAbilityId('Aaha')
call RegisterAbilityId('Aakb')
call RegisterAbilityId('Aall')
call RegisterAbilityId('Aalr')
call RegisterAbilityId('Aam2')
call RegisterAbilityId('Aamk')
call RegisterAbilityId('Aams')
call RegisterAbilityId('Aap1')
call RegisterAbilityId('Aap2')
call RegisterAbilityId('Aap3')
call RegisterAbilityId('Aap4')
call RegisterAbilityId('Aasl')
call RegisterAbilityId('Aast')
call RegisterAbilityId('Aatk')
call RegisterAbilityId('Aave')
call RegisterAbilityId('Aawa')
call RegisterAbilityId('Abdl')
call RegisterAbilityId('Abds')
call RegisterAbilityId('Abdt')
call RegisterAbilityId('Abgl')
call RegisterAbilityId('Abgm')
call RegisterAbilityId('Abgs')
call RegisterAbilityId('Ablo')
call RegisterAbilityId('Ablp')
call RegisterAbilityId('Abof')
call RegisterAbilityId('Abrf')
call RegisterAbilityId('Absk')
call RegisterAbilityId('Abtl')
call RegisterAbilityId('Abu2')
call RegisterAbilityId('Abu3')
call RegisterAbilityId('Abu5')
call RegisterAbilityId('Abun')
call RegisterAbilityId('Abur')
call RegisterAbilityId('Acan')
call RegisterAbilityId('Acdb')
call RegisterAbilityId('Acdh')
call RegisterAbilityId('Acef')
call RegisterAbilityId('Achd')
call RegisterAbilityId('Ache')
call RegisterAbilityId('Achl')
call RegisterAbilityId('Acht')
call RegisterAbilityId('Aclf')
call RegisterAbilityId('Acmg')
call RegisterAbilityId('Acn2')
call RegisterAbilityId('Acny')
call RegisterAbilityId('Aco2')
call RegisterAbilityId('Aco3')
call RegisterAbilityId('Acoa')
call RegisterAbilityId('Acoh')
call RegisterAbilityId('Acor')
call RegisterAbilityId('Acpf')
call RegisterAbilityId('Acri')
call RegisterAbilityId('Acrs')
call RegisterAbilityId('Acyc')
call RegisterAbilityId('Adch')
call RegisterAbilityId('Adcn')
call RegisterAbilityId('Adda')
call RegisterAbilityId('Adec')
call RegisterAbilityId('Adef')
call RegisterAbilityId('Adev')
call RegisterAbilityId('Adis')
call RegisterAbilityId('Adri')
call RegisterAbilityId('Adro')
call RegisterAbilityId('Adsm')
call RegisterAbilityId('Adt1')
call RegisterAbilityId('Adtg')
call RegisterAbilityId('Adtn')
call RegisterAbilityId('Adts')
call RegisterAbilityId('Advc')
call RegisterAbilityId('Advm')
call RegisterAbilityId('Aeat')
call RegisterAbilityId('Aegm')
call RegisterAbilityId('Aegr')
call RegisterAbilityId('Aenc')
call RegisterAbilityId('Aenr')
call RegisterAbilityId('Aens')
call RegisterAbilityId('Aent')
call RegisterAbilityId('Aenw')
call RegisterAbilityId('Aesn')
call RegisterAbilityId('Aesr')
call RegisterAbilityId('Aetf')
call RegisterAbilityId('Aeth')
call RegisterAbilityId('Aetl')
call RegisterAbilityId('Aexh')
call RegisterAbilityId('Aeye')
call RegisterAbilityId('Afa2')
call RegisterAbilityId('Afae')
call RegisterAbilityId('Afak')
call RegisterAbilityId('Afbb')
call RegisterAbilityId('Afbk')
call RegisterAbilityId('Afbt')
call RegisterAbilityId('Afih')
call RegisterAbilityId('Afin')
call RegisterAbilityId('Afio')
call RegisterAbilityId('Afir')
call RegisterAbilityId('Afiu')
call RegisterAbilityId('Afla')
call RegisterAbilityId('Aflk')
call RegisterAbilityId('Afod')
call RegisterAbilityId('Afr2')
call RegisterAbilityId('Afra')
call RegisterAbilityId('Afrb')
call RegisterAbilityId('Afrz')
call RegisterAbilityId('Afsh')
call RegisterAbilityId('Afzy')
call RegisterAbilityId('Agho')
call RegisterAbilityId('Agld')
call RegisterAbilityId('Agra')
call RegisterAbilityId('Agyb')
call RegisterAbilityId('Agyd')
call RegisterAbilityId('Agyv')
call RegisterAbilityId('Ahar')
call RegisterAbilityId('Ahea')
call RegisterAbilityId('Ahid')
call RegisterAbilityId('Ahnl')
call RegisterAbilityId('Ahr2')
call RegisterAbilityId('Ahr3')
call RegisterAbilityId('Ahrl')
call RegisterAbilityId('Ahrp')
call RegisterAbilityId('Ahwd')
call RegisterAbilityId('Aien')
call RegisterAbilityId('Aihn')
call RegisterAbilityId('Aimp')
call RegisterAbilityId('Ainf')
call RegisterAbilityId('Aion')
call RegisterAbilityId('Aiun')
call RegisterAbilityId('Aivs')
call RegisterAbilityId('Alam')
call RegisterAbilityId('Aliq')
call RegisterAbilityId('Alit')
call RegisterAbilityId('Aloa')
call RegisterAbilityId('Aloc')
call RegisterAbilityId('Alsh')
call RegisterAbilityId('Amb2')
call RegisterAbilityId('Ambb')
call RegisterAbilityId('Ambd')
call RegisterAbilityId('Ambt')
call RegisterAbilityId('Amdf')
call RegisterAbilityId('Amec')
call RegisterAbilityId('Amed')
call RegisterAbilityId('Amel')
call RegisterAbilityId('Amfl')
call RegisterAbilityId('Amgl')
call RegisterAbilityId('Amgr')
call RegisterAbilityId('Amic')
call RegisterAbilityId('Amil')
call RegisterAbilityId('Amim')
call RegisterAbilityId('Amin')
call RegisterAbilityId('Amls')
call RegisterAbilityId('Amnb')
call RegisterAbilityId('Amnx')
call RegisterAbilityId('Amnz')
call RegisterAbilityId('Amov')
call RegisterAbilityId('Amrf')
call RegisterAbilityId('Andm')
call RegisterAbilityId('Andt')
call RegisterAbilityId('Ane2')
call RegisterAbilityId('Aneu')
call RegisterAbilityId('Anh1')
call RegisterAbilityId('Anh2')
call RegisterAbilityId('Anhe')
call RegisterAbilityId('Ansk')
call RegisterAbilityId('Ansp')
call RegisterAbilityId('Aoar')
call RegisterAbilityId('Apak')
call RegisterAbilityId('Apg2')
call RegisterAbilityId('Aphx')
call RegisterAbilityId('Apig')
call RegisterAbilityId('Apit')
call RegisterAbilityId('Apiv')
call RegisterAbilityId('Aply')
call RegisterAbilityId('Apmf')
call RegisterAbilityId('Apo2')
call RegisterAbilityId('Apoi')
call RegisterAbilityId('Apos')
call RegisterAbilityId('Aprg')
call RegisterAbilityId('Aps2')
call RegisterAbilityId('Apsh')
call RegisterAbilityId('Apts')
call RegisterAbilityId('Apxf')
call RegisterAbilityId('Ara2')
call RegisterAbilityId('Arai')
call RegisterAbilityId('Arav')
call RegisterAbilityId('Arbr')
call RegisterAbilityId('Arej')
call RegisterAbilityId('Arel')
call RegisterAbilityId('Aren')
call RegisterAbilityId('Arep')
call RegisterAbilityId('Aret')
call RegisterAbilityId('Arev')
call RegisterAbilityId('Argd')
call RegisterAbilityId('Argl')
call RegisterAbilityId('Arll')
call RegisterAbilityId('Arlm')
call RegisterAbilityId('Arng')
call RegisterAbilityId('Aro1')
call RegisterAbilityId('Aro2')
call RegisterAbilityId('Aroa')
call RegisterAbilityId('Aroc')
call RegisterAbilityId('Arpb')
call RegisterAbilityId('Arpl')
call RegisterAbilityId('Arpm')
call RegisterAbilityId('Arsg')
call RegisterAbilityId('Arsk')
call RegisterAbilityId('Arsp')
call RegisterAbilityId('Arsq')
call RegisterAbilityId('Arst')
call RegisterAbilityId('Arsw')
call RegisterAbilityId('Asac')
call RegisterAbilityId('Asal')
call RegisterAbilityId('Asb1')
call RegisterAbilityId('Asb2')
call RegisterAbilityId('Asb3')
call RegisterAbilityId('Asd2')
call RegisterAbilityId('Asd3')
call RegisterAbilityId('Asdg')
call RegisterAbilityId('Asds')
call RegisterAbilityId('Ashm')
call RegisterAbilityId('Ashs')
call RegisterAbilityId('Asid')
call RegisterAbilityId('Asla')
call RegisterAbilityId('Aslo')
call RegisterAbilityId('Aslp')
call RegisterAbilityId('Asod')
call RegisterAbilityId('Asou')
call RegisterAbilityId('Asp1')
call RegisterAbilityId('Asp2')
call RegisterAbilityId('Asp3')
call RegisterAbilityId('Asp4')
call RegisterAbilityId('Asp5')
call RegisterAbilityId('Asp6')
call RegisterAbilityId('Aspa')
call RegisterAbilityId('Aspb')
call RegisterAbilityId('Aspd')
call RegisterAbilityId('Asph')
call RegisterAbilityId('Aspi')
call RegisterAbilityId('Aspl')
call RegisterAbilityId('Aspo')
call RegisterAbilityId('Aspp')
call RegisterAbilityId('Asps')
call RegisterAbilityId('Aspt')
call RegisterAbilityId('Aspy')
call RegisterAbilityId('Assk')
call RegisterAbilityId('Assp')
call RegisterAbilityId('Asta')
call RegisterAbilityId('Astd')
call RegisterAbilityId('Aste')
call RegisterAbilityId('Asth')
call RegisterAbilityId('Astn')
call RegisterAbilityId('Asud')
call RegisterAbilityId('Atau')
call RegisterAbilityId('Atdg')
call RegisterAbilityId('Atdp')
call RegisterAbilityId('Atlp')
call RegisterAbilityId('Atol')
call RegisterAbilityId('Atru')
call RegisterAbilityId('Atsp')
call RegisterAbilityId('Attu')
call RegisterAbilityId('Atwa')
call RegisterAbilityId('Auco')
call RegisterAbilityId('Auhf')
call RegisterAbilityId('Ault')
call RegisterAbilityId('Auns')
call RegisterAbilityId('Aven')
call RegisterAbilityId('Avng')
call RegisterAbilityId('Avul')
call RegisterAbilityId('Awan')
call RegisterAbilityId('Awar')
call RegisterAbilityId('Aweb')
call RegisterAbilityId('Awfb')
call RegisterAbilityId('Awh2')
call RegisterAbilityId('Awha')
call RegisterAbilityId('Awrg')
call RegisterAbilityId('Awrh')
call RegisterAbilityId('Awrp')
call RegisterAbilityId('Awrs')
elseif ( 2 == index ) then
// After custom 'S' abilities
call RegisterAbilityId('SCae')
call RegisterAbilityId('SCc1')
call RegisterAbilityId('SCva')
call RegisterAbilityId('SNdc')
call RegisterAbilityId('SNdd')
call RegisterAbilityId('SNeq')
call RegisterAbilityId('SNin')
call RegisterAbilityId('Sbsk')
call RegisterAbilityId('Sbtl')
call RegisterAbilityId('Sca1')
call RegisterAbilityId('Sca2')
call RegisterAbilityId('Sca3')
call RegisterAbilityId('Sca4')
call RegisterAbilityId('Sca5')
call RegisterAbilityId('Sca6')
call RegisterAbilityId('Sch2')
call RegisterAbilityId('Sch3')
call RegisterAbilityId('Sch4')
call RegisterAbilityId('Sch5')
call RegisterAbilityId('Scri')
call RegisterAbilityId('Sdro')
call RegisterAbilityId('Slo2')
call RegisterAbilityId('Slo3')
call RegisterAbilityId('Sloa')
call RegisterAbilityId('Srtt')
call RegisterAbilityId('Sshm')
call RegisterAbilityId('Suhf')
endif
endmethod
method onStart takes nothing returns nothing
set DummyUnit = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), DUMMY_UNIT_ID, 0, 0, 0)
set scanRangePrefixes = "AS"
endmethod
method onEnd takes nothing returns nothing
local staticIdList abilities = GetAllAbilityIds()
call BJDebugMsg( "AbilityIdScanner - Total ids: " + I2S( abilities.size() ) + " (" + I2S(succeedCounter) + " customs)" )
call RemoveUnit(DummyUnit)
endmethod
endstruct
endlibrary
BuffIdScanner
JASS:
/*
BuffIdScanner lib v1.0.0 (21/10/2019) by Ricola3D
Content:
Id scanner for World Editor buffs.
*/
library BuffIdScanner requires IdScanner
//! runtextmacro DECL_NEW_SCANNER_TYPE ("BuffIdScanner")
/*
*/
struct BuffIdScanner extends AbstractIdScanner
method saveId takes integer index, integer id returns nothing
call RegisterBuffId(id)
endmethod
/*
239 hardcoded standard Buffs, sorted by increasing value
*/
method saveStandardRange takes integer index returns nothing
if ( 0 == index ) then
// Before custom 'B' abilities
call RegisterBuffId('AEsd')
call RegisterBuffId('AEtr')
call RegisterBuffId('ANmd')
elseif ( 1 == index ) then
// Between custom 'B' and 'X' abilities
call RegisterBuffId('BCbf')
call RegisterBuffId('BCtc')
call RegisterBuffId('BEah')
call RegisterBuffId('BEar')
call RegisterBuffId('BEer')
call RegisterBuffId('BEfn')
call RegisterBuffId('BEia')
call RegisterBuffId('BEim')
call RegisterBuffId('BEme')
call RegisterBuffId('BEsh')
call RegisterBuffId('BEst')
call RegisterBuffId('BEsv')
call RegisterBuffId('BFig')
call RegisterBuffId('BHab')
call RegisterBuffId('BHad')
call RegisterBuffId('BHav')
call RegisterBuffId('BHbd')
call RegisterBuffId('BHbn')
call RegisterBuffId('BHbz')
call RegisterBuffId('BHca')
call RegisterBuffId('BHds')
call RegisterBuffId('BHfs')
call RegisterBuffId('BHtc')
call RegisterBuffId('BHwe')
call RegisterBuffId('BIcb')
call RegisterBuffId('BIcf')
call RegisterBuffId('BIhm')
call RegisterBuffId('BIil')
call RegisterBuffId('BImo')
call RegisterBuffId('BIpv')
call RegisterBuffId('BIrb')
call RegisterBuffId('BIrg')
call RegisterBuffId('BIrl')
call RegisterBuffId('BIrm')
call RegisterBuffId('BIsh')
call RegisterBuffId('BIsv')
call RegisterBuffId('BIwb')
call RegisterBuffId('BNab')
call RegisterBuffId('BNba')
call RegisterBuffId('BNbf')
call RegisterBuffId('BNbr')
call RegisterBuffId('BNcg')
call RegisterBuffId('BNcr')
call RegisterBuffId('BNcs')
call RegisterBuffId('BNdc')
call RegisterBuffId('BNdh')
call RegisterBuffId('BNdi')
call RegisterBuffId('BNdm')
call RegisterBuffId('BNdo')
call RegisterBuffId('BNef')
call RegisterBuffId('BNeg')
call RegisterBuffId('BNfy')
call RegisterBuffId('BNhs')
call RegisterBuffId('BNht')
call RegisterBuffId('BNic')
call RegisterBuffId('BNin')
call RegisterBuffId('BNlm')
call RegisterBuffId('BNmr')
call RegisterBuffId('BNms')
call RegisterBuffId('BNpa')
call RegisterBuffId('BNpi')
call RegisterBuffId('BNpm')
call RegisterBuffId('BNrd')
call RegisterBuffId('BNrf')
call RegisterBuffId('BNsa')
call RegisterBuffId('BNsg')
call RegisterBuffId('BNsi')
call RegisterBuffId('BNsl')
call RegisterBuffId('BNso')
call RegisterBuffId('BNsq')
call RegisterBuffId('BNss')
call RegisterBuffId('BNst')
call RegisterBuffId('BNsw')
call RegisterBuffId('BNtm')
call RegisterBuffId('BNto')
call RegisterBuffId('BNva')
call RegisterBuffId('BNvc')
call RegisterBuffId('BNwm')
call RegisterBuffId('BOac')
call RegisterBuffId('BOae')
call RegisterBuffId('BOea')
call RegisterBuffId('BOeq')
call RegisterBuffId('BOhx')
call RegisterBuffId('BOmi')
call RegisterBuffId('BOsf')
call RegisterBuffId('BOsh')
call RegisterBuffId('BOvc')
call RegisterBuffId('BOvd')
call RegisterBuffId('BOwd')
call RegisterBuffId('BOwk')
call RegisterBuffId('BOww')
call RegisterBuffId('BPSE')
call RegisterBuffId('BSTN')
call RegisterBuffId('BUad')
call RegisterBuffId('BUan')
call RegisterBuffId('BUau')
call RegisterBuffId('BUav')
call RegisterBuffId('BUcb')
call RegisterBuffId('BUcs')
call RegisterBuffId('BUdd')
call RegisterBuffId('BUfa')
call RegisterBuffId('BUim')
call RegisterBuffId('BUsl')
call RegisterBuffId('BUsp')
call RegisterBuffId('BUst')
call RegisterBuffId('BUts')
call RegisterBuffId('Babr')
call RegisterBuffId('Bakb')
call RegisterBuffId('Bam2')
call RegisterBuffId('Bams')
call RegisterBuffId('Bapl')
call RegisterBuffId('Barm')
call RegisterBuffId('Basl')
call RegisterBuffId('Bbar')
call RegisterBuffId('Bblo')
call RegisterBuffId('Bbof')
call RegisterBuffId('Bbsk')
call RegisterBuffId('Bchd')
call RegisterBuffId('Bclf')
call RegisterBuffId('Bcmg')
call RegisterBuffId('Bcor')
call RegisterBuffId('Bcri')
call RegisterBuffId('Bcrs')
call RegisterBuffId('Bcsd')
call RegisterBuffId('Bcsi')
call RegisterBuffId('Bcy2')
call RegisterBuffId('Bcyc')
call RegisterBuffId('Bdcb')
call RegisterBuffId('Bdcl')
call RegisterBuffId('Bdcm')
call RegisterBuffId('Bdef')
call RegisterBuffId('Bdet')
call RegisterBuffId('Bdig')
call RegisterBuffId('Bdtb')
call RegisterBuffId('Bdtl')
call RegisterBuffId('Bdtm')
call RegisterBuffId('Bdvv')
call RegisterBuffId('Beat')
call RegisterBuffId('Bena')
call RegisterBuffId('Beng')
call RegisterBuffId('Bens')
call RegisterBuffId('Beye')
call RegisterBuffId('Bfae')
call RegisterBuffId('Bfre')
call RegisterBuffId('Bfro')
call RegisterBuffId('Bfrz')
call RegisterBuffId('Bfzy')
call RegisterBuffId('Bgra')
call RegisterBuffId('Bhea')
call RegisterBuffId('Bhwd')
call RegisterBuffId('Binf')
call RegisterBuffId('Binv')
call RegisterBuffId('Bivs')
call RegisterBuffId('Bliq')
call RegisterBuffId('Blsa')
call RegisterBuffId('Blsh')
call RegisterBuffId('Bmec')
call RegisterBuffId('Bmfa')
call RegisterBuffId('Bmfl')
call RegisterBuffId('Bmil')
call RegisterBuffId('Bmlc')
call RegisterBuffId('Bmlt')
call RegisterBuffId('Boar')
call RegisterBuffId('Bphx')
call RegisterBuffId('Bpig')
call RegisterBuffId('Bplg')
call RegisterBuffId('Bply')
call RegisterBuffId('Bpoc')
call RegisterBuffId('Bpoi')
call RegisterBuffId('Bpos')
call RegisterBuffId('Bprg')
call RegisterBuffId('Bps1')
call RegisterBuffId('Bpsd')
call RegisterBuffId('Bpsh')
call RegisterBuffId('Bpsi')
call RegisterBuffId('Bpxf')
call RegisterBuffId('Brai')
call RegisterBuffId('Brej')
call RegisterBuffId('Broa')
call RegisterBuffId('Brpb')
call RegisterBuffId('Brpl')
call RegisterBuffId('Brpm')
call RegisterBuffId('Bsha')
call RegisterBuffId('Bshs')
call RegisterBuffId('Bslo')
call RegisterBuffId('Bspa')
call RegisterBuffId('Bspe')
call RegisterBuffId('Bspl')
call RegisterBuffId('Bspo')
call RegisterBuffId('Bssd')
call RegisterBuffId('Bssi')
call RegisterBuffId('Bstt')
call RegisterBuffId('Btdg')
call RegisterBuffId('Btrv')
call RegisterBuffId('Btsa')
call RegisterBuffId('Btsp')
call RegisterBuffId('Buhf')
call RegisterBuffId('Bult')
call RegisterBuffId('Buns')
call RegisterBuffId('Bvng')
call RegisterBuffId('Bvul')
call RegisterBuffId('Bwea')
call RegisterBuffId('Bweb')
elseif ( 2 == index ) then
// After custom 'X' abilities
call RegisterBuffId('XErc')
call RegisterBuffId('XErf')
call RegisterBuffId('XEsf')
call RegisterBuffId('XEtq')
call RegisterBuffId('XHbz')
call RegisterBuffId('XHfs')
call RegisterBuffId('XIct')
call RegisterBuffId('XNcs')
call RegisterBuffId('XNhs')
call RegisterBuffId('XNmo')
call RegisterBuffId('XNvc')
call RegisterBuffId('XOeq')
call RegisterBuffId('XOre')
call RegisterBuffId('XUdd')
call RegisterBuffId('Xbdt')
call RegisterBuffId('Xbli')
call RegisterBuffId('Xbof')
call RegisterBuffId('Xclf')
call RegisterBuffId('Xdis')
call RegisterBuffId('Xesn')
call RegisterBuffId('Xfhl')
call RegisterBuffId('Xfhm')
call RegisterBuffId('Xfhs')
call RegisterBuffId('Xfla')
call RegisterBuffId('Xfnl')
call RegisterBuffId('Xfnm')
call RegisterBuffId('Xfns')
call RegisterBuffId('Xfol')
call RegisterBuffId('Xfom')
call RegisterBuffId('Xfos')
call RegisterBuffId('Xful')
call RegisterBuffId('Xfum')
call RegisterBuffId('Xfus')
endif
endmethod
method onStart takes nothing returns nothing
set scanRangePrefixes = "BX"
endmethod
method onEnd takes nothing returns nothing
local staticIdList Buffs = GetAllBuffIds()
call BJDebugMsg( "BuffIdScanner - Total ids: " + I2S( Buffs.size() ) + " (" + I2S(succeedCounter) + " customs)" )
endmethod
endstruct
endlibrary
UpgradeIdScanner
JASS:
/*
UpgradeIdScanner lib v1.0.0 (21/10/2019) by Ricola3D
Content:
Id scanner for World Editor upgrades.
*/
library UpgradeIdScanner requires IdScanner
//! runtextmacro DECL_NEW_SCANNER_TYPE ("UpgradeIdScanner")
/*
*/
struct UpgradeIdScanner extends AbstractIdScanner
method saveId takes integer index, integer id returns nothing
call RegisterUpgradeId(id)
endmethod
/*
90 hardcoded standard Upgrades, sorted by increasing value
*/
method saveStandardRange takes integer index returns nothing
if ( 1 == index ) then
// After custom 'R' abilities
call RegisterUpgradeId('Recb')
call RegisterUpgradeId('Redc')
call RegisterUpgradeId('Redt')
call RegisterUpgradeId('Reeb')
call RegisterUpgradeId('Reec')
call RegisterUpgradeId('Rehs')
call RegisterUpgradeId('Reht')
call RegisterUpgradeId('Reib')
call RegisterUpgradeId('Rema')
call RegisterUpgradeId('Remg')
call RegisterUpgradeId('Remk')
call RegisterUpgradeId('Renb')
call RegisterUpgradeId('Repb')
call RegisterUpgradeId('Repm')
call RegisterUpgradeId('Rerh')
call RegisterUpgradeId('Rers')
call RegisterUpgradeId('Resc')
call RegisterUpgradeId('Resi')
call RegisterUpgradeId('Resm')
call RegisterUpgradeId('Resw')
call RegisterUpgradeId('Reuv')
call RegisterUpgradeId('Rews')
call RegisterUpgradeId('Rgfo')
call RegisterUpgradeId('Rguv')
call RegisterUpgradeId('Rhac')
call RegisterUpgradeId('Rhan')
call RegisterUpgradeId('Rhar')
call RegisterUpgradeId('Rhcd')
call RegisterUpgradeId('Rhde')
call RegisterUpgradeId('Rhfc')
call RegisterUpgradeId('Rhfl')
call RegisterUpgradeId('Rhfs')
call RegisterUpgradeId('Rhgb')
call RegisterUpgradeId('Rhhb')
call RegisterUpgradeId('Rhla')
call RegisterUpgradeId('Rhlh')
call RegisterUpgradeId('Rhme')
call RegisterUpgradeId('Rhpm')
call RegisterUpgradeId('Rhpt')
call RegisterUpgradeId('Rhra')
call RegisterUpgradeId('Rhri')
call RegisterUpgradeId('Rhrt')
call RegisterUpgradeId('Rhsb')
call RegisterUpgradeId('Rhse')
call RegisterUpgradeId('Rhss')
call RegisterUpgradeId('Rhst')
call RegisterUpgradeId('Rnam')
call RegisterUpgradeId('Rnat')
call RegisterUpgradeId('Rnen')
call RegisterUpgradeId('Rnsb')
call RegisterUpgradeId('Rnsi')
call RegisterUpgradeId('Rnsw')
call RegisterUpgradeId('Roar')
call RegisterUpgradeId('Robf')
call RegisterUpgradeId('Robk')
call RegisterUpgradeId('Robs')
call RegisterUpgradeId('Roch')
call RegisterUpgradeId('Roen')
call RegisterUpgradeId('Rolf')
call RegisterUpgradeId('Rome')
call RegisterUpgradeId('Ropg')
call RegisterUpgradeId('Ropm')
call RegisterUpgradeId('Rora')
call RegisterUpgradeId('Rorb')
call RegisterUpgradeId('Rosp')
call RegisterUpgradeId('Rost')
call RegisterUpgradeId('Rotr')
call RegisterUpgradeId('Rovs')
call RegisterUpgradeId('Rowd')
call RegisterUpgradeId('Rows')
call RegisterUpgradeId('Rowt')
call RegisterUpgradeId('Ruac')
call RegisterUpgradeId('Ruar')
call RegisterUpgradeId('Ruba')
call RegisterUpgradeId('Rubu')
call RegisterUpgradeId('Rucr')
call RegisterUpgradeId('Ruex')
call RegisterUpgradeId('Rufb')
call RegisterUpgradeId('Rugf')
call RegisterUpgradeId('Rume')
call RegisterUpgradeId('Rune')
call RegisterUpgradeId('Rupc')
call RegisterUpgradeId('Rupm')
call RegisterUpgradeId('Rura')
call RegisterUpgradeId('Rusf')
call RegisterUpgradeId('Rusl')
call RegisterUpgradeId('Rusm')
call RegisterUpgradeId('Rusp')
call RegisterUpgradeId('Ruwb')
call RegisterUpgradeId('Rwdm')
endif
endmethod
method onStart takes nothing returns nothing
set scanRangePrefixes = "R"
endmethod
method onEnd takes nothing returns nothing
local staticIdList Upgrades = GetAllUpgradeIds()
call BJDebugMsg( "UpgradeIdScanner - Total ids: " + I2S( Upgrades.size() ) + " (" + I2S(succeedCounter) + " customs)" )
endmethod
endstruct
endlibrary
IdScanLauncher
JASS:
/*
IdScanLauncher lib v1.0.0 (21/10/2019) by Ricola3D
Content:
Minimalist library to launch ID scan as soon as game starts and all scanners are registered.
If you want to control when scan starts, disable this trigger, and call IdScannerManager.Start() yourself.
*/
library IdScanLauncher requires IdScanner, optional UnitIdScanner, optional ItemIdScanner, optional DestructibleIdScanner, optional DoodadIdScanner, optional AbilityIdScanner, optional BuffIdScanner, optional UpgradeIdScanner
private module M
private static method onInit takes nothing returns nothing
call IdScannerManager.Start()
endmethod
endmodule
private struct S extends array
implement M
endstruct
endlibrary
Similar project I was inspired of
List Unit Abilities (by IcemanBo)
Attachments
Last edited: