Files
ft/Client/Assets/Scripts/UI/PinataPack/EventPinataPackDataManager.cs
2026-06-29 21:18:33 +08:00

176 lines
7.5 KiB
C#

using System.Collections.Generic;
using asap.core;
using cfg;
using GameCore;
using Newtonsoft.Json;
using OrderManager;
using UnityEngine;
namespace game
{
public class EventPinataPackDataManager:IOrderReplenishment,IOrderSuccess
{
#if UNITY_EDITOR
private bool m_IsCheckCondition = true;
#else
private bool m_IsCheckCondition = true;
#endif
public EventPinataPackDataManager()
{
GContext.container.Register<EventPinataPackData>().AsSingleton();
GetFreshPinataPackData();
}
public EventPinataPackData GetFreshPinataPackData()
{
var pinataPack = GContext.container.Resolve<EventPinataPackData>();
if (pinataPack == null) return null;
// 获取当前开放并符合解锁条件的活动ID
var fishingEventData = GContext.container.Resolve<FishingEventData>();
var fishingEvent = fishingEventData.GetEventByTypeAndSubType(9, 6, m_IsCheckCondition);
if (fishingEvent == null) return pinataPack;
var pinataPackID = fishingEvent.RedirectID;
if (pinataPackID < 0) return pinataPack;
// 获取当前活动数据
var tbEventData = GContext.container.Resolve<Tables>().TbEventPinataPackMain;
var pinataPackMain = tbEventData?.GetOrDefault(pinataPackID);
if (pinataPackMain == null) return pinataPack;
var isEquelEvent = fishingEvent.ID == pinataPack.EventID;
if (isEquelEvent) return pinataPack;
pinataPack.EventID = fishingEvent.ID;
pinataPack.PinataMainID=fishingEvent.RedirectID;
pinataPack.PurchasedCount = 0;
if (!pinataPack.IsActive) return pinataPack;
var packMain = GContext.container.Resolve<EventPinataPackData>()?.EventPinataPackMain;
UITypes.PinataPack_PonyPanel.SetType(packMain?.UIPanel?? nameof(PinataPack_PonyPanel));
GContext.container.Resolve<IFaceUIService>().AddGiftFaceUI(fishingEvent.ID, UITypes.PinataPack_PonyPanel, 0);
return pinataPack;
}
public EventPinataPackMain GetCurrentEventPinataPackMain()
{
var pinataPackData= GContext.container.Resolve<EventPinataPackData>(); ;
if (pinataPackData == null) return null;
var tables = GContext.container.Resolve<Tables>();
return tables.TbEventPinataPackMain.GetOrDefault(pinataPackData.PinataMainID);
}
public void LoadData(string sData)
{
#if UNITY_EDITOR
Debug.Log($"jsd EventPinataPackData LoadData sData {sData}");
#endif
var data = JsonConvert.DeserializeObject<EventPinataPackData>(sData);
if (data == null) return;
var pinataPackData = GContext.container.Resolve<EventPinataPackData>();
if (pinataPackData == null)
{
GContext.container.Register<EventPinataPackData>().AsSingleton();
GContext.container.Resolve<EventPinataPackData>().SetData(data);
}
else pinataPackData.SetData(data);
GetFreshPinataPackData();
}
public void SaveData()
{
var pinataPackData = GContext.container.Resolve<EventPinataPackData>();
#if UNITY_EDITOR
Debug.Log($"jsd SaveData {JsonConvert.SerializeObject(pinataPackData)}");
#endif
PlayFabMgr.Instance.UpdateUserDataValue(nameof(EventPinataPackData), JsonConvert.SerializeObject(pinataPackData));
}
/// <summary>
///
/// </summary>
/// <param name="packData">data</param>
/// <param name="packMain">config packMain</param>
/// <param name="packConfig1">购买时的礼包</param>
/// <param name="packConfig2">点击小马掉落的礼包</param>
/// <param name="eventPackManager">config eventPackManager</param>
/// <returns></returns>
public static bool GetData(out EventPinataPackData packData, out EventPinataPackMain packMain, out Pack packConfig_purchase, out int clickDropId, out EventPackManager eventPackManager)
{
packMain = null;
packConfig_purchase = null;
clickDropId = 0;
eventPackManager = null;
packData = GContext.container.Resolve<EventPinataPackData>();
packMain = packData?.EventPinataPackMain;
if (packMain == null)
{
Debug.LogError($" [PinataPack_PonyPanel] GetData packMain is null");
return false;
}
var vipLevel = GContext.container.Resolve<PlayerData>().PriceLv;
eventPackManager = GContext.container.Resolve<Tables>().TbEventPackManager?.GetOrDefault(packMain.PackId);
if (eventPackManager == null)
{
Debug.LogError($"packMain.PackId 配置错误 packMain id: {packMain.ID}");
return false;
}
var packIds = eventPackManager.VIPPackList[vipLevel];
packConfig_purchase = GContext.container.Resolve<Tables>().TbPack?.GetOrDefault(packIds[0]);
if (packConfig_purchase == null)
{
Debug.LogError($"eventPackManager.VIPPackList 配置错误 VIPPackList index 0 -> id: {packIds[0]}");
return false;
}
var itemDatas = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropIdAndTypeLureInflation(null, packConfig_purchase.DropID);
foreach (var itemData in itemDatas)
{
var itemTmepConfig = GContext.container.Resolve<Tables>()?.TbItem.GetOrDefault(itemData.id);
if (itemTmepConfig?.Type == 9 && itemTmepConfig?.SubType == 9)
{
clickDropId = itemTmepConfig.RedirectID;
break;
}
}
return true;
}
public void OnReplenish(ShopBuyTypeData buyType, IAPItemList iAPItemList, List<ItemData> itemDataGift, RewardType rewardShowType, bool voucher = false)
{
if(buyType.extraPurcheData==null) return;
if ( !buyType.extraPurcheData.TryGetValue(nameof(EventPinataPackData), out var value)) return;
// var clickDropId =(int) value;
//GContext.container.Resolve<PlayerItemData>().AddItemByDropLureInflation(null, clickDropId,null);
//判断是不是同一期活动
if(!buyType.extraPurcheData.TryGetValue("EventID",out var eventIdjToken)) return;
var eventID=(int) eventIdjToken;
var data= GContext.container.Resolve<EventPinataPackData>();
if (eventID != data.EventID)
{
//todo 保底机制
return;
}
data?.AddPurchasedCount(1);
}
public void OnOrderSuccess(ShopBuyTypeData buyType, IAPItemList iAPItemList, List<ItemData> itemDataGift, RewardType rewardShowType,
bool voucher = false)
{
if(buyType.extraPurcheData==null) return;
if ( !buyType.extraPurcheData.TryGetValue(nameof(EventPinataPackData), out var value)) return;
//判断是不是同一期活动
if(!buyType.extraPurcheData.TryGetValue("EventID",out var eventIdjToken)) return;
var eventID=(int) eventIdjToken;
var data= GContext.container.Resolve<EventPinataPackData>();
if (eventID != data.EventID)
{
//todo 保底机制
return;
}
data?.AddPurchasedCount(1);
}
}
}