Name | Type | is_array | initial_value |
function Trig_Camera_Reset_Actions takes nothing returns nothing
call ResetToGameCameraForPlayer( GetTriggerPlayer(), 0 )
call SetCameraFieldForPlayer( GetTriggerPlayer(), CAMERA_FIELD_TARGET_DISTANCE, 2100.00, 0 )
endfunction
//===========================================================================
function InitTrig_Camera_Reset takes nothing returns nothing
set gg_trg_Camera_Reset = CreateTrigger( )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(0) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(1) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(2) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(3) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(4) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(5) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(6) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(7) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(8) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(9) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(10) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(11) )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Camera_Reset,Player(12) )
call TriggerAddAction( gg_trg_Camera_Reset, function Trig_Camera_Reset_Actions )
endfunction
function myLose takes nothing returns nothing
local gamecache g = InitGameCache("MMD.Dat")
call StoreInteger(g, "val:2", "FlagP "+I2S(GetPlayerId(GetTriggerPlayer()))+" loser", 1)
call StoreInteger(g, "chk:2", "2", 1)
call SyncStoredInteger(g, "val:2", "FlagP "+I2S(GetPlayerId(GetTriggerPlayer()))+" loser")
call SyncStoredInteger(g, "chk:2", "2")
call FlushGameCache(g)
set g = null
endfunction
function myChkLose takes nothing returns nothing
if(GetPlayerStructureCount(GetTriggerPlayer(),true)==0) then
call myLose()
endif
endfunction
function Trig_setResultsVictory_Actions takes nothing returns nothing
local gamecache g = InitGameCache("MMD.Dat")
call StoreInteger(g, "val:1", "FlagP "+I2S(GetPlayerId(GetTriggerPlayer()))+" winner", 1)
call StoreInteger(g, "chk:1", "1", 1)
call SyncStoredInteger(g, "val:1", "FlagP "+I2S(GetPlayerId(GetTriggerPlayer()))+" winner")
call SyncStoredInteger(g, "chk:1", "1")
call FlushGameCache(g)
set g = null
endfunction
function myMeleeInitVictoryDefeat takes nothing returns nothing
local trigger trig
local integer index
local player indexPlayer
// Create a timer window for the "finish soon" timeout period, it has no timer
// because it is driven by real time (outside of the game state to avoid desyncs)
set bj_finishSoonTimerDialog = CreateTimerDialog(null)
// Set a trigger to fire when we receive a "finish soon" game event
set trig = CreateTrigger()
call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON)
call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)
// Set a trigger to fire when we receive a "finish now" game event
set trig = CreateTrigger()
call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW)
call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)
// Set up each player's mortality code.
set index = 0
loop
set indexPlayer = Player(index)
// Make sure this player slot is playing.
if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
set bj_meleeDefeated[index] = false
set bj_meleeVictoried[index] = false
// Create a timer and timer window in case the player is crippled.
set bj_playerIsCrippled[index] = false
set bj_playerIsExposed[index] = false
set bj_crippledTimer[index] = CreateTimer()
set bj_crippledTimerWindows[index] = CreateTimerDialog(bj_crippledTimer[index])
call TimerDialogSetTitle(bj_crippledTimerWindows[index], MeleeGetCrippledTimerMessage(indexPlayer))
// Set a trigger to fire whenever a building is cancelled for this player.
set trig = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null)
call TriggerAddAction(trig, function myChkLose)
call TriggerAddAction(trig, function MeleeTriggerActionConstructCancel)
// Set a trigger to fire whenever a unit dies for this player.
set trig = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null)
call TriggerAddAction(trig, function myChkLose)
call TriggerAddAction(trig, function MeleeTriggerActionUnitDeath)
// Set a trigger to fire whenever a unit begins construction for this player
set trig = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null)
call TriggerAddAction(trig, function MeleeTriggerActionUnitConstructionStart)
// Set a trigger to fire whenever this player defeats-out
set trig = CreateTrigger()
call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT)
call TriggerAddAction(trig, function myLose)
call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)
// Set a trigger to fire whenever this player leaves
set trig = CreateTrigger()
call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
call TriggerAddAction(trig, function myLose)
call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
// Set a trigger to fire whenever this player changes his/her alliances.
set trig = CreateTrigger()
call TriggerRegisterPlayerAllianceChange(trig, indexPlayer, ALLIANCE_PASSIVE)
call TriggerRegisterPlayerStateEvent(trig, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1)
call TriggerAddAction(trig, function MeleeTriggerActionAllianceChange)
else
set bj_meleeDefeated[index] = true
set bj_meleeVictoried[index] = false
// Handle leave events for observers
if (IsPlayerObserver(indexPlayer)) then
// Set a trigger to fire whenever this player leaves
set trig = CreateTrigger()
call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
call TriggerAddAction(trig, function myLose)
call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
endif
endif
set index = index + 1
exitwhen index == bj_MAX_PLAYERS
endloop
// Test for victory / defeat at startup, in case the user has already won / lost.
// Allow for a short time to pass first, so that the map can finish loading.
call TimerStart(CreateTimer(), 2.0, false, function MeleeTriggerActionAllianceChange)
endfunction
function psMeleeStartingHeroLimit takes nothing returns nothing
local integer index
set index = 0
loop
// max heroes per player
call SetPlayerMaxHeroesAllowed(bj_MELEE_HERO_LIMIT, Player(index))
// each player is restricted to a limit per hero type as well
call ReducePlayerTechMaxAllowed(Player(index), 'Hamg', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'H000', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Hmkg', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Hpal', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Hblm', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Obla', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Ofar', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Otch', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Oshd', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Edem', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Ekee', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Emoo', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Ewar', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Udea', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Udre', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Ulic', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Ucrl', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Npbm', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Nbrn', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Nngs', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Nplh', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Nbst', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Nalc', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Ntin', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Nfir', bj_MELEE_HERO_TYPE_LIMIT)
set index = index + 1
exitwhen index == bj_MAX_PLAYERS
endloop
endfunction
function Trig_Melee_Initialization_Actions takes nothing returns nothing
call MeleeStartingVisibility( )
call MeleeStartingHeroLimit( )
call MeleeGrantHeroItems( )
call MeleeStartingResources( )
call MeleeClearExcessUnits( )
call MeleeStartingUnits( )
call MeleeStartingAI( )
call myMeleeInitVictoryDefeat( )
call psMeleeStartingHeroLimit( )
//call SetCameraFieldForPlayer( GetLocalPlayer(), CAMERA_FIELD_TARGET_DISTANCE, 2100.00, 0 )
endfunction
//=====================================================================
function pack takes string value returns string
local integer j
local integer i = 0
local string result = ""
local string c
loop //for each character in argument string
exitwhen i >= StringLength(value)
set c = SubString(value, i, i+1)
set j = 0
loop //for each character in escaped chars string
exitwhen j >= StringLength(" \\")
//escape control characters
if c == SubString(" \\", j, j+1) then
set c = "\\" + c
exitwhen true
endif
set j = j + 1
endloop
set result = result + c
set i = i + 1
endloop
return result
endfunction
function Trig_initResults_Actions takes nothing returns nothing
local integer i
local gamecache g = InitGameCache("MMD.Dat")
set i = 0
loop
exitwhen i >= 12
if GetPlayerController(Player(i)) == MAP_CONTROL_USER and GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
call StoreInteger(g, "val:999"+I2S(i), "init pid " + I2S(i) + " " + pack(GetPlayerName(Player(i))), 1)
call StoreInteger(g, "chk:999"+I2S(i), "999"+I2S(i) , 1)
call SyncStoredInteger(g, "val:999"+I2S(i), "init pid " + I2S(i) + " " + pack(GetPlayerName(Player(i))))
call SyncStoredInteger(g, "chk:999"+I2S(i), "999"+I2S(i))
endif
set i = i + 1
endloop
set i = 0
loop
exitwhen i >= 12
if GetPlayerController(Player(i)) == MAP_CONTROL_USER and GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
call StoreInteger(g, "val:1", "FlagP "+I2S(GetPlayerId(Player(i)))+" winner", 1)
call StoreInteger(g, "chk:1", "1", 1)
call SyncStoredInteger(g, "val:1", "FlagP "+I2S(GetPlayerId(Player(i)))+" winner")
call SyncStoredInteger(g, "chk:1", "1")
endif
set i = i + 1
endloop
call StoreInteger(g, "val:1", "FlagP "+I2S(GetPlayerId(GetTriggerPlayer()))+" winner", 1)
call StoreInteger(g, "chk:1", "1", 1)
call SyncStoredInteger(g, "val:1", "FlagP "+I2S(GetPlayerId(GetTriggerPlayer()))+" winner")
call SyncStoredInteger(g, "chk:1", "1")
call FlushGameCache(g)
set g = null
endfunction
function Trig_CameraTrigger_Actions takes nothing returns nothing
call SetCameraFieldForPlayer( GetLocalPlayer(), CAMERA_FIELD_TARGET_DISTANCE, 2100.00, 0 )
endfunction
//===========================================================================
function InitTrig_Melee_Initialization takes nothing returns nothing
set gg_trg_Melee_Initialization = CreateTrigger( )
call TriggerAddAction( gg_trg_Melee_Initialization, function Trig_Melee_Initialization_Actions )
call TriggerAddAction( gg_trg_Melee_Initialization, function Trig_initResults_Actions )
endfunction