コード例 #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);
        }
コード例 #2
0
 public SREquipable(SREquipable value) : base(value)
 {
     Plus            = value.Plus;
     Variance        = value.Variance;
     Durability      = value.Durability;
     MagicOptions    = value.MagicOptions;
     Sockets         = value.Sockets;
     AdvancedElixirs = value.AdvancedElixirs;
 }
コード例 #3
0
ファイル: Bot.cs プロジェクト: silkroadlegend/xBot-WinForms
        /// <summary>
        /// Try to use a return scroll from inventory.
        /// </summary>
        public bool UseReturnScroll()
        {
            xList <SRItem> inventory = InfoManager.Character.Inventory;

            for (byte j = 13; j < inventory.Capacity; j++)
            {
                if (inventory[j] != null && inventory[j].isType(3, 3, 1))
                {
                    switch (inventory[j].ServerName)
                    {
                    case "ITEM_ETC_SCROLL_RETURN_01":
                    case "ITEM_ETC_SCROLL_RETURN_02":
                    case "ITEM_ETC_SCROLL_RETURN_03":
                    case "ITEM_ETC_SCROLL_RETURN_NEWBIE_01":
                    case "ITEM_ETC_E041225_SANTA_WINGS":
                    case "ITEM_MALL_RETURN_SCROLL_HIGH_SPEED":
                    case "ITEM_EVENT_RETURN_SCROLL_HIGH_SPEED":
                        PacketBuilder.UseItem(inventory[j], j);
                        return(true);
                    }
                }
            }
            return(false);
        }
コード例 #4
0
ファイル: Bot.cs プロジェクト: silkroadlegend/xBot-WinForms
        public void InventorySort()
        {
            Window w = Window.Get;

            bool sort = true;

            while (InfoManager.inGame && sort)
            {
                sort = false;
                xList <SRItem> inventory = InfoManager.Character.Inventory;
                for (byte j = (byte)(inventory.Capacity - 1); j >= 13; j--)
                {
                    if (inventory[j] != null && inventory[j].QuantityMax != 1)
                    {
                        ushort quantityInitial = inventory[j].Quantity;
                        ushort quantityMax     = inventory[j].QuantityMax;
                        if (quantityInitial < quantityMax)
                        {
                            for (byte k = 13; k < j; k++)
                            {
                                // Just in case
                                if (inventory[j] == null)
                                {
                                    break;
                                }

                                if (inventory[k] != null)
                                {
                                    if (inventory[k].ID == inventory[j].ID)
                                    {
                                        ushort quantityFinal = inventory[k].Quantity;
                                        if (quantityFinal < quantityMax)
                                        {
                                            w.LogProcess("Sorting (" + j + ") -> (" + k + ") ...");

                                            ushort quantityMaxMoved = (ushort)(quantityMax - quantityFinal);
                                            if (quantityInitial <= quantityMaxMoved)
                                            {
                                                PacketBuilder.MoveItem(j, k, SRTypes.InventoryItemMovement.InventoryToInventory, quantityInitial);
                                            }
                                            else
                                            {
                                                PacketBuilder.MoveItem(j++, k, SRTypes.InventoryItemMovement.InventoryToInventory, quantityMaxMoved);
                                            }
                                            sort = true;
                                            InfoManager.MonitorInventoryMovement.WaitOne(1000);
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            w.Inventory_btnItemsSort.InvokeIfRequired(() => {
                w.Inventory_btnItemsSort.ForeColor = (System.Drawing.Color)w.Inventory_btnItemsSort.Tag;
                w.Inventory_btnItemsSort.Tag       = null;
            });

            w.LogProcess("Sorting completed");
            tSorting = null;
        }
コード例 #5
0
ファイル: Bot.cs プロジェクト: silkroadlegend/xBot-WinForms
        /// <summary>
        /// Try to use and item at the slot specified. Return success.
        /// </summary>
        public bool UseItem(byte slotInventory)
        {
            xList <SRItem> inventory = InfoManager.Character.Inventory;

            if (slotInventory >= 13 && slotInventory < inventory.Capacity)
            {
                if (inventory[slotInventory] != null)
                {
                    switch (inventory[slotInventory].ID2)
                    {
                    case 2:                             // Summon scroll
                        PacketBuilder.UseItem(inventory[slotInventory], slotInventory);
                        return(true);

                    case 3:                             // Usable
                        switch (inventory[slotInventory].ID3)
                        {
                        case 1:                                         // Potions
                            switch (inventory[slotInventory].ID4)
                            {
                            case 1:                                                     // HP
                            case 3:                                                     // MP
                            case 2:                                                     // Vigor
                                PacketBuilder.UseItem(inventory[slotInventory], slotInventory);
                                return(true);
                            }
                            break;

                        case 2:                                         // Pills
                            switch (inventory[slotInventory].ID4)
                            {
                            case 1:                                                     // Universal
                            case 6:                                                     // Purification
                                PacketBuilder.UseItem(inventory[slotInventory], slotInventory);
                                return(true);
                            }
                            break;

                        case 3:                                         // Event, vehicles, etc.
                            switch (inventory[slotInventory].ID4)
                            {
                            case 1:                                                     // All kind of scrolls, return scrolls, even customized ones (it can cause disconnect)
                            case 2:                                                     // Vehicle, Transport
                            case 6:                                                     // Fortress summon pet
                            case 7:                                                     // Fortress summon guard
                            case 9:                                                     // Fortress battle flag
                            case 10:                                                    // Exp/SP scroll
                            case 11:                                                    // Fortress summon unique
                            case 12:                                                    // Skill Points scroll
                                PacketBuilder.UseItem(inventory[slotInventory], slotInventory);
                                return(true);
                            }
                            break;

                        case 13:                                         // Buff scroll
                            PacketBuilder.UseItem(inventory[slotInventory], slotInventory);
                            return(true);

                        case 15:                                         // Monster scroll
                            PacketBuilder.UseItem(inventory[slotInventory], slotInventory);
                            return(true);
                        }
                        break;
                    }
                }
            }
            return(false);
        }
コード例 #6
0
ファイル: obb.cs プロジェクト: yjk282/Weather
        /// <summary>
        /// 从 Xml 对象中读取农历节日的定义
        /// </summary>
        /// <returns></returns>
        private static xList<OB> getLunarFeasts()
        {
            const string xPath = "SharpSxwnl/SxwnlData/Data[@Id = 'obb_getDayName']";
            xList<OB> result = new xList<OB>();

            if (LunarHelper.SxwnlXmlData != null)
            {
                XmlNodeList foundNodeList = LunarHelper.SxwnlXmlData.SelectNodes(xPath);
                if (foundNodeList.Count > 0)
                {
                    for (int i = 0; i < foundNodeList.Count; i++)
                        for (int j = 0; j < foundNodeList[i].ChildNodes.Count; j++)
                        {
                            result.Add(new OB());    // 添加日对象来记录节点信息
                            XmlAttributeCollection xmlAttr = foundNodeList[i].ChildNodes[j].Attributes;
                            result[result.Count - 1].Lmc = xmlAttr.GetNamedItem("Day").InnerText;
                            result[result.Count - 1].A = xmlAttr.GetNamedItem("A").InnerText;
                            result[result.Count - 1].B = xmlAttr.GetNamedItem("B").InnerText;
                            result[result.Count - 1].C = xmlAttr.GetNamedItem("C").InnerText;
                            result[result.Count - 1].Fjia = LunarHelper.VAL(xmlAttr.GetNamedItem("Fjia").InnerText) == 0 ? 0 : 1;
                        }
                }

            }

            return result;
        }
コード例 #7
0
ファイル: obb.cs プロジェクト: yjk282/Weather
        /// <summary>
        /// 从 Xml 对象中读取农历节日的定义
        /// </summary>
        /// <returns></returns>
        private static xList<string> getJieQiFeasts()
        {
            const string xPath = "SharpSxwnl/SxwnlData/Data[@Id = 'obb_JieqiFjia']";
            xList<string> result = new xList<string>();

            if (LunarHelper.SxwnlXmlData != null)
            {
                XmlNode foundNode;
                Regex regexToTrim = new Regex(@"\s*");    // C#: 匹配任何空白字符, 用于去除所有空白字符

                // 读取并解开历史纪年表
                foundNode = LunarHelper.SxwnlXmlData.SelectSingleNode(xPath);
                if (foundNode != null)
                {
                    string[] jieqiFeasts = regexToTrim.Replace(foundNode.InnerText, "").Split(',');
                    result.AddRange(jieqiFeasts);
                }

            }

            return result;
        }
コード例 #8
0
ファイル: oba.cs プロジェクト: yjk282/Weather
        /// <summary>
        /// 从 Xml 文档对象加载 wFtv 数据
        /// </summary>
        /// <returns></returns>
        private static xList<string> getwFtvData()
        {
            xList<string> result = new xList<string>();

            //----------------------------------------------------------------------------------------
            // 加载 Xml 数据:  按周规则定义的节日(纪念日)
            // 注: 加载时自动去除各行 Xml 数据前、后端的所有空白字符, 但对数据内部的空白字符不作处理
            //----------------------------------------------------------------------------------------
            if (LunarHelper.SxwnlXmlData != null)
            {
                const string wFtvXPath = "SharpSxwnl/SxwnlData/Data[@Id = 'oba_wFtv']";
                XmlNode foundNode;
                Regex regexToTrim = new Regex(@"(^\s*)|(\s*$)");    // C#: 匹配任何空白字符

                // 读取并解开数据
                foundNode = LunarHelper.SxwnlXmlData.SelectSingleNode(wFtvXPath);
                if (foundNode != null)
                {
                    string[] wftv = regexToTrim.Replace(foundNode.InnerText, "").Split(new char[]{ ',' }, StringSplitOptions.RemoveEmptyEntries);

                    for (int i = 0; i < wftv.Length; i++)
                        result.Add(regexToTrim.Replace(wftv[i], ""));
                }
            }

            return result;
        }
コード例 #9
0
ファイル: oba.cs プロジェクト: yjk282/Weather
        /// <summary>
        /// 从 Xml 文档对象加载 sFtv 数据
        /// </summary>
        /// <returns></returns>
        private static xList<xList<string>> getsFtvData()
        {
            const int monthNumPerYear = 12;
            xList<xList<string>> result = new xList<xList<string>>();

            for (int i = 0; i < monthNumPerYear; i++)    // C#: 预置 12 个元素
                result.Add(new xList<string>());

            //----------------------------------------------------------------------------------------
            // 加载 Xml 数据:  按周规则定义的节日(纪念日)
            // 注: 加载时自动去除各行 Xml 数据前、后端的所有空白字符, 但对数据内部的空白字符不作处理
            //----------------------------------------------------------------------------------------
            if (LunarHelper.SxwnlXmlData != null)
            {
                XmlNode foundNode;
                Regex regexToTrim = new Regex(@"(^\s*)|(\s*$)");    // C#: 匹配前、后端的任何空白字符

                for (int i = 0; i < monthNumPerYear; i++)
                {
                    string xPath = "SharpSxwnl/SxwnlData/Data[@Id = 'oba_sFtv']/Month[@Id = '" + (i + 1).ToString() + "']";

                    foundNode = LunarHelper.SxwnlXmlData.SelectSingleNode(xPath);
                    if (foundNode != null)
                    {
                        string[] sftv = regexToTrim.Replace(foundNode.InnerText, "").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        for (int j = 0; j < sftv.Length; j++)
                            result[i].Add(regexToTrim.Replace(sftv[j], ""));
                    }

                }
            }

            return result;
        }