/// <summary>
        /// 游戏结束
        /// </summary>
        /// <param name="self"></param>
        public static async void GameOver(this GameControllerComponent self, List <GamerScore> gamersScore, Identity winnerIdentity)
        {
            Room room = self.GetParent <Room>();

            Gamer[] gamers = room.GetAll();

            //清理所有卡牌
            self.BackToDeck();
            room.GetComponent <DeskCardsCacheComponent>().Clear();

            //同步匹配服务器结束游戏
            room.State = RoomState.Ready;
            MapHelper.SendMessage(new MP2MH_SyncRoomState_Ntt()
            {
                RoomID = room.InstanceId, State = room.State
            });

            Dictionary <long, long> gamersMoney = new Dictionary <long, long>();

            foreach (GamerScore gamerScore in gamersScore)
            {
                //结算玩家余额
                Gamer gamer      = room.Get(gamerScore.UserID);
                long  gamerMoney = await self.StatisticalIntegral(gamer, gamerScore.Score);

                gamersMoney[gamer.UserID] = gamerMoney;
            }

            //广播游戏结束消息
            Actor_Gameover_Ntt gameoverMessage = new Actor_Gameover_Ntt()
            {
                Winner            = winnerIdentity,
                BasePointPerMatch = self.BasePointPerMatch,
                Multiples         = self.Multiples
            };

            gameoverMessage.GamersScore.AddRange(gamersScore);
            room.Broadcast(gameoverMessage);

            //清理玩家
            foreach (var _gamer in gamers)
            {
                //踢出离线玩家
                if (_gamer.isOffline)
                {
                    ActorMessageSender actorProxy = Game.Scene.GetComponent <ActorMessageSenderComponent>().Get(_gamer.InstanceId);
                    await actorProxy.Call(new Actor_PlayerExitRoom_Req());
                }
                //踢出余额不足玩家
                else if (gamersMoney[_gamer.UserID] < self.MinThreshold)
                {
                    ActorMessageSender actorProxy = _gamer.GetComponent <UnitGateComponent>().GetActorMessageSender();
                    actorProxy.Send(new Actor_GamerMoneyLess_Ntt()
                    {
                        UserID = _gamer.UserID
                    });
                }
            }
        }
        /// <summary>
        /// 游戏结束
        /// </summary>
        /// <param name="self"></param>
        public static async void GameOver(this GameControllerComponent self, List <GamerScore> gamersScore, Identity winnerIdentity)
        {
            LandlordsRoom room = self.GetParent <LandlordsRoom>();

            Gamer[] gamers = room.gamers;

            //清理所有卡牌
            self.BackToDeck();
            room.GetComponent <DeskCardsCacheComponent>().Clear();

            Dictionary <long, long> gamersMoney = new Dictionary <long, long>();

            foreach (GamerScore gamerScore in gamersScore)
            {
                //结算玩家余额
                Gamer gamer      = room.GetGamerFromUserID(gamerScore.UserID);
                long  gamerMoney = await self.StatisticalIntegral(gamer, gamerScore.Score);

                gamersMoney[gamer.UserID] = gamerMoney;
            }

            //广播游戏结束消息
            room.Broadcast(new Actor_Gameover_Ntt()
            {
                Winner            = (byte)winnerIdentity,
                BasePointPerMatch = self.BasePointPerMatch,
                Multiples         = self.Multiples,
                GamersScore       = To.RepeatedField(gamersScore)
            });

            //清理玩家
            foreach (var _gamer in gamers)
            {
                //踢出离线玩家
                if (_gamer.isOffline)
                {
                    ActorMessageSender actorProxy = Game.Scene.GetComponent <ActorMessageSenderComponent>().Get(_gamer.Id);
                    //await actorProxy.Call(new Actor_PlayerExitRoom_Req());
                }
                //踢出余额不足玩家
                else if (gamersMoney[_gamer.UserID] < self.MinThreshold)
                {
                    //ActorMessageSender actorProxy = _gamer.GetComponent<UnitGateComponent>().GetActorMessageSender();
                    //actorProxy.Send(new Actor_GamerMoneyLess_Ntt() { UserID = _gamer.UserID });
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 游戏结束
        /// </summary>
        /// <param name="self"></param>
        public static async void GameOver(this GameControllerComponent self, Dictionary <long, long> gamersSorce)
        {
            Room room = self.GetEntity <Room>();


            //清理所有卡牌
            self.BackToDeck();
            room.GetComponent <DeskCardsCacheComponent>().Clear();

            //同步匹配服务器结束游戏
            room.State = RoomState.Ready;
            DDZHelper.SendMessage(new SyncRoomState()
            {
                RoomId = room.Id, State = room.State
            });

            Gamer[] gamers = room.GetAll();
            for (int i = 0; i < gamers.Length; i++)
            {
                long gamerMoney = await self.StatisticalIntegral(gamers[i], gamersSorce[gamers[i].Id]);

                bool isKickOut = gamers[i].isOffline;

                //玩家余额低于最低门槛
                if (gamerMoney < self.MinThreshold)
                {
                    ActorProxy actorProxy = gamers[i].GetComponent <UnitGateComponent>().GetActorProxy();
                    actorProxy.Send(new GamerMoneyLess()
                    {
                        PlayerId = gamers[i].Id
                    });
                    isKickOut = true;
                }

                //踢出玩家
                if (isKickOut)
                {
                    ActorProxy actorProxy = Game.Scene.GetComponent <ActorProxyComponent>().Get(self.Entity.Id);
                    actorProxy.Send(new PlayerQuitDdz()
                    {
                        PlayerId = gamers[i].Id
                    });
                }
            }
        }