using ModelRenderer.Scripts.GameData; using BrewMonster.Scripts.Task; using UnityEngine; using BrewMonster; using System.Collections.Generic; using System.IO; using CSNetwork; namespace BrewMonster.Network { public partial class EC_Game { #region Fields 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 CECGFXCaster m_pGFXCaster; // GFX caster private static BrewMonster.CECStringTab m_FixedMsgs; // Fixed message table private static BrewMonster.CECStringTab m_ItemDesc; // Item desciption string table private static BrewMonster.CECStringTab m_ItemExtDesc; // Item extend description string table private static BrewMonster.CECStringTab m_SkillDesc; // Skill description string table private static BrewMonster.CECStringTab m_BuffDesc; // Buff description string table private static Dictionary m_ItemMsgMap; // TemplateId -> (MessageId, DisplayMode) #endregion #region Properties public static ATaskTemplMan GetTaskTemplateMan() { return m_pTaskMan; } public static elementdataman GetElementDataMan() { return m_pElementDataMan; } // String table getters public static BrewMonster.CECStringTab GetFixedMsgs() { return m_FixedMsgs; } public static BrewMonster.CECStringTab GetItemDesc() { return m_ItemDesc; } public static BrewMonster.CECStringTab GetItemExtDesc() { return m_ItemExtDesc; } public static BrewMonster.CECStringTab GetSkillDesc() { return m_SkillDesc; } public static BrewMonster.CECStringTab GetBuffDesc() { return m_BuffDesc; } public static bool TryGetItemMsg(int templateId, out int messageId, out int displayMode) { messageId = 0; displayMode = 0; if (m_ItemMsgMap != null && m_ItemMsgMap.TryGetValue(templateId, out var entry)) { messageId = entry.MessageId; displayMode = entry.DisplayMode; return true; } return false; } #endregion #region Public Methods public static bool Init() { m_pElementDataMan = elementdataman.Instance; // Load task templates if (m_pTaskMan == null) m_pTaskMan = new ATaskTemplMan(); m_pTaskMan.Init(m_pElementDataMan); if (!m_pTaskMan.InitStorageTask()) { BMLogger.LogError("[Dat]- CECGame::Init, Storage task Init Failed!"); return false; } m_pGameRun = CECGameRun.Instance; if (m_pGameRun == null) { BMLogger.LogError("CECGame::Init"); return false; } // Create GFX caster if (m_pGFXCaster == null) { m_pGFXCaster = new CECGFXCaster(); return false; } // Initialize string tables InitializeStringTables(); return true; } /// /// Initialize all string tables with their respective data files /// private static void InitializeStringTables() { // Initialize string table instances m_FixedMsgs = new BrewMonster.CECStringTab(); m_ItemDesc = new BrewMonster.CECStringTab(); m_ItemExtDesc = new BrewMonster.CECStringTab(); m_SkillDesc = new BrewMonster.CECStringTab(); m_BuffDesc = new BrewMonster.CECStringTab(); // Load string files from StreamingAssets/configs directory string dataPath = Application.streamingAssetsPath + "/configs/"; try { // Load each string table using the actual file names from StreamingAssets/configs if (!m_FixedMsgs.Init(dataPath + "fixed_msg.txt", true)) { Debug.LogWarning("[EC_Game] Failed to load fixed_msg.txt"); } if (!m_ItemDesc.Init(dataPath + "item_desc.txt", true)) { Debug.LogWarning("[EC_Game] Failed to load item_desc.txt"); } if (!m_ItemExtDesc.Init(dataPath + "item_ext_desc.txt", true)) { Debug.LogWarning("[EC_Game] Failed to load item_ext_desc.txt"); } if (!m_SkillDesc.Init(dataPath + "skillstr.txt", true)) { Debug.LogWarning("[EC_Game] Failed to load skillstr.txt"); } // Note: There's no buff_desc.txt file in the configs folder // You may need to create this file or use a different source for buff descriptions if (!m_BuffDesc.Init(dataPath + "buff_desc.txt", true)) { Debug.LogWarning("[EC_Game] Failed to load buff_desc.txt - file may not exist"); } // Load item message map (template -> message id) LoadItemMsgMap(); Debug.Log("[EC_Game] String tables initialized successfully"); } catch (System.Exception ex) { Debug.LogError($"[EC_Game] Error initializing string tables: {ex.Message}"); } } private struct ItemMsgMapEntry { public int MessageId; public int DisplayMode; } private static void LoadItemMsgMap() { m_ItemMsgMap = new Dictionary(); try { string path = Application.streamingAssetsPath + "/configs/item_msg_map.txt"; if (!File.Exists(path)) { Debug.LogWarning("[EC_Game] item_msg_map.txt not found; descriptions will fall back to template IDs"); return; } foreach (var raw in File.ReadLines(path)) { var line = raw.Trim(); if (line.Length == 0) continue; if (line.StartsWith("//")) continue; // Expect: templateId messageId displayMode var parts = line.Split(new char[] { '\t', ' ' }, System.StringSplitOptions.RemoveEmptyEntries); if (parts.Length < 2) continue; if (!int.TryParse(parts[0], out int templateId)) continue; if (!int.TryParse(parts[1], out int messageId)) continue; int displayMode = 0; if (parts.Length >= 3) int.TryParse(parts[2], out displayMode); m_ItemMsgMap[templateId] = new ItemMsgMapEntry { MessageId = messageId, DisplayMode = displayMode }; } } catch (System.Exception ex) { Debug.LogWarning($"[EC_Game] Failed to load item_msg_map: {ex.Message}"); } } public static CECGameRun GetGameRun() { return m_pGameRun; } public static CECGFXCaster GetGFXCaster() { if(m_pGFXCaster==null) m_pGFXCaster = new CECGFXCaster(); return m_pGFXCaster; } #endregion } }