Files
back_cantanBuilding/Assets/Scripts/DataCenter/DataCenter.SignupData.cs
2026-05-26 16:15:54 +08:00

305 lines
12 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 int Monthly;
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;
}
DailySignEvent _newSignEvent = null;
MonthlySignEvent _monthlySignEvent = null;
int _eventSignID = 0;
public DailySignEvent dailySignEvent
{
get => _monthlySignEvent == null ? null : _monthlySignEvent.dailySignEvent;
}
public DailySignEvent newSignEvent
{
get => _newSignEvent;
set => _newSignEvent = value;
}
public MonthlySignEvent monthlySignEvent
{
get => _monthlySignEvent;
set => _monthlySignEvent = value;
}
public int eventSignID => _eventSignID;
public void SetDailySignEvent(FishingEvent t)
{
DateTime dateTime = ZZTimeHelper.UtcNow().UtcNowOffset();
bool isSave = false;
if (_monthlySignEvent == null)
{
_monthlySignEvent = new MonthlySignEvent()
{
index = 0,
Monthly = dateTime.Month,
};
isSave = true;
}
if (_monthlySignEvent.Monthly != dateTime.Month)
{
DailySignEvent data = _monthlySignEvent.dailySignEvent;
_monthlySignEvent = new MonthlySignEvent()
{
index = 0,
Monthly = dateTime.Month,
dailySignEvent = data,
};
isSave = true;
}
int offfset = (int)dateTime.DayOfWeek - 1;
if (t.TimeDefinition is Weekly)
{
Weekly weekly = (Weekly)t.TimeDefinition;
offfset = (int)dateTime.DayOfWeek - weekly.StartTime;
}
if (offfset < 0)
{
offfset = -offfset;
}
else
{
offfset = 7 - offfset;
}
if (_monthlySignEvent.dailySignEvent == null ||
GlobalUtils.TryParseDateTime(_monthlySignEvent.dailySignEvent.time, dateTime).DayOfYear
!= dateTime.Date.AddDays(offfset).DayOfYear)
{
_monthlySignEvent.dailySignEvent = new DailySignEvent()
{
ID = t.RedirectID,
lastID = -1,
index = 0,
time = dateTime.Date.AddDays(offfset).ToString()
};
isSave = true;
}
if (isSave)
{
PlayFabMgr.Instance.UpdateUserDataValue("MonthlySignEvent", JsonMapper.ToJson(_monthlySignEvent));
}
}
public void SetEventSignEvent(FishingEvent t)
{
SignInit signInit = _tables.TbSignInit.GetOrDefault(t.RedirectID);
if (signInit != null)
{
_eventSignID = t.RedirectID;
UITypes.EventSignupPopupPanel_2.SetType(signInit.SpecialSignName);
}
}
public void EventSignEnd()
{
_eventSignID = 0;
UITypes.EventSignupPopupPanel_2.SetType("EventSignupPopupPanel_2");
//GContext.container.Resolve<FishingEventData>().GetEventAndInit(2, 1);
//GContext.container.Resolve<FishingEventData>().GetEventAndInit(2, 3);
}
public void SetNewSignEvent(FishingEvent t)
{
DateTime dateTime = ZZTimeHelper.UtcNow().UtcNowOffset();
if (_tables.TbSignInit.GetOrDefault(t.RedirectID) == null)
{
return;
}
SignInit signInit = _tables.TbSignInit.GetOrDefault(t.RedirectID);
UITypes.EventSignupPopupPanel.SetType(signInit.SpecialSignName);
if (_newSignEvent == null || GlobalUtils.TryParseDateTime(_newSignEvent.time, ZZTimeHelper.UtcNow().UtcNowOffset()).Ticks < dateTime.Ticks)
{
string time = dateTime.AddDays(10).ToString();
if (t.TimeDefinition is FixedTime)
{
if (GContext.container.Resolve<FishingEventData>().FixedTimeEventDic.TryGetValue(t.ID, out FixedTimeEvent fixedTimeEvent))
{
time = fixedTimeEvent.endTime;
}
else
{
FixedTime fixedTime = (FixedTime)t.TimeDefinition;
time = dateTime.AddSeconds(fixedTime.StartTime).ToString();
}
}
else if (t.TimeDefinition is LimitedTime)
{
LimitedTime limitedTime = (LimitedTime)t.TimeDefinition;
time = GlobalUtils.TryParseDateTime(limitedTime.EndTime, ZZTimeHelper.UtcNow()).UtcNowOffset().ToString();
}
_newSignEvent = new DailySignEvent()
{
ID = t.RedirectID,
lastID = -1,
index = 0,
time = time,
};
PlayFabMgr.Instance.UpdateUserDataValue("NewSignEvent", JsonMapper.ToJson(_newSignEvent));
//GContext.Publish(new TargetEvent(t.ID, 3, 6));
}
SetNewSignRed();
}
public bool NewSignEventIsOpen()
{
return _newSignEvent != null && GlobalUtils.TryParseDateTime(_newSignEvent.time, ZZTimeHelper.UtcNow().UtcNowOffset()).Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks;
}
public TimeSpan NewSignEventEndTime()
{
return GlobalUtils.TryParseDateTime(_newSignEvent.time, ZZTimeHelper.UtcNow().UtcNowOffset()) - ZZTimeHelper.UtcNow().UtcNowOffset();
}
//签到
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>().AddItemByDrop(DropID, false);
#if AGG
DateTime tomorrow = GlobalUtils.TryParseDateTime(_monthlySignEvent.dailySignEvent.time, ZZTimeHelper.UtcNow().UtcNowOffset());
TimeSpan remaining = tomorrow - ZZTimeHelper.UtcNow().UtcNowOffset();
using (var e = GEvent.GameEvent("user_checkin"))
{
e.AddContent("day_num", 7 - 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>().AddItemByDrop(MonthlySignL[i].DropID, false);
break;
}
}
//GContext.Publish(new ShowData());
PlayFabMgr.Instance.UpdateUserDataValue("MonthlySignEvent", JsonMapper.ToJson(_monthlySignEvent));
GContext.Publish(new OnSignEvent() { itemDataList = monthlySignReward });
}
return isSign;
}
public bool OnSpecialSign(int ID, int index, int DropID)
{
if (_newSignEvent == null)
{
return false;
}
bool isSign = SignEvent(_newSignEvent, index);
if (isSign)
{
SetNewSignRed();
List<ItemData> itemDataList = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropIdAndType(DropID);
if (itemDataList != null)
{
if (index == 6)
{
SignInit signInit = _tables.TbSignInit.GetOrDefault(ID);
List<int> signDayList = signInit.SignDayList;
SignReward dailySign = _tables.TbSignReward.GetOrDefault(signDayList[^1]);
for (int i = 0; i < itemDataList.Count; i++)
{
itemDataList[i].count *= dailySign.Multiplier;
}
}
GContext.Publish(new ShowData(itemDataList));
GContext.container.Resolve<PlayerItemData>().AddItem(itemDataList);
GContext.Publish(new ShowData());
}
PlayFabMgr.Instance.UpdateUserDataValue("NewSignEvent", JsonMapper.ToJson(_newSignEvent));
GContext.Publish(new OnSignEvent());
#if AGG
DateTime tomorrow = GlobalUtils.TryParseDateTime(_newSignEvent.time, ZZTimeHelper.UtcNow().UtcNowOffset());
TimeSpan remaining = tomorrow - ZZTimeHelper.UtcNow().UtcNowOffset();
using (var e = GEvent.GameEvent("lv25_checkin"))
{
e.AddContent("day_num", _newSignEvent.index)
.AddContent("day_count", 10 - remaining.Days);
if (itemDataList != null)
{
for (int i = 0; i < itemDataList.Count; i++)
{
if (itemDataList[i].id == 1001)
{
e.AddContent("reward_hook", itemDataList[i].count);
}
else if (itemDataList[i].id == 1002)
{
e.AddContent("reward_cash", itemDataList[i].count);
}
}
}
}
#endif
}
return isSign;
}
void SetNewSignRed()
{
RedPointManager.Instance.SetRedPointState("Home.Sign", _newSignEvent.lastID != ZZTimeHelper.UtcNow().UtcNowOffset().DayOfYear && _newSignEvent.index < 7);
}
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;
}
}
}