mirror of
https://github.com/All-Of-Us-Mods/MiraAPI.git
synced 2026-10-20 01:46:15 +00:00
Change indirect and defense flags to get sets
This commit is contained in:
1 parent
22716b29ab
commit
83d55d409b
2 files changed
+49
-20
No files matched your search
@@ -23,15 +23,15 @@ public sealed class BeforeMurderEvent : MiraCancelableEvent
|
|||||||
public PlayerControl? Framed { get; }
|
public PlayerControl? Framed { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a value indicating whether the murder is done indirectly.
|
/// Gets or sets a value indicating whether the murder is done indirectly.
|
||||||
/// This is commonly used to prevent the <see cref="Source"/> <see cref="PlayerControl"/> from being killed.
|
/// This is commonly used to prevent the <see cref="Source"/> <see cref="PlayerControl"/> from being killed.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsIndirectAttack { get; }
|
public bool IsIndirectAttack { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a value indicating whether the murder should bypass protective roles or general defense, such as <see cref="GuardianAngelRole"/>.
|
/// Gets or sets a value indicating whether the murder should bypass protective roles or general defense, such as <see cref="GuardianAngelRole"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IgnoreDefense { get; }
|
public bool IgnoreDefense { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets whether the murder was meant to be done in a meeting, via an enum.
|
/// Gets whether the murder was meant to be done in a meeting, via an enum.
|
||||||
|
|||||||
@@ -84,13 +84,15 @@ public static class CustomMurderRpc
|
|||||||
|
|
||||||
var beforeMurderEvent = new BeforeMurderEvent(source, target, inMeeting);
|
var beforeMurderEvent = new BeforeMurderEvent(source, target, inMeeting);
|
||||||
MiraEventManager.InvokeEvent(beforeMurderEvent);
|
MiraEventManager.InvokeEvent(beforeMurderEvent);
|
||||||
|
var defenseFlag = beforeMurderEvent.IgnoreDefense;
|
||||||
|
var indirectFlag = beforeMurderEvent.IsIndirectAttack;
|
||||||
var isMeetingActive = MeetingHud.Instance != null || ExileController.Instance != null;
|
var isMeetingActive = MeetingHud.Instance != null || ExileController.Instance != null;
|
||||||
if ((inMeeting is MeetingCheck.ForMeeting && !isMeetingActive) || (inMeeting is MeetingCheck.OutsideMeeting && isMeetingActive))
|
if ((inMeeting is MeetingCheck.ForMeeting && !isMeetingActive) || (inMeeting is MeetingCheck.OutsideMeeting && isMeetingActive))
|
||||||
{
|
{
|
||||||
beforeMurderEvent.Cancel();
|
beforeMurderEvent.Cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target.ProtectedByGa())
|
if (!defenseFlag && target.ProtectedByGa())
|
||||||
{
|
{
|
||||||
beforeMurderEvent.Cancel();
|
beforeMurderEvent.Cancel();
|
||||||
murderResultFlags = MurderResultFlags.FailedProtected;
|
murderResultFlags = MurderResultFlags.FailedProtected;
|
||||||
@@ -114,6 +116,8 @@ public static class CustomMurderRpc
|
|||||||
PlayerControl.LocalPlayer,
|
PlayerControl.LocalPlayer,
|
||||||
source,
|
source,
|
||||||
target,
|
target,
|
||||||
|
indirectFlag,
|
||||||
|
defenseFlag,
|
||||||
murderResultFlags,
|
murderResultFlags,
|
||||||
resetKillTimer,
|
resetKillTimer,
|
||||||
createDeadBody,
|
createDeadBody,
|
||||||
@@ -128,6 +132,8 @@ public static class CustomMurderRpc
|
|||||||
/// <param name="host">The game host.</param>
|
/// <param name="host">The game host.</param>
|
||||||
/// <param name="source">The killer.</param>
|
/// <param name="source">The killer.</param>
|
||||||
/// <param name="target">The player to murder.</param>
|
/// <param name="target">The player to murder.</param>
|
||||||
|
/// <param name="isIndirect">Should the kill be indirect.</param>
|
||||||
|
/// <param name="ignoreDefense">Should the kill ignore defense.</param>
|
||||||
/// <param name="murderResultFlags">End result for the murder.</param>
|
/// <param name="murderResultFlags">End result for the murder.</param>
|
||||||
/// <param name="resetKillTimer">Should the kill timer be reset.</param>
|
/// <param name="resetKillTimer">Should the kill timer be reset.</param>
|
||||||
/// <param name="createDeadBody">Should a dead body be created.</param>
|
/// <param name="createDeadBody">Should a dead body be created.</param>
|
||||||
@@ -139,6 +145,8 @@ public static class CustomMurderRpc
|
|||||||
this PlayerControl host,
|
this PlayerControl host,
|
||||||
PlayerControl source,
|
PlayerControl source,
|
||||||
PlayerControl target,
|
PlayerControl target,
|
||||||
|
bool isIndirect,
|
||||||
|
bool ignoreDefense,
|
||||||
MurderResultFlags murderResultFlags,
|
MurderResultFlags murderResultFlags,
|
||||||
bool resetKillTimer = true,
|
bool resetKillTimer = true,
|
||||||
bool createDeadBody = true,
|
bool createDeadBody = true,
|
||||||
@@ -154,14 +162,31 @@ public static class CustomMurderRpc
|
|||||||
|
|
||||||
var murderResultFlags2 = MurderResultFlags.DecisionByHost | murderResultFlags;
|
var murderResultFlags2 = MurderResultFlags.DecisionByHost | murderResultFlags;
|
||||||
|
|
||||||
source.CustomMurder(
|
if (isIndirect || ignoreDefense)
|
||||||
target,
|
{
|
||||||
murderResultFlags2,
|
source.CustomMurder(
|
||||||
resetKillTimer,
|
target,
|
||||||
createDeadBody,
|
null,
|
||||||
teleportMurderer,
|
isIndirect,
|
||||||
showKillAnim,
|
ignoreDefense,
|
||||||
playKillSound);
|
murderResultFlags2,
|
||||||
|
resetKillTimer,
|
||||||
|
createDeadBody,
|
||||||
|
teleportMurderer,
|
||||||
|
showKillAnim,
|
||||||
|
playKillSound);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
source.CustomMurder(
|
||||||
|
target,
|
||||||
|
murderResultFlags2,
|
||||||
|
resetKillTimer,
|
||||||
|
createDeadBody,
|
||||||
|
teleportMurderer,
|
||||||
|
showKillAnim,
|
||||||
|
playKillSound);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -200,13 +225,15 @@ public static class CustomMurderRpc
|
|||||||
|
|
||||||
var beforeMurderEvent = new BeforeMurderEvent(source, target, isIndirect, ignoreDefense, inMeeting);
|
var beforeMurderEvent = new BeforeMurderEvent(source, target, isIndirect, ignoreDefense, inMeeting);
|
||||||
MiraEventManager.InvokeEvent(beforeMurderEvent);
|
MiraEventManager.InvokeEvent(beforeMurderEvent);
|
||||||
|
var defenseFlag = beforeMurderEvent.IgnoreDefense;
|
||||||
|
var indirectFlag = beforeMurderEvent.IsIndirectAttack;
|
||||||
var isMeetingActive = MeetingHud.Instance != null || ExileController.Instance != null;
|
var isMeetingActive = MeetingHud.Instance != null || ExileController.Instance != null;
|
||||||
if ((inMeeting is MeetingCheck.ForMeeting && !isMeetingActive) || (inMeeting is MeetingCheck.OutsideMeeting && isMeetingActive))
|
if ((inMeeting is MeetingCheck.ForMeeting && !isMeetingActive) || (inMeeting is MeetingCheck.OutsideMeeting && isMeetingActive))
|
||||||
{
|
{
|
||||||
beforeMurderEvent.Cancel();
|
beforeMurderEvent.Cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ignoreDefense && target.ProtectedByGa())
|
if (!defenseFlag && target.ProtectedByGa())
|
||||||
{
|
{
|
||||||
beforeMurderEvent.Cancel();
|
beforeMurderEvent.Cancel();
|
||||||
murderResultFlags = MurderResultFlags.FailedProtected;
|
murderResultFlags = MurderResultFlags.FailedProtected;
|
||||||
@@ -230,8 +257,8 @@ public static class CustomMurderRpc
|
|||||||
PlayerControl.LocalPlayer,
|
PlayerControl.LocalPlayer,
|
||||||
source,
|
source,
|
||||||
target,
|
target,
|
||||||
isIndirect,
|
indirectFlag,
|
||||||
ignoreDefense,
|
defenseFlag,
|
||||||
murderResultFlags,
|
murderResultFlags,
|
||||||
resetKillTimer,
|
resetKillTimer,
|
||||||
createDeadBody,
|
createDeadBody,
|
||||||
@@ -327,13 +354,15 @@ public static class CustomMurderRpc
|
|||||||
|
|
||||||
var beforeMurderEvent = new BeforeMurderEvent(source, target, framed, isIndirect, ignoreDefense, inMeeting);
|
var beforeMurderEvent = new BeforeMurderEvent(source, target, framed, isIndirect, ignoreDefense, inMeeting);
|
||||||
MiraEventManager.InvokeEvent(beforeMurderEvent);
|
MiraEventManager.InvokeEvent(beforeMurderEvent);
|
||||||
|
var defenseFlag = beforeMurderEvent.IgnoreDefense;
|
||||||
|
var indirectFlag = beforeMurderEvent.IsIndirectAttack;
|
||||||
var isMeetingActive = MeetingHud.Instance != null || ExileController.Instance != null;
|
var isMeetingActive = MeetingHud.Instance != null || ExileController.Instance != null;
|
||||||
if ((inMeeting is MeetingCheck.ForMeeting && !isMeetingActive) || (inMeeting is MeetingCheck.OutsideMeeting && isMeetingActive))
|
if ((inMeeting is MeetingCheck.ForMeeting && !isMeetingActive) || (inMeeting is MeetingCheck.OutsideMeeting && isMeetingActive))
|
||||||
{
|
{
|
||||||
beforeMurderEvent.Cancel();
|
beforeMurderEvent.Cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ignoreDefense && target.ProtectedByGa())
|
if (!defenseFlag && target.ProtectedByGa())
|
||||||
{
|
{
|
||||||
beforeMurderEvent.Cancel();
|
beforeMurderEvent.Cancel();
|
||||||
murderResultFlags = MurderResultFlags.FailedProtected;
|
murderResultFlags = MurderResultFlags.FailedProtected;
|
||||||
@@ -358,8 +387,8 @@ public static class CustomMurderRpc
|
|||||||
source,
|
source,
|
||||||
target,
|
target,
|
||||||
framed,
|
framed,
|
||||||
isIndirect,
|
indirectFlag,
|
||||||
ignoreDefense,
|
defenseFlag,
|
||||||
murderResultFlags,
|
murderResultFlags,
|
||||||
resetKillTimer,
|
resetKillTimer,
|
||||||
createDeadBody,
|
createDeadBody,
|
||||||
@@ -420,7 +449,7 @@ public static class CustomMurderRpc
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Custom Murder method without networking. If you need a networked version, use <see cref="RpcCustomMurder(PlayerControl, PlayerControl, bool, bool, bool, bool, bool, bool)"/>.
|
/// Custom Murder method without networking. If you need a networked version, use <see cref="RpcFramedCustomMurder"/> or <see cref="RpcAdvancedCustomMurder"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="source">The killer.</param>
|
/// <param name="source">The killer.</param>
|
||||||
/// <param name="target">The player to murder.</param>
|
/// <param name="target">The player to murder.</param>
|
||||||
|
|||||||
Reference in new issue
Block a user