From 731adf2e0fbcac9a32179da077299ed6465af41e Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Wed, 17 Jun 2026 02:27:20 -0400 Subject: feat: movement overhauled. agility-enhancing items added. --- internal/game/cmd_remove.go | 48 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'internal/game/cmd_remove.go') 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) +} -- cgit v1.2.3