using asap.core; using cfg; using game; using GameCore; using System.Collections.Generic; using UnityEngine; public class LuckyTaskPanel : LuckyTaskPanelBase { /// /// luckyModel 也作为是否自动全部领奖的标志 /// List taskItems = new List(); protected override void SetItem() { string adData = PlayFabMgr.Instance.GetLocalData(LuckyTaskData.ADTaskADKey); int curDay = ZZTimeHelper.UtcNow().UtcNowOffset().DayOfYear; if (!string.IsNullOrEmpty(adData)) { string[] strings = adData.Split("|"); int day = -1; if (strings.Length != 2 || !int.TryParse(strings[1], out day) || day != curDay) { adData = $"{0}|{curDay}"; PlayFabMgr.Instance.UpdateUserDataValue(LuckyTaskData.ADTaskADKey, adData); } } else { adData = $"{0}|{curDay}"; PlayFabMgr.Instance.UpdateUserDataValue(LuckyTaskData.ADTaskADKey, adData); } List taskList = new List(); int level = taskData.GetValueOrDefault(-2, 0); float inflationRate = taskData.GetValueOrDefault(-3, 0) / 100f; foreach (var item in taskData) { if (item.Key <= 0) { continue; } CommonTask commonTask = tables.TbCommonTask.Get(item.Key); if (commonTask != null) { LuckyTaskItemData luckyTaskData = new LuckyTaskItemData(); luckyTaskData.id = item.Key; int dropID = commonTask.TaskReward[level]; luckyTaskData.reward = dropID; luckyTaskData.inflationRate = inflationRate; string desc = LocalizationMgr.GetText(commonTask.TaskDesc_l10n_key); string progressText; if (commonTask.TaskType == ConditionType.RechargeAmount) { //sku.ProdPrice int iapid = commonTask.TaskParam[level]; var iap = tables.TbIAPItemList.GetOrDefault(iapid); SKUDetailDataEvent sKUDetailDataEvent = new SKUDetailDataEvent(iap); GContext.Publish(sKUDetailDataEvent); desc = desc.SafeFormat(sKUDetailDataEvent.price); float TaskParam = iap.VIPPoint; float value = item.Value; float ratio = value / TaskParam; float ProdPrice = sKUDetailDataEvent.prodPrice; float truncatedPrice = (float)Mathf.Ceil(ratio * ProdPrice * 100) / 100; progressText = $"({truncatedPrice:F2}/{ProdPrice})"; if (item.Value == -1) { progressText = $"({ProdPrice}/{ProdPrice})"; luckyTaskData.state = -1; } else if (value >= TaskParam) { luckyTaskData.state = 1; } else { luckyTaskData.state = 0; } } else { int taskParam = commonTask.TaskParam[level]; if (commonTask.TaskType == ConditionType.ConsumeEnergy) { taskParam = GContext.container.Resolve().IntInflation(taskParam, inflationRate); } progressText = $"({item.Value}/{taskParam})"; if (item.Value == -1) { progressText = $"({taskParam}/{taskParam})"; luckyTaskData.state = -1; } else if (item.Value >= taskParam) { luckyTaskData.state = 1; } else { luckyTaskData.state = 0; } desc = desc.SafeFormat(taskParam); } luckyTaskData.desc = desc + progressText; taskList.Add(luckyTaskData); } else { Debug.LogError($"Task ID {item.Key} not found in CommonTask table."); } } taskList.Sort((a, b) => b.state.CompareTo(a.state)); // 按state排序 for (int i = 0; i < taskList.Count; i++) { LuckyTaskItem luckyTaskItem = Instantiate(itemPrefab, content).AddComponent(); luckyTaskItem.gameObject.SetActive(true); luckyTaskItem.Init(taskList[i], OnClickLuckyTaskItem); taskItems.Add(luckyTaskItem); } } public void TaskItemPlay(LuckyTaskItem luckyTaskItem) { canvasGroup.blocksRaycasts = false; try { luckyTaskItem.data.state = -1; // 更新状态为已领取 luckyTaskItem.Refresh(); luckyTaskItem.Play(); } catch (System.Exception ex) { Debug.LogError($"Error during TaskItemPlay: {ex.Message}"); } canvasGroup.blocksRaycasts = true; GContext.Publish(new ShowData()); } void OnClickLuckyTaskItem(LuckyTaskItem luckyTaskItem) { if (IsOpen) { //奖励补领 OnClickLuckyTaskItem1(luckyTaskItem); return; } if (luckyTaskItem.data.state == 1) { bool result = luckyModel.OnGetTaskReward(luckyTaskItem.data.id); if (result) { CommonTask commonTask = tables.TbCommonTask.GetOrDefault(luckyTaskItem.data.id); if (commonTask != null) { // 任务奖励 int level = taskData.GetValueOrDefault(-2, 0); int dropID = commonTask.TaskReward[level]; ChangeSource changeSource = new ChangeSource(EventId, "Event_Minigame3", "Event_Minigame3_LuckMagic", "TaskReward"); if (fishingEvent.SubType == 4) { changeSource.Source_Type = "Event_Minigame3_LuckyCards"; } List rewardItem = GContext.container.Resolve().AddItemByDropLureInflation(luckyTaskItem.data.inflationRate, dropID, changeSource, false); if (rewardItem != null) { TaskItemPlay(luckyTaskItem); } #if AGG using (var e = GEvent.GameEvent("event_lucky_task")) { int round = luckyModel.DicTasks.GetValueOrDefault(-1, 0); e.AddContent("task_id", luckyTaskItem.data.id) .AddContent("round", round) .AddContent("combine_id", round * 100000 + luckyTaskItem.data.id % 10000) .AddContent("task_reward", dropID); } #endif } } else { Debug.Log("任务奖励领取失败"); } } else if (luckyTaskItem.data.state == 0) { OnClickGo(luckyTaskItem.data.id); Debug.Log("任务未完成,无法领取奖励"); } else if (luckyTaskItem.data.state == -1) { Debug.Log("任务已领取,无法重复领取"); } } void OnClickLuckyTaskItem1(LuckyTaskItem luckyTaskItem) { if (luckyTaskItem.data.state == 1) { CommonTask commonTask = tables.TbCommonTask.GetOrDefault(luckyTaskItem.data.id); taskData[luckyTaskItem.data.id] = -1; // 标记为已领取 if (commonTask != null) { // 任务奖励 int level = taskData.GetValueOrDefault(-2, 0); int dropID = commonTask.TaskReward[level]; ChangeSource changeSource = new ChangeSource(EventId, "Event_Minigame3", "Event_Minigame3_LuckMagic", "TaskReward"); if (fishingEvent.SubType == 4) { changeSource.Source_Type = "Event_Minigame3_LuckyCards"; } List rewardItem = GContext.container.Resolve().AddItemByDropLureInflation(luckyTaskItem.data.inflationRate, dropID, changeSource, false); if (rewardItem != null) { TaskItemPlay(luckyTaskItem); } #if AGG using (var e = GEvent.GameEvent("event_lucky_task")) { int round = luckyModel.DicTasks.GetValueOrDefault(-1, 0); e.AddContent("task_id", luckyTaskItem.data.id) .AddContent("round", round) .AddContent("combine_id", round * 100000 + luckyTaskItem.data.id % 10000) .AddContent("task_reward", dropID); } #endif } } else { UIManager.Instance.DestroyUI(gameObject.name); } } } public class LuckyTaskItemData { public int id; public string desc; public int target; public int reward; public int progress; /// /// // 0:未完成 1:可领取 -1:已领取 /// public int state; public float inflationRate; }