diff options
| author | historia <[not public]> | 2026-07-01 16:37:45 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-07-01 16:37:45 -0400 |
| commit | e6b4cb9f5816c6ee239233bc85f74ee446a161c2 (patch) | |
| tree | 1c3bf71c8b7f095baae989afe5e33183a7ed3929 /internal/game/act_talk.go | |
| parent | 649ef4b7416ce7053145878841fc9b0bff2f5fec (diff) | |
| download | thehouseoficarus-e6b4cb9f5816c6ee239233bc85f74ee446a161c2.tar.gz | |
feat: shop system overhauled, gui conversation tree editor overhauled
Diffstat (limited to 'internal/game/act_talk.go')
| -rw-r--r-- | internal/game/act_talk.go | 53 |
1 files changed, 16 insertions, 37 deletions
diff --git a/internal/game/act_talk.go b/internal/game/act_talk.go index bd5a091..7cfdf7c 100644 --- a/internal/game/act_talk.go +++ b/internal/game/act_talk.go @@ -58,11 +58,6 @@ func (g *Game) startTalk(sess *net.Session, p *player.Player, obj *object.Object } func (g *Game) handleNodeAction(sess *net.Session, na *behavior.NodeAction) (intercepted bool) { - if na.Shop != nil { - g.applyNodeAction(sess, na) - g.enterShop(sess, na.Shop) - return true - } g.applyNodeAction(sess, na) if v, ok := g.Flags.Get("guard_hostile"); ok && v != nil { @@ -97,28 +92,24 @@ func (g *Game) showTalkNode(sess *net.Session, node behavior.TalkNode) { for { if node.Condition == nil || g.checkCondition(sess, node.Condition) { - if len(node.Sequence) > 0 { + if len(node.Messages) > 0 { if node.Action != nil { if g.handleNodeAction(sess, node.Action) { return } } td.SeqIndex = 0 - msg := node.Sequence[0] + msg := node.Messages[0] if msg != "" { sess.WriteLine(color.ExpandDialogTags(g.colorMode(sess), dialogSpec, msg)) } td.SeqIndex = 1 - if td.SeqIndex < len(node.Sequence) { + if td.SeqIndex < len(node.Messages) { sess.State = net.StateTalkSequence sess.Write(g.colorize(sess, "dialog_options", "[enter to continue]\n")) return } } else { - msg := node.Message.Pick() - if msg != "" { - sess.WriteLine(color.ExpandDialogTags(g.colorMode(sess), dialogSpec, msg)) - } if node.Action != nil { if g.handleNodeAction(sess, node.Action) { return @@ -301,14 +292,14 @@ func (g *Game) advanceTalk(sess *net.Session, p *player.Player) { return } dialogSpec := g.resolveColor(sess, "dialog") - if td.SeqIndex < len(node.Sequence) { - msg := node.Sequence[td.SeqIndex] + if td.SeqIndex < len(node.Messages) { + msg := node.Messages[td.SeqIndex] if msg != "" { sess.WriteLine(color.ExpandDialogTags(g.colorMode(sess), dialogSpec, msg)) } td.SeqIndex++ } - if td.SeqIndex >= len(node.Sequence) { + if td.SeqIndex >= len(node.Messages) { g.finishSequence(sess, node) return } @@ -341,28 +332,12 @@ func (g *Game) advanceTalk(sess *net.Session, p *player.Player) { } } -func (g *Game) enterShop(sess *net.Session, cfg *behavior.ShopConfig) { - sess.Shop = cfg - sess.State = net.StateShop - g.showShopBrowse(sess) - g.writeShopPrompt(sess) -} - func (g *Game) applyNodeAction(sess *net.Session, na *behavior.NodeAction) { p := sess.Player if p == nil { return } - if na.AssignTask { - g.assignAssassinTask(sess, p) - } - if na.SkipTask { - g.skipAssassinTask(sess, p) - } - if na.ExtendTask { - g.extendAssassinTask(sess, p) - } if na.ReputationCost > 0 { rep := getPlayerFlagInt(p, "assassin_reputation") if rep < na.ReputationCost { @@ -414,15 +389,19 @@ func (g *Game) applyNodeAction(sess *net.Session, na *behavior.NodeAction) { g.AccountStore.SaveCharacter(p) sess.WriteLine(fmt.Sprintf("You regain %d hitpoints.", na.Heal)) } - if na.Cost > 0 { - if p.Credits >= na.Cost { - p.Credits -= na.Cost + if na.Credits != 0 { + if na.Credits < 0 { + if p.Credits >= -na.Credits { + p.Credits += na.Credits + g.AccountStore.SaveCharacter(p) + } else { + sess.WriteLine(fmt.Sprintf("You don't have enough credits. (Need %d, have %d)", -na.Credits, p.Credits)) + } + } else { + p.Credits += na.Credits g.AccountStore.SaveCharacter(p) } } - if na.Sawmill { - g.processSawmill(sess, p) - } if na.ApsNode { g.setPlayerFlag(p, "aps_node_"+strconv.Itoa(p.RoomID), true) } |
