コード例 #1
0
    IEnumerator GuildMembersRequest(string guildId, LobbyMessageInfo info)
    {
        // Get guild members from database
        if (!GameDB.guildIdToGuildMembers.ContainsKey(guildId))
        {
            yield return(GuildsDB.GetGuildMembers(guildId));
        }

        // Send guild info to player
        if (GameDB.guildIdToGuildMembers.ContainsKey(guildId))
        {
            var guildMembers = GameDB.guildIdToGuildMembers[guildId];

            // Member names
            foreach (var member in guildMembers)
            {
                if (!GameDB.accountIdToName.TryGetValue(member.accountId, out member.name))
                {
                    yield return(LobbyGameDB.GetPlayerName(member.accountId, data => {
                        if (data != null)
                        {
                            member.name = data;
                            GameDB.accountIdToName[member.accountId] = data;
                        }
                    }));
                }
            }

            Lobby.RPC("ReceiveGuildMembers", info.sender, guildId, guildMembers.ToArray(), true);
        }
        else
        {
            Lobby.RPC("ReceiveGuildMembersError", info.sender, guildId);
        }
    }
コード例 #2
0
    void RPC_L2C_CreateRoleFailed(uLink.BitStream stream, LobbyMessageInfo info)
    {
        int _error;

        stream.TryRead <int>(out _error);
        if (_error == 1)//name used
        {
            MessageBox_N.ShowOkBox(PELocalization.GetString(ErrorMessage.NAME_HAS_EXISTED));
        }
        else if (_error == 2)//something must be wrong
        {
            RoleInfo[] _myRoles;
            stream.TryRead <RoleInfo[]>(out _myRoles);
            myRoles        = new List <RoleInfo>();
            myRolesExisted = new List <RoleInfo>();
            myRolesDeleted = new List <RoleInfo>();
            myRoles.AddRange(_myRoles);
            for (int m = 0; m < myRoles.Count; m++)
            {
                if (myRoles[m].deletedFlag != 1 && myRolesExisted.Count <= 3)
                {
                    myRolesExisted.Add(myRoles[m]);
                }
                else
                {
                    myRolesDeleted.Add(myRoles[m]);
                }
            }
            MessageBox_N.ShowOkBox(PELocalization.GetString(8000496), PeSceneCtrl.Instance.GotoMultiRoleScene);
        }
        Debug.Log("Create Role Failed");
    }
コード例 #3
0
    protected void RPC_LobbyMsg(BitStream stream, LobbyMessageInfo info)
    {
        ELobbyMsgType msgType = ELobbyMsgType.Max;

        try
        {
            msgType = stream.Read <ELobbyMsgType>();

            if (CheckHandler(msgType))
            {
                msgHandlers[msgType](stream, info);
            }
            else
            if (LogFilter.logError)
            {
                Debug.LogWarningFormat("Message:[{0}]|[{1}] does not implement", msgType, GetType());
            }
        }
        catch (Exception e)
        {
            if (LogFilter.logError)
            {
                Debug.LogErrorFormat("Message:[{0}]\r\n{1}\r\n{2}\r\n{3}", GetType(), msgType, e.Message, e.StackTrace);
            }
        }
    }
コード例 #4
0
    IEnumerator SetFriendNote(string friendName, string groupName, string note, LobbyMessageInfo info)
    {
        LobbyPlayer player = LobbyServer.GetLobbyPlayer(info);

        LogManager.General.Log(string.Format("'{0}' sets friends list note for '{1}' to '{2}'", player.name, friendName, note));

        // Find friends group
        var selectedGroup = player.friends.GetGroupByName(groupName);

        // Get account ID
        string friendAccountId = null;

        yield return(LobbyGameDB.GetAccountIdByPlayerName(friendName, data => {
            friendAccountId = data;
        }));

        // Error getting account ID?
        if (friendAccountId == null)
        {
            Lobby.RPC("SetFriendNotePlayerDoesntExistError", info.sender, friendName);
            yield break;
        }

        // Remove player from the group
        selectedGroup.friends.Find(friend => friend.accountId == friendAccountId).note = note;

        // Save friends list in database
        yield return(FriendsDB.SetFriends(
                         player.accountId,
                         player.friends,
                         null
                         ));
    }
コード例 #5
0
    IEnumerator GuildLeaveRequest(string guildId, string accountId, LobbyMessageInfo info)
    {
        // Get guild members from database
        if (!GameDB.guildIdToGuildMembers.ContainsKey(guildId))
        {
            yield return(GuildsDB.GetGuildMembers(guildId));
        }

        var guildMembers = GameDB.guildIdToGuildMembers[guildId];
        var index        = guildMembers.FindIndex(o => o.accountId == accountId);

        if (index == -1)
        {
            Lobby.RPC("GuildKickError", info.sender, guildId, accountId);
            yield break;
        }

        // Check rank: You can not kick guild leaders.
        if (guildMembers[index].rank == (byte)GuildMember.Rank.Leader)
        {
            Lobby.RPC("GuildKickError", info.sender, guildId, accountId);
            yield break;
        }

        guildMembers.RemoveAt(index);

        // Set guild members
        yield return(GuildsDB.SetGuildMembers(guildId, guildMembers));

        // Update guild ID list
        yield return(StartCoroutine(RemoveGuildFromGuildList(guildId, accountId, info.sender)));

        // Notify all guild members
        SendGuildMemberList(guildId, guildMembers);
    }
コード例 #6
0
    void RPC_L2C_RoleLoggedIn(uLink.BitStream stream, LobbyMessageInfo info)
    {
        RoleInfoProxy role = stream.Read <RoleInfoProxy>();

        m_RolesInLobby.RemoveAll(iter => iter.steamId == role.steamId);
        m_RolesInLobby.Add(role);
    }
コード例 #7
0
    IEnumerator ClientArtifactEquip(int itemId, LobbyMessageInfo info)
    {
        LobbyPlayer player = LobbyServer.GetLobbyPlayer(info);

        // Wait for all actions to execute
        while (player.artifactsEditingFlag)
        {
            yield return(null);
        }

        try {
            var arti = new Artifact(itemId);

            player.artifactsEditingFlag = true;
            if (player.artifactTree.AddArtifact(itemId))
            {
                player.artifactInventory.RemoveArtifact(arti);
                Lobby.RPC("ArtifactEquip", player.peer, itemId);

                // Save changes
                yield return(ArtifactsDB.SetArtifactTree(
                                 player,
                                 player.artifactTree
                                 ));

                yield return(ArtifactsDB.SetArtifactInventory(
                                 player,
                                 player.artifactInventory
                                 ));
            }
        } finally {
            player.artifactsEditingFlag = false;
        }
    }
コード例 #8
0
    IEnumerator ClientArtifactDiscard(byte level, byte slotId, LobbyMessageInfo info)
    {
        LobbyPlayer player = LobbyServer.GetLobbyPlayer(info);

        // Wait for all actions to execute
        while (player.artifactsEditingFlag)
        {
            yield return(null);
        }

        try {
            player.artifactsEditingFlag = true;
            player.artifactInventory.bags[level].RemoveItemSlot(slotId);
            Lobby.RPC("ArtifactDiscard", player.peer, level, slotId);

            // Save changes
            yield return(ArtifactsDB.SetArtifactTree(
                             player,
                             player.artifactTree
                             ));

            yield return(ArtifactsDB.SetArtifactInventory(
                             player,
                             player.artifactInventory
                             ));
        } finally {
            player.artifactsEditingFlag = false;
        }
    }
コード例 #9
0
    void RPC_L2C_CloseServer(uLink.BitStream stream, LobbyMessageInfo info)
    {
        string msg = stream.Read <string>();

        MessageBox_N.CancelMask(MsgInfoType.ServerDeleteMask);
        MessageBox_N.ShowOkBox(msg);
    }
コード例 #10
0
    IEnumerator PlayerNameChange(string newName, LobbyMessageInfo info)
    {
        // Prettify to be safe
        newName = newName.PrettifyPlayerName();

        // Validate data
        if (!Validator.playerName.IsMatch(newName))
        {
            LogManager.General.LogError("Player name is not valid: '" + newName + "'");
            yield break;
        }

        // Check if name exists already
        yield return(LobbyGameDB.GetAccountIdByPlayerName(newName, data => {
            if (data != null)
            {
                Lobby.RPC("PlayerNameAlreadyExists", info.sender, newName);
            }
            else
            {
                // Get the account
                LobbyPlayer player = GetLobbyPlayer(info);

                // Change name
                LogManager.General.Log("Account " + player.accountId + " has requested to change its player name to '" + newName + "'");
                LobbyGameDB.SetPlayerName(player, newName);
            }
        }));
    }
コード例 #11
0
    void RequestGameServerInfo(LobbyMessageInfo info)
    {
        LobbyPlayer player = GetLobbyPlayer(info);

        Lobby.RPC("ReceiveServerType", player.peer, player.gameInstance.serverType);
        Lobby.RPC("LoadMap", player.peer, player.gameInstance.mapName);
    }
コード例 #12
0
    void Ready(LobbyMessageInfo info)
    {
        LobbyPlayer player = GetLobbyPlayer(info);

        LogManager.General.Log(string.Format("Player '{0}' is now ready after logging in, connecting him to town", player.name));

        // Return player to his location in the game world
        LocationsDB.GetLocation(player.accountId, (data) => {
            // If that's the first time logging in, set the location to the default map
            if (data == null)
            {
                data = new PlayerLocation(MapManager.startingMap, ServerType.World);
            }

            // This will connect the player to a new or existing server
            // using the location data we just received.
            player.location = data;
        });

        // Add player to chat channels
        LobbyServer.globalChannel.AddPlayer(player);
        LobbyServer.announceChannel.AddPlayer(player);

        // Login message
        SendSystemMessage(player, loginMessage);
    }
コード例 #13
0
    void RPC_L2C_QueryLobbyExp(uLink.BitStream stream, LobbyMessageInfo info)
    {
        float exp     = stream.Read <float> ();
        float balance = stream.Read <float> ();

        role.lobbyExp             = exp;
        AccountItems.self.balance = balance;
    }
コード例 #14
0
    void RPC_L2C_RolesInLobby(uLink.BitStream stream, LobbyMessageInfo info)
    {
        RoleInfoProxy[] roles = stream.Read <RoleInfoProxy[]>();

        m_RolesInLobby.Clear();
        m_RolesInLobby.AddRange(roles);
        Debug.Log("Roles In Lobby. Num:" + roles.Length);
    }
コード例 #15
0
    void RPC_L2C_RepeatLogin(uLink.BitStream stream, LobbyMessageInfo info)
    {
        Disconnect();
        MessageBox_N.ShowOkBox(PELocalization.GetString(8000041));

//		if (null != LoginGui_N.Instance)
//			LoginGui_N.Instance.HideMask();
    }
コード例 #16
0
    void RPC_L2C_ShopData(uLink.BitStream stream, LobbyMessageInfo info)
    {
        LobbyShopData [] shopdata = stream.Read <LobbyShopData[]> ();
        int startIndex            = stream.Read <int> ();
        int tabIndex = stream.Read <int> ();

        LobbyShopMgr.AddRange(shopdata, startIndex, tabIndex);
    }
コード例 #17
0
    IEnumerator ChangePassword(string newPassword, LobbyMessageInfo info)
    {
        // Get the account
        var player = LobbyServer.GetLobbyPlayer(info);

        // Change name
        LogManager.General.Log("Player '" + player.name + "' has requested to change its password.");
        yield return(StartCoroutine(LobbyGameDB.SetPassword(player, newPassword)));
    }
コード例 #18
0
    void ClientInputSettings(string inputSettingsString, LobbyMessageInfo info)
    {
        LobbyPlayer player = LobbyServer.GetLobbyPlayer(info);

        //LogManager.General.Log("Player '" + player.name + "' sent new input settings");
        InputSettings inputSettings = Jboy.Json.ReadObject <InputSettings>(inputSettingsString);

        SettingsDB.SetInputSettings(player, inputSettings);
    }
コード例 #19
0
    void ClientArtifactTree(string jsonTree, LobbyMessageInfo info)
    {
        LobbyPlayer player = LobbyServer.GetLobbyPlayer(info);
        //LogManager.General.Log(jsonTree);

        ArtifactTree tree = Jboy.Json.ReadObject <ArtifactTree>(jsonTree);

        LogManager.General.Log("Player '" + player.name + "' sent new artifact tree " + tree.ToString());
        ArtifactsDB.SetArtifactTree(player, tree);
    }
コード例 #20
0
    IEnumerator GuildRepresentRequest(string guildId, bool represent, LobbyMessageInfo info)
    {
        LobbyPlayer player    = LobbyServer.GetLobbyPlayer(info);
        string      accountId = player.accountId;

        // Get guild members from database
        if (!GameDB.guildIdToGuildMembers.ContainsKey(guildId))
        {
            yield return(GuildsDB.GetGuildMembers(guildId));
        }

        var guildMembers = GameDB.guildIdToGuildMembers[guildId];
        var index        = guildMembers.FindIndex(o => o.accountId == accountId);

        if (index == -1)
        {
            Lobby.RPC("GuildRepresentError", info.sender, guildId, represent);
            yield break;
        }

        // Get guild ID list
        if (player.guildList == null)
        {
            yield return(GuildsDB.GetGuildList(accountId, data => {
                if (data == null)
                {
                    player.guildList = new GuildList();
                }
                else
                {
                    player.guildList = data;
                }
            }));
        }

        // Set/unset main guild
        if (represent)
        {
            // Start representing
            player.guildList.mainGuildId = guildId;
        }
        else
        {
            // Stop representing
            if (player.guildList.mainGuildId == guildId)
            {
                player.guildList.mainGuildId = "";
            }
        }

        // Set guild ID list
        yield return(GuildsDB.SetGuildList(accountId, player.guildList));

        Lobby.RPC("GuildRepresentSuccess", info.sender, guildId, represent);
    }
コード例 #21
0
 void RPC_L2C_SyncInviteData(uLink.BitStream stream, LobbyMessageInfo info)
 {
     long [] serverUID = stream.Read <long[]> ();
     ulong[] steamIds  = stream.Read <ulong[]> ();
     if (serverUID.Length > 0)
     {
         for (int i = 0; i < serverUID.Length; i++)
         {
             PeSteamFriendMgr.Instance.ReciveInvite(steamIds[i], serverUID[i]);
         }
     }
 }
コード例 #22
0
    void RequestPlayerEmail(string accountId, LobbyMessageInfo info)
    {
        LogManager.General.Log("Requested mail for: " + accountId);

        // Query email
        LobbyGameDB.GetEmail(accountId, data => {
            if (data != null)
            {
                Lobby.RPC("ReceivePlayerEmail", info.sender, accountId, data);
            }
        });
    }
コード例 #23
0
    void RPC_L2C_SendMsg(uLink.BitStream stream, LobbyMessageInfo info)
    {
        /*EMsgType msgType = */ stream.Read <EMsgType>();
        /*ulong steamId = */ stream.Read <ulong>();
        string roleName = stream.Read <string>();
        string msg      = stream.Read <string>();

        if (UILobbyMainWndCtrl.Instance != null && UILobbyMainWndCtrl.Instance.isShow)
        {
            UILobbyMainWndCtrl.Instance.AddTalk(roleName, msg);
        }
    }
コード例 #24
0
    void LeaveQueue(LobbyMessageInfo info)
    {
        LobbyPlayer player = LobbyServer.GetLobbyPlayer(info);

        // Make the player leave the queue
        if (player.LeaveQueue())
        {
            // Let the player know he left the queue
            LogManager.General.Log("'" + player.name + "' left the queue");
            Lobby.RPC("LeftQueue", player.peer);
        }
    }
コード例 #25
0
 void ResendActivationMail(string email, LobbyMessageInfo info)
 {
     LobbyGameDB.GetAccountAwaitingActivation(
         email,
         (token) => {
         if (!string.IsNullOrEmpty(token))
         {
             SendActivationMail(email, token);
             Lobby.RPC("ActivationMailSent", info.sender);
         }
     }
         );
 }
コード例 #26
0
 IEnumerator PlayerNameExists(string newName, LobbyMessageInfo info)
 {
     yield return(LobbyGameDB.GetAccountIdByPlayerName(newName, data => {
         if (data != null)
         {
             Lobby.RPC("PlayerNameAlreadyExists", info.sender, newName);
         }
         else
         {
             Lobby.RPC("PlayerNameFree", info.sender, newName);
         }
     }));
 }
コード例 #27
0
    void MailFeedback(string text, LobbyMessageInfo info)
    {
        LobbyPlayer player = GetLobbyPlayer(info);

        LogManager.General.Log("Sending feedback mail from '" + player.name + "'...");

        Mail.Send(
            mailFeedbackReceiver,
            "Feedback from '" + player.name + "'",
            "E-Mail: " + player.account.name + "\n\n" + text,
            player.account.name
            );
    }
コード例 #28
0
    void StaffInfoRequest(LobbyMessageInfo info)
    {
        LobbyPlayer player = GetLobbyPlayer(info);

        // Access level check
        if (player.accessLevel == AccessLevel.Player)
        {
            LogManager.General.LogWarning("Player '" + player.name + "' attempted to get staff information!");
            return;
        }

        SendStaffInfo(player);
    }
コード例 #29
0
    void ClientCharacterStats(CharacterStats charStats, LobbyMessageInfo info)
    {
        LobbyPlayer player = LobbyServer.GetLobbyPlayer(info);

        if (!charStats.valid)
        {
            LogManager.General.LogWarning("Detected character stat points hack on player '" + player.name + "'");
            return;
        }

        //LogManager.General.Log("Player '" + player.name + "' sent new character stats " + charStats.ToString());
        TraitsDB.SetCharacterStats(player, charStats);
    }
コード例 #30
0
    void RPC_L2C_BuyItems(uLink.BitStream stream, LobbyMessageInfo info)
    {
        int   itemType = stream.Read <int> ();
        int   amount   = stream.Read <int> ();
        float balance  = stream.Read <float> ();

        if (AccountItems.self != null)
        {
            AccountItems.self.AddItems(itemType, amount);
            AccountItems.self.balance = balance;
            UIMallWnd.Instance.SetMyBalance((int)balance);
            UILobbyShopItemMgr._self.MallItemEvent(0, UIMallWnd.Instance.mCurrentTab);
        }
    }