From a3ae1e6aad696f584d138d9363c05dedff136a65 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Sun, 21 Jun 2026 22:19:17 -0400 Subject: feat: safespot system implemented --- internal/object/item.go | 1 + internal/object/object.go | 29 +++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) (limited to 'internal/object') diff --git a/internal/object/item.go b/internal/object/item.go index b0865d6..b90432d 100644 --- a/internal/object/item.go +++ b/internal/object/item.go @@ -91,6 +91,7 @@ type ItemDef struct { PotionEffect string `yaml:"potion_effect"` PotionBonus int `yaml:"potion_bonus"` PotionDuration float64 `yaml:"potion_duration"` + Recoverable bool `yaml:"recoverable"` } type CraftList []CraftDef diff --git a/internal/object/object.go b/internal/object/object.go index 826a315..12e5585 100644 --- a/internal/object/object.go +++ b/internal/object/object.go @@ -24,15 +24,34 @@ type ObjectDef struct { StealSpeed float64 `yaml:"steal_speed"` GuardMob string `yaml:"guard_mob"` - Gather *action.GatherConfig `yaml:"gather,omitempty"` - Talk *action.TalkConfig `yaml:"talk,omitempty"` - Use *action.UseConfig `yaml:"use,omitempty"` + Gather *action.GatherConfig `yaml:"gather,omitempty"` + Talk *action.TalkConfig `yaml:"talk,omitempty"` + Use *action.UseConfig `yaml:"use,omitempty"` + Safespot *SafespotConfig `yaml:"safespot,omitempty"` +} + +type SafespotConfig struct { + Tier int `yaml:"tier"` + MaxBlockSize string `yaml:"max_block_size"` + MaxOccupants int `yaml:"max_occupants"` + UnsafeChance float64 `yaml:"unsafe_chance"` + DecayTicks float64 `yaml:"decay_ticks"` + DecayChance float64 `yaml:"decay_chance"` + RespawnOnHide bool `yaml:"respawn_on_hide"` + RespawnTicks float64 `yaml:"respawn_ticks"` + Levels []SafespotLevel `yaml:"levels"` +} + +type SafespotLevel struct { + Message string `yaml:"message"` + DegradeMessage string `yaml:"degrade_message"` } func (d *ObjectDef) IsGatherable() bool { return d.Gather != nil } func (d *ObjectDef) IsTalkable() bool { return d.Talk != nil } func (d *ObjectDef) IsUsable() bool { return d.Use != nil } -func (d *ObjectDef) IsInteractable() bool { return d.Gather != nil || d.Talk != nil || d.Use != nil } +func (d *ObjectDef) IsSafespot() bool { return d.Safespot != nil } +func (d *ObjectDef) IsInteractable() bool { return d.Gather != nil || d.Talk != nil || d.Use != nil || d.Safespot != nil } func (d *ObjectDef) BehaviorType() string { switch { @@ -42,6 +61,8 @@ func (d *ObjectDef) BehaviorType() string { return "talk" case d.Use != nil: return "use" + case d.Safespot != nil: + return "safespot" } return "" } -- cgit v1.2.3