Beispiel #1
0
 private void Client_TurnBegin_CheckKaijuStatus()
 {
     if (this.Kaiju != null)
     {
         if (this.Kaiju.IsStunned())
         {
             if (this.Kaiju.NextTurnToRecoverFromStun > 0 && (this.gameService.Game as global::Game).Turn == this.Kaiju.NextTurnToRecoverFromStun)
             {
                 this.Kaiju.ChangeToWildState();
             }
         }
         else if (this.Kaiju.IsWild() && this.Kaiju.OnArmyMode())
         {
             global::PlayerController server = this.KaijuEmpire.PlayerControllers.Server;
             if (server != null)
             {
                 Region validKaijuRegion = KaijuCouncil.GetValidKaijuRegion();
                 if (validKaijuRegion == null)
                 {
                     Diagnostics.LogWarning("Unable to find suitable region");
                     return;
                 }
                 WorldPosition validKaijuPosition = KaijuCouncil.GetValidKaijuPosition(validKaijuRegion, false);
                 if (validKaijuPosition == WorldPosition.Zero)
                 {
                     Diagnostics.LogWarning("Unable to find suitable position in target region");
                     return;
                 }
                 OrderRelocateKaiju order = new OrderRelocateKaiju(this.Kaiju.GUID, validKaijuPosition);
                 server.PostOrder(order);
             }
         }
     }
 }
Beispiel #2
0
    public void TryRelocateKaijuOrResetETA()
    {
        global::PlayerController server = this.KaijuEmpire.PlayerControllers.Server;
        Region validKaijuRegion         = KaijuCouncil.GetValidKaijuRegion();

        if (validKaijuRegion == null)
        {
            if (this.Kaiju != null)
            {
                this.ResetRelocationETA();
            }
            Diagnostics.LogWarning("Unable to find suitable region. Reset Kaiju ETA!");
            return;
        }
        WorldPosition validKaijuPosition = KaijuCouncil.GetValidKaijuPosition(validKaijuRegion, false);

        if (validKaijuPosition == WorldPosition.Zero)
        {
            if (this.Kaiju != null)
            {
                this.ResetRelocationETA();
            }
            Diagnostics.LogWarning("Unable to find suitable position in target region. Reset Kaiju ETA.");
            return;
        }
        if (server != null && this.Kaiju != null && this.Kaiju.OnGarrisonMode() && this.Kaiju.IsWild())
        {
            IPlayerControllerRepositoryService service = this.gameService.Game.Services.GetService <IPlayerControllerRepositoryService>();
            OrderRelocateKaiju order = new OrderRelocateKaiju(this.Kaiju.GUID, validKaijuPosition);
            server.PostOrder(order);
        }
    }
Beispiel #3
0
	public void RelocateKaiju(Kaiju kaiju, WorldPosition targetPosition, StaticString garrisonActionName)
	{
		if (!this.TamedKaijus.Contains(kaiju))
		{
			return;
		}
		OrderRelocateKaiju orderRelocateKaiju;
		if (!StaticString.IsNullOrEmpty(garrisonActionName))
		{
			orderRelocateKaiju = new OrderRelocateKaiju(kaiju.GUID, targetPosition, garrisonActionName);
		}
		else
		{
			orderRelocateKaiju = new OrderRelocateKaiju(kaiju.GUID, targetPosition);
		}
		if (orderRelocateKaiju != null)
		{
			IGameService service = Services.GetService<IGameService>();
			IPlayerControllerRepositoryService service2 = service.Game.Services.GetService<IPlayerControllerRepositoryService>();
			service2.ActivePlayerController.PostOrder(orderRelocateKaiju);
		}
	}
 private SynchronousJobState SyncrhronousJob_Relocate()
 {
     if (this.validatedRelocationMessages.Count > 0)
     {
         for (int i = this.validatedRelocationMessages.Count - 1; i >= 0; i--)
         {
             bool flag  = false;
             bool flag2 = false;
             KaijuRelocationMessage kaijuRelocationMessage = this.validatedRelocationMessages[i];
             Kaiju kaiju = null;
             List <StaticString> list = new List <StaticString>();
             if (!this.gameEntityRepositoryService.TryGetValue <Kaiju>(kaijuRelocationMessage.KaijuGUID, out kaiju) || !this.MajorEmpire.TamedKaijus.Contains(kaiju) || !this.garrisonAction_MigrateKaiju.CanExecute(kaiju.KaijuGarrison, ref list, new object[0]))
             {
                 flag2 = true;
             }
             if (kaiju != null && kaiju.KaijuGarrison != null && kaiju.KaijuGarrison.IsInEncounter)
             {
                 flag = true;
             }
             if (!flag2)
             {
                 OrderRelocateKaiju order = new OrderRelocateKaiju(kaiju.GUID, kaijuRelocationMessage.TargetPosition, this.garrisonAction_MigrateKaiju.Name);
                 base.AIEntity.Empire.PlayerControllers.AI.PostOrder(order);
             }
             if (!flag)
             {
                 this.validatedRelocationMessages.RemoveAt(i);
                 base.AIEntity.AIPlayer.Blackboard.CancelMessage(kaijuRelocationMessage);
             }
         }
         if (this.validatedRelocationMessages.Count == 0 && this.KaijusToRise.Count == 0)
         {
             return(SynchronousJobState.Success);
         }
         return(SynchronousJobState.Running);
     }
     else
     {
         if (this.KaijusToRise.Count <= 0)
         {
             return(SynchronousJobState.Success);
         }
         int j = this.KaijusToRise.Count - 1;
         while (j >= 0)
         {
             bool  flag3  = false;
             bool  flag4  = false;
             Kaiju kaiju2 = null;
             List <StaticString> list2 = new List <StaticString>();
             if (!this.gameEntityRepositoryService.TryGetValue <Kaiju>(this.KaijusToRise[j], out kaiju2) || !this.MajorEmpire.TamedKaijus.Contains(kaiju2) || !this.garrisonAction_RiseKaiju.CanExecute(kaiju2.KaijuGarrison, ref list2, new object[0]))
             {
                 flag3 = true;
             }
             if (kaiju2 != null && kaiju2.KaijuGarrison != null && kaiju2.KaijuGarrison.IsInEncounter)
             {
                 flag4 = true;
             }
             if (!flag3)
             {
                 List <StaticString> list3 = new List <StaticString>();
                 if (this.garrisonAction_MigrateKaiju.CanExecute(kaiju2.KaijuGarrison, ref list3, new object[0]))
                 {
                     Army army = this.ChooseArmyToSupport();
                     if (army != null && this.worldPositionningService.GetDistance(kaiju2.WorldPosition, army.WorldPosition) > 6)
                     {
                         Region bestSupportRegionForKaiju = this.GetBestSupportRegionForKaiju(kaiju2, army, null);
                         if (bestSupportRegionForKaiju != null && kaiju2.Region != bestSupportRegionForKaiju)
                         {
                             WorldPosition validKaijuSupportPosition = this.GetValidKaijuSupportPosition(bestSupportRegionForKaiju, army);
                             if (validKaijuSupportPosition.IsValid)
                             {
                                 OrderRelocateKaiju order2 = new OrderRelocateKaiju(kaiju2.GUID, validKaijuSupportPosition, this.garrisonAction_MigrateKaiju.Name);
                                 base.AIEntity.Empire.PlayerControllers.AI.PostOrder(order2);
                                 return(SynchronousJobState.Running);
                             }
                         }
                     }
                 }
                 OrderKaijuChangeMode order3 = new OrderKaijuChangeMode(kaiju2, false, true, true);
                 Ticket ticket = null;
                 base.AIEntity.Empire.PlayerControllers.AI.PostOrder(order3, out ticket, new EventHandler <TicketRaisedEventArgs>(this.Order_KaijuRisen));
             }
             if (!flag4)
             {
                 this.KaijusToRise.RemoveAt(j);
                 if (this.KaijusToRise.Count == 0)
                 {
                     return(SynchronousJobState.Success);
                 }
                 return(SynchronousJobState.Running);
             }
             else
             {
                 j--;
             }
         }
         if (this.KaijusToRise.Count == 0)
         {
             return(SynchronousJobState.Success);
         }
         return(SynchronousJobState.Running);
     }
 }