mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-21 00:39:53 +00:00
fix infinite loop of sending dialogue conditions
This commit is contained in:
parent
93eb642b77
commit
7434b59940
@ -1,5 +1,4 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.Player.TransformSync;
|
||||
using QSB.WorldSync;
|
||||
using QuantumUNET.Transport;
|
||||
|
||||
@ -7,16 +6,6 @@ namespace QSB.ConversationSync.Messages
|
||||
{
|
||||
public class DialogueConditionMessage : QSBMessage
|
||||
{
|
||||
static DialogueConditionMessage() => GlobalMessenger<string, bool>.AddListener(OWEvents.DialogueConditionChanged, Handler);
|
||||
|
||||
private static void Handler(string name, bool state)
|
||||
{
|
||||
if (PlayerTransformSync.LocalInstance)
|
||||
{
|
||||
new DialogueConditionMessage(name, state).Send();
|
||||
}
|
||||
}
|
||||
|
||||
private string ConditionName;
|
||||
private bool ConditionState;
|
||||
|
||||
@ -47,7 +36,32 @@ namespace QSB.ConversationSync.Messages
|
||||
QSBWorldSync.SetDialogueCondition(ConditionName, ConditionState);
|
||||
}
|
||||
|
||||
DialogueConditionManager.SharedInstance.SetConditionState(ConditionName, ConditionState);
|
||||
var sharedInstance = DialogueConditionManager.SharedInstance;
|
||||
|
||||
var flag = true;
|
||||
if (sharedInstance.ConditionExists(ConditionName))
|
||||
{
|
||||
if (sharedInstance._dictConditions[ConditionName] == ConditionState)
|
||||
{
|
||||
flag = false;
|
||||
}
|
||||
|
||||
sharedInstance._dictConditions[ConditionName] = ConditionState;
|
||||
}
|
||||
else
|
||||
{
|
||||
sharedInstance.AddCondition(ConditionName, ConditionState);
|
||||
}
|
||||
|
||||
if (flag)
|
||||
{
|
||||
GlobalMessenger<string, bool>.FireEvent("DialogueConditionChanged", ConditionName, ConditionState);
|
||||
}
|
||||
|
||||
if (ConditionName == "LAUNCH_CODES_GIVEN")
|
||||
{
|
||||
PlayerData.LearnLaunchCodes();
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnReceiveLocal()
|
||||
|
@ -25,6 +25,14 @@ namespace QSB.ConversationSync.Patches
|
||||
"KNOWS_MEDITATION"
|
||||
};
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(DialogueConditionManager), nameof(DialogueConditionManager.SetConditionState))]
|
||||
public static bool SetConditionState(string conditionName, bool conditionState)
|
||||
{
|
||||
new DialogueConditionMessage(conditionName, conditionState).Send();
|
||||
return true;
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(CharacterDialogueTree), nameof(CharacterDialogueTree.StartConversation))]
|
||||
public static void CharacterDialogueTree_StartConversation(CharacterDialogueTree __instance)
|
||||
|
Loading…
x
Reference in New Issue
Block a user