Files
MinFt/Client/Assets/Scripts/DataCenter/DataCenter.SignupData.cs
2026-04-27 12:07:32 +08:00

218 lines
7.6 KiB
C#

using asap.core;
using cfg;
using game;
using LitJson;
using System;
using System.Collections.Generic;
namespace GameCore
{
public class DailySignEvent
{
public int ID;
//领取第几个
public int index;
//签到最后一次是哪一天or链式礼包PackManager.ID
public int lastID;
//结束时间
public string time;
}
public class MonthlySignEvent
{
public int index;
//结束时间
public DailySignEvent dailySignEvent;
}
public class OnSignEvent
{
public List<ItemData> itemDataList;
}
public class SigninData
{
private cfg.Tables _tables;
public SigninData(cfg.Tables tables)
{
this._tables = tables;
}
MonthlySignEvent _monthlySignEvent = null;
public DailySignEvent dailySignEvent
{
get => _monthlySignEvent == null ? null : _monthlySignEvent.dailySignEvent;
}
public MonthlySignEvent monthlySignEvent
{
get => _monthlySignEvent;
set => _monthlySignEvent = value;
}
public void SetDailySignEvent(FishingEvent t)
{
DateTime dateTime = ZZTimeHelper.UtcNow().UtcNowOffset();
bool isSave = false;
DailySignEvent data = null;
if (_monthlySignEvent == null)
{
_monthlySignEvent = new MonthlySignEvent()
{
index = 0,
};
isSave = true;
}
else
{
List<MonthlySign> MonthlySignL = _tables.TbMonthlySign.DataList;
data = _monthlySignEvent.dailySignEvent;
if (_monthlySignEvent.index >= MonthlySignL[^1].SignDayAccount && data.lastID != dateTime.DayOfYear)
{
_monthlySignEvent = new MonthlySignEvent()
{
index = 0,
dailySignEvent = data,
};
isSave = true;
}
}
SetTheme();
if (data == null || (data.index >= 7 && data.lastID != dateTime.DayOfYear))
{
_monthlySignEvent.dailySignEvent = new DailySignEvent()
{
ID = t.RedirectID,
lastID = -1,
index = 0,
time = dateTime.Date.ToString()
};
isSave = true;
}
if (isSave)
{
PlayFabMgr.Instance.UpdateUserDataValue("MonthlySignEvent", JsonMapper.ToJson(_monthlySignEvent));
}
bool isReward = CanDailySign();
if (isReward)
{
ILoadResourceService loadResourceService = GContext.container.Resolve<ILoadResourceService>();
loadResourceService.EnqueueBundleSilently(new List<string>() { UITypes.EventSignupPopupPanel_2.Name });
GContext.container.Resolve<IFaceUIService>().AddGiftFaceUI(t.ID, UITypes.EventSignupPopupPanel_2);
}
}
//签到
public bool OnDailySign(int index, int DropID)
{
if (_monthlySignEvent == null || _monthlySignEvent.dailySignEvent == null)
{
return false;
}
bool isSign = SignEvent(_monthlySignEvent.dailySignEvent, index);
if (isSign)
{
_monthlySignEvent.index++;
List<ItemData> itemDataList = GContext.container.Resolve<PlayerItemData>().AddItemByDropLureInflation(null, DropID, null, false);
#if AGG
DateTime tomorrow = GlobalUtils.TryParseDateTime(_monthlySignEvent.dailySignEvent.time, ZZTimeHelper.UtcNow().UtcNowOffset());
TimeSpan remaining = ZZTimeHelper.UtcNow().UtcNowOffset() - tomorrow;
using (var e = GEvent.GameEvent("user_checkin"))
{
e.AddContent("day_num", remaining.Days)
.AddContent("day_count", _monthlySignEvent.dailySignEvent.index);
if (itemDataList != null)
{
for (int i = 0; i < itemDataList.Count; i++)
{
e.AddContent($"item_{itemDataList[i].id}", itemDataList[i].count);
}
}
}
#endif
List<MonthlySign> MonthlySignL = _tables.TbMonthlySign.DataList;
List<ItemData> monthlySignReward = null;
for (int i = 0; i < MonthlySignL.Count; i++)
{
if (_monthlySignEvent.index == MonthlySignL[i].SignDayAccount)
{
monthlySignReward = GContext.container.Resolve<PlayerItemData>().AddItemByDropLureInflation(null, MonthlySignL[i].DropID, null, false);
break;
}
}
//GContext.Publish(new ShowData());
PlayFabMgr.Instance.UpdateUserDataValue("MonthlySignEvent", JsonMapper.ToJson(_monthlySignEvent));
GContext.Publish(new OnSignEvent() { itemDataList = monthlySignReward });
}
return isSign;
}
bool SignEvent(DailySignEvent data, int index)
{
if (data.lastID == ZZTimeHelper.UtcNow().UtcNowOffset().DayOfYear)
{
ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_1"));
return false;
}
if (index == data.index)
{
data.lastID = ZZTimeHelper.UtcNow().UtcNowOffset().DayOfYear;
data.index++;
return true;
}
return false;
}
public bool DailySignIsOpen()
{
return _monthlySignEvent != null && _monthlySignEvent.dailySignEvent != null;
}
public bool CanDailySign()
{
DailySignEvent data = dailySignEvent;
return data != null
&& data.lastID != ZZTimeHelper.UtcNow().UtcNowOffset().DayOfYear
&& data.index < 7;
}
public bool ShouldLoadSignInInterstitial()
{
return DailySignIsOpen() && FishingEventData.Condition_NoRechargeDay(15);
}
private const string DefaultPanel = "EventSignupPopupPanel_2";
private void SetTheme()
{
var themeList = _tables.TbEventSignSpTheme.DataList;
UITypes.EventSignupPopupPanel_2.SetType(DefaultPanel);
foreach (var theme in themeList)
{
try
{
var startTime = DateTime.Parse((theme.TimeDefinition as LimitedTime).StartTime);
var endTime = DateTime.Parse((theme.TimeDefinition as LimitedTime).EndTime);
var timeNow = ZZTimeHelper.UtcNow();
if (startTime <= timeNow && timeNow <= endTime)
{
UITypes.EventSignupPopupPanel_2.SetType(theme.Prefab);
break;
}
}
catch (Exception e)
{
UnityEngine.Debug.LogError($"[DataCenter] SetSignInTheme Error:");
UnityEngine.Debug.LogError(e);
continue;
}
}
}
private async void ResetTheme(TimeSpan duration)
{
await System.Threading.Tasks.Task.Delay(duration);
UITypes.EventSignupPopupPanel_2.SetType(DefaultPanel);
}
}
}