package game import ( "fmt" "strings" "thehouseoficarus/internal/net" "thehouseoficarus/internal/player" ) func (g *Game) triggerEnchant(sess *net.Session, p *player.Player, mod *ModDef, targetArg string) { if chipInfo, ok := chipMap[mod.ID]; ok { g.triggerChipBolts(sess, p, mod, chipInfo) return } enchants, ok := enchantMap[mod.ID] if !ok { sess.WriteLine("That enchantment has no known recipes.") return } if targetArg == "" { sess.WriteLine(fmt.Sprintf("Enchant what? Use: trigger %s ", strings.ReplaceAll(mod.ID, "_", " "))) return } slot, inv := g.findInventoryItem(p, targetArg) if slot < 0 { sess.WriteLine("You don't have that item.") return } outputID, ok := enchants[inv.ItemID] if !ok { sess.WriteLine("You can't enchant that with this mod.") return } if p.Action != nil { g.cancelAction(p) } inputID := inv.ItemID inv.ItemID = outputID g.triggerModReward(sess, p, mod, 1.0) outputDef, _ := g.ItemStore.Load(outputID) outputName := outputID if outputDef != nil { outputName = outputDef.Name } inputDef, _ := g.ItemStore.Load(inputID) inputName := inputID if inputDef != nil { inputName = inputDef.Name } sess.WriteLine(fmt.Sprintf("You enchant the %s and it becomes a %s!", g.itemColorize(sess, inputDef, inputName), g.itemColorize(sess, outputDef, outputName))) } func (g *Game) triggerChipBolts(sess *net.Session, p *player.Player, mod *ModDef, chip chipEntry) { count := p.CountItem(chip.Input) if count < chip.Qty { inputDef, _ := g.ItemStore.Load(chip.Input) name := chip.Input if inputDef != nil { name = inputDef.Name } sess.WriteLine(fmt.Sprintf("You need at least %d %s.", chip.Qty, name)) return } if p.Action != nil { g.cancelAction(p) } p.RemoveItem(chip.Input, chip.Qty) placed := false for i := 0; i < 28; i++ { slot := p.InvSlot(i) if slot != nil && slot.ItemID == chip.Output { slot.Quantity += chip.Qty placed = true break } } if !placed { freeSlot := p.FirstFreeSlot() p.SetInvSlot(freeSlot, &player.InventorySlot{ItemID: chip.Output, Quantity: chip.Qty}) } g.triggerModReward(sess, p, mod, 1.0) inputDef, _ := g.ItemStore.Load(chip.Input) name := chip.Input if inputDef != nil { name = inputDef.Name } sess.WriteLine(fmt.Sprintf("You chip %d %s with arcane circuitry.", chip.Qty, g.itemColorize(sess, inputDef, name))) }