diff --git a/Assets/PerfectWorld/Scripts/MainFiles/EC_Game.cs b/Assets/PerfectWorld/Scripts/MainFiles/EC_Game.cs index 6a7da99250..0d27e5fd81 100644 --- a/Assets/PerfectWorld/Scripts/MainFiles/EC_Game.cs +++ b/Assets/PerfectWorld/Scripts/MainFiles/EC_Game.cs @@ -17,7 +17,7 @@ namespace BrewMonster.Network public static bool g_bEnableFortressDeclareWar = false; private static ATaskTemplMan m_pTaskMan; // Task template manager private static elementdataman m_pElementDataMan; // global element templates manager - private static CECGameRun m_pGameRun; // Game running object + private static CECGameRun m_pGameRun => CECGameRun.Instance; // Game running object private static CECGFXCaster m_pGFXCaster; // GFX caster private static BrewMonster.CECStringTab m_FixedMsgs; // Fixed message table @@ -92,6 +92,13 @@ namespace BrewMonster.Network { m_pElementDataMan = ElementDataManProvider.GetElementDataMan(); +#if UNITY_EDITOR + if (TaskTest.Instance && + TaskTest.Instance.m_pTaskMan != null) + { + m_pTaskMan = TaskTest.Instance.m_pTaskMan; + } +#endif // Load task templates if (m_pTaskMan == null) m_pTaskMan = new ATaskTemplMan(); @@ -99,14 +106,14 @@ namespace BrewMonster.Network if (!m_pTaskMan.InitStorageTask()) { BMLogger.LogError("[Dat]- CECGame::Init, Storage task Init Failed!"); - return false; + // return false; } // Create GFX caster if (m_pGFXCaster == null) { m_pGFXCaster = new CECGFXCaster(); - return false; + // return false; } // Initialize string tables @@ -114,7 +121,7 @@ namespace BrewMonster.Network // m_pGameRun = new CECGameRun(); // m_pGameRun.Init(); - m_pGameRun = CECGameRun.Instance; + // m_pGameRun = CECGameRun.Instance; return true; } diff --git a/Assets/PerfectWorld/Scripts/Task/ATaskTemplMan.cs b/Assets/PerfectWorld/Scripts/Task/ATaskTemplMan.cs index 8055aeaf2f..a2795918be 100644 --- a/Assets/PerfectWorld/Scripts/Task/ATaskTemplMan.cs +++ b/Assets/PerfectWorld/Scripts/Task/ATaskTemplMan.cs @@ -13,6 +13,8 @@ namespace BrewMonster.Scripts.Task /// public class ATaskTemplMan { + public int TaskLoadedCount => m_TaskTemplMap.Count; + public const ulong TASK_PACK_MAGIC = 0x93858361; public const ulong _task_templ_cur_version = 121; @@ -341,11 +343,11 @@ namespace BrewMonster.Scripts.Task log += $"Task ID {pTempl.m_FixedData.m_ID} Fail : {failCode} \n"; } - if (i % 1000 == 0) - { - Debug.Log($"--- {i % 1000} Find Available Task --- \n {log}"); - log = ""; - } + // if (i % 1000 == 0) + // { + // Debug.Log($"--- {i % 1000} Find Available Task --- \n {log}"); + // log = ""; + // } } diff --git a/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs b/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs index d797e21c22..ff0eabb081 100644 --- a/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs +++ b/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs @@ -403,9 +403,23 @@ namespace BrewMonster.Scripts.Task ATaskTemplMan pTaskMan = GetTaskTemplMan(); pTaskMan.Release(); - + +#if UNITY_EDITOR + if (TaskTest.Instance && + TaskTest.Instance.WasLoadTaskData && + pTaskMan.TaskLoadedCount > 100) + { + Debug.Log($" [TaskInterface] Using TaskTest loaded data with {pTaskMan.TaskLoadedCount} tasks."); + } + else + { + string task_data_path = Path.Combine(Application.streamingAssetsPath, "data/tasks.data"); + pTaskMan.LoadTasksFromPack(task_data_path, true); + } +#else string task_data_path = Path.Combine(Application.streamingAssetsPath, "data/tasks.data"); pTaskMan.LoadTasksFromPack(task_data_path, true); +#endif pTaskMan.LoadNPCInfoFromPack("data\\task_npc.data"); pTaskMan.VerifyDynTasksPack("userdata\\dyn_tasks.data"); @@ -469,7 +483,7 @@ namespace BrewMonster.Scripts.Task return inv != null ? inv.GetItemTotalNum((int)ulTaskItem) : 0; } - private ATaskTemplMan GetTaskTemplMan() + public ATaskTemplMan GetTaskTemplMan() { return EC_Game.GetTaskTemplateMan(); } diff --git a/Assets/PerfectWorld/Scripts/Task/TaskClient.cs b/Assets/PerfectWorld/Scripts/Task/TaskClient.cs index 656a3873b5..a54cf5eae1 100644 --- a/Assets/PerfectWorld/Scripts/Task/TaskClient.cs +++ b/Assets/PerfectWorld/Scripts/Task/TaskClient.cs @@ -296,7 +296,7 @@ namespace BrewMonster.Scripts.Task public static void OnServerNotify(TaskInterface pTask, byte[] pBuf, uint sz) { // Check version validity - // TODO: CheckVersion not exposed on TaskInterface; skipping version check + // CheckVersion not exposed on TaskInterface; skipping version check if (!pTask.CheckVersion()) return; @@ -490,7 +490,7 @@ namespace BrewMonster.Scripts.Task // Clear valid count and process server notification pTempl.ClearValidCount(); - // TODO: OnServerNotify method signature may need adjustment for C# (ref/out parameters) + // OnServerNotify method signature may need adjustment for C# (ref/out parameters) pTempl.OnServerNotify(pTask, pEntry, ref pNotify, sz); } diff --git a/Assets/PerfectWorld/Scripts/Task/TaskInterface.cs b/Assets/PerfectWorld/Scripts/Task/TaskInterface.cs index f493d8d7d7..606297cdc7 100644 --- a/Assets/PerfectWorld/Scripts/Task/TaskInterface.cs +++ b/Assets/PerfectWorld/Scripts/Task/TaskInterface.cs @@ -101,5 +101,6 @@ namespace BrewMonster.Scripts.Task void TakeAwayFactionConsumeContrib(int ulNum); void TakeAwayFactionExpContrib(int ulNum){} void OnGiveupTask(int iTaskID); + ATaskTemplMan GetTaskTemplMan(); } } \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Task/TaskTest.cs b/Assets/PerfectWorld/Scripts/Task/TaskTest.cs index 3d5c6f4f34..e256bb1979 100644 --- a/Assets/PerfectWorld/Scripts/Task/TaskTest.cs +++ b/Assets/PerfectWorld/Scripts/Task/TaskTest.cs @@ -9,9 +9,10 @@ using UnityEngine; namespace BrewMonster.Scripts.Task { - public class TaskTest : MonoBehaviour + public class TaskTest : MonoSingleton { - ATaskTemplMan m_pTaskMan; + public ATaskTemplMan m_pTaskMan; + public bool WasLoadTaskData = false; [ContextMenu("Load Data")] void LoadTaskData() @@ -22,7 +23,7 @@ namespace BrewMonster.Scripts.Task } string path = Path.Combine(Application.streamingAssetsPath, "data/tasks.data"); - m_pTaskMan.LoadTasksFromPack(path, true); + WasLoadTaskData = m_pTaskMan.LoadTasksFromPack(path, true); } [ContextMenu("Test Size")] diff --git a/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs b/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs index d48ae80cfc..819c98c160 100644 --- a/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs +++ b/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs @@ -14,7 +14,7 @@ using UnityEngine; using UnityEngine.UI; using TMPro; -namespace BrewMonster.PerfectWorld.Scripts.Task.UI +namespace BrewMonster.Scripts.Task.UI { /// /// This is DlgTask.cpp @@ -678,6 +678,18 @@ namespace BrewMonster.PerfectWorld.Scripts.Task.UI public CECHostPlayer GetHostPlayer() { + if(EC_Game.GetGameRun() == null) + { + BMLogger.LogError("EC_Game.GetGameRun() is null !!!"); + return null; + } + + if (EC_Game.GetGameRun().GetHostPlayer() == null) + { + BMLogger.LogError("EC_Game.GetHostPlayer() is null !!!"); + return null; + } + return EC_Game.GetGameRun().GetHostPlayer(); } // diff --git a/Assets/PerfectWorld/Scripts/Task/UI/IRefreshLayout.cs b/Assets/PerfectWorld/Scripts/Task/UI/IRefreshLayout.cs new file mode 100644 index 0000000000..9a3a94e82f --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Task/UI/IRefreshLayout.cs @@ -0,0 +1,7 @@ +namespace BrewMonster.Scripts.Task.UI +{ + public interface IRefreshLayout + { + void RefreshLayout(); + } +} \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Task/UI/IRefreshLayout.cs.meta b/Assets/PerfectWorld/Scripts/Task/UI/IRefreshLayout.cs.meta new file mode 100644 index 0000000000..dce7e2f941 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Task/UI/IRefreshLayout.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ab060868fe9f4611adda010fcadfd23d +timeCreated: 1763778954 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeView.cs b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeView.cs index adf54e7da2..07a85ded67 100644 --- a/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeView.cs +++ b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeView.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; -namespace BrewMonster.PerfectWorld.Scripts.Task.UI +namespace BrewMonster.Scripts.Task.UI { - public class TaskTreeView : MonoBehaviour + public class TaskTreeView : MonoBehaviour, IRefreshLayout { [SerializeField] private TaskTreeViewItem m_pTreeViewItemPrefab; diff --git a/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewItem.cs b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewItem.cs index 22f4700be3..57caf2cb56 100644 --- a/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewItem.cs +++ b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewItem.cs @@ -5,9 +5,9 @@ using UnityEngine.Events; using UnityEngine.EventSystems; using UnityEngine.UI; -namespace BrewMonster.PerfectWorld.Scripts.Task.UI +namespace BrewMonster.Scripts.Task.UI { - public class TaskTreeViewItem : MonoBehaviour + public class TaskTreeViewItem : MonoBehaviour, IRefreshLayout { [SerializeField] private TMP_Text m_text; [SerializeField] private Button m_Button; @@ -124,8 +124,12 @@ namespace BrewMonster.PerfectWorld.Scripts.Task.UI // Force Unity to rebuild layout immediately rectTransform.ForceUpdateRectTransforms(); LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform); - - transform.parent.SendMessage("RefreshLayout"); + + if (transform.parent && + transform.parent.TryGetComponent(out var refreshLayout)) + { + refreshLayout.RefreshLayout(); + } } void OnBtnClick() diff --git a/Assets/Scripts/CECHostPlayer.Task.cs b/Assets/Scripts/CECHostPlayer.Task.cs index 6e60c39c98..39f53b80c4 100644 --- a/Assets/Scripts/CECHostPlayer.Task.cs +++ b/Assets/Scripts/CECHostPlayer.Task.cs @@ -67,8 +67,6 @@ public partial class CECHostPlayer if (header == CommandID.TASK_DATA) { -#if LOAD_TASK_TEMPL // only load on developer project - // Parse aggregated task buffers cmd_task_data pCmd = cmd_task_data.FromBuffer(pDataBuf); // cmd_task_data pCmd = GPDataTypeHelper.FromBytes(pDataBuf); @@ -89,8 +87,6 @@ public partial class CECHostPlayer } m_pTaskInterface.CheckPQEnterWorldInit(); - -#endif // check if player has equipped goblin (not yet implemented in C#) // TODO: implement goblin initialization when equipment system is ready @@ -101,6 +97,7 @@ public partial class CECHostPlayer } else if (header == CommandID.TASK_VAR_DATA) { + Debug.Log($" OnMsgHstTaskData: Received TASK_VAR_DATA, size: {pDataBuf.Length} bytes"); // Minimal forwarding; original code passes inner data pointer and size if (m_pTaskInterface != null) {