Exemple #1
0
        //---------------------------------------------------------------------
        public async Task enterDesktopPrivate(PrivateDesktopCreateInfo desktop_createinfo)
        {
            if (IsEntering)
            {
                EbLog.Note("CellPlayerDesktop.enterDesktopPrivate() 错误:正在进入中");
                return;
            }
            IsEntering = true;

            if (!string.IsNullOrEmpty(DesktopEtGuid))
            {
                await leaveDesktop();
            }

            var grain = Entity.getUserData <GrainCellPlayer>();
            var grain_desktopservice = grain.GF.GetGrain <ICellDesktopService>(0);
            var desktop_info         = await grain_desktopservice.createPrivateDesktop(desktop_createinfo);

            // Step1:监听桌子广播
            await _createDesktopStreamConsumer(desktop_info.desktop_etguid);

            // 自动下注
            int bet_chip  = 2000;
            int left_chip = CoActor.Def.PropGold.get();

            if (left_chip < bet_chip)
            {
                bet_chip = left_chip;
            }
            left_chip -= bet_chip;
            CoPlayer.CoActor.Def.PropGold.set(left_chip);

            DesktopRequestPlayerEnter request_enter;

            request_enter.desktop_etguid = desktop_info.desktop_etguid;
            request_enter.seat_index     = 0;
            request_enter.player_clip    = 0;
            request_enter.player_gold    = CoActor.Def.PropGold.get();
            request_enter.is_vip         = CoActor.Def.mPropIsVIP.get();

            // Step2:进入桌子并获取桌子初始化信息
            var         grain_desktop = grain.GF.GetGrain <ICellDesktop>(new Guid(desktop_info.desktop_etguid));
            DesktopData desktop_data  = await grain_desktop.s2sPlayerEnter(request_enter, CoPlayer.exportEtPlayerMirror());

            IsEntering    = false;
            DesktopEtGuid = desktop_data.desktop_cfg_data.desktop_etguid;

            DesktopNotify desktop_notify;

            desktop_notify.id   = DesktopNotifyId.DesktopInit;
            desktop_notify.data = EbTool.protobufSerialize <DesktopData>(desktop_data);

            MethodData notify_data = new MethodData();

            notify_data.method_id = MethodType.s2cPlayerDesktopNotify;
            notify_data.param1    = EbTool.protobufSerialize <DesktopNotify>(desktop_notify);
            var grain_player = grain.GF.GetGrain <ICellPlayer>(new Guid(Entity.Guid));

            grain_player.s2sNotify(notify_data);
        }
Exemple #2
0
        //-------------------------------------------------------------------------
        DesktopData _getDesktopData()
        {
            DesktopData desktop_data = new DesktopData();

            desktop_data.desktop_cfg_data = DesktopConfigData;
            desktop_data.list_actormirror = new List <EntityData>();
            foreach (var i in AllSeat)
            {
                if (i.et_playermirror == null)
                {
                    continue;
                }

                var et_data = i.et_playermirror.genEntityData4All();
                desktop_data.list_actormirror.Add(et_data);
            }

            return(desktop_data);
        }
Exemple #3
0
        //-------------------------------------------------------------------------
        // 玩家进入桌子
        public Task <DesktopData> s2sPlayerEnter(DesktopRequestPlayerEnter request_enter, EntityData etdata_playermirror)
        {
            byte seat_index = request_enter.seat_index;

            if (getPlayerCountInSeat() >= DesktopConfigData.seat_num)
            {
                // 没有空座位了,观战
                seat_index = 255;
            }

            if (!isValidSeatIndex(seat_index))
            {
                // 座位索引范围不合法,重新分配空座位
                foreach (var i in AllSeat)
                {
                    if (i.et_playermirror == null)
                    {
                        seat_index = i.index;
                        break;
                    }
                }
            }

            if (isValidSeatIndex(seat_index) && AllSeat[seat_index].et_playermirror != null)
            {
                // 座位上已经有人坐了,重新分配空座位
                foreach (var i in AllSeat)
                {
                    if (i.et_playermirror == null)
                    {
                        seat_index = i.index;
                        break;
                    }
                }
            }

            var et_playermirror = EntityMgr.genEntity <EtPlayerMirror, Entity>(etdata_playermirror, Entity);
            var co_actormirror  = et_playermirror.getComponent <CellActorMirror <DefActorMirror> >();
            var co_ai           = et_playermirror.getComponent <CellActorMirrorAi <DefActorMirrorAi> >();

            byte actorid_indesktop = _genPlayerId();

            co_actormirror.Def.PropActorIdInDesktop.set(actorid_indesktop);

            EbLog.Note("CellDesktop.s2sPlayerEnter() PlayerEtGuid=" + et_playermirror.Guid);

            MapAllPlayer1[actorid_indesktop]   = et_playermirror;
            MapAllPlayer[et_playermirror.Guid] = et_playermirror;
            if (isValidSeatIndex(seat_index))
            {
                AllSeat[seat_index].et_playermirror = et_playermirror;
            }

            co_actormirror.onEnterDesktop(seat_index);

            // 更新DesktopInfo
            refreshDesktopInfo();

            // 广播玩家进入桌子
            DesktopNotify desktop_notify;

            desktop_notify.id   = DesktopNotifyId.PlayerEnter;
            desktop_notify.data = EbTool.protobufSerialize <EntityData>(et_playermirror.genEntityData4All());

            StreamData sd = new StreamData();

            sd.event_id = StreamEventId.DesktopStreamEvent;
            sd.param1   = desktop_notify;
            var grain_desktop = Entity.getUserData <GrainCellDesktop>();

            grain_desktop.AsyncStream.OnNextAsync(sd);

            // 通知场景玩家坐下
            LogicScene.scenePlayerEnter(actorid_indesktop, 1, "aabb", false, -1, TbDataTurret.TurretType.NormalTurret);
            float player_rate = 1.0f;// mEtDesktopPumping.getPlayerUpgradeRate();// 抽水率

            LogicScene.scenePlayerRateChanged(1, player_rate);

            DesktopData desktop_data = _getDesktopData();

            return(Task.FromResult(desktop_data));
        }