diff --git a/MosswartMassacre/ViewXML/mainViewTabbed.xml b/MosswartMassacre/ViewXML/mainViewTabbed.xml index c958f39..6ed6230 100644 --- a/MosswartMassacre/ViewXML/mainViewTabbed.xml +++ b/MosswartMassacre/ViewXML/mainViewTabbed.xml @@ -42,6 +42,9 @@ + + + diff --git a/MosswartMassacre/Views/VVSTabbedMainView.cs b/MosswartMassacre/Views/VVSTabbedMainView.cs index fe9573b..c30b35f 100644 --- a/MosswartMassacre/Views/VVSTabbedMainView.cs +++ b/MosswartMassacre/Views/VVSTabbedMainView.cs @@ -34,6 +34,7 @@ namespace MosswartMassacre.Views private HudCheckBox chkAutoUpdateEnabled; private HudCheckBox chkVitalSharingEnabled; private HudButton btnVitalSharingOverlay; + private HudCheckBox chkVerboseLogging; private HudTextBox txtCharTag; private HudTextBox txtVTankPath; #endregion @@ -233,6 +234,7 @@ namespace MosswartMassacre.Views chkAutoUpdateEnabled = GetControl("chkAutoUpdateEnabled"); chkVitalSharingEnabled = GetControl("chkVitalSharingEnabled"); btnVitalSharingOverlay = GetControl("btnVitalSharingOverlay"); + chkVerboseLogging = GetControl("chkVerboseLogging"); txtCharTag = GetControl("txtCharTag"); txtVTankPath = GetControl("txtVTankPath"); @@ -247,6 +249,8 @@ namespace MosswartMassacre.Views chkVitalSharingEnabled.Change += OnVitalSharingSettingChanged; if (btnVitalSharingOverlay != null) btnVitalSharingOverlay.Hit += OnVitalSharingOverlayClicked; + if (chkVerboseLogging != null) + chkVerboseLogging.Change += OnVerboseLoggingSettingChanged; if (txtCharTag != null) txtCharTag.Change += OnCharTagChanged; if (txtVTankPath != null) @@ -496,6 +500,19 @@ namespace MosswartMassacre.Views } } + private void OnVerboseLoggingSettingChanged(object sender, EventArgs e) + { + try + { + PluginSettings.Instance.VerboseLogging = chkVerboseLogging.Checked; + PluginCore.WriteToChat($"Verbose logging {(chkVerboseLogging.Checked ? "ENABLED" : "DISABLED")}."); + } + catch (Exception ex) + { + PluginCore.WriteToChat($"Error in verbose logging setting change: {ex.Message}"); + } + } + private void OnVTankPathChanged(object sender, EventArgs e) { try @@ -651,6 +668,8 @@ namespace MosswartMassacre.Views { if (chkVitalSharingEnabled != null) chkVitalSharingEnabled.Checked = PluginSettings.Instance.VitalSharingEnabled; + if (chkVerboseLogging != null) + chkVerboseLogging.Checked = PluginSettings.Instance.VerboseLogging; if (chkRareMetaEnabled != null) chkRareMetaEnabled.Checked = PluginSettings.Instance.RareMetaEnabled; if (chkWebSocketEnabled != null) diff --git a/MosswartMassacre/VitalSharingTracker.cs b/MosswartMassacre/VitalSharingTracker.cs index 6a93b6b..d60f87a 100644 --- a/MosswartMassacre/VitalSharingTracker.cs +++ b/MosswartMassacre/VitalSharingTracker.cs @@ -259,7 +259,11 @@ namespace MosswartMassacre { try { - if (vTank.Instance == null) return; + if (vTank.Instance == null) + { + VerboseLog($"[VitalShare→VTank] SKIP HelperPlayerUpdate ({fromChar}): vTank.Instance is null"); + return; + } var info = new sPlayerInfoUpdate { PlayerID = playerId, @@ -274,6 +278,7 @@ namespace MosswartMassacre maxStam = maxS, }; vTank.Instance.HelperPlayerUpdate(info); + VerboseLog($"[VitalShare→VTank] HelperPlayerUpdate {fromChar} (0x{playerId:X8}) HP={curH}/{maxH} S={curS}/{maxS} M={curM}/{maxM}"); } catch (Exception ex) { _logger?.Log($"[VitalShare] HelperPlayerUpdate error: {ex.Message}"); } }); @@ -320,9 +325,18 @@ namespace MosswartMassacre { try { - if (vTank.Instance == null) return; - if (!CoreManager.Current.Actions.IsValidObject(target)) return; + if (vTank.Instance == null) + { + VerboseLog($"[VitalShare→VTank] SKIP LogCastAttempt (from {fromChar}): vTank.Instance is null"); + return; + } + if (!CoreManager.Current.Actions.IsValidObject(target)) + { + VerboseLog($"[VitalShare→VTank] SKIP LogCastAttempt (from {fromChar}): target 0x{target:X8} not a valid object locally"); + return; + } vTank.Instance.LogCastAttempt(spellId, target, (int)skill); + VerboseLog($"[VitalShare→VTank] LogCastAttempt from {fromChar}: spell={spellId} target=0x{target:X8} skill={(int)skill}"); } catch (Exception ex) { _logger?.Log($"[VitalShare] LogCastAttempt error: {ex.Message}"); } }); @@ -343,9 +357,18 @@ namespace MosswartMassacre { try { - if (vTank.Instance == null) return; - if (!CoreManager.Current.Actions.IsValidObject(target)) return; + if (vTank.Instance == null) + { + VerboseLog($"[VitalShare→VTank] SKIP LogSpellCast (from {fromChar}): vTank.Instance is null"); + return; + } + if (!CoreManager.Current.Actions.IsValidObject(target)) + { + VerboseLog($"[VitalShare→VTank] SKIP LogSpellCast (from {fromChar}): target 0x{target:X8} not a valid object locally"); + return; + } vTank.Instance.LogSpellCast(target, spellId, duration); + VerboseLog($"[VitalShare→VTank] LogSpellCast from {fromChar}: spell={spellId} target=0x{target:X8} duration={duration}ms"); } catch (Exception ex) { _logger?.Log($"[VitalShare] LogSpellCast error: {ex.Message}"); } }); @@ -542,6 +565,7 @@ namespace MosswartMassacre skill = skill, }; _ = WebSocket.SendVitalShareAsync(payload); + VerboseLog($"[VitalShare] SEND share_cast_attempt spell={spellId} target=0x{target:X8} skill={(int)skill}"); } catch (Exception ex) { @@ -603,6 +627,7 @@ namespace MosswartMassacre duration_ms = durationMs, }; _ = WebSocket.SendVitalShareAsync(payload); + VerboseLog($"[VitalShare] SEND share_cast_success spell={spellId} target=0x{target:X8} duration={durationMs}ms"); } catch (Exception ex) { @@ -715,6 +740,24 @@ namespace MosswartMassacre // --- Helpers --- + /// + /// Logs a message routed to the plugin chat window, but ONLY when + /// PluginSettings.VerboseLogging is true. Used to trace every + /// VTank feeding event (HelperPlayerUpdate / LogCastAttempt / + /// LogSpellCast) so the user can verify cross-PC coordination is + /// actually reaching VTank. + /// + private void VerboseLog(string message) + { + try + { + if (!PluginSettings.IsInitialized) return; + if (!PluginSettings.Instance.VerboseLogging) return; + PluginCore.WriteToChat(message); + } + catch { } + } + private string SafeCharacterName() { try { return CoreManager.Current.CharacterFilter.Name ?? ""; } diff --git a/MosswartMassacre/bin/Release/MosswartMassacre.dll b/MosswartMassacre/bin/Release/MosswartMassacre.dll index 70d1e1b..aaa74ff 100644 Binary files a/MosswartMassacre/bin/Release/MosswartMassacre.dll and b/MosswartMassacre/bin/Release/MosswartMassacre.dll differ