/// <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); }
public SREquipable(SREquipable value) : base(value) { Plus = value.Plus; Variance = value.Variance; Durability = value.Durability; MagicOptions = value.MagicOptions; Sockets = value.Sockets; AdvancedElixirs = value.AdvancedElixirs; }
/// <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); }
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; }
/// <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); }
/// <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; }
/// <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; }
/// <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; }
/// <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; }