57 lines
1.5 KiB
Go

package actions
import (
"dk/internal/items"
"dk/internal/users"
)
// UserEquipItem equips a given item onto a user. This overwrites any
// previously equipped item in the slot. Does not save.
func UserEquipItem(user *users.User, item *items.Item) {
slotInUse := false
if item.Type == items.TypeWeapon && user.WeaponID != 0 {
slotInUse = true
}
if item.Type == items.TypeArmor && user.ArmorID != 0 {
slotInUse = true
}
if item.Type == items.TypeShield && user.ShieldID != 0 {
slotInUse = true
}
var oldItem *items.Item
if slotInUse && item.Type == items.TypeWeapon {
oldItem, _ = items.Find(user.WeaponID)
} else if slotInUse && item.Type == items.TypeArmor {
oldItem, _ = items.Find(user.ArmorID)
} else if slotInUse && item.Type == items.TypeShield {
oldItem, _ = items.Find(user.ShieldID)
}
if oldItem != nil {
switch oldItem.Type {
case items.TypeWeapon:
user.Set("Attack", user.Attack-oldItem.Att)
case items.TypeArmor:
user.Set("Defense", user.Defense-oldItem.Att)
case items.TypeShield:
user.Set("Defense", user.Defense-oldItem.Att)
}
}
switch item.Type {
case items.TypeWeapon:
user.Set("Attack", user.Attack+item.Att)
user.Set("WeaponID", item.ID)
user.Set("WeaponName", item.Name)
case items.TypeArmor:
user.Set("Defense", user.Defense+item.Att)
user.Set("ArmorID", item.ID)
user.Set("ArmorName", item.Name)
case items.TypeShield:
user.Set("Defense", user.Defense+item.Att)
user.Set("ShieldID", item.ID)
user.Set("ShieldName", item.Name)
}
}