aboutsummaryrefslogtreecommitdiff
path: root/internal/game/cmd_setplayerflag.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/game/cmd_setplayerflag.go')
-rw-r--r--internal/game/cmd_setplayerflag.go60
1 files changed, 60 insertions, 0 deletions
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 <player_name> <flag_name> [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))
+}