### 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.