public bool Doing() { TList <EmbattleQueue> queueList = GetPriorityQueue(); if (queueList.Count != 2) { return(false); } EmbattleQueue roleA = queueList[0]; EmbattleQueue roleD = queueList[1]; //原因:空阵BUG if (roleA.GeneralCount == 0 && roleD.GeneralCount == 0) { new BaseLog().SaveLog("战斗双方佣兵不存在"); return(false); } if (roleA.Role == EmbattleRole.RoleA) { if (roleA.GeneralCount > 0 && roleD.GeneralCount == 0) { return(true); } if (roleA.GeneralCount == 0 && roleD.GeneralCount > 0) { return(false); } } else if (roleA.Role == EmbattleRole.RoleD) { if (roleA.GeneralCount > 0 && roleD.GeneralCount == 0) { return(false); } if (roleA.GeneralCount == 0 && roleD.GeneralCount > 0) { return(true); } } queueList.Foreach(item => { var general = (CombatGeneral)item.NextGeneral(); if (general != null) { general.SelfAbilityInfoList.ForEach(SelfAbility => { SelfAbilityEffect selfAbilityEffect = new SelfAbilityEffect(); selfAbilityEffect.GeneralID = general.GeneralID; selfAbilityEffect.EffectID1 = SelfAbility.EffectID1; selfAbilityEffect.FntHeadID = SelfAbility.FntHeadID; selfAbilityEffect.IsIncrease = SelfAbility.IsIncrease; selfAbilityEffect.Position = general.Position; selfAbilityEffect.Role = item.Role.ToShort(); processContainer.SelfAbilityEffectList.Add(selfAbilityEffect); }); } }); //原因:闪避高时死锁 bool isCombatOut = false; int index = 0; while (roleA.HasCombat() && roleD.HasCombat()) { if (index >= MaxCount) { isCombatOut = true; //防止死锁 new BaseLog().SaveLog(string.Format("[{0}]战斗超出最大回合数,判攻方输", _combatType)); break; } //设置重新一轮 roleA.ResetGeneralQueue(); roleD.ResetGeneralQueue(); DoSingle(queueList); index++; } foreach (var item in priorityList) { if (item.Number > BoutNum) { BoutNum = item.Number; } //恢复血量 double resumeLife = ConfigEnvSet.GetDouble("Combat.ResumeLifeNum"); //领土战直接恢复100% if (_combatType == CombatType.Country && item.IsOver) { resumeLife = 1; } if ((_combatType == CombatType.Country && item.IsOver) || (_combatType != CombatType.Country && item.IsOver)) { if (item.Role == EmbattleRole.RoleA) { DoResumeLife(processContainer.AttackList, resumeLife); } else { DoResumeLife(processContainer.DefenseList, resumeLife); } } } ; //超出判断攻方输 if (isCombatOut && roleA.Role == EmbattleRole.RoleA) { return(false); } if (isCombatOut && roleA.Role == EmbattleRole.RoleD) { return(true); } return(!priorityList.Find(m => m.Role == EmbattleRole.RoleA).IsOver); }