public static WowBasicItem BuildSpecificItem(WowBasicItem basicItem) { if (basicItem == null) { return(null); } return((basicItem.Type.ToUpper(CultureInfo.InvariantCulture)) switch { "ARMOR" => new WowArmor(basicItem), "CONSUMABLE" => new WowConsumable(basicItem), "CONTAINER" => new WowContainer(basicItem), "GEM" => new WowGem(basicItem), "KEY" => new WowKey(basicItem), "MISCELLANEOUS" => new WowMiscellaneousItem(basicItem), "MONEY" => new WowMoneyItem(basicItem), "PROJECTILE" => new WowProjectile(basicItem), "QUEST" => new WowQuestItem(basicItem), "QUIVER" => new WowQuiver(basicItem), "REAGENT" => new WowReagent(basicItem), "RECIPE" => new WowRecipe(basicItem), "TRADE GOODS" => new WowTradegood(basicItem), "WEAPON" => new WowWeapon(basicItem), _ => basicItem, });
public WowRecipe(WowBasicItem wowBasicItem) : base(wowBasicItem) { Id = wowBasicItem.Id; BagId = wowBasicItem.BagId; BagSlot = wowBasicItem.BagSlot; Type = wowBasicItem.Type; Subtype = wowBasicItem.Subtype; Name = wowBasicItem.Name; ItemLink = wowBasicItem.ItemLink; EquipSlot = wowBasicItem.EquipSlot; ItemQuality = wowBasicItem.ItemQuality; ItemLevel = wowBasicItem.ItemLevel; RequiredLevel = wowBasicItem.RequiredLevel; Price = wowBasicItem.Price; Count = wowBasicItem.Count; MaxStack = wowBasicItem.MaxStack; Durability = wowBasicItem.Durability; MaxDurability = wowBasicItem.MaxDurability; EquipLocation = wowBasicItem.EquipLocation; }
public void TestItemListParsing() { List <WowBasicItem> items = ItemFactory.ParseItemList(testItemList); Assert.IsInstanceOfType(items, typeof(List <WowBasicItem>)); Assert.IsTrue(items.Count == 3); WowBasicItem item0 = ItemFactory.BuildSpecificItem(items[0]); WowBasicItem item1 = ItemFactory.BuildSpecificItem(items[1]); WowBasicItem item2 = ItemFactory.BuildSpecificItem(items[2]); Assert.IsInstanceOfType(item0, typeof(WowMiscellaneousItem)); Assert.IsInstanceOfType(item1, typeof(WowArmor)); Assert.IsInstanceOfType(item2, typeof(WowWeapon)); Assert.AreEqual((int)WowEquipmentSlot.NOT_EQUIPABLE, item0.EquipSlot); Assert.AreEqual(WowArmorType.Cloth, ((WowArmor)item1).ArmorType); Assert.AreEqual(WowWeaponType.Gun, ((WowWeapon)item2).WeaponType); }
private void OnLootRollStarted(long timestamp, List <string> args) { AmeisenLogger.Instance.Log($"Event OnLootRollStarted: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); if (int.TryParse(args[0], out int rollId)) { string itemName = HookManager.GetLootRollItemLink(rollId); string json = HookManager.GetItemByNameOrLink(itemName); WowBasicItem item = ItemFactory.ParseItem(json); item = ItemFactory.BuildSpecificItem(item); if (CharacterManager.IsItemAnImprovement(item, out IWowItem itemToReplace)) { AmeisenLogger.Instance.Log($"Would like to replace item {item?.Name} with {itemToReplace?.Name}, rolling need", LogLevel.Verbose); HookManager.RollOnItem(rollId, RollType.Need); return; } } HookManager.RollOnItem(rollId, RollType.Pass); }
public void TestItemParsing() { WowBasicItem item = ItemFactory.ParseItem(testItem); Assert.IsInstanceOfType(item, typeof(WowBasicItem)); item = ItemFactory.BuildSpecificItem(item); Assert.IsInstanceOfType(item, typeof(WowMiscellaneousItem)); Assert.AreEqual(1337, item.Id); Assert.AreEqual(1, item.Count); Assert.AreEqual((int)WowItemQuality.Common, item.ItemQuality); Assert.AreEqual(10, item.Durability); Assert.AreEqual(20, item.MaxDurability); Assert.AreEqual("TestItem", item.Name); Assert.AreEqual("[TestItem]", item.ItemLink); Assert.AreEqual(69, item.ItemLevel); Assert.AreEqual(64, item.RequiredLevel); Assert.AreEqual("NONE", item.Subtype); Assert.AreEqual(1, item.MaxStack); Assert.AreEqual((int)WowEquipmentSlot.NOT_EQUIPABLE, item.EquipSlot); Assert.AreEqual(650, item.Price); }
public static WowBasicItem BuildSpecificItem(WowBasicItem basicItem) => (basicItem.Type.ToUpper()) switch { "ARMOR" => new WowArmor(basicItem),
public bool CompleteQuest() { if (Returned) { return(true); } (IWowObject, Vector3)objectPositionCombo = GetEndObject(); if (objectPositionCombo.Item1 != null) { // move to unit / object if (Bot.Player.Position.GetDistance(objectPositionCombo.Item1.Position) > 5.0) { Bot.Movement.SetMovementAction(MovementAction.Move, objectPositionCombo.Item1.Position); } else { // interact with it if (!ActionToggle) { RightClickQuestgiver(objectPositionCombo.Item1); } else if (ActionEvent.Run()) { Bot.Wow.SelectQuestByNameOrGossipId(Name, GossipId, false); Thread.Sleep(1000); Bot.Wow.CompleteQuest(); Thread.Sleep(1000); bool selectedReward = false; // TODO: This only works for the english locale! if (Bot.Wow.GetQuestLogIdByTitle(Name, out int questLogId)) { Bot.Wow.SelectQuestLogEntry(questLogId); if (Bot.Wow.GetNumQuestLogChoices(out int numChoices)) { for (int i = 1; i <= numChoices; ++i) { if (Bot.Wow.GetQuestLogChoiceItemLink(i, out string itemLink)) { string itemJson = Bot.Wow.GetItemByNameOrLink(itemLink); WowBasicItem item = ItemFactory.BuildSpecificItem(ItemFactory.ParseItem(itemJson)); if (item == null) { break; } if (item.Name == "0" || item.ItemLink == "0") { // get the item id and try again itemJson = Bot.Wow.GetItemByNameOrLink ( itemLink.Split(new string[] { "Hitem:" }, StringSplitOptions.RemoveEmptyEntries)[1] .Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries)[0] ); item = ItemFactory.BuildSpecificItem(ItemFactory.ParseItem(itemJson)); } if (Bot.Character.IsItemAnImprovement(item, out _)) { Bot.Wow.SelectQuestReward(i); Bot.Wow.SelectQuestReward(i); Bot.Wow.SelectQuestReward(i); selectedReward = true; break; } } else { break; } } } } if (!selectedReward) { Bot.Wow.SelectQuestReward(1); } Thread.Sleep(250); Returned = true; return(true); } ActionToggle = !ActionToggle; } } else if (objectPositionCombo.Item2 != default) { // move to position if (Bot.Player.Position.GetDistance(objectPositionCombo.Item2) > 5.0) { Bot.Movement.SetMovementAction(MovementAction.Move, objectPositionCombo.Item2); } } return(false); }