Exemple #1
0
        /// <summary>
        /// Oldschool mission options.
        /// </summary>
        /// <param name="location"></param>
        /// <param name="character"></param>
        /// <param name="missionsDone"></param>
        /// <param name="periodicMissions"></param>
        /// <param name="solvableMissions"></param>
        /// <returns></returns>
        private Dictionary <string, object> GenerateConfigMissionOptions(MissionLocation location, Character character, List <int> missionsDone, Dictionary <int, DateTime> periodicMissions, List <Mission> solvableMissions)
        {
            var missionAgent = location.Agent;

            var missionFilter = new MissionFilter(character, periodicMissions, missionsDone, this, location, _missionDataCache);

            var standing = _standingHandler.GetStanding(missionAgent.OwnerAlliance.Eid, character.Eid);

            //if the agent has random missions then we skip the levels from 0 ... 9
            //otherwise we include all config levels
            //var topLevel = solvableMissions.Count > 0 ? -1 : 9;

            var topLevel = 9;

            var counter          = 0;
            var availabilityDict = new Dictionary <string, object>();

            foreach (var missionCategory in Enum.GetValues(typeof(MissionCategory)).Cast <MissionCategory>())
            {
                for (var missionLevel = -1; missionLevel <= topLevel; missionLevel++)
                {
                    var missionsWithCategoryAndLevel = missionFilter.GetConfigMissionsByCategoryAndLevel(missionCategory, missionLevel).ToArray();
                    var totalCount = missionsWithCategoryAndLevel.Count(m => !m.isTriggered && m.listable);

                    var standingBlocked = standing < missionLevel;

                    var availableCount = missionsWithCategoryAndLevel.Count(m => missionFilter.IsConfigMissionAvailable(m, _standingHandler));

                    var oneEntry = new Dictionary <string, object>()
                    {
                        { k.missionCategory, (int)missionCategory },
                        { k.missionLevel, missionLevel },
                        { "totalCount", totalCount },
                        { "availableCount", availableCount },
                        { k.oke, (availableCount > 0 ? 1 : 0) },
                        { "standingBlocked", standingBlocked },
                    };

                    availabilityDict.Add("c" + counter++, oneEntry);
                }
            }

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