No description
Find a file
smthspec 663db39ab6 Fix server compile failure: script module binding + LogLevel name clash
Root causes from the script log of a failed boot:
- config.cpp bound the 4_World scripts to BOTH gameScriptModule and
  worldScriptModule. Compiling 4_World code inside 3_Game made PlayerBase,
  Container_Base, ActionContinuousBase and ActionData unknown types, which
  cascaded to YALootBoxes_Base and aborted the Game module. Now bound to
  worldScriptModule only.
- Static YALB_ConfigLoader.LogLevel collided with a framework type named
  LogLevel (CommunityFramework/DabsFramework). Renamed to ActiveLogLevel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 23:23:15 +03:00
scripts/4_World Fix server compile failure: script module binding + LogLevel name clash 2026-06-19 23:23:15 +03:00
tools Add tools/Collect-YALootBoxesLogs.ps1 log collector for debugging 2026-06-19 23:07:57 +03:00
.gitignore Phase 1: rename audit complete (LootboxSpawner -> YALootBoxes) 2026-06-19 21:27:38 +03:00
CLAUDE_TASK.md Phase 1: rename audit complete (LootboxSpawner -> YALootBoxes) 2026-06-19 21:27:38 +03:00
config.cpp Fix server compile failure: script module binding + LogLevel name clash 2026-06-19 23:23:15 +03:00
configfiles.readme Phase 3: leveled logging + green cleanups 2026-06-19 21:57:31 +03:00
Prefix.cpp Phase 1: rename audit complete (LootboxSpawner -> YALootBoxes) 2026-06-19 21:27:38 +03:00
README.md Phase 3: leveled logging + green cleanups 2026-06-19 21:57:31 +03:00

YALootBoxes

A DayZ server mod that spawns lockable lootboxes at config-defined locations. Players need a specific held item to attempt opening a box via a hold-to-open action: success unlocks and fills the box; failure rolls one random negative effect. Locked boxes despawn/respawn on a timer so the loot stays fresh; opened boxes despawn a configurable number of minutes after being unlocked.

All settings live in four JSON files auto-generated on first run at $profile:YALootBoxes\:

File Purpose
main_config.json Global tunables (limits, timers, logging)
box_types.json Box definitions: required items, open chance, fail effects
loot_lists.json Per-type loot tables
spawn_locations.json Named world positions and which box type spawns there

Edit the copies under $profile:YALootBoxes\, not the ones inside the PBO. Reference/default versions of all four are in configfiles.readme.

Logging

Logging verbosity is controlled by a single field in main_config.json:

{
  "DebugLogLevel": "INFO"
}

Why a string?

The level is stored as a string in JSON because it is far friendlier for admins hand-editing the file ("DEBUG" reads better than 4). It is parsed once at load time into an integer (YALB_ConfigLoader.LogLevel) so every runtime log call is a cheap integer comparison, not a string compare. Parsing is case-insensitive, and an unrecognised value falls back to INFO so a typo can never silently disable logging.

Levels

Levels are ordered. A message is printed only when the configured level is at or above the message's level:

NONE(0) < ERROR(1) < WARN(2) < INFO(3) < DEBUG(4) < VERBOSE(5)

Level When to use Examples in this mod
NONE Silence all mod logging. —
ERROR The mod cannot do its job; needs admin attention. Routed through ErrorEx() so it stands out in the .RPT. box_types.json / spawn_locations.json missing; an entity class failed to spawn.
WARN Recoverable problem; the mod continues with degraded behaviour. Unknown boxType on a spawn location; loot_lists.json missing (boxes open empty); unknown fail-effect type.
INFO Normal high-level operational milestones. Recommended for production. Manager initialized; config loaded summary; box spawned; box unlocked and filled.
DEBUG Periodic internal state useful when diagnosing behaviour. Per-tick lifecycle summary (removed N, active now M).
VERBOSE Very high-frequency, per-player / per-roll detail. Each proximity message sent; each fail-effect roll resolved.

Setting the level to X enables X and everything more severe. For example DEBUG shows ERROR + WARN + INFO + DEBUG, but not VERBOSE.

A note on VERBOSE

VERBOSE fires on hot paths (proximity messages run every ~1.5s per nearby player; fail-effect rolls run on every failed open). It will flood your .RPT on a populated server and is intended only for active debugging sessions. Leave production servers at INFO (or WARN/ERROR if you want it quieter).

Log code API (for modders)

Log_Error("...");    // ERROR — also ErrorEx() to the .RPT
Log_Warn("...");     // WARN
Log_Info("...");     // INFO
Log_Debug("...");    // DEBUG
Log_Verbose("...");  // VERBOSE

Each prefixes its output as [YALootBoxes][LEVEL] ... and self-gates on the configured level — no need to check the level at the call site.