public override void Begin(params object[] parameters) { base.Begin(parameters); bool canceled = false; if (parameters.Length >= 1 && parameters[0] is bool) { canceled = (bool)parameters[0]; } global::PlayerController playerController = base.BattleEncounter.PlayerController; if (playerController != null) { OrderLockEncounterExternalArmies order = new OrderLockEncounterExternalArmies(base.BattleEncounter.EncounterGUID, base.BattleEncounter.ExternalArmies, false); playerController.PostOrder(order); for (int i = 0; i < base.BattleEncounter.BattleContenders.Count; i++) { BattleContender battleContender = base.BattleEncounter.BattleContenders[i]; if (battleContender.DeadParasitesCount > 0) { BattleContender enemyContenderWithAbilityFromContender = base.BattleEncounter.GetEnemyContenderWithAbilityFromContender(battleContender, UnitAbility.ReadonlyParasite); if (enemyContenderWithAbilityFromContender != null) { enemyContenderWithAbilityFromContender.UndeadUnitsToCreateCount += battleContender.DeadParasitesCount; } } } for (int j = 0; j < base.BattleEncounter.BattleContenders.Count; j++) { BattleContender battleContender2 = base.BattleEncounter.BattleContenders[j]; if (battleContender2.Garrison != null && battleContender2.UndeadUnitsToCreateCount > 0) { OrderCreateUndeadUnits order2 = new OrderCreateUndeadUnits(battleContender2.Garrison.Empire.Index, battleContender2.UndeadUnitsToCreateCount, battleContender2.Garrison.GUID, base.BattleEncounter.EncounterGUID); playerController.PostOrder(order2); } } OrderEndEncounter orderEndEncounter = new OrderEndEncounter(base.BattleEncounter.EncounterGUID, canceled); IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); if (ELCPUtilities.UseELCPFortificationPointRuleset) { Diagnostics.Assert(service != null); IEncounterRepositoryService service2 = service.Game.Services.GetService <IEncounterRepositoryService>(); Diagnostics.Assert(service2 != null); Encounter encounter = null; if (service2.TryGetValue(base.BattleEncounter.EncounterGUID, out encounter)) { List <ulong> list = new List <ulong>(); foreach (Contender contender in encounter.Contenders) { if (contender.IsTakingPartInBattle) { foreach (EncounterUnit encounterUnit in contender.EncounterUnits) { if (encounterUnit.IsOnBattlefield) { list.Add(encounterUnit.Unit.GUID); } } } } orderEndEncounter.GUIDsOnBattlefield = list.ToArray(); } } if (base.BattleEncounter is BattleCityAssaultEncounter) { orderEndEncounter.DoNotSubtractActionPoints = (base.BattleEncounter as BattleCityAssaultEncounter).IsCityRipeForTheTaking; } playerController.PostOrder(orderEndEncounter); if (base.BattleEncounter is BattleCityAssaultEncounter && base.BattleEncounter.BattleContenders.Count >= 1) { BattleCityAssaultEncounter battleCityAssaultEncounter = base.BattleEncounter as BattleCityAssaultEncounter; IGameEntityRepositoryService service3 = service.Game.Services.GetService <IGameEntityRepositoryService>(); Diagnostics.Assert(service3 != null); IGameEntity gameEntity = null; City city = null; if (service3.TryGetValue(battleCityAssaultEncounter.CityGuid, out gameEntity) && gameEntity is City) { city = (gameEntity as City); } bool flag = false; bool flag2 = false; for (int k = 0; k < base.BattleEncounter.BattleContenders.Count; k++) { BattleContender battleContender3 = base.BattleEncounter.BattleContenders[k]; if (battleContender3.IsTakingPartInBattle && !battleContender3.IsDead) { if (battleContender3.Garrison.Empire == city.Empire) { flag = true; } else { flag2 = true; } } else if (!battleContender3.IsTakingPartInBattle && battleContender3.Garrison.GUID == city.GUID && battleContender3.Garrison.UnitsCount > 0) { flag = true; } } flag |= !flag2; OrderCityEncounterEnd order3 = new OrderCityEncounterEnd(base.BattleEncounter.BattleContenders[0].Garrison.Empire.Index, base.BattleEncounter.BattleContenders[0].Garrison.GUID, battleCityAssaultEncounter.CityGuid, flag); playerController.PostOrder(order3); } } }
protected override State Execute(QuestBehaviour questBehaviour, params object[] parameters) { IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); Diagnostics.Assert(service.Game != null); global::Empire initiator = questBehaviour.Initiator; Diagnostics.Assert(initiator.SimulationObject != null); if (!initiator.SimulationObject.Tags.Contains(global::Empire.TagEmpireEliminated)) { if (initiator.GetAgency <DepartmentOfDefense>() != null) { IEncounterRepositoryService service2 = service.Game.Services.GetService <IEncounterRepositoryService>(); if (service2 != null) { IEnumerable <Encounter> enumerable = service2; if (enumerable != null) { List <Encounter> list = new List <Encounter>(); foreach (Encounter encounter in enumerable) { if (encounter != null) { for (int i = 0; i < encounter.Empires.Count; i++) { if (encounter.Empires[i].Index == initiator.Index && encounter.EncounterState != EncounterState.BattleHasEnded) { list.Add(encounter); } } } } global::Empire.PlayerControllersContainer playerControllers = (initiator as MajorEmpire).PlayerControllers; if (playerControllers != null && playerControllers.Server != null) { for (int j = 0; j < list.Count; j++) { Encounter encounter2 = list[j]; OrderEndEncounter order = new OrderEndEncounter(encounter2.GUID, true); playerControllers.Server.PostOrder(order); OrderDestroyEncounter order2 = new OrderDestroyEncounter(encounter2.GUID); playerControllers.Server.PostOrder(order2); } } } } } SimulationDescriptor simulationDescriptor = null; IDatabase <SimulationDescriptor> database = Databases.GetDatabase <SimulationDescriptor>(false); if (database != null) { database.TryGetValue("EmpireEliminated", out simulationDescriptor); } if (simulationDescriptor != null) { initiator.AddDescriptor(simulationDescriptor, false); initiator.Refresh(true); } else { initiator.SimulationObject.Tags.AddTag(global::Empire.TagEmpireEliminated); } } ISessionService service3 = Services.GetService <ISessionService>(); Diagnostics.Assert(service3 != null && service3.Session != null); if (service3.Session.IsHosting) { service3.Session.SetLobbyData(string.Format("Empire{0}Eliminated", initiator.Index), true, true); } IPlayerControllerRepositoryControl playerControllerRepositoryControl = service.Game.Services.GetService <IPlayerControllerRepositoryService>() as IPlayerControllerRepositoryControl; if (playerControllerRepositoryControl != null) { global::PlayerController playerControllerById = playerControllerRepositoryControl.GetPlayerControllerById("server"); if (playerControllerById != null) { if (initiator is MajorEmpire) { MajorEmpire majorEmpire = initiator as MajorEmpire; if (majorEmpire.TamedKaijus.Count > 0) { majorEmpire.ServerUntameAllKaijus(); } } OrderEliminateEmpire order3 = new OrderEliminateEmpire(questBehaviour.Initiator.Index); playerControllerById.PostOrder(order3); } } return(State.Success); }