// 角色上线 private void OnCharacterOnline(SocketModel model) { RespCharacterOnline resp = SerializeUtil.Deserialize <RespCharacterOnline>(model.message); DataCache.instance.currentCharacter = DataCache.instance.GetCharDTO(resp.characterid); // 创建玩家 CharacterDTO ch = DataCache.instance.currentCharacter; RoleCfg cfg = ConfigManager.instance.GetRoleCfg(ch.cfgid); Vector3 pos = new Vector3(ch.pos_x, ch.pos_y, ch.pos_z); Battle.instance.Create <Player>(ch); Battle.instance.isonline = true; }
// 角色上线 private void OnCharacterOnline(UserToken token, SocketModel model) { ReqCharacterOnline req = SerializeUtil.Deserialize <ReqCharacterOnline>(model.message); RespCharacterOnline resp = new RespCharacterOnline(); resp.characterid = req.characterid; // 角色上线 if (CacheManager.instance.IsCharOnline(req.characterid)) { resp.msgtips = (int)MsgTips.CharHasOnline; } else { token.characterid = req.characterid; // 查询角色数据 string sql = string.Format("SELECT * FROM characters WHERE id = {0}", req.characterid); List <CharacterData> chDatas = MysqlManager.instance.ExecQuery <CharacterData>(sql); CacheManager.instance.CharOnline(req.characterid, chDatas[0]); // 进入世界 CharacterData data = CacheManager.instance.GetCharData(req.characterid); CharacterDTO dto = CharacterData.GetDTO(data); Vector pos = new Vector { x = data.pos_x, y = data.pos_y, z = data.pos_z }; // 在服务端创建一个角色 BattleScene scene = SceneManager.instance.GetScene(1001); Player player = scene.Create <Player>(dto); player.token = token; player.battleType = BattleType.World; CacheManager.instance.AddBattleData(new BattleData(req.characterid, player.battleType, player.sceneid)); // 给场景中的其他玩家发送该玩家已经上线 Dictionary <int, Player> chs = scene.GetTypeChar <Player>(CharacterType.Player); foreach (Player p in chs.Values) { if (p.characterid == req.characterid) { continue; } NotifyCharacterOnline notify = new NotifyCharacterOnline(); notify.character = dto; NetworkManager.Send(p.token, (int)MsgID.CHAR_CharOnline_NOTIFY, notify); } } // 给当前玩家发送应答 NetworkManager.Send(token, (int)MsgID.CHAR_ONLINE_SRES, resp); }