Stabilize early campaign quick objectives

This commit is contained in:
2026-07-05 23:05:35 +09:00
parent 74d5a75ed9
commit aef9fb5d31
4 changed files with 48 additions and 30 deletions

View File

@@ -109,7 +109,7 @@ const earlyCampaignBattles = [
no: 6,
id: 'sixth-battle-jieqiao-relief',
selected: coreBrothers,
targets: ['jieqiao-guard-a', 'jieqiao-guard-b', 'jieqiao-archer-c', 'jieqiao-leader-qu-yi'],
targets: ['jieqiao-leader-qu-yi'],
protected: ['liu-bei']
},
{
@@ -1210,6 +1210,13 @@ async function playBattleWithoutDebugVictory(page, battle) {
function canTakeAttack(unit, attack, threat = protectedIds.has(unit.id) ? incomingThreat(unit, unit) : 0) {
if (!protectedIds.has(unit.id)) {
const kill = attack.preview.damage >= attack.target.hp;
if (unit.hp <= Math.ceil(unit.maxHp * 0.35)) {
return kill && threat <= Math.floor(unit.hp * 0.4);
}
if (unit.hp <= Math.ceil(unit.maxHp * 0.55)) {
return kill || threat <= Math.floor(unit.hp * 0.5);
}
return true;
}
const pressProtected = shouldPressProtected(unit);
@@ -1253,14 +1260,13 @@ async function playBattleWithoutDebugVictory(page, battle) {
.map((tile) =>
withUnitAt(unit, tile, () => {
const attack = attackChoice(unit);
return attack ? { tile, attack, threat: protectedIds.has(unit.id) ? incomingThreat(unit, tile) : 0 } : undefined;
const needsThreatCheck = protectedIds.has(unit.id) || unit.hp <= Math.ceil(unit.maxHp * 0.55);
return attack ? { tile, attack, threat: needsThreatCheck ? incomingThreat(unit, tile) : 0 } : undefined;
})
)
.filter(Boolean);
const preferredAttackingTiles = protectedIds.has(unit.id)
? attackingTiles.filter((entry) => canTakeAttack(unit, entry.attack, entry.threat))
: attackingTiles;
const preferredAttackingTiles = attackingTiles.filter((entry) => canTakeAttack(unit, entry.attack, entry.threat));
if (preferredAttackingTiles.length > 0 && (!protectedIds.has(unit.id) || unit.hp >= Math.ceil(unit.maxHp * 0.45))) {
return preferredAttackingTiles.sort((a, b) => {