public AddEmployerLanceBatch(EncounterRules encounterRules, string orientationTargetKey,
                                     SpawnLogic.LookDirection lookDirection, float minDistance, float maxDistance)
        {
            int           numberOfUnitsInLance = 4;
            string        lanceGuid            = Guid.NewGuid().ToString();
            List <string> unitGuids            = encounterRules.GenerateGuids(numberOfUnitsInLance);
            string        employerTeamGuid     = EncounterRules.EMPLOYER_TEAM_ID;
            string        spawnerName          = $"Lance_Ally_SupportingForce_{lanceGuid}";

            encounterRules.EncounterLogic.Add(new AddLanceToAllyTeam(lanceGuid, unitGuids));
            encounterRules.EncounterLogic.Add(new AddLanceSpawnChunk(employerTeamGuid, lanceGuid, unitGuids, spawnerName,
                                                                     "Spawns a non-objective related ally supporting lance"));
            encounterRules.EncounterLogic.Add(new SpawnLanceMembersAroundTarget(encounterRules, spawnerName, orientationTargetKey,
                                                                                lookDirection, minDistance, maxDistance));

            if (Main.Settings.AdditionalLanceSettings.UseDialogue && !MissionControl.Instance.ContractStats.ContainsKey(ContractStats.DIALOGUE_ADDITIONAL_LANCE_ALLY_START))
            {
                MissionControl.Instance.ContractStats.Add(ContractStats.DIALOGUE_ADDITIONAL_LANCE_ALLY_START, true);
                encounterRules.EncounterLogic.Add(new AddDialogueChunk(
                                                      ChunkLogic.DIALOGUE_ADDITIONAL_LANCE_ALLY_START_GUID,
                                                      "AdditionalLanceAllyStart",
                                                      "Start Conversation For Additional Lance Ally",
                                                      lanceGuid
                                                      // "DialogBucketDef_Universal_KillConfirmed"
                                                      ));
                encounterRules.EncounterLogic.Add(new DialogTrigger(MessageCenterMessageType.OnEncounterIntroComplete, ChunkLogic.DIALOGUE_ADDITIONAL_LANCE_ALLY_START_GUID));
            }

            encounterRules.ObjectReferenceQueue.Add(spawnerName);
        }
示例#2
0
        public AddPlayer2LanceWithDestroyObjectiveBatch(EncounterRules encounterRules, string orientationTargetKey,
                                                        SpawnLogic.LookDirection lookDirection, float minDistance, float maxDistance, string objectiveName, int priority,
                                                        bool isPrimaryObjective, bool displayToUser, bool showObjectiveOnLanceDetected, bool excludeFromAutocomplete)
        {
            int           numberOfUnitsInLance = 4;
            string        lanceGuid            = Guid.NewGuid().ToString();
            string        objectiveGuid        = Guid.NewGuid().ToString();
            List <string> unitGuids            = encounterRules.GenerateGuids(numberOfUnitsInLance);
            string        targetTeamGuid       = EncounterRules.PLAYER_2_TEAM_ID;
            string        spawnerName          = $"Lance_Enemy_OpposingForce_{lanceGuid}";

            encounterRules.EncounterLogic.Add(new AddLanceToPlayer2Team(lanceGuid, unitGuids));
            encounterRules.EncounterLogic.Add(new AddDestroyWholeUnitChunk(encounterRules, targetTeamGuid, lanceGuid, unitGuids,
                                                                           spawnerName, objectiveGuid, objectiveName, priority, isPrimaryObjective, displayToUser));
            if (!excludeFromAutocomplete)
            {
                encounterRules.EncounterLogic.Add(new AddObjectiveToAutocompleteTrigger(objectiveGuid));
            }
            encounterRules.EncounterLogic.Add(new SpawnLanceMembersAroundTarget(encounterRules, spawnerName, orientationTargetKey,
                                                                                SpawnLogic.LookDirection.AWAY_FROM_TARGET, minDistance, maxDistance));

            if (showObjectiveOnLanceDetected)
            {
                encounterRules.EncounterLogic.Add(new ShowObjectiveTrigger(MessageCenterMessageType.OnLanceDetected, lanceGuid, objectiveGuid, false));
            }

            encounterRules.ObjectReferenceQueue.Add(spawnerName);
        }
示例#3
0
        public AddTargetLanceWithDestroyObjectiveBatch(EncounterRules encounterRules, string orientationTargetKey,
                                                       SpawnLogic.LookDirection lookDirection, float minDistance, float maxDistance, string objectiveName, int priority, bool isPrimaryObjective)
        {
            int           numberOfUnitsInLance  = 4;
            string        lanceGuid             = Guid.NewGuid().ToString();
            string        contractObjectiveGuid = Guid.NewGuid().ToString();
            string        objectiveGuid         = Guid.NewGuid().ToString();
            List <string> unitGuids             = encounterRules.GenerateGuids(numberOfUnitsInLance);
            string        targetTeamGuid        = EncounterRules.TARGET_TEAM_ID;
            string        spawnerName           = $"Lance_Enemy_OpposingForce_{lanceGuid}";

            // AddPartialContractObjective addPartialContractObjective = new AddPartialContractObjective(contractObjectiveGuid, false, objectiveName, objectiveName);
            // addPartialContractObjective.ObjectiveGuids.Add(objectiveGuid);
            // AddContractObjectiveToEncounter addContractObjectiveToEncounter = new AddContractObjectiveToEncounter(contractObjectiveGuid);

            encounterRules.EncounterLogic.Add(new AddLanceToTargetTeam(lanceGuid, unitGuids));
            // encounterRules.EncounterLogic.Add(addPartialContractObjective);
            // encounterRules.EncounterLogic.Add(addContractObjectiveToEncounter);
            encounterRules.EncounterLogic.Add(new AddDestroyWholeUnitChunk(encounterRules, targetTeamGuid, lanceGuid, unitGuids,
                                                                           // spawnerName, objectiveGuid, objectiveName, priority, isPrimaryObjective, contractObjectiveGuid));
                                                                           spawnerName, objectiveGuid, objectiveName, priority, isPrimaryObjective));
            encounterRules.EncounterLogic.Add(new SpawnLanceMembersAroundTarget(encounterRules, spawnerName, orientationTargetKey,
                                                                                SpawnLogic.LookDirection.AWAY_FROM_TARGET, minDistance, maxDistance));

            encounterRules.ObjectReferenceQueue.Add(spawnerName);
        }
示例#4
0
        protected void BuildAdditionalLances(string enemyOrientationTargetKey, SpawnLogic.LookDirection enemyLookDirection,
                                             string allyOrientationKey, SpawnLogic.LookDirection allyLookDirection, float minAllyDistance, float maxAllyDistance)
        {
            Main.Logger.Log($"[{this.GetType().Name}] Building additional lance rules");

            int numberOfAdditionalEnemyLances = 0;

            if (MissionControl.Instance.AreAdditionalLancesAllowed("enemy"))
            {
                bool isPrimaryObjective = MissionControl.Instance.CurrentContractType.In(Main.Settings.AdditionalLanceSettings.IsPrimaryObjectiveIn.ToArray());
                Main.Logger.Log($"[{this.GetType().Name}] Additional Lances will be primary objectives? {isPrimaryObjective}");
                FactionDef faction = MissionControl.Instance.GetFactionFromTeamType("enemy");

                numberOfAdditionalEnemyLances = Main.Settings.ActiveAdditionalLances.Enemy.SelectNumberOfAdditionalLances(faction, "enemy");
                if (Main.Settings.DebugMode && (Main.Settings.Debug.AdditionalLancesEnemyLanceCount > -1))
                {
                    numberOfAdditionalEnemyLances = Main.Settings.Debug.AdditionalLancesEnemyLanceCount;
                }

                int objectivePriority = -10;

                for (int i = 0; i < numberOfAdditionalEnemyLances; i++)
                {
                    if (MissionControl.Instance.CurrentContractType == "ArenaSkirmish")
                    {
                        new AddPlayer2LanceWithDestroyObjectiveBatch(this, enemyOrientationTargetKey, enemyLookDirection, 50f, 200f,
                                                                     $"Destroy Enemy Support Lance {i + 1}", objectivePriority--, isPrimaryObjective);
                    }
                    else
                    {
                        new AddTargetLanceWithDestroyObjectiveBatch(this, enemyOrientationTargetKey, enemyLookDirection, 50f, 200f,
                                                                    $"Destroy {{TEAM_TAR.FactionDef.Demonym}} Support Lance {i + 1}", objectivePriority--, isPrimaryObjective);
                    }
                }
            }

            if (MissionControl.Instance.AreAdditionalLancesAllowed("allies"))
            {
                FactionDef faction = MissionControl.Instance.GetFactionFromTeamType("allies");

                int numberOfAdditionalAllyLances = Main.Settings.ActiveAdditionalLances.Allies.SelectNumberOfAdditionalLances(faction, "allies");

                if (Main.Settings.AdditionalLanceSettings.MatchAllyLanceCountToEnemy)
                {
                    Main.Logger.LogDebug($"[{this.GetType().Name}] 'MatchAllyLanceCountToEnemy' is on. Ally lance count will be {numberOfAdditionalEnemyLances}");
                    numberOfAdditionalAllyLances = numberOfAdditionalEnemyLances;
                }

                for (int i = 0; i < numberOfAdditionalAllyLances; i++)
                {
                    new AddEmployerLanceBatch(this, allyOrientationKey, allyLookDirection, minAllyDistance, maxAllyDistance);
                }
            }
        }
示例#5
0
        public AddPlayer2LanceWithDestroyObjectiveBatch(EncounterRules encounterRules, string orientationTargetKey,
                                                        SpawnLogic.LookDirection lookDirection, float minDistance, float maxDistance, string objectiveName, int priority, bool isPrimaryObjective)
        {
            int           numberOfUnitsInLance = 4;
            string        lanceGuid            = Guid.NewGuid().ToString();
            string        objectiveGuid        = Guid.NewGuid().ToString();
            List <string> unitGuids            = encounterRules.GenerateGuids(numberOfUnitsInLance);
            string        targetTeamGuid       = EncounterRules.PLAYER_2_TEAM_ID;
            string        spawnerName          = $"Lance_Enemy_OpposingForce_{lanceGuid}";

            encounterRules.EncounterLogic.Add(new AddLanceToPlayer2Team(lanceGuid, unitGuids));
            encounterRules.EncounterLogic.Add(new AddDestroyWholeUnitChunk(encounterRules, targetTeamGuid, lanceGuid, unitGuids,
                                                                           spawnerName, objectiveGuid, objectiveName, priority, isPrimaryObjective));
            encounterRules.EncounterLogic.Add(new SpawnLanceMembersAroundTarget(encounterRules, spawnerName, orientationTargetKey,
                                                                                SpawnLogic.LookDirection.AWAY_FROM_TARGET, minDistance, maxDistance));

            encounterRules.ObjectReferenceQueue.Add(spawnerName);
        }
示例#6
0
        protected void BuildAdditionalLances(string enemyOrientationTargetKey, SpawnLogic.LookDirection enemyLookDirection, float mustBeBeyondDistanceOfTarget, float mustBeWithinDistanceOfTarget,
                                             string allyOrientationKey, SpawnLogic.LookDirection allyLookDirection, float mustBeBeyondDistance, float mustBeWithinDistance)
        {
            Main.Logger.Log($"[{this.GetType().Name}] Building additional lance rules");

            int numberOfAdditionalEnemyLances = 0;

            if (MissionControl.Instance.AreAdditionalLancesAllowed("enemy"))
            {
                List <string> manuallySpecifiedLances = new List <string>();
                bool          isPrimaryObjective      = MissionControl.Instance.CurrentContractType.In(Main.Settings.AdditionalLanceSettings.IsPrimaryObjectiveIn.ToArray());
                bool          displayToUser           = !Main.Settings.AdditionalLanceSettings.HideObjective;
                bool          excludeFromAutocomplete = MissionControl.Instance.CurrentContractType.In(Main.Settings.AdditionalLanceSettings.ExcludeFromAutocomplete.ToArray());

                Main.Logger.Log($"[{this.GetType().Name}] Excluding Additional Lance from contract type's autocomplete? {excludeFromAutocomplete}");

                if (Main.Settings.AdditionalLanceSettings.AlwaysDisplayHiddenObjectiveIfPrimary)
                {
                    displayToUser = (isPrimaryObjective) ? true : displayToUser;
                }

                Main.Logger.Log($"[{this.GetType().Name}] Additional Lances will be primary objectives? {isPrimaryObjective}");
                FactionDef faction = MissionControl.Instance.GetFactionFromTeamType("enemy");

                numberOfAdditionalEnemyLances = Main.Settings.ActiveAdditionalLances.Enemy.SelectNumberOfAdditionalLances(faction, "enemy");
                if (Main.Settings.DebugMode && (Main.Settings.Debug.AdditionalLancesEnemyLanceCount > -1))
                {
                    numberOfAdditionalEnemyLances = Main.Settings.Debug.AdditionalLancesEnemyLanceCount;
                }

                // Allow contract-specific settings overrides to force their respective setting
                if (Main.Settings.ActiveContractSettings.Has(ContractSettingsOverrides.AdditionalLances_EnemyLanceCountOverride))
                {
                    numberOfAdditionalEnemyLances = Main.Settings.ActiveContractSettings.GetInt(ContractSettingsOverrides.AdditionalLances_EnemyLanceCountOverride);
                    Main.Logger.Log($"[{this.GetType().Name}] Using contract-specific settings override for contract '{MissionControl.Instance.CurrentContract.Name}'. Enemy lance count will be '{numberOfAdditionalEnemyLances}'.");
                }

                if (Main.Settings.ActiveContractSettings.Has(ContractSettingsOverrides.AdditionalLances_EnemyLancesOverride))
                {
                    manuallySpecifiedLances = Main.Settings.ActiveContractSettings.GetList <string>(ContractSettingsOverrides.AdditionalLances_EnemyLancesOverride);
                    Main.Logger.Log($"[{this.GetType().Name}] Using contract-specific settings override for contract '{MissionControl.Instance.CurrentContract.Name}'. Enemy lances will be '{string.Join(",", manuallySpecifiedLances)}'.");
                }

                bool showObjectiveOnLanceDetected = Main.Settings.AdditionalLanceSettings.ShowObjectiveOnLanceDetected;
                int  objectivePriority            = -10;

                for (int i = 1; i <= numberOfAdditionalEnemyLances; i++)
                {
                    if (MissionControl.Instance.CurrentContractType == "ArenaSkirmish")
                    {
                        new AddPlayer2LanceWithDestroyObjectiveBatch(this, enemyOrientationTargetKey, enemyLookDirection, mustBeBeyondDistanceOfTarget, mustBeWithinDistanceOfTarget,
                                                                     $"Destroy Enemy Support Lance {i}", objectivePriority--, isPrimaryObjective, displayToUser, showObjectiveOnLanceDetected, excludeFromAutocomplete);
                    }
                    else
                    {
                        if (manuallySpecifiedLances.Count >= i)
                        {
                            string         lanceKey      = manuallySpecifiedLances[i - 1];
                            MLanceOverride lanceOverride = DataManager.Instance.GetLanceOverride(lanceKey);
                            Main.Logger.Log($"[{this.GetType().Name}] Using contract-specific settings override for contract '{MissionControl.Instance.CurrentContract.Name}'. Resolved Enemy lance will be '{lanceOverride.LanceKey}'.");
                            new AddTargetLanceWithDestroyObjectiveBatch(this, enemyOrientationTargetKey, enemyLookDirection, mustBeBeyondDistanceOfTarget, mustBeWithinDistanceOfTarget,
                                                                        $"Destroy {{TEAM_TAR.FactionDef.Demonym}} Support Lance {i}", objectivePriority--, isPrimaryObjective, displayToUser, showObjectiveOnLanceDetected, excludeFromAutocomplete, lanceOverride);
                        }
                        else
                        {
                            new AddTargetLanceWithDestroyObjectiveBatch(this, enemyOrientationTargetKey, enemyLookDirection, mustBeBeyondDistanceOfTarget, mustBeWithinDistanceOfTarget,
                                                                        $"Destroy {{TEAM_TAR.FactionDef.Demonym}} Support Lance {i}", objectivePriority--, isPrimaryObjective, displayToUser, showObjectiveOnLanceDetected, excludeFromAutocomplete);
                        }
                    }
                }
            }

            if (MissionControl.Instance.AreAdditionalLancesAllowed("allies"))
            {
                List <string> manuallySpecifiedLances = new List <string>();
                FactionDef    faction = MissionControl.Instance.GetFactionFromTeamType("allies");

                int numberOfAdditionalAllyLances = Main.Settings.ActiveAdditionalLances.Allies.SelectNumberOfAdditionalLances(faction, "allies");

                // Allow contract-specific settings overrides to force their respective setting
                if (Main.Settings.ActiveContractSettings.Has(ContractSettingsOverrides.AdditionalLances_AllyLanceCountOverride))
                {
                    numberOfAdditionalAllyLances = Main.Settings.ActiveContractSettings.GetInt(ContractSettingsOverrides.AdditionalLances_AllyLanceCountOverride);
                    Main.Logger.Log($"[{this.GetType().Name}] Using contract-specific settings override for contract '{MissionControl.Instance.CurrentContract.Name}'. Ally lance count will be '{numberOfAdditionalAllyLances}'.");
                }
                else if (Main.Settings.AdditionalLanceSettings.MatchAllyLanceCountToEnemy)
                {
                    Main.Logger.LogDebug($"[{this.GetType().Name}] 'MatchAllyLanceCountToEnemy' is on. Ally lance count will be {numberOfAdditionalEnemyLances}");
                    numberOfAdditionalAllyLances = numberOfAdditionalEnemyLances;
                }

                if (Main.Settings.ActiveContractSettings.Has(ContractSettingsOverrides.AdditionalLances_AllyLancesOverride))
                {
                    manuallySpecifiedLances = Main.Settings.ActiveContractSettings.GetList <string>(ContractSettingsOverrides.AdditionalLances_AllyLancesOverride);
                    Main.Logger.Log($"[{this.GetType().Name}] Using contract-specific settings override for contract '{MissionControl.Instance.CurrentContract.Name}'. Ally lances provided are '{string.Join(",", manuallySpecifiedLances)}'.");
                }

                for (int i = 1; i <= numberOfAdditionalAllyLances; i++)
                {
                    if (manuallySpecifiedLances.Count >= i)
                    {
                        string         lanceKey      = manuallySpecifiedLances[i - 1];
                        MLanceOverride lanceOverride = DataManager.Instance.GetLanceOverride(lanceKey);
                        Main.Logger.Log($"[{this.GetType().Name}] Using contract-specific settings override for contract '{MissionControl.Instance.CurrentContract.Name}'. Resolved Ally lance will be '{lanceOverride.LanceKey}'.");
                        new AddEmployerLanceBatch(this, allyOrientationKey, allyLookDirection, mustBeBeyondDistance, mustBeWithinDistance, lanceOverride);
                    }
                    else
                    {
                        new AddEmployerLanceBatch(this, allyOrientationKey, allyLookDirection, mustBeBeyondDistance, mustBeWithinDistance);
                    }
                }
            }
        }
示例#7
0
 protected void BuildAdditionalLances(string enemyOrientationTargetKey, SpawnLogic.LookDirection enemyLookDirection,
                                      string allyOrientationKey, SpawnLogic.LookDirection allyLookDirection, float mustBeBeyondDistance, float mustBeWithinDistance)
 {
     BuildAdditionalLances(enemyOrientationTargetKey, enemyLookDirection, 100f, 400f, allyOrientationKey, allyLookDirection, mustBeBeyondDistance, mustBeWithinDistance);
 }
        protected void BuildAdditionalLances(string enemyOrientationTargetKey, SpawnLogic.LookDirection enemyLookDirection, float mustBeBeyondDistanceOfTarget, float mustBeWithinDistanceOfTarget,
                                             string allyOrientationKey, SpawnLogic.LookDirection allyLookDirection, float mustBeBeyondDistance, float mustBeWithinDistance)
        {
            Main.Logger.Log($"[{this.GetType().Name}] Building additional lance rules");

            int numberOfAdditionalEnemyLances = 0;

            if (MissionControl.Instance.AreAdditionalLancesAllowed("enemy"))
            {
                bool isPrimaryObjective      = MissionControl.Instance.CurrentContractType.In(Main.Settings.AdditionalLanceSettings.IsPrimaryObjectiveIn.ToArray());
                bool displayToUser           = !Main.Settings.AdditionalLanceSettings.HideObjective;
                bool excludeFromAutocomplete = MissionControl.Instance.CurrentContractType.In(Main.Settings.AdditionalLanceSettings.ExcludeFromAutocomplete.ToArray());

                Main.Logger.Log($"[{this.GetType().Name}] Excluding Additional Lance from contract type's autocomplete? {excludeFromAutocomplete}");

                if (Main.Settings.AdditionalLanceSettings.AlwaysDisplayHiddenObjectiveIfPrimary)
                {
                    displayToUser = (isPrimaryObjective) ? true : displayToUser;
                }

                Main.Logger.Log($"[{this.GetType().Name}] Additional Lances will be primary objectives? {isPrimaryObjective}");
                FactionDef faction = MissionControl.Instance.GetFactionFromTeamType("enemy");

                numberOfAdditionalEnemyLances = Main.Settings.ActiveAdditionalLances.Enemy.SelectNumberOfAdditionalLances(faction, "enemy");
                if (Main.Settings.DebugMode && (Main.Settings.Debug.AdditionalLancesEnemyLanceCount > -1))
                {
                    numberOfAdditionalEnemyLances = Main.Settings.Debug.AdditionalLancesEnemyLanceCount;
                }

                bool showObjectiveOnLanceDetected = Main.Settings.AdditionalLanceSettings.ShowObjectiveOnLanceDetected;

                int objectivePriority = -10;

                for (int i = 0; i < numberOfAdditionalEnemyLances; i++)
                {
                    if (MissionControl.Instance.CurrentContractType == "ArenaSkirmish")
                    {
                        new AddPlayer2LanceWithDestroyObjectiveBatch(this, enemyOrientationTargetKey, enemyLookDirection, mustBeBeyondDistanceOfTarget, mustBeWithinDistanceOfTarget,
                                                                     $"Destroy Enemy Support Lance {i + 1}", objectivePriority--, isPrimaryObjective, displayToUser, showObjectiveOnLanceDetected, excludeFromAutocomplete);
                    }
                    else
                    {
                        new AddTargetLanceWithDestroyObjectiveBatch(this, enemyOrientationTargetKey, enemyLookDirection, mustBeBeyondDistanceOfTarget, mustBeWithinDistanceOfTarget,
                                                                    $"Destroy {{TEAM_TAR.FactionDef.Demonym}} Support Lance {i + 1}", objectivePriority--, isPrimaryObjective, displayToUser, showObjectiveOnLanceDetected, excludeFromAutocomplete);
                    }
                }
            }

            if (MissionControl.Instance.AreAdditionalLancesAllowed("allies"))
            {
                FactionDef faction = MissionControl.Instance.GetFactionFromTeamType("allies");

                int numberOfAdditionalAllyLances = Main.Settings.ActiveAdditionalLances.Allies.SelectNumberOfAdditionalLances(faction, "allies");

                if (Main.Settings.AdditionalLanceSettings.MatchAllyLanceCountToEnemy)
                {
                    Main.Logger.LogDebug($"[{this.GetType().Name}] 'MatchAllyLanceCountToEnemy' is on. Ally lance count will be {numberOfAdditionalEnemyLances}");
                    numberOfAdditionalAllyLances = numberOfAdditionalEnemyLances;
                }

                for (int i = 0; i < numberOfAdditionalAllyLances; i++)
                {
                    new AddEmployerLanceBatch(this, allyOrientationKey, allyLookDirection, mustBeBeyondDistance, mustBeWithinDistance);
                }
            }
        }