/// <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); }
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); }
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); }