Files
rebirthlife/src/engine/deathEngine.js
T

64 lines
2.0 KiB
JavaScript

// ==================== 死亡引擎 ====================
import { applyEffect } from './effectApplier.js';
export function checkDeath(state) {
// 1. age >= 100 → 寿终正寝
if (state.age >= 100) {
applyEffect({ type: 'die', reason: '寿终正寝' }, state);
return true;
}
// 2. age >= 60 && Math.random() < 0.1 → 年老体衰
if (state.age >= 60 && Math.random() < 0.1) {
applyEffect({ type: 'die', reason: '年老体衰' }, state);
return true;
}
// 3. stats.body <= 0 → 体弱身亡
if (state.stats.body <= 0) {
applyEffect({ type: 'die', reason: '体弱身亡' }, state);
return true;
}
// 4. age >= 45 && !invasion_military_resisted && Math.random() < 0.05 → 死于蛮族入侵
if (state.age >= 45 && !state.worldFlags.invasion_military_resisted && Math.random() < 0.05) {
applyEffect({ type: 'die', reason: '死于蛮族入侵' }, state);
return true;
}
// 5. age >= 50 && !invasion_spiritual_resisted && Math.random() < 0.05 → 被天魔吞噬
if (state.age >= 50 && !state.worldFlags.invasion_spiritual_resisted && Math.random() < 0.05) {
applyEffect({ type: 'die', reason: '被天魔吞噬' }, state);
return true;
}
// 6. age >= 55 && !invasion_political_resisted && Math.random() < 0.05 → 死于战乱
if (state.age >= 55 && !state.worldFlags.invasion_political_resisted && Math.random() < 0.05) {
applyEffect({ type: 'die', reason: '死于战乱' }, state);
return true;
}
return false;
}
export function processDeath(state, careerConfig) {
const metaGains = {};
for (const [careerId, career] of Object.entries(state.careers)) {
const cfg = careerConfig.careers.find(c => c.id === careerId);
if (!cfg) continue;
let totalExp = career.exp;
for (let i = 0; i < career.level; i++) {
totalExp += Math.floor(cfg.expCurve.base * Math.pow(cfg.expCurve.factor, i));
}
const gain = Math.floor(totalExp * 0.1);
state.metaExp[careerId] = (state.metaExp[careerId] || 0) + gain;
metaGains[careerId] = gain;
}
return { metaGains };
}