From fbe5090ac3325ff8ea6989cdf4515c7f077c975b Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Wed, 1 Jul 2026 03:21:52 -0400 Subject: feat: item messaging standardized, custom messages for production paths implemented --- internal/game/act_use.go | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'internal/game/act_use.go') diff --git a/internal/game/act_use.go b/internal/game/act_use.go index 0d8582d..1e9d8e9 100644 --- a/internal/game/act_use.go +++ b/internal/game/act_use.go @@ -3,6 +3,7 @@ package game import ( "fmt" "math/rand" + "strings" "thehouseoficarus/internal/behavior" "thehouseoficarus/internal/engine" @@ -34,7 +35,11 @@ func (g *Game) startUse(sess *net.Session, p *player.Player, obj *object.ObjectD return } - g.broadcastAction(sess, "%s uses the %s.", p.Name, obj.Name) + if cfg.BroadcastMessage != "" { + g.broadcastAction(sess, strings.ReplaceAll(cfg.BroadcastMessage, "%o", obj.Name), p.Name) + } else { + g.broadcastAction(sess, "%s uses the %s.", p.Name, obj.Name) + } p.Action = &behavior.Action{ Type: "use", @@ -44,7 +49,7 @@ func (g *Game) startUse(sess *net.Session, p *player.Player, obj *object.ObjectD Data: &behavior.UseData{Cfg: cfg, Step: 0}, } - sess.WriteLine(fmt.Sprintf("%s", cfg.Message)) + sess.WriteLine(fmt.Sprintf("%s", cfg.StartMessage)) } func (g *Game) advanceUse(sess *net.Session, p *player.Player) { @@ -76,8 +81,8 @@ func (g *Game) advanceUse(sess *net.Session, p *player.Player) { skillLevel := p.Level(player.SkillName(cfg.Skill)) chance := behavior.SuccessChance(*cfg.Success, skillLevel, cfg.Level) if rand.Float64() >= chance { - if cfg.FailMsg != "" { - sess.WriteLine(cfg.FailMsg) + if cfg.FailMessage != "" { + sess.WriteLine(cfg.FailMessage) } p.Action.WaitLeft = engine.ToTicks(cfg.Wait) return @@ -107,17 +112,30 @@ func (g *Game) advanceUse(sess *net.Session, p *player.Player) { if rewardDef != nil { itemName = rewardDef.Name } - line := fmt.Sprintf("You make a %s.", g.itemColorize(sess, rewardDef, itemName)) + coloredName := g.itemColorize(sess, rewardDef, itemName) + + var line string + if cfg.SuccessMessage != "" { + line = strings.ReplaceAll(cfg.SuccessMessage, "%n", coloredName) + } else { + line = fmt.Sprintf("You make a %s.", coloredName) + } if cfg.XP > 0 && p.OptionBool("xp_drops") { line += g.formatXpDropSingle(sess, p, player.SkillName(cfg.Skill), cfg.XP) } sess.WriteLine(line) if p.FirstFreeSlot() == -1 { + if cfg.EndMessage != "" { + sess.WriteLine(cfg.EndMessage) + } sess.WriteLine("Your inventory is full.") g.cancelAction(p) return } + if cfg.EndMessage != "" { + sess.WriteLine(cfg.EndMessage) + } p.Action.WaitLeft = engine.ToTicks(cfg.Wait) } -- cgit v1.2.3