Ejemplo n.º 1
0
 public void SetOwner(MajorEmpire ownerEmpire)
 {
     this.MajorEmpire          = ownerEmpire;
     this.KaijuArmy.Empire     = ownerEmpire;
     this.KaijuGarrison.Empire = ownerEmpire;
     this.tamedTurn            = (this.GameService.Game as global::Game).Turn;
 }
Ejemplo n.º 2
0
    private float GetWonderProgress(MajorEmpire empire)
    {
        DepartmentOfTheInterior agency  = empire.GetAgency <DepartmentOfTheInterior>();
        DepartmentOfIndustry    agency2 = empire.GetAgency <DepartmentOfIndustry>();
        float num = 0f;

        for (int i = 0; i < agency.Cities.Count; i++)
        {
            Construction construction = agency2.GetConstructionQueue(agency.Cities[i]).Get((Construction x) => x.ConstructibleElement.SubCategory == "SubCategoryVictory");
            if (construction != null)
            {
                for (int j = 0; j < construction.CurrentConstructionStock.Length; j++)
                {
                    if (construction.CurrentConstructionStock[j].PropertyName == "Production")
                    {
                        float stock = construction.CurrentConstructionStock[j].Stock;
                        if (stock > 0f)
                        {
                            float num2 = stock / DepartmentOfTheTreasury.GetProductionCostWithBonus(agency.Cities[i], construction.ConstructibleElement, "Production");
                            if (num2 > num)
                            {
                                num = num2;
                            }
                        }
                    }
                }
            }
        }
        return(num);
    }
Ejemplo n.º 3
0
    public void ChangeToTamedState(MajorEmpire majorEmpire)
    {
        if (this.IsWild())
        {
            SimulationDescriptor value = this.SimulationDescriptorDatabase.GetValue(Kaiju.KaijuStatusWild);
            base.RemoveDescriptor(value);
        }
        else if (this.IsStunned())
        {
            SimulationDescriptor value2 = this.SimulationDescriptorDatabase.GetValue(Kaiju.KaijuStatusStunned);
            base.RemoveDescriptor(value2);
        }
        SimulationDescriptor value3 = this.SimulationDescriptorDatabase.GetValue(Kaiju.KaijuStatusTamed);

        base.AddDescriptor(value3, false);
        this.Refresh(false);
        this.ComputeNextTurnToSpawnUnits(false);
        this.KaijuGarrison.CallRefreshAppliedRegionEffects();
        this.KaijuArmy.OnTamed();
        EventKaijuTamed eventToNotify = new EventKaijuTamed(this.majorEmpire, this);

        this.EventService.Notify(eventToNotify);
        foreach (global::Empire empire in (this.gameService.Game as global::Game).Empires)
        {
            if (empire is MajorEmpire && empire != this.majorEmpire)
            {
                this.eventService.Notify(new GlobalEventKaijuTamed(empire, this));
            }
        }
    }
Ejemplo n.º 4
0
    private void KaijuLostEncounter(Kaiju kaiju, global::Empire stunner, bool setKaijuFree)
    {
        bool flag     = Amplitude.Unity.Runtime.Runtime.Registry.GetValue <bool>("Gameplay/Kaiju/KaijuAutoTameBeforeLoseEncounter", true);
        bool relocate = false;

        if (setKaijuFree)
        {
            flag     = false;
            relocate = true;
        }
        global::PlayerController server = this.KaijuEmpire.PlayerControllers.Server;

        if (kaiju.IsTamed())
        {
            MajorEmpire majorEmpire = kaiju.MajorEmpire;
            if (server != null)
            {
                OrderUntameKaiju order = new OrderUntameKaiju(kaiju, relocate, stunner.Index, flag);
                server.PostOrder(order);
            }
        }
        else if (flag)
        {
            if (server != null)
            {
                OrderTameKaiju order2 = new OrderTameKaiju(stunner.Index, kaiju, null);
                server.PostOrder(order2);
            }
        }
        else
        {
            this.Kaiju.ChangeToStunState(stunner);
            this.ResetRelocationETA();
        }
    }
Ejemplo n.º 5
0
    public override void UpdateRole()
    {
        base.Role = BaseNavyArmy.ArmyRole.Forteress;
        this.WantToKeepArmyFitness.Reset();
        NavyRegionData navyRegionData = base.Commander.RegionData as NavyRegionData;

        this.WantToKeepArmyFitness.Add(0.3f, "constant", new object[0]);
        if (navyRegionData.NumberOfWaterEnemy > 0)
        {
            HeuristicValue heuristicValue = new HeuristicValue(0f);
            heuristicValue.Add((float)navyRegionData.NumberOfWaterEnemy, "Number of enemy water region around.", new object[0]);
            heuristicValue.Multiply(0.1f, "boost constant", new object[0]);
            heuristicValue.Min(0.5f, "Avoid too big factor!", new object[0]);
            this.WantToKeepArmyFitness.Boost(heuristicValue, "Water region owned by enemy around.", new object[0]);
        }
        if (navyRegionData.NumberOfEnemyCityOnTheBorder > 0)
        {
            this.WantToKeepArmyFitness.Boost(0.2f, "Enemy city in the region.", new object[0]);
        }
        if (navyRegionData.EnemyNavalPower > 0f)
        {
            this.WantToKeepArmyFitness.Boost(0.9f, "Enemy roaming in the region.", new object[0]);
        }
        MajorEmpire occupant = this.Fortress.Occupant;

        if (occupant != null && !AILayer_Military.AreaIsSave(this.Fortress.WorldPosition, 10, occupant.GetAgency <DepartmentOfForeignAffairs>(), true))
        {
            this.WantToKeepArmyFitness.Boost(0.9f, "Enemy roaming in the region.", new object[0]);
        }
    }
Ejemplo n.º 6
0
    private List <Kaiju> GetFilterKaijuTargets(bool includeTamedKaijus)
    {
        List <Kaiju> list    = new List <Kaiju>();
        IGameService service = Services.GetService <IGameService>();

        Diagnostics.Assert(service != null);
        foreach (global::Empire empire in (service.Game as global::Game).Empires)
        {
            if (empire is KaijuEmpire)
            {
                KaijuEmpire kaijuEmpire = empire as KaijuEmpire;
                if (kaijuEmpire != null && kaijuEmpire.Region != null)
                {
                    KaijuCouncil agency = kaijuEmpire.GetAgency <KaijuCouncil>();
                    if (agency != null && agency.Kaiju != null)
                    {
                        list.Add(agency.Kaiju);
                    }
                }
            }
            else if (includeTamedKaijus && empire is MajorEmpire && empire.Index != base.AIEntity.Empire.Index)
            {
                MajorEmpire majorEmpire = empire as MajorEmpire;
                foreach (Kaiju item in majorEmpire.TamedKaijus)
                {
                    if (!this.departmentOfForeignAffairs.IsFriend(majorEmpire))
                    {
                        list.Add(item);
                    }
                }
            }
        }
        return(list);
    }
Ejemplo n.º 7
0
    public void AddConvertVillageOnLoad(Village village, MajorEmpire converter)
    {
        if (converter == null)
        {
            throw new ArgumentNullException("converter");
        }
        SimulationDescriptor value = this.SimulationDescriptorDatabase.GetValue(BarbarianCouncil.VillageStatusConverted);

        village.SwapDescriptor(value);
        if (!village.HasBeenConverted)
        {
            if (village.HasBeenPacified)
            {
                village.HasBeenPacified = false;
            }
            SimulationDescriptor value2 = this.SimulationDescriptorDatabase.GetValue(Village.ConvertedVillage);
            if (value2 != null)
            {
                Diagnostics.Assert(village.PointOfInterest != null);
                village.PointOfInterest.SwapDescriptor(value2);
                village.SwapDescriptor(value2);
            }
            village.Converter = converter;
            if (village.Converter.ConvertedVillages != null && village.Converter.ConvertedVillages.Contains(village))
            {
                village.Converter.AddChild(village);
            }
            DepartmentOfTheInterior.GenerateFIMSEForConvertedVillage(village.Converter, village.PointOfInterest);
        }
    }
Ejemplo n.º 8
0
    public static ConstructionCost[] GetConvertionCost(MajorEmpire majorEmpire, Village village)
    {
        Diagnostics.Assert(majorEmpire != null);
        Diagnostics.Assert(village.PointOfInterest != null);
        float num;

        if (village.PointOfInterest.PointOfInterestImprovement == null)
        {
            num = village.GetPropertyValue(SimulationProperties.ConvertDestructedCost);
        }
        else if (!village.Region.IsRegionColonized() || village.Region.Owner == majorEmpire || village.Region.Owner == null || !(village.Region.Owner is MajorEmpire))
        {
            num = village.GetPropertyValue(SimulationProperties.ConvertNeutralCost);
        }
        else
        {
            num = village.GetPropertyValue(SimulationProperties.ConvertHostileCost);
        }
        num += num * (float)majorEmpire.ConvertedVillages.Count;
        float propertyValue = majorEmpire.GetPropertyValue(SimulationProperties.ConvertVillageMultiplier);

        if (propertyValue > 0f)
        {
            num *= propertyValue;
        }
        return(new ConstructionCost[]
        {
            new ConstructionCost(DepartmentOfTheTreasury.Resources.EmpirePoint, (float)Math.Floor((double)num), true, false)
        });
    }
Ejemplo n.º 9
0
    private void OnVisibityRefreshed(object sender, VisibilityRefreshedEventArgs args)
    {
        MajorEmpire majorEmpire = args.Empire as MajorEmpire;

        if (majorEmpire == null)
        {
            return;
        }
        DepartmentOfScience agency = majorEmpire.GetAgency <DepartmentOfScience>();

        for (int i = 0; i < this.majorEmpires.Length; i++)
        {
            global::Empire empire = this.majorEmpires[i];
            if (majorEmpire.Index != empire.Index)
            {
                WorldPosition worldPosition = this.CheckMetting(majorEmpire, empire);
                if (worldPosition != WorldPosition.Invalid)
                {
                    WorldPosition worldPosition2 = this.CheckMetting(empire, majorEmpire);
                    if (worldPosition2 != WorldPosition.Invalid)
                    {
                        this.OnEmpireSymetricDiscovery(majorEmpire, empire, worldPosition, worldPosition2);
                    }
                    else if (agency.GetTechnologyState(this.technologyDefinitionDrakkenVisionDuringFirstTurn) == DepartmentOfScience.ConstructibleElement.State.Researched)
                    {
                        this.OnEmpireAsymetricDiscovery(majorEmpire, empire, worldPosition);
                    }
                }
            }
        }
    }
Ejemplo n.º 10
0
    private void RefreshLineOfSight(IVisibilityArea visibilityArea, int needRefreshBits)
    {
        MajorEmpire majorEmpire = visibilityArea.Empire as MajorEmpire;

        if (majorEmpire == null)
        {
            if (visibilityArea.VisibilityDirty && visibilityArea.Empire != null)
            {
                visibilityArea.VisibilityDirty = false;
            }
            return;
        }
        if ((needRefreshBits & majorEmpire.Bits) != majorEmpire.Bits)
        {
            return;
        }
        visibilityArea.VisibilityDirty = false;
        foreach (WorldPosition worldPosition in visibilityArea.VisibleWorldPositions)
        {
            if (worldPosition.IsValid && worldPosition.Row < this.world.WorldParameters.Rows && worldPosition.Column < this.world.WorldParameters.Columns)
            {
                this.SetWorldPositionAsVisible(worldPosition, majorEmpire, 0, visibilityArea.VisibilityAccessibilityLevel);
                if (ELCPUtilities.SpectatorMode)
                {
                    foreach (int num in ELCPUtilities.EliminatedEmpireIndices)
                    {
                        this.SetWorldPositionAsVisible(worldPosition, base.Game.Empires[num], 0, visibilityArea.VisibilityAccessibilityLevel);
                    }
                }
            }
        }
    }
Ejemplo n.º 11
0
    public WorldPosition GetRandomValidArmyPosition(Village village)
    {
        WorldOrientation orientation = (WorldOrientation)this.random.Next(0, 6);
        WorldPosition    result      = WorldPosition.Invalid;

        for (int i = 0; i < 6; i++)
        {
            WorldOrientation direction  = orientation.Rotate(i);
            WorldPosition    neighbourg = this.worldPositionningService.GetNeighbourTile(village.WorldPosition, direction, 1);
            int regionIndex             = (int)this.worldPositionningService.GetRegionIndex(neighbourg);
            if (regionIndex == village.Region.Index)
            {
                if (DepartmentOfDefense.CheckWhetherTargetPositionIsValidForUseAsArmySpawnLocation(neighbourg, PathfindingMovementCapacity.Ground | PathfindingMovementCapacity.Water))
                {
                    global::Empire[] empires = (this.GameService.Game as global::Game).Empires;
                    int j = 0;
                    while (j < empires.Length)
                    {
                        global::Empire empire = empires[j];
                        if (!(empire is KaijuEmpire))
                        {
                            goto IL_106;
                        }
                        KaijuEmpire kaijuEmpire = empire as KaijuEmpire;
                        if (kaijuEmpire == null)
                        {
                            goto IL_106;
                        }
                        KaijuCouncil agency = kaijuEmpire.GetAgency <KaijuCouncil>();
                        if (agency == null || agency.Kaiju == null || !(agency.Kaiju.WorldPosition == neighbourg))
                        {
                            goto IL_106;
                        }
IL_145:
                        j++;
                        continue;
IL_106:
                        if (!(empire is MajorEmpire))
                        {
                            goto IL_145;
                        }
                        MajorEmpire majorEmpire = empire as MajorEmpire;
                        if (majorEmpire == null || majorEmpire.TamedKaijus.Any((Kaiju m) => m.WorldPosition == neighbourg))
                        {
                            goto IL_145;
                        }
                        goto IL_145;
                    }
                    District district = this.worldPositionningService.GetDistrict(neighbourg);
                    if (district == null || !District.IsACityTile(district))
                    {
                        result = neighbourg;
                        break;
                    }
                }
            }
        }
        return(result);
    }
Ejemplo n.º 12
0
    private void CreateEmpireFilters(List <global::Empire> empiresToSelect = null)
    {
        if (empiresToSelect != null && empiresToSelect.Count == 1 && empiresToSelect[0] == base.Empire)
        {
            empiresToSelect.Clear();
        }
        this.empireToFilter.Clear();
        DepartmentOfIntelligence agency = base.Empire.GetAgency <DepartmentOfIntelligence>();
        bool         flag = DepartmentOfTheInterior.CanSeeAllExchangeTransactions(base.Empire);
        global::Game game = base.Game as global::Game;

        for (int i = 0; i < game.Empires.Length; i++)
        {
            MajorEmpire majorEmpire = game.Empires[i] as MajorEmpire;
            if (majorEmpire != null)
            {
                if (base.Empire.Index == majorEmpire.Index)
                {
                    this.empireToFilter.Add(majorEmpire);
                }
                else if (!majorEmpire.IsEliminated)
                {
                    DepartmentOfScience agency2 = majorEmpire.GetAgency <DepartmentOfScience>();
                    if (agency2.CanTradeHeroes(true) || agency2.CanTradeUnits(true) || agency2.CanTradeResourcesAndBoosters(true))
                    {
                        if (flag)
                        {
                            this.empireToFilter.Add(majorEmpire);
                        }
                        else if (agency != null && agency.IsEmpireInfiltrated(majorEmpire))
                        {
                            this.empireToFilter.Add(majorEmpire);
                        }
                    }
                }
            }
        }
        this.empireFilterWidth = Mathf.Floor((this.EmpireFiltersContainer.Width - this.EmpireFiltersContainer.HorizontalSpacing * (float)(this.empireToFilter.Count - 1)) / (float)this.empireToFilter.Count);
        this.EmpireFiltersContainer.ReserveChildren(this.empireToFilter.Count, this.EmpireFilterPrefab, "EmpireFilterToggle");
        this.EmpireFiltersContainer.RefreshChildrenIList <global::Empire>(this.empireToFilter, new AgeTransform.RefreshTableItem <global::Empire>(this.SetupEmpireFilterToggle), true, false);
        this.EmpireFiltersContainer.ArrangeChildren();
        if (empiresToSelect != null && empiresToSelect.Count > 0)
        {
            this.SetEmpiresToShow(empiresToSelect);
        }
        else
        {
            this.SetEmpiresToShow(this.empireToFilter);
        }
        AgeTooltip ageTooltip = this.EmpireFilterPrefab.GetComponent <AgeTransform>().AgeTooltip;

        if (ageTooltip != null)
        {
            ageTooltip.Content = "%MarketplaceEmpireFilterDescription";
        }
    }
Ejemplo n.º 13
0
    public override void RefreshContent()
    {
        base.RefreshContent();
        if (base.Empire == null)
        {
            return;
        }
        if (this.diplomaticRelationsViewport != null)
        {
            this.diplomaticRelationsViewport.Refresh();
        }
        float       num         = 0f;
        float       num2        = 1f;
        MajorEmpire majorEmpire = base.Empire as MajorEmpire;

        if (majorEmpire.VictoryConditionStatuses.ContainsKey("Diplomacy") && ELCPUtilities.UseELCPPeacePointRulseset)
        {
            this.DiplomaticScoreContainer.Visible = true;
            num = base.Empire.GetPropertyValue("EmpirePeacePointStock");
            float propertyValue  = base.Empire.GetPropertyValue("PeacePointBucketStock");
            float value          = Mathf.Min(propertyValue, base.Empire.GetPropertyValue("TreatyPeacePointPerTurn"));
            float propertyValue2 = base.Empire.GetPropertyValue("NetEmpirePeacePoint");
            this.DiplomaticScore.Text       = AgeLocalizer.Instance.LocalizeString("%ELCPDiplomacyScreenDiplomaticScoreFormat").Replace("$BucketValue", GuiFormater.FormatGui(propertyValue, false, false, false, 0));
            this.DiplomaticScore.Text       = this.DiplomaticScore.Text.Replace("$BucketNet", GuiFormater.FormatGui(value, false, false, false, 0));
            this.DiplomaticScore.Text       = this.DiplomaticScore.Text.Replace("$PPValue", GuiFormater.FormatGui(num, false, false, false, 0));
            this.DiplomaticScore.Text       = this.DiplomaticScore.Text.Replace("$PPNet", GuiFormater.FormatGui(propertyValue2, false, false, false, 0));
            this.DiplomaticScore.Alignement = AgeTextAnchor.LowerCenter;
            this.victoryService             = base.Game.Services.GetService <IVictoryManagementService>();
            foreach (VictoryCondition victoryCondition in this.victoryService.VictoryConditionsFilteredThisGame)
            {
                if (victoryCondition.Name == "Diplomacy")
                {
                    for (int i = 0; i < victoryCondition.Progression.Vars.Length; i++)
                    {
                        if (victoryCondition.Progression.Vars[i].Name == "TargetValue")
                        {
                            num2 = majorEmpire.VictoryConditionStatuses["Diplomacy"].Variables[i];
                        }
                    }
                    if (this.DiplomaticScoreContainer.AgeTooltip != null)
                    {
                        this.DiplomaticScoreContainer.AgeTooltip.Content = AgeLocalizer.Instance.LocalizeString("%VictoryConditionDiplomacyDescription").Replace("$TargetValue", GuiFormater.FormatGui(num2, false, false, false, 0));
                    }
                }
            }
            this.DiplomaticGauge.Visible             = false;
            this.DiplomaticGauge.GetParent().Visible = false;
            this.DiplomaticGauge.PercentRight        = Mathf.Clamp(100f * (num / num2), 0f, 100f);
            return;
        }
        this.DiplomaticScoreContainer.Visible = false;
    }
Ejemplo n.º 14
0
    public void SetContent(MajorEmpire majorEmpire)
    {
        this.MajorEmpire = majorEmpire;
        Diagnostics.Assert(this.MajorEmpire != null);
        this.GuiFaction = new GuiFaction(this.MajorEmpire.Faction);
        IGameService service = Services.GetService <IGameService>();
        IPlayerControllerRepositoryService service2 = service.Game.Services.GetService <IPlayerControllerRepositoryService>();

        this.ActivePlayerEmpire = (service2.ActivePlayerController.Empire as global::Empire);
        ISessionService service3 = Services.GetService <ISessionService>();

        this.Session = (service3.Session as global::Session);
        this.HighlightCircle.Visible = false;
    }
Ejemplo n.º 15
0
    public bool CheckAgainstQuestInitiatorFilter(QuestBehaviour questBehavior, GameEvent e, QuestInitiatorFilter questInitiatorFilter)
    {
        Diagnostics.Assert(questBehavior.Initiator is MajorEmpire);
        MajorEmpire majorEmpire  = e.Empire as MajorEmpire;
        MajorEmpire majorEmpire2 = questBehavior.Initiator as MajorEmpire;

        switch (questInitiatorFilter)
        {
        case QuestInitiatorFilter.AllEmpires:
            return(true);

        case QuestInitiatorFilter.Allies:
        {
            if (majorEmpire == null)
            {
                return(false);
            }
            bool bits  = majorEmpire.Bits != 0;
            int  bits2 = majorEmpire2.Bits;
            if (((bits ? 1 : 0) & bits2) != 0)
            {
                return(true);
            }
            break;
        }

        case QuestInitiatorFilter.Empire:
            if (e.Empire.Index == questBehavior.Initiator.Index)
            {
                return(true);
            }
            break;

        case QuestInitiatorFilter.Enemies:
            if (e.Empire.Index != questBehavior.Initiator.Index)
            {
                return(true);
            }
            break;

        case QuestInitiatorFilter.OtherEmpires:
            if (e.Empire.Index != questBehavior.Initiator.Index)
            {
                return(true);
            }
            break;
        }
        return(false);
    }
Ejemplo n.º 16
0
    public void NotifyVisibilityHasChanged(Empire empire)
    {
        if (empire == null)
        {
            throw new ArgumentNullException("empire");
        }
        MajorEmpire majorEmpire = empire as MajorEmpire;

        if (majorEmpire == null)
        {
            return;
        }
        this.NeedRefreshBits |= majorEmpire.Bits;
        this.OnVisibilityRefreshed(empire);
    }
Ejemplo n.º 17
0
    public bool IsWorldPositionExploredFor(WorldPosition worldPosition, Empire empire)
    {
        if (!worldPosition.IsValid)
        {
            return(false);
        }
        MajorEmpire majorEmpire = empire as MajorEmpire;

        if (majorEmpire == null)
        {
            return(true);
        }
        short value = this.explorationMap.GetValue(worldPosition);

        return(((int)value & majorEmpire.Bits) == majorEmpire.Bits);
    }
Ejemplo n.º 18
0
    private float GetAttitudeValue(StaticString modifierName, AIHeuristicAnalyser.Context debugContext)
    {
        float        num     = 0f;
        IGameService service = Services.GetService <IGameService>();
        global::Game game    = service.Game as global::Game;

        for (int i = 0; i < game.Empires.Length; i++)
        {
            MajorEmpire majorEmpire = game.Empires[i] as MajorEmpire;
            if (majorEmpire != null && majorEmpire.Index != base.AIEntity.Empire.Index)
            {
                AILayer_Attitude.Attitude attitude = this.aiLayerAttitude.GetAttitude(majorEmpire);
                num = Mathf.Max(num, attitude.Score.GetNormalizedScoreByName(modifierName));
            }
        }
        return(num);
    }
Ejemplo n.º 19
0
    private void PostOrderGetAIDiplomaticTermsEvaluation()
    {
        MajorEmpire majorEmpire  = this.selectedEmpire as MajorEmpire;
        MajorEmpire majorEmpire2 = base.Empire as MajorEmpire;

        if (majorEmpire == null || majorEmpire2 == null)
        {
            return;
        }
        List <DiplomaticTerm> list = new List <DiplomaticTerm>();

        DepartmentOfForeignAffairs.GetAllAvailableDiplomaticTerm(this.DiplomaticContract, base.Empire, this.SelectedEmpire, ref list);
        DepartmentOfForeignAffairs.GetAllAvailableDiplomaticTerm(this.DiplomaticContract, this.SelectedEmpire, base.Empire, ref list);
        OrderGetAIDiplomaticTermEvaluation order = new OrderGetAIDiplomaticTermEvaluation(majorEmpire, majorEmpire2, list.ToArray());
        Ticket ticket;

        base.PlayerController.PostOrder(order, out ticket, new EventHandler <TicketRaisedEventArgs>(this.OnPostOrderGetAIDiplomaticTermsEvaluationResponse));
    }
 private void CheckForEliminations(IVictoryManagementService victoryManagementService)
 {
     foreach (Empire empire in base.GameServer.Game.Empires)
     {
         MajorEmpire majorEmpire = empire as MajorEmpire;
         if (majorEmpire == null)
         {
             break;
         }
         if (majorEmpire.SimulationObject.Tags.Contains(Empire.TagEmpireEliminated))
         {
             foreach (Empire empire2 in base.GameServer.Game.Empires)
             {
                 empire2.OnEmpireEliminated(majorEmpire, true);
             }
         }
     }
 }
Ejemplo n.º 21
0
 public void MajorEmpireTameKaiju(MajorEmpire owner, bool clearMilitias = false)
 {
     if (owner == null)
     {
         throw new ArgumentNullException("Empire trying to tame Kaiju is null");
     }
     if (clearMilitias)
     {
         this.Kaiju.ClearMilitias();
     }
     this.departmentOfDefense.RemoveArmy(this.Kaiju.KaijuArmy, false);
     this.Kaiju.SetOwner(owner);
     owner.AddTamedKaiju(this.Kaiju);
     this.Kaiju.ChangeToTamedState(owner);
     this.KaijuEmpire.RemoveKaiju(this.Kaiju);
     this.KaijuEmpire.Refresh(false);
     this.Kaiju = null;
 }
Ejemplo n.º 22
0
 public bool TryGetMajorEmpireAIPlayer(MajorEmpire majorEmpire, out AIPlayer_MajorEmpire aiPlayerMajorEmpire)
 {
     if (majorEmpire == null)
     {
         throw new ArgumentNullException("majorEmpire");
     }
     aiPlayerMajorEmpire = null;
     Diagnostics.Assert(this.aiPlayerMajorEmpires != null);
     for (int i = 0; i < this.aiPlayerMajorEmpires.Count; i++)
     {
         AIPlayer_MajorEmpire aiplayer_MajorEmpire = this.aiPlayerMajorEmpires[i];
         Diagnostics.Assert(aiplayer_MajorEmpire != null && aiplayer_MajorEmpire.MajorEmpire != null);
         if (aiplayer_MajorEmpire.MajorEmpire.Index == majorEmpire.Index)
         {
             aiPlayerMajorEmpire = aiplayer_MajorEmpire;
             return(true);
         }
     }
     return(false);
 }
Ejemplo n.º 23
0
    public void ConvertVillage(Village village, MajorEmpire converter)
    {
        if (converter == null)
        {
            throw new ArgumentNullException("converter");
        }
        SimulationDescriptor value = this.SimulationDescriptorDatabase.GetValue(BarbarianCouncil.VillageStatusConverted);

        village.SwapDescriptor(value);
        if (!village.HasBeenConverted)
        {
            if (village.HasBeenPacified)
            {
                village.HasBeenPacified = false;
            }
            SimulationDescriptor value2 = this.SimulationDescriptorDatabase.GetValue(Village.ConvertedVillage);
            if (value2 != null)
            {
                Diagnostics.Assert(village.PointOfInterest != null);
                village.PointOfInterest.SwapDescriptor(value2);
                village.SwapDescriptor(value2);
            }
            for (int i = village.StandardUnits.Count - 1; i >= 0; i--)
            {
                Unit unit = village.StandardUnits[i];
                this.GameEntityRepositoryService.Unregister(unit);
                village.RemoveUnit(unit);
                unit.Dispose();
            }
            village.Converter = converter;
            village.ConvertedUnitSpawnTurn = (this.GameService.Game as global::Game).Turn + village.GetConvertedUnitProductionTimer();
            EventVillageConverted eventToNotify = new EventVillageConverted(converter, village);
            this.EventService.Notify(eventToNotify);
            if (village.Converter.ConvertedVillages != null)
            {
                Diagnostics.Assert(!village.Converter.ConvertedVillages.Contains(village));
                village.Converter.AddConvertedVillage(village);
            }
            DepartmentOfTheInterior.GenerateFIMSEForConvertedVillage(village.Converter, village.PointOfInterest);
        }
    }
Ejemplo n.º 24
0
    public static string FormatDiplomaticInteraction(string interactionType, MajorEmpire empire)
    {
        string text = "%DiplomaticInteraction" + interactionType;
        ILocalizationService service = Services.GetService <ILocalizationService>();
        string text2 = empire.Faction.Affinity.Name.ToString();

        if (text2.StartsWith("Affinity") && text2.Length > 8)
        {
            text2 = text2.Substring(8);
        }
        string text3 = service.Localize(text + "_" + text2);

        if (string.IsNullOrEmpty(text3))
        {
            text3 = service.Localize(text);
            if (string.IsNullOrEmpty(text3))
            {
                text3 = text;
            }
        }
        return(text3);
    }
Ejemplo n.º 25
0
    public bool IsWorldPositionDetectedFor(WorldPosition worldPosition, Empire empire)
    {
        if (!this.EnableDetection)
        {
            return(false);
        }
        if (!worldPosition.IsValid)
        {
            return(false);
        }
        MajorEmpire majorEmpire = empire as MajorEmpire;

        if (majorEmpire == null)
        {
            return(true);
        }
        short num = 0;

        num |= this.publicDetectionMap.GetValue(worldPosition);
        num |= this.privateDetectionMap.GetValue(worldPosition);
        return(((int)num & majorEmpire.Bits) != 0);
    }
Ejemplo n.º 26
0
    public void RemoveOwner(int instigatorEmpireIndex = -1)
    {
        MajorEmpire majorEmpire = this.MajorEmpire;

        if (majorEmpire != null)
        {
            int takenFromEmpire = this.PreviousOwnerIndex;
            this.previousOwnerIndex = majorEmpire.Index;
            majorEmpire.RemoveTamedKaiju(this);
            this.ReleaseKaijuArmyActions();
            this.MajorEmpire          = null;
            this.KaijuArmy.Empire     = this.KaijuEmpire;
            this.KaijuGarrison.Empire = this.KaijuEmpire;
            EventKaijuLost.KaijuLostReason kaijuLostReason = EventKaijuLost.KaijuLostReason.FREE;
            if (instigatorEmpireIndex != -1)
            {
                kaijuLostReason           = EventKaijuLost.KaijuLostReason.STUN;
                this.previousStunnerIndex = instigatorEmpireIndex;
                this.previousStunnedTurn  = (this.GameService.Game as global::Game).Turn;
            }
            this.EventService.Notify(new EventKaijuLost(majorEmpire, this, instigatorEmpireIndex, kaijuLostReason, takenFromEmpire));
        }
    }
Ejemplo n.º 27
0
    void IVictoryManagementService.CheckForAlerts(int turn)
    {
        if (turn < 0 || this.HasAlreadyWon)
        {
            return;
        }
        Diagnostics.Assert(this.InterpreterContext != null);
        Snapshot snapshot = null;
        IGameStatisticsManagementService service = Services.GetService <IGameStatisticsManagementService>();

        if (service != null && service.Snapshot != null)
        {
            string name = string.Format("Turn #{0}", turn);
            if (!service.Snapshot.TryGetSnapshot(name, out snapshot))
            {
                Diagnostics.LogWarning("Skipping check because snapshot is missing (turn: {0}).", new object[]
                {
                    turn
                });
                return;
            }
            if (snapshot != null)
            {
                foreach (KeyValuePair <string, float> keyValuePair in snapshot.KeyValuePairs)
                {
                    this.InterpreterContext.Register(keyValuePair.Key, keyValuePair.Value);
                }
            }
        }
        Diagnostics.Assert(base.Game != null);
        this.InterpreterContext.Register("Turn", base.Game.Turn);
        int num  = 0;
        int num2 = 0;
        int num3 = 0;
        int num4 = 0;
        int num5 = 0;

        for (int i = 0; i < base.Game.Empires.Length; i++)
        {
            MajorEmpire majorEmpire = base.Game.Empires[i] as MajorEmpire;
            if (majorEmpire == null)
            {
                break;
            }
            num++;
            num3++;
            if (majorEmpire.SimulationObject.Tags.Contains(Empire.TagEmpireEliminated))
            {
                num2++;
                num3--;
            }
            else
            {
                for (int j = 0; j < this.simulationPathNumberOfMainCities.Length; j++)
                {
                    num4 += (int)this.simulationPathNumberOfMainCities[j].CountValidatedObjects(majorEmpire);
                }
                DepartmentOfTheInterior agency = majorEmpire.GetAgency <DepartmentOfTheInterior>();
                if (agency != null)
                {
                    num5 += agency.Cities.Count;
                }
            }
        }
        this.InterpreterContext.Register("NumberOfMajorEmpires", num);
        this.InterpreterContext.Register("NumberOfMajorEmpiresEliminated", num2);
        this.InterpreterContext.Register("NumberOfMajorEmpiresLeft", num3);
        this.InterpreterContext.Register("NumberOfMainCitiesLeft", num4);
        this.InterpreterContext.Register("NumberOfCitiesLeft", num5);
        for (int k = 0; k < base.Game.Empires.Length; k++)
        {
            MajorEmpire majorEmpire2 = base.Game.Empires[k] as MajorEmpire;
            if (majorEmpire2 == null)
            {
                break;
            }
            if (snapshot != null)
            {
                Snapshot snapshot2 = snapshot.TakeSnapshot(majorEmpire2.Name);
                if (snapshot2 != null)
                {
                    foreach (KeyValuePair <string, float> keyValuePair2 in snapshot2.KeyValuePairs)
                    {
                        this.InterpreterContext.Register(keyValuePair2.Key, keyValuePair2.Value);
                    }
                }
            }
            try
            {
                int num6 = 0;
                for (int l = 0; l < this.simulationPathNumberOfMainCities.Length; l++)
                {
                    num6 += (int)this.simulationPathNumberOfMainCities[l].CountValidatedObjects(majorEmpire2);
                }
                this.InterpreterContext.Register("NumberOfMainCities", num6);
                this.InterpreterContext.Register("VictoryWonderProgress", this.GetWonderProgress(majorEmpire2));
                majorEmpire2.SimulationObject.AddChild(this.InterpreterContext.SimulationObject);
                foreach (VictoryCondition victoryCondition in this.VictoryConditionsFilteredThisGame)
                {
                    if (majorEmpire2.VictoryConditionStatuses != null)
                    {
                        MajorEmpire.VictoryConditionStatus victoryConditionStatus;
                        if (!majorEmpire2.VictoryConditionStatuses.TryGetValue(victoryCondition.Name, out victoryConditionStatus))
                        {
                            victoryConditionStatus = new MajorEmpire.VictoryConditionStatus();
                            majorEmpire2.VictoryConditionStatuses.Add(victoryCondition.Name, victoryConditionStatus);
                        }
                        if (victoryCondition.Alerts != null)
                        {
                            if (victoryConditionStatus.LastTurnWhenAlertWasTriggered == null || victoryConditionStatus.LastTurnWhenAlertWasTriggered.Length != victoryCondition.Alerts.Length)
                            {
                                victoryConditionStatus.LastTurnWhenAlertWasTriggered = new int[victoryCondition.Alerts.Length];
                            }
                            for (int m = 0; m < victoryCondition.Alerts.Length; m++)
                            {
                                VictoryCondition.Alert alert = victoryCondition.Alerts[m];
                                if (alert != null && (victoryConditionStatus.LastTurnWhenAlertWasTriggered[m] == 0 || (victoryConditionStatus.LastTurnWhenAlertWasTriggered[m] < 0 && alert.Repeat)))
                                {
                                    if (alert.Evaluate(this.InterpreterContext))
                                    {
                                        victoryConditionStatus.LastTurnWhenAlertWasTriggered[m] = base.Game.Turn;
                                    }
                                    else if (victoryConditionStatus.LastTurnWhenAlertWasTriggered[m] > 0)
                                    {
                                        victoryConditionStatus.LastTurnWhenAlertWasTriggered[m] = -victoryConditionStatus.LastTurnWhenAlertWasTriggered[m];
                                    }
                                }
                            }
                        }
                        if (victoryCondition.Progression != null)
                        {
                            if (victoryConditionStatus.Variables == null || victoryConditionStatus.Variables.Length != victoryCondition.Progression.Vars.Length)
                            {
                                victoryConditionStatus.Variables = new float[victoryCondition.Progression.Vars.Length];
                            }
                            for (int n = 0; n < victoryCondition.Progression.Vars.Length; n++)
                            {
                                victoryConditionStatus.Variables[n] = victoryCondition.Progression.Vars[n].Evaluate(this.InterpreterContext);
                            }
                        }
                    }
                }
            }
            catch
            {
            }
            finally
            {
                majorEmpire2.SimulationObject.RemoveChild(this.InterpreterContext.SimulationObject);
            }
        }
        for (int num7 = 0; num7 < base.Game.Empires.Length; num7++)
        {
            MajorEmpire majorEmpire3 = base.Game.Empires[num7] as MajorEmpire;
            if (majorEmpire3 == null)
            {
                break;
            }
            foreach (VictoryCondition victoryCondition2 in this.VictoryConditionsFilteredThisGame)
            {
                MajorEmpire.VictoryConditionStatus victoryConditionStatus2;
                if (victoryCondition2.Alerts != null && majorEmpire3.VictoryConditionStatuses != null && majorEmpire3.VictoryConditionStatuses.TryGetValue(victoryCondition2.Name, out victoryConditionStatus2))
                {
                    for (int num8 = 0; num8 < victoryCondition2.Alerts.Length; num8++)
                    {
                        if (victoryConditionStatus2.LastTurnWhenAlertWasTriggered != null && num8 < victoryConditionStatus2.LastTurnWhenAlertWasTriggered.Length && victoryConditionStatus2.LastTurnWhenAlertWasTriggered[num8] >= base.Game.Turn && victoryCondition2.Alerts[num8] != null)
                        {
                            EventVictoryConditionAlert eventToNotify = new EventVictoryConditionAlert(majorEmpire3, victoryCondition2, victoryConditionStatus2, num8);
                            this.EventService.Notify(eventToNotify);
                        }
                    }
                }
            }
        }
    }
Ejemplo n.º 28
0
    void IVictoryManagementService.CheckForVictoryConditions(int turn)
    {
        if (turn <= this.TurnWhenVictoryConditionsWereLastChecked)
        {
            Diagnostics.Log("Skipping check because victory conditions have already been already checked for (turn: {0}, last checked: {1}).", new object[]
            {
                turn,
                this.TurnWhenVictoryConditionsWereLastChecked
            });
            return;
        }
        this.TurnWhenVictoryConditionsWereLastChecked = turn;
        this.VictoryConditionsRaisedThisTurn.Clear();
        Diagnostics.Assert(this.InterpreterContext != null);
        Snapshot snapshot = null;
        IGameStatisticsManagementService service = Services.GetService <IGameStatisticsManagementService>();

        if (service != null && service.Snapshot != null)
        {
            string name = string.Format("Turn #{0}", turn);
            if (!service.Snapshot.TryGetSnapshot(name, out snapshot))
            {
                Diagnostics.LogWarning("Skipping check because snapshot is missing (turn: {0}, last checked: {1}).", new object[]
                {
                    turn,
                    this.TurnWhenVictoryConditionsWereLastChecked
                });
                return;
            }
            if (snapshot != null)
            {
                foreach (KeyValuePair <string, float> keyValuePair in snapshot.KeyValuePairs)
                {
                    this.InterpreterContext.Register(keyValuePair.Key, keyValuePair.Value);
                }
            }
        }
        Diagnostics.Assert(base.Game != null);
        this.InterpreterContext.Register("Turn", base.Game.Turn);
        int num  = 0;
        int num2 = 0;
        int num3 = 0;
        int num4 = 0;
        int num5 = 0;

        for (int i = 0; i < base.Game.Empires.Length; i++)
        {
            MajorEmpire majorEmpire = base.Game.Empires[i] as MajorEmpire;
            if (majorEmpire == null)
            {
                break;
            }
            num++;
            num3++;
            if (majorEmpire.SimulationObject.Tags.Contains(Empire.TagEmpireEliminated))
            {
                num2++;
                num3--;
            }
            else
            {
                for (int j = 0; j < this.simulationPathNumberOfMainCities.Length; j++)
                {
                    num4 += (int)this.simulationPathNumberOfMainCities[j].CountValidatedObjects(majorEmpire);
                }
                DepartmentOfTheInterior agency = majorEmpire.GetAgency <DepartmentOfTheInterior>();
                if (agency != null)
                {
                    num5 += agency.Cities.Count;
                }
            }
        }
        this.InterpreterContext.Register("NumberOfMajorEmpires", num);
        this.InterpreterContext.Register("NumberOfMajorEmpiresEliminated", num2);
        this.InterpreterContext.Register("NumberOfMajorEmpiresLeft", num3);
        this.InterpreterContext.Register("NumberOfMainCitiesLeft", num4);
        this.InterpreterContext.Register("NumberOfCitiesLeft", num5);
        for (int k = 0; k < base.Game.Empires.Length; k++)
        {
            MajorEmpire majorEmpire2 = base.Game.Empires[k] as MajorEmpire;
            if (majorEmpire2 == null)
            {
                break;
            }
            if (snapshot != null)
            {
                Snapshot snapshot2 = snapshot.TakeSnapshot(majorEmpire2.Name);
                if (snapshot2 != null)
                {
                    foreach (KeyValuePair <string, float> keyValuePair2 in snapshot2.KeyValuePairs)
                    {
                        this.InterpreterContext.Register(keyValuePair2.Key, keyValuePair2.Value);
                    }
                }
            }
            try
            {
                int num6 = 0;
                for (int l = 0; l < this.simulationPathNumberOfMainCities.Length; l++)
                {
                    num6 += (int)this.simulationPathNumberOfMainCities[l].CountValidatedObjects(majorEmpire2);
                }
                this.InterpreterContext.Register("NumberOfMainCities", num6);
                majorEmpire2.SimulationObject.AddChild(this.InterpreterContext.SimulationObject);
                bool             flag             = false;
                VictoryCondition victoryCondition = null;
                foreach (VictoryCondition victoryCondition2 in this.VictoryConditionsFilteredThisGame)
                {
                    if (victoryCondition2.Evaluate(new object[]
                    {
                        this.InterpreterContext
                    }))
                    {
                        if (victoryCondition2.Name == "Shared")
                        {
                            victoryCondition = victoryCondition2;
                        }
                        else if (!majorEmpire2.SimulationObject.Tags.Contains(Empire.TagEmpireEliminated))
                        {
                            this.OnVictoryConditionRaised(new VictoryConditionRaisedEventArgs(victoryCondition2, majorEmpire2));
                            flag = true;
                        }
                    }
                }
                if (victoryCondition != null && flag)
                {
                    DepartmentOfForeignAffairs agency2 = majorEmpire2.GetAgency <DepartmentOfForeignAffairs>();
                    if (agency2 != null && agency2.DiplomaticRelations != null)
                    {
                        foreach (Empire empire in base.Game.Empires)
                        {
                            if (empire != majorEmpire2)
                            {
                                DiplomaticRelation diplomaticRelation = agency2.GetDiplomaticRelation(empire);
                                if (diplomaticRelation != null && diplomaticRelation.State != null && diplomaticRelation.State.Name == DiplomaticRelationState.Names.Alliance)
                                {
                                    this.OnVictoryConditionRaised(new VictoryConditionRaisedEventArgs(victoryCondition, empire));
                                }
                            }
                        }
                    }
                }
            }
            catch
            {
            }
            finally
            {
                majorEmpire2.SimulationObject.RemoveChild(this.InterpreterContext.SimulationObject);
            }
        }
    }
Ejemplo n.º 29
0
    public static EmpireInfo Read(Amplitude.Unity.Session.Session session, int empireIndex)
    {
        if (session == null)
        {
            throw new ArgumentNullException("session");
        }
        if (empireIndex < 0)
        {
            throw new IndexOutOfRangeException("Empire index must be a positive integer.");
        }
        if (empireIndex == 0)
        {
            try
            {
                string lobbyData = session.GetLobbyData <string>(EmpireInfo.EmpireInfoAccessibility, null);
                EmpireInfo.LastAccessibilityLevel = (EmpireInfo.Accessibility)((int)Enum.Parse(typeof(EmpireInfo.Accessibility), lobbyData));
            }
            catch
            {
                EmpireInfo.LastAccessibilityLevel = EmpireInfo.Accessibility.Default;
            }
        }
        string x          = string.Format("Empire{0}", empireIndex);
        string lobbyData2 = session.GetLobbyData <string>(x, null);

        if (string.IsNullOrEmpty(lobbyData2))
        {
            return(null);
        }
        string     x2         = string.Format("Faction{0}", empireIndex);
        string     x3         = string.Format("Color{0}", empireIndex);
        string     lobbyData3 = session.GetLobbyData <string>(x2, null);
        string     lobbyData4 = session.GetLobbyData <string>(x3, null);
        EmpireInfo empireInfo = new EmpireInfo();

        empireInfo.EmpireIndex  = empireIndex;
        empireInfo.EmpireName   = "Empire#" + empireIndex;
        empireInfo.Faction      = Faction.Decode(lobbyData3);
        empireInfo.FactionColor = Color.white;
        empireInfo.Players      = lobbyData2;
        string value = Amplitude.Unity.Framework.Application.Registry.GetValue <string>("Settings/UI/EmpireColorPalette", "Standard");
        IDatabase <Palette> database = Databases.GetDatabase <Palette>(false);
        Palette             palette;

        if (database != null && database.TryGetValue(value, out palette))
        {
            if (palette.Colors == null || palette.Colors.Length == 0)
            {
                Diagnostics.LogError("Invalid color palette (name: '{0}').", new object[]
                {
                    value
                });
            }
            else
            {
                try
                {
                    int num = int.Parse(lobbyData4);
                    empireInfo.FactionColor = palette.Colors[num];
                }
                catch
                {
                    Diagnostics.LogError("Failed to retrieve faction color from palette (palette name: '{0}', color index: '{1}').", new object[]
                    {
                        value,
                        lobbyData4
                    });
                }
            }
        }
        string lobbyData5 = session.GetLobbyData <string>(VictoryCondition.ReadOnlyVictory, null);

        if (!string.IsNullOrEmpty(lobbyData5))
        {
            IDatabase <VictoryCondition> database2 = Databases.GetDatabase <VictoryCondition>(false);
            if (database2 != null)
            {
                char[] separator = new char[]
                {
                    '&'
                };
                string[] array = lobbyData5.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                if (array.Length != 0)
                {
                    List <VictoryCondition> list = new List <VictoryCondition>();
                    string[] array2 = array;
                    for (int i = 0; i < array2.Length; i++)
                    {
                        string[] array3 = array2[i].Split(Amplitude.String.Separators, StringSplitOptions.RemoveEmptyEntries);
                        int      j      = 1;
                        while (j < array3.Length)
                        {
                            int num2;
                            if (int.TryParse(array3[j], out num2) && num2 == empireIndex)
                            {
                                VictoryCondition item;
                                if (database2.TryGetValue(array3[0], out item))
                                {
                                    list.Add(item);
                                    break;
                                }
                                break;
                            }
                            else
                            {
                                j++;
                            }
                        }
                    }
                    empireInfo.VictoryConditions = list.ToArray();
                }
            }
            else
            {
                Diagnostics.LogError("Unable to retrieve the database of victory conditions.");
            }
        }
        ILocalizationService service = Services.GetService <ILocalizationService>();

        empireInfo.LocalizedName = string.Empty;
        string[] array4 = lobbyData2.Split(Amplitude.String.Separators, StringSplitOptions.RemoveEmptyEntries);
        for (int k = 0; k < array4.Length; k++)
        {
            if (service != null)
            {
                if (array4[k].StartsWith("AI"))
                {
                    if (empireInfo.Faction.Name == "FactionELCPSpectator")
                    {
                        empireInfo.LocalizedName = AgeLocalizer.Instance.LocalizeString("%NotificationEncounterParticipationModeSpectatorTitle");
                    }
                    else
                    {
                        empireInfo.LocalizedName = MajorEmpire.GenerateAIName(empireInfo.Faction.Affinity.Name, empireInfo.EmpireIndex);
                    }
                }
                else
                {
                    Steamworks.SteamID steamID  = new Steamworks.SteamID(Convert.ToUInt64(array4[k], 16));
                    string             newValue = AgeLocalizer.Instance.LocalizeString("%DefaultPlayerName");
                    if (Steamworks.SteamAPI.IsSteamRunning)
                    {
                        newValue = Steamworks.SteamAPI.SteamFriends.GetFriendPersonaName(steamID);
                    }
                    string     name        = (empireInfo.LocalizedName.Length != 0) ? "%EmpireNameFormatAdditionnalHuman" : "%EmpireNameFormatHuman";
                    EmpireInfo empireInfo2 = empireInfo;
                    empireInfo2.LocalizedName += service.Localize(name).ToString().Replace("$PlayerName", newValue);
                }
            }
        }
        empireInfo.IsActiveOrLocalPlayer  = false;
        empireInfo.EmpireEliminated       = false;
        empireInfo.EmpireExplorationBits  = 0;
        empireInfo.EmpireInfiltrationBits = 0;
        IGameService service2 = Services.GetService <IGameService>();

        if (service2 != null && service2.Game != null)
        {
            IPlayerControllerRepositoryService service3 = service2.Game.Services.GetService <IPlayerControllerRepositoryService>();
            if (service3 != null && service3.ActivePlayerController != null && service3.ActivePlayerController.Empire != null)
            {
                empireInfo.IsActiveOrLocalPlayer = (service3.ActivePlayerController.Empire.Index == empireIndex);
            }
            else
            {
                Steamworks.SteamUser steamUser = Steamworks.SteamAPI.SteamUser;
                if (steamUser != null)
                {
                    empireInfo.IsActiveOrLocalPlayer = empireInfo.Players.Contains(steamUser.SteamID.ToString());
                }
            }
            global::Game game = service2.Game as global::Game;
            if (game != null && game.Empires != null)
            {
                MajorEmpire majorEmpire = game.Empires[empireIndex] as MajorEmpire;
                if (majorEmpire.IsEliminated)
                {
                    empireInfo.EmpireEliminated = true;
                }
                empireInfo.AlliedIndexList = new List <int>();
                for (int l = 0; l < game.Empires.Length; l++)
                {
                    MajorEmpire majorEmpire2 = game.Empires[l] as MajorEmpire;
                    if (majorEmpire2 == null)
                    {
                        break;
                    }
                    if (majorEmpire2.Index == empireIndex)
                    {
                        empireInfo.EmpireExplorationBits  |= 1 << empireIndex;
                        empireInfo.EmpireInfiltrationBits |= 1 << empireIndex;
                    }
                    else
                    {
                        DepartmentOfForeignAffairs agency = majorEmpire2.GetAgency <DepartmentOfForeignAffairs>();
                        if (agency != null)
                        {
                            DiplomaticRelation diplomaticRelation = agency.GetDiplomaticRelation(majorEmpire);
                            if (diplomaticRelation != null && diplomaticRelation.State != null && diplomaticRelation.State.Name != DiplomaticRelationState.Names.Unknown)
                            {
                                empireInfo.EmpireExplorationBits |= 1 << majorEmpire2.Index;
                                if (diplomaticRelation.State.Name == DiplomaticRelationState.Names.Alliance)
                                {
                                    empireInfo.AlliedIndexList.Add(majorEmpire2.Index);
                                }
                            }
                        }
                        DepartmentOfIntelligence agency2 = majorEmpire2.GetAgency <DepartmentOfIntelligence>();
                        if (agency2 != null && agency2.IsEmpireInfiltrated(majorEmpire))
                        {
                            empireInfo.EmpireInfiltrationBits |= 1 << majorEmpire2.Index;
                        }
                    }
                }
            }
        }
        return(empireInfo);
    }
Ejemplo n.º 30
0
    public bool TryGetListOfTargetInRange(Army inputArmy, int targetEmpireIndex, bool addPointsOfInterest, int regionRestriction, ref List <IWorldPositionable> targetList)
    {
        if (targetList == null)
        {
            targetList = new List <IWorldPositionable>();
        }
        if (inputArmy == null || inputArmy.Empire == null)
        {
            return(false);
        }
        DepartmentOfForeignAffairs departmentOfForeignAffairs = null;
        bool flag  = inputArmy.Empire is MinorEmpire;
        bool flag2 = inputArmy.Empire is NavalEmpire;

        if (!flag && !flag2)
        {
            departmentOfForeignAffairs = inputArmy.Empire.GetAgency <DepartmentOfForeignAffairs>();
        }
        if (addPointsOfInterest)
        {
            for (int i = 0; i < this.World.Regions.Length; i++)
            {
                for (int j = 0; j < this.World.Regions[i].PointOfInterests.Length; j++)
                {
                    PointOfInterest pointOfInterest = this.World.Regions[i].PointOfInterests[j];
                    if (this.GetDistance(pointOfInterest.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == pointOfInterest.Region.Index))
                    {
                        targetList.Add(pointOfInterest);
                    }
                }
            }
        }
        IGameService service = Services.GetService <IGameService>();

        Diagnostics.Assert(service != null);
        global::Game game = service.Game as global::Game;

        for (int k = 0; k < game.Empires.Length; k++)
        {
            global::Empire empire = game.Empires[k];
            if (((!flag && !flag2) || empire is MajorEmpire) && (targetEmpireIndex == -1 || targetEmpireIndex == k))
            {
                DepartmentOfDefense agency = empire.GetAgency <DepartmentOfDefense>();
                if (agency != null)
                {
                    int l = 0;
                    while (l < agency.Armies.Count)
                    {
                        Army army = agency.Armies[l];
                        if (flag || flag2)
                        {
                            if (!army.IsPrivateers)
                            {
                                bool flag3 = false;
                                for (int m = 0; m < army.StandardUnits.Count; m++)
                                {
                                    if (army.StandardUnits[m].SimulationObject.Tags.Contains(WorldPositionning.FriendlyBannerDescriptor))
                                    {
                                        flag3 = true;
                                    }
                                }
                                if ((army.Hero == null || !army.Hero.IsSkillUnlocked(WorldPositionning.FriendlyBannerSkill)) && !flag3)
                                {
                                    int   distance      = this.GetDistance(army.WorldPosition, inputArmy.WorldPosition);
                                    float propertyValue = inputArmy.GetPropertyValue(SimulationProperties.DetectionRange);
                                    if (!army.IsCamouflaged)
                                    {
                                        goto IL_240;
                                    }
                                    if ((float)distance <= propertyValue)
                                    {
                                        goto IL_240;
                                    }
                                }
                            }
                        }
                        else if (army.Empire == inputArmy.Empire || !army.IsCamouflaged || this.VisibilityService.IsWorldPositionDetectedFor(army.WorldPosition, inputArmy.Empire))
                        {
                            goto IL_240;
                        }
IL_238:
                        l++;
                        continue;
IL_240:
                        if (this.GetDistance(army.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == (int)this.GetRegionIndex(army.WorldPosition)))
                        {
                            targetList.Add(army);
                            goto IL_238;
                        }
                        goto IL_238;
                    }
                }
                if (empire is MajorEmpire)
                {
                    DepartmentOfTheInterior agency2 = empire.GetAgency <DepartmentOfTheInterior>();
                    if (agency2 != null)
                    {
                        for (int n = 0; n < agency2.Cities.Count; n++)
                        {
                            City city = agency2.Cities[n];
                            if ((city.Empire == inputArmy.Empire || flag || flag2 || departmentOfForeignAffairs == null || departmentOfForeignAffairs.CanAttack(city)) && this.GetDistance(city.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == city.Region.Index))
                            {
                                targetList.Add(city);
                            }
                        }
                        for (int num = 0; num < agency2.Camps.Count; num++)
                        {
                            Camp camp = agency2.Camps[num];
                            if ((camp.Empire == inputArmy.Empire || flag || flag2 || departmentOfForeignAffairs == null || departmentOfForeignAffairs.CanAttack(camp)) && this.GetDistance(camp.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == camp.City.Region.Index))
                            {
                                targetList.Add(camp);
                            }
                        }
                    }
                    MajorEmpire majorEmpire = empire as MajorEmpire;
                    for (int num2 = 0; num2 < majorEmpire.ConvertedVillages.Count; num2++)
                    {
                        Village village = majorEmpire.ConvertedVillages[num2];
                        if ((flag || flag2 || departmentOfForeignAffairs == null || departmentOfForeignAffairs.CanAttack(village)) && this.GetDistance(village.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == village.Region.Index))
                        {
                            targetList.Add(village);
                        }
                    }
                }
                else if (empire is MinorEmpire)
                {
                    BarbarianCouncil agency3 = empire.GetAgency <BarbarianCouncil>();
                    if (agency3 != null)
                    {
                        for (int num3 = 0; num3 < agency3.Villages.Count; num3++)
                        {
                            Village village2 = agency3.Villages[num3];
                            if ((flag || flag2 || departmentOfForeignAffairs == null || departmentOfForeignAffairs.CanAttack(village2)) && this.GetDistance(village2.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == village2.Region.Index))
                            {
                                targetList.Add(village2);
                            }
                        }
                    }
                }
                else if (empire is NavalEmpire)
                {
                    PirateCouncil agency4 = empire.GetAgency <PirateCouncil>();
                    if (agency4 != null)
                    {
                        for (int num4 = 0; num4 < agency4.Fortresses.Count; num4++)
                        {
                            Fortress fortress = agency4.Fortresses[num4];
                            if ((flag || flag2 || departmentOfForeignAffairs == null || departmentOfForeignAffairs.CanAttack(fortress)) && this.GetDistance(fortress.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == fortress.Region.Index))
                            {
                                targetList.Add(fortress);
                            }
                        }
                    }
                }
            }
        }
        return(targetList.Count != 0);
    }