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 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 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(); loadResourceService.EnqueueBundleSilently(new List() { UITypes.EventSignupPopupPanel_2.Name }); GContext.container.Resolve().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 itemDataList = GContext.container.Resolve().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 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().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); } } }