No description
Find a file
smthspec 41c8e29cea Drop vending machine interactable (no targetable proxy object)
Hospital vending machines resolve to target.GetObject()==null, so they can't be
detected or cleanly overridden. Ship sink + fridge + med cabinet (all working).
VendingTable loot kept for future re-add / reuse on a detectable furniture.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 14:12:01 +03:00
scripts Drop vending machine interactable (no targetable proxy object) 2026-06-19 14:12:01 +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 Drop vending machine interactable (no targetable proxy object) 2026-06-19 14:12:01 +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.

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));