Esempio n. 1
0
 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);
            }
        }
Esempio n. 5
0
 public bool GetMissionIdsByAgent(MissionAgent agent, out int[] missionIdsByAgent)
 {
     return(_agentToMissions.TryGetValue(agent.id, out missionIdsByAgent));
 }
Esempio n. 6
0
 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;
        }
Esempio n. 10
0
        public bool IsMissionRunningWithThisCategoryAndLevel(MissionCategory category, int level, MissionAgent agent)
        {
            if (IsCollectorAvailable())
            {
                return(_collector.AnyMissionOfCategotryAndLevelRunning(category, level, agent));
            }

            return(false);
        }