示例#1
0
        public Building(int id)
        {
            Id    = id;
            Type  = GetBuildingTypeUsingId(Id);
            Level = GetBuildingUpgradeLevel(Id);
            Plot  = GetBuildingPlotSize(Type);
            HasFollowerWorking = GarrisonManager.BuildingIdsWithFollowerWorking.Contains(Id);

            WorkOrderType = WorkOrder.GetWorkorderType(Type);

            if (WorkOrderType != WorkOrderType.None)
            {
                WorkOrderObjectEntryId = WorkOrder.WorkOrderPickupEntryIds[WorkOrderType];
                WorkOrderObjectName    = WorkOrder.WorkOrderPickupNames[WorkOrderType];
                if (WorkOrderType == WorkOrderType.WarMillDwarvenBunker && Player.IsAlliance)
                {
                    WorkOrderObjectName = WorkOrder.WorkOrderPickupNames[WorkOrderType.DwarvenBunker];
                }
            }
            else
            {
                WorkOrderObjectEntryId = -1;
                WorkOrderObjectName    = String.Empty;
            }

            WorkOrderNpcEntryId = WorkOrder.GetWorkOrderNpcEntryId(Type, Player.IsAlliance);


            if (GarrisonManager.BuildingIDs.Contains(Id))
            {
                string plotid;
                bool   canActivate, isBuilding;
                int    shipTotal, shipCap, shipReady;

                LuaCommands.GetBuildingInfo(id, out plotid, out canActivate, out shipCap, out shipReady, out shipTotal, out isBuilding);
                if (WorkOrderType != WorkOrderType.None)
                {
                    _workorder = new WorkOrder(Id, Type, WorkOrderType, shipCap,
                                               WorkOrder.GetWorkOrderItemAndQuanityRequired(WorkOrderType), shipReady, shipTotal);
                }

                PlotId      = plotid.ToInt32();
                CanActivate = canActivate;
                IsBuilding  = isBuilding;

                SafeMovementPoint     = MovementCache.GetBuildingSafeMovementPoint(PlotId);
                EntranceMovementPoint = MovementCache.GetBuildingEntranceMovementPoint(PlotId);
            }
            else if (Type == BuildingType.HerbGarden || Type == BuildingType.Mines)
            {//if not completed first quest than we must insert temp info.
                PlotId                = Type == BuildingType.HerbGarden ? 63 : 59;
                SafeMovementPoint     = MovementCache.GetBuildingSafeMovementPoint(PlotId);
                EntranceMovementPoint = MovementCache.GetBuildingEntranceMovementPoint(PlotId);
                _workorder            = new WorkOrder(Id, Type, WorkOrderType, 0,
                                                      WorkOrder.GetWorkOrderItemAndQuanityRequired(WorkOrderType));
            }

            SpecialMovementPoints = MovementCache.GetSpecialMovementPoints(Type, PlotId, Level, Player.IsAlliance);

            int firstquestID = GetBuildingFirstQuestId(Type, Player.IsAlliance);

            if (firstquestID > 0)
            {
                FirstQuestId        = Convert.ToUInt32(firstquestID);
                FirstQuestCompleted = LuaCommands.IsQuestFlaggedCompleted(FirstQuestId.ToString());

                if (Type == BuildingType.TradingPost)
                {
                    FirstQuestNpcId = WorkOrderNpcEntryId;
                }
                else
                {
                    FirstQuestNpcId = GetBuildingFirstQuestNpcId(Type, Player.IsAlliance);
                }
            }
            else
            {
                FirstQuestId        = 0;
                FirstQuestNpcId     = 0;
                FirstQuestCompleted = true;
            }
        }
示例#2
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);
        }