Ejemplo n.º 1
0
        /// <summary>
        /// Get's an item object from the shop at slot specified.
        /// </summary>
        public static SRItem GetItemFromShop(string npc_servername, byte tabNumber, byte tabSlot)
        {
            List <NameValueCollection> result = Database.GetResultFromQuery("SELECT * FROM shops WHERE model_servername='" + npc_servername + "' AND tab=" + tabNumber + " AND slot=" + tabSlot);

            if (result.Count > 0)
            {
                SRItem item = SRItem.Create(result[0]["item_servername"], new SRRentable(0));
                if (item.isEquipable())
                {
                    SREquipable equip = (SREquipable)item;
                    equip.Plus       = byte.Parse(result[0]["plus"]);
                    equip.Durability = uint.Parse(result[0]["durability"]);
                    // Add magic options
                    if (result[0]["magic_params"] != "")
                    {
                        string[] mParams = result[0]["magic_params"].Split('|');
                        xList <SRMagicOption> magicOptions = new xList <SRMagicOption>(mParams.Length);
                        for (byte j = 0; j < mParams.Length; j++)
                        {
                            ulong param = ulong.Parse(mParams[j]);
                            magicOptions[j]       = new SRMagicOption((uint)(param & uint.MaxValue));
                            magicOptions[j].Value = (uint)(param >> 32);
                        }
                        equip.MagicOptions = magicOptions;
                    }
                    else
                    {
                        equip.MagicOptions = new xList <SRMagicOption>();
                    }
                }
                return(item);
            }
            return(null);
        }
Ejemplo n.º 2
0
            public static void CreatePickUpPacket(SRItem item, byte inventorySlot)
            {
                Packet p = new Packet(Agent.Opcode.SERVER_INVENTORY_ITEM_MOVEMENT);

                p.WriteByte(1);                 // Success
                p.WriteByte(SRTypes.InventoryItemMovement.GroundToInventory);
                p.WriteByte(inventorySlot);
                p.WriteUInt(item.Rentable.ID);
                if (item.Rentable.RentableType == SRRentable.Type.LimitedTime)
                {
                    p.WriteUShort(item.Rentable.CanDelete);
                    p.WriteUInt(item.Rentable.PeriodBeginTime);
                    p.WriteUInt(item.Rentable.PeriodEndTime);
                }
                else if (item.Rentable.RentableType == SRRentable.Type.LimitedDistance)
                {
                    p.WriteUShort(item.Rentable.CanDelete);
                    p.WriteUShort(item.Rentable.CanRecharge);
                    p.WriteUInt(item.Rentable.MeterRateTime);
                }
                else if (item.Rentable.RentableType == SRRentable.Type.Package)
                {
                    p.WriteUShort(item.Rentable.CanDelete);
                    p.WriteUShort(item.Rentable.CanRecharge);
                    p.WriteUInt(item.Rentable.PeriodBeginTime);
                    p.WriteUInt(item.Rentable.PeriodEndTime);
                    p.WriteUInt(item.Rentable.PackingTime);
                }
                p.WriteUInt(item.ID);
                if (item.isEquipable())
                {
                    SREquipable equip = (SREquipable)item;
                    p.WriteByte(equip.Plus);
                    p.WriteULong(equip.Variance);
                    p.WriteUInt(equip.Durability);
                    p.WriteByte(equip.MagicOptions.Count);
                    for (byte j = 0; j < equip.MagicOptions.Count; j++)
                    {
                        p.WriteUInt(equip.MagicOptions[j].ID);
                        p.WriteUInt(equip.MagicOptions[j].Value);
                    }
                    // 1 = Socket
                    p.WriteByte(1);
                    if (equip.Sockets != null)
                    {
                        p.WriteByte(equip.Sockets.Count);
                        for (byte j = 0; j < equip.Sockets.Count; j++)
                        {
                            p.WriteByte(equip.Sockets[j].Slot);
                            p.WriteUInt(equip.Sockets[j].ID);
                            p.WriteUInt(equip.Sockets[j].Value);
                        }
                    }
                    else
                    {
                        p.WriteByte(0);
                    }
                    // 2 = Advanced elixir
                    p.WriteByte(2);
                    if (equip.AdvancedElixirs != null)
                    {
                        p.WriteByte(equip.AdvancedElixirs.Count);
                        for (byte j = 0; j < equip.AdvancedElixirs.Count; j++)
                        {
                            p.WriteByte(equip.AdvancedElixirs[j].Slot);
                            p.WriteUInt(equip.AdvancedElixirs[j].ID);
                            p.WriteUInt(equip.AdvancedElixirs[j].Value);
                        }
                    }
                    else
                    {
                        p.WriteByte(0);
                    }
                }
                else if (item.isCoS())
                {
                    SRCoS cos = (SRCoS)item;
                    if (cos.isPet())
                    {
                        // ITEM_COS_P
                        p.WriteByte(cos.StateType);
                        if (cos.StateType != SRCoS.State.NeverSummoned)
                        {
                            p.WriteUInt(cos.ModelID);
                            p.WriteAscii(cos.ModelName);
                            if (cos.ID4 == 2)
                            {
                                p.WriteUInt(cos.Rentable.PeriodEndTime);
                            }
                            p.WriteByte(cos.unkByte01);
                        }
                    }
                    else if (cos.isTransform())
                    {
                        if (cos.ModelID == 0)
                        {
                            cos.ModelID = new SRModel("MOB_CH_MANGNYANG").ID;
                        }
                        p.WriteUInt(cos.ModelID);
                    }
                    else if (cos.isCube())
                    {
                        p.WriteUInt(cos.Quantity);
                    }
                }
                else if (item.isEtc())
                {
                    SREtc etc = (SREtc)item;
                    p.WriteUShort(etc.Quantity);
                    if (etc.isAlchemy())
                    {
                        if (item.ID4 == 1 || item.ID4 == 2)
                        {
                            // MAGIC/ATRIBUTTE STONE
                            p.WriteByte(etc.AssimilationProbability);
                        }
                    }
                    else if (item.ID3 == 14 && item.ID4 == 2)
                    {
                        // ITEM_MALL_GACHA_CARD_WIN
                        // ITEM_MALL_GACHA_CARD_LOSE
                        p.WriteByte(0);                         // paramCount
                    }
                }
                Bot.Get.Proxy.Agent.InjectToClient(p);
            }