Untitled

 avatar
unknown
plain_text
5 days ago
4.5 kB
4
Indexable
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /Fortnite.com/Teams }
using { /Fortnite.com/Game }
using { /Fortnite.com/AI }
using { /Fortnite.com/Characters }
using { /UnrealEngine.com/Temporary/Diagnostics }

Game_Manager := class(creative_device):

    var PlayerMap : [player]int = map{}
    var ElimsToEndGame : int = 99
    @editable var WeaponGranters : []item_granter_device = array{}
    @editable EndGameDevice : end_game_device = end_game_device{}
    @editable var RemoteGranter : item_granter_device = item_granter_device{}
    @editable var Sentries : []sentry_device = array{}
    @editable var Guards : []guard_spawner_device = array{}

    OnBegin<override>()<suspends>:void=
        set ElimsToEndGame = WeaponGranters.Length
        InitPlayers()
        GrantRemoteToAllPlayers() # Grant remotes at game start
        GrantRemoteToAllSentries() # Grant remotes to all sentries at game start
        GrantRemoteToAllGuards() # Grant remotes to all guards at game start
        GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerJoined)

        # Subscribe to sentry elimination events
        for (Sentry : Sentries):
            Sentry.EliminatedEvent.Subscribe(OnSentryEliminated)

        # Subscribe to guard elimination events
        for (Guard : Guards):
            Guard.EliminatedEvent.Subscribe(OnGuardEliminated)

    InitPlayers() : void=
        AllPlayers := GetPlayspace().GetPlayers()
        for (Player : AllPlayers, FortCharacter := Player.GetFortCharacter[]):
            if (set PlayerMap[Player] = 0, WeaponTier := PlayerMap[Player]):
                FortCharacter.EliminatedEvent().Subscribe(OnPlayerElim)
                GrantWeapon(Player, WeaponTier)

    OnPlayerJoined(Player : player):void=
        SetupPlayerAfterJoin(Player)
        GrantRemoteToPlayer(Player)

    SetupPlayerAfterJoin(Player : player) : void =
        if (FortCharacter := Player.GetFortCharacter[]):
            var WeaponTier : int = 0
            if (ExistingTier := PlayerMap[Player]):
                set WeaponTier = ExistingTier
            else:
                if (set PlayerMap[Player] = 0) {}
            FortCharacter.EliminatedEvent().Subscribe(OnPlayerElim)
            GrantWeapon(Player, WeaponTier)    

    GrantWeapon(Player : player, WeaponTier: int) : void=
        if (ItemGranter := WeaponGranters[WeaponTier]):
            ItemGranter.GrantItem(Player)    

    GrantRemoteToAllPlayers() : void=
        AllPlayers := GetPlayspace().GetPlayers()
        for (Player : AllPlayers):
            GrantRemoteToPlayer(Player)

    GrantRemoteToPlayer(Player : player) : void=
        RemoteGranter.GrantItem(Player)

    GrantRemoteToAllSentries() : void=
        for (Sentry : Sentries):
            Sentry.Enable() 

    GrantRemoteToAllGuards() : void=
        for (Guard : Guards):
            Guard.Enable() 

    OnPlayerElim(Result : elimination_result) : void=
        Eliminator := Result.EliminatingCharacter
        Eliminated := Result.EliminatedCharacter
    # Only promote if eliminator exists and is not the same as eliminated
        if (Eliminator?, Eliminated <> Eliminator?):
            if (EliminatingAgent := Eliminator?.GetAgent[]):
                PlayerPromotion(EliminatingAgent)
    # Updated to accept device_ai_interaction_result
    OnGuardEliminated(Result : device_ai_interaction_result) : void=
        if (Source := Result.Source?, Player := player[Source]):
            PlayerPromotion(Player)
            GrantRemoteToPlayer(Player)

    OnSentryEliminated(Agent : ?agent) : void=
        if (Player := player[Agent?]):
            PlayerPromotion(Player)
            GrantRemoteToPlayer(Player)

    PlayerPromotion(Agent : agent) : void=
        var WeaponTier : int = 0
        if (Player := player[Agent], PlayerWeaponTier := PlayerMap[Player]):
            set WeaponTier = PlayerWeaponTier+1
            CheckEndGame(Agent, WeaponTier)
        if (Player := player[Agent], set PlayerMap[Player] = WeaponTier):  
            GrantWeapon(Player, WeaponTier)
            GrantRemoteToPlayer(Player) # Grant remote after promotion

    TestPlayerElimination(Agent :?agent) : void=
        if (Player := player[Agent?]):
            PlayerPromotion(Player) 

    CheckEndGame(Player : agent, WeaponTier : int) : void=
        if (WeaponTier >= ElimsToEndGame):
            EndGameDevice.Activate(Player)
Editor is loading...
Leave a Comment