diff options
Diffstat (limited to 'internal/game/cmd_shop.go')
| -rw-r--r-- | internal/game/cmd_shop.go | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/internal/game/cmd_shop.go b/internal/game/cmd_shop.go index 51d0ab1..d1b0e9c 100644 --- a/internal/game/cmd_shop.go +++ b/internal/game/cmd_shop.go @@ -401,10 +401,8 @@ func (g *Game) leaveShop(sess *net.Session) { g.writePrompt(sess) return } - nodeKey := td.Node - cfg := td.Cfg - node, ok := cfg.Nodes[nodeKey] + node, ok := td.Cfg.Nodes[td.Node] if !ok { sess.State = net.StateGame g.cancelAction(p) @@ -412,20 +410,30 @@ func (g *Game) leaveShop(sess *net.Session) { return } - sess.State = net.StateTalk - visible := 0 - for _, opt := range node.Options { - if opt.Condition != nil && !g.checkCondition(sess, opt.Condition) { - continue + for { + visible := g.visibleOptions(sess, node.Options) + if len(visible) > 0 { + for i, opt := range visible { + sess.WriteLine(fmt.Sprintf(" %d. %s", i+1, opt.Text)) + } + sess.State = net.StateTalk + sess.Write("\nChoice: ") + return + } + + if node.Next != "" { + next, ok := td.Cfg.Nodes[node.Next] + if !ok { + break + } + td.Node = node.Next + node = next + } else { + break } - visible++ - sess.WriteLine(fmt.Sprintf(" %d. %s", visible, opt.Text)) - } - if visible == 0 { - sess.State = net.StateGame - g.cancelAction(p) - g.writePrompt(sess) - return } - sess.Write("\nChoice: ") + + sess.State = net.StateGame + g.cancelAction(p) + g.writePrompt(sess) } |
