public static VariableObject SetMoonProps(string index, string setMoonCurrentDay, string setMoonTotalDays) { VariableObject vo = new VariableObject(); if (Support.CheckForceScriptSettings(ref vo, "Custom Moons") && setMoonTotalDays != null) { return vo; } if (Data.MoonsArray.Count == 0) { vo.Success = false; vo.Message = "There are no custom moons!"; return vo; } lock (Data.MoonsArray) { int moonIndex = 0; string moonName = null; int oldMoonTotalDays = 0; int newMoonTotalDays = 0; int newMoonCurrentDay = 0; bool success = false; string message = null; { object o = Support.GetValue(index); if (o is string) { for (int i = 0; i < Data.MoonsArray.Count; i++) { MoonPropsObject mpo = Data.MoonsArray[i]; if (mpo.Name.ToLower() == index.ToLower()) { o = Support.GetValue((i + 1).ToString()); break; } } } if (Config.CheckVariable(o, "Number", 1, Data.MoonsArray.Count, typeof(int), ref success, ref message)) { int value = (int)o; moonIndex = value - 1; index = value.ToString(); MoonPropsObject mpo = Data.MoonsArray[moonIndex]; moonName = mpo.Name; oldMoonTotalDays = mpo.TotalDays; } else { StringBuilder sb = new StringBuilder(); sb.Append(message); sb.Append("\r\nYou may also specify the moon name instead of the number."); message = sb.ToString(); } } if (success) { if (setMoonTotalDays != null) { object o = Support.GetValue(setMoonTotalDays); if (Config.CheckVariable(o, "Total Phase Days", Enum.GetNames(typeof(MoonPhase)).Length, int.MaxValue, typeof(int), ref success, ref message)) { int value = (int)o; newMoonTotalDays = value; } } else { newMoonTotalDays = oldMoonTotalDays; } } if (success) { object o = Support.GetValue(setMoonCurrentDay); if (Config.CheckVariable(o, "Current Phase Day", 1, newMoonTotalDays, typeof(int), ref success, ref message)) { int value = (int)o; newMoonCurrentDay = value; } } if (success) { MoonPropsObject mpo = new MoonPropsObject(moonName, newMoonTotalDays, newMoonCurrentDay); Data.MoonsArray[moonIndex] = mpo; message = String.Format("Moon #{0} '{1}' has been set to {2} total phase day{3} and current phase day is '{4}'.", index, moonName, newMoonTotalDays, newMoonTotalDays == 1 ? "" : "s", newMoonCurrentDay); Engine.Restart(); } vo.Success = success; vo.Message = message; } return vo; }
public static bool Load() { if (!Support.CheckDataPath()) { Support.ConsoleWriteLine(String.Format("Time System: \"{0}\" not found! Creating a new file using the current settings.", DataFileName)); Config.SetDefaults(true); Engine.Restart(); Save(); return false; } else { using (BinaryReader reader = new BinaryReader(File.Open(DataFile, FileMode.Open))) { try { m_DataFileInUse = true; Support.WipeAllArrays(); Config.SetDefaultSettings(true); int version = reader.ReadInt32(); if (version < 3) { return LegacySupport.Load(reader, version); } switch (version) { case 6: { m_UseNonRedMageAI = reader.ReadBoolean(); m_UseCantTellTime = reader.ReadBoolean(); goto case 5; } case 5: { m_LightsEngineTimerSpeed = reader.ReadDouble(); m_UseEvilSpawners = reader.ReadBoolean(); goto case 4; } case 4: { m_Logging = reader.ReadBoolean(); m_UseLightLevelOverride = reader.ReadBoolean(); m_UseMurdererDarkestHourBonus = reader.ReadBoolean(); goto case 3; } case 3: { m_Enabled = reader.ReadBoolean(); m_TimerSpeed = reader.ReadDouble(); m_MinutesPerTick = reader.ReadInt32(); m_UpdateInterval = reader.ReadInt32(); m_DayLevel = reader.ReadInt32(); m_NightLevel = reader.ReadInt32(); m_DarkestHourLevel = reader.ReadInt32(); m_LightsOnLevel = reader.ReadInt32(); m_MoonLevelAdjust = reader.ReadInt32(); m_MinutesPerHour = reader.ReadInt32(); m_HoursPerDay = reader.ReadInt32(); m_NightStartHour = reader.ReadInt32(); m_NightStartMinute = reader.ReadInt32(); m_DayStartHour = reader.ReadInt32(); m_DayStartMinute = reader.ReadInt32(); m_ScaleTimeMinutes = reader.ReadInt32(); m_Minute = reader.ReadInt32(); m_Hour = reader.ReadInt32(); m_Day = reader.ReadInt32(); m_Month = reader.ReadInt32(); m_Year = reader.ReadInt32(); m_UseDarkestHour = reader.ReadBoolean(); m_DarkestHourMinutesAfterNight = reader.ReadInt32(); m_DarkestHourScaleTimeMinutes = reader.ReadInt32(); m_DarkestHourLength = reader.ReadInt32(); m_UseRealTime = reader.ReadBoolean(); m_UseTimeZones = reader.ReadBoolean(); m_TimeZoneXDivisor = reader.ReadInt32(); m_TimeZoneScaleMinutes = reader.ReadInt32(); m_UseAutoLighting = reader.ReadBoolean(); m_UseRandomLightOutage = reader.ReadBoolean(); if (version < 5) { reader.ReadInt32(); } m_UseSeasons = reader.ReadBoolean(); m_UseNightSightDarkestHourOverride = reader.ReadBoolean(); m_UseNightSightOverride = reader.ReadBoolean(); m_TimeFormat = reader.ReadString(); m_ClockTimeFormat = reader.ReadString(); m_SpyglassFormat = reader.ReadString(); // Custom Months lock (m_MonthsArray) { int recordCount = reader.ReadInt32(); for (int i = 0; i < recordCount; i++) { MonthPropsObject mpo = new MonthPropsObject(); mpo.Name = reader.ReadString(); mpo.TotalDays = reader.ReadInt32(); m_MonthsArray.Add(mpo); } } // Custom Moons lock (m_MoonsArray) { int recordCount = reader.ReadInt32(); for (int i = 0; i < recordCount; i++) { MoonPropsObject mpo = new MoonPropsObject(); mpo.Name = reader.ReadString(); mpo.TotalDays = reader.ReadInt32(); mpo.CurrentDay = reader.ReadInt32(); mpo.LastUpdateDay = reader.ReadInt32(); m_MoonsArray.Add(mpo); } } // Facet Adjustments lock (m_FacetArray) { int recordCount = reader.ReadInt32(); for (int i = 0; i < recordCount; i++) { FacetPropsObject fpo = new FacetPropsObject(); fpo.Map = Support.GetMapFromName(reader.ReadString(), false); fpo.Adjustment = reader.ReadInt32(); Data.FacetArray.Add(fpo); } } // Effects Maps lock (m_EffectsMapArray) { int recordCount = reader.ReadInt32(); for (int i = 0; i < recordCount; i++) { int priority = reader.ReadInt32(); Map map = Support.GetMapFromName(reader.ReadString(), false); int x1 = reader.ReadInt32(); int y1 = reader.ReadInt32(); int x2 = reader.ReadInt32(); int y2 = reader.ReadInt32(); EffectsMapObject emo = Config.SetDefaultEffectsValues(new EffectsMapObject(map, x1, y1, x2, y2)); emo.Priority = priority; if (version > 4) { emo.Index = reader.ReadInt32(); emo.Enabled = reader.ReadBoolean(); } emo.UseLatitude = reader.ReadBoolean(); emo.OuterLatitudePercent = reader.ReadDouble(); emo.InnerLatitudePercent = reader.ReadDouble(); if (version < 5) { emo.Index = reader.ReadInt32(); } emo.UseSeasons = reader.ReadBoolean(); emo.StaticSeason = (Season)reader.ReadInt32(); emo.SpringDate.Month = reader.ReadInt32(); emo.SpringDate.Day = reader.ReadInt32(); emo.SummerDate.Month = reader.ReadInt32(); emo.SummerDate.Day = reader.ReadInt32(); emo.FallDate.Month = reader.ReadInt32(); emo.FallDate.Day = reader.ReadInt32(); emo.WinterDate.Month = reader.ReadInt32(); emo.WinterDate.Day = reader.ReadInt32(); if (version > 4) { emo.UseDarkestHour = reader.ReadBoolean(); emo.UseAutoLighting = reader.ReadBoolean(); emo.UseRandomLightOutage = reader.ReadBoolean(); emo.LightOutageChancePerTick = reader.ReadInt32(); } emo.UseNightSightDarkestHourOverride = reader.ReadBoolean(); if (version > 3) { emo.NightSightDarkestHourReduction = reader.ReadInt32(); } emo.UseNightSightOverride = reader.ReadBoolean(); emo.NightSightLevelReduction = reader.ReadInt32(); if (version > 3) { emo.UseLightLevelOverride = reader.ReadBoolean(); emo.LightLevelOverrideAdjust = reader.ReadInt32(); emo.UseMurdererDarkestHourBonus = reader.ReadBoolean(); emo.MurdererDarkestHourLevelBonus = reader.ReadInt32(); } if (version > 4) { emo.UseEvilSpawners = reader.ReadBoolean(); } if (version > 5) { emo.UseNonRedMageAI = reader.ReadBoolean(); emo.UseCantTellTime = reader.ReadBoolean(); } Data.EffectsMapArray.Add(emo); } } // Effects Exclusion Maps lock (m_EffectsExclusionMapArray) { int recordCount = reader.ReadInt32(); for (int i = 0; i < recordCount; i++) { int priority = reader.ReadInt32(); Map map = Support.GetMapFromName(reader.ReadString(), false); int x1 = reader.ReadInt32(); int y1 = reader.ReadInt32(); int x2 = reader.ReadInt32(); int y2 = reader.ReadInt32(); EffectsExclusionMapObject eemo = Config.SetDefaultEffectsExclusionValues(new EffectsExclusionMapObject(map, x1, y1, x2, y2)); eemo.Priority = priority; if (version > 4) { eemo.Index = reader.ReadInt32(); eemo.Enabled = reader.ReadBoolean(); } if (version < 4) { reader.ReadBoolean(); reader.ReadDouble(); reader.ReadDouble(); } if (version < 5) { eemo.Index = reader.ReadInt32(); } Data.EffectsExclusionMapArray.Add(eemo); } } break; } } reader.Close(); Support.ConsoleWriteLine("Time System: Loading complete."); m_DataFileInUse = false; Support.ReIndexArray(EffectsMapArray); Support.ReIndexArray(EffectsExclusionMapArray); return true; } catch (EndOfStreamException e) { m_DataFileInUse = false; reader.Close(); Support.ConsoleWriteLine(String.Format("Time System: \"{0}\" is corrupt! Creating a new file using the current settings.\r\n\r\nException:\r\n\r\n{1}\r\n", DataFileName, e.ToString())); Config.SetDefaults(true); Engine.Restart(); Save(); string goAwayWarning = e.ToString(); // Stop compile warning. return false; } catch (Exception e) { m_DataFileInUse = false; reader.Close(); Support.ConsoleWriteLine(String.Format("Time System: Unable to load data from file \"{0}\"! Creating a new file using the current settings.\r\n\r\nException:\r\n\r\n{1}\r\n", DataFileName, e.ToString())); Config.SetDefaults(true); Engine.Restart(); Save(); return false; } } } }
private static VariableObject SetMoon(CommandType ct, string index, string setMoonName, string setMoonTotalDays, string setMoonCurrentDay) { VariableObject vo = new VariableObject(); if (Support.CheckForceScriptSettings(ref vo, "Custom Moons")) { return vo; } if (Data.DataFileInUse) { vo.Success = false; vo.Message = Data.DataFileInUseMessage; return vo; } if (Data.MoonsArray.Count == 0) { if (ct != CommandType.Add) { vo.Success = false; vo.Message = "There are no custom moons!"; return vo; } } if (Support.CheckAlreadyExistsInArray(ref vo, Data.MoonsArray, setMoonName)) { return vo; } lock (Data.MoonsArray) { int moonIndex = 0; int newMoonTotalDays = 0; int newMoonCurrentDay = 1; bool success = false; string message = null; if (ct != CommandType.Add) // If not adding, check index number. { object o = Support.GetValue(index); if (Config.CheckVariable(o, "Number", 1, Data.MoonsArray.Count, typeof(int), ref success, ref message)) { int value = (int)o; moonIndex = value - 1; } } else // Adding, so increment index by 1. { success = true; index = (Data.MoonsArray.Count + 1).ToString(); } if (success) // Check total phase days. { object o = Support.GetValue(setMoonTotalDays); if (Config.CheckVariable(o, "Total Phase Days", Enum.GetNames(typeof(MoonPhase)).Length, int.MaxValue, typeof(int), ref success, ref message)) { int value = (int)o; newMoonTotalDays = value; } } if (success) // Check current phase day. { if (setMoonCurrentDay != null) { object o = Support.GetValue(setMoonCurrentDay); if (Config.CheckVariable(o, "Current Phase Day", 1, newMoonTotalDays, typeof(int), ref success, ref message)) { int value = (int)o; newMoonCurrentDay = value; } } } if (success) // If successful then finalize. { MoonPropsObject mpo = new MoonPropsObject(setMoonName, newMoonTotalDays, newMoonCurrentDay); switch (ct) { case CommandType.Add: { Data.MoonsArray.Add(mpo); message = String.Format("Moon #{0} '{1}' has been added with '{2}' total phase day{3} and current phase day is '{4}'.", index, setMoonName, newMoonTotalDays, newMoonTotalDays == 1 ? "" : "s", newMoonCurrentDay); break; } case CommandType.Insert: { Data.MoonsArray.Insert(moonIndex, mpo); message = String.Format("Moon #{0} '{1}' has been inserted with '{2}' total phase day{3} and current phase day is '{4}'. All succeeding moons indexes have moved down.", index, setMoonName, newMoonTotalDays, newMoonTotalDays == 1 ? "" : "s", newMoonCurrentDay); break; } case CommandType.Set: { Data.MoonsArray[moonIndex] = mpo; message = String.Format("Moon #{0} '{1}' has been set with '{2}' total phase day{3} and current phase day is '{4}'.", index, setMoonName, newMoonTotalDays, newMoonTotalDays == 1 ? "" : "s", newMoonCurrentDay); break; } } Engine.Restart(); } vo.Success = success; vo.Message = message; } return vo; }