From 0ea4eec5dd2122c6704216971eb1249276297867 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Fri, 19 Jun 2026 18:20:26 -0400 Subject: shop fixes, 'toggle' completely removed, movement speed increased --- internal/game/action_farm.go | 68 +++++++++++++------------------------------- 1 file changed, 20 insertions(+), 48 deletions(-) (limited to 'internal/game/action_farm.go') diff --git a/internal/game/action_farm.go b/internal/game/action_farm.go index 12b99c0..d79150f 100644 --- a/internal/game/action_farm.go +++ b/internal/game/action_farm.go @@ -6,6 +6,7 @@ import ( "sort" "strings" + "thehouseoficarus/internal/action" "thehouseoficarus/internal/net" "thehouseoficarus/internal/player" "thehouseoficarus/internal/world" @@ -38,9 +39,7 @@ func farmFlagPrefix(defID string, index int) string { } func (g *Game) ensureFarmState(p *player.Player, prefix string) { - if p.Flags == nil { - p.Flags = make(map[string]any) - } + p.EnsureFlags() if _, exists := p.Flags[prefix+"_seed"]; !exists { p.Flags[prefix+"_weeds"] = true p.Flags[prefix+"_seed"] = "" @@ -86,8 +85,8 @@ func (g *Game) FarmTick() { } for _, sess := range g.Hub.AllSessions() { - p, ok := sess.Player.(*player.Player) - if !ok || p == nil || p.Flags == nil { + p := sess.Player + if p == nil || p.Flags == nil { continue } g.advanceFarmGrowth(sess, p) @@ -120,7 +119,7 @@ func (g *Game) advanceFarmGrowth(sess *net.Session, p *player.Player) { continue } - stage := intFlag(p.Flags, prefix+"_stage") + stage := intFromFlag(p.Flags, prefix+"_stage") watered, _ := p.Flags[prefix+"_watered"].(bool) seedDef, err := g.ItemStore.Load(seedID) @@ -188,10 +187,7 @@ func (g *Game) advancePlant(sess *net.Session, p *player.Player) { p.Flags[prefix+"_ready"] = false if intXP := int(xp); intXP > 0 { - if newLevel := p.AddSkillXP(player.Farming, intXP); newLevel > 0 { - sess.WriteLine(g.colorize(sess, "level_up", - fmt.Sprintf("*** You are now level %d farming! ***", newLevel))) - } + g.awardSkillXP(sess, p, player.Farming, intXP) } g.AccountStore.SaveCharacter(p) @@ -275,10 +271,7 @@ func (g *Game) advanceHarvest(sess *net.Session, p *player.Player) { } if intXP := int(xp); intXP > 0 { - if newLevel := p.AddSkillXP(player.Farming, intXP); newLevel > 0 { - sess.WriteLine(g.colorize(sess, "level_up", - fmt.Sprintf("*** You are now level %d farming! ***", newLevel))) - } + g.awardSkillXP(sess, p, player.Farming, intXP) } g.ensureFarmState(p, prefix) @@ -416,7 +409,7 @@ func (g *Game) farmPatchLookSuffix(p *player.Player, defID string, index int) st return fmt.Sprintf("\nA fully grown %s is ready to harvest!", name) } - stage := intFlag(p.Flags, prefix+"_stage") + stage := intFromFlag(p.Flags, prefix+"_stage") maxStages := 4 if def, err := g.ItemStore.Load(seedID); err == nil && def.FarmStages > 0 { maxStages = def.FarmStages @@ -450,20 +443,6 @@ func (g *Game) toolShedLookSuffix(p *player.Player) string { return fmt.Sprintf("\nInside: %s.", strings.Join(stored, ", ")) } -func intFlag(flags map[string]any, key string) int { - v, ok := flags[key] - if !ok { - return 0 - } - switch n := v.(type) { - case int: - return n - case float64: - return int(n) - } - return 0 -} - func (g *Game) farmMatchPrefix(p *player.Player, input string) (prefix string, defID string, index int) { objInstances := g.World.AllObjInstances(p.RoomID) if len(objInstances) == 0 { @@ -482,24 +461,17 @@ func (g *Game) farmMatchPrefix(p *player.Player, input string) (prefix string, d if !farmPatchDefIDs[obj.DefID] { continue } - for i, inst := range objInstances { - if inst.DefID != obj.DefID { - continue - } - pref := farmFlagPrefix(obj.DefID, i) - if pref == "" { - break - } - var name string - if def, err := g.ObjectStore.Load(obj.DefID); err == nil { - name = def.Name - } else { - name = obj.DefID - } - farms = append(farms, indexedFarm{prefix: pref, defID: obj.DefID, index: i, name: name}) - break + pref := farmFlagPrefix(obj.DefID, obj.Index) + if pref == "" { + continue + } + var name string + if def, err := g.ObjectStore.Load(obj.DefID); err == nil { + name = def.Name + } else { + name = obj.DefID } - break + farms = append(farms, indexedFarm{prefix: pref, defID: obj.DefID, index: obj.Index, name: name}) } if len(farms) == 0 { @@ -512,7 +484,7 @@ func (g *Game) farmMatchPrefix(p *player.Player, input string) (prefix string, d lower := strings.ToLower(input) for _, f := range farms { - if strings.Contains(lower, strings.ToLower(f.name)) || world.WordPrefixMatch(lower, f.name) { + if strings.Contains(lower, strings.ToLower(f.name)) || action.WordPrefixMatch(lower, f.name) { return f.prefix, f.defID, f.index } } @@ -620,7 +592,7 @@ func (g *Game) showFarmPatches(sess *net.Session, p *player.Player) { continue } - stage := intFlag(p.Flags, prefix+"_stage") + stage := intFromFlag(p.Flags, prefix+"_stage") maxStages := 4 if sd, err := g.ItemStore.Load(seedID); err == nil && sd.FarmStages > 0 { maxStages = sd.FarmStages -- cgit v1.2.3