Example #1
0
    public void sendMsg(GameProtocol pID, msgNotifyEnterRoomFinish msg)
    {
        JsonObject jsonMsg = new JsonObject();

        jsonMsg.Add("isRelink", msg.isRelink);
        sendMsg(pID, jsonMsg, null);
    }
Example #2
0
    void onEnterRoomFinish(object data)
    {
        //刷新房间规则显示
        RoomEvent.sC2V_RoomRule rr;
        rr.playerNum   = Room.Room.roomRule.playerNum;
        rr.gameTime    = Room.Room.roomRule.gameTime;
        rr.gridLevel   = Room.Room.roomRule.gridLevel;
        rr.rule        = Room.Room.roomRule.rule;
        rr.lmtRound    = Room.Room.roomRule.lmtRound;
        rr.lmtTurnTime = Room.Room.roomRule.lmtTurnTime;
        rr.roomLevel   = Room.Room.roomLevel;
        rr.roomID      = 0;   //此处不需要,填0
        rr.plazaName   = Room.Room.plazaName;
        rr.tag         = Room.Room.tagId;
        rr.type        = (CommonDefine.eCreateRoomType)Room.Room.roomType;

        if (Room.Room.plazaid != 0)
        {
            LobbyEvent.Plaza plaza = getPlazaById(Room.Room.plazaid);
            rr.star = plaza.star;
        }
        else
        {
            rr.star = 0;
        }

        RoomEvent.EM().InvokeEvent(RoomEvent.EVENT.UPDATE_ROOMRULE, (object)rr);

        if (Room.Room.roomType == CommonDefine.eCreateRoomType.ROOM_CLASSIC_PLAZA ||
            Room.Room.roomType == CommonDefine.eCreateRoomType.ROOM_PLAZA ||
            Room.Room.isRelink)
        {
            //完全进入游戏界面后,需要通知服务器可以发用户enter信息了,原则上来说,需要界面真正加载完成后再发,这里暂时直接发送
            msgNotifyEnterRoomFinish efmsg = new msgNotifyEnterRoomFinish();
            efmsg.isRelink = Room.Room.isRelink;
            ProtocolManager.getInstance().sendMsg(GameProtocol.P_GAME_ENTER_ROOM_FINISH, efmsg);
        }
        else
        {
            // 因为房间和组队模式,用户相关信息已经下发,所以需要手动驱动相关消息刷新游戏界面
            for (int i = 0; i < Room.Room.playerList.Count; i++)
            {
                /////////////////////////////enter/////////////////////////////////
                RoomEvent.EM().InvokeEvent(RoomEvent.EVENT.PLAER_ENTER, Room.Room.playerList[i]);

                ///////////////////////state/////////////////////////////////
                RoomEvent.sC2V_PlayerState ps;
                ps.state      = (CommonDefine.PLAYER_STATE)Room.Room.playerList[i].state;
                ps.local      = Room.Room.getLocalBySeat(Room.Room.playerList[i].seat);
                ps.ifAllReady = true;

                RoomEvent.EM().InvokeEvent(RoomEvent.EVENT.UPDATE_PLAER_STATE, (object)ps);
            }

            //进入游戏后的start game
            onEventStartGame(true);
        }
    }
Example #3
0
    void OnRespJoinRoom(Message msg)
    {
        ViewManagerEvent.EM().InvokeEvent(ViewManagerEvent.EVENT.SHOW_LOADING_ANI, false);

        msgRespJoinRoom resp = msgRespJoinRoom.deserialize(msg);
        //此处需要根据各种响应值,来给出友好提示
        string tip = "加入房间失败";

        //RESP_JOINROOM_FLAG
        if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINROOM_SUCCESS ||
            resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINGROOM_ALREADY_IN_ROOM)
        {
            //规则应该一定不会为空的
            if (resp.rule == null || resp.rule.Length == 0)
            {
                //
                return;
            }

            if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINGROOM_ALREADY_IN_ROOM)
            {
                //原则上此处可以直接进入房间,也可以是弹窗提示用户是否重新进入房间
                //
            }

            // 设置相关数据
            Room.Room.setRoomData(resp.roomId, resp.levelId, resp.plazaid, resp.roomType, resp.owner, resp.rule, resp.baseScore);
            Room.Room.isRelink = resp.isRelink;

            //这里需要判断是哪种类型的房间
            if (Room.Room.roomType == CommonDefine.eCreateRoomType.ROOM_ROOM)
            {
                msgNotifyEnterRoomFinish efmsg = new msgNotifyEnterRoomFinish();
                efmsg.isRelink = Room.Room.isRelink;
                ProtocolManager.getInstance().sendMsg(GameProtocol.P_GAME_ENTER_ROOM_FINISH, efmsg);


                if (!Room.Room.isRelink)
                {
                    //刷新房间规则显示
                    RoomEvent.sC2V_RoomRule rr;
                    rr.playerNum   = Room.Room.roomRule.playerNum;
                    rr.gameTime    = Room.Room.roomRule.gameTime;
                    rr.gridLevel   = Room.Room.roomRule.gridLevel;
                    rr.rule        = Room.Room.roomRule.rule;
                    rr.lmtRound    = Room.Room.roomRule.lmtRound;
                    rr.lmtTurnTime = Room.Room.roomRule.lmtTurnTime;
                    rr.roomLevel   = resp.levelId;
                    rr.roomID      = resp.roomId;
                    rr.plazaName   = Room.Room.plazaName;

                    if (Room.Room.plazaid != 0)
                    {
                        LobbyEvent.Plaza plaza = getPlazaById(Room.Room.plazaid);
                        rr.star = plaza.star;
                    }
                    else
                    {
                        rr.star = 0;
                    }

                    rr.tag  = Room.Room.tagId;
                    rr.type = Room.Room.roomType;

                    RoomEvent.EM().InvokeEvent(RoomEvent.EVENT.UPDATE_ROOMRULE, (object)rr);
                }
                else
                {
                    //////
                    ViewManagerEvent.sShowView data;
                    data.fromView = ViewManagerEvent.VIEW_TYPE.LOBBY_VIEW;
                    data.toView   = ViewManagerEvent.VIEW_TYPE.GAME_VIEW;
                    ViewManagerEvent.EM().InvokeEvent(ViewManagerEvent.EVENT.SHOW_VIEW, (object)data);
                }
            }
            else if (Room.Room.roomType == CommonDefine.eCreateRoomType.ROOM_TEAM)
            {
            }
            else
            {
                //另外需要显示房间规则相关的信息在房间某个位置
                //进入房间成功,切换到游戏场景,这里应为主动操作,不需要事件通知请访问GameController来切换
                //或者这里直接切换也行
                //也可以事件通知,为了统一起见
                ViewManagerEvent.sShowView data;
                data.fromView = ViewManagerEvent.VIEW_TYPE.LOBBY_VIEW;
                data.toView   = ViewManagerEvent.VIEW_TYPE.GAME_VIEW;
                ViewManagerEvent.EM().InvokeEvent(ViewManagerEvent.EVENT.SHOW_VIEW, (object)data);
            }

            //结束处理
            return;
        }
        else if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINGROOM_FAIL_ROOM_NOT_EXIST)
        {
            tip = "房间不存在,请重试";
        }
        else if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINROOM_ACCOUNT_ERR)
        {
            tip = "加入失败,用户异常";
        }
        else if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINROOM_FAIL_NO_FREE_ROOM)
        {
            tip = "加入失败,没有可用的房间";
        }
        else if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINROOM_FIAL_SYSERR)
        {
            tip = "加入失败,系统错误";
        }
        else if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINROOM_GOLD_LESS)
        {
            tip = "加入失败,您的积分不足,请充值";
        }
        else if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINROOM_GOLD_MORE)
        {
            tip = "加入失败,您太有钱了,请到其他模式游戏";
        }
        else if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINROOM_LEVEL_LESS)
        {
            tip = "加入失败,您的级别太高了";
        }
        else if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINROOM_LEVEL_MORE)
        {
            tip = "加入失败,您的级别太低了";
        }
        else if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINROOM_PLAZA_ERR)
        {
            tip = "加入失败,参数错误";
        }
        else if (resp.flag == msgRespJoinRoom.RESP_JOINROOM_FLAG.JOINROOM_PWD_ERR)
        {
            tip = "加入失败,密码错误";
        }

        CommonUtil.Util.showDialog("系统提示", tip);
    }