feat: wire up character stats timer, ServerDispatch, and login send
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
655bfd5163
commit
1fdae96262
1 changed files with 86 additions and 1 deletions
|
|
@ -64,6 +64,7 @@ namespace MosswartMassacre
|
|||
internal static Timer updateTimer;
|
||||
private static Timer vitalsTimer;
|
||||
private static System.Windows.Forms.Timer commandTimer;
|
||||
private static Timer characterStatsTimer;
|
||||
private static readonly Queue<string> pendingCommands = new Queue<string>();
|
||||
public static bool RareMetaEnabled { get; set; } = true;
|
||||
|
||||
|
|
@ -182,6 +183,8 @@ namespace MosswartMassacre
|
|||
CoreManager.Current.WorldFilter.CreateObject += OnInventoryCreate;
|
||||
CoreManager.Current.WorldFilter.ReleaseObject += OnInventoryRelease;
|
||||
CoreManager.Current.WorldFilter.ChangeObject += OnInventoryChange;
|
||||
// Subscribe to server messages for allegiance/luminance/title data
|
||||
CoreManager.Current.EchoFilter.ServerDispatch += EchoFilter_ServerDispatch;
|
||||
// Initialize VVS view after character login
|
||||
ViewManager.ViewInit();
|
||||
|
||||
|
|
@ -251,7 +254,8 @@ namespace MosswartMassacre
|
|||
CoreManager.Current.WorldFilter.CreateObject -= OnInventoryCreate;
|
||||
CoreManager.Current.WorldFilter.ReleaseObject -= OnInventoryRelease;
|
||||
CoreManager.Current.WorldFilter.ChangeObject -= OnInventoryChange;
|
||||
|
||||
// Unsubscribe from server dispatch
|
||||
CoreManager.Current.EchoFilter.ServerDispatch -= EchoFilter_ServerDispatch;
|
||||
|
||||
// Stop and dispose of the timers
|
||||
if (updateTimer != null)
|
||||
|
|
@ -284,6 +288,15 @@ namespace MosswartMassacre
|
|||
questStreamingTimer = null;
|
||||
}
|
||||
|
||||
// Stop and dispose character stats timer
|
||||
if (characterStatsTimer != null)
|
||||
{
|
||||
characterStatsTimer.Stop();
|
||||
characterStatsTimer.Elapsed -= OnCharacterStatsUpdate;
|
||||
characterStatsTimer.Dispose();
|
||||
characterStatsTimer = null;
|
||||
}
|
||||
|
||||
// Dispose quest manager
|
||||
if (questManager != null)
|
||||
{
|
||||
|
|
@ -403,6 +416,34 @@ namespace MosswartMassacre
|
|||
WriteToChat($"[ERROR] Quest streaming initialization failed: {ex.Message}");
|
||||
}
|
||||
|
||||
// Initialize character stats streaming
|
||||
try
|
||||
{
|
||||
CharacterStats.Init();
|
||||
|
||||
// Start 10-minute character stats timer
|
||||
characterStatsTimer = new Timer(600000); // 10 minutes
|
||||
characterStatsTimer.Elapsed += OnCharacterStatsUpdate;
|
||||
characterStatsTimer.AutoReset = true;
|
||||
characterStatsTimer.Start();
|
||||
|
||||
// Send initial stats after 5-second delay (let CharacterFilter populate)
|
||||
var initialDelay = new Timer(5000);
|
||||
initialDelay.AutoReset = false;
|
||||
initialDelay.Elapsed += (s, args) =>
|
||||
{
|
||||
CharacterStats.CollectAndSend();
|
||||
((Timer)s).Dispose();
|
||||
};
|
||||
initialDelay.Start();
|
||||
|
||||
WriteToChat("[OK] Character stats streaming initialized (10-min interval)");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
WriteToChat($"[ERROR] Character stats initialization failed: {ex.Message}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#region Quest Streaming Methods
|
||||
|
|
@ -1161,6 +1202,50 @@ namespace MosswartMassacre
|
|||
}
|
||||
}
|
||||
|
||||
private static void OnCharacterStatsUpdate(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
CharacterStats.CollectAndSend();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
WriteToChat($"[CharStats] Timer error: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private void EchoFilter_ServerDispatch(object sender, NetworkMessageEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (e.Message.Type == 0xF7B0) // Game Event
|
||||
{
|
||||
int eventId = (int)e.Message["event"];
|
||||
|
||||
if (eventId == 0x0020) // Allegiance info
|
||||
{
|
||||
CharacterStats.ProcessAllegianceInfoMessage(e);
|
||||
}
|
||||
else if (eventId == 0x0013) // Login Character (properties)
|
||||
{
|
||||
CharacterStats.ProcessCharacterPropertyData(e);
|
||||
}
|
||||
else if (eventId == 0x0029) // Titles list
|
||||
{
|
||||
CharacterStats.ProcessTitlesMessage(e);
|
||||
}
|
||||
else if (eventId == 0x002b) // Set title
|
||||
{
|
||||
CharacterStats.ProcessSetTitleMessage(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
WriteToChat($"[CharStats] ServerDispatch error: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private void CalculateKillsPerInterval()
|
||||
{
|
||||
double minutesElapsed = (DateTime.Now - statsStartTime).TotalMinutes;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue