diff options
Diffstat (limited to 'internal/game/game.go')
| -rw-r--r-- | internal/game/game.go | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/internal/game/game.go b/internal/game/game.go index 320304f..acd2924 100644 --- a/internal/game/game.go +++ b/internal/game/game.go @@ -52,6 +52,7 @@ type Game struct { Hub *net.Hub Flags *FlagStore Combat *combat.Tracker + TriggerStore *world.TriggerStore queue *CommandQueue safespot *SafespotManager ValidationConfig config.ValidationConfig @@ -84,6 +85,7 @@ func New(dataDir string, colorConfig *config.ColorsConfig, valConfig config.Vali }, Flags: NewFlagStore(), Combat: combat.NewTracker(), + TriggerStore: world.NewTriggerStore(), queue: NewCommandQueue(), safespot: NewSafespotManager(), ValidationConfig: valConfig, @@ -97,6 +99,7 @@ func New(dataDir string, colorConfig *config.ColorsConfig, valConfig config.Vali g.LoadMods() g.LoadTechs() g.buildCraftIndex() + g.seedRoomTriggers() g.ValidateAndLog() return g } @@ -116,6 +119,9 @@ func (g *Game) SetHub(hub *net.Hub) { } } }) + g.Flags.OnChange(func(name string, value any) { + g.TriggerStore.FireWorld(name, value) + }) } func (g *Game) HandleSession(sess *net.Session, input string) { @@ -334,6 +340,18 @@ func (g *Game) buildCraftIndex() { g.CraftIndex.Build(items) } +func (g *Game) seedRoomTriggers() { + g.TriggerStore.LoadGlobal(g.DataDir) + roomIndex := g.World.RoomIndex() + for id := range roomIndex { + room, err := g.World.LoadRoom(id) + if err != nil || len(room.Triggers) == 0 { + continue + } + g.TriggerStore.SeedRoomTriggers(id, room.Triggers) + } +} + type pendingDepletion struct { instanceKey string objDefID string |
