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