public async Task workWithRes(WoWObject obj) { /*if (Me.IsGroupLeader) * { * if (!(PartyMemberNear(obj.InteractRange)) && (obj.Distance <= 6)) * //Navigator.MoveTo(obj.Location); * WoWMovement.ClickToMove(obj.Location); * } * else * {*/ if (obj.WithinInteractRange) { Log("sind in der nähe"); if (PartyMemberNear(obj.InteractRange)) { Log("alle members hier"); obj.Interact(); } } else { Log("nicht in der nähe vom stoff"); Navigator.MoveTo(obj.Location); //WoWMovement.ClickToMove(obj.Location); } }
void MoveToBanker() { WoWPoint movetoPoint = _loc; WoWObject bank = GetLocalBanker(); if (bank != null) { movetoPoint = WoWMathHelper.CalculatePointFrom(Me.Location, bank.Location, 4); } // search the database else if (movetoPoint == WoWPoint.Zero) { movetoPoint = MoveToAction.GetLocationFromDB(Bank == BankType.Personal ? MoveToAction.MoveToType.NearestBanker : MoveToAction.MoveToType.NearestGB, NpcEntry); } if (movetoPoint == WoWPoint.Zero) { IsDone = true; Professionbuddy.Err("Unable to find bank"); } if (movetoPoint.Distance(ObjectManager.Me.Location) > 4) { Util.MoveTo(movetoPoint); } // since there are many personal bank replacement addons I can't just check if frame is open and be generic.. using events isn't reliable else if (bank != null) { bank.Interact(); } else { IsDone = true; Logging.Write(System.Drawing.Color.Red, "Unable to find a banker at location. aborting"); } }
public void Interact() { if (!IsValid) { return; } RefWoWObject.Interact(); InteractionAttempts++; }
protected override RunStatus Run(object context) { if (!IsDone) { WoWObject obj = null; if (InteractType == InteractActionType.NPC) { if (Entry != 0) { obj = ObjectManager.GetObjectsOfType <WoWUnit>().Where(u => u.Entry == Entry).OrderBy( u => u.Distance).FirstOrDefault(); } else if (ObjectManager.Me.GotTarget) { obj = ObjectManager.Me.CurrentTarget; } } else if (InteractType == InteractActionType.GameObject) { obj = ObjectManager.GetObjectsOfType <WoWGameObject>().OrderBy(u => u.Distance).FirstOrDefault( u => (Entry > 0 && u.Entry == Entry) || (u.SubType == GameObjectType && (GameObjectType != WoWGameObjectType.SpellFocus || (GameObjectType == WoWGameObjectType.SpellFocus && u.SpellFocus == SpellFocus)))); } if (obj != null) { WoWPoint moveToLoc = WoWMathHelper.CalculatePointFrom(Me.Location, obj.Location, 3); if (moveToLoc.Distance(Me.Location) > 4) { Util.MoveTo(moveToLoc); } else { if (InteractDelay > 0 && (!_interactSw.IsRunning || _interactSw.ElapsedMilliseconds < InteractDelay)) { _interactSw.Start(); } else { _interactSw.Reset(); obj.Interact(); IsDone = true; } } } if (!IsDone) { return(RunStatus.Success); } Professionbuddy.Log("InteractAction complete"); } return(RunStatus.Failure); }
protected override Composite CreateBehavior() { return(_root ?? (_root = new PrioritySelector( // Move to the gameobject if it isn't null and we aren't withing interact range. new Decorator(ret => GameObject != null && !GameObject.WithinInteractRange && MoveTimer.ElapsedMilliseconds > 30 * 1000, new Sequence( new Action(ret => ObjBlacklist.Add(GameObject.Guid)), new Action(ret => MoveTimer.Reset()) ) ), new Decorator(ret => GameObject != null && !GameObject.WithinInteractRange, new Sequence( new Action(ret => TreeRoot.StatusText = "movetimer " + MoveTimer.ElapsedMilliseconds / 1000 + " Moving to interact with gameobject: " + GameObject.Name), new Action(ret => TreeRoot.GoalText = "Use Gameobject: " + GameObject.Name), new Action(ret => WoWMovement.ClickToMove(GameObject.Location)), new Action(ret => MoveTimer.Start()) ) ), // Interact etc. new Decorator(ret => GameObject != null && GameObject.WithinInteractRange, // Set the context to the gameobject new Sequence(ret => GameObject, new DecoratorContinue(ret => StyxWoW.Me.IsMoving, new Sequence( new Action(ret => WoWMovement.MoveStop()), new WaitContinue(5, ret => !StyxWoW.Me.IsMoving, null) )), new Action(ret => MoveTimer.Reset()), new Action(ret => Logging.Write("Using Object [{0}] {1} Times out of {2}", GameObject.Name, _counter + 1, NumOfTimes)), new Action(ret => GameObject.Interact()), new Action(ret => StyxWoW.SleepForLagDuration()), new Action(ret => ObjBlacklist.Add(GameObject.Guid)), new Action(ret => Thread.Sleep(WaitTime)), new Action(delegate { _counter++; }) )), new Decorator(ret => Location != WoWPoint.Empty && GameObject == null, new Sequence( new Action(ret => TreeRoot.StatusText = "Moving to interact with gameobject"), new Action(ret => TreeRoot.GoalText = "Use Gameobject"), new Action(ret => WoWMovement.ClickToMove(Location)) ) ) ))); }
protected override Composite CreateBehavior() { return(_root ?? (_root = new PrioritySelector( new Decorator(ret => Counter >= NumOfTimes, new Action(ret => _isDone = true)), new PrioritySelector( new Decorator(ret => CurrentObject != null && !CurrentObject.WithinInteractRange, new Sequence( new Action(delegate { TreeRoot.StatusText = "Moving to interact with - " + CurrentObject.Name; }), new Action(ret => Navigator.MoveTo(CurrentObject.Location)) ) ), new Decorator(ret => CurrentObject != null && CurrentObject.WithinInteractRange, new Sequence( new DecoratorContinue(ret => StyxWoW.Me.IsMoving, new Action(delegate { WoWMovement.MoveStop(); StyxWoW.SleepForLagDuration(); })), new Action(delegate { TreeRoot.StatusText = "Interacting with - " + CurrentObject.Name; CurrentObject.Interact(); _npcBlacklist.Add(CurrentObject.Guid); StyxWoW.SleepForLagDuration(); Counter++; Thread.Sleep(3000); })) ), new Sequence( new Action(delegate { Counter++; }) ) ) ))); }
private void MoveToBanker() { WoWPoint movetoPoint = _loc; WoWObject bank = GetLocalBanker(); if (bank != null) { movetoPoint = WoWMathHelper.CalculatePointFrom(Me.Location, bank.Location, 4); } // search the database else if (movetoPoint == WoWPoint.Zero) { movetoPoint = MoveToAction.GetLocationFromDB( Bank == BankType.Personal ? MoveToAction.MoveToType.NearestBanker : MoveToAction.MoveToType.NearestGB, NpcEntry); } if (movetoPoint == WoWPoint.Zero) { IsDone = true; PBLog.Warn("Unable to find bank"); } if (movetoPoint.Distance(StyxWoW.Me.Location) > 4) { Util.MoveTo(movetoPoint); } // since there are many personal bank replacement addons I can't just check if frame is open and be generic.. using events isn't reliable else if (bank != null) { bank.Interact(); } else { IsDone = true; PBLog.Warn(Strings["Error_UnableToFindBank"]); } }
public static async Task <bool> Interact(WoWObject selectedTarget, System.Action actionOnSuccessfulItemUseDelegate = null) { // Viable target? // NB: Since target may go invalid immediately upon interacting with it, // we cache its name for use in subsequent log entries. if (!Query.IsViable(selectedTarget)) { QBCLog.Warning("Target is not viable!"); return(false); } var targetName = selectedTarget.SafeName; // Need to be facing target... // NB: Not all items require this, but many do. Utility.Target(selectedTarget, true); // Notify user of intent... QBCLog.DeveloperInfo("Interacting with '{0}'", targetName); // Set up 'interrupted use' detection, and interact... using (var castMonitor = SpellCastMonitor.Start(null)) { selectedTarget.Interact(); // NB: The target may not be valid after this point... // Some targets will go 'invalid' immediately afer interacting with them. // Most of the time this happens, the target is immediately and invisibly replaced with // an identical looking target with a different script. // We must assume our target is no longer available for use after this point. await Coroutine.Sleep(Delay.AfterInteraction); // Wait for any casting to complete... // NB: Some interactions or item usages take time, and the WoWclient models this as spellcasting. // NB: We can't test for IsCasting or IsChanneling--we must instead look for a valid spell being cast. // There are some quests that require actions where the WoWclient returns 'true' for IsCasting, // but there is no valid spell being cast. We want the behavior to move on immediately in these // conditions. An example of such an interaction is removing 'tangler' vines in the Tillers // daily quest area. var castResult = await castMonitor.GetResult(); if (castResult != SpellCastResult.Succeeded && castResult != SpellCastResult.NoCastStarted) { string reason = castResult == SpellCastResult.UnknownFail ? castMonitor.FailReason : castResult.ToString(); QBCLog.DeveloperInfo("Interaction with {0} interrupted.", targetName); QBCLog.Warning("Interaction with {0} interrupted. Reason: {1}", targetName, reason); // Give whatever issue encountered a chance to settle... // NB: --we want the Sequence to fail when delay completes. if (castResult != SpellCastResult.LineOfSight && castResult != SpellCastResult.OutOfRange && castResult != SpellCastResult.TooClose) { await Coroutine.Sleep(1500); } return(false); } QBCLog.DeveloperInfo("Interact with '{0}' succeeded.", targetName); if (actionOnSuccessfulItemUseDelegate != null) { actionOnSuccessfulItemUseDelegate(); } return(true); } }
/// <summary>Gossips with the specified wow object. Hearthstone bind popups are automatically accepted</summary> /// <param name="wowObject">The wow object. Navigates to <paramref name="searchLocation" /> null </param> /// <param name="searchLocation">The search location of <paramref name="wowObject" />.</param> /// <param name="movementBy">The movement type to use.</param> /// <param name="navigationFailedAction"> /// The action to take if <paramref name="wowObject" /> or <paramref name="searchLocation"/> cant be navigated to /// </param> /// <param name="notFoundAction"> /// The action to take if <paramref name="wowObject" /> is not found at /// <paramref name="searchLocation" />. /// </param> /// <param name="noGossipFrameAction"> /// The action to take if interaction with <paramref name="wowObject" /> didn't open a /// gossip frame. /// </param> /// <param name="noMatchingGossipOptionAction"> /// <para>The action to take if the passed in gossip type and/or gossip indices </para> /// <para>doesn't match what was offered by <paramref name="wowObject" />.</para> /// </param> /// <param name="gossipEntryType"> /// <para>Type gossip entry type to select. Ignored if set to Unknown.</para> /// <para>If none of this type are found on current page then</para> /// <para> normal gossip types are clicked through in hopes of ending on a page with this gossip type</para> /// </param> /// <param name="gossipIndexes"> /// The gossip indexes to follow through. Has precedence over /// <paramref name="gossipEntryType" />. /// </param> /// <exception cref="Exception">A delegate callback throws an exception.</exception> public static async Task <bool> Gossip( WoWObject wowObject, WoWPoint searchLocation, MovementByType movementBy = MovementByType.FlightorPreferred, Action navigationFailedAction = null, Action notFoundAction = null, Action noGossipFrameAction = null, Action noMatchingGossipOptionAction = null, GossipEntry.GossipEntryType gossipEntryType = GossipEntry.GossipEntryType.Unknown, params int[] gossipIndexes) { if (wowObject == null) { if (!Navigator.AtLocation(searchLocation)) { if (await MoveTo(searchLocation, "Gossip object search area", movementBy)) { return(true); } navigationFailedAction?.Invoke(); return(false); } if (notFoundAction != null) { notFoundAction(); } else { TreeRoot.StatusText = "Waiting for the WoW object selected for gossip to spawn"; } return(true); } if (!wowObject.WithinInteractRange) { if (await MoveTo(wowObject.Location, wowObject.SafeName, movementBy)) { return(true); } navigationFailedAction?.Invoke(); return(false); } if (await CommonCoroutines.Dismount("Gossiping with " + wowObject.SafeName)) { await Coroutine.Sleep(Delay.BeforeButtonClick); } // If gossip frame is open then we must assume that it doesn't belong to the selected gossip object at this point if (GossipFrame.Instance.IsVisible) { GossipFrame.Instance.Close(); return(true); } Func <bool> isFrameReadyForInput = () => GossipFrame.Instance.IsVisible && (GossipFrame.Instance.GossipOptionEntries != null || (!gossipIndexes.Any() && gossipEntryType == GossipEntry.GossipEntryType.Unknown)); wowObject.Interact(); var openedGossipFrame = await Coroutine.Wait(3000, isFrameReadyForInput); if (!openedGossipFrame) { QBCLog.Warning("No gossip frame was opened after interacting with {0}", wowObject.SafeName); noGossipFrameAction?.Invoke(); return(false); } int gossipPage = 1; // Click through all the gossip indices for (var i = 0; i < gossipIndexes.Length; i++) { var index = gossipIndexes[i] - 1; var gossipEntry = GossipFrame.Instance.GossipOptionEntries.Where(g => g.Index == index) .Select(g => (GossipEntry?)g) .FirstOrDefault(); if (!gossipEntry.HasValue || gossipEntry.Value.Type == GossipEntry.GossipEntryType.Unknown) { QBCLog.Warning("{0} does not provide a gossip at index {1} on page {2}", wowObject.SafeName, index + 1, gossipPage); noMatchingGossipOptionAction?.Invoke(); return(false); } await ClickGossipOption(gossipEntry.Value, gossipPage); // make sure frame didn't close before we're done. if (!isFrameReadyForInput() && (i < gossipIndexes.Length - 1 || gossipEntryType != GossipEntry.GossipEntryType.Unknown)) { // This can happen if some external event causes object to stop offering gossip frame, such as NPC getting into combat. // Usually this can be fixed by interacting with object again at a later time. We let the caller handle this. QBCLog.Warning("Gossip frame for {0} closed unexpectedly.", wowObject.SafeName); return(true); } gossipPage++; } if (gossipEntryType != GossipEntry.GossipEntryType.Unknown) { if (!gossipIndexes.Any()) { while (true) { var gossipEntry = GossipFrame.Instance.GossipOptionEntries.FirstOrDefault(g => g.Type == gossipEntryType); // If no gossip indices were specified then we just click through more gossip, // hopefully it leads to the final gossip type if (gossipEntry.Type != gossipEntryType) { gossipEntry = GossipFrame.Instance.GossipOptionEntries.FirstOrDefault(g => g.Type == GossipEntry.GossipEntryType.Gossip); } if (gossipEntry.Type == GossipEntry.GossipEntryType.Unknown) { QBCLog.Warning("{0} does not provide a {0} gossip type", wowObject.SafeName, gossipEntryType); noMatchingGossipOptionAction?.Invoke(); return(false); } await ClickGossipOption(gossipEntry, gossipPage); if (!isFrameReadyForInput() && gossipEntry.Type != gossipEntryType) { // This can happen if some external event causes object to stop offering gossip frame, such as NPC getting into combat. // Usually this can be fixed by interacting with object again at a later time. We let the caller handle this. QBCLog.Warning("Gossip frame for {0} closed unexpectedly.", wowObject.SafeName); return(true); } if (gossipEntry.Type == gossipEntryType) { break; } gossipPage++; } } } // Set hearthstone automatically const string setHsPopupName = "CONFIRM_BINDER"; if (Lua.GetReturnVal <bool>($"return StaticPopup_Visible('{setHsPopupName}')", 0)) { uint hsId = StyxWoW.Me.HearthstoneAreaId; Lua.DoString( $"local _,frame = StaticPopup_Visible('{setHsPopupName}') if frame then StaticPopup_OnClick(frame, 1) end"); if (await Coroutine.Wait(5000, () => StyxWoW.Me.HearthstoneAreaId != hsId)) { await CommonCoroutines.SleepForRandomReactionTime(); var boundLocation = Lua.GetReturnVal <string>("return GetBindLocation()", 0); QBCLog.Info( "You are now bound at {0} Inn in {1}({2})", (Query.IsViable(wowObject) ? wowObject.SafeName : "the"), boundLocation, Me.HearthstoneAreaId); } } return(true); }
public override void Pulse() { #region pulsechecks if (!TreeRoot.IsRunning) { return; } if (Me.Combat && !Me.GotTarget) { GetClosestLiveUnitByID(24978).Target(); } if (Me.Combat || Me.Dead || Me.IsGhost || Me.IsResting) { return; } #endregion QuestlistUpdate(); //Logging.WriteDebug(TreeRoot.GoalText); if (TreeRoot.GoalText == "Goal: Kill Sunwell - Quest Bunny - Poratl x 1") { TreeRoot.GoalText = "DHX Goal: Take Poratl Reading"; } if (TreeRoot.GoalText == "Goal: Kill Sunwell - Quest Bunny - Sunwell x 1") { TreeRoot.GoalText = "DHX Goal: Take BloodCrystal Reading"; } if (TreeRoot.GoalText == "Goal: Kill Sunwell - Quest Bunny - Shrine x 1") { TreeRoot.GoalText = "DHX Goal: Take Shrine Reading"; } if (TreeRoot.GoalText == "Goal: Kill mob with ID 25086 10 times") { TreeRoot.GoalText = "DHX Goal: Free 10 Greengill Slaves"; } #region looting fix List <WoWUnit> LootMobList = ObjectManager.GetObjectsOfType <WoWUnit>(); if (!StyxWoW.Me.Combat) { foreach (WoWUnit unit in LootMobList) { if (!unit.IsAlive && unit.CanLoot) { while (StyxWoW.Me.Location.Distance(unit.Location) > 4 || unit.CanLoot) { try { WoWMovement.ClickToMove(unit.Location); } catch { } if (StyxWoW.Me.Location.Distance(unit.Location) <= 4) { try { if (unit.CanLoot) { unit.Interact(); Styx.Logic.Inventory.Frames.LootFrame.LootFrame.Instance.LootAll(); LootMobList.Remove(unit); } else if (unit.CanLoot) { while (unit.CanLoot) { unit.Interact(); Styx.Logic.Inventory.Frames.LootFrame.LootFrame.Instance.LootAll(); } LootMobList.Remove(unit); } } catch { } } } } } } if (!StyxWoW.Me.GotTarget && !StyxWoW.Me.Combat && Styx.Logic.LootTargeting.Instance.LootingList.Count == 0) { LootMobList.Clear(); } #endregion #region bloodberry bush loot reliability WoWObject bloddberrybush = GetClosestObjectByID(187333); if (bloddberrybush != null) { if (bloddberrybush.Distance < 5 && !Me.Combat) { bloddberrybush.Interact(); } } #endregion #region emissary of hate if (InvChkByID(34414)) { if (Me.CanLoot || Me.Looting) { return; } WoWUnit emissary = GetUnitByID(25003); if (emissary != null) { if (emissary.Dead && emissary.Distance < 10) { useItemByID(34414); } } } #endregion #region dont stop now ObjectManager.Update(); while (KeyChkByID(34477) && InvTotalByID(34479) < 3 && IsQuestCompleted(11547)) { Logging.WriteDebug("found key"); WoWObject orechest = GetClosestObjectByID(187264); if (orechest != null) { Logging.WriteDebug("found chest"); while (orechest.Distance > 3) { if (Me.Combat || Me.Dead || Me.IsGhost) { return; } Navigator.MoveTo(orechest.Location); if (orechest.Distance < 5) { Navigator.Clear(); WoWMovement.MoveStop(); orechest.Interact(); Thread.Sleep(3000); } ObjectManager.Update(); return; } } } while (!IsQuestCompleted(11536) && TreeRoot.GoalText == "Goal: Collect Darkspine Iron Ore x 3" && !KeyChkByID(34477)) { if (Me.Combat || Me.Dead || Me.IsGhost) { return; } WoWUnit oretarget = GetClosestLiveUnitByID(25060); oretarget.Target(); oretarget.Face(); Me.ToggleAttack(); if (oretarget.Distance > 5) { Navigator.MoveTo(oretarget.Location); } } #endregion #region pay 10 gold if (SSQuestIDList.Contains(11548)) { Lua.DoString("StaticPopup1Button1:Click()"); } #endregion #region greengill if (Me.CanLoot || Me.Looting) { return; } if (InvChkByID(34483)) { WoWUnit greengilltarget = GetClosestUnitByID(25084); if (greengilltarget != null) { if (greengilltarget.Distance < 36) { useItemByID(34483); Styx.Logic.Combat.SpellManager.ClickRemoteLocation(greengilltarget.Location); Thread.Sleep(4000); } } } #endregion if (InvTotalByID(34338) >= 4) { arms1 = true; } #region turnin Arm the Wards if ((TreeRoot.GoalText == "Goal: Collect Mana Remnants x 4" || TreeRoot.GoalText == "Goal: TurnIn Arm the Wards!") && IsQuestCompleted(11523) && SSQuestIDList.Contains(11523) && !SSCompQuests.Contains(11523)) { bool handindone = false; WoWPoint armsgoto = new WoWPoint(12892.95, -6880.174, 9.040649); while (armsgoto.Distance(Me.Location) > 0 || !handindone) { if (TreeRoot.GoalText != "Goal: TurnIn Arm the Wards!") { TreeRoot.GoalText = "Goal: TurnIn Arm the Wards!"; } Navigator.MoveTo(armsgoto); while (armsgoto.Distance(Me.Location) < 3 && !handindone) { Navigator.Clear(); WoWMovement.MoveStop(); GetUnitByID(24967).Interact(); Thread.Sleep(2000); Lua.DoString("GossipTitleButton1:Click()"); Thread.Sleep(2000); QuestBot.QuestHelper.QuestFrame.CompleteQuest(); handindone = true; return; } } } #endregion #region ES if (SSQuestIDList.Contains(11525) && InvChkByID(34368) && !IsQuestCompleted(11525) && (!Me.CanLoot || !Me.Looting)) { ObjectManager.Update(); if (Me.Dead || Me.Combat || Me.IsGhost || Me.CanLoot || Me.Looting || Me.IsResting) { return; } if (!IsQuestCompleted(11525)) { if (Me.Dead || Me.Combat || Me.IsGhost || Me.CanLoot || Me.Looting || Me.IsResting) { return; } WoWUnit ClosestUnit = GetClosestUnitByID(24972); if (ClosestUnit == null) { return; } if (ClosestUnit.KilledByMe) { while (ClosestUnit.Distance > 5) { if (Me.Dead || Me.Combat || Me.IsGhost || Me.CanLoot || Me.Looting || Me.IsResting) { Navigator.Clear(); WoWMovement.MoveStop(); return; } Navigator.MoveTo(ClosestUnit.Location); } TargetByGUID(ClosestUnit.Guid); Navigator.Clear(); WoWMovement.MoveStop(); useItemByID(34368); Thread.Sleep(3000); return; } if (ClosestUnit.Entry == 24972 && !ClosestUnit.TaggedByOther && !ClosestUnit.TaggedByMe && !ClosestUnit.Dead && !IsQuestCompleted(11525)) { Logging.Write("found 1 alive"); if (ClosestUnit.Distance < 30) { ClosestUnit.Target(); Me.ToggleAttack(); while (!Me.Combat && ClosestUnit.Distance < 50) { if (Me.Dead || Me.Combat || Me.IsGhost || Me.CanLoot || Me.Looting || Me.IsResting) { Navigator.Clear(); WoWMovement.MoveStop(); return; } Navigator.MoveTo(ClosestUnit.Location); Me.ToggleAttack(); } } return; } } } #endregion while (arms1 && !IsQuestCompleted(11523) && IsQuestCompleted(11525)) { if (Me.Dead || Me.Combat || Me.IsGhost || Me.CanLoot || Me.Looting || Me.IsResting) { return; } WoWPoint armsgoto = new WoWPoint(12913.55, -6932.246, 3.872839); while (armsgoto.Distance(Me.Location) > 0) { if (Me.Dead || Me.Combat || Me.IsGhost || Me.CanLoot || Me.Looting || Me.IsResting) { return; } Navigator.MoveTo(armsgoto); if (armsgoto.Distance(Me.Location) < 5) { useItemByID(34338); Thread.Sleep(5000); return; } } return; } #region Know your ley lines if (InvChkByID(34533)) { WoWObject ley1 = GetClosestObjectByID(25156); WoWObject ley2 = GetClosestObjectByID(25157); WoWObject ley3 = GetClosestObjectByID(25154); if (ley1 != null && !ley1done && ley1.Distance2D < 5) { Logging.WriteDebug("ley 1"); Thread.Sleep(2000); Navigator.Clear(); WoWMovement.MoveStop(); useItemByID(34533); Thread.Sleep(6000); ley1done = true; //<Hotspot X="12575.54" Y="-6915.316" Z="4.602137" /> } if (ley2 != null && !ley2done && ley2.Distance2D < 5) { Logging.WriteDebug("ley 2"); Thread.Sleep(2000); Navigator.Clear(); WoWMovement.MoveStop(); useItemByID(34533); Thread.Sleep(6000); ley2done = true; } //<Hotspot X="12771.83" Y="-6705.073" Z="2.288224" /> if (ley3 != null && !ley3done && ley3.Distance2D < 5) { Logging.WriteDebug("ley 2"); Thread.Sleep(2000); Navigator.Clear(); WoWMovement.MoveStop(); useItemByID(34533); Thread.Sleep(6000); ley3done = true; } } #endregion }
protected override Composite CreateBehavior() { return(_root ?? (_root = new PrioritySelector( new Decorator(ret => Counter >= NumOfTimes, new Action(ret => _isBehaviorDone = true)), new PrioritySelector( new Decorator(ret => CurrentObject != null && CurrentObject.Location.DistanceSqr(Me.Location) > Range * Range, new Sequence( new Action(ret => { TreeRoot.StatusText = "Moving to interact with - " + CurrentObject.Name; }), new Action(ret => Navigator.MoveTo(CurrentObject.Location)) ) ), new Decorator(ret => CurrentObject != null && CurrentObject.Location.DistanceSqr(Me.Location) <= Range * Range, new Sequence( new DecoratorContinue(ret => StyxWoW.Me.IsMoving, new Action(ret => { WoWMovement.MoveStop(); StyxWoW.SleepForLagDuration(); })), new Action(ret => { TreeRoot.StatusText = "Interacting with - " + CurrentObject.Name; CurrentObject.Interact(); _npcBlacklist.Add(CurrentObject.Guid); Thread.Sleep(2000); Counter++; }), new DecoratorContinue( ret => GossipOptions.Length > 0, new Action(ret => { foreach (var gos in GossipOptions) { GossipFrame.Instance.SelectGossipOption(gos); Thread.Sleep(1000); } })), new DecoratorContinue( ret => Loot && LootFrame.Instance.IsVisible, new Action(ret => LootFrame.Instance.LootAll())), new DecoratorContinue( ret => BuyItemId != 0 && MerchantFrame.Instance.IsVisible, new Action(ret => { var items = MerchantFrame.Instance.GetAllMerchantItems(); var item = items.FirstOrDefault(i => i.ItemId == BuyItemId && (i.BuyPrice * (ulong)BuyItemCount) <= Me.Copper && (i.NumAvailable >= BuyItemCount || i.NumAvailable == -1)); if (item != null) { MerchantFrame.Instance.BuyItem(item.Index, BuyItemCount); Thread.Sleep(1500); } })), new DecoratorContinue( ret => BuySlot != -1 && BuyItemId == 0 && MerchantFrame.Instance.IsVisible, new Action(ret => { var item = MerchantFrame.Instance.GetMerchantItemByIndex(BuySlot); if (item != null && (item.BuyPrice * (ulong)BuyItemCount) <= Me.Copper && (item.NumAvailable >= BuyItemCount || item.NumAvailable == -1)) { MerchantFrame.Instance.BuyItem(BuySlot, BuyItemCount); Thread.Sleep(1500); } })), new DecoratorContinue( ret => Me.CurrentTarget != null && Me.CurrentTarget == CurrentObject, new Action(ret => Me.ClearTarget())), new Action(ret => Thread.Sleep(WaitTime)) )), new Decorator( ret => Location.DistanceSqr(Me.Location) > 2 * 2, new Sequence( new Action(ret => { TreeRoot.StatusText = "Moving towards - " + Location; }), new Action(ret => Navigator.MoveTo(Location)))), new Decorator( ret => !WaitForNpcs && CurrentObject == null, new Action(ret => _isBehaviorDone = true)), new Action(ret => TreeRoot.StatusText = "Waiting for object to spawn") )))); }
public override void Pulse() { #region Goblin Death if (Me.Race == WoWRace.Goblin && Me.HasAura("Near Death!") && Me.ZoneId == 4720 && RessGoblin.Count > 0) { RessGoblin[0].Interact(); Thread.Sleep(1000); Lua.DoString("RunMacroText('/click QuestFrameCompleteQuestButton')"); } #endregion #region Quest 6544 if (Me.QuestLog.GetQuestById(6544) != null && !Me.QuestLog.GetQuestById(6544).IsCompleted&& Me.QuestLog.GetQuestById(6544).IsFailed) { Me.QuestLog.AbandonQuestById(6544); } #endregion #region Quest 6641 if (Me.QuestLog.GetQuestById(6641) != null && !Me.QuestLog.GetQuestById(6641).IsCompleted) { if (Me.CurrentTarget == null) { return; } if (Me.CurrentTarget != null && Me.CurrentTarget.CurrentTargetGuid != Me.Guid) { RoutineManager.Current.Pull(); } } #endregion #region Quest 13980 if (Me.QuestLog.GetQuestById(13980) != null && !Me.QuestLog.GetQuestById(13980).IsCompleted&& (Me.MinimapZoneText == "The Skunkworks" || Me.MinimapZoneText == "Talondeep Vale") && !Me.HasAura("Jinx's Elf Detection Ray")) { Lua.DoString("UseItemByName(46776)"); Thread.Sleep(500); } #endregion #region Quest 14236 if (!Me.Dead && Me.QuestLog.GetQuestById(14236) != null && !Me.QuestLog.GetQuestById(14236).IsCompleted) { WoWPoint q142361 = new WoWPoint(638.7761, 2780.211, 88.81393); WoWPoint q142362 = new WoWPoint(634.825, 2824.758, 87.50606); WoWPoint q142363 = new WoWPoint(684.2277, 2821.671, 86.48402); WoWPoint q142364 = new WoWPoint(646.324, 2859.586, 87.25509); WoWPoint q142365 = new WoWPoint(700.0909, 2848.549, 84.93351); WoWPoint q142366 = new WoWPoint(610.5126, 2908.886, 91.3634); WoWPoint q142367 = new WoWPoint(574.0838, 2886.616, 90.26514); WoWPoint q142368 = new WoWPoint(582.1985, 2797.607, 88.356); WoWPoint q142369 = new WoWPoint(602.7809, 2784.686, 88.45428); while (!Me.HasAura("Weed Whacker")) { Lua.DoString("UseItemByName(49108)"); Thread.Sleep(1000); } while (!Me.QuestLog.GetQuestById(14236).IsCompleted) { WoWMovement.ClickToMove(q142361); Thread.Sleep(20000); WoWMovement.ClickToMove(q142362); Thread.Sleep(20000); WoWMovement.ClickToMove(q142363); Thread.Sleep(20000); WoWMovement.ClickToMove(q142364); Thread.Sleep(20000); WoWMovement.ClickToMove(q142365); Thread.Sleep(20000); WoWMovement.ClickToMove(q142366); Thread.Sleep(20000); WoWMovement.ClickToMove(q142367); Thread.Sleep(20000); WoWMovement.ClickToMove(q142368); Thread.Sleep(20000); WoWMovement.ClickToMove(q142369); Thread.Sleep(20000); } } #endregion #region Quest 24958 if (Me.QuestLog.GetQuestById(24958) != null && !Me.QuestLog.GetQuestById(24958).IsCompleted&& !Me.Dead) { WoWPoint wowpoint = new WoWPoint(1305.009, 1183.095, 121.1527); while (Me.Location.Distance(wowpoint) > 5) { Navigator.MoveTo(wowpoint); Thread.Sleep(500); } if (q24958_Giant_Turtle.Count != 0) { q24958_Giant_Turtle[0].Target(); q24958_Giant_Turtle[0].Face(); } while (Me.QuestLog.GetQuestById(24958) != null && !Me.QuestLog.GetQuestById(24958).IsCompleted&& Me.CurrentTarget != null && Me.CurrentTarget.IsAlive) { WoWMovement.MoveStop(); Thread.Sleep(100); Lua.DoString("UseItemByName(52043)"); Thread.Sleep(100); } } #endregion #region Quest 13961 if (Me.QuestLog.GetQuestById(13961) != null && !Me.QuestLog.GetQuestById(13961).IsCompleted) { if (Me.CurrentTargetGuid != 0 && Me.CurrentTarget.Name == "Razormane Pillager" && !Me.HasAura("Dragging a Razormane")) { while (!Me.CurrentTarget.IsFriendly) { Lua.DoString("UseItemByName(46722)"); Thread.Sleep(500); } if (Me.CurrentTarget.IsFriendly) { while (Me.CurrentTarget.Distance > 5) { Navigator.MoveTo(Me.CurrentTarget.Location); Thread.Sleep(100); } Me.CurrentTarget.Interact(); Thread.Sleep(500); Lua.DoString("SelectGossipOption(1)"); Thread.Sleep(500); } } } #endregion #region Quest 25165 if (Me.QuestLog.GetQuestById(25165) != null && !Me.QuestLog.GetQuestById(25165).IsCompleted&& !Me.HasAura("Poison Extraction Totem")) { bool IsOnCD = Lua.GetReturnVal <bool>("GetItemCooldown(52505)", 0); if (!IsOnCD) { Lua.DoString("UseItemByName(52505)"); } } #endregion #region Quest 26321 if (Me.QuestLog.GetQuestById(26321) != null && !Me.QuestLog.GetQuestById(26321).IsCompleted) { bool IsOnCD = Lua.GetReturnVal <bool>("GetItemCooldown(58165)", 0); if (!IsOnCD && !Me.HasAura("A Lashtail Hatchling: Hatchling Guardian Aura")) { Lua.DoString("UseItemByName(58165)"); } } #endregion #region Quest 26325 if (Me.QuestLog.GetQuestById(26325) != null && !Me.QuestLog.GetQuestById(26325).IsCompleted) { bool IsOnCD = Lua.GetReturnVal <bool>("GetItemCooldown(58165)", 0); if (!IsOnCD && !Me.HasAura("A Lashtail Hatchling: Hatchling Guardian Aura")) { Lua.DoString("UseItemByName(58165)"); } } #endregion #region Quest 26953 if (Me.QuestLog.GetQuestById(26953) != null && !Me.QuestLog.GetQuestById(26953).IsCompleted&& !Me.HasAura("Zen'Kiki Guardian Aura")) { if (AdrineTowhide.Count > 0 && AdrineTowhide[0].Distance < 5) { AdrineTowhide[0].Interact(); Thread.Sleep(1000); Lua.DoString("SelectGossipOption(1)"); } else if (AdrineTowhide.Count > 0 && AdrineTowhide[0].Distance > 5) { while (AdrineTowhide[0].Distance > 5) { Navigator.MoveTo(AdrineTowhide[0].Location); Thread.Sleep(100); } } else if (AdrineTowhide.Count < 1) { WoWPoint TowHide = new WoWPoint(1796.26, -1684.78, 60.1698); while (Me.Location.Distance(TowHide) > 5) { Navigator.MoveTo(TowHide); Thread.Sleep(100); } } } #endregion #region Quest 26925 if (Me.QuestLog.GetQuestById(26925) != null && !Me.QuestLog.GetQuestById(26925).IsCompleted&& (StickboneBerserker.Count >= 1)) { bool IsOnCD = Lua.GetReturnVal <bool>("GetItemCooldown(60678)", 0); if (!IsOnCD) { Lua.DoString("UseItemByName(60678)"); LegacySpellManager.ClickRemoteLocation(StickboneBerserker[0].Location); } } #endregion #region Quest 26648 if (Me.QuestLog.GetQuestById(26648) != null && !Me.QuestLog.GetQuestById(26648).IsCompleted) { bool IsOnCD = Lua.GetReturnVal <bool>("GetItemCooldown(59226)", 0); if (!IsOnCD && !Me.HasAura("Dead Eye's Intuition")) { Lua.DoString("UseItemByName(59226)"); } } #endregion #region Quest 14238 if (Me.QuestLog.GetQuestById(14238) != null && !Me.QuestLog.GetQuestById(14238).IsCompleted&& !Me.HasAura("Infrared Heat Focals")) { bool IsOnCD = Lua.GetReturnVal <bool>("GetItemCooldown(49611)", 0); if (!IsOnCD) { Lua.DoString("UseItemByName(49611)"); } } #endregion #region Quest 27789 if (Me.QuestLog.GetQuestById(27789) != null && !Me.QuestLog.GetQuestById(27789).IsCompleted) { while (Me.QuestLog.GetQuestById(27789) != null && !Me.QuestLog.GetQuestById(27789).IsCompleted) { StonevaultRuffian[0].Target(); WoWMovement.ConstantFace(Me.CurrentTarget.Guid); Lua.DoString("CastPetAction(1)"); StonevaultGoon[0].Target(); WoWMovement.ConstantFace(Me.CurrentTarget.Guid); Lua.DoString("CastPetAction(1)"); Lua.DoString("CastPetAction(2)"); } } #endregion #region Quest 27771 if (Me.QuestLog.GetQuestById(27771) != null && !Me.QuestLog.GetQuestById(27771).IsCompleted) { while (Me.QuestLog.GetQuestById(27771) != null && !Me.QuestLog.GetQuestById(27771).IsCompleted) { Lua.DoString("RunMacroText('/cleartarget')"); FuckingWait.Start(); if (FuckingWait.Elapsed.Seconds > 12) { return; } } } #endregion #region Quest 27885 if (!Me.Dead && Me.QuestLog.GetQuestById(27885) != null && !Me.QuestLog.GetQuestById(27885).IsCompleted) { WoWPoint q278850 = new WoWPoint(-6970.479, -3439.854, 200.8959); WoWPoint q278851 = new WoWPoint(-6968.06, -3440.255, 200.8969); WoWPoint q278852 = new WoWPoint(-6964.444, -3440.112, 200.8969); WoWPoint q278853 = new WoWPoint(-6961.984, -3439.921, 200.8963); WoWPoint q278854 = new WoWPoint(-6959.851, -3445.163, 201.2538); WoWPoint q278855 = new WoWPoint(-6959.738, -3447.433, 201.6079); WoWPoint q278856 = new WoWPoint(-6964.568, -3450.362, 200.8965); WoWPoint q278857 = new WoWPoint(-6966.959, -3450.602, 200.8965); WoWPoint q278858 = new WoWPoint(-6969.584, -3445.054, 200.8965); WoWPoint q278859 = new WoWPoint(-6969.789, -3442.688, 200.8965); WoWPoint q278811 = new WoWPoint(-6964.177, -3440.75, 200.8958); WoWPoint q278812 = new WoWPoint(-6961.631, -3440.965, 200.8958); WoWPoint q278813 = new WoWPoint(-6960.158, -3445.682, 200.8958); WoWPoint q278814 = new WoWPoint(-6960.385, -3447.647, 200.8958); WoWPoint q278815 = new WoWPoint(-6964.737, -3449.662, 200.8958); WoWPoint q278816 = new WoWPoint(-6967, -3449.534, 200.8955); WoWPoint q278817 = new WoWPoint(-6968.355, -3445.081, 200.8955); WoWPoint q278818 = new WoWPoint(-6968.267, -3442.952, 200.8955); WoWPoint q278821 = new WoWPoint(-6964.177, -3440.75, 200.8958); WoWPoint q278822 = new WoWPoint(-6961.631, -3440.965, 200.8958); WoWPoint q278823 = new WoWPoint(-6960.158, -3445.682, 200.8958); WoWPoint q278824 = new WoWPoint(-6960.385, -3447.647, 200.8958); WoWPoint q278825 = new WoWPoint(-6964.737, -3449.662, 200.8958); WoWPoint q278826 = new WoWPoint(-6967, -3449.534, 200.8955); WoWPoint q278827 = new WoWPoint(-6968.355, -3445.081, 200.8955); WoWPoint q278828 = new WoWPoint(-6968.267, -3442.952, 200.8955); WoWPoint q278841 = new WoWPoint(-6964.177, -3440.75, 200.8958); WoWPoint q278842 = new WoWPoint(-6961.631, -3440.965, 200.8958); WoWPoint q278843 = new WoWPoint(-6960.158, -3445.682, 200.8958); WoWPoint q278844 = new WoWPoint(-6961.002, -3447.482, 200.8966); WoWPoint q278845 = new WoWPoint(-6964.568, -3445.147, 200.8966); while (!Me.QuestLog.GetQuestById(27885).IsCompleted) { WoWMovement.ClickToMove(q278850); Thread.Sleep(3000); WoWMovement.ClickToMove(q278851); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278852); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278853); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278854); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278855); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278856); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278857); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278858); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278859); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278811); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278812); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278813); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278814); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278815); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278816); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278817); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278818); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278821); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278822); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278823); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278824); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278825); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278826); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278827); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278828); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278841); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278842); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278843); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278844); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); WoWMovement.ClickToMove(q278845); Thread.Sleep(1000); WardensPawn[0].Target(); WardensPawn[0].Interact(); Thread.Sleep(1000); } } #endregion #region Quest 27893 if (Me.QuestLog.GetQuestById(27893) != null && !Me.QuestLog.GetQuestById(27893).IsCompleted) { WoWPoint q278931 = new WoWPoint(-6730.564, -2448.625, 272.7784); WoWPoint q278932 = new WoWPoint(-6805.746, -2435.204, 272.7776); while (!Me.QuestLog.GetQuestById(27893).IsCompleted) { WoWMovement.ClickToMove(q278931); Thread.Sleep(10000); WoWMovement.ClickToMove(q278932); Thread.Sleep(13000); Lua.DoString("RunMacroText('/target Darkflight Flameblade')"); Lua.DoString("CastPetAction(1)"); Lua.DoString("RunMacroText('/target Darkflight Flameblade')"); Lua.DoString("CastPetAction(4)"); Lua.DoString("RunMacroText('/target Darkflight Flameblade')"); Lua.DoString("CastPetAction(8)"); Lua.DoString("RunMacroText('/target Darkflight Flameblade')"); Lua.DoString("CastPetAction(2)"); Thread.Sleep(5000); Lua.DoString("RunMacroText('/target Darkflight Flameblade')"); Lua.DoString("CastPetAction(5)"); Lua.DoString("RunMacroText('/target Darkflight Flameblade')"); Lua.DoString("CastPetAction(7)"); Thread.Sleep(5000); Lua.DoString("RunMacroText('/target Darkflight Flameblade')"); Lua.DoString("CastPetAction(1)"); Thread.Sleep(5000); Lua.DoString("RunMacroText('/target Darkflight Flameblade')"); Lua.DoString("CastPetAction(1)"); } } #endregion #region Quest 27894 if (Me.QuestLog.GetQuestById(27894) != null && !Me.QuestLog.GetQuestById(27894).IsCompleted) { while (!Me.QuestLog.GetQuestById(27894).IsCompleted&& (Kalaran.Count >= 1)) { Lua.DoString("CastPetAction(1)"); Lua.DoString("CastPetAction(4)"); Lua.DoString("CastPetAction(8)"); Lua.DoString("CastPetAction(2)"); Lua.DoString("CastPetAction(5)"); Lua.DoString("CastPetAction(7)"); FuckingWait.Start(); if (FuckingWait.Elapsed.Seconds > 12) { return; } } } #endregion #region Quest 27895 if (Me.QuestLog.GetQuestById(27895) != null && !Me.QuestLog.GetQuestById(27895).IsCompleted) { while (!Me.QuestLog.GetQuestById(27895).IsCompleted&& (Moldarr.Count >= 1)) { Lua.DoString("CastPetAction(1)"); Lua.DoString("CastPetAction(4)"); Lua.DoString("CastPetAction(8)"); Lua.DoString("CastPetAction(2)"); Lua.DoString("CastPetAction(5)"); Lua.DoString("CastPetAction(7)"); Lua.DoString("AttackTarget()"); FuckingWait.Start(); if (FuckingWait.Elapsed.Seconds > 12) { return; } } } #endregion #region Quest 27895 if (Me.QuestLog.GetQuestById(27895) != null && !Me.QuestLog.GetQuestById(27895).IsCompleted) { while (!Me.QuestLog.GetQuestById(27895).IsCompleted&& (Jirakka.Count >= 1)) { Lua.DoString("CastPetAction(1)"); Lua.DoString("CastPetAction(4)"); Lua.DoString("CastPetAction(8)"); Lua.DoString("CastPetAction(2)"); Lua.DoString("CastPetAction(5)"); Lua.DoString("CastPetAction(7)"); Lua.DoString("AttackTarget()"); FuckingWait.Start(); if (FuckingWait.Elapsed.Seconds > 12) { return; } } } #endregion #region Quest 27896 if (Me.QuestLog.GetQuestById(27896) != null && !Me.QuestLog.GetQuestById(27896).IsCompleted) { while (!Me.QuestLog.GetQuestById(27896).IsCompleted&& (Nyxondra.Count >= 1)) { Lua.DoString("RunMacroText('/target Nyxondra')"); Lua.DoString("CastPetAction(1)"); Lua.DoString("CastPetAction(4)"); Lua.DoString("CastPetAction(8)"); Lua.DoString("CastPetAction(2)"); Lua.DoString("CastPetAction(5)"); Lua.DoString("CastPetAction(7)"); FuckingWait.Start(); if (FuckingWait.Elapsed.Seconds > 12) { return; } } } #endregion #region Quest 27964 if (Me.QuestLog.GetQuestById(27964) != null && !Me.QuestLog.GetQuestById(27964).IsCompleted&& !IsAttached27964) { Lua.Events.AttachEvent("CHAT_MSG_MONSTER_YELL", MY_27964); IsAttached27964 = true; } if (Me.QuestLog.GetQuestById(27964) != null && Me.QuestLog.GetQuestById(27964).IsCompleted&& IsAttached27964) { Lua.Events.DetachEvent("CHAT_MSG_MONSTER_YELL", MY_27964); IsAttached27964 = false; } if (Me.QuestLog.GetQuestById(27964) != null && !Me.QuestLog.GetQuestById(27964).IsCompleted) { WoWObject wo = null; try { wo = ObjectManager.GetObjectsOfType <WoWObject>().Where(u => u.Entry == 206573 && !Me.Combat && !Me.Dead).FirstOrDefault(); } catch { } if (wo != null) { while (!Me.QuestLog.GetQuestById(27964).IsCompleted) { while (wo.Distance > 5) { Navigator.MoveTo(wo.Location); Thread.Sleep(100); } if (wo.Distance < 5) { wo.Interact(); Thread.Sleep(500); } } } } #endregion #region Quest 28226 if (Me.QuestLog.GetQuestById(28226) != null && !Me.QuestLog.GetQuestById(28226).IsCompleted) { if (GossipFrame.Instance.IsVisible) { if (!Obj4Done28226 && GossipFrame.Instance.GossipOptionEntries.Count > 1) { Lua.DoString("SelectGossipOption(2)"); Thread.Sleep(1000); } else { Lua.DoString("SelectGossipOption(1)"); Thread.Sleep(1000); } } } #endregion #region Quest 26922 if (Me.QuestLog.GetQuestById(26922) != null) { if (StickboneBerserker.Count > 0) { StickboneBerserker[0].Target(); Thread.Sleep(500); Lua.DoString("UseItemByName(60678)"); Thread.Sleep(500); LegacySpellManager.ClickRemoteLocation(StickboneBerserker[0].Location); Thread.Sleep(1000); } if (ScourgeBoneAnimus.Count > 0) { Lua.DoString("UseItemByName(60678)"); Thread.Sleep(500); LegacySpellManager.ClickRemoteLocation(ScourgeBoneAnimus[0].Location); Thread.Sleep(1000); } } #endregion #region Quest 10129 if (Me.QuestLog.GetQuestById(10129) != null && !Me.QuestLog.GetQuestById(10129).IsCompleted) { bool IsOnCD = Lua.GetReturnVal <bool>("GetItemCooldown(28038)", 0); if (!IsOnCD) { Lua.DoString("UseItemByName(28038)"); LegacySpellManager.ClickRemoteLocation(GatewayShaadraz[0].Location); Lua.DoString("UseItemByName(28038)"); LegacySpellManager.ClickRemoteLocation(GatewayMurketh[0].Location); } } #endregion #region Quest 10162 if (Me.QuestLog.GetQuestById(10162) != null && !Me.QuestLog.GetQuestById(10162).IsCompleted) { bool IsOnCD = Lua.GetReturnVal <bool>("GetItemCooldown(28132)", 0); if (!IsOnCD) { if (!Obj1Done10162) { Lua.DoString("UseItemByName(28132)"); LegacySpellManager.ClickRemoteLocation(MoargOverseer[0].Location); } if (Obj1Done10162) { Lua.DoString("UseItemByName(28132)"); LegacySpellManager.ClickRemoteLocation(GanArgPeon[0].Location); } if (Obj2Done10162) { Lua.DoString("UseItemByName(28132)"); LegacySpellManager.ClickRemoteLocation(FelCannon[0].Location); } } #endregion #region Quest 26305 if (Me.QuestLog.GetQuestById(26305) != null && !Me.QuestLog.GetQuestById(26305).IsCompleted) { if (Me.CurrentTarget.Entry == 2530) { Lua.DoString("UseItemByName(3912)"); } } #endregion #region Disguise Quests if (Me.QuestLog.GetQuestById(28439) != null || Me.QuestLog.GetQuestById(28440) != null || Me.QuestLog.GetQuestById(28432) != null || Me.QuestLog.GetQuestById(28433) != null || Me.QuestLog.GetQuestById(28434) != null || Me.QuestLog.GetQuestById(28435) != null) { int counter = 0; foreach (WoWAura s in ObjectManager.Me.ActiveAuras.Values) { if (s.Name.Contains("Disguise")) { counter++; } } if (counter > 0) { Lua.DoString("UseItemByName(63357)"); Thread.Sleep(6000); } } #endregion #region Quest 27001 if (Me.QuestLog.GetQuestById(27001) != null && !Me.QuestLog.GetQuestById(27001).IsCompleted&& SpiderThingy.Count > 0) { WoWPoint wp = new WoWPoint(2432.375, -1650.377, 104.1796); while (Me.Location.Distance(wp) > 3) { Navigator.MoveTo(wp); Thread.Sleep(100); } } #endregion #region Quest 10813 if (Me.QuestLog.GetQuestById(10813) != null && !Me.QuestLog.GetQuestById(10813).IsCompleted&& EyeOfGrillok.Count > 0) { if (!Me.HasAura("Eye of Grillok")) { EyeOfGrillok[0].Target(); while (Me.Location.Distance(EyeOfGrillok[0].Location) > 10) { Navigator.MoveTo(EyeOfGrillok[0].Location); Thread.Sleep(200); } Lua.DoString("UseItemByName(31463)"); Thread.Sleep(1000); } } if (Me.QuestLog.GetQuestById(10813) != null && !Me.QuestLog.GetQuestById(10813).IsCompleted&& Me.HasAura("Eye of Grillok")) { WoWPoint wp = new WoWPoint(-1325.649, 2356.759, 88.95618); if (!Me.Combat) { while (Me.Location.Distance(wp) > 5) { Flightor.MoveTo(wp); Thread.Sleep(200); } } } #endregion } }