function EnemyTroops takes nothing returns boolean
return IsUnitEnemy( GetFilterUnit(), ConvertedPlayer( udg_AI_PlayerNumber ) ) and IsUnitAliveBJ( GetFilterUnit() ) //and GetConvertedPlayerId(GetOwningPlayer(GetFilterUnit())) < 6
endfunction
// ********************************************************************
// checks if the unit type is a captain of the batalion
// returns array index defined in initialization, otherwise returns 0
function IsCaptain takes integer captain returns integer
local integer i = 1
loop
if ( captain == udg_BattalionCaptain[i] ) then
return i
endif
exitwhen i > udg_NrTypes
set i = i + 1
endloop
return 0
endfunction
// ********************************************************************
// returns captain unit of the batalion
function GetCaptain takes group batalion returns unit
local unit captain
local group tempgroup = CreateGroup()
call GroupAddGroup(batalion,tempgroup)
loop
set captain = FirstOfGroup(tempgroup)
exitwhen LoadInteger(udg_hashtable, GetHandleId(captain), 1) == 1 // or captain == null
call GroupRemoveUnit( tempgroup, captain )
endloop
call DestroyGroup(tempgroup)
set tempgroup = null
return captain
endfunction
// ********************************************************************
// checks if batalion has all his units
function IsComplete takes unit captain returns boolean
local integer battallionIndex = LoadInteger(udg_hashtable, GetHandleId(captain), 0)
if ( battallionIndex == 0 ) then
return true
endif
if ( CountUnitsInGroup( udg_Battallion[battallionIndex] ) == udg_BattalionSize[IsCaptain(GetUnitTypeId( captain ))] +1 ) then
return true
else
return false
endif
endfunction
// ********************************************************************
function GetOrderAbility takes integer batalionOrder, integer caster returns integer
local integer i = 1
loop
exitwhen i == 30
if ( batalionOrder == udg_BattalionSpellOrderID[i] and caster == udg_BattalionSpellCaster[i] ) then
return i
endif
set i = i + 1
endloop
return 0
endfunction
function GetBatalionAbility takes integer batalionSpell returns integer
local integer i = 1
loop
exitwhen i == 30
if ( batalionSpell == udg_BattalionSpellAbility[i] ) then
return i
endif
set i = i + 1
endloop
return 0
endfunction
Name | Type | is_array | initial_value |
AH_colorString | string | Yes | |
AH_commandString | string | Yes | |
AH_hashtable | hashtable | No | |
AH_player | player | No | |
AH_playerTarget | player | No | |
AH_prefix | string | No | |
AH_skipGroup | force | No | |
AH_string | string | No | |
AH_substring | string | No | |
AH_tempGroup | force | No | |
AI_AttackGroup | group | Yes | |
AI_Defenders | group | Yes | |
AI_Movement | group | Yes | |
AI_Player_Copy | player | No | |
AI_PlayerNumber | integer | No | |
AngleIndex | integer | Yes | 270 |
Angles | real | Yes | |
BatalionHash_Beast | integer | No | |
BatalionHash_Crew | integer | No | |
BatalionHash_Guards | integer | No | |
BatalionHash_Order | integer | No | |
BatalionHash_Summonable | integer | No | |
BatalionHash_TargetUnit | integer | No | |
BatalionHash_TargetX | integer | No | |
BatalionHash_TargetY | integer | No | |
BattalionCaptain | unitcode | Yes | |
BattalionGoldCost | integer | Yes | |
BattalionPowerCost | integer | Yes | |
BattalionSize | integer | Yes | |
BattalionSpellAbility | abilcode | Yes | |
BattalionSpellCaster | unitcode | Yes | |
BattalionSpellOrderID | integer | Yes | |
BattalionSpellOrderString | string | Yes | |
BattalionTimer | real | Yes | |
BattalionTroop | unitcode | Yes | |
Battallion | group | Yes | |
BattallionCount | integer | No | |
BattallionIndex | integer | No | |
BattallionLimit | integer | No | |
BattallionQueued | group | No | |
BattallionRegroup | real | No | |
boolean | boolean | No | |
Building | unit | No | |
CavalryGroup | group | No | |
check | boolean | No | |
CityOrcEmpire | integer | No | |
CurrentDay | integer | No | |
CurrentMonth | integer | No | |
CurrentMonth_Copy | integer | No | |
CV | integer | No | |
Dateint | integer | No | |
Datemultiboard | multiboard | No | |
Daysoftheweek | string | Yes | |
DummySystems | unit | No | |
FacingAngle | real | No | |
Faction1Income | integer | No | |
Faction2Income | integer | No | |
Faction3Income | integer | No | |
Faction4Income | integer | No | |
handle | integer | No | |
hashtable | hashtable | No | |
IncomeTimer | timer | No | |
IsUnitPreplaced | boolean | Yes | |
KB | integervar | No | |
KB_Angle | real | Yes | |
KB_Distance | real | Yes | |
KB_Group | group | Yes | |
KB_Int | integer | No | |
KB_Off | boolean | Yes | |
KB_Point | location | Yes | |
KB_Skip | integer | No | |
KB_Spam | integer | Yes | |
KB_Speed | real | Yes | |
KB_Target | unit | Yes | |
KB_Times | integer | No | |
monthsoftheyyear | string | Yes | |
MultiboatrdTitle | string | No | |
NrTypes | integer | No | |
OwningPlayer | player | No | |
Players | force | No | |
Point | location | No | |
RandomINT | integer | No | |
RandomINT_Copy | integer | No | |
Selected1 | group | Yes | |
Status | integer | Yes | |
Summon | integer | No | |
target | unit | No | |
TempCommander | unit | No | |
TempGroiup | group | No | |
TempHero | unit | No | |
Tempint | integer | No | |
tempInt | integervar | No | |
Tempplayer | player | No | |
Temppoint | location | No | |
TempPoint | location | No | |
Temppoint01 | location | No | |
TempRealX | real | No | |
Tempunit | unit | No | |
timer | real | No | |
TPBS_Ability_DistanceChecker | abilcode | No | |
TPBS_Base | group | No | |
TPBS_Building_DistanceChecker | unit | No | |
TPBS_Cleaner_Group | group | No | |
TPBS_Cleaner_Timer | timer | No | |
TPBS_Constructing | group | No | |
TPBS_MaxRange | real | No | |
TPBS_MaxRange_AppliesToAllies | boolean | No | |
TPBS_Order | string | No | |
TPBS_Point | location | No | |
TPBS_Point_Ok | boolean | No | |
TPBS_Point_Temp | location | No | |
TPBS_Point_Temp_2 | location | No | |
TPBS_Real_Temp | real | No | |
TPBS_TooFarMessage | string | No | |
TPBS_TooFarMessage_Force | force | No | |
TPBS_Unit_BuildDummy | unit | No | |
TPBS_Unit_DummyType | unitcode | No | |
TPBS_Unit_DummyType_2 | unitcode | No | |
TranslatePlayerNumber | integer | No | |
UDex | integer | No | |
UDex_Copy | integer | No | |
UDexGen | integer | No | |
UDexGen_Copy | integer | No | |
UDexNext | integer | Yes | |
UDexNext_Copy | integer | Yes | |
UDexPrev | integer | Yes | |
UDexPrev_Copy | integer | Yes | |
UDexRecycle | integer | No | |
UDexRecycle_Copy | integer | No | |
UDexUnits | unit | Yes | |
UDexUnits_Copy | unit | Yes | |
UDexWasted | integer | No | |
UDexWasted_Copy | integer | No | |
UnitIndexerEnabled | boolean | No | |
UnitIndexerEnabled_Copy | boolean | No | |
UnitIndexEvent | real | No | |
UnitIndexEvent_Copy | real | No | |
Unittype | unitcode | No | |
VeteranCount | integer | No | |
Weather | weathereffect | No | |
Weather_Copy | weathereffect | No | |
WeatherperSeason | weathereffect | No | |
WeatherSTR | string | No | |
WeatherSTR_Copy | string | No | |
WeatherVar | weathereffect | Yes | |
WeekNumber | integer | No |
scope SelectorMoves initializer Init
private function Conditions takes nothing returns boolean
return GetUnitTypeId(GetTriggerUnit()) == 'h00R'
endfunction
private function Actions takes nothing returns nothing
call SetUnitPosition(GetTriggerUnit(), GetOrderPointX(), GetOrderPointY())
call IssueImmediateOrder(GetTriggerUnit(), "stop")
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER)
call TriggerAddCondition(t, Condition(function Conditions))
call TriggerAddAction( t, function Actions )
endfunction
endscope
function Selection takes nothing returns boolean
return ( IsUnitSelected(GetFilterUnit(), GetOwningPlayer(GetOrderedUnit())) == true )
endfunction
function Trig_Move_to_point_Compy_Conditions takes nothing returns boolean
if ( IsUnitType(GetOrderedUnit(), UNIT_TYPE_STRUCTURE) == false ) then
if ( GetIssuedOrderId() == 851971 or GetIssuedOrderId() == 851986 or GetIssuedOrderId() == 851983 ) then
//call BJDebugMsg(OrderId2String( GetIssuedOrderId() ))
return true
endif
endif
return false
endfunction
function Trig_Move_to_point_Compy_Actions takes nothing returns nothing
local real orderX = GetOrderPointX()
local real orderY = GetOrderPointY()
local integer order = GetIssuedOrderId()
local integer counter = 0
local integer counter1 = 0
local integer counter2 = 0
local integer index
local integer min
local real Xpos
local real Ypos
local real XposUnit
local real YposUnit
local real minX = 100000.0
local real minY = 100000.0
local real maxX = -100000.0
local real maxY = -100000.0
local real angle
local unit wanderer
local unit array units
local unit array swap
local group tempgroup = CreateGroup()
if ( GetPlayerController(GetOwningPlayer(GetOrderedUnit())) == MAP_CONTROL_USER ) then
set tempgroup = GetUnitsOfPlayerMatching(GetOwningPlayer(GetOrderedUnit()), Condition(function Selection))
endif
if ( IsUnitGroupEmptyBJ(udg_AI_Movement[GetConvertedPlayerId(GetOwningPlayer(GetOrderedUnit()))]) == false ) then
call GroupAddGroup( udg_AI_Movement[GetConvertedPlayerId(GetOwningPlayer(GetOrderedUnit()))], tempgroup)
endif
if ( CountUnitsInGroup(tempgroup) < 2 ) then
call DestroyGroup(tempgroup)
call GroupClear(udg_AI_Movement[GetConvertedPlayerId(GetOwningPlayer(GetOrderedUnit()))])
call EnableTrigger( GetTriggeringTrigger() )
return
endif
loop
set wanderer = FirstOfGroup(tempgroup)
exitwhen wanderer == null
if ( GetUnitX(wanderer) < minX ) then
set minX = GetUnitX(wanderer)
endif
if ( GetUnitY(wanderer) < minY ) then
set minY = GetUnitY(wanderer)
endif
if ( GetUnitX(wanderer) > maxX ) then
set maxX = GetUnitX(wanderer)
endif
if ( GetUnitY(wanderer) > maxY ) then
set maxY = GetUnitY(wanderer)
endif
call GroupRemoveUnit( tempgroup, wanderer )
set Xpos = minX + (maxX - minX )/2
set Ypos = minY + (maxY - minY )/2
endloop
if ( GetPlayerController(GetOwningPlayer(GetOrderedUnit())) == MAP_CONTROL_USER ) then
set tempgroup = GetUnitsOfPlayerMatching(GetOwningPlayer(GetOrderedUnit()), Condition(function Selection))
endif
if ( IsUnitGroupEmptyBJ(udg_AI_Movement[GetConvertedPlayerId(GetOwningPlayer(GetOrderedUnit()))]) == false ) then
call GroupAddGroup( udg_AI_Movement[GetConvertedPlayerId(GetOwningPlayer(GetOrderedUnit()))], tempgroup)
endif
call GroupClear(udg_AI_Movement[GetConvertedPlayerId(GetOwningPlayer(GetOrderedUnit()))])
loop
set wanderer = FirstOfGroup(tempgroup)
exitwhen wanderer == null
set units[counter] = wanderer
call GroupRemoveUnit( tempgroup, wanderer )
set counter = counter + 1
endloop
if not (minX <= orderX and orderX <= maxX and minY <= orderY and orderY <= maxY) or GetPlayerController(GetOwningPlayer(GetOrderedUnit())) == MAP_CONTROL_COMPUTER then
set angle = Atan2(orderY - Ypos, orderX - Xpos)
//call BJDebugMsg(I2S(counter))
//sort of
//call BJDebugMsg("start sorting")
loop
exitwhen counter1 >= counter
set counter2 = counter1
set index = counter1
set min = GetUnitPointValue( units[counter1] )
loop
exitwhen counter2 >= counter
if GetUnitPointValue( units[counter2] ) < min then
set min = GetUnitPointValue( units[counter2] )
set index = counter2
endif
//call BJDebugMsg("counting")
set counter2 = counter2 + 1
endloop
//call BJDebugMsg("preswap")
//call BJDebugMsg(I2S(GetUnitPointValue( units[0] )))
set wanderer = units[index]
//call BJDebugMsg(I2S(GetUnitPointValue( wanderer )))
//set units[index] = null
set units[index] = units[counter1]
//set units[counter1] = null
set units[counter1] = wanderer
set counter1 = counter1 + 1
// call BJDebugMsg("swap")
//call BJDebugMsg(I2S(GetUnitPointValue( units[0] )))
endloop
//if ( RAbsBJ(Sin(Deg2Rad(GetUnitFacing( FirstOfGroup(tempgroup)))) - Sin(angle)) > 1 ) then
// call BJDebugMsg(R2S(RAbsBJ(Deg2Rad(GetUnitFacing( FirstOfGroup(tempgroup))))))
// call BJDebugMsg("switching")
// set tempgroup = InvertGroup( tempgroup )
//endif
if (counter == 2 ) then
call DisableTrigger( GetTriggeringTrigger() )
call TriggerWaitForSound(null, 0)
set wanderer = units[0]
set XposUnit = orderX + 000.0*(Cos(angle)) + 150.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 000.0*(Sin(angle)) + 150.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[1]
set XposUnit = orderX + 000.0*(Cos(angle)) + 150.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 000.0*(Sin(angle)) + 150.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call EnableTrigger( GetTriggeringTrigger() )
elseif (counter == 4 ) then
call DisableTrigger( GetTriggeringTrigger() )
call TriggerWaitForSound(null, 0)
set wanderer = units[0]
set XposUnit = orderX + 100.0*(Cos(angle)) + 150.0*(Cos(angle -3.14159265/2))
set YposUnit = orderY + 100.0*(Sin(angle)) + 150.0*(Sin(angle -3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[1]
set XposUnit = orderX + 100.0*(Cos(angle)) + 150.0*(Cos(angle+ 3.14159265/2))
set YposUnit = orderY + 100.0*(Sin(angle)) + 150.0*(Sin(angle+ 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[2]
set XposUnit = orderX - 100.0*(Cos(angle)) + 150.0*(Cos(angle -3.14159265/2))
set YposUnit = orderY - 100.0*(Sin(angle)) + 150.0*(Sin(angle -3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[3]
set XposUnit = orderX - 100.0*(Cos(angle)) + 150.0*(Cos(angle+ 3.14159265/2))
set YposUnit = orderY - 100.0*(Sin(angle)) + 150.0*(Sin(angle+ 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call EnableTrigger( GetTriggeringTrigger() )
elseif (counter == 3 ) then
call DisableTrigger( GetTriggeringTrigger() )
call TriggerWaitForSound(null, 0)
set wanderer = units[0]
set XposUnit = orderX + 100.0*(Cos(angle)) + 150.0*(Cos(angle+ -3.14159265/2))
set YposUnit = orderY + 100.0*(Sin(angle)) + 150.0*(Sin(angle+ -3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[1]
set XposUnit = orderX + 100.0*(Cos(angle)) + 150.0*(Cos(angle+ 3.14159265/2))
set YposUnit = orderY + 100.0*(Sin(angle)) + 150.0*(Sin(angle+ 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[2]
set XposUnit = orderX - 100.0*(Cos(angle))
set YposUnit = orderY - 100.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call EnableTrigger( GetTriggeringTrigger() )
elseif (counter == 5 ) then
call DisableTrigger( GetTriggeringTrigger() )
call TriggerWaitForSound(null, 0)
set wanderer = units[0]
set XposUnit = orderX + 100.0*(Cos(angle)) + 300.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 100.0*(Sin(angle)) + 300.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[1]
set XposUnit = orderX + 100.0*(Cos(angle))
set YposUnit = orderY + 100.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[2]
set XposUnit = orderX + 100.0*(Cos(angle)) + 300.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 100.0*(Sin(angle)) + 300.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[3]
set XposUnit = orderX - 100.0*(Cos(angle)) + 150.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 100.0*(Sin(angle)) + 150.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[4]
set XposUnit = orderX - 100.0*(Cos(angle)) + 150.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 100.0*(Sin(angle)) + 150.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call EnableTrigger( GetTriggeringTrigger() )
elseif (counter == 6 ) then
call DisableTrigger( GetTriggeringTrigger() )
call TriggerWaitForSound(null, 0)
set wanderer = units[0]
set XposUnit = orderX + 100.0*(Cos(angle)) + 300.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 100.0*(Sin(angle)) + 200.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[1]
set XposUnit = orderX + 100.0*(Cos(angle))
set YposUnit = orderY + 100.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[2]
set XposUnit = orderX + 100.0*(Cos(angle)) + 300.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 100.0*(Sin(angle)) + 300.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[3]
set XposUnit = orderX - 100.0*(Cos(angle)) + 300.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 100.0*(Sin(angle)) + 300.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[4]
set XposUnit = orderX - 100.0*(Cos(angle))
set YposUnit = orderY - 100.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[5]
set XposUnit = orderX - 100.0*(Cos(angle)) + 300.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 100.0*(Sin(angle)) + 300.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call EnableTrigger( GetTriggeringTrigger() )
elseif (counter == 7 ) then
call DisableTrigger( GetTriggeringTrigger() )
call TriggerWaitForSound(null, 0)
set wanderer = units[0]
set XposUnit = orderX + 200.0*(Cos(angle)) + 300.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 300.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[1]
set XposUnit = orderX + 200.0*(Cos(angle))
set YposUnit = orderY + 200.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[2]
set XposUnit = orderX + 100.0*(Cos(angle)) + 300.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 100.0*(Sin(angle)) + 300.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[3]
set XposUnit = orderX - 00.0*(Cos(angle)) + 300.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 300.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[4]
set XposUnit = orderX - 00.0*(Cos(angle))
set YposUnit = orderY - 00.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[5]
set XposUnit = orderX - 00.0*(Cos(angle)) + 300.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 300.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[6]
set XposUnit = orderX - 200.0*(Cos(angle))
set YposUnit = orderY - 200.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call EnableTrigger( GetTriggeringTrigger() )
elseif (counter == 8 ) then
call DisableTrigger( GetTriggeringTrigger() )
call TriggerWaitForSound(null, 0)
set wanderer = units[0]
set XposUnit = orderX + 200.0*(Cos(angle)) + 300.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 300.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[1]
set XposUnit = orderX + 200.0*(Cos(angle))
set YposUnit = orderY + 200.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[2]
set XposUnit = orderX + 200.0*(Cos(angle)) + 300.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 300.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[3]
set XposUnit = orderX - 00.0*(Cos(angle)) + 300.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 300.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[4]
set XposUnit = orderX - 00.0*(Cos(angle))
set YposUnit = orderY - 00.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[5]
set XposUnit = orderX - 00.0*(Cos(angle)) + 300.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 300.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[6]
set XposUnit = orderX - 200.0*(Cos(angle)) + 150.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 150.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[7]
set XposUnit = orderX - 200.0*(Cos(angle)) + 150.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 150.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call EnableTrigger( GetTriggeringTrigger() )
elseif (counter == 9 ) then
call DisableTrigger( GetTriggeringTrigger() )
call TriggerWaitForSound(null, 0)
set wanderer = units[0]
set XposUnit = orderX + 200.0*(Cos(angle)) + 300.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 300.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[1]
set XposUnit = orderX + 200.0*(Cos(angle))
set YposUnit = orderY + 200.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[2]
set XposUnit = orderX + 200.0*(Cos(angle)) + 300.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 300.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[3]
set XposUnit = orderX - 00.0*(Cos(angle)) + 300.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 300.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[4]
set XposUnit = orderX - 00.0*(Cos(angle))
set YposUnit = orderY - 00.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[5]
set XposUnit = orderX - 00.0*(Cos(angle)) + 300.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 300.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[6]
set XposUnit = orderX - 200.0*(Cos(angle)) + 300.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 300.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[7]
set XposUnit = orderX - 200.0*(Cos(angle))
set YposUnit = orderY - 200.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[8]
set XposUnit = orderX - 200.0*(Cos(angle)) + 300.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 300.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call EnableTrigger( GetTriggeringTrigger() )
elseif (counter == 10 ) then
call DisableTrigger( GetTriggeringTrigger() )
call TriggerWaitForSound(null, 0)
set wanderer = units[0]
set XposUnit = orderX + 200.0*(Cos(angle)) + 450.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 450.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[1]
set XposUnit = orderX + 200.0*(Cos(angle)) + 150.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 150.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[2]
set XposUnit = orderX + 200.0*(Cos(angle)) + 150.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 150.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[3]
set XposUnit = orderX + 200.0*(Cos(angle)) + 450.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 450.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[4]
set XposUnit = orderX - 00.0*(Cos(angle)) + 450.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 450.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[5]
set XposUnit = orderX - 00.0*(Cos(angle)) + 150.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 150.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[6]
set XposUnit = orderX - 00.0*(Cos(angle)) + 150.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 150.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[7]
set XposUnit = orderX - 00.0*(Cos(angle)) + 450.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 450.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[8]
set XposUnit = orderX - 200.0*(Cos(angle)) + 150.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 150.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[9]
set XposUnit = orderX - 200.0*(Cos(angle)) + 150.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 150.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call EnableTrigger( GetTriggeringTrigger() )
elseif (counter == 11 ) then
call DisableTrigger( GetTriggeringTrigger() )
call TriggerWaitForSound(null, 0)
set wanderer = units[0]
set XposUnit = orderX + 200.0*(Cos(angle)) + 450.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 450.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[1]
set XposUnit = orderX + 200.0*(Cos(angle)) + 150.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 150.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[2]
set XposUnit = orderX + 200.0*(Cos(angle)) + 150.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 150.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[3]
set XposUnit = orderX + 200.0*(Cos(angle)) + 450.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 450.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[4]
set XposUnit = orderX - 00.0*(Cos(angle)) + 450.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 450.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[5]
set XposUnit = orderX - 00.0*(Cos(angle)) + 150.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 150.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[6]
set XposUnit = orderX - 00.0*(Cos(angle)) + 150.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 150.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[7]
set XposUnit = orderX - 00.0*(Cos(angle)) + 450.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 450.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[8]
set XposUnit = orderX - 200.0*(Cos(angle)) + 300.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 300.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[9]
set XposUnit = orderX - 200.0*(Cos(angle))
set YposUnit = orderY - 200.0*(Sin(angle))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[10]
set XposUnit = orderX - 200.0*(Cos(angle)) + 300.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 300.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call EnableTrigger( GetTriggeringTrigger() )
elseif (counter == 12 ) then
call DisableTrigger( GetTriggeringTrigger() )
call TriggerWaitForSound(null, 0)
set wanderer = units[0]
set XposUnit = orderX + 200.0*(Cos(angle)) + 450.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 450.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[1]
set XposUnit = orderX + 200.0*(Cos(angle)) + 150.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 150.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[2]
set XposUnit = orderX + 200.0*(Cos(angle)) + 150.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 150.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[3]
set XposUnit = orderX + 200.0*(Cos(angle)) + 450.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY + 200.0*(Sin(angle)) + 450.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[4]
set XposUnit = orderX - 00.0*(Cos(angle)) + 450.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 450.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[5]
set XposUnit = orderX - 00.0*(Cos(angle)) + 150.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 100.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[6]
set XposUnit = orderX - 00.0*(Cos(angle)) + 150.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 150.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[7]
set XposUnit = orderX - 00.0*(Cos(angle)) + 450.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 00.0*(Sin(angle)) + 450.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[8]
set XposUnit = orderX - 200.0*(Cos(angle)) + 450.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 450.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[9]
set XposUnit = orderX - 200.0*(Cos(angle)) + 150.0*(Cos(angle - 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 150.0*(Sin(angle - 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[10]
set XposUnit = orderX - 200.0*(Cos(angle)) + 150.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 150.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call TriggerWaitForSound(null, 0)
set wanderer = units[11]
set XposUnit = orderX - 200.0*(Cos(angle)) + 450.0*(Cos(angle + 3.14159265/2))
set YposUnit = orderY - 200.0*(Sin(angle)) + 450.0*(Sin(angle + 3.14159265/2))
call IssuePointOrderById( wanderer, order, XposUnit, YposUnit )
call EnableTrigger( GetTriggeringTrigger() )
endif
endif
set wanderer = null
//call GroupClear(udg_AI_Movement[GetConvertedPlayerId(GetOwningPlayer(GetOrderedUnit()))])
call DestroyGroup(tempgroup)
endfunction
//===========================================================================
function InitTrig_Squad_Movement takes nothing returns nothing
set gg_trg_Squad_Movement = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Squad_Movement, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
call TriggerAddCondition( gg_trg_Squad_Movement, Condition(function Trig_Move_to_point_Compy_Conditions) )
call TriggerAddAction( gg_trg_Squad_Movement, function Trig_Move_to_point_Compy_Actions )
endfunction
function Trig_Regroup_Actions takes nothing returns nothing
local real Xpos
local real Ypos
local integer order
local integer i = 1
local unit wanderer
local unit commander
local unit target
local group batalion = CreateGroup()
loop
exitwhen i > udg_BattallionCount
if ( not ( IsUnitGroupEmptyBJ( udg_Battallion[i] ) ) ) then
set commander = GetCaptain(udg_Battallion[i])
call GroupAddGroup( udg_Battallion[i], batalion )
loop
set wanderer = FirstOfGroup(batalion)
exitwhen (wanderer == null)
set Xpos = GetUnitX(wanderer) - GetUnitX(commander)
set Ypos = GetUnitY(wanderer) - GetUnitY(commander)
if ( SquareRoot( Xpos*Xpos + Ypos*Ypos ) >= udg_BattallionRegroup and not (IsUnitInGroup(wanderer, udg_BattallionQueued ) ) ) then
set udg_Tempunit = wanderer
set udg_TempCommander = commander
call IssuePointOrder( wanderer, "move", GetUnitX(commander), GetUnitY(commander) )
call TriggerExecute( gg_trg_Regroup_wait )
endif
call GroupRemoveUnit(batalion, wanderer)
set wanderer = null
endloop
call GroupClear( batalion )
set commander = null
endif
set i = i + 1
endloop
//call DestroyGroup( batalion )
endfunction
//===========================================================================
function InitTrig_Regroup takes nothing returns nothing
set gg_trg_Regroup = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_Regroup, 2.0)
call TriggerAddAction( gg_trg_Regroup, function Trig_Regroup_Actions )
endfunction
function Trig_Regroup_wait_Actions takes nothing returns nothing
local unit wanderer = udg_Tempunit
local unit commander = udg_TempCommander
local unit target
local real Xpos
local real Ypos
local integer order
local integer battallionIndex = LoadInteger(udg_hashtable, GetHandleId(commander), 0)
call IssuePointOrder( wanderer, "move", GetUnitX(commander), GetUnitY(commander) )
call GroupAddUnit( udg_BattallionQueued, wanderer )
loop
set commander = GetCaptain( udg_Battallion[battallionIndex] )
set Xpos = GetUnitX(wanderer) - GetUnitX(commander)
set Ypos = GetUnitY(wanderer) - GetUnitY(commander)
exitwhen ( SquareRoot( Xpos*Xpos + Ypos*Ypos ) <= 150 or IsUnitDeadBJ( wanderer ) or IsUnitDeadBJ( commander ) )
call IssuePointOrder(wanderer, "move", GetUnitX(commander), GetUnitY(commander) )
call TriggerSleepAction( 0.5 )
endloop
set Xpos = LoadReal( udg_hashtable, GetHandleId(commander) , udg_BatalionHash_TargetX)
set Ypos = LoadReal( udg_hashtable, GetHandleId(commander) , udg_BatalionHash_TargetY)
set order = LoadInteger( udg_hashtable, GetHandleId(commander), udg_BatalionHash_Order )
set target = LoadUnitHandle( udg_hashtable, GetHandleId(commander), udg_BatalionHash_TargetUnit )
if ( order != 0 and GetUnitCurrentOrder(commander) != String2OrderIdBJ("") ) then
if ( target == null ) then
//call BJDebugMsg("pointing")
call IssuePointOrderById(wanderer, order, Xpos, Ypos )
else
//call BJDebugMsg("acquiring")
call IssueTargetOrderById(wanderer, order, target )
endif
endif
set target = null
call GroupRemoveUnit( udg_BattallionQueued, wanderer )
endfunction
//===========================================================================
function InitTrig_Regroup_wait takes nothing returns nothing
set gg_trg_Regroup_wait = CreateTrigger( )
call TriggerAddAction( gg_trg_Regroup_wait, function Trig_Regroup_wait_Actions )
endfunction
function Trig_Battalion_reinforce_Conditions takes nothing returns boolean
if ( GetSpellAbilityId() == 'A01J' and LoadInteger(udg_hashtable, GetHandleId(GetSpellTargetUnit()), 1) == 1 and LoadInteger(udg_hashtable, GetHandleId(GetSpellTargetUnit()), udg_Summon) == 0) then
return true
else
return false
endif
endfunction
function Trig_Battalion_reinforce_Actions takes nothing returns nothing
local integer captain = IsCaptain(GetUnitTypeId(GetSpellTargetUnit()))
local integer battallionIndex = LoadInteger(udg_hashtable, GetHandleId(GetSpellTargetUnit()), 0)
local integer size = CountUnitsInGroup(udg_Battallion[battallionIndex])
local location temppoint1 = GetUnitLoc(GetSpellTargetUnit())
local unit reinforcedUnit = GetSpellTargetUnit()
loop
exitwhen size > udg_BattalionSize[captain]
if ( GetPlayerState(GetOwningPlayer(reinforcedUnit), PLAYER_STATE_RESOURCE_GOLD) >= udg_BattalionGoldCost[captain] and GetPlayerState(GetOwningPlayer(reinforcedUnit), PLAYER_STATE_RESOURCE_LUMBER) >= udg_BattalionPowerCost[captain] ) then
//call BJDebugMsg("reinforcing")
call SetPlayerState(GetOwningPlayer(reinforcedUnit), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(GetOwningPlayer(reinforcedUnit), PLAYER_STATE_RESOURCE_GOLD) - udg_BattalionGoldCost[captain])
call SetPlayerState(GetOwningPlayer(reinforcedUnit), PLAYER_STATE_RESOURCE_LUMBER, GetPlayerState(GetOwningPlayer(reinforcedUnit), PLAYER_STATE_RESOURCE_LUMBER) - udg_BattalionPowerCost[captain])
set bj_lastCreatedUnit = CreateUnitAtLoc(ConvertedPlayer( GetConvertedPlayerId(GetOwningPlayer(reinforcedUnit)) + udg_TranslatePlayerNumber ), udg_BattalionTroop[captain], temppoint1, bj_UNIT_FACING)
call SetUnitColor( GetLastCreatedUnit(), GetPlayerColor(GetOwningPlayer(reinforcedUnit)) )
call GroupAddUnit( udg_Battallion[battallionIndex], GetLastCreatedUnit() )
call SaveInteger( udg_hashtable, GetHandleId(GetLastCreatedUnit()), 0, battallionIndex )
call RemoveGuardPosition( GetLastCreatedUnit() )
call IssueTargetOrder( GetLastCreatedUnit(), "move", reinforcedUnit )
else
call DisplayTextToForce( GetForceOfPlayer(GetOwningPlayer(GetSpellTargetUnit())), "|cffffcc00Not enough resources to reinforce.|r" )
call RemoveLocation(temppoint1)
return
endif
set size = size + 1
endloop
call RemoveLocation(temppoint1)
set reinforcedUnit = null
endfunction
//===========================================================================
function InitTrig_Squad_Reinforce takes nothing returns nothing
set gg_trg_Squad_Reinforce = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Squad_Reinforce, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Squad_Reinforce, Condition( function Trig_Battalion_reinforce_Conditions ) )
call TriggerAddAction( gg_trg_Squad_Reinforce, function Trig_Battalion_reinforce_Actions )
endfunction
function Trig_Battalion_train_Conditions takes nothing returns boolean
if ( IsCaptain(GetUnitTypeId(GetTrainedUnit())) > 0 ) then
set udg_Tempunit = GetTrainedUnit()
return true
endif
return false
endfunction
function Trig_Battalion_train_Actions takes nothing returns nothing
local unit trigger_unit = udg_Tempunit
local integer captain = IsCaptain(GetUnitTypeId(trigger_unit))
local integer batallionIndex = 1
local integer size = 1
local boolean found = false
local location temppoint1 = GetUnitLoc(trigger_unit)
local location temppoint2
loop
exitwhen batallionIndex > 8911 or found == true
if ( IsUnitGroupEmptyBJ(udg_Battallion[batallionIndex]) == true ) then
call GroupAddUnit( udg_Battallion[batallionIndex], trigger_unit )
call SaveInteger( udg_hashtable, GetHandleId(trigger_unit), 0, batallionIndex )
call SaveInteger( udg_hashtable, GetHandleId(trigger_unit), 1, 1 )
if ( udg_Status[captain] > 0 ) then
call SaveInteger( udg_hashtable, GetHandleId(trigger_unit), udg_Summon, udg_Status[captain] )
endif
loop
exitwhen size > udg_BattalionSize[captain] / 2 + 1 or udg_Status[captain] == udg_BatalionHash_Guards
set temppoint2 = PolarProjectionBJ(temppoint1, GetRandomReal(0, 50.00), GetRandomDirectionDeg() )
set bj_lastCreatedUnit = CreateUnitAtLoc(ConvertedPlayer( GetConvertedPlayerId(GetOwningPlayer(trigger_unit)) + udg_TranslatePlayerNumber ), udg_BattalionTroop[captain], temppoint2, bj_UNIT_FACING)
call SetUnitColor( GetLastCreatedUnit(), GetPlayerColor(GetOwningPlayer(trigger_unit)) )
call SaveInteger( udg_hashtable, GetHandleId(GetLastCreatedUnit()), 0, batallionIndex )
call GroupAddUnit( udg_Battallion[batallionIndex], GetLastCreatedUnit() )
call RemoveGuardPosition( GetLastCreatedUnit() )
//call IssueTargetOrder( GetLastCreatedUnit(), "move", GetTrainedUnit() )
//if ( udg_Status[captain] == udg_BatalionHash_Summonable ) then
// call SaveInteger( udg_hashtable, GetHandleId(GetLastCreatedUnit()), udg_Summon, udg_BatalionHash_Summonable )
// call UnitApplyTimedLife( GetLastCreatedUnit(), 'BTLF', 20 )
//endif
if ( udg_Status[captain] > 0 ) then
call SaveInteger( udg_hashtable, GetHandleId(GetLastCreatedUnit()), udg_Summon, udg_Status[captain] )
if ( udg_Status[captain] == udg_BatalionHash_Summonable ) then
call UnitApplyTimedLife( GetLastCreatedUnit(), 'BTLF', 20 )
endif
endif
set size = size + 1
endloop
set found = true
endif
set batallionIndex = batallionIndex + 1
endloop
set udg_BattallionCount = udg_BattallionCount + 1
call RemoveLocation(temppoint1)
call RemoveLocation(temppoint2)
endfunction
//===========================================================================
function InitTrig_Squad_Trained takes nothing returns nothing
set gg_trg_Squad_Trained = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Squad_Trained, EVENT_PLAYER_UNIT_TRAIN_FINISH )
call TriggerAddCondition( gg_trg_Squad_Trained, Condition( function Trig_Battalion_train_Conditions ) )
call TriggerAddAction( gg_trg_Squad_Trained, function Trig_Battalion_train_Actions )
endfunction
//TESH.scrollpos=9
//TESH.alwaysfold=0
function Trig_UnLoad_Conditions takes nothing returns boolean
if ( IsCaptain(GetUnitTypeId(GetTriggerUnit())) > 0 ) then
return true
else
return false
endif
return false
endfunction
function UnitHide takes nothing returns nothing
if ( GetEnumUnit() != GetLoadedUnit() ) then
call ShowUnit(GetEnumUnit(), false)
endif
endfunction
function UnitShow takes nothing returns nothing
if ( GetEnumUnit() != GetLoadedUnit() ) then
call ShowUnit(GetEnumUnit(), true)
call SetUnitPosition( GetEnumUnit(), GetUnitX(GetLoadedUnit()), GetUnitY(GetLoadedUnit()) )
endif
endfunction
function Trig_UnLoad_Actions takes nothing returns nothing
local integer battallionIndex = LoadInteger(udg_hashtable, GetHandleId(GetLoadedUnit()), 0)
call ForGroup( udg_Battallion[battallionIndex] , function UnitHide )
loop
exitwhen ( IsUnitInTransport(GetTriggerUnit(), GetTransportUnit()) == false )
call TriggerSleepAction( 0.5 )
endloop
call ForGroup( udg_Battallion[battallionIndex] , function UnitShow )
endfunction
//===========================================================================
function InitTrig_Unload takes nothing returns nothing
set gg_trg_Unload = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Unload, EVENT_PLAYER_UNIT_LOADED )
call TriggerAddCondition( gg_trg_Unload, Condition( function Trig_UnLoad_Conditions ) )
call TriggerAddAction( gg_trg_Unload, function Trig_UnLoad_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Battalion_order_target_Conditions takes nothing returns boolean
if ( LoadInteger(udg_hashtable, GetHandleId(GetOrderedUnit()), 1) == 1 and LoadInteger(udg_hashtable, GetHandleIdBJ(GetOrderedUnit()), udg_Summon) != 2) then
return true
else
return false
endif
endfunction
function Trig_Battalion_order_target_Actions takes nothing returns nothing
local unit orderunit = GetOrderedUnit()
local unit target = GetOrderTargetUnit()
local integer generalOrder = GetIssuedOrderId()
local integer BattallionIndex = LoadInteger(udg_hashtable, GetHandleId(GetOrderedUnit()), 0)
//call DisableTrigger( GetTriggeringTrigger() )
call GroupRemoveUnit( udg_Battallion[BattallionIndex], orderunit )
call SaveInteger( udg_hashtable, GetHandleId(orderunit), udg_BatalionHash_Order, generalOrder )
call SaveUnitHandle( udg_hashtable, GetHandleId(GetOrderedUnit()), udg_BatalionHash_TargetUnit, GetOrderTargetUnit() )
call SaveReal( udg_hashtable, GetHandleId(orderunit), udg_BatalionHash_TargetX, 0 )
call SaveReal( udg_hashtable, GetHandleId(orderunit), udg_BatalionHash_TargetY, 0 )
if ( GetOrderAbility( generalOrder, GetUnitTypeId(orderunit) ) > 0 ) then
call GroupTargetOrder( udg_Battallion[BattallionIndex], "move", orderunit)
else
call GroupTargetOrderById( udg_Battallion[BattallionIndex], generalOrder, target)
endif
call GroupAddUnit( udg_Battallion[BattallionIndex], orderunit )
set target = null
set orderunit = null
//call EnableTrigger( GetTriggeringTrigger() )
endfunction
//===========================================================================
function InitTrig_Squad_Order_Target takes nothing returns nothing
set gg_trg_Squad_Order_Target = CreateTrigger( )
//call DisableTrigger( gg_trg_Squad_Order_Target )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Squad_Order_Target, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
call TriggerAddCondition( gg_trg_Squad_Order_Target, Condition( function Trig_Battalion_order_target_Conditions ) )
call TriggerAddAction( gg_trg_Squad_Order_Target, function Trig_Battalion_order_target_Actions )
endfunction
//TESH.scrollpos=21
//TESH.alwaysfold=0
function Trig_Battalion_order_no_target_Conditions takes nothing returns boolean
if ( LoadInteger(udg_hashtable, GetHandleIdBJ(GetOrderedUnit()), 1) == 1 and LoadInteger(udg_hashtable, GetHandleIdBJ(GetOrderedUnit()), udg_Summon) != 2 and IsUnitAliveBJ( GetOrderedUnit() ) ) then
return true
else
return false
endif
endfunction
function AddAbility takes nothing returns nothing
call UnitAddAbility(GetEnumUnit(), udg_BattalionSpellAbility[GetOrderAbility(GetIssuedOrderId(), GetUnitTypeId(GetOrderedUnit()))])
endfunction
function RemoveAbility takes nothing returns nothing
call UnitRemoveAbility(GetEnumUnit(), udg_BattalionSpellAbility[GetOrderAbility(GetIssuedOrderId(), GetUnitTypeId(GetOrderedUnit()))])
endfunction
function Trig_Battalion_order_no_target_Actions takes nothing returns nothing
local integer generalOrder = GetIssuedOrderId()
local unit orderunit = GetOrderedUnit()
local integer BattallionIndex = LoadInteger(udg_hashtable, GetHandleId(GetOrderedUnit()), 0)
//call DisableTrigger( GetTriggeringTrigger() )
//call BJDebugMsg("call stop")
call GroupRemoveUnit( udg_Battallion[BattallionIndex], orderunit )
if ( GetOrderAbility( generalOrder, GetUnitTypeId(orderunit) ) > 0 ) then
call ForGroup( udg_Battallion[BattallionIndex], function AddAbility )
//call BJDebugMsg(I2S( GetOrderAbility( generalOrder, GetUnitTypeId(orderunit) ) ))
//call BJDebugMsg(I2S( generalOrder ) )
endif
call GroupImmediateOrderById( udg_Battallion[BattallionIndex], generalOrder)
call SaveReal( udg_hashtable, GetHandleId(orderunit), udg_BatalionHash_TargetX, 0 )
call SaveReal( udg_hashtable, GetHandleId(orderunit), udg_BatalionHash_TargetY, 0 )
call RemoveSavedHandle( udg_hashtable, GetHandleId(orderunit), udg_BatalionHash_TargetUnit)
call TriggerSleepAction( 0.27 )
if ( GetIssuedOrderId() == String2OrderIdBJ("stop") and GetUnitCurrentOrder(GetOrderedUnit()) == String2OrderIdBJ("") ) then
call SaveInteger(udg_hashtable, GetHandleId(orderunit), udg_BatalionHash_Order, 0 )
endif
if ( GetOrderAbility( generalOrder, GetUnitTypeId(orderunit) ) > 0 ) then
call ForGroup( udg_Battallion[BattallionIndex], function RemoveAbility )
call IssueImmediateOrder(orderunit, "stop")
endif
call GroupAddUnit( udg_Battallion[BattallionIndex], orderunit )
set orderunit = null
//call EnableTrigger( GetTriggeringTrigger() )
endfunction
//===========================================================================
function InitTrig_Squad_Order_No_Target takes nothing returns nothing
set gg_trg_Squad_Order_No_Target = CreateTrigger( )
//call DisableTrigger( gg_trg_Squad_Order_No_Target )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Squad_Order_No_Target, EVENT_PLAYER_UNIT_ISSUED_ORDER )
call TriggerAddCondition( gg_trg_Squad_Order_No_Target, Condition( function Trig_Battalion_order_no_target_Conditions ) )
call TriggerAddAction( gg_trg_Squad_Order_No_Target, function Trig_Battalion_order_no_target_Actions )
endfunction
//TESH.scrollpos=11
//TESH.alwaysfold=0
function Trig_Battalion_order_point_Conditions takes nothing returns boolean
if ( LoadInteger(udg_hashtable, GetHandleId(GetOrderedUnit()), 1) == 1 and LoadInteger(udg_hashtable, GetHandleId(GetOrderedUnit()), udg_Summon) != 2) then
return true
else
return false
endif
endfunction
function Trig_Battalion_order_point_Actions takes nothing returns nothing
local real Xmove = GetOrderPointX()
local real Ymove = GetOrderPointY()
local integer generalOrder = GetIssuedOrderId()
local unit orderunit = GetOrderedUnit()
local integer BattallionIndex = LoadInteger(udg_hashtable, GetHandleId(GetOrderedUnit()), 0)
call DisableTrigger( GetTriggeringTrigger() )
call SaveInteger( udg_hashtable, GetHandleId(orderunit), udg_BatalionHash_Order, generalOrder )
call SaveReal( udg_hashtable, GetHandleId(orderunit), udg_BatalionHash_TargetX, Xmove )
call SaveReal( udg_hashtable, GetHandleId(orderunit), udg_BatalionHash_TargetY, Ymove )
call RemoveSavedHandle( udg_hashtable, GetHandleId(orderunit), udg_BatalionHash_TargetUnit)
if ( GetOrderAbility( generalOrder, GetUnitTypeId(orderunit) ) > 0 ) then
call GroupRemoveUnit( udg_Battallion[BattallionIndex], orderunit )
call GroupTargetOrder( udg_Battallion[BattallionIndex], "move", orderunit)
call GroupAddUnit( udg_Battallion[BattallionIndex], orderunit )
else
call GroupPointOrderById( udg_Battallion[BattallionIndex ], generalOrder, Xmove, Ymove)
endif
set orderunit = null
call EnableTrigger( GetTriggeringTrigger() )
endfunction
//===========================================================================
function InitTrig_Squad_Order_Point takes nothing returns nothing
set gg_trg_Squad_Order_Point = CreateTrigger( )
//call DisableTrigger( gg_trg_Squad_Order_Point )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Squad_Order_Point, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
call TriggerAddCondition( gg_trg_Squad_Order_Point, Condition( function Trig_Battalion_order_point_Conditions ) )
call TriggerAddAction( gg_trg_Squad_Order_Point, function Trig_Battalion_order_point_Actions )
endfunction
function Trig_Battalion_death_Ctrl_Conditions takes nothing returns boolean
local integer status = LoadInteger(udg_hashtable, GetHandleId(GetDyingUnit()), udg_Summon)
if ( status == udg_BatalionHash_Crew or status == udg_BatalionHash_Beast ) then
return false
else
return true
endif
endfunction
function KillAll takes nothing returns nothing
call KillUnit( GetEnumUnit() )
endfunction
function Trig_Battalion_death_Ctrl_Actions takes nothing returns nothing
local integer battallionIndex = LoadInteger(udg_hashtable, GetHandleId(GetDyingUnit()), 0)
local integer tempint
local real Xpos
local real Ypos
local boolean noOrder = false
local unit tempunit = GetDyingUnit()
local unit tempcommander
local location temppoint1
local location temppoint2
local location temppoint3
// Final death
if ( CountUnitsInGroup(udg_Battallion[battallionIndex]) == 1 and battallionIndex > 0 ) then
call GroupClear( udg_Battallion[battallionIndex])
return
endif
// Summoned
if ( LoadInteger(udg_hashtable, GetHandleId(GetDyingUnit()), udg_Summon ) == udg_BatalionHash_Guards ) then
call ForGroupBJ( udg_Battallion[battallionIndex], function KillAll )
return
endif
// Common troop
if ( LoadInteger(udg_hashtable, GetHandleId(GetDyingUnit()), 1 ) != 1 ) then
call GroupRemoveUnit( udg_Battallion[battallionIndex], GetDyingUnit())
return
else
call GroupRemoveUnit( udg_Battallion[battallionIndex], GetDyingUnit())
//if ( LoadInteger(udg_hashtable, GetHandleId(GetDyingUnit()), udg_Summon ) == udg_BatalionHash_Summonable ) then
// set tempunit = GroupPickRandomUnit(udg_Battallion[battallionIndex])
// call ReplaceUnitBJ( udg_Tempunit, GetUnitTypeId(GetDyingUnit()), bj_UNIT_STATE_METHOD_RELATIVE )
// call SetUnitOwner( tempunit, GetOwningPlayer(GetDyingUnit()), true )
// call
endif
set tempunit = GroupPickRandomUnit(udg_Battallion[battallionIndex])
if ( GetUnitCurrentOrder(tempunit) == String2OrderIdBJ("") ) then
//call BJDebugMsg("no order")
set noOrder = true
endif
call GroupAddUnit( udg_Battallion[battallionIndex], GetDyingUnit())
set tempcommander = GetDyingUnit()
set temppoint1 = GetUnitLoc(GetDyingUnit())
set temppoint2 = GetUnitLoc(tempunit)
set temppoint3 = GetRectCenter(GetPlayableMapRect())
call DisableTrigger( GetTriggeringTrigger() )
call DisableTrigger( gg_trg_Squad_Order_No_Target )
// dummy
set bj_lastCreatedUnit = CreateUnitAtLoc(GetOwningPlayer(GetDyingUnit()), 'n002', temppoint1, bj_UNIT_FACING)
call IssueImmediateOrder( bj_lastCreatedUnit, "resurrection" )
call RemoveUnit( bj_lastCreatedUnit )
// swap units
call SetUnitPositionLoc( tempunit, temppoint3 )
call SetUnitPositionLoc( GetDyingUnit(), temppoint2 )
call SetUnitPositionLoc( tempunit, temppoint1 )
// kill unit and remove from group
call ReplaceUnitBJ( tempunit, GetUnitTypeId(GetDyingUnit()), bj_UNIT_STATE_METHOD_MAXIMUM )
set tempunit = GetLastReplacedUnitBJ()
call SetUnitOwner( tempunit, GetOwningPlayer(GetDyingUnit()), true )
call KillUnit( tempunit )
call GroupRemoveUnit( udg_Battallion[battallionIndex], tempunit )
// reselect
if ( IsUnitInGroup(GetDyingUnit(), udg_Selected1[GetConvertedPlayerId(GetOwningPlayer(GetDyingUnit()))]) == true ) then
call SelectUnitAddForPlayer( GetDyingUnit(), GetOwningPlayer(GetDyingUnit()) )
endif
call EnableTrigger( gg_trg_Squad_Order_No_Target )
// pass order
set Xpos = LoadReal( udg_hashtable, GetHandleId(tempcommander) , udg_BatalionHash_TargetX )
set Ypos = LoadReal( udg_hashtable, GetHandleId(tempcommander) , udg_BatalionHash_TargetY )
set tempint = LoadInteger( udg_hashtable, GetHandleId(tempcommander), udg_BatalionHash_Order )
set tempunit = LoadUnitHandle( udg_hashtable, GetHandleId(tempcommander), udg_BatalionHash_TargetUnit )
if ( tempint != 0 and not (noOrder) ) then
if ( Xpos == 0 and Ypos == 0 ) then
call IssueTargetOrderById(tempcommander, tempint, tempunit )
else
call IssuePointOrderById(tempcommander, tempint, Xpos, Ypos )
endif
endif
call RemoveLocation(temppoint1)
call RemoveLocation(temppoint2)
call RemoveLocation(temppoint3)
// prevent moving
if ( GetPlayerController(GetOwningPlayer(GetDyingUnit())) == MAP_CONTROL_COMPUTER ) then
call RemoveGuardPosition( tempcommander )
endif
set tempunit = null
set tempcommander = null
call EnableTrigger( GetTriggeringTrigger() )
endfunction
//===========================================================================
function InitTrig_Squad_Death_Ctrl takes nothing returns nothing
set gg_trg_Squad_Death_Ctrl = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Squad_Death_Ctrl, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_Squad_Death_Ctrl, Condition( function Trig_Battalion_death_Ctrl_Conditions ) )
call TriggerAddAction( gg_trg_Squad_Death_Ctrl, function Trig_Battalion_death_Ctrl_Actions )
endfunction
//TESH.scrollpos=2
//TESH.alwaysfold=0
function ArtilleryType takes nothing returns boolean
local integer status = LoadInteger(udg_hashtable, GetHandleId(GetFilterUnit()), udg_Summon )
return (status == udg_BatalionHash_Crew or status == udg_BatalionHash_Beast) and LoadInteger(udg_hashtable, GetHandleId(GetFilterUnit()), 1 ) == 1
endfunction
function Trig_Crew_regroup_Actions takes nothing returns nothing
local integer batallionIndex
local group cannons = CreateGroup()
local unit tempunit
local location dest
call GroupEnumUnitsInRect(cannons, GetPlayableMapRect(), Filter(function ArtilleryType) )
loop
set tempunit = FirstOfGroup(cannons)
exitwhen (tempunit == null)
set batallionIndex = LoadInteger(udg_hashtable, GetHandleId(tempunit), 0)
set dest = GetUnitLoc(tempunit)
if ( GetUnitCurrentOrder(tempunit) != String2OrderIdBJ("") ) then
//call BJDebugMsg("Crew moving")
call GroupRemoveUnit( udg_Battallion[batallionIndex], tempunit )
call GroupPointOrderLoc( udg_Battallion[batallionIndex], "move", dest )
call GroupAddUnit( udg_Battallion[batallionIndex], tempunit )
call RemoveLocation(dest)
endif
call GroupRemoveUnit(cannons, tempunit)
endloop
call DestroyGroup(cannons)
endfunction
//===========================================================================
function InitTrig_Crew_Regroup takes nothing returns nothing
set gg_trg_Crew_Regroup = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_Crew_Regroup, 1.00 )
call TriggerAddAction( gg_trg_Crew_Regroup, function Trig_Crew_regroup_Actions )
endfunction
function Trig_Battalion_death_Ctrl_Crew_Conditions takes nothing returns boolean
local integer status = LoadInteger(udg_hashtable, GetHandleId(GetDyingUnit()), udg_Summon)
//call BJDebugMsg(I2S(status))
if ( status == udg_BatalionHash_Crew or status == udg_BatalionHash_Beast ) then
return true
else
return false
endif
endfunction
function NeutralCannon takes nothing returns nothing
local integer status = LoadInteger(udg_hashtable, GetHandleId(GetDyingUnit()), udg_Summon)
if ( status == udg_BatalionHash_Crew ) then
call SetUnitOwner( GetEnumUnit(), Player(PLAYER_NEUTRAL_PASSIVE), true )
elseif ( status == udg_BatalionHash_Beast ) then
call SetUnitOwner( GetEnumUnit(), Player(PLAYER_NEUTRAL_AGGRESSIVE), true )
endif
//call BJDebugMsg("neutral cannon")
endfunction
function FreeCrew takes nothing returns nothing
local integer battallionIndex = LoadInteger(udg_hashtable, GetHandleId(GetDyingUnit()), 0)
call KillUnit( GetEnumUnit() )
call GroupRemoveUnit( udg_Battallion[battallionIndex], GetEnumUnit() )
//call BJDebugMsg("free crew")
endfunction
function Trig_Battalion_death_Ctrl_Crew_Actions takes nothing returns nothing
local integer battallionIndex = LoadInteger(udg_hashtable, GetHandleId(GetDyingUnit()), 0)
if ( LoadIntegerBJ(1, GetHandleIdBJ(GetDyingUnit()), udg_hashtable) == 1 ) then //cannon destroyed
call ForGroup( udg_Battallion[battallionIndex], function FreeCrew )
call GroupClear( udg_Battallion[battallionIndex] )
else //crew killed
call GroupRemoveUnit( udg_Battallion[battallionIndex], GetDyingUnit() )
if ( CountUnitsInGroup(udg_Battallion[battallionIndex]) == 1 ) then
call ForGroup( udg_Battallion[battallionIndex], function NeutralCannon )
else
endif
endif
//call BJDebugMsg("unit died")
endfunction
//===========================================================================
function InitTrig_Artillery_Crew takes nothing returns nothing
set gg_trg_Artillery_Crew = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Artillery_Crew, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_Artillery_Crew, Condition( function Trig_Battalion_death_Ctrl_Crew_Conditions ) )
call TriggerAddAction( gg_trg_Artillery_Crew, function Trig_Battalion_death_Ctrl_Crew_Actions )
endfunction