No description
Find a file
smthspec 7fb07aac4a Add per-search find-chance and item count to config
YAInteractableEntry gains SearchChance (% chance a search yields anything),
SearchMin/SearchMax (item count on success), replacing the global roll
constants. Search rolls the chance first; on success spawns a random count in
[SearchMin, SearchMax] from the loot table. Defaults: lekarnicka 60% 1-2,
fridge 75% 1-2. Fields have inline defaults so older JSON loads safely.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 14:23:28 +03:00
scripts Add per-search find-chance and item count to config 2026-06-19 14:23:28 +03:00
$PBOPREFIX$.txt Fix mod loading: PBO prefix file + $profile path 2026-06-18 22:29:07 +03:00
config.cpp Rebuild interaction layer on @YAProxy (1.29-working) 2026-06-19 09:58:00 +03:00
mod.cpp Initial commit: YAInteraction DayZ mod 2026-06-18 21:11:55 +03:00
README.md Add per-search find-chance and item count to config 2026-06-19 14:23:28 +03:00

YAInteraction

A DayZ server mod that adds interactable furniture (search for loot) and a two-stage repairable sink (repair, then gather water).

Requires @YAProxy — the furniture are proxies baked into house models, not entities. @YAProxy handles proxy detection + position sync; YAInteraction's actions extend YAProxyActionBase. Load @YAProxy before @YAInteraction (handled via requiredAddons).

Features

  • Searchable furniture — medical cabinet and fridge yield random items from weighted, config-defined loot tables. Per-object cooldown.
  • Repairable sink — repair with a Wrench/PipeWrench, then gather water into a held container. Per-player cooldown, configurable amount.
  • JSON-configured — interactables, loot tables and scalar tunables live in JSON under <ProfileFolder>/YAInteraction/. Defaults are written on first start and read (overriding defaults) on every start after. No target/loot classnames exist anywhere else in the codebase.

Target objects (v1)

Identified by their YAProxy proxy name (substring match):

Proxy Action Loot table
case_sink_a Repair → Gather Water —
lekarnicka Search MedTable
fridge Search FoodTable

Vending machines (vending_machine) are deferred: in tested buildings the proxy exposes no targetable object, so it can't be detected. VendingTable is still defined for when that's solved or its loot is moved to another furniture.

Configuration files

Generated on first start under <ProfileFolder>/YAInteraction/:

  • settings.json — scalar tunables: WaterAmountMin, WaterAmountMax, SinkPlayerCooldownSec, ObjectCooldownSec.
  • interactables.json — the Interactables registry and all LootTables. Each search entry has SearchChance (% chance a search yields anything), SearchMin/SearchMax (item count on a successful search), CooldownSec, and a LootTableName.

Delete a file and restart to regenerate it from code defaults.

Structure

config.cpp / mod.cpp          mod + script-module registration, metadata
scripts/3_Game                shared game-layer placeholder (v2 hooks)
scripts/4_World/YAInteraction
  Config/YAInteractionSettings.c     serializable scalar settings (settings.json)
  Config/YAInteractionData.c         serializable registry + loot tables (interactables.json)
  Config/YAInteractionConfigLoader.c JSON load/save + code defaults (singleton)
  Config/YAInteractionConfig.c       compile-time constants only
  YALootTableManager.c               weighted pick + item spawning
  Entities/YAInteractionManager.c    registry lookup + repair state
  Actions/                           Search / RepairSink / GatherWater actions
  YAInteractionInit.c                modded BuildingBase action injection
scripts/5_Mission/YAInteraction
  YAInteractionMissionInit.c         modded MissionServer.OnInit -> load config

Notes

  • Config is loaded server-side at MissionServer.OnInit (before any player connects). Clients fall back to in-code defaults for action injection.
  • Cooldowns and sink repair state are tracked in memory and reset on server restart. CF persistence hooks are marked with // TODO (v2).
  • All item and tool classnames are verified against the base game data.

Adding a new interactable

Edit interactables.json (add to Interactables, and a LootTables entry if it searches), then restart. To change the built-in defaults, add one line to BuildDefaultData() in YAInteractionConfigLoader.c:

d.Interactables.Insert(MakeEntry("Your_Classname", YAInteractionConfig.ACTION_SEARCH, YAInteractionConfig.TABLE_FOOD, Settings.ObjectCooldownSec));