public override void Run() { base.Run(); if (!this.coroutine.IsFinished) { this.coroutine.Run(); return; } bool flag = true; bool flag2 = true; bool flag3 = true; for (int i = 0; i < base.BattleEncounter.BattleContenders.Count; i++) { if (base.BattleEncounter.BattleContenders[i].ContenderState != ContenderState.ReadyForDeployment) { flag = false; break; } flag2 &= (base.BattleEncounter.BattleContenders[i].ContenderEncounterOptionChoice == EncounterOptionChoice.Simulated); flag3 &= (base.BattleEncounter.BattleContenders[i].ContenderEncounterOptionChoice > EncounterOptionChoice.Manual); } if (flag) { if (base.BattleEncounter.OrderCreateEncounter.EncounterMode != EncounterOptionChoice.Simulated) { if (base.BattleEncounter.Retreat) { base.BattleEncounter.OrderCreateEncounter.EncounterMode = EncounterOptionChoice.Simulated; } else if (base.BattleEncounter.OrderCreateEncounter.Instant) { base.BattleEncounter.OrderCreateEncounter.EncounterMode = EncounterOptionChoice.Simulated; } else if (flag2) { base.BattleEncounter.OrderCreateEncounter.EncounterMode = EncounterOptionChoice.Simulated; } else if (flag3) { base.BattleEncounter.OrderCreateEncounter.EncounterMode = EncounterOptionChoice.Spectator; } else if (ELCPUtilities.UseXumukMPBattleRules) { PlayerController playerController = base.BattleEncounter.PlayerController; if (playerController != null) { for (int j = 0; j < base.BattleEncounter.BattleContenders.Count; j++) { if (!base.BattleEncounter.BattleContenders[j].Garrison.Empire.IsControlledByAI) { OrderChangeContenderEncounterOption order = new OrderChangeContenderEncounterOption(base.BattleEncounter.EncounterGUID, base.BattleEncounter.BattleContenders[j].GUID, EncounterOptionChoice.Manual); playerController.PostOrder(order); } } } } } PlayerController playerController2 = base.BattleEncounter.PlayerController; if (playerController2 != null) { OrderBeginEncounter order2 = new OrderBeginEncounter(base.BattleEncounter.EncounterGUID, base.BattleEncounter.OrderCreateEncounter.Instant, base.BattleEncounter.OrderCreateEncounter.EncounterMode); playerController2.PostOrder(order2); } base.BattleEncounter.PostStateChange(typeof(BattleEncounterState_Setup_WaitForContendersAcknowledge), new object[0]); return; } if (this.setupEndTime > 0.0 && this.setupEndTime <= Game.Time) { this.setupEndTime = -1.0; PlayerController playerController3 = base.BattleEncounter.PlayerController; if (playerController3 != null) { for (int k = 0; k < base.BattleEncounter.BattleContenders.Count; k++) { OrderReadyForDeployment order3 = new OrderReadyForDeployment(base.BattleEncounter.EncounterGUID, base.BattleEncounter.BattleContenders[k].GUID, base.BattleEncounter.BattleContenders[k].ContenderEncounterOptionChoice, false); playerController3.PostOrder(order3); } } } }
private IEnumerator RunAsync() { while (base.BattleEncounter.IncommingJoinContendersCount != 0) { yield return(null); } base.BattleEncounter.AskNearbyArmiesToJoin(); while (base.BattleEncounter.IncommingJoinContendersCount != 0) { yield return(null); } int groupFlags = 0; Dictionary <byte, int> unitsCountByGroup = new Dictionary <byte, int>(); for (int index = 0; index < base.BattleEncounter.BattleContenders.Count; index++) { groupFlags |= 1 << (int)base.BattleEncounter.BattleContenders[index].Group; if (!unitsCountByGroup.ContainsKey(base.BattleEncounter.BattleContenders[index].Group)) { unitsCountByGroup.Add(base.BattleEncounter.BattleContenders[index].Group, 0); } Dictionary <byte, int> dictionary2; Dictionary <byte, int> dictionary = dictionary2 = unitsCountByGroup; byte group; byte key = group = base.BattleEncounter.BattleContenders[index].Group; int num = dictionary2[group]; dictionary[key] = num + base.BattleEncounter.BattleContenders[index].Garrison.UnitsCount; } if (groupFlags <= 2) { base.BattleEncounter.PostStateChange(typeof(BattleEncounterState_Terminate), new object[] { true }); yield break; } foreach (KeyValuePair <byte, int> kvp in unitsCountByGroup) { if (kvp.Value == 0) { base.BattleEncounter.OrderCreateEncounter.Instant = true; if (base.BattleEncounter is BattleCityAssaultEncounter && kvp.Key == base.BattleEncounter.BattleContenders[1].Group) { (base.BattleEncounter as BattleCityAssaultEncounter).IsCityRipeForTheTaking = true; } } } PlayerController playerController = base.BattleEncounter.PlayerController; if (playerController != null) { this.setupEndTime = ((this.setupDuration <= 0.0) ? -1.0 : (Game.Time + this.setupDuration)); OrderNotifyEncounter orderNotifyEncounter = new OrderNotifyEncounter(base.BattleEncounter.EncounterGUID, this.setupEndTime, this.setupDuration, base.BattleEncounter.OrderCreateEncounter.Instant); playerController.PostOrder(orderNotifyEncounter); if (base.BattleEncounter.OrderCreateEncounter.Instant) { for (int index2 = 0; index2 < base.BattleEncounter.BattleContenders.Count; index2++) { if (!base.BattleEncounter.BattleContenders[index2].IsMainContender) { OrderIncludeContenderInEncounter orderIncludeContenderInEncounter = new OrderIncludeContenderInEncounter(base.BattleEncounter.EncounterGUID, base.BattleEncounter.BattleContenders[index2].GUID, false); playerController.PostOrder(orderIncludeContenderInEncounter); } OrderReadyForDeployment order = new OrderReadyForDeployment(base.BattleEncounter.EncounterGUID, base.BattleEncounter.BattleContenders[index2].GUID, EncounterOptionChoice.Simulated, false); playerController.PostOrder(order); } } } yield break; }