/// <summary> /// 断开与战斗服的连接 /// </summary> public void DisConnectFightServer() { Player player = UnitManager.Instance.GetPlayerByIdx(m_char_idx); if (player == null) { return; } if (player.fs_uid > 0 && m_connect_state == eFSConnectState.Connected) { //告诉fs ss2fs.LogoutClient fs_msg = PacketPools.Get(ss2fs.msg.LOGOUT_CLIENT) as ss2fs.LogoutClient; fs_msg.char_idx = m_char_idx; ServerNetManager.Instance.Send2FS(player.fs_uid, fs_msg); //告诉gs分配给玩家的fs ss2gs.NotifyServer gs_msg = PacketPools.Get(ss2gs.msg.NOTIFY_SERVER) as ss2gs.NotifyServer; gs_msg.account_idx = player.account_idx; gs_msg.s_type = eServerType.FIGHT; gs_msg.fs_uid = 0; ServerNetManager.Instance.Send(player.client_uid.srv_uid, gs_msg); m_connect_state = eFSConnectState.UnConnect; } }
/// <summary> /// 处理登出逻辑 /// </summary> private void HandleLogoutAccount(long account_idx) { Player player = UnitManager.Instance.GetPlayerByAccount(account_idx) as Player; if (player == null) {//如果在加载完角色信息前退出,则不会有unit return; } //告诉fs ss2fs.LogoutClient fs_msg = PacketPools.Get(ss2fs.msg.LOGOUT_CLIENT) as ss2fs.LogoutClient; fs_msg.char_idx = player.char_idx; ServerNetManager.Instance.Send2FS(player.fs_uid, fs_msg); //告诉ws ss2ws.LogoutClient ws_msg = PacketPools.Get(ss2ws.msg.LOGOUT_CLIENT) as ss2ws.LogoutClient; ws_msg.char_idx = player.char_idx; ServerNetManager.Instance.Send2WS(ws_msg); //告诉gl ss2gl.LogoutClient gl_msg = PacketPools.Get(ss2gl.msg.LOGOUT_CLIENT) as ss2gl.LogoutClient; gl_msg.char_idx = player.char_idx; ServerNetManager.Instance.Send2GL(gl_msg); //从场景移除 BaseScene scene = SceneManager.Instance.GetScene(player.scene_obj_idx); if (scene != null) { scene.RemoveUnit(player); } //从管理器移除 UnitManager.Instance.RemoveUnit(player); }
/// <summary> /// 账号登出 /// </summary> private void OnLogoutAccount(PacketBase packet) { ss2fs.LogoutClient msg = packet as ss2fs.LogoutClient; UnitManager.Instance.HandleLogout(msg.char_idx); Log.Debug("玩家离开游戏:" + msg.char_idx); }