import { RealmMajor } from '../types/domain' export interface EnemyDef { id: string name: string realm: RealmMajor strength: number icon: string desc: string } export const ENEMIES: EnemyDef[] = [ { id: 'e-huiyuan', name: '灰狼王', realm: 'qi', strength: 0.8, icon: '狼', desc: '啸聚山林的妖兽头领,凶性难驯。' }, { id: 'e-tiebei', name: '铁背熊罴', realm: 'qi', strength: 1.1, icon: '熊', desc: '皮糙肉厚的山中猛兽,以力御敌。' }, { id: 'e-muche', name: '赤瞳木魅', realm: 'foundation', strength: 1.0, icon: '木', desc: '千年老树成精,嗜血成性。' }, { id: 'e-baiqi', name: '白骨修士', realm: 'foundation', strength: 1.2, icon: '骨', desc: '枯骨道人的傀儡余孽,邪气森森。' }, { id: 'e-huanhan', name: '幻寒螭', realm: 'core', strength: 1.15, icon: '螭', desc: '远古寒螭之遗种,吐息生霜。' }, { id: 'e-yeshen', name: '夜哭古影', realm: 'core', strength: 1.3, icon: '影', desc: '怨念凝结,闻见其声者神魂惑乱。' }, { id: 'e-jiaoyun', name: '焦云妖鹤', realm: 'nascent', strength: 1.2, icon: '鹤', desc: '焚山煮海的老妖,万兽避让。' }, { id: 'e-kuangzun', name: '堕墟魔尊', realm: 'spirit', strength: 1.5, icon: '魔', desc: '屠戮一族的魔道巨擘,举手投足皆天威。' } ] export interface MissionStageDef { kind: 'event' | 'combat' | 'resource' | 'boss' months: number title: string text?: { safe?: string; good?: string; bad?: string } enemyId?: string loot?: LootDef } export interface LootDef { resources: Record artifactChance: number techniqueChance: number beastcoreChance?: number /** 掉功法品阶上限(按秘境难度设定,防低阶秘境出四阶仙典) */ techGrades?: number[] } export interface MissionDef { id: string name: string region: string icon: string desc: string realmHint: RealmMajor minMembers: number maxMembers: number risk: number stages: MissionStageDef[] completionLoot: LootDef } export const MISSIONS: MissionDef[] = [ { id: 'm-anmoku', name: '暗墨林', region: '祖城西郊', icon: '林', desc: '灵气暗涌的密林,常有低阶妖兽出没,是子弟试炼的好去处。', realmHint: 'qi', minMembers: 1, maxMembers: 4, risk: 0.5, stages: [ { kind: 'event', months: 3, title: '深入林间', text: { safe: '一路无波,采得几株灵草压惊。', bad: '林深迷路,误入瘴气,队伍折损了体力。' } }, { kind: 'combat', months: 2, title: '遭遇袭击', enemyId: 'e-tiebei' }, { kind: 'resource', months: 2, title: '寻获残洞', loot: { resources: { lingcao: [30, 80], beastcore: [1, 3] }, artifactChance: 0.05, techniqueChance: 0.03 } } ], completionLoot: { resources: { lingcao: [20, 60], lingkuang: [5, 15], lingmu: [4, 12] }, artifactChance: 0.08, techniqueChance: 0.03, techGrades: [1, 2] } }, { id: 'm-xuangu', name: '玄冰谷', region: '北境寒渊', icon: '冰', desc: '寒潭彻骨,谷中灵泉可淬骨洗髓,也匿着护泉的凶兽。', realmHint: 'qi', minMembers: 1, maxMembers: 4, risk: 0.65, stages: [ { kind: 'resource', months: 3, title: '踏雪寻泉', loot: { resources: { lingkuang: [20, 50] }, artifactChance: 0.02, techniqueChance: 0.02 } }, { kind: 'combat', months: 2, title: '泉主现身', enemyId: 'e-huiyuan' }, { kind: 'boss', months: 2, title: '冰潭之下', enemyId: 'e-baiqi' } ], completionLoot: { resources: { lingkuang: [30, 70], beastcore: [2, 5], lingyu: [2, 6], shoupi: [3, 8] }, artifactChance: 0.15, techniqueChance: 0.06, techGrades: [2, 3] } }, { id: 'm-guzhan', name: '古战阵', region: '南陵荒原', icon: '战', desc: '上古两族交兵的战场,杀气千年未散,宝物与凶险兼存。', realmHint: 'foundation', minMembers: 2, maxMembers: 4, risk: 0.75, stages: [ { kind: 'event', months: 3, title: '踏勘阵眼', text: { safe: '寻得阵眼遗骸,得一部残简。', bad: '触动禁制,一行人负伤遁走。' } }, { kind: 'combat', months: 2, title: '怨灵缠身', enemyId: 'e-baiqi' }, { kind: 'combat', months: 2, title: '守阵铁骑', enemyId: 'e-huanhan' }, { kind: 'resource', months: 3, title: '挖开枯井', loot: { resources: { lingkuang: [40, 90], beastcore: [2, 6] }, artifactChance: 0.2, techniqueChance: 0.08 } } ], completionLoot: { resources: { lingkuang: [40, 90], beastcore: [2, 8], lingyu: [4, 8], shoupi: [4, 12] }, artifactChance: 0.22, techniqueChance: 0.1, techGrades: [2, 3] } }, { id: 'm-lingshan', name: '灵鹫山', region: '东海之滨', icon: '鹫', desc: '孤峰入云,鹫鸣震谷,山腹有灵矿与丹谷仙人遗泽。', realmHint: 'foundation', minMembers: 2, maxMembers: 4, risk: 0.85, stages: [ { kind: 'combat', months: 2, title: '登山遇鹫', enemyId: 'e-muche' }, { kind: 'resource', months: 3, title: '灵鹫巢穴', loot: { resources: { lingkuang: [50, 120], beastcore: [3, 8] }, artifactChance: 0.25, techniqueChance: 0.15 } }, { kind: 'boss', months: 3, title: '丹谷试剑', enemyId: 'e-yeshen' } ], completionLoot: { resources: { lingcao: [60, 140], beastcore: [4, 10] }, artifactChance: 0.3, techniqueChance: 0.2 } }, { id: 'm-tiankeng', name: '天地秘境', region: '传说天外', icon: '玄', desc: '百年一开的无上秘境,传言其中有登天造化。', realmHint: 'core', minMembers: 3, maxMembers: 5, risk: 1.0, stages: [ { kind: 'event', months: 2, title: '踏入秘境', text: { safe: '奇花异果满目,造化之气扑面。', bad: '紫霄神雷击碎阵法,众人惊魂不定。' } }, { kind: 'combat', months: 2, title: '守宫神兽', enemyId: 'e-huanhan' }, { kind: 'combat', months: 3, title: '天劫傀儡', enemyId: 'e-jiaoyun' }, { kind: 'boss', months: 3, title: '群雄夺宝', enemyId: 'e-kuangzun' } ], completionLoot: { resources: { lingcao: [100, 220], lingkuang: [80, 160], beastcore: [10, 22] }, artifactChance: 0.6, techniqueChance: 0.5 } } ] /** 0.1.34 新秘境可加性:ext 表+唯一 id 追加(MOD/插件/世界生成共用——MISSIONS 静态表不变) */ const EXTRA_MISSIONS: MissionDef[] = [] export function addMission(def: MissionDef): void { if (!EXTRA_MISSIONS.find((x) => x.id === def.id)) EXTRA_MISSIONS.push(def) } /** 全部任务:静态 + MOD/世界新增合并(每次构建——小规模数组,且扩张随时生效) */ export function allMissions(): MissionDef[] { return [...MISSIONS, ...EXTRA_MISSIONS] } /** 新秘境生成模板(万象归元·天下灵机偶现)——年首世界侧 chance 生出,皆可探索 */ export const WONDER_TEMPLATES: Omit[] = [ { region: '云梦大泽', icon: '泽', desc: '千年碧潭,隐有灵机吞吐——是仙家典籍中的洞天妙处。', realmHint: 'foundation', minMembers: 2, maxMembers: 4, risk: 0.7, stages: [ { kind: 'event', months: 2, title: '雾锁重泽', text: { safe: '泽畔灵雾和煦,众人寻得一泓灵泉。', bad: '泽中瘴气潜涌,队伍仓促退避。' } }, { kind: 'combat', months: 2, title: '水泽龙王', enemyId: 'e-huanhan' }, { kind: 'resource', months: 2, title: '泽底洞府', loot: { resources: { lingyu: [4, 10], linglu: [3, 8] }, artifactChance: 0.18, techniqueChance: 0.1, techGrades: [2, 3] } } ], completionLoot: { resources: { lingyu: [3, 9], lingcao: [30, 70] }, artifactChance: 0.2, techniqueChance: 0.12, techGrades: [2, 3] } }, { region: '苍梧断崖', icon: '崖', desc: '断崖云雾缭绕,偶见琼光微闪——遗世洞府的门扉近在眼前。', realmHint: 'qi', minMembers: 1, maxMembers: 3, risk: 0.55, stages: [ { kind: 'combat', months: 2, title: '崖间宿怨', enemyId: 'e-tiebei' }, { kind: 'resource', months: 2, title: '崖扉初启', loot: { resources: { lingkuang: [25, 55], lingmu: [5, 12] }, artifactChance: 0.1, techniqueChance: 0.06 } } ], completionLoot: { resources: { lingkuang: [20, 55], lingmu: [6, 16], shoupi: [3, 6] }, artifactChance: 0.12, techniqueChance: 0.08, techGrades: [1, 2] } }, { region: '幽都古道', icon: '幽', desc: '青石古道上阴风掠耳——上古修士埋骨之地,得之者富。', realmHint: 'core', minMembers: 3, maxMembers: 4, risk: 0.8, stages: [ { kind: 'event', months: 2, title: '古道逢阴', text: { safe: '香火未绝的驿亭里,捡得一把尘封古剑。', bad: '阴煞蚀骨,众人寒战如大病初愈。' } }, { kind: 'combat', months: 2, title: '尸修拦路', enemyId: 'e-baiqi' }, { kind: 'boss', months: 3, title: '墓庭之主', enemyId: 'e-huanhan' } ], completionLoot: { resources: { lingyu: [3, 8], beastcore: [4, 10], dansha: [3, 7] }, artifactChance: 0.3, techniqueChance: 0.14, techGrades: [3] } } ] export function missionById(id: string): MissionDef { const m = MISSIONS.find((x) => x.id === id) if (!m) throw new Error(`mission not found: ${id}`) return m }