new-horizons/NewHorizons/Patches/DialoguePatches/CharacterDialogueTreePatches.cs
Noah Pilarski fc1f25a70d check InConversation to avoid unnecessary EndConversation calls (#859)
even though this already happens in CharacterDialogueTree.EndConversation itself, I did it for Ixrec anyways.
2024-06-01 22:19:03 -04:00

45 lines
1.5 KiB
C#

using HarmonyLib;
using NewHorizons.OtherMods.AchievementsPlus.NH;
using NewHorizons.OtherMods.AchievementsPlus;
using NewHorizons.Components.Props;
namespace NewHorizons.Patches.DialoguePatches;
[HarmonyPatch(typeof(CharacterDialogueTree))]
public static class CharacterDialogueTreePatches
{
[HarmonyPrefix]
[HarmonyPatch(nameof(CharacterDialogueTree.Awake))]
private static void CharacterDialogueTree_Awake(CharacterDialogueTree __instance)
{
GlobalMessenger<OWRigidbody>.AddListener("AttachPlayerToPoint", __instance.OnAttachPlayerToPoint);
}
[HarmonyPrefix]
[HarmonyPatch(nameof(CharacterDialogueTree.OnDestroy))]
private static void CharacterDialogueTree_OnDestroy(CharacterDialogueTree __instance)
{
GlobalMessenger<OWRigidbody>.RemoveListener("AttachPlayerToPoint", __instance.OnAttachPlayerToPoint);
}
private static void OnAttachPlayerToPoint(this CharacterDialogueTree characterDialogueTree, OWRigidbody rigidbody)
{
if (characterDialogueTree.InConversation())
{
characterDialogueTree.EndConversation();
}
}
[HarmonyPostfix]
[HarmonyPatch(nameof(CharacterDialogueTree.StartConversation))]
public static void CharacterDialogueTree_StartConversation(CharacterDialogueTree __instance)
{
if (!AchievementHandler.Enabled) return;
if (__instance is NHCharacterDialogueTree)
{
TalkToFiveCharactersAchievement.OnTalkedToCharacter(__instance._characterName);
}
}
}