Ejemplo n.º 1
0
        /// <summary>
        /// Looks for the displayOrder of a linked kill or lockunit target to use it as a mark
        /// The eventsource is a popNpc or a findArtifact
        ///
        /// NOTE: lockUnit then kill... wont work properly. the mark will stay
        ///
        /// </summary>
        /// <param name="eventSourceTarget"></param>
        /// <param name="targetOrder"></param>
        /// <returns></returns>
        public bool TryGetLinkedTargetOrder(IZoneMissionTarget eventSourceTarget, out int targetOrder)
        {
            IZoneMissionTarget linkedTarget = null;

            var sourceTargeType = eventSourceTarget.MyTarget.Type;

#if DEBUG
            Logger.Info("trying to get linket target's order for " + sourceTargeType + " " + eventSourceTarget.MyTarget);
#endif

            //do search based on assumptions

            if (eventSourceTarget.MyTarget.ValidPrimaryLinkSet)
            {
                //    source -> sometarget
                //    pop_npc/find_artifact ==> kill/lock_unit
                linkedTarget = _cachedMissionTargets.Values.FirstOrDefault(zt => eventSourceTarget.MyTarget.PrimaryDefinitionLinkId == zt.MyTarget.id && !zt.IsCompleted);
#if DEBUG
                if (linkedTarget != null)
                {
                    Logger.Info("event source was linked to: " + linkedTarget.MyTarget);
                }
#endif
            }

            if (linkedTarget == null)
            {
                //    sometarget -> source
                //    kill/lock_unit ==> pop_npc/find_artifact
                linkedTarget = _cachedMissionTargets.Values.FirstOrDefault(zt => zt.MyTarget.PrimaryDefinitionLinkId == eventSourceTarget.MyTarget.id && !zt.IsCompleted);

#if DEBUG
                if (linkedTarget != null)
                {
                    Logger.Info("target was linked to event source: " + linkedTarget.MyTarget);
                }
#endif
            }



            if (linkedTarget != null)
            {
                targetOrder = linkedTarget.MyTarget.displayOrder;
                return(true);
            }

            targetOrder = 0;
#if DEBUG
            Logger.Warning("no linked target was found for: " + eventSourceTarget.MyTarget);
#endif

            return(false);
        }
Ejemplo n.º 2
0
        private static Dictionary <string, object> GetDefinitionAndQuantityInfo(IZoneMissionTarget target)
        {
            var info = new Dictionary <string, object>
            {
                { k.definition, target.MyTarget.Definition },
                { k.quantity, target.MyTarget.Quantity },
                { k.missionID, target.MyZoneMissionInProgress.missionId },
                { k.targetID, target.MyTarget.id },
                { k.guid, target.MyZoneMissionInProgress.missionGuid.ToString() }
            };

            return(info);
        }
Ejemplo n.º 3
0
        public bool TryGetLinkedTargetOrderForContainer(IZoneMissionTarget eventSourceTarget, out int targetOrder)
        {
            IZoneMissionTarget linkedTarget = null;

#if DEBUG
            Logger.Info("trying to get linket target's order for " + eventSourceTarget.MyTarget.Type + " " + eventSourceTarget.MyTarget);
#endif

            //look for a loot item target which is primary linket to the event source
            linkedTarget = _cachedMissionTargets.Values.FirstOrDefault(zt =>
                                                                       !zt.IsCompleted &&
                                                                       zt.MyTarget.targetSecondaryAsMyPrimary &&
                                                                       zt.MyTarget.Type == MissionTargetType.loot_item &&
                                                                       zt.MyTarget.ValidPrimaryLinkSet &&
                                                                       zt.MyTarget.PrimaryDefinitionLinkId == eventSourceTarget.MyTarget.id
                                                                       );
#if DEBUG
            if (linkedTarget != null)
            {
                Logger.Info("the linked loot is: " + linkedTarget.MyTarget);
            }
#endif

            if (linkedTarget != null)
            {
                targetOrder = linkedTarget.MyTarget.displayOrder;
                return(true);
            }

            targetOrder = -1;
#if DEBUG
            Logger.Warning("no linked target was found for: " + eventSourceTarget.MyTarget);
#endif

            return(false);
        }
 public virtual bool IsDefinitionMatching(IZoneMissionTarget missionTarget)
 {
     return(false);
 }
        /// <summary>
        /// Load targets that handled by the zone
        /// </summary>
        /// <param name="presenceManager"></param>
        /// <param name="player"></param>
        /// <returns></returns>
        public IEnumerable <IZoneMissionTarget> LoadZoneTargets(IPresenceManager presenceManager, Player player)
        {
            var records =
                Db.Query().CommandText("select * from missiontargetsarchive where characterid=@characterID and missionid=@missionID and missionguid=@guid")
                .SetParameter("@characterID", player.Character.Id)
                .SetParameter("@missionID", missionId)
                .SetParameter("@guid", missionGuid)
                .Execute().ToList();

            foreach (var record in records)
            {
                var completed = record.GetValue <bool>("completed");
                if (completed)
                {
                    continue;
                }

                var targetId = record.GetValue <int>("targetid");

                //original from cache
                MissionTarget targetFromCache;
                if (!_missionDataCache.GetTargetById(targetId, out targetFromCache))
                {
                    continue;
                }

                //duplicate and apply running parameters
                var target = targetFromCache.GetClone();
                target.ModifyWithRecord(record);


                if (target.ValidZoneSet && target.ZoneId != _zone.Configuration.Id)
                {
                    //not for this zone
                    continue;
                }

                //this is the current progress
                var currentProgress = record.GetValue <int>("progresscount");

                Logger.Info("mission target progress: " + currentProgress + " targetID:" + target.id + " missionID:" + missionId + " characterID:" + player.Character.Id + " " + target.Type);

                //these types are not needed on the zone
                switch (target.Type)
                {
                case MissionTargetType.research:
                case MissionTargetType.massproduce:
                case MissionTargetType.prototype:
                case MissionTargetType.fetch_item:
                case MissionTargetType.teleport:
                    continue;
                }

                IZoneMissionTarget zoneTarget = null;

                //generate proper class
                switch (target.Type)
                {
                case MissionTargetType.reach_position:
                    zoneTarget = new ReachPositionZoneTarget(_zone, player, target, this);
                    break;

                case MissionTargetType.loot_item:
                {
                    var pc = new ProgressCounter(currentProgress, target.Quantity);
                    zoneTarget = new LootZoneTarget(_zone, player, target, this, pc);
                    break;
                }

                case MissionTargetType.kill_definition:
                {
                    var pc = new ProgressCounter(currentProgress, target.Quantity);
                    zoneTarget = new KillZoneTarget(_zone, player, target, this, pc);
                    break;
                }

                case MissionTargetType.scan_mineral:
                    zoneTarget = new ScanMaterialZoneTarget(_zone, player, target, this);
                    break;

                case MissionTargetType.scan_unit:
                {
                    var pc = new ProgressCounter(currentProgress, target.Quantity);
                    zoneTarget = new ScanUnitZoneTarget(_zone, player, target, this, pc);
                    break;
                }

                case MissionTargetType.scan_container:
                {
                    var pc = new ProgressCounter(currentProgress, target.Quantity);
                    zoneTarget = new ScanContainerZoneTarget(_zone, player, target, this, pc);
                    break;
                }

                case MissionTargetType.drill_mineral:
                {
                    var pc = new ProgressCounter(currentProgress, target.Quantity);
                    zoneTarget = new DrillMineralZoneTarget(_zone, player, target, this, pc);
                    break;
                }

                case MissionTargetType.submit_item:
                {
                    var pc = new ProgressCounter(currentProgress, target.Quantity);
                    zoneTarget = new SubmitItemZoneTarget(_zone, player, target, this, pc);
                    break;
                }

                case MissionTargetType.use_switch:
                    zoneTarget = new AlarmSwitchZoneTarget(_zone, player, target, this);
                    break;

                case MissionTargetType.find_artifact:
                    zoneTarget = new FindArtifactZoneTarget(_zone, player, target, this, presenceManager);
                    break;


                case MissionTargetType.use_itemsupply:
                {
                    var pc = new ProgressCounter(currentProgress, target.Quantity);
                    zoneTarget = new ItemSupplyZoneTarget(_zone, player, target, this, pc);
                    break;
                }

                case MissionTargetType.harvest_plant:
                {
                    var pc = new ProgressCounter(currentProgress, target.Quantity);
                    zoneTarget = new HarvestPlantZoneTarget(_zone, player, target, this, pc);
                    break;
                }

                case MissionTargetType.summon_npc_egg:
                    zoneTarget = new SummonNpcEggZoneTarget(_zone, player, target, this);
                    break;

                case MissionTargetType.pop_npc:
                    zoneTarget = new PopNpcZoneTarget(_zone, player, target, this, presenceManager);
                    break;

                case MissionTargetType.lock_unit:
                {
                    var pc = new ProgressCounter(currentProgress, target.Quantity);
                    zoneTarget = new LockUnitZoneTarget(_zone, player, target, this, pc);
                    break;
                }
                }

                if (zoneTarget == null)
                {
                    Logger.Error("no class defined for:" + target.Type);
                    continue;
                }

                yield return(zoneTarget);
            }
        }
 public override bool IsDefinitionMatching(IZoneMissionTarget missionTarget)
 {
     return(missionTarget.MyTarget.Definition == SubmittedItem.Definition);
 }
 public override bool IsDefinitionMatching(IZoneMissionTarget missionTarget)
 {
     return(missionTarget.MyTarget.Definition == DrilledDefinition);
 }