aboutsummaryrefslogtreecommitdiff
path: root/internal/game/act_talk.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/game/act_talk.go')
-rw-r--r--internal/game/act_talk.go53
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)
}