using cfg; using System.Linq; using UnityEngine; using System.Collections.Generic; using asap.core; using GameCore; using System; public class EventOfferJourneyTableContext { private int _eventId, _redirectId; private Tables _tables; private EventOfferJourneyMain _tableMain; private FishingEvent _tableEvent; public int MaxRoundCount => _tableMain.Round; public string EntranceIconUrl => _tableMain.Icon; private EventOfferJourneyTableContext() { } public static EventOfferJourneyTableContext CreateNew(int eventId) { var ctx = new EventOfferJourneyTableContext(); ctx._tables = GContext.container.Resolve(); ctx._eventId = eventId; var res = GContext.container.Resolve().TbFishingEvent.DataMap.TryGetValue(eventId, out ctx._tableEvent); if (!res) { return null; } ctx._redirectId = ctx._tableEvent.RedirectID; ctx._tableMain = GContext.container.Resolve().TbEventOfferJourneyMain[ctx._redirectId]; return ctx; } public static EventOfferJourneyTableContext GetTestSample() { var ctx = new EventOfferJourneyTableContext(); ctx._tables = GContext.container.Resolve(); ctx._eventId = 114514; ctx._redirectId = 90502001; ctx._tableMain = GContext.container.Resolve().TbEventOfferJourneyMain[ctx._redirectId]; ctx._tableEvent = GContext.container.Resolve().TbFishingEvent[ctx._eventId]; ctx._redirectId = ctx._tableEvent.RedirectID; return ctx; } public List GetRewardList(int vipLvl) { var packData = _tables.TbEventPackManager.GetOrDefault(_tableMain.PackId); var res = new List(); if (packData == null) { Debug.Log("[EventOfferJourney] packData not found."); return res; } var baseTicketCostList = _tableMain.ItemRequireBase; var packList = packData.VIPPackList[Mathf.Clamp(vipLvl, 0, packData.VIPPackList.Count - 1)].Select(id => _tables.TbPack.GetOrDefault(id)).ToArray(); UnityEngine.Assertions.Assert.IsTrue(packList.Length == baseTicketCostList.Count, $"iap count {packList.Length} and main table count {baseTicketCostList.Count} does not match"); var vipMultiplier = _tableMain.ItemMultipleVip[Mathf.Clamp(vipLvl, 0, _tableMain.ItemMultipleVip.Count - 1)]; for (int i = 0; i < packList.Length; i++) { var iapId = packList[i].IAPID; var dropId = packList[i].DropID; var ticketCost = GetTicketCost(baseTicketCostList[i], vipMultiplier, _tableMain.Multiple); if (iapId != 0) res.Add(EventOfferJourneyBlockData.CreateIapData(iapId, dropId)); else res.Add(EventOfferJourneyBlockData.CreateTicketData(ticketCost, dropId)); } return res; } public int GetDropIdByProgress(int progress, int vipLvl) { var packData = _tables.TbEventPackManager.GetOrDefault(_tableMain.PackId); if (packData == null) { Debug.Log("[EventOfferJourney] packData not found."); return -1; } // var baseTicketCostList = _tableMain.ItemRequireBase; var packList = packData.VIPPackList[Mathf.Clamp(vipLvl, 0, packData.VIPPackList.Count - 1)].Select(id => _tables.TbPack.GetOrDefault(id)).ToArray(); // UnityEngine.Assertions.Assert.IsTrue(packList.Length == baseTicketCostList.Count, // $"iap count {packList.Length} and main table count {baseTicketCostList.Count} does not match"); if (progress >= packList.Length) return packList[packList.Length - 1].DropID; else return packList[progress].DropID; } public Tuple GetEventStartTimeAndEndTime() { try { var et = DateTime.Parse((_tableEvent.TimeDefinition as LimitedTime).EndTime); var st = DateTime.Parse((_tableEvent.TimeDefinition as LimitedTime).StartTime); return new Tuple(st, et); } catch (Exception e) { Debug.LogError(e); return new Tuple(DateTime.MinValue, DateTime.MinValue); } } public int GetTicketCostByProgress(int progress, int vipLvl) { var baseTicketCostList = _tableMain.ItemRequireBase; var vipMultiplier = _tableMain.ItemMultipleVip[Mathf.Clamp(vipLvl, 0, _tableMain.ItemMultipleVip.Count - 1)]; var modUnit = _tableMain.Multiple; var ticketCost = GetTicketCost(baseTicketCostList[progress], vipMultiplier, modUnit); return ticketCost; } public static int GetTicketCost(int baseCost, float multiplier, int modUnit) { var intCost = (int)(baseCost * multiplier); var data = GContext.container.Resolve(); if (data != null) { intCost = GContext.container.Resolve().IntInflation(intCost, data.InflationRate); } // Debug.Log($"[EventOfferJourney] {intCost} = {baseCost} * {multiplier}"); var residual = intCost % modUnit; if (residual == 0) { return intCost; } else if (residual >= modUnit / 2f) { return intCost + (modUnit - residual); } else { return intCost - residual; } } public EventOfferJourneyUiData GetUiData() { return new EventOfferJourneyUiData() { PanelUrl = _tableMain.UIPanel, InfoPanelUrl = _tableMain.InfoPanel }; } public int[] GetTicketRewardArray() { return _tableMain.PointsGet.ToArray(); } public string GetTicketName() { var id = _tableMain.Item; var item = _tables.TbItem.GetOrDefault(id); if (item == null) return string.Empty; return LocalizationMgr.GetText(item.Name_l10n_key); } public int GetTicketId() { return _tableMain.Item; } public int GetStartPosParam() { return _tableMain.StartPos; } } public class EventOfferJourneyLvlTriggerTableContext { public static int ThePackId = 90501001; private readonly Tables _tables = GContext.container.Resolve(); private EventOfferJourneyMain TableMain => _tables.TbEventOfferJourneyMain[ThePackId]; public int TriggerPackId => TableMain.PackId; public int MaxRoundCount => TableMain.Round; private TriggerPackBuyData PackTriggerData => GContext.container.Resolve().GetTriggerPackBuyDataById(TriggerPackId); public bool IsEventActive => PackTriggerData != null; public int VipLvlOnTrigger => PackTriggerData.vipLevel; public string EntranceIconUrl => TableMain.Icon; public List GetRewardList() { var packData = _tables.TbTriggerPackManager.GetOrDefault(TableMain.PackId); var res = new List(); if (packData == null) { Debug.Log($"[EventOfferJourney] packData not found for {TableMain.PackId}"); return res; } var baseTicketCostList = TableMain.ItemRequireBase; var packList = packData.VIPPackList[Mathf.Clamp(VipLvlOnTrigger, 0, packData.VIPPackList.Count - 1)] .Select(id => _tables.TbPack.GetOrDefault(id)).ToArray(); UnityEngine.Assertions.Assert.IsTrue(packList.Length == baseTicketCostList.Count, $"iap count {packList.Length} and main table count {baseTicketCostList.Count} does not match"); var vipMultiplier = TableMain.ItemMultipleVip[PackTriggerData.vipLevel]; for (int i = 0; i < packList.Length; i++) { var iapId = packList[i].IAPID; var dropId = packList[i].DropID; var ticketCost = EventOfferJourneyTableContext.GetTicketCost(baseTicketCostList[i], vipMultiplier, TableMain.Multiple); if (iapId != 0) res.Add(EventOfferJourneyBlockData.CreateIapData(iapId, dropId)); else res.Add(EventOfferJourneyBlockData.CreateTicketData(ticketCost, dropId)); } return res; } public int GetTicketCostByProgress(int progress) { var baseTicketCostList = TableMain.ItemRequireBase; float vipMultiplier; if (IsEventActive) vipMultiplier = TableMain.ItemMultipleVip[Mathf.Clamp(VipLvlOnTrigger, 0, TableMain.ItemMultipleVip.Count - 1)]; else { Debug.LogWarning("[EventOfferJourney] No trigger pack data. This is a problem."); vipMultiplier = 1; } var ticketCost = EventOfferJourneyTableContext.GetTicketCost(baseTicketCostList[progress], vipMultiplier, TableMain.Multiple); return ticketCost; } public EventOfferJourneyUiData GetUiData() { return new EventOfferJourneyUiData { PanelUrl = TableMain.UIPanel, InfoPanelUrl = TableMain.InfoPanel }; } public Tuple GetEventStartTimeAndEndTime() { try { var cur = ZZTimeHelper.UtcNow(); var et = GlobalUtils.TryParseDateTime(PackTriggerData.time, cur); var st = et - TimeSpan.FromDays(7); return new Tuple(st, et); } catch (Exception e) { Debug.LogError(e); return new Tuple(DateTime.MinValue, DateTime.MinValue); } } public int[] GetTicketRewardArray() { return TableMain.PointsGet.ToArray(); } public string GetTicketName() { var id = TableMain.Item; var item = _tables.TbItem.GetOrDefault(id); if (item == null) return string.Empty; return LocalizationMgr.GetText(item.Name_l10n_key); } public int GetTicketId() { return TableMain.Item; } public int GetStartPosParam() { return TableMain.StartPos; } }