public override void Run() { if (!IgnoreSmeltingZone) { Logging.Write("Smelting in progress"); Npc smeltingZone = NpcDB.GetNpcNearby(Npc.NpcType.SmeltingForge); if (smeltingZone.Entry <= 0) { return; } if (smeltingZone.Position.DistanceTo(ObjectManager.ObjectManager.Me.Position) > 10) { List <Point> pointssmelting = new List <Point>(); if ((smeltingZone.Position.Type.ToLower() == "flying") && nManagerSetting.CurrentSetting.FlyingMountName != "") { pointssmelting.Add(smeltingZone.Position); } else { pointssmelting = PathFinder.FindPath(smeltingZone.Position); } MovementManager.Go(pointssmelting); Timer timer = new Timer((int)(Math.DistanceListPoint(pointssmelting) / 3 * 1000) + 5000); Thread.Sleep(700); while (MovementManager.InMovement && Products.Products.IsStarted && Usefuls.InGame && !ObjectManager.ObjectManager.Me.InInevitableCombat && !ObjectManager.ObjectManager.Me.IsDeadMe) { if (timer.IsReady) { MovementManager.StopMove(); } if (smeltingZone.Position.DistanceTo(ObjectManager.ObjectManager.Me.Position) < 3.7f) { MovementManager.StopMove(); } Thread.Sleep(100); } } MovementManager.StopMove(); Tasks.MountTask.DismountMount(); Thread.Sleep(500); if (smeltingZone.Position.DistanceTo(ObjectManager.ObjectManager.Me.Position) > 15) { return; } } // Smelting Smelting.OpenSmeltingWindow(); Timer timer2 = new Timer(15 * 60 * 1000); while (Smelting.NeedRun(false) && Products.Products.IsStarted && Usefuls.InGame && !ObjectManager.ObjectManager.Me.InCombat && !ObjectManager.ObjectManager.Me.IsDeadMe && !timer2.IsReady) { Smelting.Pulse(); Thread.Sleep(1500); while (ObjectManager.ObjectManager.Me.IsCast && Products.Products.IsStarted && Usefuls.InGame && !ObjectManager.ObjectManager.Me.InCombat && !ObjectManager.ObjectManager.Me.IsDeadMe && !timer2.IsReady) { Thread.Sleep(700); if (!ObjectManager.ObjectManager.Me.IsCast) { Thread.Sleep(700); } } Thread.Sleep(Usefuls.Latency); } Smelting.CloseSmeltingWindow(); }
public override void Run() { List <Npc> listNPCs = new List <Npc>(); Npc mailBox = null; // Stop fisher if needed if (Products.Products.ProductName == "Fisherbot" && FishingTask.IsLaunched) { FishingTask.StopLoopFish(); // Then break the cast MovementsAction.MoveBackward(true); Thread.Sleep(50); MovementsAction.MoveBackward(false); } // If we need to send items. if (nManagerSetting.CurrentSetting.ActivateAutoMaillingFeature && !_suspendMailing && nManagerSetting.CurrentSetting.MaillingFeatureRecipient != string.Empty && Usefuls.GetContainerNumFreeSlots <= nManagerSetting.CurrentSetting.SendMailWhenLessThanXSlotLeft) { if (_useMollE) { MountTask.DismountMount(); ItemsManager.UseItem(ItemsManager.GetItemNameById(40768)); Thread.Sleep(2000); WoWGameObject portableMailbox = ObjectManager.ObjectManager.GetNearestWoWGameObject( ObjectManager.ObjectManager.GetWoWGameObjectById(191605)); if (portableMailbox.IsValid && portableMailbox.CreatedBy == ObjectManager.ObjectManager.Me.Guid) { mailBox = new Npc { Entry = portableMailbox.Entry, Position = portableMailbox.Position, Name = portableMailbox.Name, ContinentIdInt = Usefuls.ContinentId, Faction = ObjectManager.ObjectManager.Me.PlayerFaction.ToLower() == "horde" ? Npc.FactionType.Horde : Npc.FactionType.Alliance, SelectGossipOption = 0, Type = Npc.NpcType.Mailbox }; } } if (mailBox == null && NpcDB.GetNpcNearby(Npc.NpcType.Mailbox).Entry > 0) { mailBox = NpcDB.GetNpcNearby(Npc.NpcType.Mailbox); } listNPCs.Add(mailBox); } // If we need to repair. if (ObjectManager.ObjectManager.Me.GetDurability <= nManagerSetting.CurrentSetting.RepairWhenDurabilityIsUnderPercent && nManagerSetting.CurrentSetting.ActivateAutoRepairFeature) { if (_magicMountMammoth && MountTask.GetMountCapacity() >= MountCapacity.Ground && Skill.GetValue(SkillLine.Riding) > 0) { if (_travelersTundraMammoth.HaveBuff || _travelersTundraMammoth.IsSpellUsable) { if (!_travelersTundraMammoth.HaveBuff) { MountTask.DismountMount(); _travelersTundraMammoth.Launch(true, true, true); Thread.Sleep(2000); } if (ObjectManager.ObjectManager.Me.PlayerFaction.ToLower() == "horde") { WoWUnit drixBlackwrench = ObjectManager.ObjectManager.GetNearestWoWUnit( ObjectManager.ObjectManager.GetWoWUnitByEntry(32641)); if (drixBlackwrench.IsValid && drixBlackwrench.IsAlive) { Npc drixBlackwrenchNpc = new Npc { Entry = drixBlackwrench.Entry, Position = drixBlackwrench.Position, Name = drixBlackwrench.Name, ContinentIdInt = Usefuls.ContinentId, Faction = Npc.FactionType.Horde, SelectGossipOption = 0, Type = Npc.NpcType.Repair }; listNPCs.Add(drixBlackwrenchNpc); } } else { WoWUnit gnimo = ObjectManager.ObjectManager.GetNearestWoWUnit( ObjectManager.ObjectManager.GetWoWUnitByEntry(32639)); if (gnimo.IsValid && gnimo.IsAlive) { Npc gnimoNpc = new Npc { Entry = gnimo.Entry, Position = gnimo.Position, Name = gnimo.Name, ContinentIdInt = Usefuls.ContinentId, Faction = Npc.FactionType.Alliance, SelectGossipOption = 0, Type = Npc.NpcType.Repair }; listNPCs.Add(gnimoNpc); } } } } else if (_magicMountYak && MountTask.GetMountCapacity() >= MountCapacity.Ground && Skill.GetValue(SkillLine.Riding) > 0) { if (_grandExpeditionYak.HaveBuff || _grandExpeditionYak.IsSpellUsable) { if (!_grandExpeditionYak.HaveBuff) { MountTask.DismountMount(); _grandExpeditionYak.Launch(true, true, true); Thread.Sleep(2000); } WoWUnit cousinSlowhands = ObjectManager.ObjectManager.GetNearestWoWUnit( ObjectManager.ObjectManager.GetWoWUnitByEntry(62822)); if (cousinSlowhands.IsValid && cousinSlowhands.IsAlive) { Npc cousinSlowhandsNpc = new Npc { Entry = cousinSlowhands.Entry, Position = cousinSlowhands.Position, Name = cousinSlowhands.Name, ContinentIdInt = Usefuls.ContinentId, Faction = ObjectManager.ObjectManager.Me.PlayerFaction.ToLower() == "horde" ? Npc.FactionType.Horde : Npc.FactionType.Alliance, SelectGossipOption = 0, Type = Npc.NpcType.Repair }; listNPCs.Add(cousinSlowhandsNpc); } } } else if (_use74A) { Npc npcA = DoSpawnRobot("74A", Npc.NpcType.Repair); if (npcA != null) { listNPCs.Add(npcA); } } else if (_use110G) { Npc npcG = DoSpawnRobot("110G", Npc.NpcType.Repair); if (npcG != null) { listNPCs.Add(npcG); } } else if (_useJeeves) { Npc npcJeeves = DoSpawnRobot("Jeeves", Npc.NpcType.Repair); if (npcJeeves != null) { listNPCs.Add(npcJeeves); } } else { if (NpcDB.GetNpcNearby(Npc.NpcType.Repair).Entry > 0) { listNPCs.Add(NpcDB.GetNpcNearby(Npc.NpcType.Repair)); } } } // If we need to sell. if (NeedFoodSupplies() || NeedDrinkSupplies() || Usefuls.GetContainerNumFreeSlots <= nManagerSetting.CurrentSetting.SellItemsWhenLessThanXSlotLeft && nManagerSetting.CurrentSetting.ActivateAutoSellingFeature && !_suspendSelling) { if (_magicMountMammoth && MountTask.GetMountCapacity() >= MountCapacity.Ground && Skill.GetValue(SkillLine.Riding) > 0) { if (_travelersTundraMammoth.HaveBuff || _travelersTundraMammoth.IsSpellUsable) { if (!_travelersTundraMammoth.HaveBuff) { MountTask.DismountMount(); _travelersTundraMammoth.Launch(true, true, true); Thread.Sleep(2000); } if (ObjectManager.ObjectManager.Me.PlayerFaction.ToLower() == "horde") { WoWUnit mojodishu = ObjectManager.ObjectManager.GetNearestWoWUnit( ObjectManager.ObjectManager.GetWoWUnitByEntry(32642)); if (mojodishu.IsValid && mojodishu.IsAlive) { Npc mojodishuNpc = new Npc { Entry = mojodishu.Entry, Position = mojodishu.Position, Name = mojodishu.Name, ContinentIdInt = Usefuls.ContinentId, Faction = Npc.FactionType.Horde, SelectGossipOption = 0, Type = Npc.NpcType.Vendor }; listNPCs.Add(mojodishuNpc); } } else { WoWUnit hakmuddArgus = ObjectManager.ObjectManager.GetNearestWoWUnit( ObjectManager.ObjectManager.GetWoWUnitByEntry(32638)); if (hakmuddArgus.IsValid && hakmuddArgus.IsAlive) { Npc hakmuddArgusNpc = new Npc { Entry = hakmuddArgus.Entry, Position = hakmuddArgus.Position, Name = hakmuddArgus.Name, ContinentIdInt = Usefuls.ContinentId, Faction = Npc.FactionType.Alliance, SelectGossipOption = 0, Type = Npc.NpcType.Vendor }; listNPCs.Add(hakmuddArgusNpc); } } } } else if (_magicMountYak && MountTask.GetMountCapacity() >= MountCapacity.Ground && Skill.GetValue(SkillLine.Riding) > 0) { if (_grandExpeditionYak.HaveBuff || _grandExpeditionYak.IsSpellUsable) { if (!_grandExpeditionYak.HaveBuff) { MountTask.DismountMount(); _grandExpeditionYak.Launch(true, true, true); Thread.Sleep(2000); } WoWUnit cousinSlowhands = ObjectManager.ObjectManager.GetNearestWoWUnit( ObjectManager.ObjectManager.GetWoWUnitByEntry(62822)); if (cousinSlowhands.IsValid && cousinSlowhands.IsAlive) { Npc cousinSlowhandsNpc = new Npc { Entry = cousinSlowhands.Entry, Position = cousinSlowhands.Position, Name = cousinSlowhands.Name, ContinentIdInt = Usefuls.ContinentId, Faction = Npc.FactionType.Neutral, SelectGossipOption = 0, Type = Npc.NpcType.Vendor }; listNPCs.Add(cousinSlowhandsNpc); } } } else if (_use74A) { Npc npcA = DoSpawnRobot("74A", Npc.NpcType.Vendor); if (npcA != null) { listNPCs.Add(npcA); } } else if (_use110G) { Npc npcG = DoSpawnRobot("110G", Npc.NpcType.Vendor); if (npcG != null) { listNPCs.Add(npcG); } } else if (_useJeeves) { Npc npcJeeves = DoSpawnRobot("Jeeves", Npc.NpcType.Vendor); if (npcJeeves != null) { listNPCs.Add(npcJeeves); } } else { if (NpcDB.GetNpcNearby(Npc.NpcType.Vendor).Entry > 0) { listNPCs.Add(NpcDB.GetNpcNearby(Npc.NpcType.Vendor)); } } } #region Repairer, Seller/Buyer, MailBox if (listNPCs.Count > 0) { listNPCs.Sort(OnComparison); foreach (Npc npc in listNPCs) { Npc target = npc; bool doTravel = target.Position.DistanceTo(ObjectManager.ObjectManager.Me.Position) > 400 || target.ContinentIdInt != Usefuls.ContinentId; if (!doTravel && target.Position.DistanceTo(ObjectManager.ObjectManager.Me.Position) <= 400) { // Close NPC but no path ? bool success; PathFinder.FindPath(ObjectManager.ObjectManager.Me.Position, target.Position, Usefuls.ContinentNameMpq, out success); if (!success) { doTravel = true; } } //Start travel if (_travelLocation != null && _travelLocation.DistanceTo(ObjectManager.ObjectManager.Me.Position) > 0.1f) { if (Products.Products.TravelRegenerated && Products.Products.TravelFrom.IsValid) { _travelLocation = Products.Products.TravelFrom; Products.Products.TravelRegenerated = false; } } if (doTravel && (_travelLocation == null || _travelLocation.DistanceTo(ObjectManager.ObjectManager.Me.Position) > 0.1f) && !_travelDisabled && !Usefuls.IsFlying) { MovementManager.StopMove(); switch (npc.Type) { case Npc.NpcType.Repair: Logging.Write("Calling travel system to NpcRepair " + npc.Name + " (" + npc.Entry + ")..."); break; case Npc.NpcType.Vendor: Logging.Write("Calling travel system to NpcVendor " + npc.Name + " (" + npc.Entry + ")..."); break; case Npc.NpcType.Mailbox: Logging.Write("Calling travel system to Mailbox " + npc.Name + " (" + npc.Entry + ")..."); break; default: Logging.Write("Calling travel system for ToTown to " + npc.Name + " (" + npc.Entry + ")..."); break; } Products.Products.TravelToContinentId = target.ContinentIdInt; Products.Products.TravelTo = target.Position; Products.Products.TravelFromContinentId = Usefuls.ContinentId; Products.Products.TravelFrom = ObjectManager.ObjectManager.Me.Position; // Pass the check for valid destination as a lambda Products.Products.TargetValidationFct = Quest.IsNearQuestGiver; // compare me.Pos to dest.Pos _travelLocation = Products.Products.TravelFrom; return; } if (_travelLocation != null && _travelLocation.DistanceTo(ObjectManager.ObjectManager.Me.Position) <= 0.1f) { _travelDisabled = true; // don't forget to release travel once arrived. } //Start target finding based on Seller. uint baseAddress = MovementManager.FindTarget(ref target, 0, !ObjectManager.ObjectManager.Me.IsMounted); if (!target.ValidPath) { Logging.WriteDebug("No valid path/travel to Npc " + target.Name + ", removing him from NpcDB."); NpcDB.DelNpc(target); } if (MovementManager.InMovement) { return; } if (target.Position.DistanceTo(ObjectManager.ObjectManager.Me.Position) >= 5f) { return; } _travelDisabled = false; if (baseAddress == 0 && target.Position.DistanceTo(ObjectManager.ObjectManager.Me.Position) < 5f) { NpcDB.DelNpc(target); } else if (baseAddress > 0) { if (!_travelersTundraMammoth.HaveBuff) { DoProspectingInTown(target); DoMillingInTown(target); } Interact.InteractWith(baseAddress); Thread.Sleep(500); MovementManager.StopMove(); if (target.SelectGossipOption != 0) { Lua.LuaDoString("SelectGossipOption(" + target.SelectGossipOption + ")"); Thread.Sleep(500); } else if (target.Type == Npc.NpcType.Repair || target.Type == Npc.NpcType.Vendor) { if (!Gossip.SelectGossip(Gossip.GossipOption.Vendor)) { Logging.WriteError("Problem with NPC " + npc.Name + " Removing it for NpcDB"); NpcDB.DelNpc(npc); return; } } // NPC Repairer if (target.Type == Npc.NpcType.Repair) { Logging.Write("Repair items from " + target.Name + " (" + target.Entry + ")."); Vendor.RepairAllItems(); Thread.Sleep(1000); } // End NPC Repairer if (target.Type == Npc.NpcType.Vendor) { // NPC Buyer Logging.Write("Selling items to " + target.Name + " (" + target.Entry + ")."); List <WoWItemQuality> vQuality = new List <WoWItemQuality>(); if (nManagerSetting.CurrentSetting.SellGray) { vQuality.Add(WoWItemQuality.Poor); } if (nManagerSetting.CurrentSetting.SellWhite) { vQuality.Add(WoWItemQuality.Common); } if (nManagerSetting.CurrentSetting.SellGreen) { vQuality.Add(WoWItemQuality.Uncommon); } if (nManagerSetting.CurrentSetting.SellBlue) { vQuality.Add(WoWItemQuality.Rare); } if (nManagerSetting.CurrentSetting.SellPurple) { vQuality.Add(WoWItemQuality.Epic); } Vendor.SellItems(nManagerSetting.CurrentSetting.ForceToSellTheseItems, nManagerSetting.CurrentSetting.DontSellTheseItems, vQuality); Thread.Sleep(3000); if (Usefuls.GetContainerNumFreeSlots <= nManagerSetting.CurrentSetting.SellItemsWhenLessThanXSlotLeft) { _suspendSelling = true; } // End NPC Buyer // NPC Seller if (NeedFoodSupplies() || NeedDrinkSupplies()) { Logging.Write("Buying beverages and food from " + target.Name + " (" + target.Entry + ")."); } for (int i = 0; i < 10 && NeedFoodSupplies(); i++) { Vendor.BuyItem(nManagerSetting.CurrentSetting.FoodName, 1); } for (int i = 0; i < 10 && NeedDrinkSupplies(); i++) { Vendor.BuyItem(nManagerSetting.CurrentSetting.BeverageName, 1); } // End NPC Seller } if (target.Type == Npc.NpcType.Repair || target.Type == Npc.NpcType.Vendor) { Gossip.CloseGossip(); } // MailBox if (target.Type == Npc.NpcType.Mailbox) { List <WoWItemQuality> mQuality = new List <WoWItemQuality>(); if (nManagerSetting.CurrentSetting.MailGray) { mQuality.Add(WoWItemQuality.Poor); } if (nManagerSetting.CurrentSetting.MailWhite) { mQuality.Add(WoWItemQuality.Common); } if (nManagerSetting.CurrentSetting.MailGreen) { mQuality.Add(WoWItemQuality.Uncommon); } if (nManagerSetting.CurrentSetting.MailBlue) { mQuality.Add(WoWItemQuality.Rare); } if (nManagerSetting.CurrentSetting.MailPurple) { mQuality.Add(WoWItemQuality.Epic); } bool mailSendingCompleted = false; for (int i = 7; i > 0 && !mailSendingCompleted; i--) { Interact.InteractWith(baseAddress); Thread.Sleep(1000); Mail.SendMessage(nManagerSetting.CurrentSetting.MaillingFeatureRecipient, nManagerSetting.CurrentSetting.MaillingFeatureSubject, "", nManagerSetting.CurrentSetting.ForceToMailTheseItems, nManagerSetting.CurrentSetting.DontMailTheseItems, mQuality, out mailSendingCompleted); Thread.Sleep(500); } if (mailSendingCompleted) { Logging.Write("Sending items to the player " + nManagerSetting.CurrentSetting.MaillingFeatureRecipient + " using " + target.Name + " (" + target.Entry + ")."); } if (Usefuls.GetContainerNumFreeSlots <= nManagerSetting.CurrentSetting.SendMailWhenLessThanXSlotLeft) { _suspendMailing = true; } Lua.LuaDoString("CloseMail()"); } // End MailBox } // still on the road, but not in movement for some reasons } } #endregion Repairer, Seller/Buyer, MailBox }
public override void Run() { Logging.Write("Pause started"); if (!_onBreak) { // That's the normal pausing system. Helpers.MovementManager.StopMove(); while (Products.Products.IsStarted && Products.Products.InAutoPause) { Thread.Sleep(300); } } else { // We are on break, will we just pause their in the middle of nowhere ? No we wont ! Point position = ObjectManager.ObjectManager.Me.Position; switch (Others.Random(1, 4)) { case 1: position.X += Others.Random(100, 300); break; case 2: position.X += Others.Random(-300, -100); break; case 3: position.Y += Others.Random(100, 300); break; case 4: position.Y += Others.Random(-300, -100); break; } if (MountTask.GetMountCapacity() == MountCapacity.Fly) { if (!ObjectManager.ObjectManager.Me.IsMounted) { MountTask.Mount(false, true); } // should be mounted here.. if (ObjectManager.ObjectManager.Me.IsMounted) { if (Usefuls.IsFlying) { position.Z += Others.Random(20, 50); } else { MountTask.Takeoff(); position.Z += Others.Random(50, 100); } MovementManager.MoveTo(position); } } else { // we are a f*****g non flyer dude, so let's suppose we are under level 60 (ofc), so, that mean our NPC DB actually cover our zone, so let's just stuck our ass to the closest NPC ever Npc target = new Npc(); target = NpcDB.GetNpcNearby(Npc.NpcType.Mailbox); if (target.Entry <= 0) { target = NpcDB.GetNpcNearby(Npc.NpcType.Repair); if (target.Entry <= 0) { target = NpcDB.GetNpcNearby(Npc.NpcType.Vendor); if (target.Entry <= 0) { target = NpcDB.GetNpcNearby(Npc.NpcType.FlightMaster); } } } if (target.Entry > 0) { //Start target finding based on Seller. uint baseAddress = MovementManager.FindTarget(ref target); if (MovementManager.InMovement) { return; } // I need to handle this f*****g possibility... if (baseAddress == 0 && target.Position.DistanceTo(ObjectManager.ObjectManager.Me.Position) < 10) { NpcDB.DelNpc(target); // The NPC is not found, let's remove it from the DB, but still we must be in a safe place right now. } else if (baseAddress > 0) { // We arrived at our target (either mailbox or repair/vendor or flight master), let's wait here, we're safe. } } // We have no place to go... so just wait there. } while (!_breakTime.IsReady) { Thread.Sleep(300); } _forceResetTimer = true; // force recalculate the "time between pause" timer when our break is done } Logging.Write("Pause stoped"); }