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) } }