Zepheus.Zone.Game.ZoneCharacter.UpgradeItem C# (CSharp) Method

UpgradeItem() public method

public UpgradeItem ( sbyte eqpslot, sbyte stoneslot ) : void
eqpslot sbyte
stoneslot sbyte
return void
        public void UpgradeItem(sbyte eqpslot, sbyte stoneslot)
        {
            Item eqpitem, stone;
            if (!InventoryItems.TryGetValue(eqpslot, out eqpitem) ||
                !InventoryItems.TryGetValue(stoneslot, out stone))
            {
                Log.WriteLine(LogLevel.Warn, "Invalid item enhancement: item slot does not exist.");
                return;
            }

            Equip eqp;
            if ((eqp = eqpitem as Equip) == null)
            {
                Log.WriteLine(LogLevel.Warn, "Character tried to upgrade non-equip item.");
                return;
            }

            if (stone.Info.UpResource == 0)
            {
                Log.WriteLine(LogLevel.Warn, "Character tried to upgrade with non-upgrade item.");
                return;
            }

            byte required = 0;
            if (eqp.Upgrades <= 2) required = 2;
            else if (eqp.Upgrades <= 5) required = 5;
            else if (eqp.Upgrades <= 8) required = 8;
            else required = 10;

            if (stone.Info.UpResource != required)
            {
                Log.WriteLine(LogLevel.Warn, "Character is using a wrong upgrade stone.");
                return;
            }

            UseOneItemStack(stone);
            int rand = Program.Randomizer.Next(0, 200);
            bool success = rand <= stone.Info.UpSucRation;

            if (success)
            {
                eqp.Upgrades++;
                Handler12.SendUpgradeResult(this, true);
            }
            else
            {
                //TODO: destroy item rate?
                if (eqp.Upgrades > 0) --eqp.Upgrades;
                Handler12.SendUpgradeResult(this, false);
            }
            Handler12.ModifyInventorySlot(this, 0x24, (byte)eqpslot, (byte)eqpslot, eqp);
        }