package game import ( "fmt" "strings" "thirdcollapse/internal/net" "thirdcollapse/internal/object" "thirdcollapse/internal/player" ) func (g *Game) doRemove(sess *net.Session, input string) { p := sess.Player.(*player.Player) lower := strings.ToLower(strings.TrimSpace(input)) if lower == "" { sess.WriteLine("Remove what?") return } g.CancelAction(p) var foundSlot object.EquipSlot var foundItemID string for _, slot := range EquipSlots { itemID, ok := p.Equipment[slot] if !ok { continue } if strings.ToLower(string(slot)) == lower { foundSlot = slot foundItemID = itemID break } def, err := g.ItemStore.Load(itemID) if err != nil { continue } if def.MatchesName(input) { foundSlot = slot foundItemID = itemID break } } if foundSlot == "" { sess.WriteLine(fmt.Sprintf("You aren't wearing any '%s'.", input)) return } freeSlot := p.FirstFreeSlot() if freeSlot == -1 { sess.WriteLine("Nowhere to put that!") return } delete(p.Equipment, foundSlot) p.SetInvSlot(freeSlot, &player.InventorySlot{ItemID: foundItemID, Quantity: 1}) g.AccountStore.SaveCharacter(p) name := foundItemID if def, err := g.ItemStore.Load(foundItemID); err == nil { name = def.Name } sess.WriteLine(fmt.Sprintf("You remove %s.", name)) }