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> |
||
|---|---|---|
| scripts | ||
| $PBOPREFIX$.txt | ||
| config.cpp | ||
| mod.cpp | ||
| README.md | ||
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@YAProxybefore@YAInteraction(handled viarequiredAddons).
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.VendingTableis 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— theInteractablesregistry and allLootTables.
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));