From a5d4ead1795882d25da7eda53680d2a84590693d Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Fri, 3 Jul 2026 20:53:00 -0400 Subject: feat: admin map can add new and rename areas. works with empty directories now. --- cmd/mud/main.go | 139 ------------------------------------------------------- cmd/thoi/main.go | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 139 deletions(-) delete mode 100644 cmd/mud/main.go create mode 100644 cmd/thoi/main.go (limited to 'cmd') diff --git a/cmd/mud/main.go b/cmd/mud/main.go deleted file mode 100644 index 23a2ca4..0000000 --- a/cmd/mud/main.go +++ /dev/null @@ -1,139 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "log" - "os" - "os/signal" - "syscall" - - "thehouseoficarus/internal/admin" - "thehouseoficarus/internal/behavior" - "thehouseoficarus/internal/config" - "thehouseoficarus/internal/game" - "thehouseoficarus/internal/net" -) - -func main() { - configPath := flag.String("config", "config.yaml", "path to config file") - flag.Parse() - - dataDir := os.Getenv("DATA_DIR") - if dataDir == "" { - dataDir = "data" - } - - cfg, err := config.Load(*configPath) - if err != nil { - if os.IsNotExist(err) { - log.Printf("config file %s not found, creating with defaults", *configPath) - if err := config.SaveDefault(*configPath); err != nil { - log.Fatalf("failed to create config: %v", err) - } - cfg = config.Default() - } else { - log.Fatalf("failed to load config: %v", err) - } - } - - if cfg.GameConstants.ShopDefaultRestock > 0 { - behavior.ShopDefaultRestock = cfg.GameConstants.ShopDefaultRestock - } - - g := game.New(dataDir, &cfg.DefaultColors, cfg.StartupValidation, cfg.StartingRoom) - g.Ticks.Start(cfg.TickLength) - defer g.Ticks.Stop() - - g.Ticks.Subscribe(1, func() bool { - g.MoveTick() - g.ProcessQueuedCommands() - g.EnterSeqTick() - g.TriggerSeqTick() - g.TransientMobTick() - g.World.Tick() - g.MobStore.Tick() - g.RegenTick() - g.DisconnectTick() - g.WanderTick() - g.SharedDepletionTick() - g.FireTick() - g.AdvanceActions() - g.TechTick() - g.ConsumeTick() - g.BroadcastRespawns() - g.VisualTick() - g.SneakTick() - g.FarmTick() - g.BuffTick() - g.SafespotTick() - g.HazardTick() - return true - }) - - server, err := net.NewServer(cfg) - if err != nil { - log.Fatalf("failed to start server: %v", err) - } - g.SetHub(server.Hub()) - - junkItems := []string{"solarjunk", "ecojunk", "hydrojunk", "biojunk", "chaosjunk", - "cosmicjunk", "naturejunk", "bloodjunk", "deathjunk", "lawjunk", "scrap"} - for _, j := range junkItems { - g.World.AddGroundItem(1, j, 500) - } - - if cfg.AdminHTTP.Enabled { - adminSrv, err := admin.NewServer(cfg, false, g.AccountStore, g.World, g.ItemStore, g.ObjectStore, g.MobStore, dataDir) - if err != nil { - log.Fatalf("failed to start admin HTTP server: %v", err) - } - go func() { - if err := adminSrv.ListenAndServe(); err != nil { - log.Printf("admin HTTP server error: %v", err) - } - }() - log.Printf("Admin HTTP listening on :%d", cfg.AdminHTTP.Port) - } - - if cfg.AdminHTTPS.Enabled { - adminSrv, err := admin.NewServer(cfg, true, g.AccountStore, g.World, g.ItemStore, g.ObjectStore, g.MobStore, dataDir) - if err != nil { - log.Fatalf("failed to start admin HTTPS server: %v", err) - } - go func() { - if err := adminSrv.ListenAndServe(); err != nil { - log.Printf("admin HTTPS server error: %v", err) - } - }() - log.Printf("Admin HTTPS listening on :%d", cfg.AdminHTTPS.Port) - } - - if cfg.Telnet.Enabled { - log.Printf("Telnet listening on :%d", cfg.Telnet.Port) - } - if cfg.TelnetTLS.Enabled { - log.Printf("Telnet+TLS listening on :%d", cfg.TelnetTLS.Port) - } - if cfg.HTTP.Enabled { - log.Printf("HTTP listening on :%d", cfg.HTTP.Port) - } - if cfg.HTTPS.Enabled { - log.Printf("HTTPS listening on :%d", cfg.HTTPS.Port) - } - fmt.Println() // blank line after log prefixes - - sigCh := make(chan os.Signal, 1) - signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) - - go func() { - <-sigCh - log.Println("Shutting down...") - g.Ticks.Stop() - os.Exit(0) - }() - - if err := server.ListenAndServe(g.HandleSession); err != nil { - log.Fatalf("server error: %v", err) - } -} diff --git a/cmd/thoi/main.go b/cmd/thoi/main.go new file mode 100644 index 0000000..23a2ca4 --- /dev/null +++ b/cmd/thoi/main.go @@ -0,0 +1,139 @@ +package main + +import ( + "flag" + "fmt" + "log" + "os" + "os/signal" + "syscall" + + "thehouseoficarus/internal/admin" + "thehouseoficarus/internal/behavior" + "thehouseoficarus/internal/config" + "thehouseoficarus/internal/game" + "thehouseoficarus/internal/net" +) + +func main() { + configPath := flag.String("config", "config.yaml", "path to config file") + flag.Parse() + + dataDir := os.Getenv("DATA_DIR") + if dataDir == "" { + dataDir = "data" + } + + cfg, err := config.Load(*configPath) + if err != nil { + if os.IsNotExist(err) { + log.Printf("config file %s not found, creating with defaults", *configPath) + if err := config.SaveDefault(*configPath); err != nil { + log.Fatalf("failed to create config: %v", err) + } + cfg = config.Default() + } else { + log.Fatalf("failed to load config: %v", err) + } + } + + if cfg.GameConstants.ShopDefaultRestock > 0 { + behavior.ShopDefaultRestock = cfg.GameConstants.ShopDefaultRestock + } + + g := game.New(dataDir, &cfg.DefaultColors, cfg.StartupValidation, cfg.StartingRoom) + g.Ticks.Start(cfg.TickLength) + defer g.Ticks.Stop() + + g.Ticks.Subscribe(1, func() bool { + g.MoveTick() + g.ProcessQueuedCommands() + g.EnterSeqTick() + g.TriggerSeqTick() + g.TransientMobTick() + g.World.Tick() + g.MobStore.Tick() + g.RegenTick() + g.DisconnectTick() + g.WanderTick() + g.SharedDepletionTick() + g.FireTick() + g.AdvanceActions() + g.TechTick() + g.ConsumeTick() + g.BroadcastRespawns() + g.VisualTick() + g.SneakTick() + g.FarmTick() + g.BuffTick() + g.SafespotTick() + g.HazardTick() + return true + }) + + server, err := net.NewServer(cfg) + if err != nil { + log.Fatalf("failed to start server: %v", err) + } + g.SetHub(server.Hub()) + + junkItems := []string{"solarjunk", "ecojunk", "hydrojunk", "biojunk", "chaosjunk", + "cosmicjunk", "naturejunk", "bloodjunk", "deathjunk", "lawjunk", "scrap"} + for _, j := range junkItems { + g.World.AddGroundItem(1, j, 500) + } + + if cfg.AdminHTTP.Enabled { + adminSrv, err := admin.NewServer(cfg, false, g.AccountStore, g.World, g.ItemStore, g.ObjectStore, g.MobStore, dataDir) + if err != nil { + log.Fatalf("failed to start admin HTTP server: %v", err) + } + go func() { + if err := adminSrv.ListenAndServe(); err != nil { + log.Printf("admin HTTP server error: %v", err) + } + }() + log.Printf("Admin HTTP listening on :%d", cfg.AdminHTTP.Port) + } + + if cfg.AdminHTTPS.Enabled { + adminSrv, err := admin.NewServer(cfg, true, g.AccountStore, g.World, g.ItemStore, g.ObjectStore, g.MobStore, dataDir) + if err != nil { + log.Fatalf("failed to start admin HTTPS server: %v", err) + } + go func() { + if err := adminSrv.ListenAndServe(); err != nil { + log.Printf("admin HTTPS server error: %v", err) + } + }() + log.Printf("Admin HTTPS listening on :%d", cfg.AdminHTTPS.Port) + } + + if cfg.Telnet.Enabled { + log.Printf("Telnet listening on :%d", cfg.Telnet.Port) + } + if cfg.TelnetTLS.Enabled { + log.Printf("Telnet+TLS listening on :%d", cfg.TelnetTLS.Port) + } + if cfg.HTTP.Enabled { + log.Printf("HTTP listening on :%d", cfg.HTTP.Port) + } + if cfg.HTTPS.Enabled { + log.Printf("HTTPS listening on :%d", cfg.HTTPS.Port) + } + fmt.Println() // blank line after log prefixes + + sigCh := make(chan os.Signal, 1) + signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) + + go func() { + <-sigCh + log.Println("Shutting down...") + g.Ticks.Stop() + os.Exit(0) + }() + + if err := server.ListenAndServe(g.HandleSession); err != nil { + log.Fatalf("server error: %v", err) + } +} -- cgit v1.2.3