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 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().GetEventAndInit(2, 1); //GContext.container.Resolve().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().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 itemDataList = GContext.container.Resolve().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 MonthlySignL = _tables.TbMonthlySign.DataList; List monthlySignReward = null; for (int i = 0; i < MonthlySignL.Count; i++) { if (_monthlySignEvent.index == MonthlySignL[i].SignDayAccount) { monthlySignReward = GContext.container.Resolve().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 itemDataList = GContext.container.Resolve().GetItemDataByDropIdAndType(DropID); if (itemDataList != null) { if (index == 6) { SignInit signInit = _tables.TbSignInit.GetOrDefault(ID); List 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().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; } } }