aboutsummaryrefslogtreecommitdiff
path: root/internal/game/cmd_use.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-07-01 02:21:42 -0400
committerhistoria <[not public]>2026-07-01 02:21:42 -0400
commit5f37dc9b6f6b79da04da70ae0c33ec8d02998587 (patch)
treef7c309e36267a4c456fcf5bca800e614507a80af /internal/game/cmd_use.go
parentfee376102192dc6f24297a7b11324636ace3a07d (diff)
downloadthehouseoficarus-5f37dc9b6f6b79da04da70ae0c33ec8d02998587.tar.gz
feat: qol improvements to items crud in admin gui
Diffstat (limited to 'internal/game/cmd_use.go')
-rw-r--r--internal/game/cmd_use.go41
1 files changed, 26 insertions, 15 deletions
diff --git a/internal/game/cmd_use.go b/internal/game/cmd_use.go
index d399e8f..033fd62 100644
--- a/internal/game/cmd_use.go
+++ b/internal/game/cmd_use.go
@@ -137,6 +137,19 @@ func (g *Game) stationRecipes(p *player.Player, stationDefID string) []*item.Ite
return results
}
+func craftLabel(c *item.CraftDef) string {
+ if c == nil {
+ return ""
+ }
+ if c.Subtype != "" {
+ return c.Subtype
+ }
+ if c.Type != "" {
+ return c.Type
+ }
+ return "combine"
+}
+
func (g *Game) showRecipeMenu(sess *net.Session, p *player.Player, items []*item.ItemDef, stationName string) {
if len(items) == 0 {
sess.WriteLine(fmt.Sprintf("You don't have anything you can make at the %s.", stationName))
@@ -149,7 +162,7 @@ func (g *Game) showRecipeMenu(sess *net.Session, p *player.Player, items []*item
needTypes := false
for i := range items {
for j := i + 1; j < len(items); j++ {
- if len(items[i].Craft) > 0 && len(items[j].Craft) > 0 && items[i].FirstCraft().Type != items[j].FirstCraft().Type {
+ if craftLabel(items[i].FirstCraft()) != craftLabel(items[j].FirstCraft()) {
needTypes = true
break
}
@@ -163,14 +176,8 @@ func (g *Game) showRecipeMenu(sess *net.Session, p *player.Player, items []*item
sess.State = net.StateRecipeChoice
var names []string
for _, item := range items {
- cType := ""
- if len(item.Craft) > 0 {
- cType = item.FirstCraft().Type
- }
- if cType == "" {
- cType = "combine"
- }
- typeLabel := strings.ToUpper(cType[:1]) + cType[1:]
+ label := craftLabel(item.FirstCraft())
+ typeLabel := strings.ToUpper(label[:1]) + label[1:]
if needTypes {
names = append(names, fmt.Sprintf("%s (%s)", g.itemName(sess, item), typeLabel))
} else {
@@ -209,15 +216,15 @@ func (g *Game) doUseItemOnTarget(sess *net.Session, p *player.Player, itemAName,
recipes := g.CraftIndex.FindByStationInput(def.ID, itemAID)
if len(recipes) > 0 {
- cType := ""
+ var firstSubtype string
if len(recipes[0].Craft) > 0 {
- cType = recipes[0].FirstCraft().Type
+ firstSubtype = recipes[0].FirstCraft().Subtype
}
- if cType == "smelting" {
+ if firstSubtype == "smelt" {
var filtered []*item.ItemDef
for _, item := range recipes {
c := item.FirstCraft()
- if c.Type != "smelting" {
+ if c.Subtype != "smelt" {
continue
}
if !craftHasAllItemsQty(c, p.CountItem) {
@@ -246,6 +253,10 @@ func (g *Game) doUseItemOnTarget(sess *net.Session, p *player.Player, itemAName,
g.showMenuTable(sess, "What would you like to smelt?", names)
return
}
+ var cType string
+ if len(recipes[0].Craft) > 0 {
+ cType = recipes[0].FirstCraft().Type
+ }
if cType == "smithing" {
if !g.hasToolType(p, "hammer") {
sess.WriteLine("You need a hammer to smith.")
@@ -396,9 +407,9 @@ func (g *Game) doUseItemOnTarget(sess *net.Session, p *player.Player, itemAName,
}
func (g *Game) isGrimyHerb(itemID string) bool {
- items := g.CraftIndex.ByType("clean")
+ items := g.CraftIndex.BySubtype("clean")
for _, item := range items {
- for _, e := range item.FirstCraft().Consume {
+ for _, e := range item.FirstCraft().Ingredients {
for _, id := range e.Items {
if id == itemID {
return true