Verse - Player Reference Device - Capture Area

Hello everyone,

I’m having an issue with my team registration function. Players can register up to four times and automatically registered twice, despite having clearly defined the logic with if statements. This should be a team registration process where players first go to a capture area in pairs of two to be registered with a player reference. I can’t figure out what I’m doing wrong. Does anyone have any ideas on what could be causing this? Thank you in advance for your help!

using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /Fortnite.com/Playspaces }
using { /Fortnite.com/Characters }



TeamManagement_device := class(creative_device):

    @editable
    var CaptureArea1 : capture_area_device = capture_area_device{}

    @editable
    var CaptureArea2 : capture_area_device = capture_area_device{}

    @editable
    var PlayerReference1 : player_reference_device = player_reference_device{}
     
    @editable
    var PlayerReference2 : player_reference_device = player_reference_device{}

    @editable
    var PlayerReference3 : player_reference_device = player_reference_device{}
     
    @editable
    var PlayerReference4 : player_reference_device = player_reference_device{}


    var Team1Players: int = 0
    var Team2Players: int = 0
    var MaxPlayersPerTeam: int = 2
    

    OnBegin<override>()<suspends>:void=
        CaptureArea1.AgentEntersEvent.Subscribe(Capture1)
        CaptureArea2.AgentEntersEvent.Subscribe(Capture2)


    Capture1(Agent:agent):void=
        Print("CAPTURE 1")
        if (Team1Players < MaxPlayersPerTeam):
            if (Team1Players = 0):
                PlayerReference1.Register(Agent)
                set Team1Players += 1
                Print("Registered in Team 1")
            else if (Team1Players = 1):
                PlayerReference2.Register(Agent)
                set Team1Players += 1
                Print("Registered in Team 1")
        else:
            Print("Team 1 is full")



    Capture2(Agent:agent):void=
        Print("CAPTURE 2")
        if (Team2Players < MaxPlayersPerTeam):
            if (Team2Players = 0):
                PlayerReference3.Register(Agent)
                set Team2Players += 1
                Print("Registered in Team 2")
            else if (Team2Players = 1):
                PlayerReference4.Register(Agent)
                set Team2Players += 1
                Print("Registered in Team 2")
        else:
            Print("Team 2 is full")
1 Like

You can check if the Agent is already registered by using a function from player_reference_device in Fortnite.digest.verse:

# Is true when `Agent` is the player being referenced by the device.
IsReferenced<public>(Agent:agent)<transacts><decides>:void = external {}

You need to check all 4 PlayerReference devices, so wrap it in a function with the same signature:

AgentIsRegistered(Agent:agent)<transacts><decides>:void=

(the <public> part doesn’t matter, so left it out)

The code in context would look like this:

    OnBegin<override>()<suspends>:void=
        CaptureArea1.AgentEntersEvent.Subscribe(Capture1)
        CaptureArea2.AgentEntersEvent.Subscribe(Capture2)

    AgentIsRegistered(Agent:agent)<transacts><decides>:void=
        PlayerReference1.IsReferenced[Agent] or 
        PlayerReference2.IsReferenced[Agent] or 
        PlayerReference3.IsReferenced[Agent] or 
        PlayerReference4.IsReferenced[Agent]

    Capture1(Agent:agent):void=
        Print("CAPTURE 1")
        if( AgentIsRegistered[Agent] ):
            Print("Already Registered")
        else if (Team1Players < MaxPlayersPerTeam): # Added else if
            if (Team1Players = 0):
                PlayerReference1.Register(Agent)
                set Team1Players += 1
                Print("Registered in Team 1")
            else if (Team1Players = 1):
                PlayerReference2.Register(Agent)
                set Team1Players += 1
                Print("Registered in Team 1")
        else:
            Print("Team 1 is full")

Disclaimer: i haven’t tested it, but it does compile.

2 Likes

THANK YOU SO MUCH!

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.