//by Michael Peppers
function filter_Structure takes nothing returns boolean
return (IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == true)
endfunction
function filter_PlayingPlayers takes nothing returns boolean
return (GetPlayerSlotState(GetFilterPlayer()) == PLAYER_SLOT_STATE_PLAYING)
endfunction
function filter_EnemiesAlive takes nothing returns boolean
return (IsPlayerEnemy(GetFilterPlayer(), GetEnumPlayer()) == true) and (GetPlayerSlotState(GetFilterPlayer()) == PLAYER_SLOT_STATE_PLAYING)
endfunction
function Trig_Victory_Defeat_Conditions takes nothing returns boolean
return (GetPlayerSlotState(GetOwningPlayer(GetDyingUnit())) == PLAYER_SLOT_STATE_PLAYING) and (IsUnitGroupDeadBJ(GetUnitsOfPlayerMatching(GetOwningPlayer(GetDyingUnit()), Condition(function filter_Structure))) == true) and (GetOwningPlayer(GetDyingUnit()) != Player(PLAYER_NEUTRAL_AGGRESSIVE))
endfunction
function Trig_Victory_Defeat_VictoryLoop takes nothing returns nothing
if (CountPlayersInForceBJ(GetPlayersMatching(Condition(function filter_EnemiesAlive))) == 0) then
call CustomVictoryBJ(GetEnumPlayer(), true, true)
endif
endfunction
function Trig_Victory_Defeat_Actions takes nothing returns nothing
call CustomDefeatBJ(GetOwningPlayer(GetDyingUnit()), "Defeat!")
call DisplayTextToForce(GetPlayersByMapControl(MAP_CONTROL_USER), (GetPlayerName(GetOwningPlayer(GetDyingUnit())) + " has been defeated."))
call TriggerSleepAction(2.00)
call ForForce(GetPlayersMatching(Condition(function filter_PlayingPlayers)), function Trig_Victory_Defeat_VictoryLoop)
endfunction
//===========================================================================
function InitTrig_Victory_Defeat takes nothing returns nothing
set t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_DEATH)
call TriggerAddCondition(t, Condition(function Trig_Victory_Defeat_Conditions))
call TriggerAddAction(t, function Trig_Victory_Defeat_Actions)
endfunction