From 09d325dcf5e779eab5550d3fd3377bde50101428 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Wed, 8 Jul 2026 19:59:14 -0400 Subject: feat: unify on use, on look, and on kill. all support same conditions/actions now. --- internal/world/trigger.go | 65 +++++++++-------------------------------------- 1 file changed, 12 insertions(+), 53 deletions(-) (limited to 'internal/world/trigger.go') diff --git a/internal/world/trigger.go b/internal/world/trigger.go index e31a5f9..e7f3b75 100644 --- a/internal/world/trigger.go +++ b/internal/world/trigger.go @@ -1,61 +1,20 @@ package world -import ( - "gopkg.in/yaml.v3" -) +import "thehouseoficarus/internal/behavior" + +// SpawnMobConfig is an alias for the behavior.SpawnMobConfig so callers that +// historically referenced world.SpawnMobConfig continue to compile. +type SpawnMobConfig = behavior.SpawnMobConfig type TriggerDef struct { - ID string `yaml:"id"` - OnPlayerFlag string `yaml:"on_player_flag"` - OnGlobalFlag string `yaml:"on_global_flag"` - Value any `yaml:"value"` - Room int `yaml:"room"` - Steps []TriggerStep `yaml:"steps"` + ID string `yaml:"id"` + OnPlayerFlag string `yaml:"on_player_flag"` + OnGlobalFlag string `yaml:"on_global_flag"` + Value any `yaml:"value"` + Room int `yaml:"room"` + Steps []behavior.StepAction `yaml:"steps"` } func (t *TriggerDef) IsPlayerFlagTrigger() bool { return t.OnPlayerFlag != "" } -func (t *TriggerDef) IsGlobalFlagTrigger() bool { return t.OnGlobalFlag != "" } - -type TriggerStep struct { - Delay int `yaml:"delay"` - Message string `yaml:"message"` - Broadcast string `yaml:"broadcast"` - BroadcastGlobal string `yaml:"broadcast_global"` - SetGlobalFlags map[string]any `yaml:"set_global_flags"` - SetPlayerFlags map[string]any `yaml:"set_player_flags"` - SpawnMob *SpawnMobConfig `yaml:"spawn_mob"` - GiveItem string `yaml:"give_item"` - TakeItem string `yaml:"take_item"` - Teleport int `yaml:"teleport"` - Heal int `yaml:"heal"` - DespawnMob string `yaml:"despawn_mob"` -} - -type SpawnMobConfig struct { - ID string `yaml:"id"` - OwnerOnly bool `yaml:"owner_only"` - DespawnOnLeave bool `yaml:"despawn_on_leave"` - DespawnRooms []int `yaml:"despawn_rooms"` - DespawnTicks float64 `yaml:"despawn_ticks"` -} - -func (s *SpawnMobConfig) UnmarshalYAML(value *yaml.Node) error { - if value.Kind == yaml.ScalarNode { - var id string - if err := value.Decode(&id); err != nil { - return err - } - s.ID = id - return nil - } - type raw SpawnMobConfig - return value.Decode((*raw)(s)) -} - -func (t TriggerStep) IsTimed() bool { - return t.Delay > 0 || len(t.SetGlobalFlags) > 0 || len(t.SetPlayerFlags) > 0 || - t.Message != "" || t.Broadcast != "" || t.BroadcastGlobal != "" || - t.SpawnMob != nil || t.GiveItem != "" || t.TakeItem != "" || - t.Teleport != 0 || t.Heal != 0 || t.DespawnMob != "" -} +func (t *TriggerDef) IsGlobalFlagTrigger() bool { return t.OnGlobalFlag != "" } \ No newline at end of file -- cgit v1.2.3