Add quick interactions locally
This commit is contained in:
72
Quick Interactions/CSharp/Shared/Patches/CanInteractWith.cs
Normal file
72
Quick Interactions/CSharp/Shared/Patches/CanInteractWith.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
|
||||
using Barotrauma;
|
||||
using HarmonyLib;
|
||||
using Microsoft.Xna.Framework;
|
||||
using QIDependencyInjection;
|
||||
|
||||
namespace QuickInteractions
|
||||
{
|
||||
[PatchClass]
|
||||
public class CanInteractWith
|
||||
{
|
||||
[Dependency] public static Logger Logger { get; set; }
|
||||
[Dependency] public static Debugger Debugger { get; set; }
|
||||
[Dependency] public static Fabricators Fabricators { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
try
|
||||
{
|
||||
Mod.Harmony.Patch(
|
||||
original: typeof(Character).GetMethod("CanInteractWith", AccessTools.all, new Type[]{
|
||||
typeof(Item),
|
||||
typeof(float).MakeByRefType(),
|
||||
typeof(bool),
|
||||
}),
|
||||
postfix: new HarmonyMethod(typeof(CanInteractWith).GetMethod("Character_CanInteractWith_Postfix"))
|
||||
);
|
||||
|
||||
Mod.Harmony.Patch(
|
||||
original: typeof(Character).GetMethod("CanInteractWith", AccessTools.all, new Type[]{
|
||||
typeof(Character),
|
||||
typeof(float),
|
||||
typeof(bool),
|
||||
typeof(bool),
|
||||
}),
|
||||
prefix: new HarmonyMethod(typeof(CanInteractWith).GetMethod("Character_CanInteractWith_Prefix"))
|
||||
);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logger.Log(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool Character_CanInteractWith_Prefix(Character __instance, ref bool __result, Character c, float maxDist = 200.0f, bool checkVisibility = true, bool skipDistanceCheck = false)
|
||||
{
|
||||
if (GhostDetector.AmIDead(Mod.Instance)) return true;
|
||||
if (c == __instance || __instance.Removed || !c.Enabled || !c.CanBeSelected || c.InvisibleTimer > 0.0f)
|
||||
{
|
||||
__result = false; return false;
|
||||
}
|
||||
__result = true; return false;
|
||||
}
|
||||
|
||||
public static void Character_CanInteractWith_Postfix(Character __instance, ref bool __result, Item item)
|
||||
{
|
||||
if (GhostDetector.AmIDead(Mod.Instance)) return;
|
||||
if (item == Fabricators?.OutpostFabricator) __result = true;
|
||||
if (item == Fabricators?.OutpostDeconstructor) __result = true;
|
||||
if (item == Fabricators?.OutpostMedFabricator) __result = true;
|
||||
|
||||
// if (item == Fabricators?.OutpostFabricator) Logger.Log($"{__instance} {item}");
|
||||
// if (item == Fabricators?.OutpostDeconstructor) Logger.Log($"{__instance} {item}");
|
||||
// if (item == Fabricators?.OutpostMedFabricator) Logger.Log($"{__instance} {item}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user