From a1b6613c6c6a2f8d6e1ecd47e766bd40f92ac295 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Sun, 28 Jun 2026 02:40:30 -0400 Subject: feat: admin accounts, god mode, OLC commands like dig/room, 'inline' objects changed to 'local' objects --- internal/game/cmd_setplayerflag.go | 60 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 internal/game/cmd_setplayerflag.go (limited to 'internal/game/cmd_setplayerflag.go') diff --git a/internal/game/cmd_setplayerflag.go b/internal/game/cmd_setplayerflag.go new file mode 100644 index 0000000..3d0bdbf --- /dev/null +++ b/internal/game/cmd_setplayerflag.go @@ -0,0 +1,60 @@ +package game + +import ( + "fmt" + "strconv" + "strings" + + "thehouseoficarus/internal/net" +) + +func (g *Game) executeSetPlayerFlag(sess *net.Session, args []string, rawInput string) { + if !g.checkAdmin(sess) { + sess.WriteLine("Unknown command.") + return + } + if len(args) < 2 { + sess.WriteLine("Usage: setplayerflag [value]") + return + } + targetName := args[0] + flagName := args[1] + + g.charsMu.Lock() + targetSess, ok := g.loggedInChars[targetName] + g.charsMu.Unlock() + if !ok { + for _, other := range g.Hub.AllSessions() { + if other.Player != nil && strings.EqualFold(other.Player.Name, targetName) { + targetSess = other + break + } + } + } + if targetSess == nil || targetSess.Player == nil { + sess.WriteLine("Player not found.") + return + } + + tp := targetSess.Player + var value any = true + if len(args) > 2 { + valStr := args[2] + switch valStr { + case "true": + value = true + case "false": + value = false + default: + if n, err := strconv.Atoi(valStr); err == nil { + value = n + } else { + value = valStr + } + } + } + + g.setPlayerFlag(tp, flagName, value) + g.AccountStore.SaveCharacter(tp) + sess.WriteLine(fmt.Sprintf("Player flag '%s' set to %v for %s.", flagName, value, tp.Name)) +} -- cgit v1.2.3