Files
ft/Client/Assets/Scripts/EventOfferJourney/EventOfferJourneyTableContext.cs
2026-06-29 21:18:33 +08:00

278 lines
10 KiB
C#

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<Tables>();
ctx._eventId = eventId;
var res = GContext.container.Resolve<Tables>().TbFishingEvent.DataMap.TryGetValue(eventId, out ctx._tableEvent);
if (!res)
{
return null;
}
ctx._redirectId = ctx._tableEvent.RedirectID;
ctx._tableMain = GContext.container.Resolve<Tables>().TbEventOfferJourneyMain[ctx._redirectId];
return ctx;
}
public static EventOfferJourneyTableContext GetTestSample()
{
var ctx = new EventOfferJourneyTableContext();
ctx._tables = GContext.container.Resolve<Tables>();
ctx._eventId = 114514;
ctx._redirectId = 90502001;
ctx._tableMain = GContext.container.Resolve<Tables>().TbEventOfferJourneyMain[ctx._redirectId];
ctx._tableEvent = GContext.container.Resolve<Tables>().TbFishingEvent[ctx._eventId];
ctx._redirectId = ctx._tableEvent.RedirectID;
return ctx;
}
public List<EventOfferJourneyBlockData> GetRewardList(int vipLvl)
{
var packData = _tables.TbEventPackManager.GetOrDefault(_tableMain.PackId);
var res = new List<EventOfferJourneyBlockData>();
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<DateTime, DateTime> GetEventStartTimeAndEndTime()
{
try
{
var et = DateTime.Parse((_tableEvent.TimeDefinition as LimitedTime).EndTime);
var st = DateTime.Parse((_tableEvent.TimeDefinition as LimitedTime).StartTime);
return new Tuple<DateTime, DateTime>(st, et);
}
catch (Exception e)
{
Debug.LogError(e);
return new Tuple<DateTime, DateTime>(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<IEventOfferJourneyData>();
if (data != null)
{
intCost = GContext.container.Resolve<PlayerItemData>().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<Tables>();
private EventOfferJourneyMain TableMain => _tables.TbEventOfferJourneyMain[ThePackId];
public int TriggerPackId => TableMain.PackId;
public int MaxRoundCount => TableMain.Round;
private TriggerPackBuyData PackTriggerData => GContext.container.Resolve<TriggerPackData>().GetTriggerPackBuyDataById(TriggerPackId);
public bool IsEventActive => PackTriggerData != null;
public int VipLvlOnTrigger => PackTriggerData.vipLevel;
public string EntranceIconUrl => TableMain.Icon;
public List<EventOfferJourneyBlockData> GetRewardList()
{
var packData = _tables.TbTriggerPackManager.GetOrDefault(TableMain.PackId);
var res = new List<EventOfferJourneyBlockData>();
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<DateTime, DateTime> GetEventStartTimeAndEndTime()
{
try
{
var cur = ZZTimeHelper.UtcNow();
var et = GlobalUtils.TryParseDateTime(PackTriggerData.time, cur);
var st = et - TimeSpan.FromDays(7);
return new Tuple<DateTime, DateTime>(st, et);
}
catch (Exception e)
{
Debug.LogError(e);
return new Tuple<DateTime, DateTime>(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;
}
}