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); }
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); }
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); }
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); } } }
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); }
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); } } } }
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); } } }