using Google.Protobuf.WellKnownTypes; using Org.BouncyCastle.Bcpg; using ProtoCSStruct; using Sog; using System; using System.Collections.Generic; using System.Linq; namespace Game { public static class HomeAdSvc { public static void InitOrReset(PlayerOnGame player) { //判断是否是初始化过或者同一天再刷 var openDay = GameServerUtils.GetOpenDay(player.RealmID); if (player.RoleData.HomeAd.Infos.Count == 0 || openDay != player.RoleData.HomeAd.NextTime) { player.RoleData.HomeAd.Infos.Clear(); player.RoleData.HomeAd.NextTime = openDay; } foreach (var desc in AdvertisementConfigDescMgr.Instance.ItemTable.Values) { var index = -1; for (int i = 0; i < player.RoleData.HomeAd.Infos.Count; i++) { if (player.RoleData.HomeAd.Infos[i].Id == desc.InternalId) { index = i; break; } } if (index > -1) { continue; } if (player.RoleData.HomeAd.Infos.Count >= player.RoleData.HomeAd.Infos.GetMaxCount()) { TraceLog.Error("HomeAdEvent.OnRoleEnter error adCount more than GetMaxCount"); break; } var info = new DBADInfo { Id = desc.InternalId, GetCount = 0, ColdTime = 0 }; player.RoleData.HomeAd.Infos.Add(info); } SendAdInfo(player); } public static CSErrCode PassAd(PlayerOnGame player, int type) { int needMoney = 5; UnifyOp bagOp = new UnifyOp(player, BillChangeItemReason.HomeAD, "PassAd"); bagOp.CostDiamond(needMoney); if (bagOp.DoOp() != CSErrCode.None) return CSErrCode.Fail; CSErrCode ret = CSErrCode.Fail; switch (type) { case 1: //钻石 break; } return ret; } public static void SendAdInfo(PlayerOnGame player, int advId = 0) { CSAdGetInfoRes res = new CSAdGetInfoRes(); for (int i = 0; i < player.RoleData.HomeAd.Infos.Count; i++) { var infoDesc = AdvertisementConfigDescMgr.Instance.GetConfigByInternal(player.RoleData.HomeAd.Infos[i].Id); if (infoDesc == null) continue; if (advId == 0) { res.Infos.Add(ref player.RoleData.HomeAd.Infos[i]); res.Infos[res.Infos.Count - 1].ColdTime -= GameServerUtils.GetTimeSecond(); if (res.Infos[res.Infos.Count - 1].ColdTime <= 0) res.Infos[res.Infos.Count - 1].ColdTime = 0; } else { if (player.RoleData.HomeAd.Infos[i].Id == advId) { res.Infos.Add(ref player.RoleData.HomeAd.Infos[i]); res.Infos[res.Infos.Count - 1].ColdTime -= GameServerUtils.GetTimeSecond(); if (res.Infos[res.Infos.Count - 1].ColdTime <= 0) res.Infos[res.Infos.Count - 1].ColdTime = 0; break; } } } player.SendToClient((int)CSGameMsgID.AdGetInfoRes, ref res); } public static void SendAdvReward(PlayerOnGame player, int advId) { var desc = AdvertisementConfigDescMgr.Instance.GetConfigByInternal(advId); var list = new List(); var syn = new CSHomeAdGiveMoneySyn { AdvId = advId }; switch (desc.type) { case AdvertisementConfigType.Sweep: ChapterSvc.OnMopUp(player, true); break; case AdvertisementConfigType.Gacha: var poolId = GachaDescMgr.Instance.GetConfig(desc.typeParam).InternalId; RecruitSvc.RecruitAdv(player, poolId); break; case AdvertisementConfigType.Market: if (string.IsNullOrEmpty(desc.typeParam)) { break; } var split = desc.typeParam.Split("_"); var shopId = split[0]; var goodIndex = split[1]; MarketShopHandler.OnAdvBuyGoods(player, int.Parse(shopId), int.Parse(goodIndex)); break; case AdvertisementConfigType.Revive: var packet = new StructPacket(); packet.Header.Type = (int)CSGameMsgID.BattleOptionReq; var parser = new StructMessageParser(); packet.Parser = parser; ref var req = ref packet.GetMessage(); req.Option = ChapterOption.ResurrectionBattle; ChapterSvc.OnBattleOption(player, packet, true); break; case AdvertisementConfigType.ShopRefresh: if (string.IsNullOrEmpty(desc.typeParam)) { break; } MarketShopSvc.RefreshShopByAdv(player, int.Parse(desc.typeParam)); break; case AdvertisementConfigType.PopPack: PayCommSvc.FakePay(player.UserID, int.Parse(desc.typeParam)); break; } var reward = ChapterHelper.ConvRewardInternal(player, desc.adReward, false); if (reward != null && reward.Count > 0) { var unifyOp = new UnifyOp(player, BillChangeItemReason.HomeAD); foreach (var r in reward) { unifyOp.AddGoods(r.Type, r.Id, r.Value); } unifyOp.DoOp(retList: list); } foreach (var item in list) { if (item.ChgCount < 0) { continue; } syn.Rewards.Add(item); } player.SendToClient((int)CSGameMsgID.HomeadAdGiveMoneySyn, ref syn); TaskEXEvent.TriggerWatchAdsN(player, 1); } public static void CheckLoginCount(PlayerOnGame player) { if (AppTime.IsSameDay(GameServerUtils.GetTimeSecond(), player.RoleData.BurtyingPoint.LsatLoginTime) == false) { player.RoleData.BurtyingPoint.UserloginCount += 1; player.RoleData.BurtyingPoint.LsatLoginTime = GameServerUtils.GetTimeSecond(); if (player.RoleData.BurtyingPoint.UserloginCount == 1) { GameTALogUtils.LogToClient(player, "UserLogin_1day"); } else if (player.RoleData.BurtyingPoint.UserloginCount == 3) { GameTALogUtils.LogToClient(player, "UserLogin_3day"); } else if (player.RoleData.BurtyingPoint.UserloginCount == 5) { GameTALogUtils.LogToClient(player, "UserLogin_5day"); } else if (player.RoleData.BurtyingPoint.UserloginCount == 7) { GameTALogUtils.LogToClient(player, "UserLogin_7day"); } } } //获取广告次数 public static int GetAdvTimes(PlayerOnGame player, AdvertisementConfigDesc desc) { var baseVal = desc.adverTimes; if (baseVal == -1) { return Int32.MaxValue; } if (desc.adverId != "BuyPower") { return baseVal; } var ret = MonthlyCardSvc.GetMonthlyCardBuff(player, MonthlyCardBuffId.AdBuyPowerTimes); return baseVal + ret; } public static void SunRaceHorsrTime(PlayerOnGame player) { return; } } }