package game import ( "fmt" "os" "strconv" "gopkg.in/yaml.v3" "thehouseoficarus/internal/net" "thehouseoficarus/internal/world" ) func (g *Game) roomSpawn(sess *net.Session, action string, args []string) { switch action { case "addspawn": g.roomAddSpawn(sess, args) case "remspawn": g.roomRemSpawn(sess, args) } } func (g *Game) roomAddSpawn(sess *net.Session, args []string) { if len(args) == 0 { sess.WriteLine("Usage: room addspawn [quantity] [respawn_ticks]") return } itemID := args[0] if _, err := g.ItemStore.Load(itemID); err != nil { sess.WriteLine(fmt.Sprintf("Item '%s' not found in data/items/.", itemID)) return } quantity := 1 respawnTicks := float64(0) if len(args) >= 2 { if n, err := strconv.Atoi(args[1]); err == nil && n > 0 { quantity = n } } if len(args) >= 3 { if n, err := strconv.ParseFloat(args[2], 64); err == nil && n >= 0 { respawnTicks = n } } p := sess.Player room, _, err := g.loadRoomWrite(p) if err != nil { sess.WriteLine(fmt.Sprintf("Error loading room: %v", err)) return } for _, s := range room.ItemSpawns { if s.ID == itemID { sess.WriteLine(fmt.Sprintf("Item spawn '%s' already exists in this room.", itemID)) return } } room.ItemSpawns = append(room.ItemSpawns, world.SpawnDef{ ID: itemID, Quantity: quantity, RespawnTicks: respawnTicks, }) path, _ := g.World.GetRoomPath(p.RoomID) data, _ := yaml.Marshal(room) os.WriteFile(path, data, 0644) sess.WriteLine(fmt.Sprintf("Added item spawn '%s' x%d (respawn: %.0f ticks) to room.", itemID, quantity, respawnTicks)) } func (g *Game) roomRemSpawn(sess *net.Session, args []string) { if len(args) == 0 { sess.WriteLine("Usage: room remspawn ") return } itemID := args[0] p := sess.Player room, _, err := g.loadRoomWrite(p) if err != nil { sess.WriteLine(fmt.Sprintf("Error loading room: %v", err)) return } found := false filtered := room.ItemSpawns[:0] for _, s := range room.ItemSpawns { if s.ID == itemID { found = true } else { filtered = append(filtered, s) } } if !found { sess.WriteLine(fmt.Sprintf("Item spawn '%s' not found in this room.", itemID)) return } room.ItemSpawns = filtered path, _ := g.World.GetRoomPath(p.RoomID) data, _ := yaml.Marshal(room) os.WriteFile(path, data, 0644) sess.WriteLine(fmt.Sprintf("Removed item spawn '%s' from room.", itemID)) }