|
|
|
|
@@ -10,14 +10,12 @@ import {detectCustomWorldThemeMode} from './customWorldTheme';
|
|
|
|
|
|
|
|
|
|
function buildSchema(
|
|
|
|
|
input: AttributeSchemaGenerationInput,
|
|
|
|
|
schemaName: string,
|
|
|
|
|
slots: WorldAttributeSlot[],
|
|
|
|
|
): WorldAttributeSchema {
|
|
|
|
|
return {
|
|
|
|
|
id: `schema:${input.worldType.toLowerCase()}:${schemaName}`,
|
|
|
|
|
id: `schema:${input.worldType.toLowerCase()}:${input.worldName}`,
|
|
|
|
|
worldId: input.worldType === WorldType.CUSTOM ? `custom:${input.worldName}` : input.worldType,
|
|
|
|
|
schemaVersion: 1,
|
|
|
|
|
schemaName,
|
|
|
|
|
generatedFrom: {
|
|
|
|
|
worldType: input.worldType,
|
|
|
|
|
worldName: input.worldName,
|
|
|
|
|
@@ -40,62 +38,57 @@ function buildCustomThemeSlots(input: AttributeSchemaGenerationInput) {
|
|
|
|
|
|
|
|
|
|
if (themeMode === 'mythic') {
|
|
|
|
|
return {
|
|
|
|
|
schemaName: '叙境六维',
|
|
|
|
|
slots: [
|
|
|
|
|
{ slotId: 'axis_a', name: '体魄', definition: '承受正面压力与长期消耗的底子。', positiveSignals: ['稳固', '抗压'], negativeSignals: ['脆弱', '虚浮'], combatUseText: '扛住冲击、保持站位。', socialUseText: '给人可靠、能顶事的感觉。', explorationUseText: '在漫长旅途中维持可行动状态。' },
|
|
|
|
|
{ slotId: 'axis_b', name: '身法', definition: '换位、腾挪、抢时机与穿行环境的能力。', positiveSignals: ['灵动', '迅捷'], negativeSignals: ['迟滞', '笨拙'], combatUseText: '变线、闪避、抢位和追击。', socialUseText: '反应快,懂得顺势调整说法。', explorationUseText: '穿越复杂地形与危险通路。' },
|
|
|
|
|
{ slotId: 'axis_c', name: '识见', definition: '看清局势、拆解线索与判断轻重缓急的能力。', positiveSignals: ['洞察', '判断'], negativeSignals: ['误判', '迟钝'], combatUseText: '看穿敌方破绽与局势变化。', socialUseText: '识别真假、试探与隐藏立场。', explorationUseText: '整理线索、辨认路径与推断风险。' },
|
|
|
|
|
{ slotId: 'axis_d', name: '胆魄', definition: '在高压局势里依然敢于推进和拍板的力量。', positiveSignals: ['果断', '压场'], negativeSignals: ['退缩', '犹疑'], combatUseText: '顶着压力推进战局。', socialUseText: '在僵局里定调并逼出回应。', explorationUseText: '面对未知异象仍敢继续前探。' },
|
|
|
|
|
{ slotId: 'axis_e', name: '牵引', definition: '与人、物、线索和环境建立联动的能力。', positiveSignals: ['协同', '共鸣'], negativeSignals: ['脱节', '孤立'], combatUseText: '借协同和牵制形成连锁。', socialUseText: '建立合作、说服和互信。', explorationUseText: '从人情、物件和场景之间串起通路。' },
|
|
|
|
|
{ slotId: 'axis_f', name: '定力', definition: '在变化与消耗中稳住节奏、拉回状态的能力。', positiveSignals: ['稳定', '续航'], negativeSignals: ['失衡', '崩乱'], combatUseText: '久战不乱,能重新控住节奏。', socialUseText: '情绪稳定,不轻易被带偏。', explorationUseText: '在长线推进中持续保持判断和行动力。' },
|
|
|
|
|
{ slotId: 'axis_a', name: '体魄' },
|
|
|
|
|
{ slotId: 'axis_b', name: '身法' },
|
|
|
|
|
{ slotId: 'axis_c', name: '识见' },
|
|
|
|
|
{ slotId: 'axis_d', name: '胆魄' },
|
|
|
|
|
{ slotId: 'axis_e', name: '牵引' },
|
|
|
|
|
{ slotId: 'axis_f', name: '定力' },
|
|
|
|
|
] satisfies WorldAttributeSlot[],
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (themeMode === 'machina') {
|
|
|
|
|
return {
|
|
|
|
|
schemaName: '机潮六轴',
|
|
|
|
|
slots: [
|
|
|
|
|
{ slotId: 'axis_a', name: '机锋', definition: '承受硬碰撞与机械压力的结构强度。', positiveSignals: ['硬度', '结构'], negativeSignals: ['脆裂', '松散'], combatUseText: '扛住正面撞击与重压。', socialUseText: '给人可靠、稳固、难被撼动的感觉。', explorationUseText: '在高压、坍塌与工业险境中撑住阵脚。' },
|
|
|
|
|
{ slotId: 'axis_b', name: '步准', definition: '换位、校准、抢时机与精准位移的能力。', positiveSignals: ['校准', '位移'], negativeSignals: ['迟滞', '失准'], combatUseText: '快速转位、抢射界、控节奏。', socialUseText: '反应精确,不轻易露怯。', explorationUseText: '穿越机关、轨道与复杂装置。' },
|
|
|
|
|
{ slotId: 'axis_c', name: '算识', definition: '解析结构、演算路径、识别规律的能力。', positiveSignals: ['演算', '拆解'], negativeSignals: ['误算', '看不懂'], combatUseText: '读懂装置与敌方机制的薄弱点。', socialUseText: '判断局势、识别话术与利益结构。', explorationUseText: '解密、修复、校准与规划路径。' },
|
|
|
|
|
{ slotId: 'axis_d', name: '潮压', definition: '在高噪高压中强行推进局势的能力。', positiveSignals: ['推进', '压迫'], negativeSignals: ['退缩', '失控'], combatUseText: '顶着火力和混乱继续施压。', socialUseText: '在混乱场合里定调并逼出表态。', explorationUseText: '面对失控装置时敢于推进关键步骤。' },
|
|
|
|
|
{ slotId: 'axis_e', name: '协频', definition: '与同伴、器械、网络或环境建立协同的能力。', positiveSignals: ['协同', '接驳'], negativeSignals: ['脱节', '孤立'], combatUseText: '与队友和装置形成联动收益。', socialUseText: '建立合作、交换与稳定配合。', explorationUseText: '接驳系统、调和多方资源与线索。' },
|
|
|
|
|
{ slotId: 'axis_f', name: '续载', definition: '维持负载、稳定输出、长线运转的能力。', positiveSignals: ['稳载', '续航'], negativeSignals: ['过热', '断载'], combatUseText: '稳住循环、维持持续输出与可操作状态。', socialUseText: '显得沉着、持重、不轻易失衡。', explorationUseText: '在长时间高负荷环境里持续工作。' },
|
|
|
|
|
{ slotId: 'axis_a', name: '机锋' },
|
|
|
|
|
{ slotId: 'axis_b', name: '步准' },
|
|
|
|
|
{ slotId: 'axis_c', name: '算识' },
|
|
|
|
|
{ slotId: 'axis_d', name: '潮压' },
|
|
|
|
|
{ slotId: 'axis_e', name: '协频' },
|
|
|
|
|
{ slotId: 'axis_f', name: '续载' },
|
|
|
|
|
] satisfies WorldAttributeSlot[],
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (themeMode === 'tide') {
|
|
|
|
|
return {
|
|
|
|
|
schemaName: '潮境六脉',
|
|
|
|
|
slots: [
|
|
|
|
|
{ slotId: 'axis_a', name: '潮骨', definition: '扛住潮压与正面冲击的底子。', positiveSignals: ['承压', '稳'], negativeSignals: ['散', '弱'], combatUseText: '顶住正面浪涌与冲撞。', socialUseText: '给人能扛事的可靠感。', explorationUseText: '在风浪与湿重环境里稳住自己。' },
|
|
|
|
|
{ slotId: 'axis_b', name: '浪步', definition: '顺潮借势、换位穿行的能力。', positiveSignals: ['借势', '轻快'], negativeSignals: ['笨拙', '慢'], combatUseText: '借势滑开、切线、拉开距离。', socialUseText: '谈吐灵活,懂得顺势而为。', explorationUseText: '穿越港口、水路、雾区与复杂地形。' },
|
|
|
|
|
{ slotId: 'axis_c', name: '舟识', definition: '辨流向、识潮眼、看穿变化的能力。', positiveSignals: ['辨向', '识局'], negativeSignals: ['迷失', '误读'], combatUseText: '抓住潮势变化和敌人的失衡时机。', socialUseText: '看懂局势、试探真假与留白。', explorationUseText: '辨认水路、雾障、潮汐与遗留痕迹。' },
|
|
|
|
|
{ slotId: 'axis_d', name: '潮魄', definition: '在剧烈变化中仍敢推进的胆气。', positiveSignals: ['胆气', '压前'], negativeSignals: ['畏缩', '犹疑'], combatUseText: '借高压局势硬推突破口。', socialUseText: '在谈判或冲突里顶住对方气势。', explorationUseText: '面对陌生水域与异变仍敢向前。' },
|
|
|
|
|
{ slotId: 'axis_e', name: '契汐', definition: '与人、船、信物与约定形成牵引的能力。', positiveSignals: ['契合', '通人情'], negativeSignals: ['疏离', '难共鸣'], combatUseText: '借助协同与牵引打出连锁。', socialUseText: '善于结盟、安抚与做交换。', explorationUseText: '从航路、人情与旧约中打开局面。' },
|
|
|
|
|
{ slotId: 'axis_f', name: '回澜', definition: '在漫长消耗中回稳状态、续住节奏的能力。', positiveSignals: ['回稳', '续航'], negativeSignals: ['紊乱', '断流'], combatUseText: '久战不乱,能把节奏重新拉回手里。', socialUseText: '遇事沉静,不易失态。', explorationUseText: '在漫长远行与恶劣天气里保有余力。' },
|
|
|
|
|
{ slotId: 'axis_a', name: '潮骨' },
|
|
|
|
|
{ slotId: 'axis_b', name: '浪步' },
|
|
|
|
|
{ slotId: 'axis_c', name: '舟识' },
|
|
|
|
|
{ slotId: 'axis_d', name: '潮魄' },
|
|
|
|
|
{ slotId: 'axis_e', name: '契汐' },
|
|
|
|
|
{ slotId: 'axis_f', name: '回澜' },
|
|
|
|
|
] satisfies WorldAttributeSlot[],
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (themeMode === 'rift') {
|
|
|
|
|
return {
|
|
|
|
|
schemaName: '裂界六轴',
|
|
|
|
|
slots: [
|
|
|
|
|
{ slotId: 'axis_a', name: '界躯', definition: '承受裂界冲击与异压侵蚀的底子。', positiveSignals: ['承载', '抗压'], negativeSignals: ['脆弱', '崩裂'], combatUseText: '扛住高强度裂界冲击。', socialUseText: '让人感到能镇住危险局面。', explorationUseText: '在异压、失衡环境下维持完整。' },
|
|
|
|
|
{ slotId: 'axis_b', name: '裂步', definition: '穿梭边界、抢位、转场的能力。', positiveSignals: ['转场', '抢位'], negativeSignals: ['迟滞', '卡顿'], combatUseText: '借裂隙切位、抢身位与节奏。', socialUseText: '对局势变化响应很快。', explorationUseText: '穿越裂缝、断层与高危通路。' },
|
|
|
|
|
{ slotId: 'axis_c', name: '界识', definition: '识别边界规律、虚实与因果的能力。', positiveSignals: ['辨识', '推断'], negativeSignals: ['错判', '看不清'], combatUseText: '洞察异界规律和对手的真空点。', socialUseText: '看破隐藏立场与不完整真话。', explorationUseText: '解读旧迹、裂痕和禁域法则。' },
|
|
|
|
|
{ slotId: 'axis_d', name: '界压', definition: '在失衡局势中强行立住意志与推进力。', positiveSignals: ['压上去', '定调'], negativeSignals: ['动摇', '失措'], combatUseText: '顶住异变推进攻势。', socialUseText: '在高压博弈中逼出答案。', explorationUseText: '面对危险异象仍敢推开下一层。' },
|
|
|
|
|
{ slotId: 'axis_e', name: '缚契', definition: '与他者、异物、誓约建立束缚或联结的能力。', positiveSignals: ['联结', '束约'], negativeSignals: ['排斥', '难联动'], combatUseText: '借共鸣与束缚形成协同或压制。', socialUseText: '建立合作、誓约与安抚关系。', explorationUseText: '唤醒遗物、安抚异种、触发响应。' },
|
|
|
|
|
{ slotId: 'axis_f', name: '回脉', definition: '在紊乱环境中把自身重新拉回稳态的能力。', positiveSignals: ['回稳', '续住'], negativeSignals: ['失衡', '崩坏'], combatUseText: '抗住异压后迅速回到可战状态。', socialUseText: '情绪与气势都更稳。', explorationUseText: '在裂界侵蚀与长线压力里保持在线。' },
|
|
|
|
|
{ slotId: 'axis_a', name: '界躯' },
|
|
|
|
|
{ slotId: 'axis_b', name: '裂步' },
|
|
|
|
|
{ slotId: 'axis_c', name: '界识' },
|
|
|
|
|
{ slotId: 'axis_d', name: '界压' },
|
|
|
|
|
{ slotId: 'axis_e', name: '缚契' },
|
|
|
|
|
{ slotId: 'axis_f', name: '回脉' },
|
|
|
|
|
] satisfies WorldAttributeSlot[],
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
schemaName: '叙境六维',
|
|
|
|
|
slots: getTemplateWorldAttributeSchema(WorldType.WUXIA).slots,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
@@ -110,7 +103,7 @@ export function generateWorldAttributeSchema(input: AttributeSchemaGenerationInp
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const generated = buildCustomThemeSlots(input);
|
|
|
|
|
const schema = buildSchema(input, generated.schemaName, generated.slots);
|
|
|
|
|
const schema = buildSchema(input, generated.slots);
|
|
|
|
|
const issues = validateWorldAttributeSchema(schema);
|
|
|
|
|
|
|
|
|
|
if (issues.length > 0) {
|
|
|
|
|
|