1. Updated Resource Submission Rules: All model & skin resource submissions must now include an in-game screenshot. This is to help speed up the moderation process and to show how the model and/or texture looks like from the in-game camera.
    Dismiss Notice
  2. DID YOU KNOW - That you can unlock new rank icons by posting on the forums or winning contests? Click here to customize your rank or read our User Rank Policy to see a list of ranks that you can unlock. Have you won a contest and still haven't received your rank award? Then please contact the administration.
    Dismiss Notice
  3. Rubbed the right way, the genie is out of its lamp! The 12th Concept Art Contest Results have been announced.
    Dismiss Notice
  4. The Lich King has a new champion. The results for the 19th Icon Contest are here!
    Dismiss Notice
  5. Race against the odds and Reforge, Don't Refund. The 14th Techtree Contest has begun!
    Dismiss Notice
  6. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

Solution Fix to this error-trigger in my map

Discussion in 'Requests' started by Darkslayerpowerfull, Jun 5, 2019.

  1. Darkslayerpowerfull

    Darkslayerpowerfull

    Joined:
    Jun 5, 2019
    Messages:
    3
    Resources:
    0
    Resources:
    0
    Hello, i'm a new there and i'm a br, so, sorry for my bad english.
    My question is: i edited a map melee to altered, put some triggers, hero, ability and etc.

    Custom hero limits is 52 and i have more, so i used this post to help me...
    A Brand New Custom Hero Limitation System.

    Which a i using this, the units and heroes of AI , when created, is send to center of map.... Why?

    Unregret say to create two triggers but i don't understand how and what do

    "Actually, there are two variables you should have to manually create yourself (HeroLimit_dummyLd and HeroLimit_heroDuringTrain). He forgot to add the testing map so here i re-upload here for someone who need to do the same"

    So, somewhere help me?
     
  2. Cespie

    Cespie

    Joined:
    May 21, 2019
    Messages:
    435
    Resources:
    0
    Resources:
    0
    It sounds a lot like the units you are spawning are being spawned at... well... the center of the playable map area? That's the default location for most actions.
    You need to assign actual spawn locations in the trigger that spawns the units.
     
  3. Darkslayerpowerfull

    Darkslayerpowerfull

    Joined:
    Jun 5, 2019
    Messages:
    3
    Resources:
    0
    Resources:
    0
    Hello, thanks for comment.
    My triggers i collet in maps downloadeds here, and worked normally. My jass code is for victory/defeat condition, and triggers for spawn more races, that is, there are not problems.
    Only when placing triggers from the post A Brand New Custom Hero Limitation System. 2.5 the units go to the center of the map. Why?
    I dont understand this:
    "Actually, there are two variables you should have to manually create yourself (HeroLimit_dummyLd and HeroLimit_heroDuringTrain). He forgot to add the testing map so here i re-upload here for someone who need to do the same"

    You can help me how to do this? or call him here "Unregret"
     
  4. Cespie

    Cespie

    Joined:
    May 21, 2019
    Messages:
    435
    Resources:
    0
    Resources:
    0
    Sounds a lot like a variable conflict or a trigger moving units.

    To check for a variable conflict, you could set the location that they are being spawned to right before they spawn.
    For units being moved, you can check this by setting a trigger that displays a message when units enter the region that you are trying to spawn the characters in. If the message pops up, the units are indeed being spawned there, but are being moved when they do.
     
  5. Darkslayerpowerfull

    Darkslayerpowerfull

    Joined:
    Jun 5, 2019
    Messages:
    3
    Resources:
    0
    Resources:
    0
    But how create this triggers? I don't how create, i'm noob in this. This is the my code for victory/defeat conditions. ( I don't create nothing, i copyed from the maps downloaded here, my map is for my playing fun)


    Code (Text):

    //===========================================================================
    // Counts key structures owned by a player and his or her allies, including
    // structures currently upgrading or under construction.
    //
    // Key structures: Town Hall, Great Hall, Tree of Life, Necropolis
    //

    function LivingPlayerHallsFilter takes nothing returns boolean
        return (IsUnitAliveBJ(GetFilterUnit()) and IsUnitType(GetFilterUnit(),UNIT_TYPE_TOWNHALL))
    endfunction

    function CountLivingPlayerTownHalls takes player whichPlayer returns integer
        local group g
        local integer matchedCount
        local boolexpr b=Filter(function LivingPlayerHallsFilter)

        set g = CreateGroup()
        call GroupEnumUnitsOfPlayer(g, whichPlayer, b)
        set matchedCount = CountUnitsInGroup(g)
        call DestroyGroup(g)
        call DestroyBoolExpr(b)
        set b=null
        set g=null

        return matchedCount
    endfunction

    function Custom_MeleeGetAllyKeyStructureCount takes player whichPlayer returns integer
        local integer    playerIndex
        local player     indexPlayer
        local integer    keyStructs

        // Count the number of buildings controlled by all not-yet-defeated co-allies.
        set keyStructs = 0
        set playerIndex = 0
        loop
            set indexPlayer = Player(playerIndex)
            if (PlayersAreCoAllied(whichPlayer, indexPlayer)) then
                set keyStructs = keyStructs + CountLivingPlayerTownHalls(indexPlayer)
            //    set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "townhall", true, true)
            //    set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "greathall", true, true)
            //    set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "treeoflife", true, true)
            //    set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "necropolis", true, true)
            //    set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "custom_h030", true, true)
            //    set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "custom_h01C", true, true)
            //    set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "custom_h012", true, true)
            //    set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "custom_h013", true, true)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h013',indexPlayer)//Never use group functions for this, just count living units for player. Much better idea.
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h014',indexPlayer)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h015',indexPlayer)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h01C',indexPlayer)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h01E',indexPlayer)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h01F',indexPlayer)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h012',indexPlayer)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h02F',indexPlayer)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h02J',indexPlayer)
            //    set keyStructs = keySructs + CountLivingPlayerUnitsOfTypeId('h030',indexPlayer)
             
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h000',indexPlayer)//Non-modded human custom ids
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h00D',indexPlayer)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h00E',indexPlayer)
             
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('o00C',indexPlayer)//Non-modded orc custom ids
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('o00D',indexPlayer)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('o00E',indexPlayer)
             
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('e00M',indexPlayer)//Non-modded night elf custom ids
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('e00N',indexPlayer)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('e00O',indexPlayer)
             
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('u00C',indexPlayer)//Non-modded undead custom ids
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('u00D',indexPlayer)
            //    set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('u00E',indexPlayer)
            endif
             
            set playerIndex = playerIndex + 1
            exitwhen playerIndex == bj_MAX_PLAYERS
        endloop

        return keyStructs
    endfunction







    //===========================================================================
    function Custom_MeleePlayerIsCrippled takes player whichPlayer returns boolean
        local integer allyStructures    = MeleeGetAllyStructureCount(whichPlayer)
        local integer allyKeyStructures = Custom_MeleeGetAllyKeyStructureCount(whichPlayer)

        // Dead teams are not considered to be crippled.
        return (allyStructures > 0) and (allyKeyStructures <= 0)
    endfunction



    //===========================================================================
    // Test each player to determine if anyone has become crippled.
    //
    function Custom_MeleeCheckForCrippledPlayers takes nothing returns nothing
        local integer    playerIndex
        local player     indexPlayer
        local force      crippledPlayers = CreateForce()
        local boolean    isNowCrippled
        local race       indexRace

        // The "finish soon" exposure of all players overrides any "crippled" exposure
        if bj_finishSoonAllExposed then
            return
        endif

        // Check each player to see if he or she has been crippled or uncrippled.
        set playerIndex = 0
        loop
            set indexPlayer = Player(playerIndex)
            set isNowCrippled = Custom_MeleePlayerIsCrippled(indexPlayer)

            if (not bj_playerIsCrippled[playerIndex] and isNowCrippled) then

                // Player became crippled; start their cripple timer.
                set bj_playerIsCrippled[playerIndex] = true
                call TimerStart(bj_crippledTimer[playerIndex], bj_MELEE_CRIPPLE_TIMEOUT, false, function MeleeCrippledPlayerTimeout)

                if (GetLocalPlayer() == indexPlayer) then
                    // Use only local code (no net traffic) within this block to avoid desyncs.

                    // Show the timer window.
                    call TimerDialogDisplay(bj_crippledTimerWindows[playerIndex], true)

                    // Display a warning message.
                    call DisplayTimedTextToPlayer(indexPlayer, 0, 0, bj_MELEE_CRIPPLE_MSG_DURATION, "|cffffcc00"+udg_RevealWarning+"|r")
                endif

            elseif (bj_playerIsCrippled[playerIndex] and not isNowCrippled) then

                // Player became uncrippled; stop their cripple timer.
                set bj_playerIsCrippled[playerIndex] = false
                call PauseTimer(bj_crippledTimer[playerIndex])

                if (GetLocalPlayer() == indexPlayer) then
                    // Use only local code (no net traffic) within this block to avoid desyncs.

                    // Hide the timer window for this player.
                    call TimerDialogDisplay(bj_crippledTimerWindows[playerIndex], false)

                    // Display a confirmation message if the player's team is still alive.
                    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

                // If the player granted shared vision, deny that vision now.
                call MeleeExposePlayer(indexPlayer, false)

            endif
             
            set playerIndex = playerIndex + 1
            exitwhen playerIndex == bj_MAX_PLAYERS
        endloop
    endfunction

    //===========================================================================
    // Determine if the lost unit should result in any defeats or victories.
    //
    function Custom_MeleeCheckLostUnit takes unit lostUnit returns nothing
        local player lostUnitOwner = GetOwningPlayer(lostUnit)

        // We only need to check for mortality if this was the last building.
        if (GetPlayerStructureCount(lostUnitOwner, true) <= 0) then
            call MeleeCheckForLosersAndVictors()
        endif

        // Check if the lost unit has crippled or uncrippled the player.
        // (A team with 0 units is dead, and thus considered uncrippled.)
        call Custom_MeleeCheckForCrippledPlayers()
    endfunction

    //===========================================================================
    // Determine if the gained unit should result in any defeats, victories,
    // or cripple-status changes.
    //
    function Custom_MeleeCheckAddedUnit takes unit addedUnit returns nothing
        local player addedUnitOwner = GetOwningPlayer(addedUnit)

        // If the player was crippled, this unit may have uncrippled him/her.
        if (bj_playerIsCrippled[GetPlayerId(addedUnitOwner)]) then
            call Custom_MeleeCheckForCrippledPlayers()
        endif
    endfunction

    //===========================================================================
    function Custom_MeleeTriggerActionConstructCancel takes nothing returns nothing
        call Custom_MeleeCheckLostUnit(GetCancelledStructure())
    endfunction

    //===========================================================================
    function Custom_MeleeTriggerActionUnitDeath takes nothing returns nothing
        if (IsUnitType(GetDyingUnit(), UNIT_TYPE_STRUCTURE)) then
            call Custom_MeleeCheckLostUnit(GetDyingUnit())
        endif
    endfunction

    //===========================================================================
    function Custom_MeleeTriggerActionUnitConstructionStart takes nothing returns nothing
        call Custom_MeleeCheckAddedUnit(GetConstructingStructure())
    endfunction

    //===========================================================================
    function Custom_MeleeTriggerActionAllianceChange takes nothing returns nothing
        call MeleeCheckForLosersAndVictors()
        call Custom_MeleeCheckForCrippledPlayers()
    endfunction

    //===========================================================================
    function MeleeInitVictoryDefeatCustomized 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 Custom_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 Custom_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 Custom_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 MeleeTriggerActionPlayerDefeated)

                // Set a trigger to fire whenever this player leaves
                set trig = CreateTrigger()
                call TriggerRegisterPlayerEvent(trig , indexPlayer , EVENT_PLAYER_LEAVE)
                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 Custom_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 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 Custom_MeleeTriggerActionAllianceChange)
    endfunction
     
    Please, i have erros in this triggers or codes?
     

    Attached Files: