Code format
This commit is contained in:
@@ -43,11 +43,12 @@ using Zenject;
|
||||
// System.Single Gameplay.Units.Movements.Movement::CalculateSpeed()
|
||||
// GameConfig looks interesting
|
||||
// See dayLengthInSeconds (defaults to 720 actually)
|
||||
// System.Single Controllers.Time.TimeController::GetSunsetHour(System.Int32,System.Double,System.Double)
|
||||
// System.Single
|
||||
// Controllers.Time.TimeController::GetSunsetHour(System.Int32,System.Double,System.Double)
|
||||
|
||||
namespace InfectionFreeZone {
|
||||
[BepInPlugin(pluginGuid, pluginName, pluginVersion)]
|
||||
public class Main : BaseUnityPlugin {
|
||||
[BepInPlugin(pluginGuid, pluginName, pluginVersion)]
|
||||
public class Main : BaseUnityPlugin {
|
||||
private const string pluginGuid = "InfectionFreeDave";
|
||||
private const string pluginName = "InfectionFreeDave";
|
||||
private const string pluginVersion = "1.0.0";
|
||||
@@ -70,7 +71,8 @@ namespace InfectionFreeZone {
|
||||
public static ConfigEntry<bool> buildingQuartersCapacityMultiplierDebug;
|
||||
public static ConfigEntry<float> buildingQuartersCapacityMultiplier;
|
||||
|
||||
public static ConfigEntry<bool> buildingDeconstructionResourcesMultiplierDebug;
|
||||
public static ConfigEntry<bool>
|
||||
buildingDeconstructionResourcesMultiplierDebug;
|
||||
public static ConfigEntry<float> buildingDeconstructionResourcesMultiplier;
|
||||
|
||||
public static ConfigEntry<float> humanMovementSpeedMultiplier;
|
||||
@@ -102,7 +104,8 @@ namespace InfectionFreeZone {
|
||||
public static ConfigEntry<int> adultAge;
|
||||
public static ConfigEntry<int> oldAge;
|
||||
|
||||
public static ConfigEntry<float> rotationTimestepMultiplier; // This is NOT unused!
|
||||
public static ConfigEntry<float>
|
||||
rotationTimestepMultiplier; // This is NOT unused!
|
||||
public static ConfigEntry<float> sunsetHourOffset;
|
||||
public static ConfigEntry<float> sunriseHourOffset;
|
||||
|
||||
@@ -112,92 +115,122 @@ namespace InfectionFreeZone {
|
||||
|
||||
public static ConfigEntry<bool> towerEchoSelectionDebug;
|
||||
public static ConfigEntry<bool> towerEchoSelection;
|
||||
public static List<WeakReference<StructureDefenceModule>> towerEchoSelectionList;
|
||||
public static List<WeakReference<StructureDefenceModule>>
|
||||
towerEchoSelectionList;
|
||||
|
||||
public static ConfigEntry<bool> buildingMaxVolumeDebug;
|
||||
public static ConfigEntry<float> buildingMaxVolume;
|
||||
|
||||
// See System.Void UI.InfoPanels.NestedUIElements.SelectWeaponPanel::OnWeaponItemClicked(UI.InfoPanels.NestedUIElements.WeaponItem)
|
||||
// See System.Void
|
||||
// UI.InfoPanels.NestedUIElements.SelectWeaponPanel::OnWeaponItemClicked(UI.InfoPanels.NestedUIElements.WeaponItem)
|
||||
|
||||
public void Awake() {
|
||||
resourceMultiplierDebug = Config.Bind("General", "Resource Multiplier Debug", false);
|
||||
resourceMultiplierDebug =
|
||||
Config.Bind("General", "Resource Multiplier Debug", false);
|
||||
resourceMultiplier = Config.Bind("General", "Resource Multiplier", 1f);
|
||||
|
||||
peopleMultiplierDebug = Config.Bind("General", "People Multiplier Debug", false);
|
||||
peopleMultiplierDebug =
|
||||
Config.Bind("General", "People Multiplier Debug", false);
|
||||
peopleMultiplier = Config.Bind("General", "People Multiplier", 1f);
|
||||
|
||||
resourceGatheringMultiplierDebug = Config.Bind("General", "Resource Gathering Multiplier Debug", false);
|
||||
resourceGatheringMultiplier = Config.Bind("General", "Resource Gathering Multiplier", 1f);
|
||||
resourceGatheringMultiplierDebug =
|
||||
Config.Bind("General", "Resource Gathering Multiplier Debug", false);
|
||||
resourceGatheringMultiplier =
|
||||
Config.Bind("General", "Resource Gathering Multiplier", 1f);
|
||||
|
||||
resourceScavengingMultiplierDebug = Config.Bind("General", "Resource Scavenging Multiplier Debug", false);
|
||||
resourceScavengingMultiplier = Config.Bind("General", "Resource Scavenging Multiplier", 1f);
|
||||
resourceScavengingMultiplierDebug =
|
||||
Config.Bind("General", "Resource Scavenging Multiplier Debug", false);
|
||||
resourceScavengingMultiplier =
|
||||
Config.Bind("General", "Resource Scavenging Multiplier", 1f);
|
||||
|
||||
buildingStorageCapacityMultiplierDebug =
|
||||
Config.Bind("General", "Building Storage Capacity Multiplier Debug", false);
|
||||
buildingStorageCapacityMultiplier = Config.Bind("General", "Building Storage Capacity Multiplier", 1f);
|
||||
buildingStorageCapacityMultiplierDebug = Config.Bind(
|
||||
"General", "Building Storage Capacity Multiplier Debug", false);
|
||||
buildingStorageCapacityMultiplier =
|
||||
Config.Bind("General", "Building Storage Capacity Multiplier", 1f);
|
||||
|
||||
buildingQuartersCapacityMultiplierDebug =
|
||||
Config.Bind("General", "Building Quarters Capacity Multiplier Debug", false);
|
||||
buildingQuartersCapacityMultiplier = Config.Bind("General", "Building Quarters Capacity Multiplier", 1f);
|
||||
buildingQuartersCapacityMultiplierDebug = Config.Bind(
|
||||
"General", "Building Quarters Capacity Multiplier Debug", false);
|
||||
buildingQuartersCapacityMultiplier =
|
||||
Config.Bind("General", "Building Quarters Capacity Multiplier", 1f);
|
||||
|
||||
buildingDeconstructionResourcesMultiplierDebug = Config.Bind("General",
|
||||
"Building Deconstruction Resources Multiplier Debug", false);
|
||||
buildingDeconstructionResourcesMultiplier =
|
||||
Config.Bind("General", "Building Deconstruction Resources Multiplier", 1f);
|
||||
deconstructionWorkersPer100m =
|
||||
Config.Bind("General", "Building Deconstruction Workers Per 100m", 0.0045f);
|
||||
buildingDeconstructionResourcesMultiplierDebug = Config.Bind(
|
||||
"General", "Building Deconstruction Resources Multiplier Debug", false);
|
||||
buildingDeconstructionResourcesMultiplier = Config.Bind(
|
||||
"General", "Building Deconstruction Resources Multiplier", 1f);
|
||||
deconstructionWorkersPer100m = Config.Bind(
|
||||
"General", "Building Deconstruction Workers Per 100m", 0.0045f);
|
||||
|
||||
humanMovementSpeedMultiplier =
|
||||
Config.Bind("General", "Human Movement Speed Multiplier", 1f);
|
||||
vehicleMovementSpeedMultiplier =
|
||||
Config.Bind("General", "Vehicle Movement Speed Multiplier", 1f);
|
||||
|
||||
humanMovementSpeedMultiplier = Config.Bind("General", "Human Movement Speed Multiplier", 1f);
|
||||
vehicleMovementSpeedMultiplier = Config.Bind("General", "Vehicle Movement Speed Multiplier", 1f);
|
||||
vehicleTrunkCapacityMultiplierDebug = Config.Bind(
|
||||
"General", "Vehicle Trunk Capacity Multiplier Debug", false);
|
||||
vehicleTrunkCapacityMultiplier =
|
||||
Config.Bind("General", "Vehicle Trunk Capacity Multiplier", 1f);
|
||||
|
||||
vehicleTrunkCapacityMultiplierDebug =
|
||||
Config.Bind("General", "Vehicle Trunk Capacity Multiplier Debug", false);
|
||||
vehicleTrunkCapacityMultiplier = Config.Bind("General", "Vehicle Trunk Capacity Multiplier", 1f);
|
||||
deconstructionTimeMultiplierDebug =
|
||||
Config.Bind("General", "Deconstruction Time Multiplier Debug", false);
|
||||
deconstructionTimeMultiplier =
|
||||
Config.Bind("General", "Deconstruction Time Multiplier", 1f);
|
||||
|
||||
deconstructionTimeMultiplierDebug = Config.Bind("General", "Deconstruction Time Multiplier Debug", false);
|
||||
deconstructionTimeMultiplier = Config.Bind("General", "Deconstruction Time Multiplier", 1f);
|
||||
constructionTimeMultiplierDebug =
|
||||
Config.Bind("General", "Construction Time Multiplier Debug", false);
|
||||
constructionTimeMultiplier =
|
||||
Config.Bind("General", "Construction Time Multiplier", 1f);
|
||||
|
||||
constructionTimeMultiplierDebug = Config.Bind("General", "Construction Time Multiplier Debug", false);
|
||||
constructionTimeMultiplier = Config.Bind("General", "Construction Time Multiplier", 1f);
|
||||
productionTimeMultiplierDebug =
|
||||
Config.Bind("General", "Production Time Multiplier Debug", false);
|
||||
productionTimeMultiplier =
|
||||
Config.Bind("General", "Production Time Multiplier", 1f);
|
||||
|
||||
productionTimeMultiplierDebug = Config.Bind("General", "Production Time Multiplier Debug", false);
|
||||
productionTimeMultiplier = Config.Bind("General", "Production Time Multiplier", 1f);
|
||||
|
||||
birthingConfigDebug = Config.Bind("Birthing Config", "Birthing Config Debug", false);
|
||||
maxCitizensInZoneToChildrenBorn =
|
||||
Config.Bind("Birthing Config", "Max Citizens in Zone to Children Born", 600);
|
||||
moraleInfluenceFloorParam = Config.Bind("Birthing Config", "Morale Influence Floor Param", 0.3f);
|
||||
moraleInfluenceCeilingParam = Config.Bind("Birthing Config", "Morale Influence Ceiling Param", 2f);
|
||||
foodStockInfluenceFloorParam = Config.Bind("Birthing Config", "Food Stock Influence Floor Param", 0f);
|
||||
foodStockInfluenceCeilingParam = Config.Bind("Birthing Config", "Food Stock Influence Ceiling Param", 1f);
|
||||
quartersRatioInfluenceFloorParam =
|
||||
Config.Bind("Birthing Config", "Quarters Ratio Influence Floor Param", 0.6f);
|
||||
quartersRatioInfluenceCeilingParam =
|
||||
Config.Bind("Birthing Config", "Quarters Ratio Influence Ceiling Param", 1.4f);
|
||||
childToAdultRatioInfluenceFloorParam =
|
||||
Config.Bind("Birthing Config", "Child to Adult Ratio Influence Floor Param", 1f);
|
||||
childToAdultRatioInfluenceCeilingParam =
|
||||
Config.Bind("Birthing Config", "Child to Adult Ratio Influence Ceiling Param", 0f);
|
||||
birthingConfigDebug =
|
||||
Config.Bind("Birthing Config", "Birthing Config Debug", false);
|
||||
maxCitizensInZoneToChildrenBorn = Config.Bind(
|
||||
"Birthing Config", "Max Citizens in Zone to Children Born", 600);
|
||||
moraleInfluenceFloorParam =
|
||||
Config.Bind("Birthing Config", "Morale Influence Floor Param", 0.3f);
|
||||
moraleInfluenceCeilingParam =
|
||||
Config.Bind("Birthing Config", "Morale Influence Ceiling Param", 2f);
|
||||
foodStockInfluenceFloorParam =
|
||||
Config.Bind("Birthing Config", "Food Stock Influence Floor Param", 0f);
|
||||
foodStockInfluenceCeilingParam = Config.Bind(
|
||||
"Birthing Config", "Food Stock Influence Ceiling Param", 1f);
|
||||
quartersRatioInfluenceFloorParam = Config.Bind(
|
||||
"Birthing Config", "Quarters Ratio Influence Floor Param", 0.6f);
|
||||
quartersRatioInfluenceCeilingParam = Config.Bind(
|
||||
"Birthing Config", "Quarters Ratio Influence Ceiling Param", 1.4f);
|
||||
childToAdultRatioInfluenceFloorParam = Config.Bind(
|
||||
"Birthing Config", "Child to Adult Ratio Influence Floor Param", 1f);
|
||||
childToAdultRatioInfluenceCeilingParam = Config.Bind(
|
||||
"Birthing Config", "Child to Adult Ratio Influence Ceiling Param", 0f);
|
||||
adultAge = Config.Bind("Birthing Config", "Adult Age", 12);
|
||||
oldAge = Config.Bind("Birthing Config", "Old Age", 60);
|
||||
|
||||
rotationTimestepMultiplier = Config.Bind("General", "Rotation Timestep Multiplier", 1f);
|
||||
rotationTimestepMultiplier =
|
||||
Config.Bind("General", "Rotation Timestep Multiplier", 1f);
|
||||
sunsetHourOffset = Config.Bind("General", "Sunset Hour Offset", 0f);
|
||||
sunriseHourOffset = Config.Bind("General", "Sunrise Hour Offset", 0f);
|
||||
|
||||
productionProfitMultiplierDebug = Config.Bind("General", "Production Profit Multiplier Debug", false);
|
||||
productionProfitMultiplier =
|
||||
Config.Bind("General", "Production Profit Multiplier (Resource ID: multiplier)", "");
|
||||
productionProfitMultiplierDebug =
|
||||
Config.Bind("General", "Production Profit Multiplier Debug", false);
|
||||
productionProfitMultiplier = Config.Bind(
|
||||
"General", "Production Profit Multiplier (Resource ID: multiplier)",
|
||||
"");
|
||||
productionProfitMultiplierDict = new Dictionary<ResourceID, float>();
|
||||
productionProfitMultiplier.SettingChanged += delegate { UpdateProductionProfitMultiplierDict(); };
|
||||
productionProfitMultiplier.SettingChanged += delegate {
|
||||
UpdateProductionProfitMultiplierDict();
|
||||
};
|
||||
UpdateProductionProfitMultiplierDict();
|
||||
|
||||
towerEchoSelectionDebug = Config.Bind("General", "Tower Echo Selection Debug", false);
|
||||
towerEchoSelectionDebug =
|
||||
Config.Bind("General", "Tower Echo Selection Debug", false);
|
||||
towerEchoSelection = Config.Bind("General", "Tower Echo Selection", false);
|
||||
towerEchoSelectionList = new List<WeakReference<StructureDefenceModule>>();
|
||||
|
||||
buildingMaxVolumeDebug = Config.Bind("General", "Building Max Volume Debug", false);
|
||||
buildingMaxVolumeDebug =
|
||||
Config.Bind("General", "Building Max Volume Debug", false);
|
||||
buildingMaxVolume = Config.Bind("General", "Building Max Volume", 50000f);
|
||||
|
||||
Logger.LogInfo("Cyka mod loaded");
|
||||
@@ -235,10 +268,10 @@ namespace InfectionFreeZone {
|
||||
Console.WriteLine($"Added {resourceID} with multiplier {multiplier}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch]
|
||||
public class Patches {
|
||||
[HarmonyPatch]
|
||||
public class Patches {
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(GameCustomize), "LoadResourcesSettings")]
|
||||
public static void PostfixResourceMultiplier(ref float multiplier) {
|
||||
@@ -290,21 +323,27 @@ namespace InfectionFreeZone {
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(GatherResourcesWork), "InstantiateResources", new Type[] { })]
|
||||
[HarmonyPatch(typeof(GatherResourcesWork), "InstantiateResources",
|
||||
new Type[] {})]
|
||||
public static void PrefixGatheredResource(ref ScavengeWork __instance) {
|
||||
var trav = Traverse.Create(__instance);
|
||||
var resourcesToDropNew = new Dictionary<ResourceID, int>();
|
||||
var resourcesToDrop = trav.Field<Dictionary<ResourceID, int>>("_resourcesToDrop");
|
||||
var resourcesToDrop =
|
||||
trav.Field<Dictionary<ResourceID, int>>("_resourcesToDrop");
|
||||
if (Main.resourceGatheringMultiplierDebug.Value)
|
||||
Console.WriteLine($"Resources to drop: {resourcesToDrop}");
|
||||
if (resourcesToDrop.Value.Count > 0) {
|
||||
foreach (KeyValuePair<ResourceID, int> resource in resourcesToDrop.Value) {
|
||||
foreach (KeyValuePair<ResourceID, int> resource in resourcesToDrop
|
||||
.Value) {
|
||||
if (Main.resourceGatheringMultiplierDebug.Value)
|
||||
Console.WriteLine($"Resource {resource.Key} to drop: {resource.Value}");
|
||||
var newResourceValue = (int)(resource.Value * Main.resourceScavengingMultiplier.Value);
|
||||
Console.WriteLine(
|
||||
$"Resource {resource.Key} to drop: {resource.Value}");
|
||||
var newResourceValue =
|
||||
(int)(resource.Value * Main.resourceScavengingMultiplier.Value);
|
||||
resourcesToDropNew.Add(resource.Key, newResourceValue);
|
||||
if (Main.resourceGatheringMultiplierDebug.Value)
|
||||
Console.WriteLine($"Resource {resource.Key} to drop modified to: {newResourceValue}");
|
||||
Console.WriteLine(
|
||||
$"Resource {resource.Key} to drop modified to: {newResourceValue}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -314,7 +353,8 @@ namespace InfectionFreeZone {
|
||||
}
|
||||
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(PlaceableObjectDraft), "GetCapacity", typeof(float), typeof(float))]
|
||||
[HarmonyPatch(typeof(PlaceableObjectDraft), "GetCapacity", typeof(float),
|
||||
typeof(float))]
|
||||
public static void PostfixGetCapacity(ref int __result) {
|
||||
if (Main.buildingStorageCapacityMultiplier.Value <= 0)
|
||||
return;
|
||||
@@ -341,7 +381,8 @@ namespace InfectionFreeZone {
|
||||
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(Building), "DeconstructionResources", MethodType.Getter)]
|
||||
public static ResourceQuantity[] PostfixDeconstructionResources(ResourceQuantity[] __result) {
|
||||
public static ResourceQuantity[] PostfixDeconstructionResources(
|
||||
ResourceQuantity[] __result) {
|
||||
if (Main.buildingDeconstructionResourcesMultiplier.Value <= 0)
|
||||
return __result;
|
||||
|
||||
@@ -352,12 +393,17 @@ namespace InfectionFreeZone {
|
||||
Console.WriteLine($"Resource quantity is {resourceQuantity}");
|
||||
|
||||
if (Main.buildingDeconstructionResourcesMultiplierDebug.Value)
|
||||
Console.WriteLine($"Resource quantity value is {resourceQuantity.value}");
|
||||
modifiedResult[i] = new ResourceQuantity(resourceQuantity.resourceType,
|
||||
resourceQuantity.value * Main.buildingDeconstructionResourcesMultiplier.Value);
|
||||
// resourceQuantity.value *= Main.buildingDeconstructionResourcesMultiplier.Value;
|
||||
Console.WriteLine(
|
||||
$"Resource quantity value is {resourceQuantity.value}");
|
||||
modifiedResult[i] = new ResourceQuantity(
|
||||
resourceQuantity.resourceType,
|
||||
resourceQuantity.value *
|
||||
Main.buildingDeconstructionResourcesMultiplier.Value);
|
||||
// resourceQuantity.value *=
|
||||
// Main.buildingDeconstructionResourcesMultiplier.Value;
|
||||
if (Main.buildingDeconstructionResourcesMultiplierDebug.Value)
|
||||
Console.WriteLine($"Resource quantity value modified to {modifiedResult[i].value}");
|
||||
Console.WriteLine(
|
||||
$"Resource quantity value modified to {modifiedResult[i].value}");
|
||||
}
|
||||
|
||||
return modifiedResult;
|
||||
@@ -365,7 +411,8 @@ namespace InfectionFreeZone {
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(BuildingDestruction), "Initialize")]
|
||||
public static void PrefixBuildingDeconstruction(ref BuildingDestruction __instance) {
|
||||
public static void
|
||||
PrefixBuildingDeconstruction(ref BuildingDestruction __instance) {
|
||||
if (Main.deconstructionWorkersPer100m.Value <= 0)
|
||||
return;
|
||||
|
||||
@@ -376,7 +423,8 @@ namespace InfectionFreeZone {
|
||||
Console.WriteLine(
|
||||
$"Building deconstruction workers per 100m is {configV.deconstructWorkersPer100m3OfBuilding}");
|
||||
|
||||
configV.deconstructWorkersPer100m3OfBuilding = Main.deconstructionWorkersPer100m.Value;
|
||||
configV.deconstructWorkersPer100m3OfBuilding =
|
||||
Main.deconstructionWorkersPer100m.Value;
|
||||
config.Value = configV;
|
||||
if (Main.buildingDeconstructionResourcesMultiplierDebug.Value)
|
||||
Console.WriteLine(
|
||||
@@ -385,8 +433,10 @@ namespace InfectionFreeZone {
|
||||
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(Movement), "CalculateSpeed")]
|
||||
public static void PostfixCalculateSpeedHuman(Movement __instance, ref float __result) {
|
||||
// Humans are "Human(Clone)", infected are "inf_human(Clone)" and vehicles are "ve_<name>"
|
||||
public static void PostfixCalculateSpeedHuman(Movement __instance,
|
||||
ref float __result) {
|
||||
// Humans are "Human(Clone)", infected are "inf_human(Clone)" and vehicles
|
||||
// are "ve_<name>"
|
||||
var name = __instance.ToString();
|
||||
if (name.StartsWith("Human"))
|
||||
__result *= Main.humanMovementSpeedMultiplier.Value;
|
||||
@@ -395,18 +445,22 @@ namespace InfectionFreeZone {
|
||||
}
|
||||
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(Vehicle), "Constructor",
|
||||
typeof(GroupIconsPool), typeof(SignalBus), typeof(WeatherController))]
|
||||
[HarmonyPatch(typeof(Vehicle), "Constructor", typeof(GroupIconsPool),
|
||||
typeof(SignalBus), typeof(WeatherController))]
|
||||
public static void PostfixVehicle(ref Vehicle __instance) {
|
||||
if (Main.vehicleTrunkCapacityMultiplier.Value <= 0)
|
||||
return;
|
||||
|
||||
if (Main.vehicleTrunkCapacityMultiplierDebug.Value)
|
||||
Console.WriteLine($"Vehicle trunk capacity is {__instance.Trunk.Capacity}");
|
||||
__instance.Trunk.SetCapacity((int)(__instance.Trunk.Capacity * Main.vehicleTrunkCapacityMultiplier.Value),
|
||||
Console.WriteLine(
|
||||
$"Vehicle trunk capacity is {__instance.Trunk.Capacity}");
|
||||
__instance.Trunk.SetCapacity(
|
||||
(int)(__instance.Trunk.Capacity *
|
||||
Main.vehicleTrunkCapacityMultiplier.Value),
|
||||
true);
|
||||
if (Main.vehicleTrunkCapacityMultiplierDebug.Value)
|
||||
Console.WriteLine($"Vehicle trunk capacity modified to {__instance.Trunk.Capacity}");
|
||||
Console.WriteLine(
|
||||
$"Vehicle trunk capacity modified to {__instance.Trunk.Capacity}");
|
||||
}
|
||||
|
||||
// GatherResourcesWork
|
||||
@@ -415,8 +469,10 @@ namespace InfectionFreeZone {
|
||||
// ProductionWork
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(DisassembleWork), MethodType.Constructor,
|
||||
typeof(Structure), typeof(float), typeof(int), typeof(ResourcesController), typeof(SignalBus))]
|
||||
public static void PrefixDisassembleWork(Structure structure, ref float timeToDeconstruct) {
|
||||
typeof(Structure), typeof(float), typeof(int),
|
||||
typeof(ResourcesController), typeof(SignalBus))]
|
||||
public static void PrefixDisassembleWork(Structure structure,
|
||||
ref float timeToDeconstruct) {
|
||||
if (Main.deconstructionTimeMultiplier.Value <= 0)
|
||||
return;
|
||||
|
||||
@@ -429,9 +485,10 @@ namespace InfectionFreeZone {
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(ConstructableWork), MethodType.Constructor,
|
||||
typeof(Structure), typeof(Dictionary<ResourceID, int>), typeof(float), typeof(StockroomsController),
|
||||
typeof(SignalBus))]
|
||||
public static void PrefixConstructWork(Structure structure, Dictionary<ResourceID, int> cost,
|
||||
typeof(Structure), typeof(Dictionary<ResourceID, int>),
|
||||
typeof(float), typeof(StockroomsController), typeof(SignalBus))]
|
||||
public static void PrefixConstructWork(Structure structure,
|
||||
Dictionary<ResourceID, int> cost,
|
||||
ref float timeToConstruct) {
|
||||
if (Main.deconstructionTimeMultiplier.Value <= 0)
|
||||
return;
|
||||
@@ -459,7 +516,8 @@ namespace InfectionFreeZone {
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(CitizensController), "IncreasePopulation")]
|
||||
// Could not find a better way to do this
|
||||
public static void PostfixCharactersConfig(ref CitizensController __instance) {
|
||||
public static void
|
||||
PostfixCharactersConfig(ref CitizensController __instance) {
|
||||
if (Main.birthingConfigDebug.Value)
|
||||
Console.WriteLine($"Citizens controller IncreasePopulation");
|
||||
var trav = Traverse.Create(__instance);
|
||||
@@ -475,36 +533,43 @@ namespace InfectionFreeZone {
|
||||
if (Main.birthingConfigDebug.Value)
|
||||
Console.WriteLine($"Old age is {charactersConfigV.oldAge}");
|
||||
|
||||
bornConfig.MaxCitizensInZoneToChildrenBorn = Main.maxCitizensInZoneToChildrenBorn.Value;
|
||||
bornConfig.MaxCitizensInZoneToChildrenBorn =
|
||||
Main.maxCitizensInZoneToChildrenBorn.Value;
|
||||
if (Main.birthingConfigDebug.Value)
|
||||
Console.WriteLine(
|
||||
$"Max citizens in zone to children born is {bornConfig.MaxCitizensInZoneToChildrenBorn}");
|
||||
|
||||
bornConfig.MoraleInfluenceFloorParam = Main.moraleInfluenceFloorParam.Value;
|
||||
if (Main.birthingConfigDebug.Value)
|
||||
Console.WriteLine($"Morale influence floor param is {bornConfig.MoraleInfluenceFloorParam}");
|
||||
Console.WriteLine(
|
||||
$"Morale influence floor param is {bornConfig.MoraleInfluenceFloorParam}");
|
||||
|
||||
bornConfig.MoraleInfluenceCeilingParam = Main.moraleInfluenceCeilingParam.Value;
|
||||
bornConfig.MoraleInfluenceCeilingParam =
|
||||
Main.moraleInfluenceCeilingParam.Value;
|
||||
if (Main.birthingConfigDebug.Value)
|
||||
Console.WriteLine(
|
||||
$"Morale influence ceiling param is {bornConfig.MoraleInfluenceCeilingParam}");
|
||||
|
||||
bornConfig.FoodStockInfluenceFloorParam = Main.foodStockInfluenceFloorParam.Value;
|
||||
bornConfig.FoodStockInfluenceFloorParam =
|
||||
Main.foodStockInfluenceFloorParam.Value;
|
||||
if (Main.birthingConfigDebug.Value)
|
||||
Console.WriteLine(
|
||||
$"Food stock influence floor param is {bornConfig.FoodStockInfluenceFloorParam}");
|
||||
|
||||
bornConfig.FoodStockInfluenceCeilingParam = Main.foodStockInfluenceCeilingParam.Value;
|
||||
bornConfig.FoodStockInfluenceCeilingParam =
|
||||
Main.foodStockInfluenceCeilingParam.Value;
|
||||
if (Main.birthingConfigDebug.Value)
|
||||
Console.WriteLine(
|
||||
$"Food stock influence ceiling param is {bornConfig.FoodStockInfluenceCeilingParam}");
|
||||
|
||||
bornConfig.QuartersRatioInfluenceFloorParam = Main.quartersRatioInfluenceFloorParam.Value;
|
||||
bornConfig.QuartersRatioInfluenceFloorParam =
|
||||
Main.quartersRatioInfluenceFloorParam.Value;
|
||||
if (Main.birthingConfigDebug.Value)
|
||||
Console.WriteLine(
|
||||
$"Quarters ratio influence floor param is {bornConfig.QuartersRatioInfluenceFloorParam}");
|
||||
|
||||
bornConfig.QuartersRatioInfluenceCeilingParam = Main.quartersRatioInfluenceCeilingParam.Value;
|
||||
bornConfig.QuartersRatioInfluenceCeilingParam =
|
||||
Main.quartersRatioInfluenceCeilingParam.Value;
|
||||
if (Main.birthingConfigDebug.Value)
|
||||
Console.WriteLine(
|
||||
$"Quarters ratio influence ceiling param is {bornConfig.QuartersRatioInfluenceCeilingParam}");
|
||||
@@ -527,18 +592,24 @@ namespace InfectionFreeZone {
|
||||
|
||||
[HarmonyTranspiler]
|
||||
[HarmonyPatch(typeof(PlaceObjectsInSingleLineCursor), "RotateRight")]
|
||||
public static IEnumerable<CodeInstruction> PostfixRotateRight(IEnumerable<CodeInstruction> instructions) {
|
||||
public static IEnumerable<CodeInstruction>
|
||||
PostfixRotateRight(IEnumerable<CodeInstruction> instructions) {
|
||||
var codes = new List<CodeInstruction>(instructions);
|
||||
for (var i = 0; i < codes.Count; i++) {
|
||||
var code = codes[i];
|
||||
Console.WriteLine($"Opcode is {code.opcode}");
|
||||
if (code.opcode == OpCodes.Ldc_R4 && Mathf.Approximately((float)code.operand, 100f)) {
|
||||
if (code.opcode == OpCodes.Ldc_R4 &&
|
||||
Mathf.Approximately((float)code.operand, 100f)) {
|
||||
Console.WriteLine($"Operand is {code.operand}");
|
||||
codes[i] = new CodeInstruction(OpCodes.Ldsfld,
|
||||
codes[i] = new CodeInstruction(
|
||||
OpCodes.Ldsfld,
|
||||
AccessTools.Field(typeof(Main), "rotationTimestepMultiplier"));
|
||||
codes.Insert(i + 1,
|
||||
new CodeInstruction(OpCodes.Call,
|
||||
AccessTools.PropertyGetter(typeof(Main).GetField("rotationTimestepMultiplier").FieldType,
|
||||
codes.Insert(i + 1, new CodeInstruction(
|
||||
OpCodes.Call,
|
||||
AccessTools.PropertyGetter(
|
||||
typeof(Main)
|
||||
.GetField("rotationTimestepMultiplier")
|
||||
.FieldType,
|
||||
"Value")));
|
||||
Console.WriteLine($"Operand modified to {codes[i].operand}");
|
||||
}
|
||||
@@ -549,18 +620,24 @@ namespace InfectionFreeZone {
|
||||
|
||||
[HarmonyTranspiler]
|
||||
[HarmonyPatch(typeof(PlaceObjectsInSingleLineCursor), "RotateLeft")]
|
||||
public static IEnumerable<CodeInstruction> PostfixRotateLeft(IEnumerable<CodeInstruction> instructions) {
|
||||
public static IEnumerable<CodeInstruction>
|
||||
PostfixRotateLeft(IEnumerable<CodeInstruction> instructions) {
|
||||
var codes = new List<CodeInstruction>(instructions);
|
||||
for (var i = 0; i < codes.Count; i++) {
|
||||
var code = codes[i];
|
||||
Console.WriteLine($"Opcode is {code.opcode}");
|
||||
if (code.opcode == OpCodes.Ldc_R4 && Mathf.Approximately((float)code.operand, 100f)) {
|
||||
if (code.opcode == OpCodes.Ldc_R4 &&
|
||||
Mathf.Approximately((float)code.operand, 100f)) {
|
||||
Console.WriteLine($"Operand is {code.operand}");
|
||||
codes[i] = new CodeInstruction(OpCodes.Ldsfld,
|
||||
codes[i] = new CodeInstruction(
|
||||
OpCodes.Ldsfld,
|
||||
AccessTools.Field(typeof(Main), "rotationTimestepMultiplier"));
|
||||
codes.Insert(i + 1,
|
||||
new CodeInstruction(OpCodes.Call,
|
||||
AccessTools.PropertyGetter(typeof(Main).GetField("rotationTimestepMultiplier").FieldType,
|
||||
codes.Insert(i + 1, new CodeInstruction(
|
||||
OpCodes.Call,
|
||||
AccessTools.PropertyGetter(
|
||||
typeof(Main)
|
||||
.GetField("rotationTimestepMultiplier")
|
||||
.FieldType,
|
||||
"Value")));
|
||||
Console.WriteLine($"Operand modified to {codes[i].operand}");
|
||||
}
|
||||
@@ -585,7 +662,8 @@ namespace InfectionFreeZone {
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(ProductionWork), "ProduceResources")]
|
||||
public static void PrefixProduceResources(List<ProductionDataPart> productionDataParts) {
|
||||
public static void
|
||||
PrefixProduceResources(List<ProductionDataPart> productionDataParts) {
|
||||
if (Main.productionProfitMultiplierDict.Count == 0)
|
||||
return;
|
||||
if (productionDataParts.Count == 0)
|
||||
@@ -596,7 +674,8 @@ namespace InfectionFreeZone {
|
||||
if (Main.productionProfitMultiplierDebug.Value)
|
||||
Console.WriteLine(
|
||||
$"Production data part is {productionDataPart.type} x {productionDataPart.amount}");
|
||||
if (Main.productionProfitMultiplierDict.TryGetValue(productionDataPart.type, out var setpoint)) {
|
||||
if (Main.productionProfitMultiplierDict.TryGetValue(
|
||||
productionDataPart.type, out var setpoint)) {
|
||||
if (Main.productionProfitMultiplierDebug.Value)
|
||||
Console.WriteLine($"Production data part has setpoint {setpoint}");
|
||||
productionDataPart.amount = (int)setpoint;
|
||||
@@ -609,10 +688,12 @@ namespace InfectionFreeZone {
|
||||
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(StructureDefenceModule), "Awake")]
|
||||
public static void PostfixStructureDefenceModule(StructureDefenceModule __instance) {
|
||||
public static void
|
||||
PostfixStructureDefenceModule(StructureDefenceModule __instance) {
|
||||
if (Main.towerEchoSelectionDebug.Value)
|
||||
Console.WriteLine($"Structure defence module created");
|
||||
Main.towerEchoSelectionList.Add(new WeakReference<StructureDefenceModule>(__instance));
|
||||
Main.towerEchoSelectionList.Add(
|
||||
new WeakReference<StructureDefenceModule>(__instance));
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
@@ -634,7 +715,8 @@ namespace InfectionFreeZone {
|
||||
|
||||
if (Main.towerEchoSelectionDebug.Value) {
|
||||
Console.WriteLine($"Selected weapon item is {selectedItem.name}");
|
||||
Console.WriteLine($"Echoing weapon to {Main.towerEchoSelectionList.Count} towers");
|
||||
Console.WriteLine(
|
||||
$"Echoing weapon to {Main.towerEchoSelectionList.Count} towers");
|
||||
}
|
||||
|
||||
for (var i = 0; i < Main.towerEchoSelectionList.Count; i++) {
|
||||
@@ -654,11 +736,13 @@ namespace InfectionFreeZone {
|
||||
towerEchoSelectionT.SetFieldOfView(selectedItem.WeaponData);
|
||||
towerEchoSelectionT.SetupWeapon(selectedItem.WeaponData);
|
||||
|
||||
var selectedWeapon = towerEchoSelectionT.SelectedWeapon == null
|
||||
var selectedWeapon =
|
||||
towerEchoSelectionT.SelectedWeapon == null
|
||||
? "null"
|
||||
: towerEchoSelectionT.SelectedWeapon.ToString();
|
||||
if (Main.towerEchoSelectionDebug.Value)
|
||||
Console.WriteLine($"Tower defence weapon modified to {selectedWeapon}");
|
||||
Console.WriteLine(
|
||||
$"Tower defence weapon modified to {selectedWeapon}");
|
||||
}
|
||||
} catch (NullReferenceException e) {
|
||||
Console.WriteLine($"Failed to set tower defence weapon: {e}");
|
||||
@@ -669,8 +753,8 @@ namespace InfectionFreeZone {
|
||||
// TODO: Add toggle for this
|
||||
[HarmonyTranspiler]
|
||||
[HarmonyPatch(typeof(ValidatableStructure), "Awake")]
|
||||
public static IEnumerable<CodeInstruction> PostfixValidatableStructure(
|
||||
IEnumerable<CodeInstruction> instructions) {
|
||||
public static IEnumerable<CodeInstruction>
|
||||
PostfixValidatableStructure(IEnumerable<CodeInstruction> instructions) {
|
||||
var codes = new List<CodeInstruction>(instructions);
|
||||
int start = 0;
|
||||
int start2 = 0;
|
||||
@@ -678,40 +762,52 @@ namespace InfectionFreeZone {
|
||||
int end2 = 0;
|
||||
for (var i = 0; i < codes.Count; i++) {
|
||||
if (codes[i].opcode == OpCodes.Ldc_I4_5) {
|
||||
Console.WriteLine($"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
|
||||
codes[i] = new CodeInstruction(OpCodes.Ldc_I4_2); // Array size after our deletion is 3 from 5
|
||||
Console.WriteLine(
|
||||
$"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
|
||||
codes[i] = new CodeInstruction(
|
||||
OpCodes.Ldc_I4_2); // Array size after our deletion is 3 from 5
|
||||
}
|
||||
|
||||
if (codes[i].opcode == OpCodes.Ldstr && codes[i].operand.ToString() == "Tower") {
|
||||
Console.WriteLine($"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
|
||||
if (codes[i].opcode == OpCodes.Ldstr &&
|
||||
codes[i].operand.ToString() == "Tower") {
|
||||
Console.WriteLine(
|
||||
$"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
|
||||
start2 = i - 2;
|
||||
end2 = i + 2;
|
||||
}
|
||||
|
||||
if (codes[i].opcode == OpCodes.Ldstr && codes[i].operand.ToString() == "Farmland") {
|
||||
Console.WriteLine($"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
|
||||
if (codes[i].opcode == OpCodes.Ldstr &&
|
||||
codes[i].operand.ToString() == "Farmland") {
|
||||
Console.WriteLine(
|
||||
$"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
|
||||
Console.WriteLine(
|
||||
$"Opcode is {codes[i - 1].opcode} and operand is {codes[i - 1].operand} at index {i - 1}");
|
||||
codes[i - 1].opcode =
|
||||
OpCodes.Ldc_I4_1; // Because we deleted the previous element this one is now index 1 instead of 2
|
||||
OpCodes.Ldc_I4_1; // Because we deleted the previous element this
|
||||
// one is now index 1 instead of 2
|
||||
}
|
||||
|
||||
if (codes[i].opcode == OpCodes.Ldstr && codes[i].operand.ToString() == "Wall") {
|
||||
Console.WriteLine($"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
|
||||
if (codes[i].opcode == OpCodes.Ldstr &&
|
||||
codes[i].operand.ToString() == "Wall") {
|
||||
Console.WriteLine(
|
||||
$"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
|
||||
start = i - 2;
|
||||
end = i + 6;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine($"Start is {start} with opcode {codes[start].opcode} and operand {codes[start].operand}");
|
||||
Console.WriteLine($"End is {end} with opcode {codes[end].opcode} and operand {codes[end].operand}");
|
||||
Console.WriteLine(
|
||||
$"Start is {start} with opcode {codes[start].opcode} and operand {codes[start].operand}");
|
||||
Console.WriteLine(
|
||||
$"End is {end} with opcode {codes[end].opcode} and operand {codes[end].operand}");
|
||||
codes.RemoveRange(start, end - start);
|
||||
Console.WriteLine($"Removed {end - start} instructions");
|
||||
|
||||
Console.WriteLine(
|
||||
$"Start2 is {start2} with opcode {codes[start2].opcode} and operand {codes[start2].operand}");
|
||||
Console.WriteLine($"End2 is {end2} with opcode {codes[end2].opcode} and operand {codes[end2].operand}");
|
||||
Console.WriteLine(
|
||||
$"End2 is {end2} with opcode {codes[end2].opcode} and operand {codes[end2].operand}");
|
||||
codes.RemoveRange(start2, end2 - start2);
|
||||
Console.WriteLine($"Removed {end2 - start2} instructions");
|
||||
|
||||
@@ -722,14 +818,16 @@ namespace InfectionFreeZone {
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(WallConstructor), MethodType.Constructor,
|
||||
typeof(Wall.Factory), typeof(WorkersRadio), typeof(WallConfig))]
|
||||
public static void PostfixWallConstructor(Wall.Factory factory, WorkersRadio workersRadio,
|
||||
public static void PostfixWallConstructor(Wall.Factory factory,
|
||||
WorkersRadio workersRadio,
|
||||
ref WallConfig wallConfig) {
|
||||
Console.WriteLine($"Wall config created");
|
||||
wallConfig.maxAngel = 2f;
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(AdaptController), MethodType.Constructor, typeof(AdaptConfig))]
|
||||
[HarmonyPatch(typeof(AdaptController), MethodType.Constructor,
|
||||
typeof(AdaptConfig))]
|
||||
public static void PostfixAdaptConfig(ref AdaptConfig adaptConfig) {
|
||||
var trav = Traverse.Create(adaptConfig);
|
||||
var buildingsMaxVolume = trav.Field<float>("buildingsMaxVolume");
|
||||
@@ -740,7 +838,8 @@ namespace InfectionFreeZone {
|
||||
buildingsMaxVolume.Value = Main.buildingMaxVolume.Value;
|
||||
|
||||
if (Main.buildingMaxVolumeDebug.Value)
|
||||
Console.WriteLine($"Building max volume modified to {buildingsMaxVolume.Value}");
|
||||
}
|
||||
Console.WriteLine(
|
||||
$"Building max volume modified to {buildingsMaxVolume.Value}");
|
||||
}
|
||||
}
|
||||
}
|
@@ -4,22 +4,23 @@ using System.Runtime.InteropServices;
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("InfectionFreeZone")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("InfectionFreeZone")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2023")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly:AssemblyTitle("InfectionFreeZone")]
|
||||
[assembly:AssemblyDescription("")]
|
||||
[assembly:AssemblyConfiguration("")]
|
||||
[assembly:AssemblyCompany("")]
|
||||
[assembly:AssemblyProduct("InfectionFreeZone")]
|
||||
[assembly:AssemblyCopyright("Copyright © 2023")]
|
||||
[assembly:AssemblyTrademark("")]
|
||||
[assembly:AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly:ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("DA9D274E-486F-4F82-84FF-CD9388CB0B09")]
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to
|
||||
// COM
|
||||
[assembly:Guid("DA9D274E-486F-4F82-84FF-CD9388CB0B09")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
@@ -28,8 +29,7 @@ using System.Runtime.InteropServices;
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
// You can specify all the values or you can default the Build and Revision
|
||||
// Numbers by using the '*' as shown below: [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly:AssemblyVersion("1.0.0.0")]
|
||||
[assembly:AssemblyFileVersion("1.0.0.0")]
|
Reference in New Issue
Block a user