Ejemplo n.º 1
0
        internal static BehaviorArray GetGarrisonBuildingFirstQuestArray(Building b, bool alliance)
        {
            if (b.Type == BuildingType.SalvageYard)
            {
                //var abandon = new Behaviors.BehaviorQuestAbandon(b.FirstQuestID);
                var pickup          = new BehaviorQuestPickup(b.FirstQuestId, b.SafeMovementPoint, b.WorkOrderNpcEntryId);
                var itemInteraction = new BehaviorItemInteraction(118473);
                var turnin          = new BehaviorQuestTurnin(b.FirstQuestId, b.SafeMovementPoint, b.WorkOrderNpcEntryId);
                var behaviorArray   = new BehaviorArray(new Behavior[] { pickup, itemInteraction, turnin });
                behaviorArray.Criteria += () => BaseSettings.CurrentSettings.BehaviorQuests;
                return(behaviorArray);
            }
            else if (b.Type == BuildingType.TradingPost)
            {
                var pickup  = new BehaviorQuestPickup(b.FirstQuestId, b.SafeMovementPoint, b.WorkOrderNpcEntryId);
                var moveLoc = Player.IsAlliance
                    ? new WoWPoint(1764.08, 150.39, 76.02)
                    : new WoWPoint(5745.101, 4570.491, 138.8332);

                var moveto   = new BehaviorMove(moveLoc, 7f);
                var npcId    = Player.IsAlliance ? 87288 : 87260;
                var target   = new BehaviorSelectTarget(moveLoc);
                var interact = new BehaviorItemInteraction(118418, true);
                var turnin   = new BehaviorQuestTurnin(b.FirstQuestId, b.SafeMovementPoint, b.WorkOrderNpcEntryId);

                var behaviorArray = new BehaviorArray(new Behavior[] { pickup, moveto, target, interact, turnin });
                behaviorArray.Criteria += () => BaseSettings.CurrentSettings.BehaviorQuests;
                return(behaviorArray);
            }
            else if (b.Type == BuildingType.Storehouse)
            {
                var pickup = new BehaviorQuestPickup(b.FirstQuestId, b.EntranceMovementPoint, b.FirstQuestNpcId);

                List <WoWPoint> _hotSpots = new List <WoWPoint>
                {
                    MovementCache.GarrisonEntrance,

                    MovementCache.GardenPlot63SafePoint,
                    MovementCache.MinePlot59SafePoint,

                    MovementCache.MediumPlot22SafePoint,
                    MovementCache.LargePlot23SafePoint,
                    MovementCache.LargePlot24SafePoint,
                    MovementCache.MediumPlot25SafePoint,

                    MovementCache.SmallPlot18SafePoint,
                    MovementCache.SmallPlot19SafePoint,
                    MovementCache.SmallPlot20SafePoint,
                };

                var looting = new BehaviorHotspotRunning(_hotSpots.ToArray(), BehaviorHotspotRunning.HotSpotType.Looting, () => BehaviorManager.HasQuestAndNotCompleted(b.FirstQuestId));
                var turnin  = new BehaviorQuestTurnin(b.FirstQuestId, b.EntranceMovementPoint, b.FirstQuestNpcId);

                var behaviorArray = new BehaviorArray(new Behavior[] { pickup, looting, turnin });
                behaviorArray.Criteria += () => BaseSettings.CurrentSettings.BehaviorQuests;
                return(behaviorArray);
            }
            else if (b.Type == BuildingType.Lumbermill)
            {
                var pickup = new BehaviorQuestPickup(b.FirstQuestId, b.EntranceMovementPoint, b.FirstQuestNpcId);

                WoWPoint movementPoint;
                if (Player.IsAlliance)
                {
                    movementPoint = new WoWPoint(1555.087, 173.8229, 72.59766);
                }
                else
                {
                    movementPoint = new WoWPoint(6082.979, 4795.821, 149.1655);
                }

                var looting       = new BehaviorHotspotRunning(new[] { movementPoint }, new uint[] { 234021, 233922 }, BehaviorHotspotRunning.HotSpotType.Looting, () => BehaviorManager.HasQuestAndNotCompleted(b.FirstQuestId));
                var turnin        = new BehaviorQuestTurnin(b.FirstQuestId, b.EntranceMovementPoint, b.FirstQuestNpcId);
                var behaviorArray = new BehaviorArray(new Behavior[] { pickup, looting, turnin });
                behaviorArray.Criteria += () => BaseSettings.CurrentSettings.BehaviorQuests;
                return(behaviorArray);
            }
            else if (b.Type == BuildingType.Mines)
            {
                var pickup = new BehaviorQuestPickup(b.FirstQuestId, b.EntranceMovementPoint, b.FirstQuestNpcId);

                var looting = new BehaviorHotspotRunning(Player.IsAlliance ?
                                                         MovementCache.Alliance_Mine_LevelOne.ToArray() :
                                                         MovementCache.Horde_Mine_LevelOne.ToArray(),
                                                         MineQuestMobIDs.ToArray(),
                                                         BehaviorHotspotRunning.HotSpotType.Killing,
                                                         () => BehaviorManager.HasQuestAndNotCompleted(b.FirstQuestId));

                var turnin = new BehaviorQuestTurnin(b.FirstQuestId, b.EntranceMovementPoint, b.FirstQuestNpcId);

                var behaviorArray = new BehaviorArray(new Behavior[] { pickup, looting, turnin });
                behaviorArray.Criteria += () => BaseSettings.CurrentSettings.BehaviorQuests;
                return(behaviorArray);
            }
            else if (b.Type == BuildingType.HerbGarden)
            {
                var pickup = new BehaviorQuestPickup(b.FirstQuestId, b.EntranceMovementPoint, b.FirstQuestNpcId);

                var looting = new BehaviorHotspotRunning(Player.IsAlliance ?
                                                         MovementCache.Alliance_Herb_LevelOne.ToArray() :
                                                         MovementCache.Horde_Herb_LevelOne.ToArray(),
                                                         HerbQuestMobIDs.ToArray(),
                                                         BehaviorHotspotRunning.HotSpotType.Killing,
                                                         () => BehaviorManager.HasQuestAndNotCompleted(b.FirstQuestId));

                var turnin = new BehaviorQuestTurnin(b.FirstQuestId, b.EntranceMovementPoint, b.FirstQuestNpcId);

                var behaviorArray = new BehaviorArray(new Behavior[] { pickup, looting, turnin });
                behaviorArray.Criteria += () => BaseSettings.CurrentSettings.BehaviorQuests;
                return(behaviorArray);
            }
            else
            {
                var pickup          = new BehaviorQuestPickup(b.FirstQuestId, b.SafeMovementPoint, b.FirstQuestNpcId);
                var workorder       = new BehaviorQuestWorkOrder(b);
                var workorderPickup = new BehaviorQuestWorkOrderPickup(b);
                var turnin          = new BehaviorQuestTurnin(b.FirstQuestId, b.SafeMovementPoint, b.WorkOrderNpcEntryId);
                var behaviorArray   = new BehaviorArray(new Behavior[] { pickup, workorder, workorderPickup, turnin });
                behaviorArray.Criteria += () => BaseSettings.CurrentSettings.BehaviorQuests;
                return(behaviorArray);
            }
        }
Ejemplo n.º 2
0
        internal static Behavior[] GetGarrisonBehaviors()
        {
            var retBehaviorList = new List <Behavior>
            {
                new BehaviorGetMail(),
                new BehaviorMissionComplete(),
                new BehaviorCache()
            };

            //Finalize Plots
            foreach (var b in Buildings.Values.Where(b => b.CanActivate))
            {
                retBehaviorList.Add(new BehaviorFinalizePlots(b));
            }

            #region Building First Quest Behaviors
            foreach (var b in Buildings.Values.Where(b => !b.FirstQuestCompleted && !b.IsBuilding && b.FirstQuestNpcId > -1 && b.FirstQuestId > -1))
            {
                retBehaviorList.Add(QuestHelper.GetGarrisonBuildingFirstQuestArray(b, Player.IsAlliance));
            }

            #endregion

            #region Herbing and Mining

            if (Buildings.Values.Any(b => b.Type == BuildingType.Mines))
            {
                var miningMoveTo = new BehaviorMove(MovementCache.MinePlot59SafePoint);
                miningMoveTo.Criteria += () => !GarrisonMineZoneIds.Contains(Player.ZoneId.Value);

                var miningArray = new BehaviorArray(new Behavior[]
                {
                    new BehaviorCustomAction(() =>
                    {
                        TargetManager.LootType = TargetManager.LootFlags.Units | TargetManager.LootFlags.Ore;
                    }),

                    miningMoveTo,
                    new BehaviorMine()
                });
                miningArray.Criteria += () => (!Buildings[BuildingType.Mines].IsBuilding &&
                                               !Buildings[BuildingType.Mines].CanActivate &&
                                               Buildings[BuildingType.Mines].FirstQuestCompleted &&
                                               LuaCommands.CheckForDailyReset(BaseSettings.CurrentSettings.LastCheckedMine) &&
                                               BaseSettings.CurrentSettings.BehaviorMineGather);
                miningArray.DisposalAction = () =>
                {
                    TargetManager.LootType = TargetManager.LootFlags.None;
                };

                retBehaviorList.Add(miningArray);
                retBehaviorList.Add(new BehaviorWorkOrderPickUp(Buildings[BuildingType.Mines]));
                retBehaviorList.Add(new BehaviorWorkOrderStartUp(Buildings[BuildingType.Mines]));
            }

            if (Buildings.Values.Any(b => b.Type == BuildingType.HerbGarden))
            {
                var herbingArray = new BehaviorArray(new Behavior[]
                {
                    new BehaviorCustomAction(() =>
                    {
                        TargetManager.LootType = TargetManager.LootFlags.Units | TargetManager.LootFlags.Herbs;
                    }),

                    new BehaviorMove(MovementCache.GardenPlot63SafePoint),
                    new BehaviorHerb()
                });
                herbingArray.Criteria += () => (!Buildings[BuildingType.HerbGarden].IsBuilding &&
                                                !Buildings[BuildingType.HerbGarden].CanActivate &&
                                                Buildings[BuildingType.HerbGarden].FirstQuestCompleted &&
                                                LuaCommands.CheckForDailyReset(BaseSettings.CurrentSettings.LastCheckedHerb) &&
                                                BaseSettings.CurrentSettings.BehaviorHerbGather);
                herbingArray.DisposalAction = () =>
                {
                    TargetManager.LootType = TargetManager.LootFlags.None;
                };

                retBehaviorList.Add(herbingArray);
                retBehaviorList.Add(new BehaviorWorkOrderPickUp(Buildings[BuildingType.HerbGarden]));
                retBehaviorList.Add(new BehaviorWorkOrderStartUp(Buildings[BuildingType.HerbGarden]));
            }

            #endregion

            #region Professions
            foreach (var profession in Player.Professions.ProfessionSkills.Values.Where(p => p.DailyCooldownSpellIds != null))
            {
                if (profession.Skill == SkillLine.Inscription)
                {
                    retBehaviorList.Add(new BehaviorMilling());
                }

                int[] spellIds = profession.DailyCooldownSpellIds;
                retBehaviorList.Add(new BehaviorCraftingProfession(profession.Skill, spellIds[1]));
                retBehaviorList.Add(new BehaviorCraftingProfession(profession.Skill, spellIds[0]));
            }
            #endregion

            #region Salvaging
            if (Buildings.Values.Any(b => b.Type == BuildingType.SalvageYard))
            {
                retBehaviorList.Add(new BehaviorSalvage());
            }
            #endregion

            #region Work Order Pickup && Startup
            foreach (var b in Buildings.Values.Where(b => b.FirstQuestId <= 0 || b.FirstQuestCompleted).OrderBy(b => b.Plot))
            {
                if (b.Type != BuildingType.Mines || b.Type != BuildingType.HerbGarden)
                {
                    if (b.WorkOrder != null)
                    {
                        retBehaviorList.Add(new BehaviorWorkOrderPickUp(b));

                        if (b.Type == BuildingType.EnchantersStudy)
                        {
                            retBehaviorList.Add(new BehaviorDisenchant()); //Disenchanting!
                        }
                        else if (b.Type == BuildingType.ScribesQuarters)
                        {
                            retBehaviorList.Add(new BehaviorMilling()); //Milling!
                        }
                        else if (b.Type == BuildingType.Barn)
                        {
                            if (Player.Inventory.Trap != null)
                            {
                                GarrisonBase.Log("Adding Trapping Behavior");

                                if (Player.Inventory.Trap.TrapRank > 1)
                                {
                                    retBehaviorList.Add(BehaviorManager.BehaviorArray_Trapping_Elites_Nagrand.Clone());
                                }

                                if (Player.IsAlliance)
                                {
                                    retBehaviorList.Add(BehaviorManager.BehaviorArray_Trapping_Leather_ShadowmoonVally.Clone());
                                    retBehaviorList.Add(BehaviorManager.BehaviorArray_Trapping_Fur_ShadowmoonValley.Clone());
                                }
                                else
                                {
                                    retBehaviorList.Add(BehaviorManager.BehaviorArray_Trapping_Leather_FrostfireRidge.Clone());
                                    retBehaviorList.Add(BehaviorManager.BehaviorArray_Trapping_Fur_Nagrand_Horde.Clone());
                                }

                                retBehaviorList.Add(BehaviorManager.BehaviorArray_Trapping_Boars_Gorgond.Clone());
                            }
                        }

                        retBehaviorList.Add(new BehaviorWorkOrderStartUp(b));

                        if (b.Type == BuildingType.WarMillDwarvenBunker && b.Level == 3)
                        {
                            var questid = Player.IsAlliance ? 38175 : 38188;
                            retBehaviorList.Add(QuestHelper.GetDailyQuestArray(Convert.ToUInt32(questid), Player.IsAlliance));
                        }
                        else if (b.Type == BuildingType.AlchemyLab && b.HasFollowerWorking)
                        {
                            retBehaviorList.Add(QuestHelper.GetDailyQuestArray(Convert.ToUInt32(37270), Player.IsAlliance));
                        }
                    }
                }
            }
            #endregion

            //Primal Spirit Exchange
            retBehaviorList.Add(new BehaviorPrimalTrader());

            var forceBagCheck = new BehaviorCustomAction(() =>
            {
                Common.ForceBagCheck = true;
            });
            retBehaviorList.Add(forceBagCheck);

            //Finally, start some new missions!
            retBehaviorList.Add(new BehaviorMissionStartup());

            //Optional follower behaviors (to unlock)
            retBehaviorList.Add(BehaviorArrayFollowers.Clone());

            return(retBehaviorList.ToArray());
        }
Ejemplo n.º 3
0
        internal static BehaviorArray GetDailyQuestArray(uint questid, bool alliance)
        {
            switch (questid)
            {
            case 38175:
            case 38188:
            {
                var questNpcId    = alliance ? 77377 : 79815;
                var warmillBunker = GarrisonManager.Buildings[BuildingType.WarMillDwarvenBunker];
                var questPickup   = new BehaviorQuestPickup(questid, warmillBunker.SpecialMovementPoints[1], questNpcId);
                var questTurnin   = new BehaviorQuestTurnin(questid, warmillBunker.SpecialMovementPoints[1], questNpcId, BaseSettings.CurrentSettings.DailyWarMillQuestSettings.RewardIndex);
                var barray        = new BehaviorArray(new Behavior[]
                    {
                        questPickup,
                        questTurnin,
                    });
                barray.Criteria += () => BaseSettings.CurrentSettings.BehaviorQuests &&
                                   BaseSettings.CurrentSettings.DailyWarMillQuestSettings.Enabled &&
                                   BaseSettings.CurrentSettings.DailyWarMillQuestSettings.RewardIndex > -1 &&
                                   !LuaCommands.IsQuestFlaggedCompleted(questid.ToString());

                barray.Criteria += () =>
                {
                    var items = Player.Inventory.GetBagItemsById(113681).Where(i => i.StackCount > 24).ToList();
                    return(items.Count > 0);
                };

                return(barray);
            }

            case 37270:
            {
                var alchemyLab = GarrisonManager.Buildings[BuildingType.AlchemyLab];

                var questPickup = new BehaviorQuestPickup(
                    questid,
                    alchemyLab.EntranceMovementPoint,
                    0,
                    true,
                    BaseSettings.CurrentSettings.DailyAlchemyLabQuestSettings.RewardIndex);

                //Use special method of getting the interaction object since it varies on which follower is assigned!
                questPickup.GetInteractionObject = i =>
                {
                    var validObjects =
                        ObjectCacheManager.GetUnitsNearPoint(alchemyLab.EntranceMovementPoint, 30f, false)
                        .Where(u => u.QuestGiverStatus == QuestGiverStatus.AvailableRepeatable && !ObjectCacheManager.QuestNpcIds.Contains(u.Entry))
                        .ToList();

                    return(validObjects.Count > 0 ? validObjects[0] : null);
                };

                var barray = new BehaviorArray(new Behavior[]
                    {
                        questPickup,
                    });
                barray.Criteria += () => BaseSettings.CurrentSettings.BehaviorQuests &&
                                   BaseSettings.CurrentSettings.DailyAlchemyLabQuestSettings.Enabled &&
                                   BaseSettings.CurrentSettings.DailyAlchemyLabQuestSettings.RewardIndex > -1 &&
                                   !LuaCommands.IsQuestFlaggedCompleted(questid.ToString());

                return(barray);
            }
            }

            return(null);
        }