protected override State Execute(QuestBehaviour questBehaviour, params object[] parameters)
    {
        if (!this.TryInitializingTargets(questBehaviour, this.ForceUpdate))
        {
            Diagnostics.LogError("ELCP {0} {2} {1} QuestBehaviourTreeNode_Action_SendAICommand TryInitializingTargets failed!", new object[]
            {
                questBehaviour.Initiator,
                this.Type,
                questBehaviour.Quest.QuestDefinition.Name
            });
            return(State.Success);
        }
        if (Amplitude.Unity.Framework.Application.Preferences.EnableModdingTools)
        {
            Diagnostics.Log("ELCP {0} QuestBehaviourTreeNode_Action_SendAICommand {2} {1}, Target {3}, RequiredMilitaryPower {4}, Cancel {5}, Region {6}, ForceArmyGUID {7}, {8}, {9}", new object[]
            {
                questBehaviour.Initiator,
                this.Type,
                questBehaviour.Quest.QuestDefinition.Name,
                this.TargetEntityGUID,
                this.RequiredMilitaryPower,
                this.CancelOrder,
                this.TargetRegionIndex,
                this.ForceArmyGUID,
                this.ResourceName,
                this.WantedAmount
            });
        }
        ISessionService service = Services.GetService <ISessionService>();

        if (service == null || service.Session == null || !service.Session.IsHosting)
        {
            return(State.Success);
        }
        GameServer           gameServer = (service.Session as global::Session).GameServer as GameServer;
        AIPlayer_MajorEmpire aiplayer_MajorEmpire;

        if (gameServer != null && gameServer.AIScheduler != null && gameServer.AIScheduler.TryGetMajorEmpireAIPlayer(questBehaviour.Initiator as MajorEmpire, out aiplayer_MajorEmpire) && aiplayer_MajorEmpire.AIState != AIPlayer.PlayerState.EmpireControlledByHuman)
        {
            AIEntity entity = aiplayer_MajorEmpire.GetEntity <AIEntity_Empire>();
            if (entity != null)
            {
                if (this.Type == QuestBehaviourTreeNode_Action_SendAICommand.CommandType.VisitTarget && this.TargetEntityGUID > 0UL)
                {
                    if (this.ForceArmyGUID > 0UL)
                    {
                        AILayer_QuestSolver layer = entity.GetLayer <AILayer_QuestSolver>();
                        if (!this.CancelOrder)
                        {
                            layer.AddQuestSolverOrder(questBehaviour.Quest.QuestDefinition.Name, new GameEntityGUID(this.TargetEntityGUID), new GameEntityGUID(this.ForceArmyGUID));
                        }
                        else
                        {
                            layer.RemoveQuestSolverOrder(questBehaviour.Quest.QuestDefinition.Name, new GameEntityGUID(this.ForceArmyGUID));
                        }
                    }
                    else
                    {
                        AILayer_QuestBTController layer2 = entity.GetLayer <AILayer_QuestBTController>();
                        if (!this.CancelOrder)
                        {
                            if (!string.IsNullOrEmpty(this.ResourceName))
                            {
                                layer2.AddQuestBTOrder(questBehaviour.Quest.QuestDefinition.Name, new GameEntityGUID(this.TargetEntityGUID), this.RequiredMilitaryPower, this.ResourceName, this.WantedAmount);
                            }
                            else
                            {
                                layer2.AddQuestBTOrder(questBehaviour.Quest.QuestDefinition.Name, new GameEntityGUID(this.TargetEntityGUID), this.RequiredMilitaryPower);
                            }
                        }
                        else
                        {
                            layer2.RemoveQuestBTOrder(questBehaviour.Quest.QuestDefinition.Name, new GameEntityGUID(this.TargetEntityGUID));
                        }
                    }
                }
                else if (this.Type == QuestBehaviourTreeNode_Action_SendAICommand.CommandType.SuspendPacification)
                {
                    AILayer_Village layer3 = entity.GetLayer <AILayer_Village>();
                    if (!this.CancelOrder)
                    {
                        layer3.SuspendPacifications(questBehaviour.Quest.QuestDefinition.Name);
                    }
                    else
                    {
                        layer3.ResumePacifications(questBehaviour.Quest.QuestDefinition.Name);
                    }
                }
                else if (this.Type == QuestBehaviourTreeNode_Action_SendAICommand.CommandType.PacifyVillage && this.TargetEntityGUID > 0UL)
                {
                    AILayer_Village layer4 = entity.GetLayer <AILayer_Village>();
                    if (!this.CancelOrder)
                    {
                        layer4.AddQuestVillageToPrioritize(questBehaviour.Quest.QuestDefinition.Name, this.TargetEntityGUID);
                    }
                    else
                    {
                        layer4.RemoveQuestVillageToPrioritize(questBehaviour.Quest.QuestDefinition.Name, this.TargetEntityGUID);
                    }
                }
                else if (this.Type == QuestBehaviourTreeNode_Action_SendAICommand.CommandType.PacifyRegion && this.TargetRegionIndex >= 0)
                {
                    AILayer_Pacification layer5 = entity.GetLayer <AILayer_Pacification>();
                    if (!this.CancelOrder)
                    {
                        layer5.AddQuestBTPacification(questBehaviour.Quest.QuestDefinition.Name, this.TargetRegionIndex);
                    }
                    else
                    {
                        layer5.RemoveQuestBTPacification(questBehaviour.Quest.QuestDefinition.Name, this.TargetRegionIndex);
                    }
                }
            }
        }
        return(State.Success);
    }
Esempio n. 2
0
 public static bool IsPatrolValid(global::Empire empire, Region region, AILayer_QuestSolver aiLayer_QuestSolver)
 {
     return((empire is MajorEmpire && aiLayer_QuestSolver != null && aiLayer_QuestSolver.QuestRegions.Contains(region.Index)) || (region != null && ((empire is MajorEmpire && (empire as MajorEmpire).ConvertedVillages.Find((Village match) => match.Region == region) != null) || (region.IsLand && region.IsRegionColonized() && region.Owner == empire))));
 }