コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
 public MissionArtifactGenerator(FindArtifactZoneTarget target, IArtifactRepository repository)
 {
     _target     = target;
     _repository = repository;
 }