305 lines
12 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|