public void UpgradeSp(ClientSession Session, UpgradeProtection protect) { if (Upgrade >= 15) { return; } short[] upfail = { 20, 25, 30, 40, 50, 60, 65, 70, 75, 80, 90, 93, 95, 97, 99 }; short[] destroy = { 0, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70 }; 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 }; const short featherVnum = 2282; const short fullmoonVnum = 1030; const short greenSoulVnum = 2283; const short redSoulVnum = 2284; const short blueSoulVnum = 2285; const short dragonSkinVnum = 2511; const short dragonBloodVnum = 2512; const short dragonHeartVnum = 2513; const short blueScrollVnum = 1363; const short redScrollVnum = 1364; if (!Session.HasCurrentMapInstance) { return; } if (Session.Character.Inventory.CountItem(fullmoonVnum) < fullmoon[Upgrade]) { Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(fullmoonVnum).Name, fullmoon[Upgrade])), 10)); return; } if (Session.Character.Inventory.CountItem(featherVnum) < feather[Upgrade]) { Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(featherVnum).Name, feather[Upgrade])), 10)); return; } if (Session.Character.Gold < goldprice[Upgrade]) { Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("NOT_ENOUGH_MONEY"), 10)); return; } if (Upgrade < 5) { if (SpLevel > 20) { if (Item.Morph <= 16) { if (Session.Character.Inventory.CountItem(greenSoulVnum) < soul[Upgrade]) { Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(greenSoulVnum).Name, soul[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.Instance.GetItem(blueScrollVnum).Name, 1)), 10)); return; } Session.Character.Inventory.RemoveItemAmount(blueScrollVnum); Session.SendPacket("shop_end 2"); } Session.Character.Inventory.RemoveItemAmount(greenSoulVnum, soul[Upgrade]); } else { if (Session.Character.Inventory.CountItem(dragonSkinVnum) < soul[Upgrade]) { Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(dragonSkinVnum).Name, soul[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.Instance.GetItem(blueScrollVnum).Name, 1)), 10)); return; } Session.Character.Inventory.RemoveItemAmount(blueScrollVnum); Session.SendPacket("shop_end 2"); } Session.Character.Inventory.RemoveItemAmount(dragonSkinVnum, soul[Upgrade]); } } else { Session.SendPacket(Session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("LVL_REQUIRED"), 21), 11)); return; } } else if (Upgrade < 10) { if (SpLevel > 40) { if (Item.Morph <= 16) { if (Session.Character.Inventory.CountItem(redSoulVnum) < soul[Upgrade]) { Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(redSoulVnum).Name, soul[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.Instance.GetItem(blueScrollVnum).Name, 1)), 10)); return; } Session.Character.Inventory.RemoveItemAmount(blueScrollVnum); Session.SendPacket("shop_end 2"); } Session.Character.Inventory.RemoveItemAmount(redSoulVnum, soul[Upgrade]); } else { if (Session.Character.Inventory.CountItem(dragonBloodVnum) < soul[Upgrade]) { Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(dragonBloodVnum).Name, soul[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.Instance.GetItem(blueScrollVnum).Name, 1)), 10)); return; } Session.Character.Inventory.RemoveItemAmount(blueScrollVnum); Session.SendPacket("shop_end 2"); } Session.Character.Inventory.RemoveItemAmount(dragonBloodVnum, soul[Upgrade]); } } else { Session.SendPacket(Session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("LVL_REQUIRED"), 41), 11)); return; } } else if (Upgrade < 15) { if (SpLevel > 50) { if (Item.Morph <= 16) { if (Session.Character.Inventory.CountItem(blueSoulVnum) < soul[Upgrade]) { Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(blueSoulVnum).Name, soul[Upgrade])), 10)); return; } if (protect == UpgradeProtection.Protected && 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[Upgrade]); } else { if (Session.Character.Inventory.CountItem(dragonHeartVnum) < soul[Upgrade]) { return; } if (protect == UpgradeProtection.Protected && 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.Instance.GetItem(redScrollVnum).Name, 1)), 10)); return; } Session.Character.Inventory.RemoveItemAmount(redScrollVnum); Session.SendPacket("shop_end 2"); } Session.Character.Inventory.RemoveItemAmount(dragonHeartVnum, soul[Upgrade]); } } else { Session.SendPacket(Session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("LVL_REQUIRED"), 51), 11)); return; } } Session.Character.Gold -= goldprice[Upgrade]; // remove feather and fullmoon before upgrading Session.Character.Inventory.RemoveItemAmount(featherVnum, feather[Upgrade]); Session.Character.Inventory.RemoveItemAmount(fullmoonVnum, fullmoon[Upgrade]); WearableInstance wearable = Session.Character.Inventory.LoadByItemInstance <WearableInstance>(Id); ItemInstance inventory = Session.Character.Inventory.GetItemInstanceById(Id); int rnd = ServerManager.Instance.RandomNumber(); if (rnd < destroy[Upgrade]) { if (protect == UpgradeProtection.Protected) { Session.CurrentMapInstance.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(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADESP_FAILED_SAVED"), 0)); } else { wearable.Rare = -2; Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADESP_DESTROYED"), 11)); Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADESP_DESTROYED"), 0)); Session.SendPacket(wearable.GenerateInventoryAdd()); } } else if (rnd < upfail[Upgrade]) { if (protect == UpgradeProtection.Protected) { Session.CurrentMapInstance.Broadcast(Session.Character.GenerateEff(3004), Session.Character.MapX, Session.Character.MapY); } Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADESP_FAILED"), 11)); Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADESP_FAILED"), 0)); } else { if (protect == UpgradeProtection.Protected) { Session.CurrentMapInstance.Broadcast(Session.Character.GenerateEff(3004), Session.Character.MapX, Session.Character.MapY); } Session.CurrentMapInstance.Broadcast(Session.Character.GenerateEff(3005), Session.Character.MapX, Session.Character.MapY); Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADESP_SUCCESS"), 12)); Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADESP_SUCCESS"), 0)); wearable.Upgrade++; if (wearable.Upgrade > 8) { Session.Character.Family?.InsertFamilyLog(FamilyLogType.ItemUpgraded, Session.Character.Name, itemVNum: wearable.ItemVNum, upgrade: wearable.Upgrade); } Session.SendPacket(wearable.GenerateInventoryAdd()); } Session.SendPacket(Session.Character.GenerateGold()); Session.SendPacket(Session.Character.GenerateEq()); Session.SendPacket("shop_end 1"); }
public override void Use(ClientSession session, ref ItemInstance inv, byte Option = 0, string[] packetsplit = null) { switch (Effect) { case 0: if (Option == 0) { if (packetsplit.Length == 9) { BoxInstance box = session.Character.Inventory.LoadBySlotAndType <BoxInstance>(inv.Slot, InventoryType.Equipment); if (box != null) { if (box.Item.ItemSubType == 3) { session.SendPacket($"qna #guri^300^8023^{inv.Slot} {Language.Instance.GetMessageFromKey("ASK_OPEN_BOX")}"); } else if (box.HoldingVNum == 0) { session.SendPacket($"qna #guri^300^8023^{inv.Slot}^{packetsplit[3]} {Language.Instance.GetMessageFromKey("ASK_STORE_PET")}"); } else { session.SendPacket($"qna #guri^300^8023^{inv.Slot} {Language.Instance.GetMessageFromKey("ASK_RELEASE_PET")}"); } } } } else { //u_i 2 2000000 0 21 0 0 BoxInstance box = session.Character.Inventory.LoadBySlotAndType <BoxInstance>(inv.Slot, InventoryType.Equipment); if (box != null) { if (box.Item.ItemSubType == 3) { List <RollGeneratedItemDTO> roll = box.Item.RollGeneratedItems.Where(s => s.MinimumOriginalItemRare <= box.Rare && s.MaximumOriginalItemRare >= box.Rare && s.OriginalItemDesign == box.Design).ToList(); int probabilities = roll.Sum(s => s.Probability); int rnd = ServerManager.Instance.RandomNumber(0, probabilities); int currentrnd = 0; List <ItemInstance> newInv = null; foreach (RollGeneratedItemDTO rollitem in roll) { if (newInv == null) { currentrnd += rollitem.Probability; if (currentrnd >= rnd) { newInv = session.Character.Inventory.AddNewToInventory(rollitem.ItemGeneratedVNum, rollitem.ItemGeneratedAmount); if (newInv.Any()) { short Slot = inv.Slot; if (Slot != -1) { session.SendPacket(session.Character.GenerateSay($"{Language.Instance.GetMessageFromKey("ITEM_ACQUIRED")}: {newInv.First().Item.Name} x 1)", 12)); newInv.ForEach(s => session.SendPacket(s.GenerateInventoryAdd())); session.Character.Inventory.RemoveItemAmountFromInventory(1, box.Id); } } } } } } else if (box.HoldingVNum == 0) { if (packetsplit.Length == 1) { if (int.TryParse(packetsplit[0], out int PetId)) { Mate mate = session.Character.Mates.FirstOrDefault(s => s.MateTransportId == PetId); box.HoldingVNum = mate.NpcMonsterVNum; box.SpLevel = mate.Level; box.SpDamage = mate.Attack; box.SpDefence = mate.Defence; session.Character.Mates.Remove(mate); session.SendPacket(UserInterfaceHelper.Instance.GenerateInfo(Language.Instance.GetMessageFromKey("PET_STORED"))); session.SendPacket(UserInterfaceHelper.Instance.GeneratePClear()); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.CurrentMapInstance?.Broadcast(mate.GenerateOut()); } } } else { NpcMonster heldMonster = ServerManager.Instance.GetNpc(box.HoldingVNum); if (heldMonster != null) { Mate mate = new Mate(session.Character, heldMonster, 1, MateType.Pet) { Attack = box.SpDamage, Defence = box.SpDefence }; if (session.Character.AddPet(mate)) { session.Character.Inventory.RemoveItemAmountFromInventory(1, inv.Id); session.SendPacket(UserInterfaceHelper.Instance.GenerateInfo(Language.Instance.GetMessageFromKey("PET_LEAVE_BEAD"))); } } } } } break; case 1: if (Option == 0) { session.SendPacket($"qna #guri^300^8023^{inv.Slot} {Language.Instance.GetMessageFromKey("ASK_RELEASE_PET")}"); } else { NpcMonster heldMonster = ServerManager.Instance.GetNpc((short)EffectValue); if (session.CurrentMapInstance == session.Character.Miniland && heldMonster != null) { Mate mate = new Mate(session.Character, heldMonster, LevelMinimum, ItemSubType == 1 ? MateType.Partner : MateType.Pet); if (session.Character.AddPet(mate)) { session.Character.Inventory.RemoveItemAmountFromInventory(1, inv.Id); session.SendPacket(UserInterfaceHelper.Instance.GenerateInfo(Language.Instance.GetMessageFromKey("PET_LEAVE_BEAD"))); } } else { //TODO ADD MINILAND SENDPACKET } } break; case 69: if (EffectValue == 1 || EffectValue == 2) { BoxInstance box = session.Character.Inventory.LoadBySlotAndType <BoxInstance>(inv.Slot, InventoryType.Equipment); if (box != null) { if (box.HoldingVNum == 0) { session.SendPacket($"wopen 44 {inv.Slot}"); } else { List <ItemInstance> newInv = session.Character.Inventory.AddNewToInventory(box.HoldingVNum); if (newInv.Any()) { ItemInstance itemInstance = newInv.First(); SpecialistInstance specialist = session.Character.Inventory.LoadBySlotAndType <SpecialistInstance>(itemInstance.Slot, itemInstance.Type); if (specialist != null) { specialist.SlDamage = box.SlDamage; specialist.SlDefence = box.SlDefence; specialist.SlElement = box.SlElement; specialist.SlHP = box.SlHP; specialist.SpDamage = box.SpDamage; specialist.SpDark = box.SpDark; specialist.SpDefence = box.SpDefence; specialist.SpElement = box.SpElement; specialist.SpFire = box.SpFire; specialist.SpHP = box.SpHP; specialist.SpLevel = box.SpLevel; specialist.SpLight = box.SpLight; specialist.SpStoneUpgrade = box.SpStoneUpgrade; specialist.SpWater = box.SpWater; specialist.Upgrade = box.Upgrade; specialist.XP = box.XP; } short Slot = inv.Slot; if (Slot != -1) { if (specialist != null) { session.SendPacket(session.Character.GenerateSay($"{Language.Instance.GetMessageFromKey("ITEM_ACQUIRED")}: {specialist.Item.Name} + {specialist.Upgrade}", 12)); newInv.ForEach(s => session.SendPacket(specialist.GenerateInventoryAdd())); } session.Character.Inventory.RemoveItemAmountFromInventory(1, box.Id); } } else { session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("NOT_ENOUGH_PLACE"), 0)); } } } } if (EffectValue == 3) { BoxInstance box = session.Character.Inventory.LoadBySlotAndType <BoxInstance>(inv.Slot, InventoryType.Equipment); if (box != null) { if (box.HoldingVNum == 0) { session.SendPacket($"guri 26 0 {inv.Slot}"); } else { List <ItemInstance> newInv = session.Character.Inventory.AddNewToInventory(box.HoldingVNum); if (newInv.Any()) { ItemInstance itemInstance = newInv.First(); WearableInstance fairy = session.Character.Inventory.LoadBySlotAndType <WearableInstance>(itemInstance.Slot, itemInstance.Type); if (fairy != null) { fairy.ElementRate = box.ElementRate; } short Slot = inv.Slot; if (Slot != -1) { if (fairy != null) { session.SendPacket(session.Character.GenerateSay($"{Language.Instance.GetMessageFromKey("ITEM_ACQUIRED")}: {fairy.Item.Name} ({fairy.ElementRate}%)", 12)); newInv.ForEach(s => session.SendPacket(fairy.GenerateInventoryAdd())); } session.Character.Inventory.RemoveItemAmountFromInventory(1, box.Id); } } else { session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("NOT_ENOUGH_PLACE"), 0)); } } } } if (EffectValue == 4) { BoxInstance box = session.Character.Inventory.LoadBySlotAndType <BoxInstance>(inv.Slot, InventoryType.Equipment); if (box != null) { if (box.HoldingVNum == 0) { session.SendPacket($"guri 24 0 {inv.Slot}"); } else { List <ItemInstance> newInv = session.Character.Inventory.AddNewToInventory(box.HoldingVNum); if (newInv.Any()) { short Slot = inv.Slot; if (Slot != -1) { session.SendPacket(session.Character.GenerateSay($"{Language.Instance.GetMessageFromKey("ITEM_ACQUIRED")}: {newInv.First().Item.Name} x 1)", 12)); newInv.ForEach(s => session.SendPacket(s.GenerateInventoryAdd())); session.Character.Inventory.RemoveItemAmountFromInventory(1, box.Id); } } else { session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("NOT_ENOUGH_PLACE"), 0)); } } } } break; default: Logger.Log.Warn(string.Format(Language.Instance.GetMessageFromKey("NO_HANDLER_ITEM"), GetType())); break; } }
public void UpgradeItem(ClientSession session, UpgradeMode mode, UpgradeProtection protection, bool isCommand = false) { if (!session.HasCurrentMapInstance) { return; } if (Upgrade < 10) { short[] upfail; short[] upfix; int[] goldprice; short[] cella; short[] gem; if (Rare >= 8) { upfix = new short[] { 50, 40, 70, 65, 80, 90, 95, 97, 98, 99 }; upfail = new short[] { 50, 40, 60, 50, 60, 70, 75, 77, 83, 89 }; goldprice = new[] { 5000, 15000, 30000, 100000, 300000, 800000, 1500000, 4000000, 7000000, 10000000 }; cella = new short[] { 40, 100, 160, 240, 320, 440, 560, 760, 960, 1200 }; gem = new short[] { 2, 2, 4, 4, 6, 2, 2, 4, 4, 6 }; } else { upfix = new short[] { 0, 0, 10, 15, 20, 20, 20, 20, 15, 14 }; upfail = new short[] { 0, 0, 0, 5, 20, 40, 60, 70, 80, 85 }; goldprice = new[] { 500, 1500, 3000, 10000, 30000, 80000, 150000, 400000, 700000, 1000000 }; cella = new short[] { 20, 50, 80, 120, 160, 220, 280, 380, 480, 600 }; gem = new short[] { 1, 1, 2, 2, 3, 1, 1, 2, 2, 3 }; } const short cellaVnum = 1014; const short gemVnum = 1015; const short gemFullVnum = 1016; const double reducedpricefactor = 0.5; const short normalScrollVnum = 1218; const short goldScrollVnum = 5369; if (IsFixed) { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("ITEM_IS_FIXED"), 10)); session.SendPacket("shop_end 1"); return; } switch (mode) { case UpgradeMode.Free: break; case UpgradeMode.Reduced: // TODO: Reduced Item Amount if (session.Character.Gold < (long)(goldprice[Upgrade] * reducedpricefactor)) { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("NOT_ENOUGH_MONEY"), 10)); return; } if (session.Character.Inventory.CountItem(cellaVnum) < cella[Upgrade] * reducedpricefactor) { session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(cellaVnum).Name, cella[Upgrade] * reducedpricefactor), 10)); return; } if (protection == UpgradeProtection.Protected && !isCommand && session.Character.Inventory.CountItem(goldScrollVnum) < 1) { session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(goldScrollVnum).Name, cella[Upgrade] * reducedpricefactor), 10)); return; } if (Upgrade < 5) { if (session.Character.Inventory.CountItem(gemVnum) < gem[Upgrade]) { session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(gemVnum).Name, gem[Upgrade]), 10)); return; } session.Character.Inventory.RemoveItemAmount(gemVnum, gem[Upgrade]); } else { if (session.Character.Inventory.CountItem(gemFullVnum) < gem[Upgrade]) { session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(gemFullVnum).Name, gem[Upgrade]), 10)); return; } session.Character.Inventory.RemoveItemAmount(gemFullVnum, gem[Upgrade]); } if (protection == UpgradeProtection.Protected && !isCommand) { session.Character.Inventory.RemoveItemAmount(goldScrollVnum); session.SendPacket("shop_end 2"); } session.Character.Gold -= (long)(goldprice[Upgrade] * reducedpricefactor); session.Character.Inventory.RemoveItemAmount(cellaVnum, (int)(cella[Upgrade] * reducedpricefactor)); session.SendPacket(session.Character.GenerateGold()); break; case UpgradeMode.Normal: // TODO: Normal Item Amount if (session.Character.Inventory.CountItem(cellaVnum) < cella[Upgrade]) { return; } if (session.Character.Gold < goldprice[Upgrade]) { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("NOT_ENOUGH_MONEY"), 10)); return; } if (protection == UpgradeProtection.Protected && !isCommand && session.Character.Inventory.CountItem(normalScrollVnum) < 1) { session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(normalScrollVnum).Name, 1), 10)); return; } if (Upgrade < 5) { if (session.Character.Inventory.CountItem(gemVnum) < gem[Upgrade]) { session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(gemVnum).Name, gem[Upgrade]), 10)); return; } session.Character.Inventory.RemoveItemAmount(gemVnum, gem[Upgrade]); } else { if (session.Character.Inventory.CountItem(gemFullVnum) < gem[Upgrade]) { session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("NOT_ENOUGH_ITEMS"), ServerManager.Instance.GetItem(gemFullVnum).Name, gem[Upgrade]), 10)); return; } session.Character.Inventory.RemoveItemAmount(gemFullVnum, gem[Upgrade]); } if (protection == UpgradeProtection.Protected && !isCommand) { session.Character.Inventory.RemoveItemAmount(normalScrollVnum); session.SendPacket("shop_end 2"); } session.Character.Inventory.RemoveItemAmount(cellaVnum, cella[Upgrade]); session.Character.Gold -= goldprice[Upgrade]; session.SendPacket(session.Character.GenerateGold()); break; } WearableInstance wearable = session.Character.Inventory.LoadByItemInstance <WearableInstance>(Id); ItemInstance inventory = session.Character.Inventory.GetItemInstanceById(Id); int rnd = ServerManager.Instance.RandomNumber(); if (Rare == 8) { if (rnd < upfail[Upgrade]) { if (protection == UpgradeProtection.None) { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADE_FAILED"), 11)); session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADE_FAILED"), 0)); session.Character.DeleteItemByItemInstanceId(Id); } else { session.CurrentMapInstance.Broadcast(session.Character.GenerateEff(3004), session.Character.MapX, session.Character.MapY); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("SCROLL_PROTECT_USED"), 11)); session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADE_FAILED_ITEM_SAVED"), 0)); } } else if (rnd < upfix[Upgrade]) { session.CurrentMapInstance.Broadcast(session.Character.GenerateEff(3004), session.Character.MapX, session.Character.MapY); wearable.IsFixed = true; session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADE_FIXED"), 11)); session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADE_FIXED"), 0)); } else { session.CurrentMapInstance.Broadcast(session.Character.GenerateEff(3005), session.Character.MapX, session.Character.MapY); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADE_SUCCESS"), 12)); session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADE_SUCCESS"), 0)); wearable.Upgrade++; if (wearable.Upgrade > 4) { session.Character.Family?.InsertFamilyLog(FamilyLogType.ItemUpgraded, session.Character.Name, itemVNum: wearable.ItemVNum, upgrade: wearable.Upgrade); } session.SendPacket(wearable.GenerateInventoryAdd()); } } else { if (rnd < upfix[Upgrade]) { session.CurrentMapInstance.Broadcast(session.Character.GenerateEff(3004), session.Character.MapX, session.Character.MapY); wearable.IsFixed = true; session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADE_FIXED"), 11)); session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADE_FIXED"), 0)); } else if (rnd < upfail[Upgrade] + upfix[Upgrade]) { if (protection == UpgradeProtection.None) { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADE_FAILED"), 11)); session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADE_FAILED"), 0)); session.Character.DeleteItemByItemInstanceId(Id); } else { session.CurrentMapInstance.Broadcast(session.Character.GenerateEff(3004), session.Character.MapX, session.Character.MapY); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("SCROLL_PROTECT_USED"), 11)); session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADE_FAILED_ITEM_SAVED"), 0)); } } else { session.CurrentMapInstance.Broadcast(session.Character.GenerateEff(3005), session.Character.MapX, session.Character.MapY); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("UPGRADE_SUCCESS"), 12)); session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("UPGRADE_SUCCESS"), 0)); wearable.Upgrade++; if (wearable.Upgrade > 4) { session.Character.Family?.InsertFamilyLog(FamilyLogType.ItemUpgraded, session.Character.Name, itemVNum: wearable.ItemVNum, upgrade: wearable.Upgrade); } session.SendPacket(wearable.GenerateInventoryAdd()); } } session.SendPacket("shop_end 1"); } }