Exemple #1
0
 private bool IsKaijuValidForTame(Army army, Kaiju kaiju, ref List <StaticString> failureFlags, bool checkNearbyKaijus = true)
 {
     if (army == null || kaiju == null)
     {
         failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
         return(false);
     }
     if (checkNearbyKaijus && !this.IsKaijuNearby(kaiju, army))
     {
         failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
         return(false);
     }
     if (kaiju.IsTamed())
     {
         failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
         return(false);
     }
     if (kaiju.IsStunned())
     {
         failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
         return(false);
     }
     if (ELCPUtilities.UseELCPSymbiosisBuffs && !ELCPUtilities.CanELCPTameKaiju(kaiju, this.TameCost, army.Empire))
     {
         failureFlags.Add(ArmyAction.NoCanDoWhileCannotAffordCosts);
         return(false);
     }
     return(true);
 }
Exemple #2
0
    public void FillTargets(Army army, List <IGameEntity> gameEntities, ref List <StaticString> failureFlags)
    {
        if (army == null)
        {
            throw new ArgumentNullException("army");
        }
        IGameService service = Services.GetService <IGameService>();

        if (service == null)
        {
            return;
        }
        global::Game x = service.Game as global::Game;

        if (x == null)
        {
            return;
        }
        IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>();

        Diagnostics.Assert(service2 != null);
        for (int i = 0; i < 6; i++)
        {
            WorldPosition neighbourTile = service2.GetNeighbourTile(army.WorldPosition, (WorldOrientation)i, 1);
            Region        region        = service2.GetRegion(neighbourTile);
            if (region != null && region.Kaiju != null)
            {
                Kaiju kaiju = region.Kaiju;
                if (this.IsKaijuValidForTame(army, kaiju, ref failureFlags, true) && !gameEntities.Contains(kaiju))
                {
                    gameEntities.Add(kaiju);
                }
            }
            Army armyAtPosition = service2.GetArmyAtPosition(neighbourTile);
            if (armyAtPosition != null && armyAtPosition is KaijuArmy)
            {
                KaijuArmy kaijuArmy = armyAtPosition as KaijuArmy;
                if (kaijuArmy != null)
                {
                    Kaiju kaiju2 = kaijuArmy.Kaiju;
                    if (kaiju2 != null && kaiju2.OnArmyMode() && !kaiju2.IsStunned() && !gameEntities.Contains(kaiju2))
                    {
                        gameEntities.Add(kaijuArmy.Kaiju);
                    }
                }
            }
        }
    }
 protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters)
 {
     if (this.ticket != null)
     {
         if (!this.orderExecuted)
         {
             return(State.Running);
         }
         if (this.ticket.PostOrderResponse == PostOrderResponse.PreprocessHasFailed)
         {
             this.orderExecuted       = false;
             this.ticket              = null;
             aiBehaviorTree.ErrorCode = 1;
             return(State.Failure);
         }
         this.orderExecuted = false;
         this.ticket        = null;
         return(State.Success);
     }
     else
     {
         Army army;
         if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None)
         {
             return(State.Failure);
         }
         float propertyValue  = army.GetPropertyValue(SimulationProperties.MaximumNumberOfActionPoints);
         float propertyValue2 = army.GetPropertyValue(SimulationProperties.ActionPointsSpent);
         if (propertyValue <= propertyValue2)
         {
             aiBehaviorTree.ErrorCode = 33;
             return(State.Failure);
         }
         if (!aiBehaviorTree.Variables.ContainsKey(this.TargetVarName))
         {
             aiBehaviorTree.LogError("${0} not set", new object[]
             {
                 this.TargetVarName
             });
             return(State.Failure);
         }
         IGameEntity target = aiBehaviorTree.Variables[this.TargetVarName] as IGameEntity;
         if (!(target is IWorldPositionable))
         {
             return(State.Failure);
         }
         IGameService service = Services.GetService <IGameService>();
         Diagnostics.Assert(service != null);
         if (!service.Game.Services.GetService <IGameEntityRepositoryService>().Contains(target.GUID))
         {
             return(State.Success);
         }
         IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>();
         IEnumerable <Encounter>   service3 = service.Game.Services.GetService <IEncounterRepositoryService>();
         if (service3 != null && service3.Any((Encounter encounter) => encounter.IsGarrisonInEncounter(army.GUID, false) || encounter.IsGarrisonInEncounter(target.GUID, false)))
         {
             return(State.Running);
         }
         IGarrison garrison;
         if (target is Kaiju)
         {
             Kaiju kaiju = target as Kaiju;
             garrison = kaiju.GetActiveTroops();
             if (kaiju.IsStunned())
             {
                 return(State.Failure);
             }
         }
         else
         {
             if (target is KaijuArmy)
             {
                 KaijuArmy kaijuArmy = target as KaijuArmy;
                 if (kaijuArmy != null && kaijuArmy.Kaiju.IsStunned())
                 {
                     return(State.Failure);
                 }
             }
             else if (target is KaijuGarrison)
             {
                 KaijuGarrison kaijuGarrison = target as KaijuGarrison;
                 if (kaijuGarrison != null && kaijuGarrison.Kaiju.IsStunned())
                 {
                     return(State.Failure);
                 }
             }
             garrison = (target as IGarrison);
             if (garrison == null)
             {
                 return(State.Failure);
             }
         }
         if ((army.Empire is MinorEmpire || army.Empire is NavalEmpire) && garrison.Hero != null && garrison.Hero.IsSkillUnlocked("HeroSkillLeaderMap07"))
         {
             return(State.Failure);
         }
         if (garrison.Empire.Index == aiBehaviorTree.AICommander.Empire.Index)
         {
             return(State.Failure);
         }
         this.orderExecuted = false;
         GameEntityGUID guid = target.GUID;
         if (target is City)
         {
             Diagnostics.Assert(AIScheduler.Services != null);
             IEntityInfoAIHelper service4 = AIScheduler.Services.GetService <IEntityInfoAIHelper>();
             Diagnostics.Assert(service4 != null);
             City city = target as City;
             if (city.BesiegingEmpire != null && city.BesiegingEmpire != aiBehaviorTree.AICommander.Empire)
             {
                 return(State.Failure);
             }
             District districtToAttackFrom = service4.GetDistrictToAttackFrom(army, city);
             if (districtToAttackFrom == null)
             {
                 aiBehaviorTree.ErrorCode = 12;
                 return(State.Failure);
             }
             guid = districtToAttackFrom.GUID;
         }
         else if (target is Camp)
         {
             Camp camp = target as Camp;
             IWorldPositionable worldPositionable = target as IWorldPositionable;
             if (worldPositionable == null)
             {
                 return(State.Failure);
             }
             if (service2.GetDistance(army.WorldPosition, worldPositionable.WorldPosition) != 1)
             {
                 aiBehaviorTree.ErrorCode = 12;
                 return(State.Failure);
             }
             guid = camp.GUID;
         }
         else if (target is Fortress)
         {
             guid = target.GUID;
         }
         else
         {
             Village village = target as Village;
             if (village != null && (village.HasBeenPacified || (village.HasBeenConverted && village.Converter == aiBehaviorTree.AICommander.Empire) || village.HasBeenInfected))
             {
                 return(State.Failure);
             }
             Diagnostics.Assert(AIScheduler.Services != null);
             IWorldPositionable worldPositionable2 = target as IWorldPositionable;
             if (worldPositionable2 == null)
             {
                 return(State.Failure);
             }
             District district = service2.GetDistrict(worldPositionable2.WorldPosition);
             if (district != null && District.IsACityTile(district) && district.City.Empire == garrison.Empire)
             {
                 worldPositionable2 = district;
                 guid = district.GUID;
             }
             if (service2.GetDistance(army.WorldPosition, worldPositionable2.WorldPosition) != 1)
             {
                 aiBehaviorTree.ErrorCode = 12;
                 return(State.Failure);
             }
         }
         OrderAttack order = new OrderAttack(army.Empire.Index, army.GUID, guid);
         aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(order, out this.ticket, new EventHandler <TicketRaisedEventArgs>(this.Order_TicketRaised));
         return(State.Running);
     }
 }
    private List <IWorldPositionable> Execute_GetKaijus(AIBehaviorTree aiBehaviorTree, Army army, IGameService gameService, List <IWorldPositionable> unfilteredTargetList)
    {
        List <IWorldPositionable> list = new List <IWorldPositionable>();

        for (int i = 0; i < unfilteredTargetList.Count; i++)
        {
            Kaiju kaiju = null;
            if (unfilteredTargetList[i] is Kaiju)
            {
                kaiju = (unfilteredTargetList[i] as Kaiju);
            }
            else if (unfilteredTargetList[i] is KaijuArmy)
            {
                kaiju = (unfilteredTargetList[i] as KaijuArmy).Kaiju;
            }
            else if (unfilteredTargetList[i] is KaijuGarrison)
            {
                kaiju = (unfilteredTargetList[i] as KaijuGarrison).Kaiju;
            }
            if (kaiju != null)
            {
                if (this.TypeOfTarget == AIBehaviorTreeNode_Decorator_SelectTarget.TargetType.StunnedKaiju && !kaiju.IsTamed() && kaiju.IsStunned())
                {
                    list.Add(kaiju);
                }
                if (this.TypeOfTarget == AIBehaviorTreeNode_Decorator_SelectTarget.TargetType.WildKaiju && !kaiju.IsTamed() && kaiju.IsWild())
                {
                    list.Add(kaiju);
                }
                if (this.TypeOfTarget == AIBehaviorTreeNode_Decorator_SelectTarget.TargetType.TamedKaiju && kaiju.IsTamed())
                {
                    list.Add(kaiju);
                }
            }
        }
        return(list);
    }
 protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters)
 {
     if (this.ticket != null)
     {
         if (!this.ticket.Raised)
         {
             return(State.Running);
         }
         if (this.ticket.PostOrderResponse == PostOrderResponse.PreprocessHasFailed)
         {
             this.ticket = null;
             aiBehaviorTree.ErrorCode = 1;
             return(State.Failure);
         }
         this.ticket = null;
         return(State.Success);
     }
     else
     {
         Army army;
         if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None)
         {
             return(State.Failure);
         }
         float propertyValue  = army.GetPropertyValue(SimulationProperties.MaximumNumberOfActionPoints);
         float propertyValue2 = army.GetPropertyValue(SimulationProperties.ActionPointsSpent);
         if (propertyValue <= propertyValue2)
         {
             aiBehaviorTree.ErrorCode = 33;
             return(State.Failure);
         }
         if (!aiBehaviorTree.Variables.ContainsKey(this.TargetVarName))
         {
             aiBehaviorTree.LogError("${0} not set", new object[]
             {
                 this.TargetVarName
             });
             return(State.Failure);
         }
         IGameEntity gameEntity = aiBehaviorTree.Variables[this.TargetVarName] as IGameEntity;
         if (!(gameEntity is IWorldPositionable))
         {
             return(State.Failure);
         }
         IGameService service = Services.GetService <IGameService>();
         Diagnostics.Assert(service != null);
         if (!service.Game.Services.GetService <IGameEntityRepositoryService>().Contains(gameEntity.GUID))
         {
             return(State.Success);
         }
         IEncounterRepositoryService service2 = service.Game.Services.GetService <IEncounterRepositoryService>();
         if (service2 != null)
         {
             IEnumerable <Encounter> enumerable = service2;
             if (enumerable != null && enumerable.Any((Encounter encounter) => encounter.IsGarrisonInEncounter(army.GUID, false)))
             {
                 return(State.Running);
             }
         }
         IGarrison garrison;
         if (gameEntity is Kaiju)
         {
             Kaiju kaiju = gameEntity as Kaiju;
             garrison = kaiju.GetActiveTroops();
             if (kaiju.IsStunned())
             {
                 return(State.Failure);
             }
         }
         else
         {
             if (gameEntity is KaijuArmy)
             {
                 KaijuArmy kaijuArmy = gameEntity as KaijuArmy;
                 if (kaijuArmy != null && kaijuArmy.Kaiju.IsStunned())
                 {
                     return(State.Failure);
                 }
             }
             else if (gameEntity is KaijuGarrison)
             {
                 KaijuGarrison kaijuGarrison = gameEntity as KaijuGarrison;
                 if (kaijuGarrison != null && kaijuGarrison.Kaiju.IsStunned())
                 {
                     return(State.Failure);
                 }
             }
             garrison = (gameEntity as IGarrison);
         }
         if (garrison == null)
         {
             return(State.Failure);
         }
         if ((army.Empire is MinorEmpire || army.Empire is NavalEmpire) && garrison.Hero != null && garrison.Hero.IsSkillUnlocked("HeroSkillLeaderMap07"))
         {
             return(State.Failure);
         }
         if (garrison.Empire.Index == aiBehaviorTree.AICommander.Empire.Index)
         {
             return(State.Failure);
         }
         GameEntityGUID guid = gameEntity.GUID;
         if (!aiBehaviorTree.Variables.ContainsKey(this.PathVarName))
         {
             aiBehaviorTree.LogError("{0} not set", new object[]
             {
                 this.PathVarName
             });
             return(State.Failure);
         }
         WorldPath worldPath = aiBehaviorTree.Variables[this.PathVarName] as WorldPath;
         if (worldPath == null || worldPath.Length < 2)
         {
             aiBehaviorTree.LogError("Path is null.", new object[0]);
             aiBehaviorTree.ErrorCode = 3;
             return(State.Failure);
         }
         if (!worldPath.IsValid)
         {
             aiBehaviorTree.ErrorCode = 3;
             return(State.Failure);
         }
         OrderGoToAndAttack orderGoToAndAttack = new OrderGoToAndAttack(army.Empire.Index, army.GUID, guid, worldPath);
         orderGoToAndAttack.Flags = PathfindingFlags.IgnoreFogOfWar;
         aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(orderGoToAndAttack, out this.ticket, null);
         return(State.Running);
     }
 }