Example #1
0
        //-------------------------------------------------------------------------
        public ItemOperateResponseData operateItem(ItemOperate item_operate)
        {
            // 执行使用道具操作
            ItemOperateResponseData result = new ItemOperateResponseData();

            result.result     = ProtocolResult.Failed;
            result.operate_id = item_operate.operate_id;
            result.item_objid = item_operate.item_objid;

            Item item = null;

            mMapItem.TryGetValue(item_operate.item_objid, out item);
            if (item == null)
            {
                return(result);
            }
            item.operate(item_operate.operate_id);

            // 检测是否需要删除道具
            if (item.ItemData.n <= 0)
            {
                mMapItem.Remove(item_operate.item_objid);
                Dictionary <string, ItemData> map_itemdata4db = Def.mPropMapItemData4Db.get();
                map_itemdata4db.Remove(item_operate.item_objid);
            }

            result.result = ProtocolResult.Success;
            return(result);
        }
Example #2
0
        //-------------------------------------------------------------------------
        public void requestOperateItem(string operate_id, string item_objid)
        {
            ItemOperate item_operate = new ItemOperate();

            item_operate.operate_id = operate_id;
            item_operate.item_objid = item_objid;

            BagRequest bag_request;

            bag_request.id   = BagRequestId.OperateItem;
            bag_request.data = EbTool.protobufSerialize <ItemOperate>(item_operate);

            DefaultRpcSession.rpc((ushort)MethodType.c2sBagRequest, bag_request);
        }
Example #3
0
        //-------------------------------------------------------------------------
        async Task <MethodData> _c2sPlayerRequest(MethodData method_data)
        {
            var player_request = EbTool.protobufDeserialize <PlayerRequest>(method_data.param1);

            switch (player_request.id)
            {
            case PlayerRequestId.PlayNow:    // 立即玩
            {
                EbLog.Note("CellPlayer._c2sPlayerRequest PlayNow() EtGuid=" + Entity.Guid);

                // 通过桌子服务请求立即玩
                await CoPlayerDesktop.enterDesktopPlayNow();
            }
            break;

            case PlayerRequestId.CreatePrivateDesktop:    // c->s,创建私有桌子
            {
                EbLog.Note("CellPlayer.c2sPlayerRequest() CreatePrivateDesktop");

                // 正在进入桌子中
                if (CoPlayerDesktop.IsEntering)
                {
                    goto End;
                }

                // 检测玩家是否已在桌子中
                if (!string.IsNullOrEmpty(CoPlayerDesktop.DesktopEtGuid))
                {
                    goto End;
                }

                // 创建私人桌并入座
                var desktop_createinfo = EbTool.protobufDeserialize <PrivateDesktopCreateInfo>(player_request.data);
                await CoPlayerDesktop.enterDesktopPrivate(desktop_createinfo);

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.CreatePrivateDesktop;
                player_response.data = null;

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.EnterDesktopAny:
            {
                EbLog.Note("CellPlayer.c2sPlayerRequest EnterDesktopAny() EtGuid=" + Entity.Guid);

                await CoPlayerDesktop.enterDesktopPlayNow();

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.EnterDesktopAny;
                player_response.data = null;

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.EnterDesktop:    // 进入桌子
            {
                EbLog.Note("CellPlayer.c2sPlayerRequest EnterDesktop() EtGuid=" + Entity.Guid);

                var desktop_etguid = EbTool.protobufDeserialize <string>(player_request.data);
                if (!string.IsNullOrEmpty(desktop_etguid))
                {
                    await CoPlayerDesktop.enterDesktop(desktop_etguid);
                }

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.EnterDesktop;
                player_response.data = null;

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.LeaveDesktop:    // 离开桌子
            {
                EbLog.Note("CellPlayer.c2sPlayerRequest LeaveDesktop() EtGuid=" + Entity.Guid);

                await CoPlayerDesktop.leaveDesktop();

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.LeaveDesktop;
                player_response.data = null;

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.GetOnlinePlayerNum:    // 获取在线玩家数量
            {
                var grain = Entity.getUserData <GrainCellPlayer>();
                var grain_playerservice = grain.GF.GetGrain <ICellPlayerService>(0);
                var num = await grain_playerservice.getOnlinePlayerNum();

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.GetOnlinePlayerNum;
                player_response.data = EbTool.protobufSerialize <int>(num);

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.DevConsoleCmd:    // 请求执行控制台命令
            {
                var    map_param = EbTool.protobufDeserialize <Dictionary <byte, string> >(player_request.data);
                string cmd       = (string)map_param[0];

                if (cmd == "AddItem")
                {
                    int  item_id = int.Parse(map_param[1]);
                    int  count   = int.Parse(map_param[2]);
                    Item item    = null;
                    CoBag.newItem(item_id, count, out item);
                }
                else if (cmd == "OperateItem")
                {
                    string      operate_id   = map_param[1];
                    string      item_objid   = map_param[2];
                    ItemOperate item_operate = new ItemOperate();
                    item_operate.operate_id = operate_id;
                    item_operate.item_objid = item_objid;
                    CoBag.operateItem(item_operate);
                }
                else if (cmd == "SetLevel")
                {
                    int level = int.Parse(map_param[1]);
                    int exp   = int.Parse(map_param[2]);
                    CoActor.Def.mPropExperience.set(exp);
                    CoActor.Def.mPropLevel.set(level);
                }
            }
            break;

            case PlayerRequestId.GetPlayerInfoOther:    // 请求获取其他玩家信息
            {
                var player_etguid = EbTool.protobufDeserialize <string>(player_request.data);

                var grain = Entity.getUserData <GrainCellPlayer>();
                var grain_playerservice = grain.GF.GetGrain <ICellPlayerService>(0);
                var player_info         = await grain_playerservice.getPlayerInfoOther(player_etguid);

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.GetPlayerInfoOther;
                player_response.data = EbTool.protobufSerialize <PlayerInfoOther>(player_info);

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.ChangeProfileSkin:    // 请求换肤
            {
                var profileskin_tableid = EbTool.protobufDeserialize <int>(player_request.data);

                var profileskin = EbDataMgr.Instance.getData <TbDataPlayerProfileSkin>(profileskin_tableid);
                if (profileskin == null)
                {
                    goto End;
                }

                CoActor.Def.mPropProfileSkinTableId.set(profileskin_tableid);

                var grain = Entity.getUserData <GrainCellPlayer>();
                grain.asyncSaveState();

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.ChangeProfileSkin;
                player_response.data = EbTool.protobufSerialize <int>(profileskin_tableid);

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.ChangeNickName:    // 请求改昵称
            {
                var nick_name = EbTool.protobufDeserialize <string>(player_request.data);

                CoActor.Def.mPropNickName.set(nick_name);

                var grain = Entity.getUserData <GrainCellPlayer>();
                grain.asyncSaveState();

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.ChangeNickName;
                player_response.data = EbTool.protobufSerialize <string>(nick_name);

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.ChangeIndividualSignature:    // 请求改签名
            {
                var sign = EbTool.protobufDeserialize <string>(player_request.data);

                CoActor.Def.mPropIndividualSignature.set(sign);

                var grain = Entity.getUserData <GrainCellPlayer>();
                grain.asyncSaveState();

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.ChangeIndividualSignature;
                player_response.data = EbTool.protobufSerialize <string>(sign);

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.RefreshIpAddress:    // 请求刷新Ip所在地
            {
                _refreshIpAddress();

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.RefreshIpAddress;
                player_response.data = EbTool.protobufSerialize <string>(CoActor.Def.mPropIpAddress.get());

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.ReportPlayer:    // 举报玩家
            {
                var report = EbTool.protobufDeserialize <ReportPlayer>(player_request.data);

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.ReportPlayer;
                player_response.data = EbTool.protobufSerialize <ReportPlayer>(report);

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.InvitePlayerEnterDesktop:    // 邀请玩家进桌
            {
                var invite = EbTool.protobufDeserialize <InvitePlayerEnterDesktop>(player_request.data);

                var grain             = Entity.getUserData <GrainCellPlayer>();
                var grain_playerproxy = grain.GF.GetGrain <ICellPlayerProxy>(new Guid(invite.player_info.player_etguid));
                grain_playerproxy.s2sInvitePlayerEnterDesktop(Entity.Guid, invite.desktop_etguid,
                                                              invite.sb, invite.bb, invite.player_num, invite.seat_num);

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.InvitePlayerEnterDesktop;
                player_response.data = EbTool.protobufSerialize <ProtocolResult>(ProtocolResult.Success);

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.GivePlayerChip:    // 赠送玩家筹码
            {
                var give_chip = EbTool.protobufDeserialize <GivePlayerChip>(player_request.data);

                ProtocolResult re       = ProtocolResult.Failed;
                int            chip_cur = CoActor.Def.PropGold.get();

                if (chip_cur >= 100000 && give_chip.chip >= 100000 && chip_cur >= give_chip.chip)
                {
                    var grain             = Entity.getUserData <GrainCellPlayer>();
                    var grain_playerproxy = grain.GF.GetGrain <ICellPlayerProxy>(new Guid(give_chip.player_info.player_etguid));
                    await grain_playerproxy.s2sGivePlayerChip(Entity.Guid, give_chip.chip);

                    re        = ProtocolResult.Success;
                    chip_cur -= give_chip.chip;
                    CoActor.Def.PropGold.set(chip_cur);
                }
                else
                {
                    re = ProtocolResult.Failed;
                }

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.GivePlayerChip;
                player_response.data = EbTool.protobufSerialize <ProtocolResult>(re);

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.SetVip4Test:    // 请求设置是否为Vip
            {
                EbLog.Note("CellPlayer.c2sPlayerRequest LeaveDesktop() EtGuid=" + Entity.Guid);

                var is_vip = EbTool.protobufDeserialize <bool>(player_request.data);
                CoActor.Def.mPropIsVIP.set(is_vip);

                var grain = Entity.getUserData <GrainCellPlayer>();
                grain.asyncSaveState();

                PlayerResponse player_response;
                player_response.id   = PlayerResponseId.SetVip4Test;
                player_response.data = EbTool.protobufSerialize(is_vip);

                MethodData result = new MethodData();
                result.method_id = MethodType.s2cPlayerResponse;
                result.param1    = EbTool.protobufSerialize <PlayerResponse>(player_response);
                return(result);
            }

            case PlayerRequestId.SetAFK:    // 请求设置是否挂机
            {
                var afk = EbTool.protobufDeserialize <bool>(player_request.data);
                if (CoActor.Def.mPropIsBot.get())
                {
                    // 机器人总是挂机状态,无需设置
                    goto End;
                }

                if (CoActor.Def.mPropIsAFK.get() != afk)
                {
                    CoActor.Def.mPropIsAFK.set(afk);

                    PlayerNotify player_notify;
                    player_notify.id   = PlayerNotifyId.SetAFK;
                    player_notify.data = EbTool.protobufSerialize <bool>(afk);

                    MethodData notify_data = new MethodData();
                    notify_data.method_id = MethodType.s2cPlayerNotify;
                    notify_data.param1    = EbTool.protobufSerialize <PlayerNotify>(player_notify);
                    var grain        = Entity.getUserData <GrainCellPlayer>();
                    var grain_player = grain.GF.GetGrain <ICellPlayer>(new Guid(Entity.Guid));
                    grain_player.s2sNotify(notify_data);
                }
            }
            break;

            default:
                break;
            }

End:
            MethodData r = new MethodData();

            r.method_id = MethodType.None;
            return(r);
        }