/********* ** Public methods *********/ /// <summary>The mod entry point, called after the mod is first loaded.</summary> /// <param name="helper">Provides simplified APIs for writing mods.</param> public override void Entry(IModHelper helper) { // read config _config = helper.ReadConfig <ModConfigModel>(); // set up sounds if (Constants.TargetPlatform == GamePlatform.Windows && _config.EnableWhistleAudio) { try { _customSoundBank = new SoundBankWrapper(new SoundBank(Game1.audioEngine.Engine, Path.Combine(helper.DirectoryPath, "assets", "CustomSoundBank.xsb"))); _customWaveBank = new WaveBank(Game1.audioEngine.Engine, Path.Combine(helper.DirectoryPath, "assets", "CustomWaveBank.xwb")); _hasAudio = true; } catch (ArgumentException ex) { _customSoundBank = null; _customWaveBank = null; _hasAudio = false; Monitor.Log("Couldn't load audio, so the whistle sound won't play."); Monitor.Log(ex.ToString(), LogLevel.Trace); } } // add event listeners helper.Events.Input.ButtonPressed += this.OnButtonPressed; if (_config.EnableGrid) { helper.Events.GameLoop.UpdateTicked += this.UpdateTicked; helper.Events.Display.Rendered += this.OnRendered; } }
/********* ** Public methods *********/ /// <inheritdoc /> /// <summary>Initialise the mod.</summary> /// <param name="helper">Provides methods for interacting with the mod directory, such as read/writing a config file or custom JSON files.</param> public override void Entry(IModHelper helper) { _config = helper.ReadConfig <ModConfigModel>(); if (Constants.TargetPlatform == GamePlatform.Windows && _config.EnableWhistleAudio) { try { _customSoundBank = new SoundBankWrapper(new SoundBank(Game1.audioEngine, Path.Combine(helper.DirectoryPath, "assets", "CustomSoundBank.xsb"))); _customWaveBank = new WaveBank(Game1.audioEngine, Path.Combine(helper.DirectoryPath, "assets", "CustomWaveBank.xwb")); _hasAudio = true; } catch (ArgumentException ex) { _customSoundBank = null; _customWaveBank = null; _hasAudio = false; Monitor.Log("Couldn't load audio, so the whistle sound won't play."); Monitor.Log(ex.ToString(), LogLevel.Trace); } } // add all event listener methods InputEvents.ButtonPressed += InputEvents_ButtonPressed; if (!_config.EnableGrid) { return; } GameEvents.SecondUpdateTick += (sender, e) => UpdateGrid(); GraphicsEvents.OnPostRenderEvent += (sender, e) => DrawGrid(Game1.spriteBatch); }
private void ModlistBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { ModConfigModel config = ((ModItemControl)modlistBox.SelectedItem).Tag as ModConfigModel; desTextBlock.Text = config.Descript; modNamelabel.Content = config.Name; // throw new NotImplementedException(); }
public static void SaveConfig(string file, ModConfigModel config) { FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write); TextWriter tw = new StreamWriter(fs, Encoding.Default); string str = Newtonsoft.Json.JsonConvert.SerializeObject(config); tw.Write(str); tw.Close(); }
public override void OnRefreshMilestones() { if (managers.loading.currentMode == AppMode.Game && Singleton <UnlockManager> .exists) { ModConfigModel config = JsonHelper.FromJsonFile <ModConfigModel>(Path.Combine(ModHelper.GetPath(), _modConfigFilePath)) ?? new ModConfigModel(); BuildNonDefault(config); RefreshMilestones(config); } milestonesManager.UnlockMilestone("Basic Road Created"); }
public static ModConfigModel LoadConfig(Stream file) { // FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); TextReader tr = new StreamReader(file, Encoding.Default); string str = tr.ReadToEnd(); //file.Close(); tr.Close(); ModConfigModel config = Newtonsoft.Json.JsonConvert.DeserializeObject(str, typeof(ModConfigModel)) as ModConfigModel; return(config); }
private void BuildNonDefault(ModConfigModel config) { ModSettingModel modSetting = JsonHelper.FromJsonFile <ModSettingModel>(CustomMilestonesMod.modSettingFilePath) ?? new ModSettingModel(); if (modSetting.BuildAllAssets) { CustomAssets assets = new CustomAssets(); for (uint index = 0; index < PrefabCollection <NetInfo> .LoadedCount(); index++) { NetInfo net = PrefabCollection <NetInfo> .GetLoaded(index); if (net.GetUnlockMilestone().GetLevel() > 0 && !config.RoadIncludes.Contains(config.Renames.GetRename(net.name)) && !config.RoadGroups.Any(m => m.Value.Contains(net.name))) { assets.Roads.Add(new ItemModel() { Name = net.name, LocalizedName = net.GetLocalizedTitle(), Expansions = net.m_class.m_service.ToString() + "|" + net.m_class.m_subService.ToString() + "|" + net.category }); } } for (uint index = 0; index < PrefabCollection <BuildingInfo> .LoadedCount(); index++) { BuildingInfo building = PrefabCollection <BuildingInfo> .GetLoaded(index); if (building.GetUnlockMilestone().GetLevel() > 0 && !config.BuildingIncludes.Contains(config.Renames.GetRename(building.name)) && !config.BuildingGroups.Any(m => m.Value.Contains(building.name))) { if (building.category == "RoadsIntersection") { assets.Roads.Add(new ItemModel() { Name = building.name, LocalizedName = building.GetLocalizedTitle() }); } else { assets.Buildings.Add(new ItemModel() { Name = building.name, LocalizedName = building.GetLocalizedTitle() }); } } } modSetting.BuildAllAssets = false; JsonHelper.ToJsonFile(modSetting, CustomMilestonesMod.modSettingFilePath); XmlHelper.ToXmlFile(assets, DataLocation.executableDirectory + "\\CustomMilestone-Non-Default.xml"); } }
/// <summary> /// 刷新道路里程碑 /// </summary> /// <param name="name">道路名称</param> /// <param name="milestoneInfo">新的里程碑进度</param> /// <param name="config">配置信息</param> /// <param name="inGroup">是否在组</param> private void RefreshRoadMilestone(string name, MilestoneInfo milestoneInfo, ModConfigModel config, bool inGroup = false) { if (config.RoadExistsBuildings.Contains(name)) { RefreshBuildingMilestone(name, milestoneInfo, config); } else if (config.RoadGroups.TryGetValue(name, out List <string> roadGroup) && !inGroup) { foreach (string roadName in roadGroup) { RefreshRoadMilestone(roadName, milestoneInfo, config, true); } } else if (PrefabCollection <NetInfo> .LoadedExists(name)) { NetInfo net = PrefabCollection <NetInfo> .FindLoaded(name); if (milestoneInfo.GetLevel() < net.GetUnlockMilestone().GetLevel()) { net.m_UnlockMilestone = milestoneInfo; } RefreshRelatedMilestone(name, net.category, net.m_class.m_service, net.m_class.m_subService, net.m_UnlockMilestone); } }
/// <summary> /// 刷新服务里程碑 /// </summary> /// <param name="name"></param> /// <param name="milestoneInfo"></param> /// <param name="config"></param> /// <param name="inGroup"></param> private void RefreshServiceMilestones(string name, MilestoneInfo milestoneInfo, ModConfigModel config = null, bool inGroup = false) { if (config != null && config.ServiceExistsFeatures.Contains(name)) { RefreshFeatureMilestones(name, milestoneInfo); } else if (EnumHelper.TryToEnumData(name, out PositionData <ItemClass.Service> serviceEnum)) { if (milestoneInfo.GetLevel() < Singleton <UnlockManager> .instance.m_properties.m_ServiceMilestones[(int)serviceEnum.enumValue].GetLevel()) { Singleton <UnlockManager> .instance.m_properties.m_ServiceMilestones[(int)serviceEnum.enumValue] = milestoneInfo; switch (name) { case "Monuments": milestonesManager.UnlockMilestone("Statue of Industry Requirements"); milestonesManager.UnlockMilestone("Statue of Wealth Requirements"); milestonesManager.UnlockMilestone("Lazaret Plaza Requirements"); milestonesManager.UnlockMilestone("Statue of Shopping Requirements"); milestonesManager.UnlockMilestone("Plaza of the Dead Requirements"); if (managers.application.SupportsExpansion(Expansion.NaturalDisasters)) { milestonesManager.UnlockMilestone("Meteor Park Requirements"); } if (managers.application.SupportsExpansion(Expansion.GreenCities)) { milestonesManager.UnlockMilestone("Bird And Bee Haven Requirements"); } break; } } } }
/// <summary> /// 刷新功能里程碑 /// </summary> /// <param name="name"></param> /// <param name="milestoneInfo"></param> /// <param name="config"></param> /// <param name="inGroup"></param> private void RefreshFeatureMilestones(string name, MilestoneInfo milestoneInfo, ModConfigModel config = null, bool inGroup = false) { if (config != null && config.FeatureGroups.TryGetValue(name, out List <string> featureGroup) && !inGroup) { foreach (string item in featureGroup) { RefreshFeatureMilestones(item, milestoneInfo, config, true); } } else if (EnumHelper.TryToEnumData(name, out PositionData <UnlockManager.Feature> featureEnum)) { if (milestoneInfo.GetLevel() < Singleton <UnlockManager> .instance.m_properties.m_FeatureMilestones[(int)featureEnum.enumValue].GetLevel()) { Singleton <UnlockManager> .instance.m_properties.m_FeatureMilestones[(int)featureEnum.enumValue] = milestoneInfo; switch (name) { case "MonumentLevel2": milestonesManager.UnlockMilestone("Fountain of LifeDeath Requirements"); milestonesManager.UnlockMilestone("Friendly Neighborhood Requirements"); milestonesManager.UnlockMilestone("Transport Tower Requirements"); milestonesManager.UnlockMilestone("Trash Mall Requirements"); milestonesManager.UnlockMilestone("Posh Mall Requirements"); if (managers.application.SupportsExpansion(Expansion.NaturalDisasters)) { milestonesManager.UnlockMilestone("Disaster Memorial Requirements"); } if (managers.application.SupportsExpansion(Expansion.GreenCities)) { milestonesManager.UnlockMilestone("Climate Research Station Requirements"); } if (managers.application.SupportsExpansion(Expansion.Parks)) { milestonesManager.UnlockMilestone("Clock Tower Requirements"); } break; case "MonumentLevel3": milestonesManager.UnlockMilestone("Colossal Offices Requirements"); milestonesManager.UnlockMilestone("Official Park Requirements"); milestonesManager.UnlockMilestone("CourtHouse Requirements"); milestonesManager.UnlockMilestone("Grand Mall Requirements"); milestonesManager.UnlockMilestone("Cityhall Requirements"); if (managers.application.SupportsExpansion(Expansion.NaturalDisasters)) { milestonesManager.UnlockMilestone("Helicopter Park Requirements"); } if (managers.application.SupportsExpansion(Expansion.Parks)) { milestonesManager.UnlockMilestone("Old Market Street Requirements"); } break; case "MonumentLevel4": milestonesManager.UnlockMilestone("Business Park Requirements"); milestonesManager.UnlockMilestone("Library Requirements"); milestonesManager.UnlockMilestone("Observatory Requirements"); milestonesManager.UnlockMilestone("Opera House Requirements"); milestonesManager.UnlockMilestone("Oppression Office Requirements"); if (managers.application.SupportsExpansion(Expansion.NaturalDisasters)) { milestonesManager.UnlockMilestone("Pyramid Of Safety Requirements"); } if (managers.application.SupportsExpansion(Expansion.GreenCities)) { milestonesManager.UnlockMilestone("Floating Gardens Requirements"); } if (managers.application.SupportsExpansion(Expansion.Parks)) { milestonesManager.UnlockMilestone("Sea Fortress Requirements"); } break; case "MonumentLevel5": milestonesManager.UnlockMilestone("ScienceCenter Requirements"); milestonesManager.UnlockMilestone("Servicing Services Requirements"); milestonesManager.UnlockMilestone("SeaWorld Requirements"); milestonesManager.UnlockMilestone("Expocenter Requirements"); milestonesManager.UnlockMilestone("High Interest Tower Requirements"); milestonesManager.UnlockMilestone("Academic Library Prerequisites"); milestonesManager.UnlockMilestone("Aviation Club Prerequisites"); if (managers.application.SupportsExpansion(Expansion.NaturalDisasters)) { milestonesManager.UnlockMilestone("Sphinx Of Scenarios Requirements"); } if (managers.application.SupportsExpansion(Expansion.GreenCities)) { milestonesManager.UnlockMilestone("Ziggurat Garden Requirements"); } if (managers.application.SupportsExpansion(Expansion.Parks)) { milestonesManager.UnlockMilestone("Observation Tower Requirements"); } break; case "MonumentLevel6": milestonesManager.UnlockMilestone("Cathedral of Plentitude Requirements"); milestonesManager.UnlockMilestone("Stadium Requirements"); milestonesManager.UnlockMilestone("Modern Art Museum Requirements"); milestonesManager.UnlockMilestone("SeaAndSky Scraper Requirements"); milestonesManager.UnlockMilestone("Theater of Wonders Requirements"); if (managers.application.SupportsExpansion(Expansion.NaturalDisasters)) { milestonesManager.UnlockMilestone("Unicorn Park Requirements"); } if (managers.application.SupportsExpansion(Expansion.GreenCities)) { milestonesManager.UnlockMilestone("Central Park Requirements"); } if (managers.application.SupportsExpansion(Expansion.Parks)) { milestonesManager.UnlockMilestone("Statue Of Colossalus Requirements"); } break; } } } }
/// <summary> /// 刷新建筑里程碑 /// </summary> /// <param name="name">建筑名称</param> /// <param name="milestoneInfo">新的里程碑进度</param> /// <param name="config">配置信息</param> /// <param name="inGroup">是否在组</param> private void RefreshBuildingMilestone(string name, MilestoneInfo milestoneInfo, ModConfigModel config, bool inGroup = false) { if (config.BuildingExistsRoads.Contains(name) || config.BuildingContainedRoads.Contains(name)) { RefreshRoadMilestone(name, milestoneInfo, config); } else if (config.BuildingGroups.TryGetValue(name, out List <string> buildingGroup) && !inGroup) { foreach (string buildingName in buildingGroup) { RefreshBuildingMilestone(buildingName, milestoneInfo, config, true); } } else if (PrefabCollection <BuildingInfo> .LoadedExists(name)) { BuildingInfo building = PrefabCollection <BuildingInfo> .FindLoaded(name); if (milestoneInfo.GetLevel() < building.GetUnlockMilestone().GetLevel()) { building.m_UnlockMilestone = milestoneInfo; } RefreshRelatedMilestone(name, building.category, building.m_class.m_service, building.m_class.m_subService, milestoneInfo); } }
public void RefreshMilestones(ModConfigModel config) { CustomMilestoneModel customMilestone = XmlHelper.FromXmlFile <CustomMilestoneModel>(_xmlFilePath); if (customMilestone.Rebuild) { customMilestone.Rebuild = false; //读取默认道路信息 for (uint index = 0; index < PrefabCollection <NetInfo> .LoadedCount(); index++) { NetInfo net = PrefabCollection <NetInfo> .GetLoaded(index); if (config.RoadIncludes.Contains(config.Renames.GetRename(net.name)) && !customMilestone.Exists(config.Renames.GetRename(net.name))) { if (config.BuildingExistsRoads.Contains(config.Renames.GetRename(net.name))) { customMilestone.Milestones[net.GetUnlockMilestone().GetLevel()].Buildings.Add(new ItemModel() { Name = config.Renames.GetRename(net.name), LocalizedName = net.GetLocalizedTitle(), Expansions = net.m_class.m_service.ToString() + "|" + net.m_class.m_subService.ToString() + "|" + net.category }); } else { customMilestone.Milestones[net.GetUnlockMilestone().GetLevel()].Roads.Add(new ItemModel() { Name = config.Renames.GetRename(net.name), LocalizedName = net.GetLocalizedTitle(), Expansions = net.m_class.m_service.ToString() + "|" + net.m_class.m_subService.ToString() + "|" + net.category }); } } } //读取默认建筑信息 for (uint index = 0; index < PrefabCollection <BuildingInfo> .LoadedCount(); index++) { BuildingInfo building = PrefabCollection <BuildingInfo> .GetLoaded(index); if (config.BuildingIncludes.Contains(config.Renames.GetRename(building.name)) && !customMilestone.Exists(config.Renames.GetRename(building.name))) { if (config.RoadExistsBuildings.Contains(config.Renames.GetRename(building.name))) { customMilestone.Milestones[building.GetUnlockMilestone().GetLevel()].Roads.Add(new ItemModel() { Name = config.Renames.GetRename(building.name), LocalizedName = building.GetLocalizedTitle(), Expansions = building.m_class.m_service.ToString() + "|" + building.m_class.m_subService.ToString() + "|" + building.category }); } else { customMilestone.Milestones[building.GetUnlockMilestone().GetLevel()].Buildings.Add(new ItemModel() { Name = config.Renames.GetRename(building.name), LocalizedName = building.GetLocalizedTitle(), Expansions = building.m_class.m_service.ToString() + "|" + building.m_class.m_subService.ToString() + "|" + building.category }); } } } //读取默认功能信息 foreach (var featureEnum in Utils.GetOrderedEnumData <UnlockManager.Feature>()) { if (config.Features.Contains(featureEnum.enumName) && !customMilestone.Exists(featureEnum.enumName, "Feature")) { var level = Singleton <UnlockManager> .instance.m_properties.m_FeatureMilestones[(int)featureEnum.enumValue].GetLevel(); if (config.ServiceExistsFeatures.Contains(featureEnum.enumName)) { customMilestone.Milestones[level].Services.Add(new ItemModel() { Name = featureEnum.enumName, LocalizedName = featureEnum.GetLocalizedName(), }); } else { customMilestone.Milestones[level].Features.Add(new ItemModel() { Name = featureEnum.enumName, LocalizedName = featureEnum.GetLocalizedName(), }); } } } //读取默认服务信息 foreach (var serviceEnum in Utils.GetOrderedEnumData <ItemClass.Service>()) { if (config.Services.Contains(serviceEnum.enumName) && !customMilestone.Exists(serviceEnum.enumName, "Service")) { var level = Singleton <UnlockManager> .instance.m_properties.m_ServiceMilestones[(int)serviceEnum.enumValue].GetLevel(); customMilestone.Milestones[level].Services.Add(new ItemModel() { Name = serviceEnum.enumName, LocalizedName = serviceEnum.GetLocalizedName(), }); } } //读取默认服务政策信息 foreach (var policyEnum in Utils.GetOrderedEnumData <DistrictPolicies.Policies>("Services")) { var index = (int)(policyEnum.enumValue & (DistrictPolicies.Policies) 31); var level = Singleton <UnlockManager> .instance.m_properties.m_ServicePolicyMilestones[index].GetLevel(); customMilestone.Milestones[level].Policies.Add(new ItemModel() { Name = policyEnum.enumName, LocalizedName = policyEnum.GetLocalizedName(), Expansions = policyEnum.enumCategory }); } //读取默认税收政策信息 foreach (var policyEnum in Utils.GetOrderedEnumData <DistrictPolicies.Policies>("Taxation")) { var index = (int)(policyEnum.enumValue & (DistrictPolicies.Policies) 31); var level = Singleton <UnlockManager> .instance.m_properties.m_TaxationPolicyMilestones[index].GetLevel(); customMilestone.Milestones[level].Policies.Add(new ItemModel() { Name = policyEnum.enumName, LocalizedName = policyEnum.GetLocalizedName(), Expansions = policyEnum.enumCategory }); } //读取默认城市规划政策信息 foreach (var policyEnum in Utils.GetOrderedEnumData <DistrictPolicies.Policies>("CityPlanning")) { var index = (int)(policyEnum.enumValue & (DistrictPolicies.Policies) 31); var level = Singleton <UnlockManager> .instance.m_properties.m_CityPlanningPolicyMilestones[index].GetLevel(); customMilestone.Milestones[level].Policies.Add(new ItemModel() { Name = policyEnum.enumName, LocalizedName = policyEnum.GetLocalizedName(), Expansions = policyEnum.enumCategory }); } //读取默认信息面板信息 foreach (var infoMode in Utils.GetOrderedEnumData <InfoManager.InfoMode>()) { var level = Singleton <UnlockManager> .instance.m_properties.m_InfoModeMilestones[(int)infoMode.enumValue].GetLevel(); customMilestone.Milestones[level].InfoViews.Add(new ItemModel() { Name = infoMode.enumName, LocalizedName = Locale.Get("INFOVIEWS", infoMode.enumName) }); } XmlHelper.ToXmlFile(customMilestone, _xmlFilePath); } else { MilestoneInfo[] progressionMilestones = Singleton <UnlockManager> .instance.m_properties.m_progressionMilestones; //根据配置文件刷新里程碑信息 foreach (MilestoneModel milestoneModel in customMilestone.Milestones) { MilestoneInfo milestoneInfo = milestoneModel.Level > 0 ? progressionMilestones[milestoneModel.Level - 1] : null; //刷新里程碑奖金、地块 var count = (milestoneModel.Level == 0 && milestoneModel.PurchaseAreasCount == 0) ? 1 : milestoneModel.PurchaseAreasCount; var total = customMilestone.Milestones.Take(Array.IndexOf(customMilestone.Milestones, milestoneModel)).Sum(m => m.PurchaseAreasCount); for (int i = total; i < total + count && i < 9; i++) { Singleton <UnlockManager> .instance.m_properties.m_AreaMilestones[i] = milestoneInfo; } if (milestoneInfo != null) { milestoneInfo.m_rewardCash = milestoneModel.RewardCash.Value; } //刷新道路 foreach (var roadModel in milestoneModel.Roads) { if (config.RoadIncludes.Contains(roadModel.Name) || config.RoadExistsBuildings.Contains(roadModel.Name)) { RefreshRoadMilestone(roadModel.Name, milestoneInfo, config); } } //刷新建筑 foreach (var buildingModel in milestoneModel.Buildings) { if (config.BuildingIncludes.Contains(buildingModel.Name) || config.BuildingExistsRoads.Contains(buildingModel.Name)) { RefreshBuildingMilestone(buildingModel.Name, milestoneInfo, config); } } //刷新功能 foreach (var featureModel in milestoneModel.Features) { if (config.Features.Contains(featureModel.Name)) { RefreshFeatureMilestones(featureModel.Name, milestoneInfo, config); } } //刷新服务 foreach (var serviceModel in milestoneModel.Services) { if (config.Services.Contains(serviceModel.Name) || config.ServiceExistsFeatures.Contains(serviceModel.Name)) { RefreshServiceMilestones(serviceModel.Name, milestoneInfo, config); } } //刷新政策 foreach (var policyModel in milestoneModel.Policies) { RefreshPolicyMilestones(policyModel.Name, milestoneInfo); } } } }