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);
            }
        }
    }
Beispiel #2
0
    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);
    }