// 角色上线
    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;
    }
Пример #2
0
    // 角色上线
    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);
    }