NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/BattlePass/MonthlyPassManager.cs

306 lines
9.3 KiB
C#
Raw Normal View History

2025-03-21 13:55:46 +08:00
using cfg.ChargeCfg;
2025-02-11 12:40:54 +08:00
using Framework;
2025-02-08 19:09:29 +08:00
using Gameplay;
using Gameplay.Net;
using NLDPB;
2025-02-08 19:09:29 +08:00
using PhxhSDK;
2025-02-11 12:40:54 +08:00
using System;
2025-02-08 19:09:29 +08:00
using static Gameplay.CommonUtils;
public class MonthlyPassManager : Singlenton<MonthlyPassManager>,IInitable
{
public class MonthlyPassService
2025-02-08 19:09:29 +08:00
{
public bool IsPassUnlock { get; private set; }
2025-03-06 15:29:11 +08:00
public DateTime Endtime { get; private set; }
2025-02-08 19:09:29 +08:00
public bool TodayHasClaimed { get; private set; }
public delegate void RefreshDelegate();
public event RefreshDelegate OnRefresh;
2025-02-08 19:09:29 +08:00
public MonthlyPassService()
{
IsPassUnlock = false;
2025-03-06 15:29:11 +08:00
Endtime = DateTime.MinValue;
2025-02-08 19:09:29 +08:00
TodayHasClaimed = false;
}
2025-02-11 12:40:54 +08:00
/// <summary>
/// 数据同步
/// </summary>
public void Refresh()
{
IsPassUnlock = Actor.Instance.Logic.GetCount((uint)LogicID.MonthlyPassId) > 0;
2025-03-21 13:55:46 +08:00
//if (IsPassUnlock)
//{
// Instance.UpdatePassService((int)Actor.Instance.Logic.GetCount((uint)LogicID.MonthlyPassId));
//}
var EndTime = Actor.Instance.Logic.GetCount((uint)LogicID.MonthlyPassValidity);
if (EndTime > 0)
{
2025-03-06 15:29:11 +08:00
Endtime = CommonUtils.GetTimeByTimestamp(EndTime);
}
else
{
2025-03-06 15:29:11 +08:00
Endtime = DateTime.MinValue;
}
TodayHasClaimed = Actor.Instance.Logic.GetCount((uint)LogicID.MonthlyPassRewardStatus) == 1;
2025-03-06 15:29:11 +08:00
var RemainingDays = Endtime - CommonUtils.GetCurTime(E_TimeType.Server);
DebugUtil.Log("当前月卡状态: IsPassUnlock = " + IsPassUnlock + "\n RemainingDays = " + RemainingDays.TotalDays + "\n TodayHasClaimed = " + TodayHasClaimed);
OnRefresh?.Invoke();
}
2025-02-08 19:09:29 +08:00
}
private MonthlyPassService PassService;
2025-03-21 13:55:46 +08:00
public bool needPrompt { get; private set;}
public void AddMonthlyPassRefreshListener(MonthlyPassService.RefreshDelegate listener)
{
PassService.OnRefresh += listener;
}
public void RemoveMonthlyPassRefreshListener(MonthlyPassService.RefreshDelegate listener)
{
PassService.OnRefresh -= listener;
}
2025-03-06 13:10:08 +08:00
//private DataMonthlyPass CurrentPass = null;
2025-02-08 19:09:29 +08:00
public void Init()
{
PassService = new MonthlyPassService();
2025-03-21 13:55:46 +08:00
needPrompt = false;
2025-02-13 19:03:16 +08:00
EventManager.Instance.Register<uint>(EventManager.EventName.PartLogicUpdate, LogicListener);
2025-02-13 19:03:16 +08:00
EventManager.Instance.Register(EventManager.EventName.MonthlyPassBuySuccess, PassService.Refresh);
EventManager.Instance.Register(EventManager.EventName.MonthlyPassGetReward, PassService.Refresh);
2025-02-08 19:09:29 +08:00
}
2025-03-21 13:55:46 +08:00
///// <summary>
///// 根据服务器信息更新当月月卡内容
///// </summary>
///// <param name="PassID"></param>
//public void UpdatePassService(int PassID)
//{
// //var table = TableManager.Instance.Tables.MonthlyPass;
// //if (table.DataMap.TryGetValue(PassID, out DataMonthlyPass data))
// //{
// // CurrentPass = data;
// //}
// //else
// //{
// // CurrentPass = null;
// // DebugUtil.LogError("MonthlyPassManager UpdatePassService Error: {0} not found", PassID);
// //}
//}
2025-02-08 19:09:29 +08:00
public void Release()
{
EventManager.Instance.Unregister<uint>(EventManager.EventName.PartLogicUpdate, LogicListener);
2025-02-13 19:03:16 +08:00
EventManager.Instance.Unregister(EventManager.EventName.MonthlyPassBuySuccess, PassService.Refresh);
EventManager.Instance.Unregister(EventManager.EventName.MonthlyPassGetReward, PassService.Refresh);
2025-02-08 19:09:29 +08:00
}
void LogicListener(uint Logic)
{
if (Logic == (uint)LogicID.MonthlyPassId || Logic == (uint)LogicID.MonthlyPassRewardStatus || Logic == (uint)LogicID.MonthlyPassValidity)
{
PassService.Refresh();
2025-03-21 13:55:46 +08:00
if (Logic == (uint)LogicID.MonthlyPassId)
{
var tag = StorageMgr.Instance.GetStorage<MonthlyPassSaveData>("MonthlyPassUnlock");
if (PassService.IsPassUnlock)
{
if (!tag.IsPassUnlock)
{
tag.IsPassUnlock = true;
StorageMgr.Instance.SyncForce = true;
}
}
else
{
if(tag.IsPassUnlock)
{
tag.IsPassUnlock = false;
StorageMgr.Instance.SyncForce = true;
needPrompt = true;
//DebugUtil.Log("MonthlyPass is over");
}
}
}
}
}
2025-03-21 13:55:46 +08:00
class MonthlyPassSaveData
{
public bool IsPassUnlock;
}
2025-03-06 13:10:08 +08:00
//DataMonthlyPass GetCurPass()
//{
// if (CurrentPass != null)
// return CurrentPass;
//
// var time = CommonUtils.GetCurTime(E_TimeType.Server);
// var year = time.Year;
// var month = time.Month;
// string date = year + "-" + month;
// Debug.Log("MonthlyPass init, Today: " + date);
//
// var table = TableManager.Instance.Tables.MonthlyPass;
// foreach (var data in table.DataList)
// {
// var startTime = CommonUtils.GetTimeByTimestamp((uint)data.StarTime);
// var endTime = CommonUtils.GetTimeByTimestamp((uint)data.EndTime);
// DebugUtil.Log("MonthlyPass init, startTime: " + startTime + " start stamp: " + data.StarTime + " endTime: " + endTime + " time: " + time);
// if (startTime <= time && endTime >= time)
// {
// CurrentPass = data;
// break;
// }
// }
// return CurrentPass;
//}
2025-03-05 15:22:50 +08:00
2025-02-08 19:09:29 +08:00
/// <summary>
2025-02-11 12:40:54 +08:00
/// 可领取状态
2025-02-08 19:09:29 +08:00
/// </summary>
/// <returns></returns>
public bool TodayCanClaim()
{
2025-03-06 15:29:11 +08:00
var remains = GetRemainsTime();
return !PassService.TodayHasClaimed && PassService.IsPassUnlock && remains.TotalSeconds > 0;
2025-02-11 12:40:54 +08:00
}
#region 交互
2025-03-06 15:29:11 +08:00
public bool IsPassUnlock()
{
return PassService.IsPassUnlock;
}
2025-02-11 12:40:54 +08:00
/// <summary>
/// 购买月卡请求
/// </summary>
public void Purchase()
{
2025-03-05 15:22:50 +08:00
if (PassService.IsPassUnlock)
2025-02-13 19:03:16 +08:00
{
DebugUtil.Log("MonthlyPassManager Purchase Error: Pass is already unlocked");
return;
}
2025-02-11 12:40:54 +08:00
var currencyData = TableManager.Instance.Tables.CurrencyShopCfg.DataMap;
2025-03-05 15:22:50 +08:00
var currencyID = 10;
2025-03-06 13:10:08 +08:00
//GetCurPass();
//if (CurrentPass == null)
//{
// DebugUtil.LogError("月卡购买错误,无法获取当期月卡,使用默认内购ID");
//}
//else
// currencyID = CurrentPass.PassProductID;
2025-02-11 12:40:54 +08:00
if (!currencyData.TryGetValue(currencyID, out var dataCurrencyShopCfg))
{
DebugUtil.LogError("CurrencyShopCfg 没有 {0} 配置的内购商品", currencyID);
return;
}
OnPurchase(dataCurrencyShopCfg);
2025-02-08 19:09:29 +08:00
}
/// <summary>
2025-02-11 12:40:54 +08:00
/// 领取月卡奖励服务器请求
2025-02-08 19:09:29 +08:00
/// </summary>
public void Claim()
{
if (TodayCanClaim())
{
var id = Actor.Instance.Logic.GetCount((uint)LogicID.MonthlyPassId);
NetHelper.MonthlyPassGetReward(id);
2025-02-08 19:09:29 +08:00
}
else
{
DebugUtil.Log("Cannot claim today");
}
}
2025-02-11 12:40:54 +08:00
#endregion
2025-02-12 14:01:45 +08:00
#region 界面
2025-03-06 15:29:11 +08:00
public TimeSpan GetRemainsTime()
{
return PassService.Endtime - CommonUtils.GetCurTime(E_TimeType.Server);
}
2025-02-12 14:01:45 +08:00
/// <summary>
/// 获取当前月卡图片路径
/// </summary>
/// <returns></returns>
public string GetPassPicPath()
{
2025-02-13 19:03:16 +08:00
var defaultPath = "";//TODO:后续补充默认图片路径
2025-03-06 13:10:08 +08:00
//GetCurPass();
//if (CurrentPass != null)
//{
// return CurrentPass.ProductPath;
//}
//else
//{
// DebugUtil.LogError("MonthlyPassManager GetPassPicPath Error: CurrentPass is null");
//}
2025-02-12 14:01:45 +08:00
return defaultPath;
}
/// <summary>
/// 获取月卡描述
/// </summary>
/// <returns></returns>
public string GetPassDesc()
{
2025-02-13 19:03:16 +08:00
var defaultDesc = "";//TODO:后续补充默认描述
2025-03-06 13:10:08 +08:00
//GetCurPass();
//if (CurrentPass != null)
//{
// var key = CurrentPass.ProductDescription;
// return CommonUtils.GetLocalizeText(key);
//}
//else
//{
// DebugUtil.LogError("MonthlyPassManager GetPassDesc Error: CurrentPass is null");
//}
2025-02-12 14:01:45 +08:00
return GetLocalizeText(defaultDesc);
}
#endregion
2025-02-11 12:40:54 +08:00
private async void OnPurchase(DataCurrencyShopCfg cfg)
{
2025-03-05 15:22:50 +08:00
#if UNITY_EDITOR
NetHelper.InAppPurchaseTest((uint)cfg.Id);
return;
#endif
2025-02-11 12:40:54 +08:00
try
{
#if UNITY_IOS
// ios 只走苹果内购
IAPManager.Instance.SetCurrentPayChannel(IAPManager.PayChannel.Apple);
IAPManager.Instance.CheckAndBuyGoods(cfg.Id);
#elif SDK_BILIBILI
IAPManager.Instance.SetCurrentPayChannel(IAPManager.PayChannel.Bilibili);
2025-03-21 13:55:46 +08:00
IAPManager.Instance.CheckAndBuyGoods(cfg.Id);
2025-02-11 12:40:54 +08:00
#else
await UI_PayWindowController.Open(cfg);
#endif
}
catch (Exception e)
{
DebugUtil.LogError("MonthlyPass OnPurchase Error: {0}", e);
2025-02-13 19:03:16 +08:00
CommonUtils.ShowMessageTips("Purchase failed, please try again later.");//TODO:后续补充本地化
2025-02-11 12:40:54 +08:00
}
}
2025-02-08 19:09:29 +08:00
}