diff options
| author | historia <[not public]> | 2026-06-25 00:44:47 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-06-25 00:44:47 -0400 |
| commit | 94a06fbbe682701ca4d4bd2a70cd74d8df29c932 (patch) | |
| tree | eb49fb1893e61092138164d419e863ee3fe0d1e2 /internal/game/action_talk.go | |
| parent | 15b7e221b799ef107dec44ecdb294026dfd3d059 (diff) | |
| download | thehouseoficarus-94a06fbbe682701ca4d4bd2a70cd74d8df29c932.tar.gz | |
refactor: replaced map[string]any with typed structs for Data
Diffstat (limited to 'internal/game/action_talk.go')
| -rw-r--r-- | internal/game/action_talk.go | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/internal/game/action_talk.go b/internal/game/action_talk.go index 560b34d..5b3a095 100644 --- a/internal/game/action_talk.go +++ b/internal/game/action_talk.go @@ -20,12 +20,11 @@ func (g *Game) startMobTalk(sess *net.Session, p *player.Player, mob *world.MobI } if node, ok := cfg.Nodes["start"]; ok { - p.ActionState = &ActionState{Type: ActionTalking, TargetName: mob.Name} p.Action = &action.Action{ - Type: "talk", + Type: action.TypeTalk, TargetID: mob.DefID, TargetName: mob.Name, - Data: map[string]any{"node": "start", "talk_cfg": cfg}, + Data: &action.TalkData{Node: "start", Cfg: cfg}, } g.showTalkNode(sess, node) } else { @@ -41,12 +40,11 @@ func (g *Game) startTalk(sess *net.Session, p *player.Player, obj *object.Object } if node, ok := cfg.Nodes["start"]; ok { - p.ActionState = &ActionState{Type: ActionTalking, TargetName: obj.Name} p.Action = &action.Action{ - Type: "talk", + Type: action.TypeTalk, TargetID: obj.ID, TargetName: obj.Name, - Data: map[string]any{"node": "start", "talk_cfg": cfg}, + Data: &action.TalkData{Node: "start", Cfg: cfg}, } g.showTalkNode(sess, node) } else { @@ -68,15 +66,17 @@ func (g *Game) showTalkNode(sess *net.Session, node action.TalkNode) { if v, ok := g.Flags.Get("guard_hostile"); ok && v != nil { g.Flags.Delete("guard_hostile") p := sess.Player - if p != nil && p.Action != nil && p.Action.Data["steal_guard"] == true { - guardMob := g.findGuardInRoom(p.RoomID, "guard") - if guardMob != nil { - sess.State = net.StateGame - g.cancelAction(p) - guardMob.Protected = false - g.startCombat(sess, p, guardMob) + if p != nil && p.Action != nil { + if td, ok := p.Action.Data.(*action.TalkData); ok && td.StealGuard { + guardMob := g.findGuardInRoom(p.RoomID, "guard") + if guardMob != nil { + sess.State = net.StateGame + g.cancelAction(p) + guardMob.Protected = false + g.startCombat(sess, p, guardMob) + } + return } - return } } } @@ -101,7 +101,7 @@ func (g *Game) showTalkNode(sess *net.Session, node action.TalkNode) { func (g *Game) handleTalkInput(sess *net.Session, input string) { p := sess.Player - if p == nil || p.Action == nil || p.Action.Type != "talk" { + if p == nil || p.Action == nil || p.Action.Type != action.TypeTalk { sess.State = net.StateGame g.writePrompt(sess) return @@ -116,20 +116,21 @@ func (g *Game) handleTalkInput(sess *net.Session, input string) { return } - if _, ok := p.Action.Data["estate_directory"].(bool); ok { + if td, ok := p.Action.Data.(*action.TalkData); ok && td.EstateDirectory { g.handleEstateDirectoryTalk(sess, input) return } - cfg, ok := p.Action.Data["talk_cfg"].(*action.TalkConfig) - if !ok || cfg == nil { + td, ok := p.Action.Data.(*action.TalkData) + if !ok || td.Cfg == nil { g.cancelAction(p) sess.State = net.StateGame g.writePrompt(sess) return } + cfg := td.Cfg - nodeKey := p.Action.Data["node"].(string) + nodeKey := td.Node node, ok := cfg.Nodes[nodeKey] if !ok { g.cancelAction(p) @@ -176,7 +177,7 @@ func (g *Game) handleTalkInput(sess *net.Session, input string) { if chosen.Goto != "" { if nextNode, ok := cfg.Nodes[chosen.Goto]; ok { - p.Action.Data["node"] = chosen.Goto + td.Node = chosen.Goto g.showTalkNode(sess, nextNode) return } |
