fix: catch more exceptions in hooks
This commit is contained in:
parent
4f7d0930f2
commit
63f75a65ad
@ -55,11 +55,22 @@ namespace XivCommon.Functions {
|
||||
this.AddBattleTalkHook?.Dispose();
|
||||
}
|
||||
|
||||
private unsafe byte AddBattleTalkDetour(IntPtr uiModule, IntPtr senderPtr, IntPtr messagePtr, float duration, byte style) {
|
||||
private byte AddBattleTalkDetour(IntPtr uiModule, IntPtr senderPtr, IntPtr messagePtr, float duration, byte style) {
|
||||
if (this.OnBattleTalk == null) {
|
||||
goto Return;
|
||||
}
|
||||
|
||||
try {
|
||||
return this.AddBattleTalkDetourInner(uiModule, senderPtr, messagePtr, duration, style);
|
||||
} catch (Exception ex) {
|
||||
PluginLog.LogError(ex, "Exception in BattleTalk detour");
|
||||
}
|
||||
|
||||
Return:
|
||||
return this.AddBattleTalkHook!.Original(uiModule, senderPtr, messagePtr, duration, style);
|
||||
}
|
||||
|
||||
private unsafe byte AddBattleTalkDetourInner(IntPtr uiModule, IntPtr senderPtr, IntPtr messagePtr, float duration, byte style) {
|
||||
var rawSender = Util.ReadTerminated(senderPtr);
|
||||
var rawMessage = Util.ReadTerminated(messagePtr);
|
||||
|
||||
@ -75,7 +86,7 @@ namespace XivCommon.Functions {
|
||||
try {
|
||||
this.OnBattleTalk?.Invoke(ref sender, ref message, ref options, ref handled);
|
||||
} catch (Exception ex) {
|
||||
PluginLog.Log(ex, "Exception in BattleTalk detour");
|
||||
PluginLog.Log(ex, "Exception in BattleTalk event");
|
||||
}
|
||||
|
||||
if (handled) {
|
||||
|
@ -62,10 +62,20 @@ namespace XivCommon.Functions {
|
||||
|
||||
private void AddonTalkV45Detour(IntPtr addon, IntPtr a2, IntPtr data) {
|
||||
if (this.OnTalk == null) {
|
||||
this.AddonTalkV45Hook!.Original(addon, a2, data);
|
||||
return;
|
||||
goto Return;
|
||||
}
|
||||
|
||||
try {
|
||||
this.AddonTalkV45DetourInner(data);
|
||||
} catch (Exception ex) {
|
||||
PluginLog.LogError(ex, "Exception in Talk detour");
|
||||
}
|
||||
|
||||
Return:
|
||||
this.AddonTalkV45Hook!.Original(addon, a2, data);
|
||||
}
|
||||
|
||||
private void AddonTalkV45DetourInner(IntPtr data) {
|
||||
var rawName = Util.ReadTerminated(Marshal.ReadIntPtr(data + NameOffset + 8));
|
||||
var rawText = Util.ReadTerminated(Marshal.ReadIntPtr(data + TextOffset + 8));
|
||||
var style = (TalkStyle) Marshal.ReadByte(data + StyleOffset);
|
||||
@ -76,7 +86,7 @@ namespace XivCommon.Functions {
|
||||
try {
|
||||
this.OnTalk?.Invoke(ref name, ref text, ref style);
|
||||
} catch (Exception ex) {
|
||||
PluginLog.LogError(ex, "Exception in Talk detour");
|
||||
PluginLog.LogError(ex, "Exception in Talk event");
|
||||
}
|
||||
|
||||
var newName = name.Encode().Terminate();
|
||||
@ -90,8 +100,6 @@ namespace XivCommon.Functions {
|
||||
this.SetAtkValueString(data + TextOffset, (IntPtr) textPtr);
|
||||
}
|
||||
}
|
||||
|
||||
this.AddonTalkV45Hook!.Original(addon, a2, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user