Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
VikingStoryteller
Experimental read-only death reporting and exact-creature revenge stories. Install on server and participating clients. No admin powers or automatic announcements.
| Last updated | 16 hours ago |
| Total downloads | 11 |
| Total rating | 0 |
| Categories | Utility AI Generated |
| Dependency string | JacobsValheim-VikingStoryteller-0.1.0 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2350ValheimModding-JsonDotNET
Shared version 13.0.3 of Json.NET from Newtonsoft, net45 package for use in Valheim mods. Maintained by the ValheimModding team.
Preferred version: 13.0.4README
Viking Storyteller
Experimental 0.1.0 for Valheim 1.0.15. Read-only death reporting and exact-creature revenge links for server operators who want to write gameplay recaps. No automatic roasts, chat messages, admin commands, or gameplay changes.
Install
Install Viking Storyteller on the server and every participating player's Thunderstore profile, then restart the server and game. Players without the mod can still join, but missing reporters leave gaps. A client waits for the server collector's handshake before sending death reports. A server without the collector receives at most three harmless handshake attempts per connection; reporting stays inactive.
Dependencies: BepInExPack Valheim 5.4.2350 and JsonDotNET 13.0.4. This package contains only VikingStoryteller.dll, documentation, license and source. It does not include a private admin helper, credentials, player data, or a test plugin. It does not upload reports to Thunderstore or any analytics service.
What it records
When the computer owning a player or creature runs the game's death method, the reporter captures the game's last-hit attacker, victim entity ID, cause type, world/time, and location. The collector resolves creature prefab names and player identities from its own network state. Creature identity is world ID plus network entity ID, not its name or species.
If a creature kills a player and that exact creature is subsequently killed by the same player's new or existing character, the collector emits revenge. If another identified player kills it, it emits avenged_by_teammate. Reports arriving in either order can link, using game time and both source event IDs. Killing a different boar does not count. An unknown attacker stays unknown.
Reports are observations from clients, not anti-cheat proof. The collector checks the connected sender, connection token, world, timestamp, payload limits and current/recent victim ownership. Clients cannot send admin commands, spawn items, teleport people, or edit server settings through this protocol.
Limits
- This initial release has isolated model/protocol checks and a disposable-server native death test. Real multiplayer client-to-server coverage has not yet been verified. Keep normal world and character backups when trying a new mod.
- All participating clients need the reporter to observe combat owned by those clients. Missing reporters, lag, unavailable prefabs, unresolved attackers or other mods replacing death handling can leave gaps.
- Attacker means the game's last-hit attribution. Damage-over-time effects and other mods can make that differ from a simple final weapon hit. Environmental or unknown deaths are not assigned to a guessed creature.
- No continuous damage/DPS, inventory, crafting, chat, biome tracking or automatic narrative generation is provided by this package. It supplies structured death stories for manual review or separate tooling.
- Creature ownership can migrate; a report can be rejected if ownership evidence is no longer available. Removed-entity evidence is retained for 30 seconds. Events older than 120 seconds are rejected.
- Correlation keeps 2,000 death events. Dedup keeps up to 8,192 victim IDs. A world rollback can reuse prior IDs; archive/reset this mod's matching world state after deliberately restoring a world backup if you want a fresh story history.
- Client queues are bounded at 256 events; server queues at 2,048 log lines. The collector accepts at most 256 reports per connection per ten seconds. Overload and sudden shutdown can drop telemetry without affecting gameplay.
Server files
BepInEx/config/VikingStoryteller/ contains:
<world-id>-events.jsonl: death observations and revenge links, one JSON object per line.<world-id>-state.json: persistent dedup/correlation history.status.json: collector health, accepted/rejected/dropped counts and reporting connections.
The current event file rotates at approximately 20 MiB. Ten archives are retained per world. State is saved every 15 seconds and on normal unload; pending event lines flush every two seconds. A crash can lose recent buffered records. Event IDs allow consumers to deduplicate a repeated line after an interrupted write.
These files contain in-game names, platform account identifiers, positions and gameplay events. They remain on the server computer. Server operators should tell their players what they collect and avoid publishing raw files containing account identifiers.
Configuration file: BepInEx/config/JacobsValheim.VikingStoryteller.cfg. Players can turn Send gameplay death reports off; operators can turn Collect gameplay death reports off. Configuration changes take effect on restart. No public service, API key or extra network port is needed.
Source and support
Source is included under source/ with an MIT license. Build against the installed Valheim 1.0.15 managed assemblies, BepInEx and Harmony, plus Newtonsoft.Json from JsonDotNET. Do not redistribute the game's DLLs. This is an experimental small-server tool, not an anti-cheat or moderation system.