mirror of
https://github.com/setube/ogame-vue-ts.git
synced 2026-05-12 07:55:11 +08:00
1.6.0更新
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user