public void Initialize() { SceneCfg sceneCfg = ConfigManager.instance.GetSceneCfgs(DataCache.instance.currentCharacter.mapid); // 读取导航数据,并初始化导航网格信息 _navmeshQuery = new LunaNavmeshQuery(); _navmeshQuery.Initialize("Navmesh/" + sceneCfg.Scene); if (!isonline) { ReqCharacterOnline req = new ReqCharacterOnline(); req.characterid = DataCache.instance.currentCharacter.id; Net.instance.Send <ReqCharacterOnline>((int)MsgID.CHAR_ONLINE_CREQ, req); } else { } }
// 角色上线 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); }