aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-06-29 01:57:32 -0400
committerhistoria <[not public]>2026-06-29 01:57:32 -0400
commit72dbe734015916f98020d6a617981956f0509e26 (patch)
tree52dbe055604fe37fa995d8dea60a27441102320d /internal
parent12ed73f9ff9de1a145683de8a73c170613371979 (diff)
downloadthehouseoficarus-72dbe734015916f98020d6a617981956f0509e26.tar.gz
fix: room addlocalobj command handles multi-word names and aliases
Diffstat (limited to 'internal')
-rw-r--r--internal/game/cmd_room.go45
-rw-r--r--internal/game/cmd_room_object.go30
2 files changed, 53 insertions, 22 deletions
diff --git a/internal/game/cmd_room.go b/internal/game/cmd_room.go
index 11f919a..24763fa 100644
--- a/internal/game/cmd_room.go
+++ b/internal/game/cmd_room.go
@@ -34,8 +34,14 @@ func (g *Game) executeRoom(sess *net.Session, args []string, rawInput string) {
g.roomSetName(sess, rest)
case "desc":
g.roomSetDesc(sess, rest)
- case "addobj", "remobj", "addlocalobj", "remlocalobj", "hide", "unhide":
+ case "addobj", "remobj", "hide", "unhide":
g.roomObject(sess, action, rest)
+ case "addlocalobj":
+ name, aliases, desc := parseLocalObjArgs(rawInput, "addlocalobj")
+ g.roomAddLocalObj(sess, name, aliases, desc)
+ case "remlocalobj":
+ name, _, _ := parseLocalObjArgs(rawInput, "remlocalobj")
+ g.roomRemLocalObj(sess, name)
case "addmob", "remmob":
g.roomMob(sess, action, rest)
case "addspawn", "remspawn":
@@ -52,8 +58,8 @@ func (g *Game) showRoomHelp(sess *net.Session) {
sess.WriteLine(" room desc <text> — set room description")
sess.WriteLine(" room addobj <object_id> — add a referenced object")
sess.WriteLine(" room remobj <object_id> — remove a referenced object")
- sess.WriteLine(" room addlocalobj <name> <description> — add a local object")
- sess.WriteLine(" room remlocalobj <name> — remove a local object")
+ sess.WriteLine(" room addlocalobj [name, alias...] <description> — add a local object")
+ sess.WriteLine(" room remlocalobj [name]|<name> — remove a local object")
sess.WriteLine(" room hide <name_or_id> — hide all matching objects")
sess.WriteLine(" room unhide <name_or_id> — unhide all matching objects")
sess.WriteLine(" room addmob <mob_id> — add a mob spawn")
@@ -98,6 +104,39 @@ func (g *Game) loadRoomWrite(p *player.Player) (*world.Room, string, error) {
return room, path, nil
}
+func parseLocalObjArgs(rawInput, action string) (name string, aliases []string, desc string) {
+ prefix := "room " + action
+ rest := rawInput
+ if idx := strings.Index(strings.ToLower(rest), prefix); idx >= 0 {
+ rest = strings.TrimSpace(rest[idx+len(prefix):])
+ }
+ if rest == "" {
+ return "", nil, ""
+ }
+ if rest[0] == '[' {
+ closeB := strings.Index(rest, "]")
+ if closeB < 0 {
+ return rest, nil, ""
+ }
+ desc = strings.TrimSpace(rest[closeB+1:])
+ for _, p := range strings.Split(rest[1:closeB], ",") {
+ p = strings.TrimSpace(p)
+ if name == "" {
+ name = p
+ } else if p != "" {
+ aliases = append(aliases, p)
+ }
+ }
+ return name, aliases, desc
+ }
+ fields := strings.Fields(rest)
+ name = fields[0]
+ if len(fields) > 1 {
+ desc = strings.Join(fields[1:], " ")
+ }
+ return name, nil, desc
+}
+
func (g *Game) writeRoom(sess *net.Session, fn func(*world.Room)) {
p := sess.Player
room, path, err := g.loadRoomWrite(p)
diff --git a/internal/game/cmd_room_object.go b/internal/game/cmd_room_object.go
index f682d62..713a8f3 100644
--- a/internal/game/cmd_room_object.go
+++ b/internal/game/cmd_room_object.go
@@ -18,10 +18,6 @@ func (g *Game) roomObject(sess *net.Session, action string, args []string) {
g.roomAddObj(sess, args)
case "remobj":
g.roomRemObj(sess, args)
- case "addlocalobj":
- g.roomAddLocalObj(sess, args)
- case "remlocalobj":
- g.roomRemLocalObj(sess, args)
case "hide":
g.roomHide(sess, args)
case "unhide":
@@ -86,17 +82,14 @@ func (g *Game) roomRemObj(sess *net.Session, args []string) {
sess.WriteLine(fmt.Sprintf("Removed object '%s' from room.", objID))
}
-func (g *Game) roomAddLocalObj(sess *net.Session, args []string) {
- if len(args) < 2 {
- sess.WriteLine("Usage: room addlocalobj <name> <description>")
- return
- }
- name := args[0]
- desc := strings.Join(args[1:], " ")
-
+func (g *Game) roomAddLocalObj(sess *net.Session, name string, aliases []string, desc string) {
normName := world.NormalizeObjectName(name)
if normName == "" {
- sess.WriteLine("Invalid object name.")
+ sess.WriteLine("Usage: room addlocalobj [name] <description>")
+ return
+ }
+ if desc == "" {
+ sess.WriteLine("Usage: room addlocalobj [name] <description>")
return
}
@@ -119,7 +112,7 @@ func (g *Game) roomAddLocalObj(sess *net.Session, args []string) {
Local: &object.ObjectDef{
Name: name,
Description: behavior.DescList{{Text: desc}},
- Aliases: []string{name},
+ Aliases: aliases,
},
})
@@ -129,13 +122,12 @@ func (g *Game) roomAddLocalObj(sess *net.Session, args []string) {
sess.WriteLine(fmt.Sprintf("Added local object '%s' to room.", name))
}
-func (g *Game) roomRemLocalObj(sess *net.Session, args []string) {
- if len(args) == 0 {
- sess.WriteLine("Usage: room remlocalobj <name>")
+func (g *Game) roomRemLocalObj(sess *net.Session, name string) {
+ normName := world.NormalizeObjectName(name)
+ if normName == "" {
+ sess.WriteLine("Usage: room remlocalobj [name]")
return
}
- name := args[0]
- normName := world.NormalizeObjectName(name)
p := sess.Player
room, _, err := g.loadRoomWrite(p)