using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Zepheus.Util;
using Zepheus.FiestaLib.SHN;
namespace Zepheus.FiestaLib.Data
{
public sealed class ItemInfo
{
public ushort ItemID { get; private set; }
public ItemSlot Slot { get; private set; }
public bool TwoHand { get; private set; }
public string InxName { get; private set; }
public byte MaxLot { get; private set; }
public ushort AttackSpeed { get; private set; }
public byte Level { get; private set; }
public ItemType Type { get; private set; }
public ItemClass Class { get; private set; }
public byte UpgradeLimit { get; private set; }
public Job Jobs { get; private set; }
public ushort MinMagic { get; private set; }
public ushort MaxMagic { get; private set; }
public ushort MinMelee { get; private set; }
public ushort MaxMelee { get; private set; }
public ushort WeaponDef { get; private set; }
public ushort MagicDef { get; private set; }
//item upgrade
public ushort UpSucRation { get; private set; }
public ushort UpResource { get; private set; }
///
/// Needs serious fixing in the reader, as it throws invalid casts (files all use uint, but fuck those)
///
///
///
public static ItemInfo Load(DataTableReaderEx reader)
{
ItemInfo itemInfo = new ItemInfo
{
ItemID = reader.GetUInt16("id"),
Slot = (ItemSlot)reader.GetUInt32("equip"),
InxName = reader.GetString("inxname"),
MaxLot = (byte)reader.GetUInt32("maxlot"),
AttackSpeed = (ushort)reader.GetUInt32("atkspeed"),
Level = (byte)reader.GetUInt32("demandlv"),
Type = (ItemType)reader.GetUInt32("type"),
Class = (ItemClass)reader.GetUInt32("class"),
UpgradeLimit = reader.GetByte("uplimit"),
Jobs = UnpackWhoEquip(reader.GetUInt32("whoequip")),
TwoHand = reader.GetBoolean("TwoHand"),
MinMagic = (ushort)reader.GetUInt32("minma"),
MaxMagic = (ushort)reader.GetUInt32("maxma"),
MinMelee = (ushort)reader.GetUInt32("minwc"),
MaxMelee = (ushort)reader.GetUInt32("maxwc"),
WeaponDef = (ushort)reader.GetUInt32("ac"),
MagicDef = (ushort)reader.GetUInt32("mr"),
UpSucRation = reader.GetUInt16("UpSucRatio"),
UpResource = reader.GetByte("UpResource")
};
return itemInfo;
}
// [Obsolete("Too slow / incorrect?")]
private static Job UnpackWhoEquip(uint value)
{
Job job = Job.None;
// string jobnames = "";
for (int i = 0; i < 26; i++)
{
if ((value & (uint)Math.Pow(2, i)) != 0)
{
job |= (Job)i;
// jobnames += ((Job)i).ToString() + " ";
}
}
return job;
}
}
public enum ItemType : byte
{
Equip = 0,
Useable = 1,
Etc = 2,
Unknown = 3,
Unknown2 = 5,
}
public enum ItemClass : byte
{
PremiumItem = 6,
Shield = 7,
BootsHelmet = 8,
Furniture = 9,
Accessory = 10,
Skillbook = 11,
ReturnScroll = 12,
SilverWingsOnly = 13, // Csharp note: lelijk
CraftStones = 14,
PresentBox = 15,
House = 18,
RiderFood = 22,
Rider = 23,
Crafting = 24,
Overlay = 26,
Emotion = 27,
}
}