public MissionFilter(Character character, Dictionary <int, DateTime> periodicMissionTimes, ICollection <int> finishedMissionsIds, MissionProcessor missionProcessor, MissionLocation location, MissionDataCache missionDataCache) { _character = character; _agent = location.Agent; _periodicMissionTimes = periodicMissionTimes; _finishedMissionIds = finishedMissionsIds; _missionProcessor = missionProcessor; _location = location; _missionDataCache = missionDataCache; }
/// <summary> /// This is the actual function that starts a mission, OLD SCHOOL /// </summary> /// <param name="character"></param> /// <param name="agent"></param> /// <param name="category"></param> /// <param name="level"></param> /// <param name="spreadInGang"></param> /// <param name="location"></param> /// <returns></returns> public Dictionary <string, object> SelectAndStartConfigMission(Character character, MissionAgent agent, MissionCategory category, int level, bool spreadInGang, MissionLocation location) { List <int> missionsDone; Dictionary <int, DateTime> periodicMissions; GetFinishedAndLastMissions(character, out missionsDone, out periodicMissions).ThrowIfError(); var missionFilter = new MissionFilter(character, periodicMissions, missionsDone, this, location, _missionDataCache); missionFilter.IsMissionRunningWithThisCategoryAndLevel(category, level, agent).ThrowIfTrue(ErrorCodes.MissionRunningWithCategoryAndLevel); var missions = missionFilter.GetConfigMissionsByCategoryAndLevel(category, level).Where(m => missionFilter.IsConfigMissionAvailable(m, _standingHandler)).ToArray(); missions.Any().ThrowIfFalse(ErrorCodes.NoMissionAvailableWithConditions); var mission = missions.RandomElement(); Dictionary <string, object> info; var resolved = StartMission(character, spreadInGang, mission, location, level, out info); if (!resolved) { Logger.Error("WTF? in config mission start " + location + " " + mission); } return(info); }
public MissionBonus GetOrAddMissionBonus(Character character, MissionCategory missionCategory, int missionLevel, MissionAgent agent) { var collector = _missionBonuses.GetOrAdd(character.Id, c => new MissionBonusCollector()); MissionBonus missionBonus; if (!collector.GetBonusWithConditions(missionCategory, missionLevel, agent, out missionBonus)) { return(new MissionBonus(character, missionCategory, missionLevel, agent, 0)); } return(missionBonus); }
public void DecreaseBonus(Character character, MissionCategory missionCategory, int missionLevel, MissionAgent agent) { var missionBonus = GetOrAddMissionBonus(character, missionCategory, missionLevel, agent); if (missionBonus.DecreaseBonus()) { SetMissionBonus(missionBonus); } }
public bool GetMissionIdsByAgent(MissionAgent agent, out int[] missionIdsByAgent) { return(_agentToMissions.TryGetValue(agent.id, out missionIdsByAgent)); }
public bool TryGetAgent(int id, out MissionAgent missionAgent) { return(_agents.TryGetValue(id, out missionAgent)); }
public bool GetBonusWithConditions(MissionCategory missionCategory, int missionLevel, MissionAgent agent, out MissionBonus missionBonus) { var key = MissionBonus.GetKey(missionCategory, missionLevel, agent.id); return(_bonuses.TryGetValue(key, out missionBonus)); }
public bool AnyMissionOfCategotryAndLevelRunning(MissionCategory missionCategory, int missionLevel, MissionAgent agent) { return(_missionInProgress.Values.Any ( p => ( p.MissionLevel == missionLevel && p.myMission.missionCategory == missionCategory && p.myLocation.Agent.id == agent.id ) )); }
public MissionBonus(Character character, MissionCategory missionCategory, int missionLevel, MissionAgent agent, int bonus) { this.character = character; _missionCategory = missionCategory; _missionLevel = missionLevel; _agentId = agent.id; Bonus = bonus; lastModified = DateTime.Now; }
public bool IsMissionRunningWithThisCategoryAndLevel(MissionCategory category, int level, MissionAgent agent) { if (IsCollectorAvailable()) { return(_collector.AnyMissionOfCategotryAndLevelRunning(category, level, agent)); } return(false); }