mirror of
https://github.com/Kvan7/Exiled-Exchange-2.git
synced 2026-07-09 16:27:32 +00:00
228 lines
11 KiB
Markdown
228 lines
11 KiB
Markdown
---
|
|
title: Client Log Parser
|
|
---
|
|
|
|
Parses the game's log file (`Client.txt`) and puts the useful portion of its contents into a standardized `jsonl|ndjson` format, each line is a JSON object. Each line will **always** contain 3 standardized fields and a selection of additional fields depending on the type of log entry. This file currently (`0.15.0`) should be treated as an **UNORDERED** collection of log entries. It is most likely to be chronologically ordered, but this is not guaranteed.
|
|
|
|
## Example
|
|
|
|
```jsonl
|
|
{"ts": 1697000000000, "ms": 12347, "type": "load-zone", "zone": "G1_4", "areaLevel": 4, "seed": 3044246516}
|
|
{"ts": 1697000001000, "ms": 13584, "type": "player-death", "charName": "CharacterNameHere"}
|
|
{"ts": 1697000002000, "ms": 14488, "type": "permanent-bonus", "charName": "CharacterNameHere", "permanentBonus": "+10% to [Resistances|Cold Resistance]"}
|
|
```
|
|
|
|
## API Reference
|
|
|
|
### Standard Fields
|
|
|
|
| Key | Type | Extra Information |
|
|
| ------ | -------- | -------------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `string` | The type of log entry, see below for options |
|
|
|
|
### Log Entry Types
|
|
|
|
#### `log`
|
|
|
|
All not denoted log entries. These are filtered out by the parser so should never be seen.
|
|
|
|
| Key | Type | Extra Information |
|
|
| ------ | -------- | -------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `log` | The type of log entry |
|
|
|
|
#### `game-start`
|
|
|
|
When the game has been launched.
|
|
|
|
| Key | Type | Extra Information |
|
|
| ------ | ------------ | -------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `game-start` | The type of log entry |
|
|
|
|
#### `login`
|
|
|
|
When a player logs into a character.
|
|
|
|
| Key | Type | Extra Information |
|
|
| ------ | -------- | -------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `login` | The type of log entry |
|
|
|
|
#### `load-zone`
|
|
|
|
When a player loads into a zone.
|
|
|
|
| Key | Type | Extra Information |
|
|
| ----------- | ----------- | -------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `load-zone` | The type of log entry |
|
|
| `zone` | `string` | Zone Id |
|
|
| `areaLevel` | `number` | The area level of the zone |
|
|
| `seed` | `number` | The seed of the zone |
|
|
|
|
```jsonl
|
|
{"ts": 1697000000000, "ms": 12347, "type": "load-zone", "zone": "G1_4", "areaLevel": 4, "seed": 3044246516}
|
|
```
|
|
|
|
#### `level-up`
|
|
|
|
When a character levels up.
|
|
|
|
| Key | Type | Extra Information |
|
|
| ----------- | ---------- | -------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `level-up` | The type of log entry |
|
|
| `charName` | `string` | The name of the character |
|
|
| `charClass` | `string` | The class of the character |
|
|
| `level` | `number` | The new level of the character |
|
|
|
|
```jsonl
|
|
{"ts": 1697000000000, "ms": 12347, "type": "level-up", "charName": "CharacterNameHere", "charClass": "Warrior", "level": 85}
|
|
```
|
|
|
|
#### `game-version`
|
|
|
|
Game version, helpful for switching routing or log parsing logic
|
|
|
|
| Key | Type | Extra Information |
|
|
| --------- | -------------- | ------------------------------------------------ |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `game-version` | The type of log entry |
|
|
| `version` | `string` | The game version string, poe2 is prefixed by 4.* |
|
|
|
|
```jsonl
|
|
{"ts": 1697000000000, "ms": 12347, "type": "game-version", "version": "4.5.0a"}
|
|
```
|
|
|
|
#### `alt-tab`
|
|
|
|
| Key | Type | Extra Information |
|
|
| ------------- | --------- | --------------------------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `alt-tab` | The type of log entry |
|
|
| `gameFocused` | `boolean` | false when the game lost focus, true when it gained focus |
|
|
|
|
```jsonl
|
|
{"ts": 1697000000000, "ms": 12347, "type": "alt-tab", "gameFocused": false}
|
|
```
|
|
|
|
#### `npc`
|
|
|
|
Npc dialog lines, must be ones that show up in client chat window. So quest states are usually not included in this.
|
|
|
|
| Key | Type | Extra Information |
|
|
| --------- | -------- | -------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `npc` | The type of log entry |
|
|
| `npcName` | `string` | The name of the NPC |
|
|
| `message` | `string` | The NPC's message |
|
|
|
|
```jsonl
|
|
{"ts": 1697000000000, "ms": 12347, "type": "npc", "npcName": "NpcNameHere", "message": "Message here"}
|
|
```
|
|
|
|
#### `player-death`
|
|
|
|
Entries for non-hardcore viable characters
|
|
|
|
| Key | Type | Extra Information |
|
|
| ---------- | -------------- | -------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `player-death` | The type of log entry |
|
|
| `charName` | `string` | The name of the character |
|
|
|
|
```jsonl
|
|
{"ts": 1697000001000, "ms": 13584, "type": "player-death", "charName": "CharacterNameHere"}
|
|
```
|
|
|
|
#### `passive-tree`
|
|
|
|
Timestamps for when allocating nodes on passive tree
|
|
|
|
| Key | Type | Extra Information |
|
|
| ---------- | -------------- | --------------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `passive-tree` | The type of log entry |
|
|
| `allocate` | `boolean` | Whether the node was allocated or deallocated |
|
|
| `nodeId` | `string` | The id of the passive node |
|
|
| `nodeName` | `string` | The name of the passive node |
|
|
|
|
```jsonl
|
|
{"ts": 1697000000000, "ms": 12347, "type": "passive-tree", "allocate": true, "nodeId": "duelist_mercenary_notable2", "nodeName": "Remorseless"}
|
|
```
|
|
|
|
#### `permanent-bonus`
|
|
|
|
Campaign granted permanent bonuses, such as from Beira, Candlemass, or clicking objectives.
|
|
|
|
| Key | Type | Extra Information |
|
|
| ---------------- | ----------------- | -------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `permanent-bonus` | The type of log entry |
|
|
| `charName` | `string` | The name of the character |
|
|
| `permanentBonus` | `string` | The bonus string |
|
|
|
|
```jsonl
|
|
{"ts": 1697000002000, "ms": 14488, "type": "permanent-bonus", "charName": "CharacterNameHere", "permanentBonus": "+10% to [Resistances|Cold Resistance]"}
|
|
```
|
|
|
|
#### `skill-point`
|
|
|
|
Specific type of permanent bonus for skill points, Mighty Silverfist or completing areas of corruption on the atlas
|
|
|
|
| Key | Type | Extra Information |
|
|
| ----------- | ------------------------------------------------------------------------------------------------- | -------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `skill-point` | The type of log entry |
|
|
| `points` | `number` | Number of points, mostly 1 or 2 |
|
|
| `pointType` | `passive\|weapon-set\|atlas\|map-boss\|arbiter-boss\|abyss\|ritual\|delirium\|expedition\|breach` | type of passive point |
|
|
|
|
```jsonl
|
|
{"ts": 1697000000000, "ms": 12347, "type": "skill-point", "points": 1, "pointType": "passive"}
|
|
```
|
|
|
|
#### `map-nav`
|
|
|
|
What the foreground scene is changed to, may indicate loading or map/atlas opening
|
|
|
|
| Key | Type | Extra Information |
|
|
| --------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `map-nav` | The type of log entry |
|
|
| `mapName` | `string` | The name of the map navigated to, or `(null)` for loading screen, `(unknown)` for main menu, `Act X` for fullscreen map, `Atlas` for opening map device |
|
|
|
|
```jsonl
|
|
{"ts": 1697000000000, "ms": 12347, "type": "map-nav", "mapName": "Act 1"}
|
|
```
|
|
|
|
#### `afk`
|
|
|
|
Entry for when the player becomes afk, or stops being afk, time of afk can be assumed to be ~`15 minutes + isAfk:false - isAfk:true` time
|
|
|
|
| Key | Type | Extra Information |
|
|
| ------- | --------- | ------------------------------------------------ |
|
|
| `ts` | `number` | Timestamp in milliseconds |
|
|
| `ms` | `number` | Computer power on time in milliseconds |
|
|
| `type` | `afk` | The type of log entry |
|
|
| `isAfk` | `boolean` | Whether player is starting or stopping being afk |
|
|
|
|
```jsonl
|
|
{"ts": 1697000000000, "ms": 12347, "type": "afk", "isAfk": true}
|
|
```
|