public void EnqueueProductionMissionTarget(MissionTargetType targetType, Character character, int locationId, int?definition = null, int?quantity = null) { if (locationId <= 0) { return; //gamma or something unknown } Logger.Info("++ Enqueue mission target type " + targetType + " characterId:" + character.Id + " definition:" + definition + " quantity:" + quantity); var data = new Dictionary <string, object> { { k.characterID, character.Id }, { k.type, targetType }, { k.locationID, locationId }, { k.useGang, 1 } //spread this action to gang within the mission engine }; if (definition != null) { data.Add(k.definition, (int)definition); } if (quantity != null) { data.Add(k.quantity, (int)quantity); } _missionProcessor.EnqueueMissionTargetAsync(data); }
public void CreateLog(MissionTargetType type, int netId, int parm1, int parm2, int parm3) { var log = m_logFactory.GetLogInstance(type); log.Reset(netId, parm1, parm2, parm3); m_LogsCurTick.Add(log); }
private void MissionTargetAdvanceByType(Character character, MissionTargetType targetType, bool isComplete, Dictionary <string, object> data) { Logger.DebugInfo("process target by type: " + targetType); var kvpList = GetTargetInProgress_and_missionInProgressByTargetType(character, targetType); if (kvpList.IsNullOrEmpty()) { return; } Logger.Info("processing " + kvpList.Count + " running targets for type: " + targetType); foreach (var pair in kvpList) { var missionTargetInProgress = pair.Key; var missionInProgress = pair.Value; ProcessTargetAdvancementLocked(missionInProgress, missionTargetInProgress, isComplete, data); if (WasProgress(data)) { return; } } }
/// <summary> /// Inserts a mission target that will be used as a possible target spot /// </summary> public static void InsertMissionTargetSpot(string name, MissionTargetType targetType, double x, double y, int zoneId, int findRadius) { var query = @" INSERT dbo.missiontargets ( name , description , targettype , targetpositionx , targetpositiony , targetpositionzone , findradius ) VALUES ( @name , @name, @targetType, @x, @y, @zoneId, @findRadius )"; var res = Db.Query().CommandText(query) .SetParameter("@name", name) .SetParameter("@targetType", (int)targetType) .SetParameter("@x", x) .SetParameter("@y", y) .SetParameter("@zoneId", zoneId) .SetParameter("@findRadius", findRadius) .ExecuteNonQuery(); (res == 1).ThrowIfFalse(ErrorCodes.SQLInsertError); }
private DO_Mission getMissionDatas(short ID) { DO_Mission mission = new DO_Mission(); mission.m_id = short.Parse(m_missionDatas[ID]["MissionID"].ToString()); mission.m_missionOccupation = (OccupationType)Enum.Parse(typeof(OccupationType), m_missionDatas[ID]["MissionOccupation"].ToString()); JsonData tempData; mission.m_acceptingNPCID = int.Parse(m_missionDatas[ID]["AcceptingNPCID"].ToString()); mission.m_deliveringNPCID = int.Parse(m_missionDatas[ID]["DeliveringNPCID"].ToString()); tempData = m_missionDatas[ID]["ConversationsWhenAccepting"]; /**mission.m_conversationsWhenAccepting = new String[tempData.Count]; * //for (int i = 0; i < tempData.Count; i++) * { * mission.m_conversationsWhenAccepting[i] = tempData[i].ToString(); * } * tempData = m_missionDatas[ID]["ConversationsWhenDelivering"]; * mission.m_conversationWhenDelivering = new String[tempData.Count]; * for (int i = 0; i < tempData.Count; i++) * { * mission.m_conversationWhenDelivering[i] = tempData[i].ToString(); * }**/ mission.m_bonusMoney = long.Parse(m_missionDatas[ID]["BonusMoney"].ToString()); mission.m_bonusExperience = int.Parse(m_missionDatas[ID]["BonusExperience"].ToString()); mission.m_levelInNeed = short.Parse(m_missionDatas[ID]["LevelInNeed"].ToString()); tempData = m_missionDatas[ID]["FatherMissionList"]; mission.m_fatherMissionIdArr = new short[tempData.Count]; for (int i = 0; i < tempData.Count; i++) { mission.m_fatherMissionIdArr[i] = (short.Parse(tempData[i].ToString())); } tempData = m_missionDatas[ID]["ChildrenMissionList"]; mission.m_childrenMissionArr = new short[tempData.Count]; for (int i = 0; i < tempData.Count; i++) { mission.m_childrenMissionArr[i] = (short.Parse(tempData[i].ToString())); } tempData = m_missionDatas[ID]["MissionTarget"]; mission.m_missionTargetArr = new ValueTuple <MissionTargetType, short> [tempData.Count]; for (int i = 0; i < tempData.Count; i++) { String tempstr1 = tempData[i][0].ToString(); MissionTargetType mt = (MissionTargetType)Enum.Parse(typeof(MissionTargetType), tempstr1); short parameter1 = short.Parse(tempData[i][1].ToString()); mission.m_missionTargetArr[i] = new ValueTuple <MissionTargetType, short> (mt, parameter1); } tempData = m_missionDatas[ID]["BonusItems"]; mission.m_bonusItemIdAndNumArr = new ValueTuple <short, short> [tempData.Count]; for (int i = 0; i < tempData.Count; i++) { mission.m_bonusItemIdAndNumArr[i] = (short.Parse(tempData[i].ToString().Split(' ') [0]), short.Parse(tempData[i].ToString().Split(' ') [1])); } return(mission); }
public DDO_MissionLog(MissionTargetType type, int charId, int parm1, int parm2, int parm3) { m_misTarType = type; m_charId = charId; m_parm1 = parm1; m_parm2 = parm2; m_parm3 = parm3; }
public static int CountTypeOnZone(MissionTargetType missionTargetType, int zoneId) { return (Db.Query().CommandText("SELECT COUNT(DISTINCT name) FROM dbo.missiontargets WHERE targetpositionzone=@zoneId AND targettype=@targetType") .SetParameter("@zoneId", zoneId) .SetParameter("@targetType", (int)missionTargetType) .ExecuteScalar <int>()); }
public Task EnqueueMissionTargetAsync(Character character, MissionTargetType targetType, Action <IDictionary <string, object> > dictionaryBuilder) { var dictionary = new Dictionary <string, object> { { k.characterID, character.Id }, { k.type, (int)targetType } }; dictionaryBuilder(dictionary); return(EnqueueMissionTargetAsync(dictionary)); }
public static void WriteSuccessLog(int zoneId, int x, int y, Guid guid, MissionTargetType targetType, long locationEid, MissionCategory missionCategory) { var res = Db.Query().CommandText("INSERT dbo.missiontargetslog ( zoneid, x, y, targettype, guid, locationeid, missioncategory ) VALUES ( @zoneId, @x, @y, @targetType, @guid, @locationeid, @category )") .SetParameter("@x", x) .SetParameter("@y", y) .SetParameter("@zoneId", zoneId) .SetParameter("@guid", guid) .SetParameter("@targetType", (int)targetType) .SetParameter("@locationeid", locationEid) .SetParameter("@category", (int)missionCategory) .ExecuteNonQuery(); (res == 1).ThrowIfFalse(ErrorCodes.SQLInsertError); }
public static string GenerateName(MissionTargetType targetType, int zoneId, string prefix) { var countOnZone = CountTypeOnZone(targetType, zoneId); countOnZone++; var name = MakeName(prefix, targetType, zoneId, countOnZone); while (IsTargetNameTaken(name)) { countOnZone += 1; name = MakeName(prefix, targetType, zoneId, countOnZone); } return(name); }
public List <IZoneMissionTarget> CollectTargetsFromAllGangMembers(MissionTargetType missionTargetType) { var targets = new List <IZoneMissionTarget>(CurrentTargetsByType(missionTargetType)); var gang = _player.Gang; if (gang == null) { return(targets); } var affectedPlayers = _zone.GetGangMembers(gang).Where(p => p != _player).ToList(); foreach (var targetsAtCurrentPlayer in affectedPlayers.Select(affectedPlayer => affectedPlayer.MissionHandler.CurrentTargetsByType(missionTargetType))) { targets.AddRange(targetsAtCurrentPlayer); } return(targets); }
public E_MissionLog GetLogInstance(MissionTargetType type) { return((E_MissionLog)m_pool[type].GetInstanceObj()); }
private List <MissionTarget> SearchForMinimalAmountOfStructures(MissionInProgress missionInProgress, MissionTargetType targetType, List <MissionTarget> alreadySelected) { var attempt = 1; var rangeExtend = 0; var structures = GetPossibleStructureTargets(missionInProgress, targetType, rangeExtend).Except(alreadySelected).ToList(); Log(" " + structures.Count + " " + targetType + " structures found. attempt:" + attempt); while (structures.Count < MinimumAmountOfStructures && rangeExtend < MaxRangeExtend) { attempt++; rangeExtend += StructureRangeExtend; structures = GetPossibleStructureTargets(missionInProgress, targetType, rangeExtend).Except(alreadySelected).ToList(); Log(" " + structures.Count + " " + targetType + " structures found. range extend:" + rangeExtend + " attempt:" + attempt); } return(structures); }
private List <MissionTarget> GetPossibleStructureTargets(MissionInProgress missionInProgress, MissionTargetType targetType, double rangeExtension) { return(missionDataCache.GetAllMissionTargets .Where(t => t.Type == targetType && t.ValidFindRadiusSet && t.ValidMissionStructureEidSet && t.ValidPositionSet && t.ValidZoneSet && t.ZoneId == missionInProgress.myLocation.ZoneConfig.Id && missionInProgress.SearchOrigin.IsInRangeOf2D(t.targetPosition, t.FindRadius + rangeExtension) && missionDataCache.IsTargetSelectionValid(missionInProgress.myLocation.Zone, missionInProgress.SearchOrigin, t.targetPosition) ).ToList()); }
/// <summary> /// Currently used by the NpcEgg /// /// Makes sure that the NpcEgg is only deployed at the target's location /// </summary> /// <param name="sourcePosition"></param> /// <param name="definition"></param> /// <param name="missionTargetType"></param> /// <returns></returns> public bool IsMissionTargetLoadedForPositionAndDefinition(Position sourcePosition, int definition, MissionTargetType missionTargetType) { return(_cachedMissionTargets.Values.Any(t => t.MyTarget.Type == missionTargetType && t.IsMyTurn && t.MyTarget.Definition == definition && !t.IsCompleted && t.MyTarget.CheckPosition && sourcePosition.IsInRangeOf2D(t.MyTarget.targetPosition, t.MyTarget.TargetPositionRange) )); }
protected MissionTarget SelectRandomMissionStructure(MissionInProgress missionInProgress, MissionTargetType targetType) { var structures = SearchForMinimalAmountOfStructures(missionInProgress, targetType, missionInProgress.SelectedTargets); if (structures.Count == 0) { Log("no possible structure targets to select from. " + targetType + " " + this + " " + missionInProgress); return(null); } var selectedTarget = structures.RandomElement(); missionInProgress.AddToSelectedTargets(selectedTarget); return(selectedTarget); }
public bool ResolveMissionStructureLocations(MissionInProgress missionInProgress, MissionTargetType targetType) { var selectedTarget = SelectRandomMissionStructure(missionInProgress, targetType); //search failed if (selectedTarget == null) { return(false); } missionStructureEid = selectedTarget.MissionStructureEid; CopyZoneInfo(selectedTarget); missionInProgress.SearchOrigin = new Position(targetPositionX ?? 0, targetPositionY ?? 0); SetTargetPosition_RandomTarget(); return(true); }
private IList <IZoneMissionTarget> CurrentTargetsByType(MissionTargetType missionTargetType) { return(CurrentTargets.Where(t => t.MyTarget.Type == missionTargetType).ToList()); }
protected AlarmSwitch(MissionTargetType targetType) : base(targetType) { }
protected MissionSwitch(MissionTargetType targetType = MissionTargetType.use_switch) : base(targetType) { }
private static string MakeName(string prefix, MissionTargetType targetType, int zoneId, int countOnZone) { return(prefix + "_" + targetType + "_z" + zoneId + "_n" + countOnZone); }
protected MissionStructure(MissionTargetType targetType) { _targetType = targetType; }
private void MissionTargetAdvanced(Character character, MissionTargetType targetType, bool explicitGangHandling, Dictionary <string, object> originalData) { //explicit gang handling not set if (!explicitGangHandling) { MissionTargetAdvancedSingle(originalData); if (WasProgress(originalData)) { SendRunningMissionListAsync(character); } return; } //ok, lets get deeper, we must use the gang //first enqueue for myself, we are the priority here MissionTargetAdvancedSingle(originalData); if (WasProgress(originalData)) { //yes, this request advanced one of my targets, we are done here, send running list if all done. SendRunningMissionListAsync(character); return; } //do gang var others = GetGangMembersCached(character).Where(m => m.Id != character.Id); foreach (var other in others) { //any mission running? if (!MissionAdministrator.GetMissionInProgressCollector(other, out MissionInProgressCollector collector)) { continue; } //any targets waiting? if (!collector.GetMissionsInProgress().SelectMany(m => m.CollectIncompleteTargetsByType(targetType)).Any(t => t.IsMyTurn)) { continue; } var info = originalData.Clone(); //fake the source character info[k.characterID] = other.Id; //force add participation info info[k.assistingCharacterID] = character.Id; MissionTargetAdvancedSingle(info); //if event got used up => end of its life if (WasProgress(originalData)) { return; } } }
/// <summary> /// Get all targets with the given type in pairs to process advancement /// /// Since the target is wrapped into mission and mission wrapped into collectors getting a target is always: /// get collector by character, get mission, get target /// /// </summary> /// <param name="character"></param> /// <param name="targetType"></param> /// <returns></returns> private List <KeyValuePair <MissionTargetInProgress, MissionInProgress> > GetTargetInProgress_and_missionInProgressByTargetType(Character character, MissionTargetType targetType) { var resultList = new List <KeyValuePair <MissionTargetInProgress, MissionInProgress> >(); if (!MissionAdministrator.GetMissionInProgressCollector(character, out MissionInProgressCollector collector)) { return(resultList); } foreach (var missionInProgress in collector.GetMissionsInProgress()) { var list = missionInProgress.CollectIncompleteTargetsByType(targetType).ToArray(); if (list.IsNullOrEmpty()) { continue; } foreach (var missionTargetInProgress in list) { resultList.Add(new KeyValuePair <MissionTargetInProgress, MissionInProgress>(missionTargetInProgress, missionInProgress)); } } return(resultList); }
public int GetRewardByType(MissionTargetType targetType) { return(_rewardByType.GetOrDefault(targetType, 1)); }
public void CreateLogOffline(MissionTargetType type, int charId, int parm1, int parm2 = 0, int parm3 = 0) { m_dds.InsertMissionLog(new DDO_MissionLog(type, charId, parm1, parm2, parm3)); }
private void CreateLog(MissionTargetType type, int netId, int parm1 = 0, int parm2 = 0, int parm3 = 0) { EM_MissionLog.s_instance.CreateLog(type, netId, parm1, parm2, parm3); }