// ----------------------------------------------------------------------------------------------------
        #endregion

        #region Player Registration
        // ----------------------------------------------------------------------------------------------------
        public void RegisterPlayer(PlayerController player)
        {
            this.playerController = player;
            UpdatePanels();

            OnPlayerRegistered?.Invoke(player);
        }
Esempio n. 2
0
        private PlayerSessionData CreatePlayerWithDevice(int deviceIndex, CharacterSkinData skinData = null, string devotionName = "", string spiritName = "", CharToolType charToolType = CharToolType.None)
        {
            PlayerSessionData playerSessionData = new PlayerSessionData(activePlayers.Count, deviceIndex, gameplayInputManagers[deviceIndex], playerUIInputManagers[deviceIndex]);

            playerSessionData.skin         = skinData;
            playerSessionData.devotionName = devotionName;
            playerSessionData.spiritName   = spiritName;
            playerSessionData.charToolType = charToolType;
            activePlayers.Add(playerSessionData);
            OnPlayerRegistered?.Invoke(playerSessionData);
            return(playerSessionData);
        }
Esempio n. 3
0
    public static void RegisterPlayer(Player player, bool isLocalPlayer)
    {
        // Set the player as localplayer if, the client owned the player gameobject
        //player.gameObject.name = "Player" + player.netId;
        if (isLocalPlayer)
        {
            _localPlayer = player;
            OnPlayerRegistered?.Invoke();
        }


        if (!players.Contains(player))
        {
            players.Add(player);
        }
    }
        public void Handle(BinaryReader reader, int playerNumber)
        {
            if (Main.netMode == 2)
            {
                var encrypted = reader.ReadString();
                // 解密RSA加密的信息
                var info         = CryptedUserInfo.GetDecrypted(encrypted);
                var serverPlayer = Main.player[playerNumber].GetServerPlayer();
                serverPlayer.qqAuth.CharacterName = Main.player[playerNumber].name;
                serverPlayer.qqAuth.MachineCode   = info.MachineCode;
                if (serverPlayer.IsLogin)
                {
                    MessageSender.SendLoginSuccess(serverPlayer.PrototypePlayer.whoAmI, "你已经登录,请不要重复登录");
                    return;
                }
                if (serverPlayer.HasPassword)
                {
                    bool isLoginSuccess = false;
                    QQAuth.States.LoginState loginState = serverPlayer.qqAuth.Login(info);
                    switch (loginState)
                    {
                    case QQAuth.States.LoginState.Debug:
                        CommandBoardcast.ConsoleMessage("Debug模式已启用,跳过登录验证.");
                        isLoginSuccess = true;
                        break;

                    case QQAuth.States.LoginState.Unbound:
                        CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 认证失败:未绑定QQ.");
                        MessageSender.SendLoginFailed(playerNumber, "请先绑定QQ!");
                        isLoginSuccess = false;
                        break;

                    case QQAuth.States.LoginState.Banned:
                        CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 认证失败:玩家已被封禁.");
                        MessageSender.SendLoginFailed(playerNumber, $"您已被封禁!原因:{serverPlayer.qqAuth.GetBanReason(serverPlayer)}");
                        isLoginSuccess = false;
                        break;

                    case QQAuth.States.LoginState.NotFound:
                        serverPlayer.HasPassword = false;
                        CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} ,QQ {serverPlayer.qqAuth.QQ} 数据库记录丢失.");
                        MessageSender.SendLoginFailed(playerNumber, "数据库记录丢失!请重新输入QQ注册。");
                        isLoginSuccess = false;
                        break;

                    case QQAuth.States.LoginState.LoginSuccess:
                        CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} ,QQ {serverPlayer.qqAuth.QQ} 认证成功.");
                        isLoginSuccess = true;
                        break;

                    case QQAuth.States.LoginState.ChangePasswordRequired:
                        serverPlayer.HasPassword = false;
                        CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} ,QQ {serverPlayer.qqAuth.QQ} 申请改密.");
                        MessageSender.SendLoginFailed(playerNumber, "申请改密已受理!请输入QQ和新密码完成改密。");
                        isLoginSuccess = false;
                        break;

                    case QQAuth.States.LoginState.GetMCFailed:
                        CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 认证失败:机器码获取失败.");
                        MessageSender.SendLoginFailed(playerNumber, "机器码获取失败!请联系管理员。");
                        isLoginSuccess = false;
                        break;

                    case QQAuth.States.LoginState.MCCheckFailed:
                        CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 认证失败:机器码校验失败.");
                        MessageSender.SendLoginFailed(playerNumber, "机器码校验失败!当前机器可能不是此角色注册的机器。");
                        isLoginSuccess = false;
                        break;

                    case QQAuth.States.LoginState.Error:
                        CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 登录错误,信息:" + serverPlayer.qqAuth.ErrorLog);
                        MessageSender.SendLoginFailed(playerNumber, "数据库操作出错!");
                        isLoginSuccess = false;
                        break;

                    default:
                        isLoginSuccess = false;
                        break;
                    }
                    if (isLoginSuccess)
                    {
                        if (serverPlayer.CheckPassword(info))
                        {
                            if (!ServerSideCharacter2.DEBUGMODE)
                            {
                                OnPlayerLogin?.Invoke(serverPlayer);
                            }
                            RecordVisit(playerNumber, serverPlayer);
                            SuccessLogin(serverPlayer);
                            MessageSender.SendLoginSuccess(serverPlayer.PrototypePlayer.whoAmI, "认证成功");
                            // 告诉客户端解除封印
                            MessageSender.SendLoginIn(serverPlayer.PrototypePlayer.whoAmI);
                            NetMessage.BroadcastChatMessage(NetworkText.FromLiteral(serverPlayer.Name + " 登入了游戏"), new Color(255, 255, 240, 20), -1);
                            CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 认证成功.");
                        }
                        else
                        {
                            // 如果忘记密码就要找管理员重置密码
                            MessageSender.SendLoginFailed(playerNumber, "密码错误!");
                            CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 认证失败:密码错误.");
                        }
                    }
                }
                else
                {
                    var result = CheckName(Main.player[playerNumber].name);
                    if (result == 0)
                    {
                        bool isRegisterLegal = false;
                        QQAuth.States.RegisterState registerState = serverPlayer.qqAuth.Register(info);
                        switch (registerState)
                        {
                        case QQAuth.States.RegisterState.Debug:
                            CommandBoardcast.ConsoleMessage("Debug模式已启用,跳过注册验证.");
                            isRegisterLegal = true;
                            break;

                        case QQAuth.States.RegisterState.NullQQ:
                            MessageSender.SendLoginFailed(playerNumber, "注册时QQ不能为空!");
                            isRegisterLegal = false;
                            break;

                        case QQAuth.States.RegisterState.RegisterSuccess:
                            CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 注册请求合法(常规注册).");
                            isRegisterLegal = true;
                            if (!ServerSideCharacter2.DEBUGMODE)
                            {
                                OnPlayerRegistered?.Invoke(serverPlayer, new EventArgs());
                            }
                            break;

                        case QQAuth.States.RegisterState.RegisterRep:
                            CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 注册请求合法(角色可能丢失).");
                            isRegisterLegal = true;
                            break;

                        case QQAuth.States.RegisterState.QQBound:
                            MessageSender.SendLoginFailed(playerNumber, "QQ或角色已被绑定!");
                            CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 注册请求被拒(QQ或角色已被绑定).");
                            isRegisterLegal = false;
                            break;

                        case QQAuth.States.RegisterState.GetMCFailed:
                            MessageSender.SendLoginFailed(playerNumber, "机器码获取失败!请联系管理员。");
                            CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 注册请求被拒(获取机器码失败).");
                            isRegisterLegal = false;
                            break;

                        case QQAuth.States.RegisterState.MCBound:
                            MessageSender.SendLoginFailed(playerNumber, "该机器已被其他角色绑定!");
                            CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 注册请求被拒(机器已被绑定).");
                            isRegisterLegal = false;
                            break;

                        case QQAuth.States.RegisterState.Error:
                            MessageSender.SendLoginFailed(playerNumber, "数据库操作出错!");
                            CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 注册出现错误,信息:" + serverPlayer.qqAuth.ErrorLog);
                            isRegisterLegal = false;
                            break;

                        default:
                            isRegisterLegal = false;
                            break;
                        }
                        if (isRegisterLegal)
                        {
                            serverPlayer.SetPassword(info);
                            // SuccessLogin(serverPlayer);
                            MessageSender.SendLoginSuccess(serverPlayer.PrototypePlayer.whoAmI, "注册成功,输入密码即可登录");
                            // 告诉客户端解除封印
                            // MessageSender.SendLoginIn(serverPlayer.PrototypePlayer.whoAmI);
                            CommandBoardcast.ConsoleMessage($"玩家 {serverPlayer.Name} 注册成功.");
                        }
                    }
                    else
                    {
                        if (result == 1 || result == -1)
                        {
                            serverPlayer.SendMessageBox("无法注册玩家:用户名" +
                                                        (result == 1 ? "过长" : "过短") + "\n" + "用户名应为2-10个字符", 120, Color.Red);
                        }
                        else
                        {
                            serverPlayer.SendMessageBox("无法注册玩家:用户名不能含有下列特殊字符:$%^&*!@#:?|<>", 120, Color.Red);
                        }
                    }
                }
            }
        }