isMasterClient where is ?

Options
On Unity you have a very useful property:

isMasterClient

there is something like that on Lua SDK ?

Thanks
Renato

Comments

  • vadim
    Options
    Not exactly isMasterClient but similar method exist: https://doc-api.photonengine.com/en/corona/current/modules/loadbalancing.LoadBalancingClient.html#instance:myRoomMasterActorNr

    You can compare the return value against actor Nr of the player in question.
  • rre
    rre
    edited May 2020
    Options
    Thank you Vadim, now I have to found whats is my Nr ! Doesn't exists a function that return your number. ; )
    There is a GetUserID() but the ID is not the nuber.

    However, I found a solution, also reported on the Solar2D website (https://forums.solar2d.com/t/roommasteractor/351098) , which I repeat here:

    Starts from example found in photon SDK (photon_corona_plugin_sample) where you create the class:

    client
    …
    local client = LoadBalancingClient.new(appInfo.ServerAddress, appInfo.AppId, appInfo.AppVersion)
    …
    
    function client:checkInit()
        --return "S" slave or "M" master
        local nrMaster = 0
        local result = "S"
    
        if self:isJoinedToRoom() then
          nrMaster = self:myRoomMasterActorNr()
          
          for actorNr, actor in pairs(client:myRoomActors()) do
            if actor.actorNr == nrMaster and actor.isLocal == true then
              --I'm master
              result = "M"
              break
            else
              --I'm slave
            end
          end
        end
        
        return result
    end
    …
    

    I think is better call also other 2 instances to have updated the state
    …
    function client:onActorJoin(actor)
    self:checkInit()
    end
    
    function client:onActorLeave(actor)
    self:checkInit()
    end
    …
    

    I think the code should be better: avoid the ‘for’ loop.
    But I’m not able to write a better one. ; (

    If someone can help is appreciate.

    Thanks
    Renato
  • rre
    rre
    edited May 2020
    Options
    Thank you,
    you probably think at something like this:
    self:myRoomActors()[self:myRoomMasterActorNr()].isLocal == true
    

    I don't think will will work!

    be careful that the number of players in the room does not match the number of each player.

    For example:
    -> enter 2 players
    [1] actor.actorNr 1 name Player 1
    [2] actor.actorNr 2 name Player 2

    in that case the code above will works

    <-- exit player1
    --> enter player3

    you will have 2 actors on rom
    [1] actor.actorNr 2 name Player 2
    [2] actor.actorNr 3 name Player 3

    so the myRoomMasterActorNr() will give you value 3 but on table you will find on row 2

    crash!

    Renato
  • vadim
    vadim mod
    edited May 2020
    Options
    I was sure that Actor object has a property returning actor nr. Unfortunately, it does not. Sorry.
    But seems like your approach should work at least while the client is joint to the room.
    self:myRoomActors() is a table with joined actor numbers as keys. Master actor nr should be among them.
  • rre
    rre
    edited May 2020
    Options
    Yes, I confirm, MasterActor it is among these and it works.

    And if there are few actors in a room, a 'for' cycle does not give problems, you don't notice delay. You could probably have problems were many.

    Thanks for your help!

    Renato