public override void Execute(Army army, global::PlayerController playerController, out Ticket ticket, EventHandler <TicketRaisedEventArgs> ticketRaisedEventHandler, params object[] parameters) { ticket = null; if (army == null || playerController == null) { return; } TerraformDevice terraformDevice = null; if (parameters != null && parameters.Length > 0 && parameters[0] is TerraformDevice) { terraformDevice = (parameters[0] as TerraformDevice); } List <StaticString> list = new List <StaticString>(); if (terraformDevice == null || !this.CanToggleOverDevice(army, terraformDevice, ref list)) { return; } if (terraformDevice.DismantlingArmy == null) { if (army.IsDismantlingDevice) { OrderToggleDismantleDevice order = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, army.DismantlingDeviceTarget, false); playerController.PostOrder(order, out ticket, ticketRaisedEventHandler); } OrderToggleDismantleDevice order2 = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, true); playerController.PostOrder(order2, out ticket, ticketRaisedEventHandler); } else if (terraformDevice.DismantlingArmy == army) { OrderToggleDismantleDevice order3 = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, false); playerController.PostOrder(order3, out ticket, ticketRaisedEventHandler); } }
protected override IEnumerator OnShow(params object[] parameters) { yield return(base.OnShow(parameters)); if (this.context == null || !(this.context is TerraformDevice)) { base.AgeTransform.Visible = false; } else { TerraformDevice terraformDevice = this.context as TerraformDevice; bool isValid = terraformDevice.DismantlingArmyGUID.IsValid; int num = (!isValid) ? terraformDevice.TurnsToActivate() : terraformDevice.TurnsToDeactivate(); string text; if (num == 1) { text = AgeLocalizer.Instance.LocalizeString((!isValid) ? "%FeatureDeviceChargingDurationSingle" : "%FeatureDeviceDismantlingDurationSingle"); } else if (num % 10 == 0) { text = AgeLocalizer.Instance.LocalizeString((!isValid) ? "%FeatureDeviceChargingDurationTen" : "%FeatureDeviceDismantlingDurationTen"); } else if (num > 1999) { text = AgeLocalizer.Instance.LocalizeString((!isValid) ? "%FeatureDeviceChargingInfinite" : "%FeatureDeviceDismantlingDurationSingle"); } else { text = AgeLocalizer.Instance.LocalizeString((!isValid) ? "%FeatureDeviceChargingDurationPlural" : "%FeatureDeviceDismantlingDurationPlural"); } this.Title.Text = text.Replace("$(Input)", num.ToString()); base.AgeTransform.Visible = true; } yield break; }
private void ListNearbyDevicesFiltered(Army army) { if (army == null) { throw new ArgumentNullException("army"); } this.devices.Clear(); IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); global::Game game = service.Game as global::Game; Diagnostics.Assert(game != null); ITerraformDeviceService service2 = game.Services.GetService <ITerraformDeviceService>(); Diagnostics.Assert(service2 != null); List <WorldPosition> neighbours = army.WorldPosition.GetNeighbours(game.World.WorldParameters); for (int i = 0; i < neighbours.Count; i++) { TerraformDevice deviceAtPosition = service2.GetDeviceAtPosition(neighbours[i]); List <StaticString> list = new List <StaticString>(); if (this.CanToggleOverDevice(army, deviceAtPosition, ref list) && !this.devices.Contains(deviceAtPosition)) { this.devices.Add(deviceAtPosition); } } }
public void Bind(TerraformDevice device, Amplitude.Unity.Gui.IGuiService guiService) { if (this.Device != null && this.Device != device) { this.Unbind(); } this.Device = device; }
private void ReleaseKaijuArmyActions() { DepartmentOfDefense agency = this.Empire.GetAgency <DepartmentOfDefense>(); SimulationDescriptor value = this.SimulationDescriptorDatabase.GetValue(DepartmentOfTheInterior.ArmyStatusBesiegerDescriptorName); this.KaijuArmy.RemoveDescriptor(value); if (this.KaijuArmy.IsEarthquaker) { this.KaijuArmy.SetEarthquakerStatus(false, false, null); } if (this.KaijuArmy.PillageTarget.IsValid) { DepartmentOfDefense.StopPillage(this.KaijuArmy); } if (this.KaijuArmy.IsAspirating) { agency.StopAspirating(this.KaijuArmy); } if (this.KaijuArmy.IsDismantlingDevice) { ITerraformDeviceRepositoryService service = this.gameService.Game.Services.GetService <ITerraformDeviceRepositoryService>(); TerraformDevice device = service[this.KaijuArmy.DismantlingDeviceTarget] as TerraformDevice; agency.StopDismantelingDevice(this.KaijuArmy, device); } if (this.KaijuArmy.IsDismantlingCreepingNode) { CreepingNode creepingNode = null; if (this.gameEntityRepositoryService.TryGetValue <CreepingNode>(this.KaijuArmy.DismantlingCreepingNodeTarget, out creepingNode)) { agency.StopDismantelingCreepingNode(this.KaijuArmy, creepingNode); } } IWorldPositionningService service2 = this.gameService.Game.Services.GetService <IWorldPositionningService>(); Region region = service2.GetRegion(this.KaijuArmy.WorldPosition); if (region.City != null && region.City.Empire != this.Empire) { DepartmentOfTheInterior agency2 = region.City.Empire.GetAgency <DepartmentOfTheInterior>(); if (agency2 != null) { if (region.City.BesiegingEmpire == this.Empire && agency2.NeedToStopSiege(region.City)) { agency2.StopSiege(region.City); } agency2.StopNavalSiege(region.City, this.KaijuArmy); } IVisibilityService service3 = this.gameService.Game.Services.GetService <IVisibilityService>(); service3.NotifyVisibilityHasChanged(this.Empire); } }
private void addQuestMarker(QuestBehaviour questBehaviour, TerraformDevice army) { QuestInstruction_UpdateQuestMarker questInstruction_UpdateQuestMarker = new QuestInstruction_UpdateQuestMarker(); questInstruction_UpdateQuestMarker.BoundTargetGUID = army.GUID; questInstruction_UpdateQuestMarker.MarkerGUID = this.EntityGUID; questInstruction_UpdateQuestMarker.Tags = new Tags(); questInstruction_UpdateQuestMarker.Tags.AddTag("Ruins"); questInstruction_UpdateQuestMarker.MarkerTypeName = QuestMarker.DefaultMarkerTypeName; questInstruction_UpdateQuestMarker.Empire = questBehaviour.Initiator; questInstruction_UpdateQuestMarker.RevealUnexploredLand = true; questInstruction_UpdateQuestMarker.MarkerVisibleInFogOfWar = true; questInstruction_UpdateQuestMarker.IgnoreInteraction = false; questBehaviour.Push(questInstruction_UpdateQuestMarker); }
private bool CanToggleOverDevice(Army army, TerraformDevice device, ref List <StaticString> failureFlags) { if (army == null || device == null || device.Empire == army.Empire) { failureFlags.Add(ArmyAction.NoCanDoWhileHidden); return(false); } if (device.DismantlingArmy != null) { if (device.DismantlingArmy == army) { return(true); } failureFlags.Add(ArmyAction.NoCanDoWhileHidden); return(false); } else { IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>(); Diagnostics.Assert(service2 != null); Army armyAtPosition = service2.GetArmyAtPosition(device.WorldPosition); if (device != null && device.DismantlingArmy == null && armyAtPosition != null && device.Empire.Index != army.Empire.Index) { failureFlags.Add(ArmyAction.NoCanDoWhileHidden); return(false); } if (device.Empire != army.Empire && army.Empire is MajorEmpire && !(device.Empire is LesserEmpire)) { DiplomaticRelation diplomaticRelation = army.Empire.GetAgency <DepartmentOfForeignAffairs>().DiplomaticRelations[device.Empire.Index]; if (diplomaticRelation != null && diplomaticRelation.State != null && (diplomaticRelation.State.Name == DiplomaticRelationState.Names.Alliance || diplomaticRelation.State.Name == DiplomaticRelationState.Names.Peace)) { failureFlags.Add(ArmyAction.NoCanDoWhileHidden); return(false); } } IPathfindingService service3 = service.Game.Services.GetService <IPathfindingService>(); Diagnostics.Assert(service3 != null); PathfindingFlags flags = PathfindingFlags.IgnoreArmies | PathfindingFlags.IgnoreOtherEmpireDistrict | PathfindingFlags.IgnoreDiplomacy | PathfindingFlags.IgnoreFogOfWar | PathfindingFlags.IgnoreSieges | PathfindingFlags.IgnoreKaijuGarrisons; if (!service3.IsTransitionPassable(army.WorldPosition, device.WorldPosition, army, flags, null)) { failureFlags.Add(ArmyAction.NoCanDoWhileHidden); return(false); } return(true); } }
private void SelectTarget() { this.battleTarget = null; if (this.LastHighlightedWorldPosition == WorldPosition.Invalid) { return; } if (!base.VisibilityService.IsWorldPositionVisibleFor(this.LastHighlightedWorldPosition, this.Army.Empire)) { return; } Region region = base.WorldPositionningService.GetRegion(this.LastHighlightedWorldPosition); if (region == null || this.battleTarget != null) { return; } PointOfInterest pointOfInterest = region.PointOfInterests.FirstOrDefault((PointOfInterest match) => match.WorldPosition == this.LastHighlightedWorldPosition); if (pointOfInterest != null && (pointOfInterest.Type == Fortress.Citadel || pointOfInterest.Type == Fortress.Facility)) { Fortress fortressAt = region.NavalEmpire.GetAgency <PirateCouncil>().GetFortressAt(pointOfInterest.WorldPosition); this.battleTarget = fortressAt; } if (region != null) { District district = null; if (region.City != null && region.City.Empire != this.Army.Empire) { district = region.City.Districts.FirstOrDefault((District match) => match.WorldPosition == this.LastHighlightedWorldPosition); } if (district != null && district.Type != DistrictType.Exploitation) { this.battleTarget = district; } } if (this.battleTarget == null && region != null && region.City != null && region.City.Camp != null && region.City.Camp.WorldPosition == this.LastHighlightedWorldPosition && region.City.Empire != this.Army.Empire) { this.battleTarget = region.City.Camp; } if (this.battleTarget == null) { Army armyAtPosition = base.WorldPositionningService.GetArmyAtPosition(this.LastHighlightedWorldPosition); if (armyAtPosition != null && (!armyAtPosition.IsCamouflaged || base.VisibilityService.IsWorldPositionDetectedFor(this.LastHighlightedWorldPosition, this.Army.Empire))) { this.battleTarget = armyAtPosition; } } if (region != null && this.battleTarget == null) { pointOfInterest = region.PointOfInterests.FirstOrDefault((PointOfInterest match) => match.WorldPosition == this.LastHighlightedWorldPosition); if (pointOfInterest != null) { if (pointOfInterest.CreepingNodeGUID != GameEntityGUID.Zero) { CreepingNode creepingNode = null; base.GameEntityRepositoryService.TryGetValue <CreepingNode>(pointOfInterest.CreepingNodeGUID, out creepingNode); if (creepingNode != null) { if (creepingNode.Empire.Index != this.Army.Empire.Index) { if (ELCPUtilities.UseELCPPeacefulCreepingNodes) { DepartmentOfForeignAffairs agency = this.Army.Empire.GetAgency <DepartmentOfForeignAffairs>(); if (agency != null && agency.IsFriend(creepingNode.Empire)) { if (pointOfInterest.Type == "QuestLocation") { this.battleTarget = pointOfInterest; } else if (pointOfInterest.Type == "Village") { IQuestManagementService service = base.GameService.Game.Services.GetService <IQuestManagementService>(); IQuestRepositoryService service2 = base.GameService.Game.Services.GetService <IQuestRepositoryService>(); IEnumerable <QuestMarker> markersByBoundTargetGUID = service.GetMarkersByBoundTargetGUID(pointOfInterest.GUID); bool flag = false; foreach (QuestMarker questMarker in markersByBoundTargetGUID) { Quest quest; if (service2.TryGetValue(questMarker.QuestGUID, out quest) && quest.EmpireBits == this.Army.Empire.Bits) { Village villageAt = region.MinorEmpire.GetAgency <BarbarianCouncil>().GetVillageAt(pointOfInterest.WorldPosition); this.battleTarget = villageAt; flag = true; break; } } if (!flag) { this.battleTarget = creepingNode; } } else { this.battleTarget = creepingNode; } } } else { this.battleTarget = creepingNode; } } else if (pointOfInterest.Type == "QuestLocation" || pointOfInterest.Type == "NavalQuestLocation") { this.battleTarget = pointOfInterest; } } } else if (pointOfInterest.Type == "Village") { Village villageAt2 = region.MinorEmpire.GetAgency <BarbarianCouncil>().GetVillageAt(pointOfInterest.WorldPosition); this.battleTarget = villageAt2; } else if (pointOfInterest.Type == "QuestLocation" || pointOfInterest.Type == "NavalQuestLocation") { this.battleTarget = pointOfInterest; } } } if (region != null && this.battleTarget == null && region.KaijuEmpire != null && region.Kaiju != null) { KaijuGarrison kaijuGarrison = region.Kaiju.KaijuGarrison; if (kaijuGarrison.WorldPosition == this.LastHighlightedWorldPosition) { this.battleTarget = kaijuGarrison; } } if (this.battleTarget == null) { TerraformDevice deviceAtPosition = (base.GameService.Game as global::Game).GetService <ITerraformDeviceService>().GetDeviceAtPosition(this.LastHighlightedWorldPosition); if (deviceAtPosition != null) { this.battleTarget = deviceAtPosition; } } }
protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters) { if (this.ticket != null) { if (!this.orderExecuted) { return(Amplitude.Unity.AI.BehaviourTree.State.Running); } if (this.ticket.PostOrderResponse == PostOrderResponse.PreprocessHasFailed) { this.orderExecuted = false; this.ticket = null; aiBehaviorTree.ErrorCode = 1; return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } this.orderExecuted = false; this.ticket = null; return(Amplitude.Unity.AI.BehaviourTree.State.Success); } else { Army army; if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None) { return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } if (!aiBehaviorTree.Variables.ContainsKey(this.TargetVarName)) { aiBehaviorTree.LogError("${0} not set", new object[] { this.TargetVarName }); return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } IGameEntity gameEntity = aiBehaviorTree.Variables[this.TargetVarName] as IGameEntity; if (!(gameEntity is TerraformDevice)) { aiBehaviorTree.LogError("${0} is not a device", new object[] { this.TargetVarName }); return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } TerraformDevice terraformDevice = gameEntity as TerraformDevice; IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); service.Game.Services.GetService <IGameEntityRepositoryService>(); AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType state = this.State; if (state != AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Start) { if (state == AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Stop && (!terraformDevice.DismantlingArmyGUID.IsValid || army.GUID != terraformDevice.DismantlingArmyGUID)) { return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } } else if (terraformDevice.DismantlingArmyGUID.IsValid) { return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } this.orderExecuted = false; OrderToggleDismantleDevice order = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, this.State == AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Start); aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(order, out this.ticket, new EventHandler <TicketRaisedEventArgs>(this.Order_TicketRaised)); return(Amplitude.Unity.AI.BehaviourTree.State.Running); } }
public override bool CanExecute(Army army, ref List <StaticString> failureFlags, params object[] parameters) { if (!base.CanExecute(army, ref failureFlags, parameters)) { return(false); } if (army.IsNaval || army.IsPillaging || army.IsDismantlingCreepingNode) { failureFlags.Add(ArmyAction.NoCanDoWhileHidden); return(false); } if (army.IsAspirating) { failureFlags.Add(ArmyAction.NoCanDoWhileAspirating); return(false); } if (army.IsEarthquaker) { failureFlags.Add(ArmyAction.NoCanDoWhileEarthquaking); return(false); } if (parameters != null && parameters.Length > 0) { for (int i = 0; i < parameters.Length; i++) { if (parameters[i] is TerraformDevice) { TerraformDevice terraformDevice = parameters[i] as TerraformDevice; if (terraformDevice != null && this.CanToggleOverDevice(army, terraformDevice, ref failureFlags)) { if (army.IsInEncounter) { failureFlags.Add(ArmyAction.NoCanDoWhileLockedInBattle); return(false); } return(true); } } else if (parameters[i] is List <IGameEntity> ) { List <IGameEntity> list = parameters[i] as List <IGameEntity>; for (int j = 0; j < list.Count; j++) { if (list[j] is TerraformDevice) { TerraformDevice terraformDevice2 = list[j] as TerraformDevice; if (terraformDevice2 != null && this.CanToggleOverDevice(army, terraformDevice2, ref failureFlags)) { if (army.IsInEncounter) { failureFlags.Add(ArmyAction.NoCanDoWhileLockedInBattle); return(false); } return(true); } } } } } } failureFlags.Add(ArmyAction.NoCanDoWhileHidden); return(false); }
protected override void RefreshObjectives(StaticString context, StaticString pass) { base.RefreshObjectives(context, pass); base.GatherObjectives(base.ObjectiveType, true, ref this.globalObjectiveMessages); base.ValidateMessages(ref this.globalObjectiveMessages); this.messagePriorityOverrides.Clear(); this.resourcesNeededForQuest.Clear(); if (this.departmentOfTheInterior.Cities.Count == 0) { return; } List <StaticString> list = new List <StaticString>(); using (List <AILayer_QuestBTController.QuestBTOrder> .Enumerator enumerator = this.QuestBTOrders.GetEnumerator()) { while (enumerator.MoveNext()) { AILayer_QuestBTController.QuestBTOrder order = enumerator.Current; if (!list.Contains(order.questName)) { List <AILayer_QuestBTController.QuestBTOrder> list2 = this.QuestBTOrders.FindAll((AILayer_QuestBTController.QuestBTOrder q) => q.questName == order.questName); if (list2.Count > 1) { list.Add(order.questName); int num = int.MaxValue; int num2 = 0; int num3 = -1; for (int k = 0; k < list2.Count; k++) { IGameEntity gameEntity; if (this.gameEntityRepositoryService.TryGetValue <IGameEntity>(list2[k].objectiveGUID, out gameEntity)) { int distance = this.worldPositionningService.GetDistance(this.departmentOfTheInterior.Cities[0].WorldPosition, (gameEntity as IWorldPositionable).WorldPosition); if (distance < num) { num = distance; num3 = k; } if (distance > num2) { num2 = distance; } } } num2 -= num; for (int j = 0; j < list2.Count; j++) { IGameEntity gameEntity2; if (j != num3 && this.gameEntityRepositoryService.TryGetValue <IGameEntity>(list2[j].objectiveGUID, out gameEntity2)) { int num4 = this.worldPositionningService.GetDistance(this.departmentOfTheInterior.Cities[0].WorldPosition, (gameEntity2 as IWorldPositionable).WorldPosition); num4 -= num; float num5 = 1f - (float)(num4 / num2); num5 = Math.Max(num5, 0.3f); this.messagePriorityOverrides.Add(list2[j].objectiveGUID, num5 / 1.25f); } } } } } } int i; Predicate <GlobalObjectiveMessage> < > 9__1; int i2; for (i = this.QuestBTOrders.Count - 1; i >= 0; i = i2 - 1) { bool flag = this.QuestBTOrders[i].resourceNeeded == StaticString.Empty; if (!flag) { float num6; this.departmentOfTheTreasury.TryGetResourceStockValue(base.AIEntity.Empire.SimulationObject, this.QuestBTOrders[i].resourceNeeded, out num6, false); flag = (num6 >= (float)this.QuestBTOrders[i].resourceNeededAmount); if (this.resourcesNeededForQuest.ContainsKey(this.QuestBTOrders[i].resourceNeeded)) { Dictionary <StaticString, float> dictionary = this.resourcesNeededForQuest; StaticString resourceNeeded = this.QuestBTOrders[i].resourceNeeded; dictionary[resourceNeeded] += (float)this.QuestBTOrders[i].resourceNeededAmount; } else { this.resourcesNeededForQuest.Add(this.QuestBTOrders[i].resourceNeeded, (float)this.QuestBTOrders[i].resourceNeededAmount); } } if (!this.questManagementService.IsQuestRunningForEmpire(this.QuestBTOrders[i].questName, base.AIEntity.Empire)) { this.QuestBTOrders.RemoveAt(i); } else if (flag) { List <GlobalObjectiveMessage> globalObjectiveMessages = this.globalObjectiveMessages; Predicate <GlobalObjectiveMessage> match; if ((match = < > 9__1) == null) { match = (< > 9__1 = ((GlobalObjectiveMessage m) => m.ObjectiveState == this.QuestBTOrders[i].questName && m.SubObjectifGUID == this.QuestBTOrders[i].objectiveGUID)); } GlobalObjectiveMessage globalObjectiveMessage = globalObjectiveMessages.Find(match); if (globalObjectiveMessage == null && this.TargetIsReachable(this.QuestBTOrders[i].objectiveGUID)) { IGameEntity gameEntity3; this.gameEntityRepositoryService.TryGetValue <IGameEntity>(this.QuestBTOrders[i].objectiveGUID, out gameEntity3); PointOfInterest pointOfInterest = gameEntity3 as PointOfInterest; TerraformDevice terraformDevice = gameEntity3 as TerraformDevice; if ((pointOfInterest != null && pointOfInterest.Type != "Village") || this.departmentOfScience.CanParley() || terraformDevice != null) { Region region = this.worldPositionningService.GetRegion((gameEntity3 as IWorldPositionable).WorldPosition); globalObjectiveMessage = this.CreateObjectiveFor(region.Index, gameEntity3, this.QuestBTOrders[i].questName); } } if (globalObjectiveMessage != null) { this.RefreshMessagePriority(globalObjectiveMessage); } } i2 = i; } }