diff options
| author | historia <[not public]> | 2026-06-29 01:57:32 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-06-29 01:57:32 -0400 |
| commit | 72dbe734015916f98020d6a617981956f0509e26 (patch) | |
| tree | 52dbe055604fe37fa995d8dea60a27441102320d /internal | |
| parent | 12ed73f9ff9de1a145683de8a73c170613371979 (diff) | |
| download | thehouseoficarus-72dbe734015916f98020d6a617981956f0509e26.tar.gz | |
fix: room addlocalobj command handles multi-word names and aliases
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/game/cmd_room.go | 45 | ||||
| -rw-r--r-- | internal/game/cmd_room_object.go | 30 |
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) |
