public override bool TakeAction() { PlayerMeridianLogic playerMeridian = new PlayerMeridianLogic(); playerMeridian.SetUser(m_UserId); PlayerLogic player = new PlayerLogic(); player.SetUser(m_UserId); DTMeridian starData = CacheSet.MeridianTable.GetData(m_RequestPacket.StarId); if (starData == null) { ErrorCode = (int)ErrorType.CannotOpenChance; ErrorInfo = "wrong star Id"; return(false); } if (!player.DeductStarEnergy(starData.CostMeridianEnergy)) { if (!player.DeductMoney(starData.CostMoney)) { ErrorCode = (int)ErrorType.RequireNotMet; ErrorInfo = "have not enough energy or money"; return(false); } } if (!playerMeridian.OpenStar(m_RequestPacket.StarId, starData.Type)) { ErrorCode = (int)ErrorType.RequireNotMet; ErrorInfo = "you can not open this Star yet"; return(false); } player.AddCoin(starData.RewardCoin); player.AddMoney(starData.RewardMoney); m_ResponsePacket.PlayerInfo = new PBPlayerInfo() { Id = m_UserId, Coin = player.MyPlayer.Coin, Money = player.MyPlayer.Money, MeridianEnergy = player.MyPlayer.StarEnergy }; Dictionary <int, int> dropItem = new Dictionary <int, int>(); dropItem.Add(starData.RewardId, starData.RewardCount); PlayerPackageLogic playerPackage = new PlayerPackageLogic(); playerPackage.SetUser(m_UserId); PBReceivedItems receivedItems; playerPackage.GetItems(dropItem, ReceiveItemMethodType.None, out receivedItems); foreach (var gear in receivedItems.GearInfo) { m_ResponsePacket.GearInfo.Add(gear); } foreach (var inventory in receivedItems.ItemInfo) { m_ResponsePacket.ItemInfo.Add(inventory); } foreach (var meridian in playerMeridian.MyMeridian.UnlockedMeridians) { PBMeridianInfo meridianInfo = new PBMeridianInfo() { Id = meridian.Key }; meridianInfo.UnlockedStars.AddRange(meridian.Value.UnlockedStars); m_ResponsePacket.MeridianInfo.Add(meridianInfo); } return(true); }