Add few games

This commit is contained in:
David Majdandžić
2023-04-10 16:52:58 +02:00
parent e4d33c3ea4
commit d973d67b0d
46 changed files with 695 additions and 0 deletions

5
Projects/MadGamesTycoon2/.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
bin/
obj/
/packages/
riderModule.iml
/_ReSharper.Caches/

View File

@@ -0,0 +1,275 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using HarmonyLib.Tools;
using Pathfinding;
namespace CykaMod {
[BepInPlugin(pluginGuid, pluginName, pluginVersion)]
public class Main : BaseUnityPlugin {
private const string pluginGuid = "CykaMod";
private const string pluginName = "CykaMod";
private const string pluginVersion = "1.0.0";
public static ConfigEntry<float> skillCap;
public static ConfigEntry<float> workSpeed;
public static ConfigEntry<float> workResult;
public static ConfigEntry<bool> alwaysCritical;
public static ConfigEntry<float> gameSpeed;
public static ConfigEntry<int> fans;
public static ConfigEntry<long> money;
//
// private void Awake()
// {
// configGreeting = Config.Bind("General", // The section under which the option is shown
// "GreetingText", // The key of the configuration option in the configuration file
// "Hello, world!", // The default value
// "A greeting text to show when the game is launched"); // Description of the option to show in the config file
//
public void Awake() {
skillCap = Config.Bind("General", "Skill Cap", 100f);
workSpeed = Config.Bind("General", "Work Speed Multiplier", 4f);
workResult = Config.Bind("General", "Work Result Multiplier", 4f);
alwaysCritical = Config.Bind("General", "Work Always Critical", false);
gameSpeed = Config.Bind("General", "Game Speed Multiplier", 3f);
fans = Config.Bind("General", "Fans Multiplier", 2);
money = Config.Bind("General", "Money Multiplier", 2L);
Logger.LogInfo("Cyka mod loaded");
HarmonyFileLog.Enabled = true;
Harmony harmony = new Harmony(pluginGuid);
harmony.PatchAll();
var originalMethods = harmony.GetPatchedMethods();
Logger.LogInfo("Patched " + originalMethods.Count() + " methods");
}
public static bool IsMatch(List<CodeInstruction> codes, int index, List<CodeInstruction> matcher) {
for (var i = 0; i < matcher.Count; i++) {
if (codes[index + i].opcode != matcher[i].opcode) {
return false;
}
}
return true;
}
public static void InsertAt(List<CodeInstruction> codes, int index, List<CodeInstruction> toInsert) {
for (var i = 0; i < toInsert.Count; i++) {
codes.Insert(index + i, toInsert[i]);
}
}
}
[HarmonyPatch(typeof(characterScript), "GetSkillCap")]
public class SkillCapPatch {
static void Postfix(ref float __result) {
// Console.WriteLine("GetSkillCap Postfix! Result is " + __result);
__result = Main.skillCap.Value;
}
}
[HarmonyPatch(typeof(characterScript), "GetSkillCap_Skill")]
public class SkillCapSkillPatch {
static void Postfix(ref float __result) {
// Console.WriteLine("GetSkillCap_Skill Postfix! Result is " + __result);
__result = Main.skillCap.Value;
}
}
[HarmonyPatch(typeof(characterScript), "GetWorkSpeed")]
public class GetWorkSpeedPatch {
static void Postfix(ref float __result) {
// Console.WriteLine("GetWorkSpeed Postfix! Result is " + __result);
__result *= Main.workSpeed.Value;
}
}
[HarmonyPatch(typeof(characterScript), "GetWorkResult")]
public class GetWorkResultPatch {
static void Prefix(ref float f) {
// Console.WriteLine("GetWorkResult Postfix! f is " + f);
f *= Main.workResult.Value;
}
}
[HarmonyPatch(typeof(characterScript), "GetCritic")]
public class GetCriticPatch {
static void Postfix(ref bool __result) {
// Console.WriteLine("GetWorkResult Postfix! f is " + f);
if (Main.alwaysCritical.Value) {
__result = true;
}
}
}
[HarmonyPatch(typeof(mainScript), "SetGameSpeed")]
public class GameSpeedPatch {
static void Prefix(ref float f) {
// Console.WriteLine("SetGameSpeed Prefix! Argument is " + f);
if (f > 1) {
f *= Main.gameSpeed.Value;
// Console.WriteLine("Argument modified to " + f);
}
}
}
[HarmonyPatch(typeof(characterScript), "Learn")]
public static class LearnManyPatch {
static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) {
var codes = new List<CodeInstruction>(instructions);
for (var i = 0; i < 5; i++) {
if (codes[i].opcode == OpCodes.Ldc_R4) {
Console.WriteLine("Changing " + codes[i]);
codes[i].operand = (float)codes[i].operand * 64;
Console.WriteLine("Changed " + codes[i]);
}
}
return codes.AsEnumerable();
}
}
[HarmonyPatch(typeof(arbeitsmarkt), "ArbeitsmarktUpdaten")]
public static class ManyEmployeesPatch {
static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) {
var codes = new List<CodeInstruction>(instructions);
for (var i = codes.Count - 1; i > 0; i--) {
if (codes[i].opcode == OpCodes.Ldc_I4_3) {
Console.WriteLine("Changing " + codes[i]);
codes[i] = new CodeInstruction(OpCodes.Ldc_I4, 64);
Console.WriteLine("Changed " + codes[i]);
break;
}
}
return codes.AsEnumerable();
}
}
// [HarmonyPatch(typeof(AILerp), "MovementUpdate")]
public class MovementSpeedPatch {
static void Prefix(ref float deltaTime) {
Console.WriteLine("MovementUpdate Prefix! deltaTime is " + deltaTime);
deltaTime *= 16f;
}
}
// [HarmonyPatch(typeof(movementScript), "Move")]
public static class EmployeeMovementSpeedPatch {
static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) {
var codes = new List<CodeInstruction>(instructions);
List<CodeInstruction> matcher = new List<CodeInstruction>();
matcher.Add(new CodeInstruction(OpCodes.Ldarg_0, null));
matcher.Add(new CodeInstruction(OpCodes.Ldfld, null));
matcher.Add(new CodeInstruction(OpCodes.Ldarg_0, null));
matcher.Add(new CodeInstruction(OpCodes.Ldfld, null));
matcher.Add(new CodeInstruction(OpCodes.Mul, null));
List<CodeInstruction> patch = new List<CodeInstruction>();
patch.Add(new CodeInstruction(OpCodes.Ldc_R4, 8));
patch.Add(new CodeInstruction(OpCodes.Mul, null));
for (var i = codes.Count - 1; i > 0; i--) {
if (Main.IsMatch(codes, i, matcher)) {
Main.InsertAt(codes, i + 5, patch);
Console.WriteLine("Movement speed patched");
for (var j = 0; j < 15; j++) {
Console.WriteLine(codes[i + j]);
}
break;
}
}
Console.WriteLine("Return");
return codes.AsEnumerable();
}
}
[HarmonyPatch(typeof(mainScript), "WochenUpdates")]
public static class ContractWorkAmount {
static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) {
var codes = new List<CodeInstruction>(instructions);
int methodIndex = -1;
List<CodeInstruction> pattern = new List<CodeInstruction>();
List<CodeInstruction> matcher = new List<CodeInstruction>();
matcher.Add(new CodeInstruction(OpCodes.Ldarg_0, null));
matcher.Add(new CodeInstruction(OpCodes.Ldfld, null));
matcher.Add(new CodeInstruction(OpCodes.Ldc_I4_0, null));
matcher.Add(new CodeInstruction(OpCodes.Callvirt, null));
for (var i = 0; i < codes.Count; i++) {
if (codes[i].operand != null) {
if (codes[i].operand.ToString().Contains("UpdateContractWork")) {
methodIndex = i;
pattern.Add(codes[i - 3]);
pattern.Add(codes[i - 2]);
pattern.Add(codes[i - 1]);
pattern.Add(codes[i]);
break;
}
}
}
pattern[2].opcode = OpCodes.Ldc_I4_1;
for (int i = 0; i < 16; i++) {
for (int j = 0; j < pattern.Count; j++) {
codes.Insert(methodIndex + i + j, pattern[j]);
}
}
return codes.AsEnumerable();
}
}
[HarmonyPatch(typeof(platformScript), "SellPlayer")]
public static class ConsoleProductionReductionPatch {
static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) {
var codes = new List<CodeInstruction>(instructions);
List<CodeInstruction> matcher = new List<CodeInstruction>();
matcher.Add(new CodeInstruction(OpCodes.Ldarg_0, null));
matcher.Add(new CodeInstruction(OpCodes.Ldarg_0, null));
matcher.Add(new CodeInstruction(OpCodes.Ldfld, null));
matcher.Add(new CodeInstruction(OpCodes.Ldc_R4, null));
matcher.Add(new CodeInstruction(OpCodes.Ldc_R4, null));
matcher.Add(new CodeInstruction(OpCodes.Call, null));
matcher.Add(new CodeInstruction(OpCodes.Add, null));
matcher.Add(new CodeInstruction(OpCodes.Stfld, null));
for (var i = 0; i < codes.Count; i++) {
if (Main.IsMatch(codes, i, matcher)) {
codes[i + 3].operand = (float)codes[i + 3].operand * 8f;
codes[i + 4].operand = (float)codes[i + 4].operand * 8f;
Console.WriteLine("ConsoleProductionReductionPatch patched");
break;
}
}
return codes.AsEnumerable();
}
}
[HarmonyPatch(typeof(mainScript), "AddFans")]
public static class AddFansPatch {
static void Prefix(ref int i) {
// Console.WriteLine("GetWorkResult Postfix! f is " + f);
i *= Main.fans.Value;
}
}
[HarmonyPatch(typeof(mainScript), "Earn")]
public static class AddMoneyPatch {
static void Prefix(ref long amount) {
// Console.WriteLine("GetWorkResult Postfix! f is " + f);
amount *= Main.money.Value;
}
}
}

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{06AA059A-C853-42AD-BBF8-122CFB2EEA29}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CykaMod</RootNamespace>
<AssemblyName>CykaMod</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="0Harmony">
<HintPath>Libraries\0Harmony.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>Libraries\Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="AstarPathfindingProject">
<HintPath>Libraries\AstarPathfindingProject.dll</HintPath>
</Reference>
<Reference Include="BepInEx">
<HintPath>Libraries\BepInEx.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="UnityEngine">
<HintPath>Libraries\UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>Libraries\UnityEngine.CoreModule.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Class1.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Binary file not shown.

View File

@@ -0,0 +1,35 @@
using System.Reflection;
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("CykaMod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CykaMod")]
[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)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("06AA059A-C853-42AD-BBF8-122CFB2EEA29")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// 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")]

View File

@@ -0,0 +1,16 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CykaMod", "CykaMod\CykaMod.csproj", "{06AA059A-C853-42AD-BBF8-122CFB2EEA29}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{06AA059A-C853-42AD-BBF8-122CFB2EEA29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{06AA059A-C853-42AD-BBF8-122CFB2EEA29}.Debug|Any CPU.Build.0 = Debug|Any CPU
{06AA059A-C853-42AD-BBF8-122CFB2EEA29}.Release|Any CPU.ActiveCfg = Release|Any CPU
{06AA059A-C853-42AD-BBF8-122CFB2EEA29}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,10 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CBepinex_005CProjects_005CMadGamesTycoon2_005CCykaMod_005CLibraries_005C0Harmony_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CBepinex_005CProjects_005CMadGamesTycoon2_005CCykaMod_005CLibraries_005CAssembly_002DCSharp_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CBepinex_005CProjects_005CMadGamesTycoon2_005CCykaMod_005CLibraries_005CAstarPathfindingProject_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CBepinex_005CProjects_005CMadGamesTycoon2_005CCykaMod_005CLibraries_005CBepInEx_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CBepinex_005CProjects_005CMadGamesTycoon2_005CCykaMod_005CLibraries_005CUnityEngine_002ECoreModule_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CBepinex_005CProjects_005CMadGamesTycoon2_005CCykaMod_005CLibraries_005CUnityEngine_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer&gt;&#xD;
&lt;Assembly Path="C:\Users\Administrator\RiderProjects\Bepinex\Projects\MadGamesTycoon2\CykaMod\Libraries\Assembly-CSharp.dll" /&gt;&#xD;
&lt;/AssemblyExplorer&gt;</s:String></wpf:ResourceDictionary>

View File

@@ -0,0 +1,16 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TerraTech", "TerraTech\TerraTech.csproj", "{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,11 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005C0Harmony_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CAssembly_002DCSharp_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CBepInEx_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CConfigurationManager_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CUnityEngine_002ECoreModule_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CUnityEngine_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer /&gt;</s:String>
<s:String x:Key="/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue">C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</s:String>
<s:Int64 x:Key="/Default/Environment/Hierarchy/Build/BuildTool/MsbuildVersion/@EntryValue">262144</s:Int64>
</wpf:ResourceDictionary>

View File

@@ -0,0 +1,143 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using HarmonyLib.Tools;
using UnityEngine;
// TODO: Make magnet better
// TODO: Make more energy generate
// TODO: Make attractor more range
// TODO: Make battery bigger
namespace TerraTech {
[BepInPlugin(pluginGuid, pluginName, pluginVersion)]
public class Main : BaseUnityPlugin {
private const string pluginGuid = "CykaMod";
private const string pluginName = "CykaMod";
private const string pluginVersion = "1.0.0";
public static ConfigEntry<int> xpMultiplier;
public static ConfigEntry<int> moneyMultiplier;
public static ConfigEntry<float> energyGenMultiplier;
public static ConfigEntry<bool> allProjectilesHoming;
public static ConfigEntry<float> shootingSpeedMultiplier;
public static ConfigEntry<float> muzzleVelocityMultiplier;
public void Awake() {
xpMultiplier = Config.Bind("General", "XP Multiplier", 1);
moneyMultiplier = Config.Bind("General", "Money Multiplier", 1);
energyGenMultiplier = Config.Bind("General", "Energy Generation Multiplier", 1f);
shootingSpeedMultiplier = Config.Bind("General", "Shooting Speed Multiplier", 1f);
muzzleVelocityMultiplier = Config.Bind("General", "Muzzle Velocity Multiplier", 1f);
allProjectilesHoming = Config.Bind("General", "Make All Projectiles Home", false);
shootingSpeedMultiplier.SettingChanged += (sender, args) => WeaponPropertiesManager.DoPatch();
WeaponPropertiesManager.DoPatch();
Logger.LogInfo("Cyka mod loaded");
HarmonyFileLog.Enabled = true;
Harmony harmony = new Harmony(pluginGuid);
harmony.PatchAll();
var originalMethods = harmony.GetPatchedMethods();
Logger.LogInfo("Patched " + originalMethods.Count() + " methods");
}
}
[HarmonyPatch(typeof(ManLicenses), "AddXP")]
public class XPMultiplierPatch {
static void Prefix(FactionSubTypes corporation, ref int xp, bool showUI = true) {
xp *= Main.xpMultiplier.Value;
}
}
[HarmonyPatch(typeof(ManPlayer), "AddMoney")]
public class MoneyMultiplierPatch {
static void Prefix(ref int amount) {
amount *= Main.moneyMultiplier.Value;
}
}
[HarmonyPatch(typeof(ModuleEnergy), "Supply")]
public class EnergyGenerationMultiplierPatch {
static void Prefix(EnergyRegulator.EnergyType type, ref float energyAmount) {
if (energyAmount > 0) {
energyAmount *= Main.energyGenMultiplier.Value;
}
}
}
[HarmonyPatch(typeof(Projectile), "Fire")]
public class HomingProjectilePatch {
private static Dictionary<FireData, bool> patchedObjects = new Dictionary<FireData, bool>();
static void Prefix(Vector3 fireDirection, ref FireData fireData, ref ModuleWeaponGun weapon, Tank shooter, ref bool seekingRounds, bool replayRounds) {
if (Main.allProjectilesHoming.Value) {
seekingRounds = true;
}
if (Main.muzzleVelocityMultiplier.Value != -1f && !patchedObjects.ContainsKey(fireData)) {
fireData.m_MuzzleVelocity *= Main.muzzleVelocityMultiplier.Value;
patchedObjects.Add(fireData, true);
}
}
}
[HarmonyPatch]
public class WeaponPropertiesManager {
private static Dictionary<ModuleWeaponGun, float> cooldowns = new Dictionary<ModuleWeaponGun, float>();
[HarmonyPostfix]
[HarmonyPatch(typeof(ModuleWeaponGun), "OnPool")]
static void Postfix1WeaponCreate(ModuleWeaponGun __instance) {
cooldowns.Add(__instance, __instance.m_ShotCooldown);
if (ShouldPatch()) {
DoPatchSingle(__instance);
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(ModuleWeaponGun), "OnRecycle")]
static void Postfix1WeaponDestroy(ModuleWeaponGun __instance) {
cooldowns.Remove(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleWeaponGun), "ProcessFiring")]
static void PrefixProcessFiring(ModuleWeaponGun __instance, ref bool firing) {
if (firing) {
if (!cooldowns.ContainsKey(__instance)) {
cooldowns.Add(__instance, __instance.m_ShotCooldown);
DoPatchSingle(__instance);
}
}
}
public static void DoPatch() {
Console.WriteLine("Modifying " + cooldowns.Count + " weapons");
Console.WriteLine("Should patch: " + ShouldPatch());
foreach (KeyValuePair<ModuleWeaponGun, float> keyValuePair in cooldowns) {
if (ShouldPatch()) {
DoPatchSingle(keyValuePair.Key);
} else {
DoRestoreSingle(keyValuePair.Key);
}
}
}
static void DoPatchSingle(ModuleWeaponGun weapon) {
weapon.m_ShotCooldown /= Main.shootingSpeedMultiplier.Value;
}
static void DoRestoreSingle(ModuleWeaponGun weapon) {
if (cooldowns.ContainsKey(weapon)) {
weapon.m_ShotCooldown = cooldowns[weapon];
}
}
static bool ShouldPatch() {
return Math.Abs(Main.shootingSpeedMultiplier.Value - 1f) > 0.0001f;
}
}
}

View File

@@ -0,0 +1,35 @@
using System.Reflection;
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("TerraTech")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TerraTech")]
[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)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// 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")]

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>TerraTech</RootNamespace>
<AssemblyName>TerraTech</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="Class1.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="0Harmony">
<HintPath>..\libs\0Harmony.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>..\libs\Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="BepInEx">
<HintPath>..\libs\BepInEx.dll</HintPath>
</Reference>
<Reference Include="ConfigurationManager">
<HintPath>..\libs\ConfigurationManager.dll</HintPath>
</Reference>
<Reference Include="UnityEngine">
<HintPath>..\libs\UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>..\libs\UnityEngine.CoreModule.dll</HintPath>
</Reference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,11 @@
C:\Users\Administrator\RiderProjects\Bepinex\Projects\TerraTech\TerraTech\bin\Debug\TerraTech.dll
C:\Users\Administrator\RiderProjects\Bepinex\Projects\TerraTech\TerraTech\bin\Debug\TerraTech.pdb
C:\Users\Administrator\RiderProjects\Bepinex\Projects\TerraTech\TerraTech\bin\Debug\0Harmony.dll
C:\Users\Administrator\RiderProjects\Bepinex\Projects\TerraTech\TerraTech\bin\Debug\Assembly-CSharp.dll
C:\Users\Administrator\RiderProjects\Bepinex\Projects\TerraTech\TerraTech\bin\Debug\BepInEx.dll
C:\Users\Administrator\RiderProjects\Bepinex\Projects\TerraTech\TerraTech\bin\Debug\UnityEngine.CoreModule.dll
C:\Users\Administrator\RiderProjects\Bepinex\Projects\TerraTech\TerraTech\bin\Debug\UnityEngine.dll
C:\Users\Administrator\RiderProjects\Bepinex\Projects\TerraTech\TerraTech\obj\Debug\TerraTech.csprojResolveAssemblyReference.cache
C:\Users\Administrator\RiderProjects\Bepinex\Projects\TerraTech\TerraTech\obj\Debug\TerraTech.dll
C:\Users\Administrator\RiderProjects\Bepinex\Projects\TerraTech\TerraTech\obj\Debug\TerraTech.pdb
C:\Users\Administrator\RiderProjects\Bepinex\Projects\TerraTech\TerraTech\bin\Debug\ConfigurationManager.dll

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.