HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

How to make a FFA victory condition?

06-26-2007, 06:21 PM#1
Callahan
I wanted to know if it's possible to make a free for all vistory condition in altered melee and using custom building as main.
I know it's possible but it's damn annoying to trigger.According leavers and unused slots.So can u tell me your fastest way to do it.
And my map will be finally playable.
06-26-2007, 06:57 PM#2
moyack
The best option is to make a custom one in JASS. It can be done converting a melee initialization trigger to jass, and modifying the parts which you need to be custom in your map.

I did one for my project and works perfectly. If you want, I can send you the code.
06-26-2007, 07:30 PM#3
Callahan
yes it would be helpful.
06-27-2007, 11:37 PM#4
moyack
Sorry for my delayed response, I've been a little bit busy

Here's my code:

Collapse Initialization Trigger:
//Initialization Code
function Trig_Melee_Initialization_SetPlayerColorText takes player p returns string
    //Set the color test in the text
    local playercolor pc = GetPlayerColor(p)
    local string color
    if pc == ConvertPlayerColor(0) then
        set color = "|CFFFF0000"
    elseif pc == ConvertPlayerColor(1) then
        set color = "|CFF0000FF"
    elseif pc == ConvertPlayerColor(2) then
        set color = "|CFF18E7BD"
    elseif pc == ConvertPlayerColor(3) then
        set color = "|CFF520084"
    elseif pc == ConvertPlayerColor(4) then
        set color = "|CFFFFFF00"
    elseif pc == ConvertPlayerColor(5) then
        set color = "|CFFFF8A08"
    elseif pc == ConvertPlayerColor(6) then
        set color = "|CFF18BE00"
    elseif pc == ConvertPlayerColor(7) then
        set color = "|CFFE759AD"
    elseif pc == ConvertPlayerColor(8) then
        set color = "|CFF949694"
    elseif pc == ConvertPlayerColor(9) then
        set color = "|CFF7BBEF7"
    elseif pc == ConvertPlayerColor(10) then
        set color = "|CFF086142"
    elseif pc == ConvertPlayerColor(11) then
        set color = "|CFF4A2800"
    else
        set color = "|CFFFFFFFF"
    endif
    set pc = null
    return color
endfunction

function Trig_Melee_Initialization_MeleeResult takes player whichPlayer,boolean leftGame, playergameresult gR returns nothing
    local trigger t = CreateTrigger()
    local dialog  d = DialogCreate()
    local string formatString
    if (leftGame) then
        set formatString = GetLocalizedString( "PLAYER_LEFT_GAME" )
    else
        if gR == PLAYER_GAME_RESULT_VICTORY then
            set formatString = GetLocalizedString( "PLAYER_VICTORIOUS" )
        else
            set formatString = GetLocalizedString( "PLAYER_DEFEATED" )
        endif
    endif
    if SubString(formatString, 0, 2) == "%s" then
        set formatString = SubString(formatString, 2, StringLength(formatString))
    endif
    call DisplayTimedTextToForce(GetPlayersAll(), 60, Trig_Melee_Initialization_SetPlayerColorText(whichPlayer) + GetPlayerName(whichPlayer) + "|r" + formatString)
    if gR == PLAYER_GAME_RESULT_VICTORY then
         call DialogSetMessage( d, GetLocalizedString( "GAMEOVER_VICTORY_MSG" ) )
        call DialogAddButton( d, GetLocalizedString( "GAMEOVER_CONTINUE_GAME" ), GetLocalizedHotkey("GAMEOVER_CONTINUE_GAME") )    
    else
        call DialogSetMessage( d, GetLocalizedString( "GAMEOVER_DEFEAT_MSG" ) )
        if (not bj_meleeGameOver and IsMapFlagSet(MAP_OBSERVERS_ON_DEATH)) then
            call DialogAddButton( d, GetLocalizedString( "GAMEOVER_CONTINUE_OBSERVING" ), GetLocalizedHotkey("GAMEOVER_CONTINUE_OBSERVING") )
        endif
    endif
    set t = CreateTrigger()
    call TriggerRegisterDialogButtonEvent( t, DialogAddQuitButton( d, true, GetLocalizedString( "GAMEOVER_QUIT_GAME" ), GetLocalizedHotkey("GAMEOVER_QUIT_GAME") ) )
    call DialogDisplay( whichPlayer, d, true )
    if gR == PLAYER_GAME_RESULT_VICTORY then
        call StartSoundForPlayerBJ( whichPlayer, bj_victoryDialogSound )
    else
        call StartSoundForPlayerBJ( whichPlayer, bj_defeatDialogSound )
    endif
endfunction

function Trig_Melee_Initialization_GameOverDialog takes player whichPlayer returns nothing
    local trigger t = CreateTrigger()
    local dialog  d = DialogCreate()
    local string  s = GetLocalizedString( "PLAYER_LEFT_GAME" )
    if SubString(s, 0, 2) == "%s" then
        set s = SubString(s, 2, StringLength(s))
    endif
    call DisplayTimedTextToForce(GetPlayersAll(), 60, Trig_Melee_Initialization_SetPlayerColorText(whichPlayer) + GetPlayerName(whichPlayer) + "|r" + s)
    if (GetIntegerGameState(GAME_STATE_DISCONNECTED) != 0) then
        set s = GetLocalizedString( "GAMEOVER_DISCONNECTED" )
    else
        set s = GetLocalizedString( "GAMEOVER_GAME_OVER" )
    endif
    call DialogSetMessage( d, s )
    set t = CreateTrigger()
    call TriggerRegisterDialogButtonEvent( t, DialogAddQuitButton( d, true, GetLocalizedString( "GAMEOVER_OK" ), GetLocalizedHotkey("GAMEOVER_OK") ) )
    call DialogDisplay( whichPlayer, d, true )
    call StartSoundForPlayerBJ( whichPlayer, bj_defeatDialogSound )
endfunction

function Trig_Melee_Initialization_RemovePlayerPreserveUnits takes player whichPlayer,playergameresult gameResult,boolean leftGame returns nothing
    if AllowVictoryDefeat(gameResult) then
        call RemovePlayer(whichPlayer, gameResult)
        if gameResult == PLAYER_GAME_RESULT_VICTORY or gameResult == PLAYER_GAME_RESULT_DEFEAT then
            call Trig_Melee_Initialization_MeleeResult(whichPlayer, leftGame, gameResult)
            return
        else
            call Trig_Melee_Initialization_GameOverDialog( whichPlayer )
        endif
    endif
endfunction

function Trig_Melee_Initialization_MeleeDoDefeatEnum takes nothing returns nothing
    local player thePlayer = GetEnumPlayer()
    call CachePlayerHeroData(thePlayer)
    call MakeUnitsPassiveForTeam(thePlayer)
    set bj_meleeDefeated[GetPlayerId(thePlayer)] = true
    call Trig_Melee_Initialization_RemovePlayerPreserveUnits(thePlayer, PLAYER_GAME_RESULT_DEFEAT, false)
endfunction

function Trig_Melee_Initialization_MeleeDoVictoryEnum takes nothing returns nothing
    local player thePlayer = GetEnumPlayer()
    local integer playerIndex = GetPlayerId(thePlayer)
    if (not bj_meleeVictoried[playerIndex]) then
        set bj_meleeVictoried[playerIndex] = true
        call CachePlayerHeroData(thePlayer)
        call Trig_Melee_Initialization_RemovePlayerPreserveUnits(thePlayer, PLAYER_GAME_RESULT_VICTORY, false)
    endif
endfunction

function Trig_Melee_Initialization_MeleeRemoveObservers takes nothing returns nothing
    local integer playerIndex
    local player indexPlayer
    set playerIndex = 0
    loop
        set indexPlayer = Player(playerIndex)
        if (IsPlayerObserver(indexPlayer)) then
            call Trig_Melee_Initialization_RemovePlayerPreserveUnits(indexPlayer, PLAYER_GAME_RESULT_NEUTRAL, false)
        endif
        set playerIndex = playerIndex + 1
        exitwhen playerIndex == bj_MAX_PLAYERS
    endloop
endfunction

function Trig_Melee_Initialization_CheckLosersVictors takes nothing returns nothing
    local integer playerIndex
    local player indexPlayer
    local force defeatedPlayers = CreateForce()
    local force victoriousPlayers
    if (bj_meleeGameOver) then
        return
    endif
    if (GetIntegerGameState(GAME_STATE_DISCONNECTED) != 0) then
        set bj_meleeGameOver = true
        return
    endif
    set playerIndex = 0
    loop
        set indexPlayer = Player(playerIndex)
        if (not bj_meleeDefeated[playerIndex] and not bj_meleeVictoried[playerIndex]) then
            if (MeleeGetAllyStructureCount(indexPlayer) <= 0) then
                call ForceAddPlayer(defeatedPlayers, Player(playerIndex))
                set bj_meleeDefeated[playerIndex] = true
            endif
        endif
        set playerIndex = playerIndex + 1
        exitwhen playerIndex == bj_MAX_PLAYERS
    endloop
    set victoriousPlayers = MeleeCheckForVictors()
    call ForForce(defeatedPlayers, function Trig_Melee_Initialization_MeleeDoDefeatEnum)
    call ForForce(victoriousPlayers, function Trig_Melee_Initialization_MeleeDoVictoryEnum)
    if (bj_meleeGameOver) then
        call Trig_Melee_Initialization_MeleeRemoveObservers()
    endif
endfunction

function Trig_Melee_Initialization_Get_TownHall takes nothing returns boolean
    local unit u = GetFilterUnit()
    local boolean b = IsUnitType(u, UNIT_TYPE_TOWNHALL) == true
    set u = null
    return b
endfunction

function Trig_Melee_Initialization_Count_TownHall takes player p returns integer
    local boolexpr Cnd = Condition( function Trig_Melee_Initialization_Get_TownHall )
    local group g = GetUnitsOfPlayerMatching(p, Cnd)
    local integer c = CountUnitsInGroup(g)
    call DestroyGroup(g)
    set Cnd = null
    set g = null
    return c
endfunction

function Trig_Melee_Initialization_MeleeGetAllyKeyStructureCount takes player whichPlayer returns integer
    local integer playerIndex
    local player indexPlayer
    local integer keyStructs
    set keyStructs = 0
    set playerIndex = 0
    loop
        set indexPlayer = Player(playerIndex)
        if (PlayersAreCoAllied(whichPlayer, indexPlayer)) then
            set keyStructs = Trig_Melee_Initialization_Count_TownHall(indexPlayer)
        endif
        set playerIndex = playerIndex + 1
        exitwhen playerIndex == bj_MAX_PLAYERS
    endloop
    return keyStructs
endfunction

function Trig_Melee_Initialization_MeleePlayerIsCrippled takes player whichPlayer returns boolean
    local integer allyStructures = MeleeGetAllyStructureCount(whichPlayer)
    local integer allyKeyStructures = Trig_Melee_Initialization_MeleeGetAllyKeyStructureCount(whichPlayer)
    return (allyStructures > 0) and (allyKeyStructures <= 0)
endfunction

function Trig_Melee_Initialization_GetRaceMessage takes player p returns string
    // Change the player race conditionals by the ones you need
    local string s = "You will be revealed to your opponents unless you build a "
    local race r = GetPlayerRace(p)
    if r == RACE_HUMAN or r == RACE_NIGHTELF then
        set s = s + UnitId2String('nntt')
    else
        set s = s + UnitId2String('u000')
    endif
    set r = null
    return s 
endfunction

function Trig_Melee_Initialization_MeleeGetCrippledRevealedMessage takes player whichPlayer returns string
    return GetLocalizedString("CRIPPLE_REVEALING_PREFIX") + Trig_Melee_Initialization_SetPlayerColorText(whichPlayer) + GetPlayerName(whichPlayer) + "|r" + GetLocalizedString("CRIPPLE_REVEALING_POSTFIX")
endfunction

function Trig_Melee_Initialization_MeleeCrippledPlayerTimeout takes nothing returns nothing
    local timer expiredTimer = GetExpiredTimer()
    local integer playerIndex
    local player  exposedPlayer
    set playerIndex = 0
    loop
        if (bj_crippledTimer[playerIndex] == expiredTimer) then
            exitwhen true
        endif
        set playerIndex = playerIndex + 1
        exitwhen playerIndex == bj_MAX_PLAYERS
    endloop
    if (playerIndex == bj_MAX_PLAYERS) then
        return
    endif
    set exposedPlayer = Player(playerIndex)
    if (GetLocalPlayer() == exposedPlayer) then
        call TimerDialogDisplay(bj_crippledTimerWindows[playerIndex], false)
    endif
    call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, bj_MELEE_CRIPPLE_MSG_DURATION, Trig_Melee_Initialization_MeleeGetCrippledRevealedMessage(exposedPlayer))
    call MeleeExposePlayer(exposedPlayer, true)
endfunction

function Trig_Melee_Initialization_MeleeCheckForCrippledPlayers takes nothing returns nothing
    local integer playerIndex
    local player indexPlayer
    local boolean isNowCrippled
    if bj_finishSoonAllExposed then
        return
    endif
    set playerIndex = 0
    loop
        set indexPlayer = Player(playerIndex)
        set isNowCrippled = Trig_Melee_Initialization_MeleePlayerIsCrippled(indexPlayer)
        if (not bj_playerIsCrippled[playerIndex] and isNowCrippled) then
            set bj_playerIsCrippled[playerIndex] = true
            call TimerStart(bj_crippledTimer[playerIndex], bj_MELEE_CRIPPLE_TIMEOUT, false, function Trig_Melee_Initialization_MeleeCrippledPlayerTimeout)
            if (GetLocalPlayer() == indexPlayer) then
                call TimerDialogDisplay(bj_crippledTimerWindows[playerIndex], true)
                call DisplayTimedTextToPlayer(indexPlayer, 0, 0, bj_MELEE_CRIPPLE_MSG_DURATION, Trig_Melee_Initialization_GetRaceMessage(indexPlayer))
            endif
        elseif (bj_playerIsCrippled[playerIndex] and not isNowCrippled) then
            set bj_playerIsCrippled[playerIndex] = false
            call PauseTimer(bj_crippledTimer[playerIndex])
            if (GetLocalPlayer() == indexPlayer) then
                call TimerDialogDisplay(bj_crippledTimerWindows[playerIndex], false)
                if (MeleeGetAllyStructureCount(indexPlayer) > 0) then
                    if (bj_playerIsExposed[playerIndex]) then
                        call DisplayTimedTextToPlayer(indexPlayer, 0, 0, bj_MELEE_CRIPPLE_MSG_DURATION, GetLocalizedString("CRIPPLE_UNREVEALED"))
                    else
                        call DisplayTimedTextToPlayer(indexPlayer, 0, 0, bj_MELEE_CRIPPLE_MSG_DURATION, GetLocalizedString("CRIPPLE_UNCRIPPLED"))
                    endif
                endif
            endif
            call MeleeExposePlayer(indexPlayer, false)
        endif
        set playerIndex = playerIndex + 1
        exitwhen playerIndex == bj_MAX_PLAYERS
    endloop
endfunction

function Trig_Melee_Initialization_MeleeCheckLostUnit takes unit lostUnit returns nothing
    local player lostUnitOwner = GetOwningPlayer(lostUnit)
    if (GetPlayerStructureCount(lostUnitOwner, true) <= 0) then
        call Trig_Melee_Initialization_CheckLosersVictors()
    endif
    call Trig_Melee_Initialization_MeleeCheckForCrippledPlayers()
endfunction

function Trig_Melee_Initialization_MeleeTriggerActionConstructCancel takes nothing returns nothing
    call Trig_Melee_Initialization_MeleeCheckLostUnit(GetCancelledStructure())
endfunction

function Trig_Melee_Initialization_MeleeTriggerActionUnitDeath takes nothing returns nothing
    if (IsUnitType(GetDyingUnit(), UNIT_TYPE_STRUCTURE)) then
        call Trig_Melee_Initialization_MeleeCheckLostUnit(GetDyingUnit())
    endif
endfunction

function Trig_Melee_Initialization_MeleeCheckAddedUnit takes unit addedUnit returns nothing
    local player addedUnitOwner = GetOwningPlayer(addedUnit)
    if (bj_playerIsCrippled[GetPlayerId(addedUnitOwner)]) then
        call Trig_Melee_Initialization_MeleeCheckForCrippledPlayers()
    endif
endfunction

function Trig_Melee_Initialization_MeleeTriggerActionUnitConstructionStart takes nothing returns nothing
    call Trig_Melee_Initialization_MeleeCheckAddedUnit(GetConstructingStructure())
endfunction

function Trig_Melee_Initialization_MeleeTriggerActionAllianceChange takes nothing returns nothing
    call Trig_Melee_Initialization_CheckLosersVictors()
    call Trig_Melee_Initialization_MeleeCheckForCrippledPlayers()
endfunction

function Trig_Melee_Initialization_MeleeVictoryDefeat takes nothing returns nothing
    local trigger    trig
    local integer    index
    local player     indexPlayer
    set bj_finishSoonTimerDialog = CreateTimerDialog(null)
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)
    set index = 0 
    loop
        set indexPlayer = Player(index)
        if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
            set bj_meleeDefeated[index] = false
            set bj_meleeVictoried[index] = false
            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 trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null)
            call TriggerAddAction(trig, function Trig_Melee_Initialization_MeleeTriggerActionConstructCancel)
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null)
            call TriggerAddAction(trig, function Trig_Melee_Initialization_MeleeTriggerActionUnitDeath)
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null)
            call TriggerAddAction(trig, function Trig_Melee_Initialization_MeleeTriggerActionUnitConstructionStart)
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
            set trig = CreateTrigger()
            call TriggerRegisterPlayerAllianceChange(trig, indexPlayer, ALLIANCE_PASSIVE)
            call TriggerRegisterPlayerStateEvent(trig, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1)
            call TriggerAddAction(trig, function Trig_Melee_Initialization_MeleeTriggerActionAllianceChange)
        else
            set bj_meleeDefeated[index] = true
            set bj_meleeVictoried[index] = false
            if (IsPlayerObserver(indexPlayer)) then
                set trig = CreateTrigger()
                call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
                call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
            endif
        endif
        set index = index + 1
        exitwhen index == bj_MAX_PLAYERS
    endloop
    call TimerStart(CreateTimer(), 2.0, false, function Trig_Melee_Initialization_MeleeTriggerActionAllianceChange)
endfunction

function Trig_Melee_Initialization_Preload_Heroes takes nothing returns nothing
    // Preload units
    local unit u
    local integer array uid
    local integer i = 0
    set uid[0] = 'H001' //Naga Warqueen
    set uid[1] = 'H002' //Naga Enchantress
    set uid[2] = 'H003' //Naga Imperial Warrior
    set uid[3] = 'H005' //Venom Warrior
    set uid[4] = 'U005' //Arachnian Queen
    set uid[5] = 'H000' //Inferno Warrior
    set uid[6] = 'N013' //Brutal Lord
    set uid[7] = 'N014' //Lord of Darkness
    loop
        exitwhen i > 7
        set u = CreateUnit(Player(15), uid[i], 0, 0, 0)
        call RemoveUnit(u)
        set i = i + 1
    endloop
    set u =null
endfunction

function Trig_Melee_Initialization_HeroLimit takes nothing returns nothing
    local integer index
    set index = 0
    loop
        call SetPlayerMaxHeroesAllowed(3, Player(index))
        call ReducePlayerTechMaxAllowed(Player(index), 'H001', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'H002', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'H003', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'H005', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'U005', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'H000', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'N013', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'N014', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'Npbm', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'Nbrn', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'Nngs', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'Nplh', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'Nbst', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'Nalc', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'Ntin', 1)
        call ReducePlayerTechMaxAllowed(Player(index), 'Nfir', 1)
        set index = index + 1
        exitwhen index == 12
    endloop
endfunction

function Trig_Melee_Initialization_Is_Playing takes integer p returns boolean
    // Indicates if the player slot is playing
    return GetPlayerSlotState(Player(p)) == PLAYER_SLOT_STATE_PLAYING
endfunction

function Trig_Melee_Initialization_Starting_Resources takes nothing returns nothing
    // Set the starting resources for all players
    local integer i = 0
    loop
        exitwhen i == 12
        if Trig_Melee_Initialization_Is_Playing(i) then
            call SetPlayerState( Player(i), PLAYER_STATE_RESOURCE_GOLD, 550 )
            call SetPlayerState( Player(i), PLAYER_STATE_RESOURCE_LUMBER, 210 )
        endif
        set i = i + 1
    endloop
endfunction

function Trig_Melee_Initialization_Is_Naga takes integer p returns boolean
    // Indicates if the player race must be set as Naga
    local boolean b1 = GetPlayerRace(Player(p)) == RACE_HUMAN
    local boolean b2 = GetPlayerRace(Player(p)) == RACE_NIGHTELF
    local boolean b3 = Trig_Melee_Initialization_Is_Playing(p)
    return (b1 or b2) and b3
endfunction

function Trig_Melee_Initialization_Is_Demon takes integer p returns boolean
    // Indicates if the player race must be set as Demon
    local boolean b1 = GetPlayerRace(Player(p)) == RACE_ORC
    local boolean b2 = GetPlayerRace(Player(p)) == RACE_UNDEAD
    local boolean b3 = Trig_Melee_Initialization_Is_Playing(p)
    return (b1 or b2) and b3
endfunction

function Trig_Melee_Initialization_Set_Town_Hall takes integer p returns integer
    // Returns the correct town Hall ID
    if Trig_Melee_Initialization_Is_Naga(p) then
        return 'nntt'
    elseif Trig_Melee_Initialization_Is_Demon(p) then
        return 'u000'
    else
        return 0
    endif 
endfunction

function Trig_Melee_Initialization_Set_Peon takes integer p returns integer
    // Returns the correct worker ID
    if Trig_Melee_Initialization_Is_Naga(p) then
        return 'nmpe'
    elseif Trig_Melee_Initialization_Is_Demon(p) then
        return 'u001'
    else
        return 0
    endif 
endfunction

function Trig_Melee_Initialization_StartingUnits takes integer p returns nothing
    // Start the units for each active player
    local player Pl = Player(p)
    local location lp = GetStartLocationLoc(GetPlayerStartLocation(Pl))
    local boolean useRandomHero = IsMapFlagSet(MAP_RANDOM_HERO)
    local real unitSpacing = 64.00
    local unit nearestMine = MeleeFindNearestMine(lp, bj_MELEE_MINE_SEARCH_RADIUS)
    local location nearMineLoc
    local location heroLoc
    local real peonX
    local real peonY
    local integer TownHID = Trig_Melee_Initialization_Set_Town_Hall(p)
    local integer PeonID = Trig_Melee_Initialization_Set_Peon(p)
    call CreateUnitAtLoc(Pl, TownHID, lp, bj_UNIT_FACING)
    if nearestMine != null then
        set nearMineLoc = MeleeGetProjectedLoc(GetUnitLoc(nearestMine), lp, 320, 0)
        set peonX = GetLocationX(nearMineLoc)
        set peonY = GetLocationY(nearMineLoc)
        call CreateUnit(Pl, PeonID, peonX + 0.00 * unitSpacing, peonY + 1.00 * unitSpacing, bj_UNIT_FACING)
        call CreateUnit(Pl, PeonID, peonX + 1.00 * unitSpacing, peonY + 0.15 * unitSpacing, bj_UNIT_FACING)
        call CreateUnit(Pl, PeonID, peonX - 1.00 * unitSpacing, peonY + 0.15 * unitSpacing, bj_UNIT_FACING)
        call CreateUnit(Pl, PeonID, peonX + 0.60 * unitSpacing, peonY - 1.00 * unitSpacing, bj_UNIT_FACING)
        call CreateUnit(Pl, PeonID, peonX - 0.60 * unitSpacing, peonY - 1.00 * unitSpacing, bj_UNIT_FACING)
        set heroLoc = MeleeGetProjectedLoc(nearMineLoc, lp, 384, 45)
    else
        set peonX = GetLocationX(lp)
        set peonY = GetLocationY(lp) - 224.00
        call CreateUnit(Pl, PeonID, peonX + 2.00 * unitSpacing, peonY + 0.00 * unitSpacing, bj_UNIT_FACING)
        call CreateUnit(Pl, PeonID, peonX + 1.00 * unitSpacing, peonY + 0.00 * unitSpacing, bj_UNIT_FACING)
        call CreateUnit(Pl, PeonID, peonX + 0.00 * unitSpacing, peonY + 0.00 * unitSpacing, bj_UNIT_FACING)
        call CreateUnit(Pl, PeonID, peonX - 1.00 * unitSpacing, peonY + 0.00 * unitSpacing, bj_UNIT_FACING)
        call CreateUnit(Pl, PeonID, peonX - 2.00 * unitSpacing, peonY + 0.00 * unitSpacing, bj_UNIT_FACING)
        set heroLoc = Location(peonX, peonY - 2.00 * unitSpacing)
    endif
    if useRandomHero then
        if Trig_Melee_Initialization_Is_Naga(p) then
            call MeleeRandomHeroLoc(Pl, 'H001', 'H002', 'H003', 'H005', heroLoc)
        elseif Trig_Melee_Initialization_Is_Demon(p) then
            call MeleeRandomHeroLoc(Pl, 'U005', 'H000', 'N013', 'N014', heroLoc)
        endif
    else
        call SetPlayerState(Pl, PLAYER_STATE_RESOURCE_HERO_TOKENS, bj_MELEE_STARTING_HERO_TOKENS)
    endif
    call SetCameraPositionForPlayer(Pl, peonX, peonY)
    call SetCameraQuickPositionForPlayer(Pl, peonX, peonY)
    call RemoveLocation(lp)
    call RemoveLocation(nearMineLoc)
    call RemoveLocation(heroLoc)
    set Pl = null
    set lp = null
    set nearestMine = null
    set nearMineLoc = null
    set heroLoc = null
endfunction

function Trig_Melee_Initialization_Actions takes nothing returns nothing
    local integer i = 0
    call Trig_Melee_Initialization_Preload_Heroes()
    call CinematicFadeBJ( bj_CINEFADETYPE_FADEOUT, 0.00, "ReplaceableTextures\\CameraMasks\\Black_mask.blp", 0, 0, 0, 0 )
    call DisplayTimedTextToForce( GetPlayersAll(), 3.00, "|cffffff00Power of Corruption" )
    call DisplayTimedTextToForce( GetPlayersAll(), 3.00, "|CFF00FF00By MOYACK. 2006." )
    call DisplayTimedTextToForce( GetPlayersAll(), 3.00, "|cffffff00Press F9 for basic help and credits" )
    call TriggerSleepAction( 3.00 )
    call SetFloatGameState(GAME_STATE_TIME_OF_DAY, bj_MELEE_STARTING_TOD)
    call MeleeGrantHeroItems()
    call MeleeClearExcessUnits()
    call Trig_Melee_Initialization_HeroLimit()
    call Trig_Melee_Initialization_Starting_Resources()
    loop
        if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
            call Trig_Melee_Initialization_StartingUnits(i)
        endif
        set i = i + 1
        exitwhen i == bj_MAX_PLAYERS
    endloop
    call TriggerExecute( gg_trg_Starting_normal_players_AI )
    call CinematicFadeBJ( bj_CINEFADETYPE_FADEIN, 5.00, "ReplaceableTextures\\CameraMasks\\Black_mask.blp", 0, 0, 0, 0 )
    call Trig_Melee_Initialization_MeleeVictoryDefeat()
    call DestroyTrigger( GetTriggeringTrigger() )
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 )
endfunction

The functions with yellow background are the ones which you should modify in your map, probably I'm miss one or two. The best way to know that is by testing. I hope it helps you with your project.
06-28-2007, 01:16 AM#5
Callahan
Thx but your code is too complex i just want to a player win with victory message if all others left or have been defeated.