using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Data; using Ion.Storage; using System.Threading; namespace Holo.Source.Managers { public static class modeldataManager { private static Hashtable ModeldataStorage; #region Startup internal static void Init(bool Update) { Out.WriteLine("Starting caching of room_modeldata..."); DataColumn dCol; using (DatabaseClient dbClient = frmMain.dbManager.GetClient()) { dCol = dbClient.getColumn("SELECT model FROM room_modeldata ORDER BY modelID"); } ModeldataStorage = new Hashtable(); foreach (DataRow dRow in dCol.Table.Rows) { ChacheData(dRow["model"].ToString()); } Out.WriteLine("Modeldata cached"); if (Update) Thread.CurrentThread.Abort(); } internal static void ChacheData(string _Model) { DataRow dRow; using (DatabaseClient dbClient = frmMain.dbManager.GetClient()) { dRow = dbClient.getRow("SELECT room_modeldata.modelID, room_modeldata.model, room_modeldata.roomomatic_subscr_only, room_modeldata.door_x, room_modeldata.door_y, room_modeldata.door_h, room_modeldata.door_z, room_modeldata.heightmap, room_modeldata.publicroom_items, room_modeldata.swimmingpool, room_modeldata.specialcast_emitter, room_modeldata.specialcast_interval, room_modeldata.specialcast_rnd_min, room_modeldata.specialcast_rnd_max FROM room_modeldata WHERE model = '" + _Model + "' LIMIT 1"); } ModeldataStructure Structure = new ModeldataStructure(); Structure.HeightMap = Convert.ToString(dRow["heightmap"]); Structure.PublicRoomItems = Convert.ToString(dRow["publicroom_items"]); Structure.DoorX = Convert.ToInt32(dRow["door_x"]); Structure.DoorY = Convert.ToInt32(dRow["door_y"]); Structure.DoorZ = Convert.ToByte(dRow["door_z"]); Structure.DoorH = Convert.ToInt32(dRow["door_h"]); Structure.RoomomaticSuscr = Convert.ToInt32(dRow["roomomatic_subscr_only"]); Structure.IsSwimmingpool = (Convert.ToInt32(dRow["swimmingpool"]) == 1); Structure.SpecialcastEmitter = Convert.ToString(dRow["specialcast_emitter"]); if (Convert.ToString(dRow["specialcast_interval"]).Length > 0) Structure.SpecialcastInterval = Convert.ToInt32(dRow["specialcast_interval"]); if (Convert.ToString(dRow["specialcast_rnd_max"]).Length > 0) Structure.SpecialcastRndMAX = Convert.ToInt32(dRow["specialcast_rnd_max"]); if (Convert.ToString(dRow["specialcast_rnd_min"]).Length > 0) Structure.SpecialcastRndMIN = Convert.ToInt32(dRow["specialcast_rnd_min"]); #region SquareEcoding string[] tmpHeightmap = Structure.HeightMap.Split("\r".ToCharArray()); int colX = tmpHeightmap[0].Length; int colY = tmpHeightmap.Length - 1; Structure.ModelsqSTATE = new Holo.Virtual.Rooms.virtualRoom.squareState[colX, colY]; Structure.ModelsqFLOORHEIGHT = new byte[colX, colY]; for (int y = 0; y < colY; y++) { for (int x = 0; x < colX; x++) { try { string _SQ = tmpHeightmap[y].Substring(x, 1).Trim().ToLower(); if (_SQ == "x") Structure.ModelsqSTATE[x, y] = Holo.Virtual.Rooms.virtualRoom.squareState.Blocked; else { Structure.ModelsqSTATE[x, y] = Holo.Virtual.Rooms.virtualRoom.squareState.Open; try { Structure.ModelsqFLOORHEIGHT[x, y] = byte.Parse(_SQ); } catch { } } } catch { } } } #endregion ModeldataStorage.Add(_Model, Structure); } #endregion #region Return values public static string Heightmap(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.HeightMap; } public static string publicroom_items(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.PublicRoomItems; } public static int door_x(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.DoorX; } public static int door_y(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.DoorY; } public static int door_h(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.DoorH; } public static byte door_z(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.DoorZ; } public static int roomomatic_suscr(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.RoomomaticSuscr; } public static bool swimmingpool(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.IsSwimmingpool; } public static string specialcast_emitter(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.SpecialcastEmitter; } public static int specialcast_interval(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.SpecialcastInterval; } public static int specialcast_rnd_min(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.SpecialcastRndMIN; } public static int specialcast_rnd_max(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.SpecialcastRndMAX; } public static byte[,] GetFloorgeight(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; return Structure.ModelsqFLOORHEIGHT; } public static Holo.Virtual.Rooms.virtualRoom.squareState[,] GetSQState(string _Model) { ModeldataStructure Structure = (ModeldataStructure)ModeldataStorage[_Model]; Holo.Virtual.Rooms.virtualRoom.squareState[,] MainState = Structure.ModelsqSTATE; Holo.Virtual.Rooms.virtualRoom.squareState[,] Copy = new Holo.Virtual.Rooms.virtualRoom.squareState[MainState.GetLength(0), MainState.GetLength(1)]; Array.Copy(MainState, Copy, MainState.GetLength(0) * MainState.GetLength(1)); return Copy; } public static ModeldataStructure GetStructureInstance(string RoomModel) { return (ModeldataStructure)ModeldataStorage[RoomModel]; } #endregion } public struct ModeldataStructure { internal string HeightMap; internal string PublicRoomItems; internal int DoorX; internal int DoorY; internal int DoorH; internal byte DoorZ; internal int RoomomaticSuscr; internal bool IsSwimmingpool; internal string SpecialcastEmitter; internal int SpecialcastInterval; internal int SpecialcastRndMAX; internal int SpecialcastRndMIN; internal byte[,] ModelsqFLOORHEIGHT; internal Holo.Virtual.Rooms.virtualRoom.squareState[,] ModelsqSTATE; public Holo.Virtual.Rooms.virtualRoom.squareState[,] GetSQState() { Holo.Virtual.Rooms.virtualRoom.squareState[,] Copy = new Holo.Virtual.Rooms.virtualRoom.squareState[ModelsqSTATE.GetLength(0), ModelsqSTATE.GetLength(1)]; Holo.Virtual.Rooms.virtualRoom.squareState[,] MainState = ModelsqSTATE; Array.Copy(ModelsqSTATE, Copy, ModelsqSTATE.GetLength(0) * ModelsqSTATE.GetLength(1)); return Copy; } } }