public void Unbind()
 {
     this.EmpireIndex = -1;
     this.Session     = null;
 }
示例#2
0
    private void Server_TurnBegin_CheckLiceArmySpawn()
    {
        global::Game game = this.gameService.Game as global::Game;

        Diagnostics.Assert(game != null);
        ISessionService service = Services.GetService <ISessionService>();

        Diagnostics.Assert(service != null);
        global::Session session = service.Session as global::Session;

        Diagnostics.Assert(session != null);
        KaijuCouncil.WildLiceArmyPreferences.LoadRegistryValues(session);
        if (this.LiceArmies.Length >= KaijuCouncil.WildLiceArmyPreferences.MaxArmiesAlive)
        {
            return;
        }
        int turn = game.Turn;
        int num  = (int)Math.Ceiling((double)((float)KaijuCouncil.WildLiceArmyPreferences.SpawningCooldown * base.Empire.GetPropertyValue(SimulationProperties.GameSpeedMultiplier)));

        if (turn < this.lastLiceArmySpawnTurn + num)
        {
            return;
        }
        int num2 = this.Kaiju.OnGarrisonMode() ? KaijuCouncil.WildLiceArmyPreferences.ArmiesToSpawnCount : 0;

        if (num2 <= 0)
        {
            return;
        }
        List <WorldPosition> list = new List <WorldPosition>();

        for (int i = 0; i < this.Kaiju.Region.WorldPositions.Length; i++)
        {
            WorldPosition worldPosition = this.Kaiju.Region.WorldPositions[i];
            if (DepartmentOfDefense.CheckWhetherTargetPositionIsValidForUseAsArmySpawnLocation(worldPosition, PathfindingMovementCapacity.Ground) && worldPosition != this.Kaiju.WorldPosition)
            {
                list.Add(worldPosition);
            }
        }
        if (list.Count == 0)
        {
            return;
        }
        System.Random randomizer = new System.Random(World.Seed + turn);
        list = (from position in list
                orderby this.worldPositionningService.GetDistance(this.Kaiju.WorldPosition, position), randomizer.NextDouble()
                select position).ToList <WorldPosition>();
        WorldPosition[] worldPositions;
        if (list.Count > num2)
        {
            worldPositions = list.Take(Math.Min(list.Count, num2)).ToArray <WorldPosition>();
        }
        else
        {
            worldPositions = list.ToArray();
        }
        List <StaticString> list2 = new List <StaticString>();
        StaticString        name  = this.KaijuEmpire.FindLiceDesign(true).Name;
        int unitsPerArmy          = KaijuCouncil.WildLiceArmyPreferences.UnitsPerArmy;

        for (int j = 0; j < unitsPerArmy; j++)
        {
            list2.Add(name);
        }
        List <StaticString> list3 = new List <StaticString>();

        list3.Add(KaijuCouncil.WildLiceArmyPreferences.ArmyTag);
        List <StaticString> list4 = new List <StaticString>();

        list4.Add(KaijuCouncil.WildLiceArmyPreferences.UnitTag);
        List <MajorEmpire> list5 = new List <MajorEmpire>();
        int k = 0;

        while (k < game.Empires.Length)
        {
            if (game.Empires[k] is MajorEmpire && !(game.Empires[k] as MajorEmpire).ELCPIsEliminated)
            {
                if (game.Empires[k].GetAgency <DepartmentOfTheInterior>().NonInfectedCities.Count > 0)
                {
                    list5.Add(game.Empires[k] as MajorEmpire);
                    break;
                }
                break;
            }
            else
            {
                k++;
            }
        }
        DepartmentOfTheInterior agency      = list5[game.Turn % list5.Count].GetAgency <DepartmentOfTheInterior>();
        MinorEmpire             minorEmpire = agency.Cities[game.Turn % agency.Cities.Count].Region.MinorEmpire;
        OrderSpawnArmies        order       = new OrderSpawnArmies(minorEmpire.Index, worldPositions, list2.ToArray(), KaijuCouncil.WildLiceArmyPreferences.ArmiesToSpawnCount, list3.ToArray(), list4.ToArray(), Math.Max(0, DepartmentOfScience.GetMaxEraNumber()), QuestArmyObjective.QuestBehaviourType.Undefined);
        Ticket ticket = null;

        minorEmpire.PlayerControllers.Server.PostOrder(order, out ticket, new EventHandler <TicketRaisedEventArgs>(this.OrderSpawnLiceArmies_TicketRaised));
    }
 public void Bind(global::Session session, int empireIndex, MenuNewGameScreen parent)
 {
     this.Session     = session;
     this.EmpireIndex = empireIndex;
 }