Beispiel #1
0
        public static Mission OpenCastleAssassination(
            IEncounterProvider encounterProvider,
            ILocationCharacterProvider locationCharacterProvider,
            IDialogProvider dialogProvider,
            IMissionOutcomeHandler missionOutcomeHandler,
            IAssassinationActions assassinationActions,
            Settlement settlement,
            Hero assassinationTarget,
            bool sneakInSuccessful
            )
        {
            var encounterConfig = encounterProvider.GetSneakInEncounter(settlement);

            var locationToOpen = settlement.LocationComplex.GetLocationWithId(encounterConfig.LocationId);

            PlayerEncounter.Current.AddLocationEncounter(encounterConfig.LocationEncounter);

            var sceneName = locationToOpen.GetSceneName(encounterConfig.WallLevel);

            var missionRecord = SandBoxMissions.CreateSandBoxMissionInitializerRecord(sceneName, string.Empty, true);

            var missionBehaviors = new List <MissionBehaviour> {
                new MissionOptionsComponent(),
                new CampaignMissionComponent(),
                new MissionBasicTeamLogic(),
                //new BasicLeaveMissionLogic(),// maybe implement own
                //new LeaveMissionLogic(),//maybe implement own
                new MissionAgentLookHandler(),
                new MissionConversationHandler(),
                new MissionAgentHandler(locationToOpen, null),
                new HeroSkillHandler(),
                new MissionFightHandler(),
                new BattleAgentLogic(),
                new AgentTownAILogic(),    //not sure, maybe implement my own version
                new MissionCrimeHandler(), // maybe keep
                new MissionFacialAnimationHandler(),
                //new MissionDebugHandler(),
                //new LocationItemSpawnHandler(),// remove?
                //new VisualTrackerMissionBehavior(),
                new CastleAssassinationController(locationCharacterProvider, assassinationTarget, sneakInSuccessful),
                new AssassinationOutcomeLogic(missionOutcomeHandler, assassinationActions, settlement, assassinationTarget, sneakInSuccessful),
                new AssassinationConversationLogic(dialogProvider, Campaign.Current.ConversationManager, assassinationTarget.CharacterObject, sneakInSuccessful)
            };

            if (!sneakInSuccessful)
            {
                missionBehaviors.Add(new AssassinationCaughtByGuardsLogic(locationCharacterProvider, Campaign.Current.ConversationManager, settlement, assassinationTarget));
            }

            // Hacky way to disable exiting via the doors - I don't know how to lock the doors yet
            var cachedLocations = locationToOpen.LocationsOfPassages.ToList();

            locationToOpen.LocationsOfPassages.Clear();

            // I don't think I like this
            missionOutcomeHandler.Initialise((settl, ass) => {
                OpenCapturedConversation(
                    encounterProvider,
                    dialogProvider,
                    assassinationActions,
                    settl,
                    ass
                    );
            },
                                             () => {
                locationToOpen.LocationsOfPassages.AddRange(cachedLocations);
            });

            return(MissionState.OpenNew("CastleAssassination", missionRecord, (Mission mission) => missionBehaviors, true, true, true));
        }