package object import "thehouseoficarus/internal/action" type UseInteraction struct { Item string `yaml:"item_id"` Condition *action.Condition `yaml:"condition"` Message string `yaml:"message"` Action *action.NodeAction `yaml:"action"` } type ObjectDef struct { ID string `yaml:"id"` Name string `yaml:"name"` Aliases []string `yaml:"aliases"` Color string `yaml:"color"` Hidden bool `yaml:"hidden"` InRoomDescription string `yaml:"inroom_description"` RemovalItem string `yaml:"removal_item"` Description string `yaml:"description"` Descriptions []ConditionalDesc `yaml:"descriptions,omitempty"` UseInteractions []UseInteraction `yaml:"use_interactions"` StealTable string `yaml:"steal_table"` StealLevel int `yaml:"steal_level"` StealXP int `yaml:"steal_xp"` 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"` Safespot *SafespotConfig `yaml:"safespot,omitempty"` } // ConditionalDesc is a description variant gated by a condition. They are // evaluated in order per-looker; the first whose condition passes (or has no // condition) wins. If a def has Descriptions but none match for a given player, // the object is treated as absent for that player. type ConditionalDesc struct { Text string `yaml:"text"` Condition *action.Condition `yaml:"condition"` } 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) 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 { case d.Gather != nil: return "gather" case d.Talk != nil: return "talk" case d.Use != nil: return "use" case d.Safespot != nil: return "safespot" } return "" }