public void UpgradeSp(ClientSession Session, UpgradeProtection protect)
{
short[] upsuccess = { 100, 100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 30 };
short[] upfail = { 20, 25, 25, 30, 35, 40, 40, 40, 40, 40, 45, 43, 40, 37, 29 };
int[] goldprice = { 200000, 200000, 200000, 200000, 200000, 500000, 500000, 500000, 500000, 500000, 1000000, 1000000, 1000000, 1000000, 1000000 };
short[] feather = { 3, 5, 8, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70 };
short[] fullmoon = { 1, 3, 5, 7, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 };
short[] soul = { 2, 4, 6, 8, 10, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5 };
short featherVnum = 2282;
short fullmoonVnum = 1030;
short greenSoulVnum = 2283;
short redSoulVnum = 2284;
short blueSoulVnum = 2285;
short dragonSkinVnum = 2511;
short dragonBloodVnum = 2512;
short dragonHeartVnum = 2513;
short blueScrollVnum = 1363;
short redScrollVnum = 1364;
if (!Session.HasCurrentMap)
{
return;
}
if (this.IsFixed)
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("ITEM_IS_FIXED"), 10));
return;
}
if (Session.Character.Inventory.CountItem(fullmoonVnum) < fullmoon[this.Upgrade])
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(fullmoonVnum).Name, fullmoon[this.Upgrade])), 10));
return;
}
if (Session.Character.Inventory.CountItem(featherVnum) < feather[this.Upgrade])
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(featherVnum).Name, feather[this.Upgrade])), 10));
return;
}
if (Session.Character.Gold < goldprice[this.Upgrade])
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("NOT_ENOUGH_MONEY"), 10));
return;
}
if (this.Upgrade < 5)
{
if (this.SpLevel > 20)
{
if (this.Item.Morph <= 16)
{
if (Session.Character.Inventory.CountItem(greenSoulVnum) < soul[this.Upgrade])
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(greenSoulVnum).Name, soul[this.Upgrade])), 10));
return;
}
if (protect == UpgradeProtection.Protected)
{
if (Session.Character.Inventory.CountItem(blueScrollVnum) < 1)
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(blueScrollVnum).Name, 1)), 10));
return;
}
Session.Character.Inventory.RemoveItemAmount(blueScrollVnum);
Session.SendPacket("shop_end 2");
}
Session.Character.Inventory.RemoveItemAmount(greenSoulVnum, (soul[this.Upgrade]));
}
else
{
if (Session.Character.Inventory.CountItem(dragonSkinVnum) < soul[this.Upgrade])
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(dragonSkinVnum).Name, soul[this.Upgrade])), 10));
return;
}
if (protect == UpgradeProtection.Protected)
{
if (Session.Character.Inventory.CountItem(blueScrollVnum) < 1)
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(blueScrollVnum).Name, 1)), 10));
return;
}
Session.Character.Inventory.RemoveItemAmount(blueScrollVnum);
Session.SendPacket("shop_end 2");
}
Session.Character.Inventory.RemoveItemAmount(dragonSkinVnum, (soul[this.Upgrade]));
}
}
else
{
Session.SendPacket(Session.Character.GenerateSay(String.Format(Language.Instance.GetMessageFromKey("LVL_REQUIRED"), 21), 11));
return;
}
}
else if (this.Upgrade < 10)
{
if (this.SpLevel > 40)
{
if (this.Item.Morph <= 16)
{
if (Session.Character.Inventory.CountItem(redSoulVnum) < soul[this.Upgrade])
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(redSoulVnum).Name, soul[this.Upgrade])), 10));
return;
}
if (protect == UpgradeProtection.Protected)
{
if (Session.Character.Inventory.CountItem(blueScrollVnum) < 1)
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(blueScrollVnum).Name, 1)), 10));
return;
}
Session.Character.Inventory.RemoveItemAmount(blueScrollVnum);
Session.SendPacket("shop_end 2");
}
Session.Character.Inventory.RemoveItemAmount(redSoulVnum, (soul[this.Upgrade]));
}
else
{
if (Session.Character.Inventory.CountItem(dragonBloodVnum) < soul[this.Upgrade])
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(dragonBloodVnum).Name, soul[this.Upgrade])), 10));
return;
}
if (protect == UpgradeProtection.Protected)
{
if (Session.Character.Inventory.CountItem(blueScrollVnum) < 1)
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(blueScrollVnum).Name, 1)), 10));
return;
}
Session.Character.Inventory.RemoveItemAmount(blueScrollVnum);
Session.SendPacket("shop_end 2");
}
Session.Character.Inventory.RemoveItemAmount(dragonBloodVnum, (soul[this.Upgrade]));
}
}
else
{
Session.SendPacket(Session.Character.GenerateSay(String.Format(Language.Instance.GetMessageFromKey("LVL_REQUIRED"), 41), 11));
return;
}
}
else if (this.Upgrade < 15)
{
if (this.SpLevel > 50)
{
if (this.Item.Morph <= 16)
{
if (Session.Character.Inventory.CountItem(blueSoulVnum) < soul[this.Upgrade])
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(blueSoulVnum).Name, soul[this.Upgrade])), 10));
return;
}
if (protect == UpgradeProtection.Protected && this.Upgrade > 9)
{
if (Session.Character.Inventory.CountItem(redScrollVnum) < 1)
{
return;
}
Session.Character.Inventory.RemoveItemAmount(redScrollVnum);
Session.SendPacket("shop_end 2");
}
Session.Character.Inventory.RemoveItemAmount(blueSoulVnum, (soul[this.Upgrade]));
}
else
{
if (Session.Character.Inventory.CountItem(dragonHeartVnum) < soul[this.Upgrade])
{
return;
}
if (protect == UpgradeProtection.Protected && this.Upgrade > 9)
{
if (Session.Character.Inventory.CountItem(redScrollVnum) < 1)
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(String.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.GetItem(redScrollVnum).Name, 1)), 10));
return;
}
Session.Character.Inventory.RemoveItemAmount(redScrollVnum);
Session.SendPacket("shop_end 2");
}
Session.Character.Inventory.RemoveItemAmount(dragonHeartVnum, (soul[this.Upgrade]));
}
}
else
{
Session.SendPacket(Session.Character.GenerateSay(String.Format(Language.Instance.GetMessageFromKey("LVL_REQUIRED"), 51), 11));
return;
}
}
Session.Character.Gold -= goldprice[this.Upgrade];
// remove feather and fullmoon before upgrading
Session.Character.Inventory.RemoveItemAmount(featherVnum, (feather[this.Upgrade]));
Session.Character.Inventory.RemoveItemAmount(fullmoonVnum, (fullmoon[this.Upgrade]));
WearableInstance wearable = Session.Character.Inventory.LoadByItemInstance<WearableInstance>(this.Id);
ItemInstance inventory = Session.Character.Inventory.GetItemInstanceById(this.Id);
int rnd = _random.Next(100);
if (rnd <= upfail[this.Upgrade])
{
if (protect == UpgradeProtection.Protected)
{
Session.CurrentMap.Broadcast(Session.Character.GenerateEff(3004), Session.Character.MapX, Session.Character.MapY);
}
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADESP_FAILED"), 11));
Session.SendPacket(Session.Character.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADESP_FAILED"), 0));
}
else if (rnd <= upsuccess[this.Upgrade])
{
if (protect == UpgradeProtection.Protected)
{
Session.CurrentMap.Broadcast(Session.Character.GenerateEff(3004), Session.Character.MapX, Session.Character.MapY);
}
Session.CurrentMap.Broadcast(Session.Character.GenerateEff(3005), Session.Character.MapX, Session.Character.MapY);
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADESP_SUCCESS"), 12));
Session.SendPacket(Session.Character.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADESP_SUCCESS"), 0));
wearable.Upgrade++;
Session.SendPacket(Session.Character.GenerateInventoryAdd(this.ItemVNum, 1, inventory.Type, inventory.Slot, wearable.Rare, wearable.Design, wearable.Upgrade, this.SpStoneUpgrade));
}
else
{
if (protect == UpgradeProtection.Protected)
{
Session.CurrentMap.Broadcast(Session.Character.GenerateEff(3004), Session.Character.MapX, Session.Character.MapY);
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADESP_FAILED_SAVED"), 11));
Session.SendPacket(Session.Character.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADESP_FAILED_SAVED"), 0));
}
else
{
wearable.Rare = (sbyte)-2;
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADESP_DESTROYED"), 11));
Session.SendPacket(Session.Character.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADESP_DESTROYED"), 0));
Session.SendPacket(Session.Character.GenerateInventoryAdd(this.ItemVNum, 1, inventory.Type, inventory.Slot, wearable.Rare, wearable.Design, wearable.Upgrade, this.SpStoneUpgrade));
}
}
Session.SendPacket(Session.Character.GenerateGold());
Session.SendPacket(Session.Character.GenerateEq());
Session.SendPacket("shop_end 1");
}