1.6.0更新

This commit is contained in:
谦君
2026-01-06 03:00:02 +08:00
parent 1ad051cd6d
commit 9e7560cc4b
50 changed files with 2374 additions and 468 deletions

View File

@@ -109,7 +109,10 @@ const COMBAT_EFFECTS = {
* 计算一个单位对另一个单位造成的伤害
* 增强版:包含护盾弹回、重型武器穿透、装甲损坏累积
*/
const calculateDamage = (attacker: CombatUnit, defender: CombatUnit): { destroyed: number; damagedShield: number; armorDamageDealt: number } => {
const calculateDamage = (
attacker: CombatUnit,
defender: CombatUnit
): { destroyed: number; damagedShield: number; armorDamageDealt: number } => {
const attackPower = attacker.attack
// 使用当前护盾值(如果有),否则使用最大护盾
const defenderCurrentShield = defender.currentShield ?? defender.shield
@@ -157,14 +160,8 @@ const calculateDamage = (attacker: CombatUnit, defender: CombatUnit): { destroye
// 穿透护盾后对装甲造成损坏累积
if (remainingDamage > 0) {
armorDamageDealt = Math.min(
COMBAT_EFFECTS.ARMOR_DAMAGE_RATE,
COMBAT_EFFECTS.MAX_ARMOR_DAMAGE - (defender.armorDamage ?? 0)
)
defender.armorDamage = Math.min(
COMBAT_EFFECTS.MAX_ARMOR_DAMAGE,
(defender.armorDamage ?? 0) + armorDamageDealt
)
armorDamageDealt = Math.min(COMBAT_EFFECTS.ARMOR_DAMAGE_RATE, COMBAT_EFFECTS.MAX_ARMOR_DAMAGE - (defender.armorDamage ?? 0))
defender.armorDamage = Math.min(COMBAT_EFFECTS.MAX_ARMOR_DAMAGE, (defender.armorDamage ?? 0) + armorDamageDealt)
}
// 再消耗装甲
@@ -453,8 +450,24 @@ export const simulateBattle = (
} else if (defenderUnits.length === 0) {
winner = 'attacker'
} else {
// OGame原版规则6回合后双方都有剩余单位时判定为平局
winner = 'draw'
// 达到最大回合后双方都有剩余单位
// 如果是战斗到底模式(maxRounds > 6),根据剩余战力判定胜负
if (maxRounds > 6) {
// 计算剩余战力
const attackerPower = attackerUnits.reduce((sum, u) => sum + u.count * u.armor, 0)
const defenderPower = defenderUnits.reduce((sum, u) => sum + u.count * u.armor, 0)
// 战力差距超过20%判定胜负,否则平局
if (attackerPower > defenderPower * 1.2) {
winner = 'attacker'
} else if (defenderPower > attackerPower * 1.2) {
winner = 'defender'
} else {
winner = 'draw'
}
} else {
// OGame原版规则6回合后双方都有剩余单位时判定为平局
winner = 'draw'
}
}
return {