No description
Find a file
smthspec 5a07c85416 Rebuild interaction layer on @YAProxy (1.29-working)
Replace the ZenProxyFramework dependency (broken on 1.29) with @YAProxy, our
self-contained proxy framework. Actions now extend YAProxyActionBase:

- Search / RepairSink / GatherWater resolve the targeted furniture proxy by
  keyword and use the synced world position from YAProxy
- Confirmed proxy names from live test: case_sink_a, fridge, lekarnicka
  (vending defaulted to 'sodamachine' pending confirmation)
- Registry lookup matches proxy names as substrings (handles '.001' suffix)
- Sink repaired-state + search/water cooldowns tracked server-side, keyed by
  proxy world position / player UID (in-memory, reset on restart per v1 spec)
- Repair on Wrench/PipeWrench, GatherWater on Bottle_Base (item-based, load-
  order safe); Search on PlayerBase

requiredAddons: YAProxy. Loot tables / settings JSON unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 09:58:00 +03:00
scripts Rebuild interaction layer on @YAProxy (1.29-working) 2026-06-19 09:58:00 +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 Rebuild interaction layer on @YAProxy (1.29-working) 2026-06-19 09:58:00 +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, fridge, and vending machine 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/inventory 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)

Classname Action Loot table
StaticObj_Furniture_case_sink_a Repair → Gather Water —
StaticObj_Furniture_lekarnicka Search MedTable
StaticObj_Furniture_fridge Search FoodTable
StaticObj_Furniture_vending_machine Search VendingTable

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