diff options
| author | historia <[not public]> | 2026-06-19 18:20:26 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-06-19 18:20:26 -0400 |
| commit | 0ea4eec5dd2122c6704216971eb1249276297867 (patch) | |
| tree | 430fbbef04e837820f1d031c190f52ecd6112e25 /internal/game/action_farm.go | |
| parent | 3a58125d14bb307f861b38c6c5b0a63babde7e08 (diff) | |
| download | thehouseoficarus-0ea4eec5dd2122c6704216971eb1249276297867.tar.gz | |
shop fixes, 'toggle' completely removed, movement speed increased
Diffstat (limited to 'internal/game/action_farm.go')
| -rw-r--r-- | internal/game/action_farm.go | 68 |
1 files changed, 20 insertions, 48 deletions
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 |
