58 lines
1.3 KiB
Go

package actions
import (
"dk/internal/models/items"
"dk/internal/models/users"
)
// UserEquipItem calculates equipment updates for a user equipping an item.
// Returns map of database field updates without modifying the user struct.
func UserEquipItem(user *users.User, item *items.Item) map[string]any {
updates := make(map[string]any)
// Calculate stat changes
newAttack := user.Attack
newDefense := user.Defense
// Remove old item stats if slot occupied
switch item.Type {
case items.TypeWeapon:
if user.WeaponID != 0 {
if oldItem, err := items.Find(user.WeaponID); err == nil {
newAttack -= oldItem.Att
}
}
// Add new item
newAttack += item.Att
updates["weapon_id"] = item.ID
updates["weapon_name"] = item.Name
case items.TypeArmor:
if user.ArmorID != 0 {
if oldItem, err := items.Find(user.ArmorID); err == nil {
newDefense -= oldItem.Att
}
}
// Add new item
newDefense += item.Att
updates["armor_id"] = item.ID
updates["armor_name"] = item.Name
case items.TypeShield:
if user.ShieldID != 0 {
if oldItem, err := items.Find(user.ShieldID); err == nil {
newDefense -= oldItem.Att
}
}
// Add new item
newDefense += item.Att
updates["shield_id"] = item.ID
updates["shield_name"] = item.Name
}
updates["attack"] = newAttack
updates["defense"] = newDefense
return updates
}