218 lines
7.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|