Skip to content

Commit

Permalink
- Enables MultiTarget via equipment
Browse files Browse the repository at this point in the history
  • Loading branch information
IceRaptor committed Feb 2, 2020
1 parent 1360915 commit 6ea0fd6
Show file tree
Hide file tree
Showing 8 changed files with 147 additions and 19 deletions.
3 changes: 2 additions & 1 deletion IRTweaks/IRTweaks/IRTweaks.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
Expand Down Expand Up @@ -93,6 +93,7 @@
<Compile Include="Modules\Combat\PilotStatValidators.cs" />
<Compile Include="Modules\Combat\FlexibleSensorLock.cs" />
<Compile Include="Modules\Combat\SpawnProtection.cs" />
<Compile Include="Modules\Misc\PilotEffects.cs" />
<Compile Include="Modules\Misc\SkipDeleteSavePopup.cs" />
<Compile Include="Modules\Misc\DisableCampaign.cs" />
<Compile Include="Modules\Misc\MiscModule.cs" />
Expand Down
12 changes: 10 additions & 2 deletions IRTweaks/IRTweaks/ModConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,23 @@ public static class ModStats {
public const string CalledShowAlwaysAllow = "IRTCalledShotAlwaysAllow";
public const string CalledShotMod = "IRTCalledShotMod";

public const string EnableMultiTarget = "IRAllowMultiTarget";

public const string RandomMechs = "StartingRandomMechLists";
public const string FactionRep = "FactionReputation";
public const string StrayShotValidTargets = "StrayShotValidTargets";
}

public class AbilityOpts {
public string MultiTargetId = "AbilityDefG5";
}

public class StoreOpts {
public int QuantityOnShift = 5;
public int QuantityOnControl = 20;
}

public class Combat {
public class CombatOpts {
public int PilotAttributesMax = 13;

public CalledShotOpts CalledShot = new CalledShotOpts();
Expand Down Expand Up @@ -46,6 +52,7 @@ public class FixesFlags {
public bool DisableCombatSaves = true;
public bool ExtendedStats = true;
public bool FlexibleSensorLock = true;
public bool MultiTargetStat = true;
public bool PreventHeadShots = true;
public bool RandomStartByDifficulty = true;
public bool SkirmishReset = true;
Expand All @@ -65,7 +72,8 @@ public class ModConfig {

public FixesFlags Fixes = new FixesFlags();

public Combat Combat = new Combat();
public AbilityOpts Abilities = new AbilityOpts();
public CombatOpts Combat = new CombatOpts();
public StoreOpts Store = new StoreOpts();

public void LogConfig() {
Expand Down
2 changes: 1 addition & 1 deletion IRTweaks/IRTweaks/Modules/Combat/CombatModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
using Harmony;
using System;
using System.Reflection;
using static IRTweaks.Combat;
using static IRTweaks.CombatOpts;

namespace IRTweaks.Modules.Combat {

Expand Down
72 changes: 72 additions & 0 deletions IRTweaks/IRTweaks/Modules/Misc/PilotEffects.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
using BattleTech;
using Harmony;
using System.Collections.Generic;
using us.frostraptor.modUtils;

namespace IRTweaks.Modules.Misc {

[HarmonyPatch(typeof(AbstractActor), "MaxTargets", MethodType.Getter)]
public static class AbstractActor_MaxTargets_Getter {
static bool Prepare() { return Mod.Config.Fixes.MultiTargetStat; }

static void Postfix(AbstractActor __instance, ref int __result) {
Mod.Log.Trace($"AA:MT:G - entered.");

if (__instance != null && __instance.StatCollection.ContainsStatistic(ModStats.EnableMultiTarget)) {
Mod.Log.Debug($"Multi-Target stat exists");
if (__instance.StatCollection.GetStatistic(ModStats.EnableMultiTarget).Value<bool>()) {
Mod.Log.Debug($"Enabling multi-target for actor: {CombatantUtils.Label(__instance)}");
__result = 3;
} else {
Mod.Log.Debug($"Actor: {CombatantUtils.Label(__instance)} has enableMultiTarget: false");
}
}
}
}

[HarmonyPatch(typeof(Pilot), "ActiveAbilities", MethodType.Getter)]
public static class Pilot_ActiveAbilities_Getter {
static bool Prepare() { return Mod.Config.Fixes.MultiTargetStat; }

static void Postfix(Pilot __instance, ref List<Ability> __result) {
Mod.Log.Trace($"AA:AA:G - entered.");

if (__instance == null || __instance.ParentActor == null) { return; }

if (__instance.ParentActor.StatCollection.GetStatistic(ModStats.EnableMultiTarget).Value<bool>()) {
Mod.Log.Debug($"Pilot: {__instance} needs multi-target ability");

bool hasMultiTarget = false;
foreach (Ability ability in __result) {
if (ability.Def.Targeting == AbilityDef.TargetingType.MultiFire) {
hasMultiTarget = true;
}
}

if (!hasMultiTarget) {
Traverse combatT = Traverse.Create(__instance).Property("Combat");
CombatGameState combat = combatT.GetValue<CombatGameState>();

if (combat == null) { return; }

Mod.Log.Debug(" -- Adding multi-target ability to pilot.");
AbilityDef abilityDef = combat.DataManager.AbilityDefs.Get(Mod.Config.Abilities.MultiTargetId);
Ability ability = new Ability(abilityDef);
ability.Init(combat);
__result.Add(ability);
}

}
}
}

[HarmonyPatch(typeof(AbstractActor), "InitEffectStats")]
public static class AbstractActor_InitEffectStats {
static bool Prepare() { return Mod.Config.Fixes.MultiTargetStat; }

static void Postfix(AbstractActor __instance) {
Mod.Log.Trace($"AA:MT:G - entered.");
__instance.StatCollection.AddStatistic<bool>(ModStats.EnableMultiTarget, false);
}
}
}
1 change: 0 additions & 1 deletion IRTweaks/IRTweaks/Modules/UI/StreamlinedMainMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
namespace IRTweaks.Modules.UI {
public static class StreamlinedMainMenu {


[HarmonyPatch(typeof(SGContractsWidget), "Init")]
[HarmonyPatch(new Type[] { typeof(SimGameState), typeof(Action<bool>) })]
public static class SGContractsWidget_Init {
Expand Down
4 changes: 2 additions & 2 deletions IRTweaks/IRTweaks/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@
// 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("0.5.3.0")]
[assembly: AssemblyFileVersion("0.5.3.0")]
[assembly: AssemblyVersion("0.5.4.0")]
[assembly: AssemblyFileVersion("0.5.4.0")]
31 changes: 19 additions & 12 deletions mod.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"Name": "IRTweaks",
"Enabled": true,
"Version": "0.5.1",
"Version": "0.5.4",
"Description": "Miscellaneous Tweaks and Fixes",
"Author": "IceRaptor",
"Website": "https://github.com/IceRaptor/IRTweaks",
Expand All @@ -12,17 +12,24 @@
"Debug" : false,
"Trace" : false,
"Fixes" : {
"BulkPurchasing" : true,
"CombatLog" : false,
"DisableCombatSaves" : false,
"ExtendedStats" : false,
"FlexibleSensorLock" : false,
"PreventHeadShots" : false,
"RandomStartByDifficulty" : false,
"SkirmishReset" : false,
"SpawnProtection" : false,
"StreamlinedMainMenu" : true,
"WeaponTooltip" : true
"BulkPurchasing" : "true",
"CombatLog" : "true",
"DisableCampaign" : "true",
"DisableCombatSaves" : "true",
"ExtendedStats" : "true",
"FlexibleSensorLock" : "true",
"MultiTargetStat" : "true",
"PreventHeadShots" : "true",
"RandomStartByDifficulty" : "true",
"ReduceSaveCompression" : "true",
"SkipDeleteSavePopup" : "true",
"SkirmishReset" : "false",
"SpawnProtection" : "true",
"StreamlinedMainMenu" : "true",
"WeaponTooltip" : "true",
},
"Abilities" : {
"MultiTargetId" : "AbilityDefG5"
},
"Combat" : {
"PilotAttributesMax" : 14,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"statusEffects" : [
{
"durationData" : {
"duration" : -1,
"ticksOnActivations" : false,
"useActivationsOfTarget" : false,
"ticksOnEndOfRound" : false,
"ticksOnMovements" : false,
"stackLimit" : 1,
"clearedWhenAttacked" : false
},
"targetingData" : {
"effectTriggerType" : "Passive",
"triggerLimit" : 0,
"extendDurationOnTrigger" : 0,
"specialRules" : "NotSet",
"effectTargetType" : "Creator",
"range" : 0,
"forcePathRebuild" : false,
"forceVisRebuild" : false,
"showInTargetPreview" : false,
"showInStatusPanel" : true
},
"effectType" : "StatisticEffect",
"Description" : {
"Id" : "IRAllowMultiTargetEffect",
"Name" : "IRMULTITARGET",
"Details" : "Enables multi-target.",
"Icon" : "uixSvgIcon_equipment_ActuatorArm"
},
"nature" : "Buff",
"statisticData" : {
"statName" : "IRAllowMultiTarget",
"operation" : "Set",
"modValue" : "true",
"modType" : "System.Boolean"
}
}
],
}

0 comments on commit 6ea0fd6

Please sign in to comment.