using System; using asap.core; using cfg; using GameCore; using Newtonsoft.Json; using System.Collections.Generic; using game; using Newtonsoft.Json.Linq; using OrderManager; using UniRx; using UnityEngine; namespace Assets.Scripts.UI.OfferSweep { public class OfferSweepManager : IDisposable,IOrderReplenishment { public OfferSweepManager() { GContext.OnEvent().Subscribe(OnEvent_TargetEvent).AddTo(Disposables); } public void Dispose() { Disposables?.Dispose(); } private CompositeDisposable _disposable; private CompositeDisposable Disposables => _disposable ??= new CompositeDisposable(); #region event public void OnEvent_TargetEvent(TargetEvent targetEvent) { if (targetEvent.type == 4) { RefreshData(); } } #endregion #region data [Inject] public Tables Tables { get; set; } private OfferSweepPackData _sweepPackData; public OfferSweepPackData SweepPackData => _sweepPackData ??= new OfferSweepPackData(); private OfferSweepPackData GetCachedData() { var dataStr = PlayFabMgr.Instance.GetLocalData(nameof(OfferSweepPackData)); #if UNITY_EDITOR Debug.Log($"jsd OfferSweepPackData LoadData sData {dataStr}"); #endif return dataStr != null ? JsonConvert.DeserializeObject(dataStr) : new OfferSweepPackData(); } public void RefreshData() { var isResetData = IsResetData(SweepPackData, out int eventId, out int sweepPackId); if (isResetData) { SweepPackData.FishingEventID = eventId; SweepPackData.SweepPackId = sweepPackId; SweepPackData.StartTimeVipLevel = GContext.container.Resolve().PriceLv; SweepPackData.PurchasePackDir?.Clear(); SweepPackData.PurchasedCount = 0; SaveData(); } else { var cachedData = GetCachedData(); SweepPackData.SetData(cachedData); } if (!SweepPackData.IsActive) return; var packManager = GetOfferSweepEventPackManager(); UITypes.OfferSweepPanel.SetType(packManager.Panel); GContext.container.Resolve().AddGiftFaceUI(eventId, UITypes.OfferSweepPanel, 0); } private bool IsResetData(OfferSweepPackData offerSweepPackData, out int eventId, out int sweepPackId) { eventId = sweepPackId = 0; if (offerSweepPackData == null) return true; var @event = GetCurrentLoopEvent(); if (@event == null) return true; eventId = @event.ID; sweepPackId = GetOfferSweepPackId(@event); if (sweepPackId <= 0) return true; var cacheData = GetCachedData(); if (cacheData == null) return false; if (cacheData.FishingEventID != @event.ID) return true; if (cacheData.SweepPackId == 0) cacheData.SweepPackId = sweepPackId; return false; } public void SaveData() { #if UNITY_EDITOR Debug.Log($"jsd OfferSweepPackData SaveData {JsonConvert.SerializeObject(SweepPackData)}"); #endif PlayFabMgr.Instance.UpdateUserDataValue(nameof(OfferSweepPackData), JsonConvert.SerializeObject(SweepPackData)); } public FishingEvent GetCurrentLoopEvent() { //4 循环活动 var events = Tables.TbFishingEvent.GetAllDataByType(4); var fishingEventData = GContext.container.Resolve(); foreach (var e in events) { if (!EventStrategyFactory.IsRegisterEventBySubType(e.SubType)) continue; var isOpen = fishingEventData.Condition(e); if (isOpen) return e; } return null; } public EventPackManager GetOfferSweepEventPackManager(FishingEvent fishingEvent = null) { return Tables.TbEventPackManager.GetOrDefault(SweepPackData.SweepPackId); } public bool GetData(int index, out EventPackManager packManager, out Pack packConfig, out List itemDatas, out IAPItemList iapItem, out int packId) { packManager = null; packConfig = null; itemDatas = null; iapItem = null; packId = 0; packManager = GetOfferSweepEventPackManager(); if (packManager == null) return false; var VipLevel = this.SweepPackData.StartTimeVipLevel; if (packManager.VIPPackList == null || packManager.VIPPackList[VipLevel].Count != 7) { Debug.LogError($"配置错误 eventPackManager ID {packManager.ID} VIP {VipLevel} list count {packManager.VIPPackList[VipLevel]?.Count}"); return false; } packId = packManager.VIPPackList?[VipLevel]?[index] ?? 0; packConfig = Tables.TbPack?.GetOrDefault(packId); if (packConfig == null) { Debug.LogError($"配置错误 eventPackManager id {packId}"); return false; } itemDatas = GContext.container.Resolve().GetItemDataByDropIdLureInflation(null, packConfig.DropID); if (itemDatas == null) return false; iapItem = Tables.TbIAPItemList?.GetOrDefault(packConfig.IAPID); if (iapItem == null) return false; return true; } public List GetPurchasedItemDataByIndex(int index) { if (SweepPackData == null) return null; if (index < 0) return null; if (!SweepPackData.PurchasePackDir.ContainsKey(index)) return null; var packId = SweepPackData.PurchasePackDir[index]; var packConfig = Tables.TbPack?.GetOrDefault(packId); if (packConfig == null) { Debug.LogError($"配置错误 eventPackManager id {packId}"); return null; } return GContext.container.Resolve().GetItemDataByDropId(packConfig.DropID); } #endregion #region static method public static int GetOfferSweepPackId(FishingEvent fishingEvent = null) { if (fishingEvent == null) fishingEvent = GContext.container.Resolve().GetCurrentLoopEvent(); if (fishingEvent == null) return 0; var strategy = EventStrategyFactory.GetStrategy(fishingEvent.SubType); var tables = GContext.container.Resolve(); var cycleConfig = tables.TbFishingEventCycleItem.GetOrDefault(fishingEvent.RedirectID); return strategy.GetSweepPackId(cycleConfig.RedirectID); } #endregion public void OnReplenish(ShopBuyTypeData buyType, IAPItemList iAPItemList, List itemDataGift, RewardType rewardShowType, bool voucher = false) { if(buyType.extraPurcheData==null) return; if (!buyType.extraPurcheData.TryGetValue(nameof(OfferSweepPackData), out var value)) return; if (!buyType.extraPurcheData.TryGetValue(nameof(_sweepPackData.FishingEventID), out var fishingEventIdjToken)) { Debug.LogError($"参数错误 eventPackManager id {_sweepPackData.FishingEventID}"); return; } var eventID= fishingEventIdjToken.ToObject(); if (eventID != _sweepPackData.FishingEventID) { //todo 保底机制 return; } var packIDs = value.ToObject>(); if(packIDs==null) return; foreach (var packID in packIDs) { _sweepPackData.PurchasePackDir.TryAdd(packID.Key, packID.Value); } if (_sweepPackData.PurchasePackDir.Count == 6) { _sweepPackData.PurchasedCount++; } SaveData(); } } }