static MessageCode doSendRankPrize(CrosscrowdInfoEntity crowd, CrosscrowdSendRankPrizeEntity entity, int maxPoint, int maxLegendCount) { try { if (entity.Status != 0) { return(MessageCode.Success); } if (entity.Score <= 0) { return(MessageCode.Success); } string prizeItemString = ""; var mail = new MailBuilder(entity.ManagerId, EnumMailType.CrossCrowdRank, entity.Rank); MessageCode mess = BuildPrizeMail(crowd, mail, EnumCrowdPrizeCategory.CrossRank, entity.Rank, maxPoint, maxLegendCount, ref prizeItemString); if (mess != MessageCode.Success) { return(mess); } entity.Status = 1; CrosscrowdInfoMgr.SaveRankPrizeStatus(entity.Idx, entity.Status); if (!mail.Save(entity.SiteId)) { return(MessageCode.NbParameterError); } SavePrizeRecord(entity.ManagerId, EnumCrowdPrizeCategory.CrossRank, "history:" + entity.Idx, prizeItemString, entity.SiteId); } catch (Exception ex) { SystemlogMgr.Error("CrossCrowd-doSendRankPrize", ex); return(MessageCode.NbParameterError); } return(MessageCode.Success); }
public static void SendPrize(CrossladderManagerhistoryEntity manager, EnumCrossLadderPrizeType crossLadderPrizeType, EnumMailType mailType, int seasonStatus) { if (string.IsNullOrEmpty(manager.PrizeItems)) { manager.PrizeItems = ""; MailBuilder mail = null; int packId = CacheFactory.CrossLadderCache.GetRankPrize(crossLadderPrizeType, manager.Rank,seasonStatus); if (packId <= 0) { SystemlogMgr.Info("CrossLadderSendPrize", "no packid for rank:" + manager.Rank); return; } mail = new MailBuilder(mailType, manager.ManagerId,manager.Season,manager.Rank,manager.RecordDate); var code = MallCore.Instance.BuildPackMail(packId, ref mail); if (code != MessageCode.Success) { SystemlogMgr.Info("CrossLadderSendPrize", "build pack fail rank:" + manager.Rank + ",packId:" + packId); return; } manager.PrizeItems = "pack:" + packId; manager.UpdateTime = DateTime.Now; try { CrossladderManagerhistoryMgr.SavePrize(manager.Idx,manager.PrizeItems); mail.Save(manager.SiteId); } catch (Exception ex) { SystemlogMgr.Error("CrossLadderSendPrize", ex); } } }
public MessageCode RefreshStatus() { DateTime date = DateTime.Now; foreach (var item in _transferDic.Values) { if (date >= item.TransferDuration) { item.Status = 3;//流拍。 从数据库删除 if (TransferMainMgr.Delete(item.TransferId)) { var mail = new MailBuilder(item.SellId, item.ItemCode, item.ItemName, EnumMailType.TransferRunOff); if (!mail.Save(item.SellZoneName)) { SystemlogMgr.Error("邮件发送失败", "邮件发送失败,ManagerId:" + item.SellId + ",ZoneName:" + item.SellZoneName + ",ItemCode:" + item.ItemCode); } Remove(item.TransferId); } } } foreach (var entity in _tenTransferList) { //过了10分钟的放到另外一个字典 if (entity.TransferStartTime.AddMinutes(10) < date) { _transferDic.TryAdd(entity.TransferId, entity); } } _tenTransferList = _tenTransferList.FindAll(r => r.TransferStartTime.AddMinutes(10) > date); Sort(); return(MessageCode.Success); }
int SendItemByType(NbManagershareEntity shareEntity, List <ConfigMallgiftbagEntity> prizeList) { if (prizeList.Count <= 0) { return((int)MessageCode.NbParameterError); } var mail = new MailBuilder(shareEntity.ManagerId, "分享礼包", 0, prizeList, EnumMailType.Share, 0, 0); // var mail = new MailBuilder(shareEntity.ManagerId, point, coin, itemList, EnumMailType.Share); using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault())) { transactionManager.BeginTransaction(); var f = true; if (!mail.Save(transactionManager.TransactionObject)) { f = false; } if (!NbManagershareMgr.Update(shareEntity, transactionManager.TransactionObject)) { f = false; } if (f) { transactionManager.Commit(); } else { transactionManager.Rollback(); return((int)MessageCode.Exception); } } return((int)MessageCode.Success); }
static void doSendKillPrize(CrosscrowdInfoEntity crowd, Guid matchId, Guid managerId, string awayName, string siteId, int maxPoint, int maxLegendCount) { var mail = new MailBuilder(managerId, EnumMailType.CrossCrowdKill, awayName); string prizeItemString = ""; BuildPrizeMail(crowd, mail, EnumCrowdPrizeCategory.CrossKill, 1, maxPoint, maxLegendCount, ref prizeItemString); if (string.IsNullOrEmpty(prizeItemString)) { return; } mail.Save(siteId); SavePrizeRecord(managerId, EnumCrowdPrizeCategory.CrossKill, matchId.ToString(), prizeItemString, siteId); }
/// <summary> /// 针对某场比赛押注的某个经理开奖,如果博彩中了,就给奖励,否则给予惩罚 /// </summary> /// <param name="match">The match.</param> /// <param name="gamble">The gamble.</param> private static void OpenGamble(DailycupMatchEntity match, DailycupGambleEntity gamble) { int matchResult; if (match.HomeScore > match.AwayScore) { matchResult = 1; } else if (match.HomeScore == match.AwayScore) { matchResult = 1;//平局算主队赢 } else { matchResult = 2; } var resultPoint = 0; try { int newLevel = 0; if (matchResult == gamble.GambleResult) //押中 { gamble.Status = (int)EnumGambleStatus.Success; resultPoint = gamble.GamblePoint * 2; //欧洲杯狂欢 ActivityExThread.Instance.EuropeCarnival(2, ref resultPoint); } else //押失败 { gamble.Status = (int)EnumGambleStatus.Fail; } gamble.ResultPoint = resultPoint; //猜中发奖励 if (resultPoint > 0) { var mail = new MailBuilder(gamble); mail.Save(); } } catch (Exception ex) { SystemlogMgr.Error("OpenGamble", string.Format("每日杯赛开奖error{2},matchId:{0},gambleId:{1}", match.Idx, gamble.Idx, ex.Message), ex.StackTrace); } }
/// <summary> /// 下架 /// </summary> /// <param name="managerId"></param> /// <param name="transferId"></param> /// <param name="zoneName"></param> /// <returns></returns> public MessageCodeResponse SoldOut(Guid managerId, Guid transferId, string zoneName) { MessageCodeResponse response = new MessageCodeResponse(); try { if (!IsOpen(managerId, zoneName)) { return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.TransferNotOpen)); } var info = GetInfo(transferId); if (info == null || info.Status == 1) { return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.ItemSoldOut)); } if (info.Status == 2) { return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.ItemHaveSellOut)); } if (info.SellId != managerId) { return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.NotSoldOutAuthority)); } info.Status = 1; info.UpdateTime = DateTime.Now; if (!TransferMainMgr.Delete(transferId)) { return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.NbUpdateFail)); } Remove(transferId); var mail = new MailBuilder(managerId, info.ItemCode, info.ItemName, EnumMailType.TransferSoldOut); if (!mail.Save(info.SellZoneName)) { SystemlogMgr.Error("邮件发送失败", "邮件发送失败,ManagerId:" + info.SellId + ",ZoneName:" + info.SellZoneName + ",ItemCode:" + info.ItemCode); } } catch (Exception ex) { SystemlogMgr.Error("下架", ex); response.Code = (int)MessageCode.NbParameterError; } return(response); }
static void SendMaxKillerPrize(CrosscrowdInfoEntity crowdInfo) { var entity = CrosscrowdMaxkillerrecordMgr.GetMaxKiller(crowdInfo.Idx); if (entity != null && entity.Status == 0) { try { var mail = new MailBuilder(entity.ManagerId, EnumMailType.CrowdMaxKiller); mail.AddAttachment(1, _maxKillerPrizeItem, false, 0); mail.Save(entity.SiteId); entity.Status = 1; entity.PrizeItems = _maxKillerPrizeItem.ToString(); CrosscrowdMaxkillerrecordMgr.Update(entity); } catch (Exception ex) { SystemlogMgr.Error("CrossCrowd-SendMaxKillerPrize", ex); } } }
/// <summary> /// 分享游戏奖励(发放奖励) /// </summary> /// <param name="record"></param> /// <param name="mail"></param> /// <returns></returns> private MessageCode SavePrize(ShareManagerEntity record, MailBuilder mail) { using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault())) { transactionManager.BeginTransaction(); var messageCode = MessageCode.NbUpdateFail; do { if (record.Idx == 0) { if (!ShareManagerMgr.Insert(record, transactionManager.TransactionObject)) { break; } } else { if (!ShareManagerMgr.Update(record, transactionManager.TransactionObject)) { break; } } if (!mail.Save(transactionManager.TransactionObject)) { break; } messageCode = MessageCode.Success; } while (false); if (messageCode == MessageCode.Success) { transactionManager.Commit(); } else { transactionManager.Rollback(); } } return(MessageCode.Success); }
//MessageCode Tran_SaveLottery(DbTransaction transaction, Guid matchId, Guid managerId, ItemPackageFrame package, MailBuilder mail, int lotteryRepeatCode) MessageCode Tran_SaveLottery(DbTransaction transaction, Guid matchId, Guid managerId, int lotteryRepeatCode, ItemPackageFrame package, MailBuilder mail, int point) { MessageCode msg = MessageCode.Success; if (point > 0) { msg = PayCore.Instance.AddBonus(managerId, point, EnumChargeSourceType.PkMatchPrize, ShareUtil.GenerateComb().ToString(), transaction); if (msg != MessageCode.Success) { return(msg); } } int returnCode = -2; PlayerkillInfoMgr.LotterySave(matchId, managerId, lotteryRepeatCode, ref returnCode, transaction); if (returnCode != 0) { return(MessageCode.NbUpdateFail); } if (package != null) { if (!package.Save(transaction)) { return(MessageCode.NbUpdateFail); } package.Shadow.Save(); } if (mail != null) { if (!mail.Save(transaction)) { return(MessageCode.NbUpdateFail); } } return(MessageCode.Success); }
private MessageCode SendPrize(PenaltykickSeasonEntity seasonInfo) { if (seasonInfo.Idx == 0) { return(MessageCode.Success); } PenaltykickManagerMgr.SetRank(); var prizeList = PenaltykickManagerMgr.GetNotPrize(seasonInfo.Idx); seasonInfo.IsPrize = true; seasonInfo.PrizeTime = DateTime.Now; foreach (var item in prizeList) { if (item.IsPrize || item.TotalScore < 500) { continue; } item.IsPrize = true; //排名奖励 var prize = CacheFactory.AdCache.GetPrize(3, item.Rank); if (prize == null || prize.Count == 0) { continue; } //邮件 var mail = new MailBuilder(item.Rank, item.ManagerId); foreach (var p in prize) { switch (p.ItemType) { case 3: //暂时只有物品奖励 mail.AddAttachment(p.ItemCount, p.ItemCode, false, 1); break; case 10: //金条 mail.AddAttachment(EnumCurrencyType.GoldBar, p.ItemCount); break; } } using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault())) { transactionManager.BeginTransaction(); var messageCode = MessageCode.NbUpdateFail; do { if (!PenaltykickManagerMgr.Update(item, transactionManager.TransactionObject)) { break; } if (!mail.Save(transactionManager.TransactionObject)) { break; } messageCode = MessageCode.Success; } while (false); if (messageCode != MessageCode.Success) { transactionManager.Rollback(); } transactionManager.Commit(); } } PenaltykickSeasonMgr.Update(seasonInfo); return(MessageCode.Success); }
/// <summary> /// 球探抽卡 /// </summary> /// <param name="managerId"></param> /// <param name="scoutingId">1金币抽卡,2点券抽卡,3友情点抽卡</param> /// <param name="hasTask"></param> /// <param name="count"></param> /// <param name="isAutoDec"></param> /// <returns></returns> public ScoutingLotteryResponse ScoutingLottery(Guid managerId, int scoutingId, bool hasTask, int count, bool isAutoDec = false) { //金条抽卡 if (scoutingId == 99) { return(ScoutingLotteryGoldBar(managerId, scoutingId, count)); } if (scoutingId > 3) { return(ResponseHelper.InvalidParameter <ScoutingLotteryResponse>()); } bool isTen = count == 10; //是否十连抽 var configScouting = CacheFactory.ScoutingCache.GetEntity(scoutingId); if (configScouting == null) { return(ResponseHelper.InvalidParameter <ScoutingLotteryResponse>()); } var scoutingType = configScouting.Type; var scoutingManager = GetById(managerId); var limitedOrangeCount = 0; ScoutingRecordfordaysMgr.GetCountByTime(managerId, DateTime.Today, DateTime.Today.AddDays(1), scoutingId, ref limitedOrangeCount); LotteryEntity lottery = null; List <int> cardList = null; List <int> limitedCardList = new List <int>(); var activityRate = _europeScoutingRate; if (isTen) { if (!configScouting.HasTen) { return(ResponseHelper.InvalidParameter <ScoutingLotteryResponse>()); } lottery = CacheFactory.LotteryCache.ScoutingTen(scoutingType, configScouting.OrangeLib, configScouting.LowLib, out cardList, limitedOrangeCount, out limitedCardList); } else { lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, scoutingType); } if (lottery == null) { return(ResponseHelper.Create <ScoutingLotteryResponse>(MessageCode.ScoutingLotteryFail)); } //是否免费 bool isFree = false; DateTime curTime = DateTime.Now; ScoutingRecordEntity scoutingRecord = new ScoutingRecordEntity(); scoutingRecord.ManagerId = managerId; bool isAttendActiviyt = true; if (!isTen) //新手引导点券抽卡 { var card = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode); //获取经理信息 var manager = ManagerCore.Instance.GetManagerExtra(managerId); if ((scoutingType == 1 && manager.CoinScouting > 0) || (scoutingType == 2 && manager.Scouting > 0) || (scoutingType == 3 && manager.FriendScouting > 0)) { isFree = true; //免费抽卡不能抽到87以上能力值的卡 lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 4); //免费抽卡卡库 card = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode); } if (configScouting.Type == 2 && scoutingManager.PointLotteryCount == 0) { //第一次必得托雷斯 lottery.PrizeItemCode = 130153; var itemstring = lottery.ItemString.Split(','); itemstring[1] = lottery.PrizeItemCode.ToString(); lottery.ItemString = string.Join(",", itemstring); isAttendActiviyt = false; } else if (scoutingType == 3 && scoutingManager.FriendLotteryCount % 10 == 0) //友情点抽卡十次必得80-84橙卡 { lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 5); card = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode); isAttendActiviyt = false; } else if (scoutingType == 1 && scoutingManager.CoinLotteryCount % 10 == 0) //金币抽卡十次必得80-84橙卡碎片 { lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 6); card = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode); isAttendActiviyt = false; } else if (scoutingType == 2 && scoutingManager.PointLotteryCount % 10 == 0) //钻石抽卡十次必得85-87橙卡 { lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 7); card = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode); isAttendActiviyt = false; } //C罗、梅西外每天只能出3张89以上的橙卡 if (limitedOrangeCount >= 3) { while (card.PlayerKpi >= 89 || card.LinkId == 30001 || card.LinkId == 30002) { lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, scoutingType); card = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode); } } else { if (card.PlayerKpi >= 89 && (card.LinkId != 30001 || card.LinkId != 30002)) { limitedCardList = new List <int>(); limitedCardList.Add(card.ItemCode); isAttendActiviyt = false; } } } if (isTen) { bool isReplace = true; switch (scoutingType) { case 1: //金币 for (int i = 0; i < cardList.Count; i++) { var itemcode = ActivityExThread.Instance.SummerGiftBag(1); if (itemcode > 0) { cardList[i] = itemcode; } else { itemcode = ActivityExThread.Instance.MidAutumnActivity(1, scoutingManager.SpecialItemCoin); if (itemcode > 0) { scoutingManager.SpecialItemCoin++; cardList[i] = itemcode; } } } var coinLottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 6); cardList[RandomHelper.GetInt32WithoutMax(0, cardList.Count)] = coinLottery.PrizeItemCode; lottery.ItemString = string.Join(",", cardList); break; case 2: //钻石 int number = 0; for (int i = 0; i < cardList.Count; i++) { if (ActivityExThread.Instance.IsActivity(EnumActivityExEffectType.EquipmentDebris, 0, 0)) { if (RandomHelper.CheckPercentage(activityRate)) { if (number < 2) { cardList[i] = ActivityExThread.Instance.GetRandomDebris(); number++; } } } var itemcode = ActivityExThread.Instance.SummerGiftBag(2); if (itemcode > 0) { cardList[i] = itemcode; } else { itemcode = ActivityExThread.Instance.MidAutumnActivity(2, scoutingManager.SpecialItemPoint); if (itemcode > 0) { scoutingManager.SpecialItemPoint++; cardList[i] = itemcode; } } var cardLotteryId = ActivityExThread.Instance.ScoutingDebris1(2); if (cardLotteryId > 0) { var code = CacheFactory.LotteryCache.LotteryByLib(cardLotteryId); if (code > 0) { cardList[i] = code; } } var card = ItemsdicCache.Instance.GetItem(cardList[i]); if (card.ItemType == (int)EnumItemType.PlayerCard && card.PlayerCardLevel == (int)EnumPlayerCardLevel.Orange && card.PlayerKpi >= 84) { isReplace = false; } } if (isReplace) { var pointlottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 7); cardList[RandomHelper.GetInt32WithoutMax(0, cardList.Count)] = pointlottery.PrizeItemCode; } lottery.ItemString = string.Join(",", cardList); break; case 3: //友情点 for (int i = 0; i < cardList.Count; i++) { var itemcode = ActivityExThread.Instance.SummerGiftBag(3); if (itemcode > 0) { cardList[i] = itemcode; } else { itemcode = ActivityExThread.Instance.MidAutumnActivity(3, scoutingManager.SpecialItemFriend); if (itemcode > 0) { scoutingManager.SpecialItemFriend++; cardList[i] = itemcode; } } var card = ItemsdicCache.Instance.GetItem(cardList[i]); if (card.ItemType == (int)EnumItemType.PlayerCard && card.PlayerCardLevel == (int)EnumPlayerCardLevel.Orange) { isReplace = false; } } if (isReplace) { var friendlottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 5); cardList[RandomHelper.GetInt32WithoutMax(0, cardList.Count)] = friendlottery.PrizeItemCode; } lottery.ItemString = string.Join(",", cardList); break; } } else { if (scoutingType == 2 && ActivityExThread.Instance.IsActivity(EnumActivityExEffectType.EquipmentDebris, 0, 0)) { if (RandomHelper.CheckPercentage(activityRate)) { if (isAttendActiviyt) { lottery.PrizeItemCode = ActivityExThread.Instance.GetRandomDebris(); var itemstring = lottery.ItemString.Split(','); itemstring[1] = lottery.PrizeItemCode.ToString(); lottery.ItemString = string.Join(",", itemstring); } } } if (isAttendActiviyt) { var itemcode = ActivityExThread.Instance.MidAutumnActivity(scoutingType, scoutingManager.SpecialItemFriend); if (itemcode > 0) { switch (scoutingType) { case 1: scoutingManager.SpecialItemCoin++; break; case 2: scoutingManager.SpecialItemPoint++; break; case 3: scoutingManager.SpecialItemFriend++; break; } lottery.PrizeItemCode = itemcode; var itemstring = lottery.ItemString.Split(','); itemstring[1] = lottery.PrizeItemCode.ToString(); lottery.ItemString = string.Join(",", itemstring); } } } scoutingRecord.ItemCode = lottery.PrizeItemCode; scoutingRecord.ItemString = lottery.ItemString; scoutingRecord.RowTime = curTime; scoutingRecord.ScoutingType = configScouting.Type; scoutingRecord.Status = 1; scoutingRecord.Strength = lottery.Strength; //球探抽卡 var response = MallCore.Instance.Scouting(managerId, configScouting.MallCode, curTime, scoutingRecord, isTen, cardList, isAutoDec, isFree); if (response.Code == (int)MessageCode.Success) { if (scoutingManager != null) //记录玩家抽卡信息 { if (!isTen) { if (scoutingType == 1) { scoutingManager.CoinLotteryCount += 1; } else if (scoutingType == 2) { scoutingManager.PointLotteryCount += 1; } else { scoutingManager.FriendLotteryCount += 1; } } else { if (scoutingType == 1) { scoutingManager.CoinTenLotteryCount += 1; } else if (scoutingType == 2) { scoutingManager.PointTenLotteryCount += 1; } else { scoutingManager.FriendTenLotteryCount += 1; } } scoutingManager.UpdateTime = DateTime.Now; ScoutingManagerMgr.Update(scoutingManager); response.Data.NextPointScouting = GetLotteryNeedCount(scoutingManager.PointLotteryCount); response.Data.NextCoinScouting = GetLotteryNeedCount(scoutingManager.CoinLotteryCount); response.Data.NextFriendScouting = GetLotteryNeedCount(scoutingManager.FriendLotteryCount); } foreach (var itemcode in limitedCardList) { var scoutingRecordDays = new ScoutingRecordfordaysEntity(); scoutingRecordDays.ManagerId = managerId; scoutingRecordDays.CardItemCodeThen89 = itemcode; scoutingRecordDays.RowTime = DateTime.Now; scoutingRecordDays.ScoutingType = scoutingType; ScoutingRecordfordaysMgr.Insert(scoutingRecordDays); } int orangeCount = 0; int purpleCount = 0; int luckyCoinNumber = 0; //点球游戏币数量 int gameCurrency = 0; MailBuilder mail = null; if (isTen) { foreach (var card in cardList) { HandleOrangeCard(managerId, card, ref orangeCount, ref purpleCount, hasTask, ref luckyCoinNumber); ActivityExThread.Instance.ScoutingDebris(managerId, card, ref mail); if (response.Data.OlympicTheGoldMedalId == 0) { //奥运金牌掉落 response.Data.OlympicTheGoldMedalId = OlympicCore.Instance.GetOlympicTheGoldMedal( managerId, (EnumOlympicGeyType)scoutingId); } //点球游戏币 20%概率 最多2个 if (RandomHelper.CheckPercentage(20) && gameCurrency < 2) { gameCurrency++; } } } else { HandleOrangeCard(managerId, response.Data.ItemCode, ref orangeCount, ref purpleCount, hasTask, ref luckyCoinNumber); ActivityExThread.Instance.ScoutingDebris(managerId, response.Data.ItemCode, ref mail); //奥运金牌掉落 response.Data.OlympicTheGoldMedalId = OlympicCore.Instance.GetOlympicTheGoldMedal( managerId, (EnumOlympicGeyType)scoutingId); //点球游戏币 20%概率 if (RandomHelper.CheckPercentage(20)) { gameCurrency++; } } if (mail != null) { mail.Save(); } //如果有点球活动 if (PenaltyKickCore.Instance.IsActivity) { //成功增加数量 int successAddNumber = 0; PenaltykickManagerMgr.AddSystemProduceGameCurrency(managerId, gameCurrency, ref successAddNumber); gameCurrency = successAddNumber; } else { gameCurrency = 0; } List <PopMessageEntity> popList = TaskHandler.Instance.ScoutingLottery(managerId, 1); response.Data.PopMsg = popList; response.Data.LuckyCoinNumber = luckyCoinNumber; response.Data.GameCurrency = gameCurrency; if (response.Data.AddReiki > 0) { ManagerCore.Instance.DeleteCache(managerId); } } return(response); }
/// <summary> /// 金条抽卡 /// </summary> /// <param name="managerId"></param> /// <param name="scoutingId"></param> /// <param name="count"></param> /// <returns></returns> private ScoutingLotteryResponse ScoutingLotteryGoldBar(Guid managerId, int scoutingId, int count) { bool isTen = count == 10; //是否十连抽 var configScouting = CacheFactory.ScoutingCache.GetEntity(scoutingId); if (configScouting == null) { return(ResponseHelper.InvalidParameter <ScoutingLotteryResponse>()); } var scoutingType = configScouting.Type; var scoutingManager = ScoutingGoldbarMgr.GetById(managerId); int prize = 10; ActivityExThread.Instance.ScoutingHalfPrice(ref prize); //没有数据直接返回金条数量不足 if (scoutingManager == null) { return(ResponseHelper.Create <ScoutingLotteryResponse>(MessageCode.ScoutingGoldBarNot)); } var limitedOrangeCount = 0; // ScoutingRecordfordaysMgr.GetCountByTime(managerId, DateTime.Today, DateTime.Today.AddDays(1), scoutingId, // ref limitedOrangeCount); LotteryEntity lottery = null; List <int> cardList = null; List <int> limitedCardList = new List <int>(); if (isTen) { if (!configScouting.HasTen) { return(ResponseHelper.InvalidParameter <ScoutingLotteryResponse>()); } lottery = CacheFactory.LotteryCache.ScoutingTen(scoutingType, configScouting.OrangeLib, configScouting.LowLib, out cardList, limitedOrangeCount, out limitedCardList); prize = prize * 8; //8折 10连 scoutingManager.TenNumber++; } else { lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, scoutingType); scoutingManager.ScoutingNumber++; if (scoutingManager.ScoutingNumber > 0 && scoutingManager.ScoutingNumber % 10 == 0) { lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 98); } } if (scoutingManager.GoldBarNumber < prize) { return(ResponseHelper.Create <ScoutingLotteryResponse>(MessageCode.ScoutingGoldBarNot)); } scoutingManager.GoldBarNumber = scoutingManager.GoldBarNumber - prize; if (lottery == null) { return(ResponseHelper.Create <ScoutingLotteryResponse>(MessageCode.ScoutingLotteryFail)); } DateTime curTime = DateTime.Now; ScoutingRecordEntity scoutingRecord = new ScoutingRecordEntity(); scoutingRecord.ManagerId = managerId; if (!isTen) { var card = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode); if (scoutingManager.ScoutingNumber > 0 && scoutingManager.ScoutingNumber % 10 == 0) //抽卡十次必得89及以上的橙卡,元老,红卡,或传奇碎片 { lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 98); card = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode); } ////C罗、梅西外每天只能出3张89以上的橙卡 //if (limitedOrangeCount >= 3) //{ // while (card.PlayerKpi >= 89 || card.LinkId == 30001 || card.LinkId == 30002) // { // lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, scoutingType); // card = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode); // } //} //else //{ // if (card.PlayerKpi >= 89 && (card.LinkId != 30001 || card.LinkId != 30002)) // { // limitedCardList = new List<int>(); // limitedCardList.Add(card.ItemCode); // } //} } if (isTen) { bool isReplace = true; for (int i = 0; i < cardList.Count; i++) { var itemcode = ActivityExThread.Instance.MidAutumnActivity(99, 0); if (itemcode > 0) { cardList[i] = itemcode; } var card = ItemsdicCache.Instance.GetItem(cardList[i]); if (card.ItemType == (int)EnumItemType.PlayerCard && card.PlayerCardLevel == (int)EnumPlayerCardLevel.Orange && card.PlayerKpi >= 89) { isReplace = false; } else if (card.ItemType == (int)EnumItemType.MallItem) { var player = CacheFactory.PlayersdicCache.GetPlayer(card.ImageId); if (player != null && player.Capacity >= 89) { isReplace = false; } } lottery.ItemString = string.Join(",", cardList); } if (isReplace) { var pointlottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 98); cardList[RandomHelper.GetInt32WithoutMax(0, cardList.Count)] = pointlottery.PrizeItemCode; } lottery.ItemString = string.Join(",", cardList); } scoutingRecord.ItemString = lottery.ItemString; scoutingRecord.ItemCode = lottery.PrizeItemCode; scoutingRecord.RowTime = curTime; scoutingRecord.ScoutingType = configScouting.Type; scoutingRecord.Status = 1; scoutingRecord.Strength = lottery.Strength; scoutingManager.UpdateTiem = DateTime.Now; GoldbarRecordEntity goldBarRecord = new GoldbarRecordEntity(); goldBarRecord.IsAdd = false; goldBarRecord.ManagerId = managerId; goldBarRecord.Number = prize; goldBarRecord.OperationType = (int)EnumTransactionType.ScoutingLottery; goldBarRecord.RowTime = DateTime.Now; #region 球探抽卡 var response = MallCore.Instance.Scouting(managerId, DateTime.Now, scoutingRecord, scoutingManager, isTen, cardList); GoldbarRecordMgr.Insert(goldBarRecord); #endregion if (response.Code == (int)MessageCode.Success) { foreach (var itemcode in limitedCardList) { var scoutingRecordDays = new ScoutingRecordfordaysEntity(); scoutingRecordDays.ManagerId = managerId; scoutingRecordDays.CardItemCodeThen89 = itemcode; scoutingRecordDays.RowTime = DateTime.Now; scoutingRecordDays.ScoutingType = scoutingType; ScoutingRecordfordaysMgr.Insert(scoutingRecordDays); } MailBuilder mail = null; if (isTen) { foreach (var itemcode in cardList) { ActivityExThread.Instance.ScoutingDebris(managerId, itemcode, ref mail); } } else { ActivityExThread.Instance.ScoutingDebris(managerId, scoutingRecord.ItemCode, ref mail); } if (mail != null) { mail.Save(); } List <PopMessageEntity> popList = TaskHandler.Instance.ScoutingLottery(managerId, 1); response.Data.PopMsg = popList; response.Data.LuckyCoinNumber = 0; response.Data.GameCurrency = 0; response.Data.NextGoldBarScouting = scoutingManager.ScoutingNumber == 0 ? 10 : 10 - scoutingManager.ScoutingNumber % 10; if (response.Data.AddReiki > 0) { ManagerCore.Instance.DeleteCache(managerId); } } return(response); }
/// <summary> /// 竞拍 /// </summary> /// <param name="transferId"></param> /// <param name="managerId"></param> /// <param name="zoneName"></param> /// <returns></returns> public AuctionResponse Auction(Guid transferId, Guid managerId, string zoneName) { AuctionResponse response = new AuctionResponse(); try { if (!IsOpen(managerId, zoneName)) { return(ResponseHelper.Create <AuctionResponse>(MessageCode.TransferNotOpen)); } var entity = GetInfo(transferId); if (entity == null) { return(ResponseHelper.Create <AuctionResponse>(MessageCode.ItemSoldOut)); } var goldBarEntity = ScoutingGoldbarMgr.GetById(managerId, zoneName); if (goldBarEntity == null || goldBarEntity.GoldBarNumber < entity.Price) { return(ResponseHelper.Create <AuctionResponse>(MessageCode.ScoutingGoldBarNot)); } if (entity.Status == 1) { return(ResponseHelper.Create <AuctionResponse>(MessageCode.ItemSoldOut)); } if (entity.Status == 2) { return(ResponseHelper.Create <AuctionResponse>(MessageCode.ItemHaveSellOut)); } if (entity.SellId == managerId) { return(ResponseHelper.Create <AuctionResponse>(MessageCode.NotBuyOneself)); } goldBarEntity.GoldBarNumber = goldBarEntity.GoldBarNumber - entity.Price; //手续费 5% int poundage = entity.Price * 5 / 100; if (poundage == 0) { poundage = 1; } else if (poundage > 20) { poundage = 20; } GoldbarRecordEntity auctionRecord = new GoldbarRecordEntity(); auctionRecord.IsAdd = false; auctionRecord.ManagerId = managerId; auctionRecord.Number = entity.Price; auctionRecord.OperationType = (int)EnumTransactionType.Transfer; auctionRecord.RowTime = DateTime.Now; entity.DealEndId = managerId; entity.DealEndPrice = entity.Price; entity.DealEndZoneName = zoneName; entity.Status = 2; entity.UpdateTime = DateTime.Now; entity.Poundage = poundage; if (!TransferMainMgr.Update(entity)) { entity.Status = 0; return(ResponseHelper.Create <AuctionResponse>(MessageCode.NbUpdateFail)); } if (!ScoutingGoldbarMgr.Update(goldBarEntity, null, zoneName)) { return(ResponseHelper.Create <AuctionResponse>(MessageCode.NbUpdateFail)); } Remove(transferId); //出售人邮件 var sellMail = new MailBuilder(entity.SellId, entity.ItemName, EnumCurrencyType.GoldBar, entity.Price - poundage); //购买人邮件 var buyMail = new MailBuilder(managerId, entity.ItemCode, entity.ItemName, entity.Price); if (!sellMail.Save(entity.SellZoneName)) { SystemlogMgr.Error("邮件发送失败", "邮件发送失败,ManagerId:" + entity.SellId + ",ZoneName:" + entity.SellZoneName + ",GoldBarNumber:" + (entity.Price - poundage)); } if (!buyMail.Save(zoneName)) { SystemlogMgr.Error("邮件发送失败", "邮件发送失败,ManagerId:" + managerId + ",ZoneName:" + zoneName + ",GoldBarNumber:" + (entity.Price - poundage)); } GoldbarRecordMgr.Insert(auctionRecord, null, zoneName); response.Data = new AuctionEntity(); response.Data.GoldBar = goldBarEntity.GoldBarNumber; } catch (Exception ex) { SystemlogMgr.Error("竞拍", ex); response.Code = (int)MessageCode.NbParameterError; } return(response); }
private string SaveBuyPointShipmentsTx(NbManagerEntity manager, int point, int bonus, PayChargehistoryEntity payEntity, ManagerMonthcardEntity monthcardEntity, MailBuilder mail, ManagerChargenumberEntity buyRecord, DicMallitemEntity mallConfig, string zoneId) { if (point > 0 || bonus > 0) { var messCode1 = PayCore.Instance.AddPoint(payEntity.Account, point, bonus, EnumChargeSourceType.GmCharge, payEntity.BillingId, null, zoneId); if (messCode1 != MessageCode.Success) { return("增加钻石失败" + point + "," + bonus + "," + (int)messCode1); } PayChargehistoryMgr.Insert(payEntity, null, zoneId); } if (monthcardEntity != null) { if (monthcardEntity.BuyNumber == 1) { if (!ManagerMonthcardMgr.Insert(monthcardEntity, null, zoneId)) { return("月卡发送失败"); } } else { if (!ManagerMonthcardMgr.Update(monthcardEntity, null, zoneId)) { return("月卡发送失败"); } } } if (!mail.Save(zoneId)) { return("邮件发送失败"); } if (buyRecord.Idx == 0) { ManagerChargenumberMgr.Insert(buyRecord, null, zoneId); } else { ManagerChargenumberMgr.Update(buyRecord, null, zoneId); } try { if (manager != null) { var curScore = mallConfig.EffectValue * 10; var vipManager = VipManagerMgr.GetById(manager.Idx, zoneId); if (vipManager != null) { curScore += vipManager.VipExp; vipManager.VipExp = curScore; VipManagerMgr.Update(vipManager, null, zoneId); } else { vipManager = new VipManagerEntity(manager.Idx, curScore, DateTime.Now, DateTime.Now, DateTime.Now); VipManagerMgr.Insert(vipManager, null, zoneId); } var newlevel = CacheFactory.VipdicCache.GetVipLevel(curScore); if (newlevel > manager.VipLevel) { manager.VipLevel = newlevel; ManagerUtil.SaveManagerData(manager, null, null, zoneId); } } } catch (Exception ex) { SystemlogMgr.Error("ChargeUpVip", ex); return(ex.Message); } return(""); }
/// <summary> /// 发奖 /// </summary> /// <returns></returns> public MessageCode SendPrize() { //获取1000条未发奖的记录 var prizeList = ArenaManagerrecordMgr.GetNotPrize(); foreach (var item in prizeList) { if (item.IsPrize || item.PrizeId > 0) { continue; } var prize = CacheFactory.ArenaCache.GetPrize(item.Rank); if (prize == null || prize.Count == 0) { continue; } int arenaCoin = 0; var mail = new MailBuilder(item.ManagerId, EnumMailType.Arena, item.ArenaType, item.Rank, prize, ref arenaCoin); item.IsPrize = true; item.PrizeId = item.Rank; item.PrizeTime = DateTime.Now; var messageCode = MessageCode.NbUpdateFail; using ( var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetConnectionString(EnumDbType.Support))) { transactionManager.BeginTransaction(); do { if (!ArenaManagerinfoMgr.AddArenaCoin(item.ManagerId, arenaCoin, transactionManager.TransactionObject)) { break; } if (!ArenaManagerrecordMgr.Update(item, transactionManager.TransactionObject)) { break; } messageCode = MessageCode.Success; } while (false); if (messageCode == MessageCode.Success) { transactionManager.Commit(); } else { transactionManager.Rollback(); continue; } } if (messageCode == MessageCode.Success) { mail.Save(item.SiteId); } } //刷新对手和排名 MessageCode messageResult = MessageCode.Success; foreach (var item in _threadDic) { var messageCode = item.Value.Refresh(); if (messageCode != MessageCode.Success) { messageResult = messageCode; } } return(messageResult); }
/// <summary> /// 开奖 /// </summary> public void OpenGamble() { try { #region deal case //获取已经到了开奖时间,还没有开奖的主题 List <GambleTitleEntity> titleList = GambleTitleMgr.GetNeedOpenGambleTitles(); if (titleList == null) { return; } if (titleList.Count == 0) { return; } for (int titleIndex = 0, titleCount = titleList.Count; titleIndex < titleCount; titleIndex++) { //如果还没有在后台设置最终哪个选项是获胜选项,就报错 if (titleList[titleIndex].ResultFlagId == Guid.Empty) { //SystemlogMgr.Error("Gamble.OpenGamble", "titleList[titleIndex].ResultFlagId == 0"); continue; } //List<GambleOptionEntity> optionList = GambleOptionMgr.GetByTitleId(titleList[titleIndex].Idx); //if (optionList == null || optionList.Count == 0) //{ // SystemlogMgr.Error("Gamble.OpenGamble", "optionList == null || optionList.Count == 0"); // continue; //} List <GambleHostEntity> hostList = GambleHostMgr.GetByTitleId(titleList[titleIndex].Idx); if (hostList == null || hostList.Count == 0) { //更新状态为已开奖 titleList[titleIndex].Status = 2; if (!GambleTitleMgr.Update(titleList[titleIndex])) { string msg = "GambleTitleId:" + titleList[titleIndex].Idx.ToString() + "Update status to 2 error!"; SystemlogMgr.Error("Gamble.OpenGamble", msg); } continue; } for (int hostIndex = 0, hostCount = hostList.Count; hostIndex < hostCount; hostIndex++) { List <GambleHostoptionrateEntity> rateList = GambleHostoptionrateMgr.GetByHostId(hostList[hostIndex].Idx); if (rateList == null) { continue; } if (rateList.Count == 0) { continue; } decimal winRate = 0.00m; int gambleTotalMoney = 0; for (int rateIndex = 0, rateCount = rateList.Count; rateIndex < rateCount; rateIndex++) { List <GambleDetailEntity> detailList = GambleDetailMgr.GetByOptionId(rateList[rateIndex].Idx); if (detailList == null || detailList.Count == 0) { continue; } if (titleList[titleIndex].ResultFlagId == Guid.Empty) { SystemlogMgr.Error("Gamble.OpenGamble", "ResultFlagId is 0"); continue; } GambleOptionEntity optionRight = GambleOptionMgr.GetById(titleList[titleIndex].ResultFlagId); #region 结算玩家的竞猜点券 //猜中的玩家 if (rateList[rateIndex].OptionId == titleList[titleIndex].ResultFlagId) { winRate = rateList[rateIndex].WinRate; gambleTotalMoney = rateList[rateIndex].GambleMoney; //按照赔率进行结算,发送邮件 for (int detailIndex = 0, detailCount = detailList.Count; detailIndex < detailCount; detailIndex++) { //该玩家的竞猜已经开过奖了 if (detailList[detailIndex].Status != 0) { continue; } //给玩家结算奖金 int returnMoney = Convert.ToInt32( (decimal)detailList[detailIndex].GambleMoney * rateList[rateIndex].WinRate * 0.95m); //更新状态为猜中 detailList[detailIndex].Status = 1; detailList[detailIndex].ResultMoney = returnMoney; if (!GambleDetailMgr.Update(detailList[detailIndex])) { continue; } //string mailContent = "恭喜你,在参与"+titleList[titleIndex].Title + // "的竞猜中,成功猜中" + optionRight.OptionContent + ",获得奖励" // + returnMoney +"点券"; MailBuilder mailGambler = new MailBuilder(EnumMailType.GambleReturnToGambler, detailList[detailIndex].ManagerId, titleList[titleIndex].Title, optionRight.OptionContent, EnumCurrencyType.Point, returnMoney); mailGambler.Save(); //更新竞猜排行榜数据 int subMoney = returnMoney - detailList[detailIndex].GambleMoney; GambleRankMgr.UpdateData(detailList[detailIndex].ManagerId, detailList[detailIndex].ManagerName, subMoney); } } //没猜中 else { for (int detailIndex = 0, detailCount = detailList.Count; detailIndex < detailCount; detailIndex++) { //更新状态为未猜中 detailList[detailIndex].Status = 2; GambleDetailMgr.Update(detailList[detailIndex]); //更新竞猜排行榜数据 GambleRankMgr.UpdateData(detailList[detailIndex].ManagerId, detailList[detailIndex].ManagerName, 0 - detailList[detailIndex].GambleMoney); } } #endregion } #region 结算庄家盈亏 if (hostList[hostIndex].ManagerId != LeagueConst.GambleNpcId) { int hostReturnMoney = Convert.ToInt32(winRate * (decimal)gambleTotalMoney); int hostGambleMoney = hostList[hostIndex].TotalMoney - hostReturnMoney; int tax = 0; int subMoney = hostGambleMoney - hostList[hostIndex].HostMoney; if (hostGambleMoney > hostList[hostIndex].HostMoney) { tax = Convert.ToInt32((decimal)subMoney * 0.05m); subMoney -= tax; } int hostMoney = hostGambleMoney - tax; hostList[hostIndex].HostWinMoney = subMoney; //string mailToHost = "你发起的竞猜"+ titleList[titleIndex].Title+"已完成奖励派发,奖池还剩余"+hostMoney // +"点券,本次竞猜你共盈利"+subMoney+"点券"; MailBuilder mailHost = new MailBuilder(EnumMailType.GambleReturnToHost, hostList[hostIndex].ManagerId, titleList[titleIndex].Title, EnumCurrencyType.Point, hostMoney, subMoney); mailHost.Save(); //更新竞猜排行榜数据 string hostName = ManagerCore.Instance.GetManager(hostList[hostIndex].ManagerId).Name; GambleRankMgr.UpdateData(hostList[hostIndex].ManagerId, hostName, subMoney); } #endregion #region 更新Host状态为已开奖 hostList[hostIndex].Status = 2; GambleHostMgr.Update(hostList[hostIndex]); #endregion } //更新状态为已开奖 titleList[titleIndex].Status = 2; if (!GambleTitleMgr.Update(titleList[titleIndex])) { string msg = "GambleTitleId:" + titleList[titleIndex].Idx.ToString() + "Update status to 2 error!"; SystemlogMgr.Error("Gamble.OpenGamble", msg); } } #endregion #region 更新排行榜 GambleRankMgr.UpdateRank(); #endregion } catch (Exception ex) { SystemlogMgr.Error("Gamble.OpenGamble", ex); } }