### DPS Server Configuration in XML Source: https://github.com/neowutran/shinrameter/wiki/Private-DPS-server Example XML configuration for adding private DPS servers. Includes settings for upload, allowed areas, and server time URLs. ```xml false https://moongourd.com/dpsmeter_data.php https://moongourd.com/api/shinra/whitelist https://moongourd.com/api/shinra/servertime false http://teralogs.com/api/logs http://teralogs.com/api/logs/a/allow https://teralogs.com/ ``` -------------------------------- ### Enrage Timer Notification Setup Source: https://github.com/neowutran/shinrameter/wiki/Events Configure notifications for when an enrage timer is ending. This includes setting up balloon messages and text-to-speech alerts. ```xml 8888888 ``` -------------------------------- ### Abnormality Event with Stack Filter Source: https://github.com/neowutran/shinrameter/wiki/Events Example of an abnormality event configured to trigger only when a specific stack count is met. This can be applied to 'abnormality missing' or 'abnormality added' events. ```xml 101300 ``` -------------------------------- ### Configure Abnormality Stack Count for Events Source: https://github.com/neowutran/shinrameter/wiki/Patch-note Set a required stack count for abnormality events to trigger. This allows for more granular control over when notifications appear, for example, only when a debuff reaches a certain number of stacks. ```xml 101300 ``` -------------------------------- ### Accessing and Using In-Memory SQLite Database Source: https://context7.com/neowutran/shinrameter/llms.txt Demonstrates how to access the singleton Database instance, insert combat records, and query various statistics like entity damage, player performance, and skill breakdowns. Ensure the Database instance is accessed correctly before performing operations. ```csharp // Access the singleton instance var db = Database.Database.Instance; // Insert a skill record db.Insert( amount: 50000, // Damage/heal amount type: Database.Database.Type.Damage, // Damage, Heal, Mana, or Counter target: bossEntity, // Target entity source: playerEntity, // Source entity skillId: 12345, // Skill ID hotdot: false, // Is this a HoT/DoT tick critic: true, // Was this a critical hit time: DateTime.UtcNow.Ticks, // Timestamp petSource: null, // Pet entity if applicable direction: HitDirection.Back // Hit direction ); // Get all entities that have been damaged List entities = db.AllEntity(); // Get global information for a specific boss encounter EntityInformation entityInfo = db.GlobalInformationEntity( bossEntity, // Target NPC entity timedEncounter: false, // Use timed encounter mode timerBasedOnAggro: true // Start timer on aggro vs first hit ); Console.WriteLine($"Total Damage: {entityInfo.TotalDamage}"); Console.WriteLine($"Fight Duration: {(entityInfo.EndTime - entityInfo.BeginTime) / TimeSpan.TicksPerSecond}s"); // Get player damage information for a boss List playerDamage = db.PlayerDamageInformation(bossEntity); foreach (var pd in playerDamage) { Console.WriteLine($"{pd.Source.Name}: {pd.Amount} damage ({pd.CritRate}% crit)"); } // Get player damage within a time range playerDamage = db.PlayerDamageInformation(beginTime, endTime); // Get player heal information List heals = db.PlayerHealInformation(beginTime, endTime); foreach (var heal in heals) { Console.WriteLine($"{heal.Source.Name}: {heal.CritRate}% heal crit rate"); } // Get detailed skill breakdown Skills skills = db.GetSkills(beginTime, endTime); // Skills contains: SourceTargetSkills, TargetSourceSkills, SourceTargetIdSkill, SourceIdSkill // Delete all data and reconnect db.DeleteAll(); // Delete data for a specific entity db.DeleteEntity(bossEntity); ``` -------------------------------- ### Access Configuration and Data with BasicTeraData Source: https://context7.com/neowutran/shinrameter/llms.txt Utilize BasicTeraData singleton to access game configuration, databases (skills, monsters, images), and shared settings. Load region-specific data and access various databases like SkillDatabase, MonsterDatabase, and HotDotDatabase. ```csharp // Access the singleton instance var teraData = BasicTeraData.Instance; // Access configuration var windowData = teraData.WindowData; Console.WriteLine($"WinPcap enabled: {windowData.Winpcap}"); Console.WriteLine($"Party only mode: {windowData.PartyOnly}"); Console.WriteLine($"Excel export: {windowData.Excel}"); // Access hotkey configuration var hotkeys = teraData.HotkeysData; // Configured in resources/config/hotkeys.xml // Access server database var servers = teraData.Servers; string serverName = servers.GetServerName(serverId); // Load region-specific data TeraData regionData = teraData.DataForRegion("EU"); // Access skill database (after region data loaded) var skillDb = teraData.SkillDatabase; var skill = skillDb.GetOrNull(playerClass, skillId); Console.WriteLine($"Skill: {skill?.Name}"); // Access monster database var monsterDb = teraData.MonsterDatabase; var monster = monsterDb.GetOrNull(huntingZoneId, templateId); Console.WriteLine($"Monster: {monster?.Name}, Boss: {monster?.Boss}"); // Access buff/debuff database var hotDotDb = teraData.HotDotDatabase; var buff = hotDotDb.Get(abnormalityId); Console.WriteLine($"Buff: {buff?.Name}, Type: {buff?.Type}"); // Access image database for icons var imageDb = teraData.ImageDatabase; // Log errors (with optional remote reporting) BasicTeraData.LogError("Error message", local: false, debug: true); ``` -------------------------------- ### Configure Hotkeys with XML Source: https://context7.com/neowutran/shinrameter/llms.txt Defines hotkey configurations using XML, including key bindings and associated actions like resetting data or copying combat logs. Supports customizable copy/paste templates. ```xml False False False Delete True False False Delete False False False Home True False False PageUp False True False End
Damage Done @ {encounter} {timer} {partyDps} {enrage}:\
[{class}] {name}: {damage_percentage} ({damage_dealt}) | Crit: {crit_rate} | {global_dps}\ [{class}] {name}: {debuff_list}\ 4
damage_percentage descending 12
True False False End
Damage Taken @ {encounter} {timer}:\
[{class}] {name}: Hits: {hits_received} = {damage_received}; Death {deaths} = {death_duration}\
hits_received descending
``` -------------------------------- ### Configure Encounter Copy Templates Source: https://github.com/neowutran/shinrameter/wiki/Home Define custom copy-paste templates for damage reports in resources/config/hotkeys.xml. ```xml True False False End
Damage Taken @ {encounter} {timer}:\
[{class}] {name}: Hits: {hits_received} = {damage_received}; Death {deaths} = {death_duration} Aggro {aggro} = {aggro_duration}\ [{class}] {name}: Hits: {hits_received} = {damage_received}; Death {deaths} = {death_duration} Aggro {aggro} = {aggro_duration}\ 4
hits_received descending
False True False End
Damage Done @ {encounter} {timer} {partyDps} {enrage}:\
[{class}] {name}: {damage_percentage} ({damage_dealt}) | Crit: {crit_rate} | {global_dps}\ [{class}] {name}: {debuff_list}\ 4
damage_percentage descending
``` -------------------------------- ### Basic Text to Speech Configuration Source: https://github.com/neowutran/shinrameter/wiki/Events Use this for simple spoken notifications. The 'text' attribute is mandatory. ```xml ``` -------------------------------- ### Configure UI Language Source: https://github.com/neowutran/shinrameter/wiki/Home Set the UI language in resources/config/window.xml using Language Culture Names. ```xml Auto ``` -------------------------------- ### Integrate with Remote DPS Server Source: https://context7.com/neowutran/shinrameter/llms.txt Configures and utilizes the DpsServer class to upload encounter data, sync time, and manage glyph builds. ```csharp // Create a DPS server instance var serverData = new DpsServerData { HostName = "moongourd.com", UploadUrl = new Uri("https://moongourd.com/api/shinra/upload"), AllowedAreaUrl = new Uri("https://moongourd.com/api/shinra/whitelist"), GlyphUrl = new Uri("https://moongourd.com/api/shinra/glyph"), Token = "your-auth-token", Username = "your-username", Enabled = true }; var dpsServer = new DpsServer(serverData, anonymousUpload: false); // Check if a dungeon/boss is allowed for upload and send data EncounterBase encounterData = /* generated stats */; bool success = dpsServer.CheckAndSendFightData(encounterData, bossEntity); if (success) { Console.WriteLine("Fight data uploaded successfully"); } // Send glyph build data bool glyphSent = dpsServer.SendGlyphData(); // Fetch allowed area IDs from server dpsServer.FetchAllowedAreaId(); // Get server time difference for synchronization long timeDiff = dpsServer.FetchServerTime(bossEntity); // Default allowed areas (fallback when server unavailable) var defaultAreas = DpsServer.DefaultAreaAllowed; // Contains: AreaId (dungeon ID) and BossIds (specific bosses) ``` -------------------------------- ### Exporting Combat Data Source: https://context7.com/neowutran/shinrameter/llms.txt Shows how to export combat statistics to various destinations like Excel and JSON, and how to configure DPS servers for uploads. Manual and automated export methods are available. ```csharp // Export destinations (can be combined with flags) DataExporter.Dest exportDest = DataExporter.Dest.Excel | DataExporter.Dest.Json; // Manual export for current encounter DataExporter.ManualExport( PacketProcessor.Instance.Encounter, // Current boss entity PacketProcessor.Instance.AbnormalityStorage, // Buff/debuff data exportDest // Export destinations ); // Automatic export triggered on boss death (called internally) DataExporter.AutomatedExport(despawnMessage, abnormalityStorage); // Export glyph build to configured DPS servers DataExporter.ExportGlyph(); // Configure DPS servers for upload DataExporter.DpsServers = new List { DpsServer.NeowutranAnonymousServer, // Anonymous statistics server new DpsServer(customServerData, false) // Custom server with auth }; // Request export through the processor (async) PacketProcessor.Instance.NeedToExport = DataExporter.Dest.Excel; ``` -------------------------------- ### Add Server IP Override for VPN/Proxy Source: https://github.com/neowutran/shinrameter/wiki/Home If your VPN/Proxy is not working with ShinraMeter, add a line to the 'config/server-overrides.txt' file to manually specify the server IP address and a description. This is useful for directing traffic through specific VPN endpoints. ```text xxx.xxx.xxx.xxx KR VPN ``` -------------------------------- ### Enable Excel Export Source: https://github.com/neowutran/shinrameter/wiki/Home Enable or disable Excel file generation in resources/config/window.xml. ```xml true ``` -------------------------------- ### Database - In-Memory SQLite Storage Source: https://context7.com/neowutran/shinrameter/llms.txt Provides an in-memory SQLite storage for combat data, supporting efficient queries for damage statistics, skill breakdowns, and player performance metrics. ```APIDOC ## Database - In-Memory SQLite Storage ### Description Provides an in-memory SQLite storage for combat data, supporting efficient queries for damage statistics, skill breakdowns, and player performance metrics. ### Methods - **Instance**: Access the singleton instance of the Database. - **Insert**: Inserts a combat record (damage, heal, mana, counter) into the database. - **AllEntity**: Retrieves a list of all entity IDs that have been involved in combat. - **GlobalInformationEntity**: Gets global information for a specific boss encounter. - **PlayerDamageInformation**: Retrieves player damage dealt information, either for a specific boss or within a time range. - **PlayerHealInformation**: Retrieves player heal dealt information within a time range. - **GetSkills**: Retrieves a detailed skill breakdown within a specified time range. - **DeleteAll**: Deletes all data from the database and reconnects. - **DeleteEntity**: Deletes data associated with a specific entity. ### Parameters for Insert Method - **amount** (int) - Required - Damage/heal amount. - **type** (Database.Database.Type) - Required - Type of record (Damage, Heal, Mana, or Counter). - **target** (Entity) - Required - Target entity. - **source** (Entity) - Required - Source entity. - **skillId** (int) - Required - Skill ID. - **hotdot** (bool) - Required - Indicates if this is a HoT/DoT tick. - **critic** (bool) - Required - Indicates if this was a critical hit. - **time** (long) - Required - Timestamp in Ticks format. - **petSource** (Entity) - Optional - Pet entity if applicable. - **direction** (HitDirection) - Required - Direction of the hit. ### Parameters for GlobalInformationEntity Method - **targetNPC** (Entity) - Required - The target NPC entity. - **timedEncounter** (bool) - Optional - Use timed encounter mode. Defaults to false. - **timerBasedOnAggro** (bool) - Optional - Start timer on aggro vs first hit. Defaults to true. ### Parameters for PlayerDamageInformation Method - **targetNPC** (Entity) - Optional - The target NPC entity to filter damage dealt to. - **beginTime** (long) - Optional - The beginning of the time range (in Ticks). - **endTime** (long) - Optional - The end of the time range (in Ticks). ### Parameters for PlayerHealInformation Method - **beginTime** (long) - Optional - The beginning of the time range (in Ticks). - **endTime** (long) - Optional - The end of the time range (in Ticks). ### Parameters for GetSkills Method - **beginTime** (long) - Optional - The beginning of the time range (in Ticks). - **endTime** (long) - Optional - The end of the time range (in Ticks). ### Parameters for DeleteEntity Method - **entity** (Entity) - Required - The entity for which to delete data. ### Response Example (GlobalInformationEntity) ```json { "TotalDamage": 1500000, "BeginTime": 16788864000000000, "EndTime": 16788864600000000 } ``` ### Response Example (PlayerDamageInformation) ```json [ { "Source": {"Name": "Player1"}, "Amount": 500000, "CritRate": 25.5 } ] ``` ### Response Example (PlayerHealInformation) ```json [ { "Source": {"Name": "Player1"}, "Amount": 100000, "CritRate": 15.0 } ] ``` ### Response Example (GetSkills) ```json { "SourceTargetSkills": [], "TargetSourceSkills": [], "SourceTargetIdSkill": [], "SourceIdSkill": [] } ``` ``` -------------------------------- ### Advanced Text to Speech Configuration Source: https://github.com/neowutran/shinrameter/wiki/Events Configure voice gender, age, culture, position, volume, and rate for more specific speech output. Omit any parameter except 'text' if not needed. ```xml ``` -------------------------------- ### PHP Input Stream for POST Data Source: https://github.com/neowutran/shinrameter/wiki/Private-DPS-server Demonstrates how to retrieve the raw POST request body in PHP, typically used for receiving DPS meter data. ```php $entityBody = file_get_contents('php://input'); ``` -------------------------------- ### Music Notification Configuration Source: https://github.com/neowutran/shinrameter/wiki/Events Configures sound notification using an MP3 file. Specify the file path, volume (0-100), and duration in milliseconds. ```xml ``` -------------------------------- ### Disable Transparency for Window Source Source: https://github.com/neowutran/shinrameter/wiki/Home To display ShinraMeter as a separate window source in streaming software like OBS, disable transparency by modifying the window.xml configuration file. ```xml false ``` -------------------------------- ### Text to Speech Configuration Source: https://github.com/neowutran/shinrameter/wiki/Events Configure spoken text notifications with various voice and speech parameters. The 'text' parameter is mandatory. ```APIDOC ## Text to Speech ### Description Configure spoken text notifications with various voice and speech parameters. The 'text' parameter is mandatory. ### Method Not Applicable (Configuration via XML) ### Endpoint Not Applicable (Configuration via XML) ### Parameters #### XML Attributes - **text** (string) - Required - The text content to be spoken. Ensure the voice supports the character set of the text. - **voice_gender** (string) - Optional - Gender of the voice ('Female', 'Male', 'Neutral'). Defaults to UI culture settings. - **voice_age** (string) - Optional - Age of the voice ('Child', 'Teen', 'Adult', 'Senior'). Defaults to UI culture settings. - **culture** (string) - Optional - Localization of the voice (e.g., 'en-US'). Should match the UI culture. - **voice_position** (integer) - Optional - Zero-based index of the desired voice if multiple are installed. Defaults to 0. - **volume** (integer) - Optional - Speech volume (0-100). Defaults to 30. - **rate** (integer) - Optional - Speech rate (-10 to +10). Defaults to 0. ### Request Example ```xml ``` ### Request Example (Complex) ```xml ``` ### Response Not Applicable (Configuration via XML) ### Error Handling - Omit any parameter except 'text' to use default values. ``` -------------------------------- ### Manage Boss HP Bar with HudManager Source: https://context7.com/neowutran/shinrameter/llms.txt Use HudManager to track and display boss HP bars. Add, update, and remove bosses, and monitor their enrage status, runemarks, and buffs. Access the singleton instance via HudManager.Instance. ```csharp // Access the singleton instance var hudManager = HudManager.Instance; // Add a boss to the HUD hudManager.AddBoss(bossEntity); // Update boss HP from change event hudManager.UpdateBoss(creatureChangeHpMessage); // Update boss from gage info packet (includes total HP) hudManager.AddOrUpdateBoss(bossGageInfoMessage); // Remove boss from HUD on despawn hudManager.RemoveBoss(despawnNpcMessage); // Update runemark count hudManager.UpdateRunemarks(weakPointMessage); // Access current bosses collection (observable) var bosses = hudManager.CurrentBosses; foreach (var boss in bosses.ToSyncArray()) { Console.WriteLine($"{boss.Name}: {boss.CurrentHP}/{boss.MaxHP} ({boss.CurrentPercentage:P})"); Console.WriteLine($"Enraged: {boss.Enraged}, Runemarks: {boss.Runmarks}"); // Access boss buffs/debuffs foreach (var buff in boss.Buffs.ToSyncArray()) { Console.WriteLine($" {buff.Buff.Name}: {buff.DurationLeft}ms remaining, {buff.Stacks} stacks"); } } // Dispose all bosses (cleanup) hudManager.CurrentBosses.DisposeAll(); ``` -------------------------------- ### PacketProcessor Singleton and Event Handling Source: https://context7.com/neowutran/shinrameter/llms.txt Access the singleton instance of PacketProcessor to subscribe to connection and UI update events. Use this to manage combat statistics, reset data, toggle click-through mode, and exit the application. ```csharp // Access the singleton instance var processor = PacketProcessor.Instance; // Subscribe to connection events processor.Connected += (serverName) => { Console.WriteLine($"Connected to server: {serverName}"); }; // Subscribe to UI update events with combat statistics processor.TickUpdated += (UiUpdateMessage message) => { var stats = message.StatsSummary; var entityInfo = stats.EntityInformation; // Access total damage and fight duration Console.WriteLine($"Boss: {entityInfo.Entity?.Info.Name}"); Console.WriteLine($"Total Damage: {entityInfo.TotalDamage}"); Console.WriteLine($"Duration: {entityInfo.Interval / TimeSpan.TicksPerSecond}s"); // Iterate through player damage statistics foreach (var playerDamage in stats.PlayerDamageDealt) { var player = playerDamage.Source; Console.WriteLine($"{player.Name} ({player.Class}): {playerDamage.Amount} damage, {playerDamage.CritRate}% crit"); } }; // Reset all combat data processor.NeedToReset = true; // Reset only current encounter processor.NeedToResetCurrent = true; // Toggle click-through mode for the overlay processor.SwitchClickThrou(true); // Cleanly exit the application processor.Exit(); ``` -------------------------------- ### Stack Export Format Source: https://github.com/neowutran/shinrameter/wiki/Patch-note JSON structure for exporting stack uptime data. Stack 0 represents total uptime, and individual stacks are only exported if maxstack is greater than 1. ```json [ [id, [[stack_n, uptime], [stack_n+1, uptime], [...]]], [5555, [[0, 100], [1, 55], [2, 45]]], [1234, [[0, 95], [3, 25], [5, 20], [10, 50]]] ] ``` -------------------------------- ### Capture Network Packets with TeraSniffer Source: https://context7.com/neowutran/shinrameter/llms.txt Manages the singleton TeraSniffer instance to monitor game connections, process packet queues, and handle logging. ```csharp // Access the singleton instance var sniffer = TeraSniffer.Instance; // Enable/disable packet capture sniffer.Enabled = true; // Subscribe to connection events sniffer.NewConnection += (Server server) => { Console.WriteLine($"Connected to {server.Name} ({server.Region})"); }; sniffer.EndConnection += () => { Console.WriteLine("Disconnected from server"); }; sniffer.Warning += (string message) => { Console.WriteLine($"Sniffer warning: {message}"); }; // Access queued packets for processing while (sniffer.Packets.TryDequeue(out Message packet)) { // Process packet through MessageFactory var message = messageFactory.Create(packet); // Handle specific message types... } // Clear all pending packets (used when pausing/resetting) sniffer.ClearPackets(); // Enable packet logging for debugging sniffer.EnableMessageStorage = true; // Get stored packets and disable logging Queue storedPackets = sniffer.GetPacketsLogsAndStop(); // Force cleanup on disconnect issues sniffer.CleanupForcefully(); // Check connection state bool isConnected = sniffer.Connected; ``` -------------------------------- ### Buff and Debuff Detail Format Source: https://github.com/neowutran/shinrameter/wiki/Patch-note JSON structure for exporting buff and debuff details. These arrays coexist with legacy uptime structures for backward compatibility. ```json [[abnormalityId, stackCount, uptime], [abnormalityId, stackCount, uptime], ..., [abnormalityId, stackCount, uptime]] ``` -------------------------------- ### Format and Export Combat Stats Source: https://context7.com/neowutran/shinrameter/llms.txt Utilizes the CopyPaste module to generate formatted strings for clipboard export or in-game chat pasting. ```csharp // Generate formatted copy string from combat stats var copyResult = CopyPaste.Copy( statsSummary, // StatsSummary with player damage/heal data skills, // Skills breakdown abnormals, // Abnormality storage (buffs/debuffs) timedEncounter, // Whether using timed encounter mode copyKey // CopyKey with template configuration ); // copyResult.Item1 = paste string for game chat // copyResult.Item2 = clipboard string (monospaced) string pasteToGame = copyResult.Item1; string clipboardText = copyResult.Item2; // Paste text to TERA game window CopyPaste.Paste(pasteToGame); // Copy inspect command to clipboard (localized by region) CopyPaste.CopyInspect("PlayerName"); // Results in: "/inspect PlayerName" (or localized equivalent) // Template placeholders available in CopyKey: // Header/Footer: {encounter}, {timer}, {partyDps}, {enrage}, {debuff_list} // Content: {name}, {fullname}, {class}, {damage_dealt}, {damage_percentage}, // {dps}, {global_dps}, {crit_rate}, {crit_damage_rate}, {biggest_crit}, // {damage_received}, {hits_received}, {deaths}, {death_duration}, // {aggro}, {aggro_duration}, {slaying}, {debuff_list} ``` -------------------------------- ### DamageTracker for Combat Event Management Source: https://context7.com/neowutran/shinrameter/llms.txt Utilize the DamageTracker singleton to manually update boss targets, delete entity data, reset tracked information, and retrieve the source entity of a skill. This tracker is crucial for maintaining encounter state. ```csharp // Access the singleton instance var tracker = DamageTracker.Instance; // Manually update the current boss target NpcEntity bossEntity = /* obtained from EntityTracker */; tracker.UpdateCurrentBoss(bossEntity); // Delete all data for a specific entity tracker.DeleteEntity(bossEntity); // Reset all tracked data tracker.Reset(); // Get the source entity for a skill (handles pets/projectiles) EntityId skillSourceId = /* from skill result */; Entity sourceEntity = tracker.GetEntity(skillSourceId); if (sourceEntity is UserEntity player) { Console.WriteLine($"Skill from player: {player.Name}"); } else if (sourceEntity is NpcEntity npc) { Console.WriteLine($"Skill from NPC: {npc.Info.Name}"); } // Process a skill result (called internally by packet processing) // SkillResult contains: Source, Target, Damage, IsCritical, IsHeal, etc. tracker.Update(skillResult); ``` -------------------------------- ### DataExporter - Export Combat Data Source: https://context7.com/neowutran/shinrameter/llms.txt Handles exporting combat statistics to various destinations including Excel files, JSON files, and online DPS tracking servers. ```APIDOC ## DataExporter - Export Combat Data ### Description Handles exporting combat statistics to various destinations including Excel files, JSON files, and online DPS tracking servers. ### Methods - **ManualExport**: Manually exports combat data for the current encounter. - **AutomatedExport**: Automatically exports combat data, typically triggered on boss death. - **ExportGlyph**: Exports glyph build information to configured DPS servers. ### Parameters for ManualExport Method - **encounter** (Entity) - Required - The current boss entity for the encounter. - **abnormalityStorage** (AbnormalityStorage) - Required - Buff/debuff data. - **destinations** (DataExporter.Dest) - Required - Export destinations (can be combined using flags like `DataExporter.Dest.Excel | DataExporter.Dest.Json`). ### Parameters for AutomatedExport Method - **despawnMessage** (string) - Required - Message associated with the despawn event. - **abnormalityStorage** (AbnormalityStorage) - Required - Buff/debuff data. ### Properties - **Dest** (Enum) - Enum representing export destinations: `Excel`, `Json`, `DpsServers`. - **DpsServers** (List) - A list of DPS servers to upload data to. ### Usage Examples #### Manual Export ```csharp DataExporter.ManualExport( PacketProcessor.Instance.Encounter, PacketProcessor.Instance.AbnormalityStorage, DataExporter.Dest.Excel | DataExporter.Dest.Json ); ``` #### Automated Export (Internal Use) ```csharp DataExporter.AutomatedExport(despawnMessage, abnormalityStorage); ``` #### Export Glyph Build ```csharp DataExporter.ExportGlyph(); ``` #### Configuring DPS Servers ```csharp DataExporter.DpsServers = new List { DpsServer.NeowutranAnonymousServer, new DpsServer(customServerData, false) // Example with custom server data }; ``` #### Triggering Export via Packet Processor ```csharp PacketProcessor.Instance.NeedToExport = DataExporter.Dest.Excel; ``` ``` -------------------------------- ### Global Event Priority Configuration Source: https://github.com/neowutran/shinrameter/wiki/Events Sets the priority for an event, determining which notification is shown if multiple events trigger simultaneously. Higher numbers indicate greater importance. ```xml priority="5" ``` -------------------------------- ### Area & Boss Whitelist Configuration Source: https://github.com/neowutran/shinrameter/wiki/Private-DPS-server Defines allowed areas and bosses for DPS data. An empty BossIds array permits all bosses within an area. ```json [{"AreaId":953, "BossIds":[]},{"AreaId":950, "BossIds":[1000,2000,3000,4000]}] ``` -------------------------------- ### Beep Notification Configuration Source: https://github.com/neowutran/shinrameter/wiki/Events Configures sound notification using beeps. Allows setting frequency and duration for each beep, with support for silence and delayed beeps. ```xml ``` -------------------------------- ### Abnormality Event Configuration Source: https://context7.com/neowutran/shinrameter/llms.txt XML configuration for triggering notifications based on abnormality events. Supports various triggers like 'Added', 'MissingDuringFight', and 'Ending', with options for target, rewarn timeouts, and blacklisting specific areas. ```xml 10153099 Boss Enraged! enrage.mp3 302051 Traverse Cut missing! 10153099 Enrage ending in 5 seconds 0 {skill_id} reset! ``` -------------------------------- ### Ignore Classes Configuration Source: https://github.com/neowutran/shinrameter/wiki/Events Attribute to disable abnormality events for specific character classes. Separate multiple classes with commas. ```xml ignore_classes="Priest,Mystic" ``` -------------------------------- ### Notify Specific User Source: https://github.com/neowutran/shinrameter/wiki/Home Notify a specific user by prefixing their name with '@'. This will trigger a popup and sound notification. ```text @Yukikoo ``` -------------------------------- ### Abnormality Event Configuration Source: https://github.com/neowutran/shinrameter/wiki/Events Defines a basic abnormality event with notification actions. Customize 'remaining_seconds_before_trigger', 'rewarn_timeout_seconds', 'trigger', 'target', 'stack', and notification message content. ```xml 10154030 ``` -------------------------------- ### Area Boss Blacklist Configuration Source: https://github.com/neowutran/shinrameter/wiki/Events Disables an event for specific areas or bosses. Use 'area_id' for entire areas or 'boss_id' for individual bosses. ```xml ``` -------------------------------- ### Add Cooldown Reset Event Source: https://github.com/neowutran/shinrameter/wiki/Events Configure a cooldown reset event to trigger notifications when a specific skill's cooldown is reset. Supports custom messages and beeps. Use skill_id="0" to trigger on any skill reset. ```xml ``` -------------------------------- ### Notify Everyone in Channel Source: https://github.com/neowutran/shinrameter/wiki/Home Notify all members within the current channel (party, guild, raid, or private) by using '@@'. This functionality is limited to these specific channel types. ```text @@ ``` -------------------------------- ### Enrage Notifier Configuration Source: https://github.com/neowutran/shinrameter/wiki/Events Configure enrage notifications, including alerts for when an enrage ability is ending. This includes options for visual balloons and text-to-speech alerts. ```APIDOC ## Enrage Notifier ### Description Configure enrage notifications, including alerts for when an enrage ability is ending. This includes options for visual balloons and text-to-speech alerts. ### Method Not Applicable (Configuration via XML) ### Endpoint Not Applicable (Configuration via XML) ### Parameters #### XML Attributes for Abnormality - **active** (boolean) - Required - Whether the abnormality notification is active. - **priority** (integer) - Required - Priority level of the notification. - **ingame** (boolean) - Required - Whether to show the notification in-game. - **rewarn_timeout_seconds** (integer) - Required - Time in seconds before re-warning. - **remaining_seconds_before_trigger** (integer) - Required - Time in seconds before the enrage trigger. - **trigger** (string) - Required - The trigger condition (e.g., 'Ending'). - **target** (string) - Required - The target of the enrage (e.g., 'Boss'). #### Nested Abnormality List - **abnormality** (integer) - Required - List of abnormality IDs to monitor. #### Actions - Notify ##### Balloon Notification - **title_text** (string) - Required - Title text for the balloon notification. - **body_text** (string) - Required - Body text for the balloon notification. - **display_time** (integer) - Required - Duration in milliseconds to display the balloon. ##### Text-to-Speech Notification - **text** (string) - Required - Text to be spoken. Can include variables like {abnormality_name} and {time_left}. - **voice_gender** (string) - Optional - Gender of the voice ('Female', 'Male', 'Neutral'). - **voice_age** (string) - Optional - Age of the voice ('Child', 'Teen', 'Adult', 'Senior'). - **culture** (string) - Optional - Localization of the voice (e.g., 'en-US'). - **voice_position** (integer) - Optional - Index of the desired voice. - **volume** (integer) - Optional - Speech volume. - **rate** (integer) - Optional - Speech rate. ### Request Example ```xml 8888888 ``` ### Response Not Applicable (Configuration via XML) ### Error Handling - Corrupted event files can be restored by deleting them; ShinraMeter will recreate them with default settings. ``` -------------------------------- ### Blacklist Area/Boss IDs for Events Source: https://github.com/neowutran/shinrameter/wiki/Patch-note Specify bosses or areas where a specific event should not be triggered by adding this XML structure to the event's configuration. This is useful for disabling events in specific raid encounters or dungeons. ```xml ``` -------------------------------- ### AbnormalityEvent Class Structure Source: https://context7.com/neowutran/shinrameter/llms.txt Defines the structure for abnormality events in C#. Use this class to programmatically define or interpret abnormality event configurations. ```csharp // Event trigger types: // - Added: When abnormality is applied // - Removed: When abnormality ends // - MissingDuringFight: When abnormality is missing during combat // - Ending: When abnormality is about to expire (configurable seconds) // Event target types: // - Self: Meter user // - Party: Party members // - Boss: Current boss // - MyBoss: Boss last hit by meter user // AbnormalityEvent class structure public class AbnormalityEvent : Event { public Dictionary Ids { get; set; } // Abnormality IDs with stack requirements public List Types { get; set; } // Filter by buff types public AbnormalityTargetType Target { get; set; } // Self, Party, Boss, MyBoss public AbnormalityTriggerType Trigger { get; set; } // Added, Removed, Missing, Ending public int RemainingSecondBeforeTrigger { get; set; } // For Ending trigger public int RewarnTimeoutSeconds { get; set; } // Minimum time between warnings } ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.