Files
Nitrox/NitroxPatcher/Patches/Dynamic/AttackLastTarget_CanAttackTarget_Patch.cs
2025-07-06 00:23:46 +02:00

32 lines
1.1 KiB
C#

using System.Reflection;
using NitroxClient.GameLogic;
using NitroxClient.GameLogic.PlayerLogic;
using NitroxModel.Helper;
using UnityEngine;
namespace NitroxPatcher.Patches.Dynamic;
/// <summary>
/// Allows creatures to choose remote players as targets only if they can be attacked (<see cref="RemotePlayer.CanBeAttacked"/>)
/// </summary>
public sealed partial class AttackLastTarget_CanAttackTarget_Patch : NitroxPatch, IDynamicPatch
{
public static readonly MethodInfo TARGET_METHOD = Reflect.Method((AttackLastTarget t) => t.CanAttackTarget(default));
public static bool Prefix(GameObject target, ref bool __result)
{
if (!target)
{
return false;
}
// We only want to cancel if the target is a remote player which can't be attacked
if (target.TryGetComponent(out RemotePlayerIdentifier remotePlayerIdentifier) &&
(!remotePlayerIdentifier.RemotePlayer.LiveMixin.IsAlive() || !remotePlayerIdentifier.RemotePlayer.CanBeAttacked()))
{
__result = false;
return false;
}
return true;
}
}