You don't need to hard-code anything.
Get the info from the itemtype.txt (decrypted itemtype.dat)
Code:
StreamReader sr = new StreamReader("./Database/itemtype.txt");
while (!sr.EndOfStream)
{
string[] data = sr.ReadLine().Split(' ');
BaseItem i = new BaseItem();
i.ID = uint.Parse(data[0]);
i.Name = data[1];
i.ReqJob = byte.Parse(data[2]);
i.ReqProfLvl = byte.Parse(data[3]);
i.ReqLvl = byte.Parse(data[4]);
i.ReqSex = byte.Parse(data[5]);
i.ReqStr = ushort.Parse(data[6]);
i.ReqAgi = ushort.Parse(data[7]);
i.ReqVit = ushort.Parse(data[8]);
i.ReqSpi = ushort.Parse(data[9]);
i.Tradability = byte.Parse(data[10]);
i.Weight = ushort.Parse(data[11]);
i.ShopBuyPrice = uint.Parse(data[12]);
i.Action = uint.Parse(data[13]);
i.MaxPhysAtk = uint.Parse(data[14]);
i.MinPhysAtk = uint.Parse(data[15]);
i.PhysDefence = uint.Parse(data[16]);
i.Dexerity = uint.Parse(data[17]);
i.Dodge = uint.Parse(data[18]);
i.PotAddHP = ushort.Parse(data[19]);
i.PotAddMP = ushort.Parse(data[20]);
i.Durability = ushort.Parse(data[21]);
i.Arrows = ushort.Parse(data[22]);
i.MAttack = uint.Parse(data[30]);
i.Range = ushort.Parse(data[32]);
i.Frequency = uint.Parse(data[33]);
i.ShopCPPrice = uint.Parse(data[37]);
i.Description = data[53];
Kernel.BaseItems.ThreadSafeAdd<uint, BaseItem>(i.ID, i);
}
Then when you're calculating hp, or attacking, take into account the BaseItem info.
Code:
Hitpoints += BaseItem[id].PotAddHP;
Then EVERY item ever is taken into account.