diff options
Diffstat (limited to 'internal/game/cmd_remove.go')
| -rw-r--r-- | internal/game/cmd_remove.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/internal/game/cmd_remove.go b/internal/game/cmd_remove.go new file mode 100644 index 0000000..9f0cbe8 --- /dev/null +++ b/internal/game/cmd_remove.go @@ -0,0 +1,67 @@ +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)) +} |
