> For the complete documentation index, see [llms.txt](https://axiomemu.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://axiomemu.gitbook.io/docs/data/plugins/killlog.md).

# Kill Log

PvP Kill Log - records every player-kills-player death with damage, skills and assists, plus the death recap toast

The Kill Log records every death where a player kills a player: who, guild, where, how long the fight took, how much damage each attacker did, which skills and who assisted. Players read it in game in two tabs: **Deaths** (who killed me) and **Kills** (who I killed). Rows are stored in the database, so the log survives logout and restarts.

{% hint style="info" %}
Free and always on. No license module needed. Set `Enabled="0"` to turn it off.
{% endhint %}

## Player Side

| Feature         | How                                                                                                                                         |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Kill Log window | Window Menu (**U**) → **Kill Log**. The entry is only listed while the plugin is on                                                         |
| List            | Deaths / Kills tabs, 20 rows per page, newest first                                                                                         |
| Details         | Click a row: per-attacker HP / SD damage and hits, per-skill totals (crits, excellent hits, biggest hit), and the last 32 hits of the fight |
| Death recap     | A "Killed by ..." card shown to the victim: killer, guild, total damage, top skill and its share, number of assists                         |

## File Location

```
Data/Plugins/KillLog.xml
```

A missing file is not an error: the Kill Log runs **enabled** with the defaults below.

## Dependencies

| Depends On                                 | Purpose                                                                                                                                                     |
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| DataServer                                 | Table `dbo.PvPKillLog`. Run `DataServer/SQL/DatabaseObjects/dbo.PvPKillLog.Table.sql` once. Safe on a live database: it only creates the table when missing |
| [MapManager.xml](/docs/data/mapmanager.md) | `GensBattle` decides which maps count as Gens kills                                                                                                         |
| [Skill.txt](/docs/data/skill.md)           | Skill names shown in the details                                                                                                                            |

The stock `KillLog` table (Name1 / Name2 / KD1 ...) is not used and not touched.

## Configuration Sections

```xml
<KillLog Enabled="1">
    <Settings DeathToast="1" FightTimeoutSec="20" KeepPerChar="50" MinTotalDamage="0"/>
    <Types World="1" Duel="1" Siege="1" Event="1" Gens="1" GuildWar="1"/>
</KillLog>
```

### KillLog

| Attribute | Type | Default | Effect                                                               |
| --------- | ---- | ------- | -------------------------------------------------------------------- |
| `Enabled` | 0/1  | 1       | 0 = nothing recorded, the Window Menu entry and the toast are hidden |

### Settings

| Attribute         | Type | Range | Default | Effect                                                                                                     |
| ----------------- | ---- | ----- | ------- | ---------------------------------------------------------------------------------------------------------- |
| `DeathToast`      | 0/1  | -     | 1       | 1 = show the death recap card to the victim                                                                |
| `FightTimeoutSec` | int  | 5-600 | 20      | A fight ends after this many seconds with no player damage on the victim. A later death starts a new fight |
| `KeepPerChar`     | int  | 1-500 | 50      | Rows kept per character, per tab. Older rows leave that tab                                                |
| `MinTotalDamage`  | int  | 0+    | 0       | Deaths with less total damage (HP + SD, all attackers) are not recorded and get no toast. 0 = record all   |

Out-of-range values are clamped to the nearest limit.

### Types

1 = record this kind of death, 0 = skip it (no row, no toast). All default to 1.

| Attribute  | Kind of death                                                                           |
| ---------- | --------------------------------------------------------------------------------------- |
| `World`    | Open-world PK (anything not listed below)                                               |
| `Duel`     | Both players are in a duel with each other                                              |
| `Event`    | Blood Castle, Devil Square, Chaos Castle, Illusion Temple, Silent map 40 (Custom Arena) |
| `Siege`    | Castle Siege map while the siege is running                                             |
| `GuildWar` | Guild war / Battle Soccer between the two guilds                                        |
| `Gens`     | Players of different Gens families, on a map with `GensBattle` on                       |

A death gets the first type that matches, in this order: Duel, Event, Siege, GuildWar, Gens, World.

## Important Behavior

* **What counts**: only a player killed by a player. A kill by a summon counts as a kill by its owner. Monster kills and suicides are never recorded.
* **Fight window**: the plugin collects player damage on each character. If `FightTimeoutSec` passes with no new hit, the old fight is dropped. On death, everything since the fight started goes into the row.
* **Killer always listed**: even if none of the killer's hits were seen, the killer is added to the attacker list.
* **Limits per fight**: 8 attackers (the rest merge into one "others" entry), 6 skills per attacker (the rest merge into "other skills"), the last 32 hits. Poison / bleed ticks and reflected damage get their own rows.
* **Assists** = number of attackers minus the killer.
* **Two keep flags**: each row is shown to the victim (Deaths) and to the killer (Kills). When a character passes `KeepPerChar` rows in a tab, the oldest row leaves that tab only. The row is **deleted** once both players have dropped it.
* **Privacy**: details can only be read by the killer or the victim of that row.
* **Reload**: `/reload plugins` (or the GameServer Reload menu) re-reads the file. Players online get the new on/off state at once.
* Rows are written through the DataServer write-ahead log, so a DataServer crash does not lose them.
* Header columns in `dbo.PvPKillLog` (names, guilds, class, level, map, X/Y, fight time, total damage, top skill, assists, `KillType`) are plain columns, ready for a website or rankings. `KillType`: 0 world, 1 duel, 2 siege, 3 event, 4 gens, 5 guild war. `Detail` is an internal blob.

## Examples

{% tabs %}
{% tab title="Default (record all)" %}

```xml
<KillLog Enabled="1">
    <Settings DeathToast="1" FightTimeoutSec="20" KeepPerChar="50" MinTotalDamage="0"/>
    <Types World="1" Duel="1" Siege="1" Event="1" Gens="1" GuildWar="1"/>
</KillLog>
```

{% endtab %}

{% tab title="Open-world PK only" %}
No rows for duels, events, siege, gens or guild war. Longer history.

```xml
<KillLog Enabled="1">
    <Settings DeathToast="1" FightTimeoutSec="30" KeepPerChar="200" MinTotalDamage="0"/>
    <Types World="1" Duel="0" Siege="0" Event="0" Gens="0" GuildWar="0"/>
</KillLog>
```

{% endtab %}

{% tab title="No toast, skip one-shots" %}
Log only, no recap card. Deaths under 5000 total damage are skipped.

```xml
<KillLog Enabled="1">
    <Settings DeathToast="0" FightTimeoutSec="20" KeepPerChar="50" MinTotalDamage="5000"/>
    <Types World="1" Duel="1" Siege="1" Event="1" Gens="1" GuildWar="1"/>
</KillLog>
```

{% endtab %}
{% endtabs %}

## Common Issues

{% hint style="warning" %}
**Window opens but stays empty**: the `dbo.PvPKillLog` table is missing. Run `DataServer/SQL/DatabaseObjects/dbo.PvPKillLog.Table.sql`.
{% endhint %}

{% hint style="warning" %}
**No Kill Log entry in the Window Menu**: `Enabled="0"`, or the client did not get the config yet. Relog after turning it on.
{% endhint %}

{% hint style="warning" %}
**A death is missing**: its type is set to 0 in `<Types>`, or its total damage was under `MinTotalDamage`.
{% endhint %}

{% hint style="warning" %}
**One player's earlier damage is missing from the row**: that hit was more than `FightTimeoutSec` seconds before the next one, so it belonged to an older fight. Raise `FightTimeoutSec`.
{% endhint %}
