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