using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using BrewMonster; using BrewMonster.Scripts.Common.DataProcess.ScriptableObjects; using CSNetwork.GPDataType; using UnityEngine; [System.Serializable] public struct TRANS_TARGET { public int id; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public ushort[] name; public string Name; public int world_id; public A3DVECTOR3 vecPos; public int domain_id; } [System.Serializable] public struct TRANS_TARGET_SERV { public int id; public int world_id; public A3DVECTOR3 vecPos; public int domain_id; } [System.Serializable] public struct GShopBuyOption { public uint price; // Item price public uint endTime; // End time (year/month/day/hour/minute/second) public uint time; // Duration in seconds (0 = permanent) public uint startTime; // Start time public int type; // Time type: 0=permanent, 1=weekly, 2=monthly, -1=invalid public uint day; // Day mask for weekly/monthly public uint status; // Item status: 0=none, 1=hot, 2=new, 3=recommended, 4-12=discount levels, 13=sold out public uint flag; // Additional flags } [System.Serializable] public struct GShopItem { public int localId; // Localization ID public int mainType; // Main category index public int subType; // Sub-category index public string icon; // Icon file path (128 chars) public uint id; // Item object ID public uint num; // Item quantity public GShopBuyOption[] buy; // Up to 4 different pricing options public string desc; // Item description (512 chars) public string name; // Item display name (32 chars) public uint idGift; // Gift item ID public uint giftNum; // Gift quantity public uint giftTime; // Gift duration public uint logPrice; // Log price public uint[] ownerNpcs; // NPCs that own this item (8 max) public int itemIndex; } [System.Serializable] public struct GShopMainType { public string name; // Main category name (64 chars) public List subTypes; // Sub-category names } public class GShopData { public List items; public List mainTypes; public uint timestamp; public GShopData() { items = new List(); mainTypes = new List(); timestamp = 0; } } // Extension methods for BinaryReader public static class BinaryReaderExtensions { public static string ReadString(this BinaryReader reader, int length) { byte[] bytes = reader.ReadBytes(length); return System.Text.Encoding.GetEncoding(936).GetString(bytes).TrimEnd('\0'); } public static string ReadWideString(this BinaryReader reader, int length) { byte[] bytes = reader.ReadBytes(length * 2); // Wide chars are 2 bytes each return System.Text.Encoding.Unicode.GetString(bytes).TrimEnd('\0'); } } public class GlobalDataManager { public static void globaldata_load() { // read world target data var worldTargetSO = Resources.Load("WorldTargetSO"); if(worldTargetSO == null) { BMLogger.LogError("GlobalDataManager: world target data not found"); #if UNITY_EDITOR // show a dialouge for the error UnityEditor.EditorUtility.DisplayDialog("GlobalDataManager", "World target data not found", "OK"); #endif return; } GlobalTransmitData.global_trans_targets = worldTargetSO.worldTargets; //TODO: Load the domain info file. It's a binary file. // now load domain info file // AFileImage domainFile = new AFileImage(); // if( !domainFile.Open("Data\\domain.data", AFILE_OPENEXIST | AFILE_BINARY) ) // { // a_LogOutput(1, "GlobalData_Load(), Failed to open domain data file"); // return false; // } } } public class GlobalTransmitData { public static List global_trans_targets = new(); private static List global_trans_targets_server = new(); public static List globaldata_gettranstargets => global_trans_targets; }