Reference Section
This section will provide detail about different strategy editor commands that can be used.
Use ctrl + f to search the reference section of a statement or condition.
The Strategy Manager:
Statements:
AddBlock Statement:
call AddBlock(1, BLACKSMITH, false, 1, HOUSE, 60)
call AddBlock([How many must it build or start to build], [What must it have built or started to build], [Should the first value count started to build(false) or completed build(true)], [How many is it allowed to build before it has to obey the condition stated in the 3 first parameters],[What is it it is allowed to build this many of at a maximum], [How many game seconds *5 shall pass before this block is turned off])
AddRBlock Statement:
call AddRBlock(360, 160,0, 0, ANCIENT_WAR, 60)
call AddRBlock([Amount of gold to have more of ], [Amount of wood to have more of ],[Amount of food to have more of], [Cannot build more than this value of unit], [Unit type in question], [How many seconds * 5 shall pass before this block is turned off])
AddHarass Statement:
call AddHarass(1, 2, FOOTMAN)
call AddHarass([Harrass group], [How many to add to group], [What unit type is being added to group])
Harass_Target Statement:
call Harass(1, HARASS_TARGET_PEONS, true, 5, 0.25, 0, true, 50, 80)
call Harass([Harass group to use], [A Harass command], [ Will it avoid towers (true or false) ], [It will flee if it encounters strength of this amount], [Amount of hp left on units to abort harass], [If this many units left abort harass], [Any condition to include with harass (leave as true so harass always can run)], [Repeat harass this many seconds * 5], [Start harass at this many seconds * 5])
Harass Targets:
HARASS_TARGET_PEONS - Enemy workers
HARASS_TARGET_EXPANSION - Enemy expansion
HARASS_TARGET_MAIN_HALL - Enemy main hall
HARASS_TARGET_LOCATION - An enemy around a certain location // NOT YET IMPLEMENTED
distraction_group Statement:
set distraction_group = 2
set distraction_group = [Harass group]
Sets which harass group is used for distractions. These are attacks that occur to confuse enemy to get them to use up a town portal etc. Distraction attacks only occur if you own 3 times the amount of forces needed for the distraction
BuiltUnit Statement:
call BuildUnit(8, RIFLEMAN, 50)
call BuildUnit([Number to build], [Unit type to build], [End priority])
Start proity = [End priority] + ([Number to build-1] * 2)
So this would build 8 rifleman but first one is built with a priority of 64.
BuildUpgr Statement:
call BuildUpgr(2, UPG_RANGED, 34)
call BuildUpgr([Number of time to research], [Research Type], [End priority])
BuildAdvUpgr Statement:
call BuildAdvUpgr(1, UPG_BOMBS, 2,TownCountDone(COPTER), 10, 5 ,10)
call BuildAdvUpgr([Quantity to build and decides how many versions depending on current tier], [Research Type],[Start tier],[Count of units], [Maximum number of units to provide the max priority], [Bonus added to the research prority per tier], [Base prority of upgrade])
The total priority of the upgrade is equal to the (Base +Tier Bonus) and is only this high once you have the full amount of units. Less and this priority is proportionally less.
e.g. in example above lets say we have 10 copters we build upgrade at priority 10 at tier 2. If we only have 5 it builds upgrade at priority 5. If we have 0 copters the upgrade will not occur.
basic_melee Statement:
call basic_melee(50, 36)
call basic_melee([Total food value of knights and footmen], [End priority])
This only works for human races unless you have customly allowed this command to work for other races by changing properties in the racialsettings.txt.
DefendTownsDone
call DefendTownsDone(2, ANCIENT_PROTECT, 75)
call DefendTownsDone([Number to build], [Unit or building], [priority])
Will build these amounts of units at all the expansions.
BuildItem Statement:
call BuildItem(2, HEALING_POTION, 40)
call BuiltItem([Total items to get], [Item type], [End priority])
Item Names:
Racial Items
HEALING_POTION
MANA_POTION
TOWN_PORTAL
LESSER_CLARITY_POTION
MECHANICAL_CRITTER
SCROLL_OF_REGENERATION
ORB_OF_FIRE
STAFF_OF_SANCTUARY
HEALING_SALVE
SCROLL_OF_SPEED
ORB_OF_LIGHTNING
TINY_GREAT_HALL
ROD_OF_NECROMANCY
SACRIFICIAL_SKULL
DUST_OF_APPEARANCE
ORB_OF_CORRUPTION
SCROLL_OF_HEALING
MOONSTONE
STAFF_OF_PRESERVATION
ORB_OF_VENOM
ANTI_MAGIC_POTION
Merchant Items
CIRCLET_OF_NOBILITY
PERIAPT_OF_VITALITY
BOOTS_OF_SPEED
M_DUST_OF_APPEARANCE
M_SCROLL_OF_HEALING
SCROLL_OF_PROTECTION
M_TOWN_PORTAL
POTION_OF_INVISIBILITY
TOME_OF_RETRAINING
STAFF_OF_TELEPORTATION
POTION_OF_LESSER_INVULNERBILITY
SetBuildReact Statement:
call SetBuildReact(20, 3, HUNTRESS, 5, ARCHER, enemy_unarmored, 4, 12, 50)
call SetBuildReact([Amount of food to spread units over], [Build extra number of unit 1 at all times], [Unit 1 type to build], [Build extra number of unit 2 at all times], [Unit 2 type to build], [condition to calculate strength], [Less than this strength level from condition puts all food as unit 1], [More than this strength from condition puts all food at unit 2], [Base Priority])
Starting Priority of first unit = Base priority + (Number of Least food unit-1) *2)
So from above example Starting priority = 50 + (14 *2) = 78
This is always the case even if in the above archers no archers was built.
Both units are built simulationously but unit 1 will always be the first unit to attempt to be built.
NOTE: If the number to build of a certain unit is 0 amai will not try to build the requirements of that unit.
Strength Levels:
enemy_heavyarmor - Enemy heavy armor strength
enemy_lightarmor - Enemy light armor strength
enemy_mediumarmor - Enemy medium armor strength
enemy_casters - Enemy casters strength
enemy_towers - Enemy tower strength
enemy_unarmored - Enemy unarmored strength
enemy_magic - Enemy magic attackers strength
enemy_normal - Enemy normal attackers strength
enemy_piercing - Enemy piercing attackers strength
enemy_siege - Enemy siege attackers strength
enemy_air - Enemy air units strength
Conditional statements:
Note: You can use any jass native commands in the strategy editor windows. Go to a warcraft site for tutorials of basics of jass as i wont teach you here. www.wc3campaigns.net is a good place to find out information. Below is some commonly used conditionaly statements used in the strategy editor.
TownCountDone condition:
TownCountDone(FOOTMAN)
TownCountDone([unit/building type])
Counts the number of a certain unit type owned.
EXAMPLES : If TownCountDone(FOOTMAN) > 5 then
Compound conditions:
This is having more than one condition in place.
call SetBuildReact(15, 2, FOOTMAN, 4, RIFLEMAN, (enemy_unarmored + (enemy_air * 2) + enemy_magic - (enemy_normal * 2)), 4, 25, 50)
You must have brackets around an entire compound condition.
e.g. if (TownCountDone(Footman) + TownCountDone(Rifleman)) > 5 then
c_enemy Statement:
if not (c_enemy_total == c_enemy[R_ELF]) then
c_enemy_total = Total amount of enemy players
c_enemy[R_ELF] = Total amount of elf race players
The example statement if the total amount of enemy players does not equal the total enemy elf players then....
Min condition:
call SetBuildUpgr(Min((TownCountDone(FOOTMAN)/5),1), UPG_DEFEND, 70)
Min returns the smallest number out of two numbers.
The above command means if the number of footman / 5 is greater than 1 then do UPG_Defend with priority 70. Therefore 5 footmen or more are needed for this to work. This is basically acting as an if...then statement, but stays all on 1 line.
NOTE : Becareful when placing your brackets. Its easy to miss them out with this function
GetPlayerRace condition:
GetPlayerRace(nearest_enemy) != RACE_UNDEAD
This gets the nearest enemies race. Very useful in harassment calls. != means not equal to.
GetPlayerUnitTypeCount condition:
GetPlayerUnitTypeCount(Player(0), ORC_SHIPYARD) > 0
GetPlayerUnitTypeCount([Player Number. Player 0 is player 1], [Unit Type to count])
This counts the number of a unit type owned a specific player. Useful for campaign ai's.