aboutsummaryrefslogtreecommitdiff
path: root/internal/game/cmd_remove.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-06-17 02:27:20 -0400
committerhistoria <[not public]>2026-06-17 02:27:20 -0400
commit731adf2e0fbcac9a32179da077299ed6465af41e (patch)
tree29d368917f258350d426f2680bec59feeb464eaf /internal/game/cmd_remove.go
parent389e307f205f9b7edf604fb9f86e1038ead736ef (diff)
downloadthehouseoficarus-731adf2e0fbcac9a32179da077299ed6465af41e.tar.gz
feat: movement overhauled. agility-enhancing items added.
Diffstat (limited to 'internal/game/cmd_remove.go')
-rw-r--r--internal/game/cmd_remove.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/internal/game/cmd_remove.go b/internal/game/cmd_remove.go
index 61fdc29..8f1a413 100644
--- a/internal/game/cmd_remove.go
+++ b/internal/game/cmd_remove.go
@@ -13,6 +13,10 @@ func (g *Game) doRemove(sess *net.Session, input string) {
p := sess.Player.(*player.Player)
lower := strings.ToLower(strings.TrimSpace(input))
+ if lower == "all" {
+ g.doRemoveAll(sess)
+ return
+ }
if lower == "" {
sess.WriteLine("Remove what?")
return
@@ -74,3 +78,47 @@ func (g *Game) doRemove(sess *net.Session, input string) {
}
sess.WriteLine(fmt.Sprintf("You remove %s.", g.itemColorize(sess, def, name)))
}
+
+func (g *Game) doRemoveAll(sess *net.Session) {
+ p := sess.Player.(*player.Player)
+
+ if len(p.Equipment) == 0 {
+ sess.WriteLine("You aren't wearing anything.")
+ return
+ }
+
+ if len(p.Equipment) > p.FreeSlots() {
+ sess.WriteLine("You don't have room to remove everything!")
+ return
+ }
+
+ g.CancelAction(p)
+
+ for _, slot := range EquipSlots {
+ itemID, ok := p.Equipment[slot]
+ if !ok {
+ continue
+ }
+
+ freeSlot := p.FirstFreeSlot()
+ delete(p.Equipment, slot)
+ invSlot := &player.InventorySlot{ItemID: itemID, Quantity: 1}
+ if q, ok := p.EquipQuality[itemID]; ok {
+ invSlot.Quality = q
+ if def, _ := g.ItemStore.Load(itemID); def != nil {
+ invSlot.MaxQuality = def.MaxQuality
+ }
+ delete(p.EquipQuality, itemID)
+ }
+ p.SetInvSlot(freeSlot, invSlot)
+
+ name := itemID
+ def, _ := g.ItemStore.Load(itemID)
+ if def != nil {
+ name = def.Name
+ }
+ sess.WriteLine(fmt.Sprintf("You remove %s.", g.itemColorize(sess, def, name)))
+ }
+
+ g.AccountStore.SaveCharacter(p)
+}