Please Help

I’m starting with verse. I spent about 2 weeks on it I would like this code to work only for the player who turns off/on a given device and not for all :frowning: Please help

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

    # Urządzenie kreatywne z Verse, które można umieszczać na mapie
    switch_device_verse_example := class(creative_device):

        # Odniesienie do urządzenia wyłącznika na mapie
        # W panelu szczegółów dla tego urządzenia Verse,
        # przypisz tę właściwość do swojego urządzenia wyłącznika.
        @editable
        MySwitchDevice:switch_device = switch_device{}

        @editable
        MySwitchDevice1:switch_device = switch_device{}

        @editable
        MySwitchDevice2:switch_device = switch_device{}

        @editable
        MySwitchDevice3:switch_device = switch_device{}

        @editable
        MyLockDevice:lock_device = lock_device{}

        @editable
        Txtunlock:hud_message_device = hud_message_device{}

        var TotalPurchases : int = 0
        var Hello : string = ""

        

        # Działa, gdy urządzenie zostaje uruchomione w trwającej grze
        OnBegin<override>()<suspends>:void=
            # Przykład obserwowania zdarzenia na urządzeniu trybu kreatywnego
            # Sygnalizuje, gdy stan przełącznika się zmienia.
            MySwitchDevice.StateChangesEvent.Subscribe(OnStateChanged)
            MySwitchDevice1.StateChangesEvent.Subscribe(OnStateChanged1)
            MySwitchDevice2.StateChangesEvent.Subscribe(OnStateChanged2)
            MySwitchDevice3.StateChangesEvent.Subscribe(OnStateChanged3)

        Funkcjawylacz() : void = 
            
            for (Player : GetPlayspace().GetPlayers()):
                MySwitchDevice.TurnOff(Player)
                MySwitchDevice1.TurnOff(Player)
                MySwitchDevice2.TurnOff(Player)
                MySwitchDevice3.TurnOff(Player)

                if (Hello = "NICE"):
                    MyLockDevice.Unlock(Player)
                    Txtunlock.Show(Player)
                else:
                    set Hello = ""


                



        
        # Ta funkcja uruchamia się, kiedy gracz zmieni stan przełącznika w grze, ponieważ jest odpowiedzialna za obsługę wydarzenia StateChangesEvent.
        OnStateChanged():void=
    
            # Ten przykład sprawdza wszystkich graczy biorących udział w przygodzie, żeby pokazać jak wykonywać na urządzeniu operacje na każdym graczu.
            for (Player : GetPlayspace().GetPlayers()):
                # Zwraca aktualny stan tego przełącznika: true (włączony), bądź false (wyłączony). Użyj tego trybu „GetCurrentState”, kiedy urządzenie ma ustawione *Zachowuj stan wg gracza* na *Tak*.
                
                if (MySwitchDevice.GetCurrentState[Player]):
                    set TotalPurchases += 1
                    set Hello = Hello + "E"
                    if (TotalPurchases = 4):
                        Funkcjawylacz()
                else:
                    set TotalPurchases -= 1
                    
                

        # Ta funkcja uruchamia się, kiedy gracz zmieni stan przełącznika w grze, ponieważ jest odpowiedzialna za obsługę wydarzenia StateChangesEvent.
        OnStateChanged1():void=
            
            # Ten przykład sprawdza wszystkich graczy biorących udział w przygodzie, żeby pokazać jak wykonywać na urządzeniu operacje na każdym graczu.
            for (Player : GetPlayspace().GetPlayers()):
                # Zwraca aktualny stan tego przełącznika: true (włączony), bądź false (wyłączony). Użyj tego trybu „GetCurrentState”, kiedy urządzenie ma ustawione *Zachowuj stan wg gracza* na *Tak*.
                
                if (MySwitchDevice1.GetCurrentState[Player]):
                    set TotalPurchases += 1
                    set Hello = Hello + "I"
                    if (TotalPurchases = 4):
                        Funkcjawylacz()
                else:
                    set TotalPurchases -= 1

        # Ta funkcja uruchamia się, kiedy gracz zmieni stan przełącznika w grze, ponieważ jest odpowiedzialna za obsługę wydarzenia StateChangesEvent.
        OnStateChanged2():void=
            
            # Ten przykład sprawdza wszystkich graczy biorących udział w przygodzie, żeby pokazać jak wykonywać na urządzeniu operacje na każdym graczu.
            for (Player : GetPlayspace().GetPlayers()):
                # Zwraca aktualny stan tego przełącznika: true (włączony), bądź false (wyłączony). Użyj tego trybu „GetCurrentState”, kiedy urządzenie ma ustawione *Zachowuj stan wg gracza* na *Tak*.
                
                if (MySwitchDevice2.GetCurrentState[Player]):
                    set TotalPurchases += 1
                    set Hello = Hello + "N"
                    if (TotalPurchases = 4):
                        Funkcjawylacz()
                else:
                    set TotalPurchases -= 1

        # Ta funkcja uruchamia się, kiedy gracz zmieni stan przełącznika w grze, ponieważ jest odpowiedzialna za obsługę wydarzenia StateChangesEvent.
        OnStateChanged3():void=
            
            # Ten przykład sprawdza wszystkich graczy biorących udział w przygodzie, żeby pokazać jak wykonywać na urządzeniu operacje na każdym graczu.
            for (Player : GetPlayspace().GetPlayers()):
                # Zwraca aktualny stan tego przełącznika: true (włączony), bądź false (wyłączony). Użyj tego trybu „GetCurrentState”, kiedy urządzenie ma ustawione *Zachowuj stan wg gracza* na *Tak*.
                
                if (MySwitchDevice3.GetCurrentState[Player]):
                    set TotalPurchases += 1
                    set Hello = Hello + "C"
                    if (TotalPurchases = 4):
                        Funkcjawylacz()
                else:
                    set TotalPurchases -= 1

The problem is that switch_device.StateChangesEvent doesn’t return the activating agent as payload.

What you can do is subscribe to both switch_device.TurnedOnEvent and switch_device.TurnedOffEvent, instead. They both return the activating agent as payload, meaning you can execute your code only for the player who turned on/off the switch device.

Here’s an incomplete example:

my_device := class(creative_device):
    @editable
    MySwitchDevice : switch_device = switch_device{}

    OnBegin<override>()<suspends> : void =
        MySwitchDevice.TurnedOnEvent.Subscribe(OnMySwitchDeviceTurnedOn)
        MySwitchDevice.TurnedOffEvent.Subscribe(OnMySwitchDeviceTurnedOff)

    OnMySwitchDeviceTurnedOn(InAgent : agent) : void =
        if (Player := player[InAgent]):
            # Player is whoever turned on the switch.

    OnMySwitchDeviceTurnedOff(InAgent : agent) : void =
        if (Player := player[InAgent]):
            # Player is whoever turned off the switch.

Now, taking a look at your code, are you trying to make a combination lock puzzle? i.e. the player has to turn on the switches in a specific order to open the door?

If so, there are still other problems with how you store the order of the switches (I believe you are currently doing it by adding letters to the Hello variable).