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); }
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)))); }