/// <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 }); } } }
/// <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 }); } } }