{"allowContribute":false,"item":{"artifactHtml":"\u003cstyle\u003e:root{--paper:#fdf8f0;--ink:#1a1a2e;--ink2:#5c6573;--accent:#f59e0b;--accent2:#7c3aed;--soft:#fef3c7;--soft2:#ede9fe;--hair:#e5decc;--card:#ffffff;--ok:#059669;--warn:#d97706;--bad:#dc2626}:root[data-theme=\"dark\"]{--paper:#0f1420;--ink:#e6e9ef;--ink2:#8a94a6;--accent:#fbbf24;--accent2:#a78bfa;--soft:#1e2a4a;--soft2:#1e1b3a;--hair:#24324d;--card:#161e2e;--ok:#34d399;--warn:#fbbf24;--bad:#f87171}.doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:15px/1.75 system-ui,-apple-system,\"PingFang TC\",\"Noto Sans TC\",sans-serif;border-radius:16px}.eyebrow{font:700 11px ui-monospace,monospace;letter-spacing:.14em;color:var(--accent);text-transform:uppercase}.doc h1{font-size:22px;line-height:1.25;letter-spacing:-.02em;margin:8px 0 6px}.lede{color:var(--ink2);font-size:13px;line-height:1.6;margin:0 0 4px}.meta{font:12px ui-monospace,monospace;color:var(--ink2)}.hr{height:1px;background:var(--hair);margin:20px 0}h2{font-size:16px;margin:24px 0 10px;letter-spacing:-.01em;padding-left:10px;border-left:3px solid var(--accent)}h3{font-size:14px;margin:18px 0 8px}h4{font-size:13px;margin:14px 0 6px;color:var(--accent2)}p{margin:8px 0;color:var(--ink);line-height:1.75}.doc ul,.doc ol{margin:8px 0;padding-left:20px}.doc li{margin:4px 0;color:var(--ink);line-height:1.7}code{font:12px ui-monospace,monospace;background:var(--soft);padding:1px 6px;border-radius:4px}.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px;margin:12px 0}.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin:12px 0}.card{background:var(--card);border:1px solid var(--hair);border-radius:10px;padding:12px 14px}.card .k{font:700 12px ui-monospace;color:var(--accent);margin-bottom:4px}.card .v{font-size:13px;color:var(--ink2);line-height:1.6}.card .v strong{color:var(--ink)}.tag{display:inline-block;font:700 10px ui-monospace;letter-spacing:.08em;padding:2px 7px;border-radius:20px}.tag-o{background:var(--soft);color:var(--accent);border:1px solid var(--hair)}.tag-p{background:var(--soft2);color:var(--accent2);border:1px solid var(--hair)}table{width:100%;border-collapse:collapse;font-size:13px;margin:10px 0;display:block;overflow-x:auto;white-space:nowrap}th{font:700 11px ui-monospace;letter-spacing:.06em;color:var(--ink2);text-align:left;padding:8px 10px;border-bottom:2px solid var(--hair);white-space:nowrap}td{padding:8px 10px;border-bottom:1px solid var(--hair);color:var(--ink);white-space:nowrap;vertical-align:top}td.wrap{white-space:normal;min-width:160px}pre{background:var(--card);border:1px solid var(--hair);border-radius:8px;padding:12px 14px;overflow:auto;font:12px/1.6 ui-monospace,monospace;white-space:pre-wrap;word-break:break-all;margin:10px 0}.callout{display:flex;gap:12px;background:var(--soft);border-radius:10px;padding:12px 14px;margin:14px 0;font-size:13px;line-height:1.6}.callout .tag2{flex:none;font:700 11px ui-monospace;letter-spacing:.08em;color:var(--accent);padding-top:2px}.callout.purple{background:var(--soft2)}.flow{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:10px 0}.flow .node{background:var(--card);border:1px solid var(--hair);border-radius:8px;padding:6px 10px;font:12px ui-monospace}.flow .arr{color:var(--ink2);font-size:14px}.toc{background:var(--card);border:1px solid var(--hair);border-radius:10px;padding:14px 18px;margin:14px 0}.toc ol{margin:6px 0;padding-left:18px}.toc li{font-size:13px;margin:3px 0}.toc a{color:var(--accent2);text-decoration:none}@media(max-width:640px){.doc{padding:20px 18px}.doc h1{font-size:19px}}\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eISEKAI · 202692dbca791014d08ea047 · 交接文件\u003c/div\u003e\u003ch1\u003e異世界冒險插件 — 等級提升與敘述事件 完整技術文件\u003c/h1\u003e\u003cp class=\"lede\"\u003e涵蓋四軌等級體系、XP 曲線與所有經驗來源、戰力公式、以及「模板後備＋ LLM 自由造句」雙層敘述架構。Pack 為唯一真實來源（硬連結、無 fallback）。\u003c/p\u003e\u003cdiv class=\"meta\"\u003e原始碼：plugins/202692dbca791014d08ea047/frontend · Pack 範例：筆記/異世界冒險 Packs · 產生日：2026-08-27\u003c/div\u003e\u003c/header\u003e\u003cdiv class=\"hr\"\u003e\u003c/div\u003e\u003cdiv class=\"toc\"\u003e\u003cstrong style=\"font-size:13px\"\u003e目錄\u003c/strong\u003e\u003col\u003e\u003cli\u003e\u003ca href=\"#s1\"\u003e總覽 — 四軌＋Pack 硬連結\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s2\"\u003e等級體系與解鎖\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s3\"\u003eXP 曲線與升級函數\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s4\"\u003e經驗來源一覽（Tick／探索／章節）\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s5\"\u003e探索戰鬥 — 怪物、戰力與勝負\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s6\"\u003e敘述事件 — 雙層架構與 kind 系統\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s7\"\u003e各場景的敘述調用鏈\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s8\"\u003ePack 結構與熱更新\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s9\"\u003e存檔欄位與常見坑\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003ch2 id=\"s1\"\u003e一、總覽\u003c/h2\u003e\u003cdiv class=\"grid3\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e插件定位\u003c/div\u003e\u003cdiv class=\"v\"\u003e與 \u003cstrong\u003eCubeLV 深度綁定\u003c/strong\u003e的養成冒險：鍛造、修練、文字歷練與紙娃娃裝備。前端純展示，無後端 API。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e唯一真實來源\u003c/div\u003e\u003cdiv class=\"v\"\u003e所有數值皆來自 \u003cstrong\u003eNOTE Pack\u003c/strong\u003e（\u003ccode\u003eisekai: true\u003c/code\u003e 的 JSON）。\u003ccode\u003epackConfig.ts:assertPack()\u003c/code\u003e 缺欄位即\u003cstrong\u003e阻斷遊戲\u003c/strong\u003e，不回落舊值。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e資料流\u003c/div\u003e\u003cdiv class=\"v\"\u003ePack NOTE → \u003ccode\u003esaveModel.ts:tryParsePackNote()\u003c/code\u003e → \u003ccode\u003eIsekaiMainView:pack\u003c/code\u003e → 全部計算皆 \u003ccode\u003eassertPack(pack)\u003c/code\u003e 後取值。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"flow\"\u003e\u003cspan class=\"node\"\u003ePack NOTE\u003cbr\u003e(iseki:true)\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003egameDefs\u003cbr\u003e定義\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003epackConfig\u003cbr\u003e硬連結取值\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003esaveModel\u003cbr\u003e加經驗/升級\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003ecombatEngine\u003cbr\u003e戰鬥結算\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003enarrative\u003cbr\u003e造句\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003efeed/Log\u003c/span\u003e\u003c/div\u003e\u003ch2 id=\"s2\"\u003e二、等級體系與解鎖\u003c/h2\u003e\u003cp\u003e四條獨立經驗軌，互不共用 XP；武器軌內再分 6 把獨立等級。\u003c/p\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e軌道\u003c/th\u003e\u003cth\u003e對應欄位\u003c/th\u003e\u003cth\u003e等級來源\u003c/th\u003e\u003cth\u003e解鎖內容\u003c/th\u003e\u003cth\u003e備註\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e武器\u003c/span\u003e 6 軌\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eweapons[cat].lv / xp\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e鍛造 Tick、探索戰鬥、章節 Boss\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每把各 \u003cstrong\u003eLv.2 / 8 / 16\u003c/strong\u003e 解 3 招（見下表）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e獨立制；雙持不同分類時\u003cstrong\u003e同量雙軌\u003c/strong\u003e寫入\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-p\"\u003e屬性\u003c/span\u003e 3 選 1\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eattrLv / attrXp / attrChoice\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e員工留言 Tick、探索戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efire/ice/wind\u003c/code\u003e 各 Lv.2/8/16 共 9 招\u003c/td\u003e\u003ctd class=\"wrap\"\u003e初始隨機；\u003ccode\u003eheroLv≥20\u003c/code\u003e 可在 SkillView 切換\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e身體\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e綁定 \u003ccode\u003eheroLv\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e隨人物等級\u003c/td\u003e\u003ctd class=\"wrap\"\u003eLv.2 鋼軀、Lv.8 疾影步、Lv.16 調息\u003c/td\u003e\u003ctd class=\"wrap\"\u003e被動／位移／回魔\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-p\"\u003e生活\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003elifeLv / lifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e聊天室 Tick、探索資源/寶箱、章節\u003c/td\u003e\u003ctd class=\"wrap\"\u003eLv.5 採集術、Lv.15 煉金術\u003c/td\u003e\u003ctd class=\"wrap\"\u003e在聚落煙火中成長\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e人物\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eheroLv / heroXp / heroPoints / stats\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eCEO 對話 Tick、探索、章節\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每級 \u003ccode\u003e+perLv\u003c/code\u003e 點，里程碑 Lv.10/20…各 +10\u003c/td\u003e\u003ctd class=\"wrap\"\u003e卡章節門檻；點數分配 STR/DEX/INT/LUK\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e武器 6 軌 × 3 招（WEAPON_SKILLS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e武器\u003c/th\u003e\u003cth\u003e對應 Stat\u003c/th\u003e\u003cth\u003eLv.2\u003c/th\u003e\u003cth\u003eLv.8\u003c/th\u003e\u003cth\u003eLv.16\u003c/th\u003e\u003cth\u003ekind 分布\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e單手劍\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e迅斬\u003c/td\u003e\u003ctd\u003e旋刃\u003c/td\u003e\u003ctd\u003e破空斬\u003c/td\u003e\u003ctd\u003e全 assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e雙手大劍\u003c/td\u003e\u003ctd\u003eSTR\u003c/td\u003e\u003ctd\u003e重劈\u003c/td\u003e\u003ctd\u003e橫斷\u003c/td\u003e\u003ctd\u003e大地崩斬\u003c/td\u003e\u003ctd\u003eassault / control / assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e弓\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e連射\u003c/td\u003e\u003ctd\u003e貫穿狙擊\u003c/td\u003e\u003ctd\u003e散射牽制\u003c/td\u003e\u003ctd\u003eassault / assault / control\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e雙手法杖\u003c/td\u003e\u003ctd\u003eINT\u003c/td\u003e\u003ctd\u003e魔力彈\u003c/td\u003e\u003ctd\u003e魔力護盾\u003c/td\u003e\u003ctd\u003e震盪波\u003c/td\u003e\u003ctd\u003eassault / guard / control\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e匕首\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e迅影刺\u003c/td\u003e\u003ctd\u003e背刺\u003c/td\u003e\u003ctd\u003e幻影連襲\u003c/td\u003e\u003ctd\u003eevade / assault / assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e小盾\u003c/td\u003e\u003ctd\u003eSTR\u003c/td\u003e\u003ctd\u003e盾擊\u003c/td\u003e\u003ctd\u003e堅守格擋\u003c/td\u003e\u003ctd\u003e聖盾衝鋒\u003c/td\u003e\u003ctd\u003econtrol / guard / control\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e屬性 3 系 × 3 招（ATTR_SKILLS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e系\u003c/th\u003e\u003cth\u003eLv.2\u003c/th\u003e\u003cth\u003eLv.8\u003c/th\u003e\u003cth\u003eLv.16\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e火\u003c/td\u003e\u003ctd\u003e火焰彈\u003c/td\u003e\u003ctd\u003e烈焰衝擊\u003c/td\u003e\u003ctd\u003e焚燼風暴\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e冰\u003c/td\u003e\u003ctd\u003e冰錐術（緩速）\u003c/td\u003e\u003ctd\u003e霜凍新星\u003c/td\u003e\u003ctd\u003e絕對零度\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e風\u003c/td\u003e\u003ctd\u003e風刃\u003c/td\u003e\u003ctd\u003e疾風連斬\u003c/td\u003e\u003ctd\u003e龍捲風暴\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e章節門檻（CHAPTERS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e章節\u003c/th\u003e\u003cth\u003eneedHeroLv\u003c/th\u003e\u003cth\u003eBoss\u003c/th\u003e\u003cth\u003ebossPower\u003c/th\u003e\u003cth\u003e通關獎勵\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003ec1 綠野村的晨霧\u003c/td\u003e\u003ctd\u003e1\u003c/td\u003e\u003ctd\u003e霧林史萊姆王\u003c/td\u003e\u003ctd\u003e120\u003c/td\u003e\u003ctd\u003e金 55＋野莓/回血藥\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec2 鐵爐小徑\u003c/td\u003e\u003ctd\u003e5\u003c/td\u003e\u003ctd\u003e鐵爐守衛\u003c/td\u003e\u003ctd\u003e240\u003c/td\u003e\u003ctd\u003e金 130＋鐵礦/破舊單手劍\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec3 翠風迴廊\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e翠風鷹王\u003c/td\u003e\u003ctd\u003e380\u003c/td\u003e\u003ctd\u003e金 240＋風紋羽毛/風行藥水\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec4 暮色王城\u003c/td\u003e\u003ctd\u003e15\u003c/td\u003e\u003ctd\u003e暮色騎士長\u003c/td\u003e\u003ctd\u003e580\u003c/td\u003e\u003ctd\u003e金 380＋王城徽印/暮光結晶\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003eRULE\u003c/span\u003e\u003cdiv\u003e通關需\u003cstrong\u003e順序解鎖\u003c/strong\u003e：未通關前一章不可進下一章；\u003ccode\u003eheroLv\u003c/code\u003e 不到也不可進。Boss 採\u003cstrong\u003e戰力比對\u003c/strong\u003e（見第五節），非等級碾壓。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s3\"\u003e三、XP 曲線與升級函數\u003c/h2\u003e\u003ch3\u003e3.1 曲線公式（balance.xpCurves，首發 Pack 預設）\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e武器曲線\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eneed = 60 × (Lv+1)\u003csup\u003e1.3\u003c/sup\u003e\u003c/code\u003e\u003cbr\u003e例：Lv1→2 需 148；Lv7→8 約 691；Lv15→16 約 1500＋\u003cbr\u003e\u003cspan style=\"font-size:11px;color:var(--ink2)\"\u003epack: balance.xpCurves.weapon {base:60, pow:1.3}\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e通用曲線（人物/屬性/生活共用）\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eneed = 100 × (Lv+1)\u003csup\u003e1.4\u003c/sup\u003e\u003c/code\u003e\u003cbr\u003e例：Lv1→2 需 264；Lv9→10 約 1580\u003cbr\u003e\u003cspan style=\"font-size:11px;color:var(--ink2)\"\u003epack: balance.xpCurves.general {base:100, pow:1.4}\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cpre\u003epackConfig.ts\nneedXpForWeaponLv(pack, nextLv) → Math.round(base * nextLv^pow)\nneedXpGeneral(pack, nextLv)     → Math.round(base * nextLv^pow)\ncumulXp(pack, kind, target)     → 累加 1→target 所需總量\u003c/pre\u003e\u003ch3\u003e3.2 升級函數（saveModel.ts）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e函數\u003c/th\u003e\u003cth\u003e行為\u003c/th\u003e\u003cth\u003e升級後動作\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddWeaponXp(pack, save, wid, amt)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003eweapons[wid].xp += amt\u003c/code\u003e；while 超過 \u003ccode\u003eneedWL(lv+1)\u003c/code\u003e 就 \u003ccode\u003exp-=need; lv++\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e回 \u003ccode\u003e{leveled, newLv}\u003c/code\u003e；由呼叫方寫 feed\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddHeroXp(pack, save, amt)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e同上；升級時 \u003ccode\u003eheroPoints += perLv\u003c/code\u003e，若 \u003ccode\u003emilestones\u003c/code\u003e 含該 Lv 額外 \u003ccode\u003e+milestoneBonus\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e首發：perLv 5，里程碑 10/20/…100 各 +10\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddAttrXp / addLifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e通用曲線 while 升級\u003c/td\u003e\u003ctd class=\"wrap\"\u003e屬性若 \u003ccode\u003eattrChoice==null\u003c/code\u003e 自動選第一個可解鎖系\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout purple\"\u003e\u003cspan class=\"tag2\" style=\"color:var(--accent2)\"\u003eDUAL\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e雙持同量規則\u003c/strong\u003e：當 \u003ccode\u003eleftHand\u003c/code\u003e 與 \u003ccode\u003erightHand\u003c/code\u003e 為\u003cstrong\u003e不同單手分類\u003c/strong\u003e（例：匕首＋小盾）時，所有武器 XP 寫入會對兩把\u003cstrong\u003e同時各加同量\u003c/strong\u003e。雙手武器（大劍/弓/法杖）佔兩格鏡像，只算一軌。程式在 \u003ccode\u003eIsekaiMainView:onExplore / onEnterChapter / tick\u003c/code\u003e 三處皆同邏輯判斷 \u003ccode\u003eleftCat !== rightCat\u003c/code\u003e。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s4\"\u003e四、經驗來源一覽\u003c/h2\u003e\u003ch3\u003e4.1 Tick — 每 10 分鐘四軌被動（IsekaiMainView tick）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e軌道\u003c/th\u003e\u003cth\u003e偵測指標（與上次快照差值）\u003c/th\u003e\u003cth\u003e換算公式\u003c/th\u003e\u003cth\u003e上限\u003c/th\u003e\u003cth\u003e觸發間隔\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e鍛造（武器）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edFile\u003c/code\u003e 檔案增量、\u003ccode\u003edPackNote\u003c/code\u003e Pack NOTE 增量\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003emin(cap×forgeCapMul, dFile×perFile + dPackNote×perPackNote)\u003c/code\u003e\u003cbr\u003e首發：40/檔、80/篇，cap 180×4=720\u003c/td\u003e\u003ctd\u003e\u003ccode\u003ecaps.perTick × forgeCapMul\u003c/code\u003e\u003c/td\u003e\u003ctd rowspan=\"4\" style=\"vertical-align:middle\"\u003e600000ms\u003cbr\u003e(10 分鐘)\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e員工（屬性）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edAgentCount\u003c/code\u003e 則數、\u003ccode\u003edAgentChars\u003c/code\u003e 字數（排除 CEO 留言）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edAgentCount×perCount + floor(dAgentChars/bonusChars)\u003c/code\u003e\u003cbr\u003e首發：10/則 + 20字=1\u003c/td\u003e\u003ctd rowspan=\"3\" style=\"vertical-align:middle\"\u003e\u003ccode\u003ecaps.perTick\u003c/code\u003e\u003cbr\u003e(首發 180)\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eCEO（人物）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edCeoChars\u003c/code\u003e（chatBotSessions 字數）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efloor(dCeoChars / perChars)\u003c/code\u003e 首發 20字=1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e聊天（生活）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edChatChars\u003c/code\u003e（chatRoom 字數）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efloor(dChatChars / perChars)\u003c/code\u003e 首發 20字=1\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cpre\u003e快照：computeSnapshot() 讀 byTypeAll[FILE/NOTE/COMMENT] + chatBotSessions + chatRoom\n比對：lastTickSnapshot → curSnap 差值 → 四軌 XP → addWeaponXp/addAttrXp/addHeroXp/addLifeXp\n掉落：每條有增益的軌各算一次「一般小怪」掉落（金 3~7、裝備 20% 白80/綠17/橘3）\u003c/pre\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003eNOTE\u003c/span\u003e\u003cdiv\u003e首次 tick 若 \u003ccode\u003elastTickSnapshot==null\u003c/code\u003e 僅建立快照不給 XP；之後每 10 分鐘比對一次。無增益的 tick 仍更新 \u003ccode\u003elastCubLvCheckAt\u003c/code\u003e 與快照，避免重複計算。\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e4.2 探索 — 戰鬥／資源／寶箱（ChaptersView → IsekaiMainView:onExplore）\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e事件抽選 combatEngine:rollExploreEvent\u003c/div\u003e\u003cdiv class=\"v\"\u003e基礎 \u003cstrong\u003e戰鬥 60% / 資源 25% / 寶箱 15%\u003c/strong\u003e；\u003cstrong\u003eLUK 動態修正\u003c/strong\u003e：\u003ccode\u003ebonus = min(cap, LUK×perLuk)\u003c/code\u003e → \u003ccode\u003echest += bonus\u003c/code\u003e、\u003ccode\u003ecombat -= bonus×combatReduce\u003c/code\u003e；\u003cstrong\u003e保底\u003c/strong\u003e \u003ccode\u003epityThreshold 100\u003c/code\u003e 連續未戰鬥達標則強制戰鬥。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e每日上限\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eexplore.dailyLimit 50\u003c/code\u003e 次／日（跨章共用、隔日重置 \u003ccode\u003eexploreDailyDate\u003c/code\u003e）。達限即提示「明天再來」。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e事件\u003c/th\u003e\u003cth\u003e經驗\u003c/th\u003e\u003cth\u003e掉落\u003c/th\u003e\u003cth\u003e保底推進\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e見 4.3 戰鬥 XP 公式（四軌分流＋詞條加成）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e依怪物隊伍 \u003ccode\u003erollDrops\u003c/code\u003e：見 4.4\u003c/td\u003e\u003ctd\u003e若擊敗 Boss 則 pity 歸 0，否則 +1；敗退也 +1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e資源\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定 \u003ccode\u003ecombatXp.fixed.resource {hero:1, life:4}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e金 6–11＋隨機素材 1\u003c/td\u003e\u003ctd\u003epity +1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e寶箱\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定 \u003ccode\u003ecombatXp.fixed.chest {hero:1, life:2}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e金 10–24＋50% 素材\u003c/td\u003e\u003ctd\u003epity +1\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e4.3 戰鬥 XP 公式（combatEngine:computeExploreXp）\u003c/h3\u003e\u003cpre\u003e1. 基礎池：base = Σ pool[tier] × (1 + (n-1)×groupBonus)\n   首發 pool: boss 100 / elite 30 / small 5；groupBonus 0.15\n2. 四軌分流：weapon 50% / attr 20% / hero 20% / life 10%\n3. 定位加成：agile→weapon×1.3；caster→attr×1.5；tank→hero×1.5；assassin+爆擊→hero×1.2 \u0026 weapon×1.15\n4. 詞條加成：命中/閃避 +1 weapon；元素剋制 attr×1.5；爆擊/秒殺 hero×1.3；殘血狂暴 +2 weapon/+2 hero；被格擋 -1 weapon\n5. 敗退懲罰：全軌 ×defeatMul（首發 0.3）仍至少 1\u003c/pre\u003e\u003ch3\u003e4.4 掉落（combatEngine:rollDrops，Pack drops.table）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003etier\u003c/th\u003e\u003cth\u003e金幣\u003c/th\u003e\u003cth\u003e素材率\u003c/th\u003e\u003cth\u003e裝備\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003eBoss\u003c/td\u003e\u003ctd\u003e30 + rand 20\u003c/td\u003e\u003ctd\u003e100%\u003c/td\u003e\u003ctd\u003e必掉 2–3 件；tier 白0/綠50/橘50\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eElite\u003c/td\u003e\u003ctd\u003e12 + rand 8\u003c/td\u003e\u003ctd\u003e100%\u003c/td\u003e\u003ctd\u003e必掉 1–2 件；tier 白30/綠50/橘20\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eSmall\u003c/td\u003e\u003ctd\u003e3 + rand 5\u003c/td\u003e\u003ctd\u003e50%\u003c/td\u003e\u003ctd\u003e20% 機率掉 1 件；tier 白80/綠17/橘3\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003e裝備數值：\u003ccode\u003eequipBase[baseName] × tier.mul\u003c/code\u003e（首發 白1 / 綠1.5 / 橘2.0）；綠/橘額外 \u003ccode\u003ebonusStat\u003c/code\u003e 隨機 STR/DEX/INT/LUK 其一（綠+3 / 橘+5）。敗退僅給金幣（×0.3），不掉裝備/素材。\u003c/p\u003e\u003ch3\u003e4.5 章節 Boss 挑戰（onEnterChapter）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e項目\u003c/th\u003e\u003cth\u003e內容\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e勝負判定\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ecalcPlayerPower(pack, save) ≥ bossPower\u003c/code\u003e 即勝；否則提示戰力不足\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e經驗\u003c/td\u003e\u003ctd class=\"wrap\"\u003e勝：\u003ccode\u003elife +12\u003c/code\u003e、\u003ccode\u003eweapon +10\u003c/code\u003e（雙持同量）；敗：無\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e獎勵\u003c/td\u003e\u003ctd class=\"wrap\"\u003e首次通關 \u003ccode\u003egrantChapterRewards\u003c/code\u003e：金＋道具；重複通關僅提示「再次擊敗」\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"s5\"\u003e五、探索戰鬥 — 怪物、戰力與勝負\u003c/h2\u003e\u003ch3\u003e5.1 怪物矩陣（gameDefs:CHAPTER_MONSTER_POOLS）\u003c/h3\u003e\u003cp\u003e每章 1 Boss ＋1 Elite ＋5 Small（balance/agile/caster/tank/assassin 各一），六元素火/冰/風/雷/毒/光，環形剋制：火→風→雷→冰→毒→光→火，剋制 ×1.5 / 被剋 ×0.75。\u003c/p\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e章節\u003c/th\u003e\u003cth\u003eBoss\u003c/th\u003e\u003cth\u003eSmall 5 種\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003ec1 綠野\u003c/td\u003e\u003ctd\u003e霧林史萊姆王（毒）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e苔綠/跳跳/孢子/岩殼/暗影 史萊姆\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec2 鐵爐\u003c/td\u003e\u003ctd\u003e鐵爐守衛（火）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e工人傀儡/礦鼠/晶礦術士/重裝鐵衛/割喉者\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec3 翠風\u003c/td\u003e\u003ctd\u003e翠風鷹王（風）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雛鷹/鷹隼/風語祭司/磐岩鷹衛/夜梟刺鷹\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec4 暮色\u003c/td\u003e\u003ctd\u003e暮色騎士長（光）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e步兵/斥候/詠唱者/重騎/潛刃\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e5.2 遭遇組成（combatEngine:rollEncounter）\u003c/h3\u003e\u003cp\u003e隊長抽選：Boss 5% / Elite 20% / Small 75%；保底強制 Boss；Boss 當日已擊殺則降為 Elite。隊伍大小 1–5 隻，依 \u003ccode\u003ecalcPlayerPower\u003c/code\u003e 動態配平，使 \u003ccode\u003emonsterTotal ≈ playerPower×(0.95–1.10)\u003c/code\u003e。\u003c/p\u003e\u003ch3\u003e5.3 詞條（combatEngine:resolveCombatTags）\u003c/h3\u003e\u003cp\u003e每隻怪各擲：命中/閃避（依 \u003ccode\u003ehit/eva\u003c/code\u003e）、元素剋制/被剋、爆擊（依 \u003ccode\u003ecrit%\u003c/code\u003e）、火/毒/雷/冰 DOT（依 \u003ccode\u003eattrLv≥2\u003c/code\u003e 15–18%）、隊伍級 秒殺 12%、殘血狂暴 25%（限 Boss/Elite）。最多 8 條，探索取前 6 條。\u003c/p\u003e\u003ch3\u003e5.4 勝負（combatEngine:resolveExploreOutcome — C 混合）\u003c/h3\u003e\u003cpre\u003eplayerPower = heroLv×8 + weaponLv×6(雙持各半) + attrLv×4 + lifeLv×2 + Σstats + ΣequipBonus\nmonsterPower = Σ tierBase×powerFactor × (0.88–1.12)  // tierBase: small 40 / elite 80 / boss 120 × (bossPower/120)\ntagScore = Σ weight[tag]  // 命中+1 閃避+1.5 爆擊+2 剋制+2 秒殺+3 ... 狂暴-1 被閃-1.5 格擋-1 被剋-2\ntagMul = clamp(tagScore×0.04, -0.20, +0.20)\neffectivePower = playerPower × (1+tagMul)\nwin = effectivePower ≥ monsterPower  // 基礎 r≥1.10 必勝、r≤0.90 必敗，詞條僅在 ±20% 模糊帶內可翻盤\nflipped 標記用於提示「詞條逆轉 / 被詞條翻盤」\u003c/pre\u003e\u003ch2 id=\"s6\"\u003e六、敘述事件 — 雙層架構與 kind 系統\u003c/h2\u003e\u003ch3\u003e6.1 設計原則\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e同一意思、自由造句\u003c/div\u003e\u003cdiv class=\"v\"\u003e所有敘述皆\u003cstrong\u003e同一意思換句話說\u003c/strong\u003e，每次用詞不同，不套固定模板。由 LLM 負責變化，本地僅作\u003cstrong\u003e超時後備\u003c/strong\u003e。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e按 kind 選對描述\u003c/div\u003e\u003cdiv class=\"v\"\u003e技能帶 \u003ccode\u003ekind: assault/guard/evade/control/recover\u003c/code\u003e，敘述必須對應：攻擊=出擊/命中、\u003cstrong\u003e防禦=硬抗/格擋/化解\u003c/strong\u003e、閃避=閃開/位移、牽制=震退/凍結、回復=調息/回流。防禦招不可寫成制勝句。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e6.2 SkillKind 推斷（narrative.ts）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003ekind\u003c/th\u003e\u003cth\u003e含義\u003c/th\u003e\u003cth\u003e敘述指引（kindHint）\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eassault\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e攻擊\u003c/td\u003e\u003ctd class=\"wrap\"\u003e描述為出擊/命中/破綻/連擊\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eguard\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e防禦\u003c/td\u003e\u003ctd class=\"wrap\"\u003e硬抗/格擋/化解傷害、避免重創，而非主動出擊\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eevade\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e閃避位移\u003c/td\u003e\u003ctd class=\"wrap\"\u003e閃開/側身/拉開距離、順勢反制\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003econtrol\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e牽制控場\u003c/td\u003e\u003ctd class=\"wrap\"\u003e牽制/震退/緩速/凍結/牽引敵陣\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003erecover\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e回復調息\u003c/td\u003e\u003ctd class=\"wrap\"\u003e調勻氣息/回氣/魔力回流、穩住陣腳\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cpre\u003enarrative.ts: kindOf(skill) → 有 kind 直接取，無則由 desc 關鍵字正則推斷\nresolveSkillKind(name) → 遍歷 WEAPON/ATTR/BODY 找同名技能回 kind\nskillAgentHint(name) → \"技能『XX』屬 防禦向：...\" 供 prompt\nkindSentenceVariants / kindDefeatSentenceVariants → 依 kind 的勝/敗各 3–4 句後備\u003c/pre\u003e\u003ch3\u003e6.3 雙層敘述鏈\u003c/h3\u003e\u003cdiv class=\"flow\"\u003e\u003cspan class=\"node\" style=\"background:var(--soft)\"\u003e本地 Fallback\u003cbr\u003e立即寫入 feed/log\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\" style=\"background:var(--soft2);border-color:var(--accent2)\"\u003ecallPrompt isekai_feed\u003cbr\u003e6 秒超時\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003e成功：替換/追記\u003cbr\u003e失敗：保留 Fallback\u003c/span\u003e\u003c/div\u003e\u003cpre\u003eIsekaiMainView: agentLine(context, fallback)\n  → withTimeout(callPrompt({\n      action: 'isekai_feed',\n      system_prompt: '你是「異世界冒險」的即時旁白。用繁體中文以一句話（20-45字）生動描寫...'\n      + '① 同一意思自由造句、每次不同 ② 按 kind 選對描述 ③ 全部品類皆自由發揮 ④ 奇幻語氣、不要數值、不要洩機制',\n      prompt: context,\n      model: 'auto'\n    }).then(content.slice(0,80)), 6000, fallback)\u003c/pre\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e先寫 Fallback\u003c/strong\u003e：戰鬥 \u003ccode\u003ebuildCombatSentence / buildCombatDefeatSentence\u003c/code\u003e、資源 \u003ccode\u003ebuildResourceFallback\u003c/code\u003e、寶箱 \u003ccode\u003ebuildChestFallback\u003c/code\u003e、Tick 各軌 \u003ccode\u003etick*GainFragment / tick*LevelFragment\u003c/code\u003e 等立即寫入 \u003ccode\u003efeed\u003c/code\u003e 與 \u003ccode\u003eexploreLog\u003c/code\u003e，保證有文字。\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e再追 LLM\u003c/strong\u003e：\u003ccode\u003eagentLine(ctx, fallback).then(... persist)\u003c/code\u003e 非同步回來後\u003cstrong\u003e替換\u003c/strong\u003e最新一筆 \u003ccode\u003eexploreLog[0].msg\u003c/code\u003e 並 \u003ccode\u003epushFeed(line)\u003c/code\u003e；若 5 分鐘內同 tags 則改為 \u003ccode\u003e追記：line\u003c/code\u003e 避免刷屏。\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e超時 6 秒\u003c/strong\u003e直接保留 Fallback，不阻塞主流程。\u003c/li\u003e\u003c/ul\u003e\u003ch3\u003e6.4 本地模板庫（narrative.ts 完整清單）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e函數\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003cth\u003e句數\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epublishWeaponGain/Level\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e上架 +120（舊路徑保留）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e各 6 / 5 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epackSuccess/Fail Gain/Level\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e打包成功 +25 / 失敗 +8\u003c/td\u003e\u003ctd class=\"wrap\"\u003e各 6 / 4 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003echapter* / tick* Gain/Level Fragment\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e章節與 Tick 四軌的短片段，拼成 base\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每軌 5 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003etick*AgentHint\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e餵 LLM 的 6–8 種指引（武器/火/冰/風/身體/生活）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每軌 8 句隨機挑一\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ecombatTagToSentence / sentenceVariants\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e標籤→自然句（命中/爆擊/閃避/格擋/剋制/燃燒/中毒/感電/凍結/秒殺/狂暴）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每標籤 3–6 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ebuildCombatSentence / Defeat\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e戰鬥勝/敗完整句：開場 ＋ 3 條去重標籤句\u003c/td\u003e\u003ctd class=\"wrap\"\u003e開場各 4 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epickCombatSkillRef / chooseTickWeapon\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e依當前裝備與等級挑可用技能；雙持輪替\u003c/td\u003e\u003ctd\u003e—\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"s7\"\u003e七、各場景的敘述調用鏈\u003c/h2\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e場景\u003c/th\u003e\u003cth\u003eFallback\u003c/th\u003e\u003cth\u003eLLM prompt 要點\u003c/th\u003e\u003cth\u003e寫入位置\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003eTick 四軌\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003etickForge/Attr/Hero/Life Gain/Level Fragment\u003c/code\u003e 拼 \u003ccode\u003ebase\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e按軌分別帶 \u003ccode\u003etickWeapon/Attr/Hero/Life AgentHint\u003c/code\u003e；雙持時指引註明「只描述輪到的那把」\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildCombatSentence / Defeat\u003c/code\u003e（含 monsterNames、tags、skillName）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e帶 \u003ccode\u003eskillRef.kind\u003c/code\u003e 的 \u003ccode\u003ekindHint\u003c/code\u003e；勝/敗語氣相符；標註 питом/敗退/翻盤\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·資源\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildResourceFallback(chTitle)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e「於 XX 採集素材」自由造句 20–45字\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·寶箱\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildChestFallback(chTitle, gold)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e「發現並開啟寶箱」不提具體金幣數\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e章節 Boss\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003echapterLife/Weapon GainFragment\u003c/code\u003e 或 \u003ccode\u003echapterBaseFallback\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e帶前後 Lv 對比 \u003ccode\u003eXX LvA→LvB\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e商城/背包/裝備\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定句：\u003ccode\u003e商店購入 / 售出 / 裝備 slot ← name / 卸下\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e不走 LLM，固定句即時可讀\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout purple\"\u003e\u003cspan class=\"tag2\" style=\"color:var(--accent2)\"\u003eUI\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e事件紀錄\u003c/strong\u003e（BottomFeed）顯示 \u003ccode\u003efeed\u003c/code\u003e 前 5 筆；\u003cstrong\u003e探索日誌\u003c/strong\u003e（ChaptersView）顯示 \u003ccode\u003eexploreLog\u003c/code\u003e 前 80 筆，兩者皆由敘述句構成。戰鬥句含怪物名、技能名與詞條效果（元素剋制/爆擊等），敗退句以 \u003ccode\u003ekindDefeatSentenceVariants\u003c/code\u003e 避免把防禦招寫成制勝句。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s8\"\u003e八、Pack 結構與熱更新\u003c/h2\u003e\u003cp\u003e在「異世界冒險 Packs」資料夾新增 \u003ccode\u003eNOTE\u003c/code\u003e，內文貼 \u003ccode\u003e{\"isekai\": true, ...}\u003c/code\u003e JSON 即可。訂閱機制：優先讀 \u003ccode\u003epackNoteIds\u003c/code\u003e 清單，未指定則自動掃描所有含 \u003ccode\u003eisekai\u003c/code\u003e 的 NOTE。\u003c/p\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e可熱更新（不洗檔）\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003ecover / covers[6軌] / weaponIcons / equipHeroDesc / badges / title / links / chapters[].title/desc/rewardGold/rewardItems/bossName\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e鎖定（改 Pack 不生效）\u003c/div\u003e\u003cdiv class=\"v\"\u003e曲線 \u003ccode\u003expCurves.*\u003c/code\u003e 門檻 \u003ccode\u003eneedHeroLv / bossPower\u003c/code\u003e 技能定義 \u003ccode\u003eWEAPON/ATTR/BODY/LIFE_SKILLS\u003c/code\u003e 的等級門檻，避免舊 Pack 洗亂難度\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cpre\u003e首發 Pack 平衡摘要（可直接複製改值）：\nbalance: {\n  xpCurves: {weapon:{base:60,pow:1.3}, general:{base:100,pow:1.4}},\n  heroPoints: {perLv:5, milestones:[10,20..100], milestoneBonus:10, initial:8, initialStats:{STR:2,DEX:2,INT:2,LUK:2}, initialGold:160},\n  tick: {intervalMs:600000, caps:{perTick:180}, forge:{perFile:40,perPackNote:80}, agentWork:{perChars:60,perCount:10,bonusChars:20}, ceoChat:{perChars:20}, chatRoom:{perChars:20}},\n  explore: {rates:{combat:.6,resource:.25,chest:.15}, pityThreshold:100, dailyLimit:50, luck:{perLuk:.002,cap:.05,chestCap:.2,combatReduce:.6}},\n  combatXp: {pool:{boss:100,elite:30,small:5}, split:{weapon:.5,attr:.2,hero:.2,life:.1}, groupBonus:.15, defeatMul:.3, fixed:{resource:{hero:1,life:4},chest:{hero:1,life:2}}},\n  drops: {tier:{mul:{0:1,1:1.5,2:2}, bonus:{green:3,epic:5}}, economy:{shop:{white:80,green:800}, sell:{equip:{white:8,green:80,epic:320}}}}\n}\u003c/pre\u003e\u003ch2 id=\"s9\"\u003e九、存檔欄位與常見坑\u003c/h2\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eweapons[cat]\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003e{xp, lv, fails, successes, publishes}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e6 軌獨立；\u003ccode\u003efails/successes/publishes\u003c/code\u003e 為舊統計保留\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eheroLv/heroXp/heroPoints/stats\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e人物主等級與四維點數\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003estats\u003c/code\u003e 為已分配後的值；\u003ccode\u003eheroPoints\u003c/code\u003e 為剩餘可分配點\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eattrLv/attrXp/attrChoice\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e屬性等級與當前系\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003eattrChoice\u003c/code\u003e 為 fire/ice/wind 或 null\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003elifeLv/lifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e生活等級\u003c/td\u003e\u003ctd class=\"wrap\"\u003e由聊天與探索推進\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eequipSlots / equipSlotStats\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e8 格紙娃娃＋每格數值\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雙手武器鏡像於 leftHand/rightHand 同名；\u003ccode\u003eequipCategory/equipped\u003c/code\u003e 為舊相容欄位，寫入時自動同步\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003efeed / exploreLog\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e事件流\u003c/td\u003e\u003ctd class=\"wrap\"\u003efeed 80 條、exploreLog 80 條，皆為敘述句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eexplorePity / bossKillDate / exploreCount / exploreDailyCount+Date\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e探索節奏\u003c/td\u003e\u003ctd class=\"wrap\"\u003eBoss 每章每日限 1 次；pity 保底 100；每日 50 次跨章共用\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ebag / gold\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e背包與金幣\u003c/td\u003e\u003ctd class=\"wrap\"\u003e裝備件有 \u003ccode\u003eequipStats\u003c/code\u003e 隨件綁定，同名多件各有獨立 id\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003elastTickSnapshot / lastCubLvCheckAt / tickWeaponTurn / exploreWeaponTurn\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003eTick 與輪替\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雙持輪替各用一獨立 turn（mod 2），避免兩處互相搶位\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003e坑位\u003c/span\u003e\u003cdiv\u003e\u003cul style=\"margin:4px 0;padding-left:16px\"\u003e\u003cli\u003e\u003ccode\u003eequipCategory / equipped\u003c/code\u003e 為舊欄位，現以 \u003ccode\u003eequipSlots\u003c/code\u003e 為準；寫入前必 \u003ccode\u003esyncEquipCategory()\u003c/code\u003e 同步，否則切匕首仍漲單手劍。\u003c/li\u003e\u003cli\u003e雙手武器切單手時需\u003cstrong\u003e先返還鏡像件\u003c/strong\u003e再寫單格，否則背包會多一件。\u003c/li\u003e\u003cli\u003eTick 與探索的雙持輪替分別用 \u003ccode\u003etickWeaponTurn / exploreWeaponTurn\u003c/code\u003e，不可共用。\u003c/li\u003e\u003cli\u003ePack 缺欄位會\u003cstrong\u003e直接阻斷\u003c/strong\u003e（assertPack 拋錯），不要給 fallback。\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"hr\"\u003e\u003c/div\u003e\u003cp style=\"color:var(--ink2);font-size:12px;line-height:1.6\"\u003e原始碼索引：\u003ccode\u003egameDefs.ts\u003c/code\u003e 定義武器/屬性/身體/生活/章節/元素/怪物；\u003ccode\u003epackConfig.ts\u003c/code\u003e 硬連結 Pack 與曲線；\u003ccode\u003esaveModel.ts\u003c/code\u003e 存檔與 addXp；\u003ccode\u003ecombatEngine.ts\u003c/code\u003e 遭遇/詞條/戰力/掉落；\u003ccode\u003enarrative.ts\u003c/code\u003e 全部敘述模板與 kind；\u003ccode\u003eIsekaiMainView.tsx\u003c/code\u003e 四軌 tick、探索、章節、商城與 agentLine 調度；\u003ccode\u003eBottomFeed.tsx\u003c/code\u003e 事件紀錄 UI。Pack 範例與製作說明見「異世界冒險 Packs」資料夾兩篇 NOTE。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003cdiv class=\"hr\"\u003e\u003c/div\u003e\u003cdiv class=\"toc\"\u003e\u003cstrong style=\"font-size:13px\"\u003e目錄\u003c/strong\u003e\u003col\u003e\u003cli\u003e\u003ca href=\"#s1\"\u003e總覽 — 四軌＋Pack 硬連結\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s2\"\u003e等級體系與解鎖\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s3\"\u003eXP 曲線與升級函數\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s4\"\u003e經驗來源一覽（Tick／探索／章節）\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s5\"\u003e探索戰鬥 — 怪物、戰力與勝負\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s6\"\u003e敘述事件 — 雙層架構與 kind 系統\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s7\"\u003e各場景的敘述調用鏈\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s8\"\u003ePack 結構與熱更新\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s9\"\u003e存檔欄位與常見坑\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003ch2 id=\"s1\"\u003e一、總覽\u003c/h2\u003e\u003cdiv class=\"grid3\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e插件定位\u003c/div\u003e\u003cdiv class=\"v\"\u003e與 \u003cstrong\u003eCubeLV 深度綁定\u003c/strong\u003e的養成冒險：鍛造、修練、文字歷練與紙娃娃裝備。前端純展示，無後端 API。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e唯一真實來源\u003c/div\u003e\u003cdiv class=\"v\"\u003e所有數值皆來自 \u003cstrong\u003eNOTE Pack\u003c/strong\u003e（\u003ccode\u003eisekai: true\u003c/code\u003e 的 JSON）。\u003ccode\u003epackConfig.ts:assertPack()\u003c/code\u003e 缺欄位即\u003cstrong\u003e阻斷遊戲\u003c/strong\u003e，不回落舊值。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e資料流\u003c/div\u003e\u003cdiv class=\"v\"\u003ePack NOTE → \u003ccode\u003esaveModel.ts:tryParsePackNote()\u003c/code\u003e → \u003ccode\u003eIsekaiMainView:pack\u003c/code\u003e → 全部計算皆 \u003ccode\u003eassertPack(pack)\u003c/code\u003e 後取值。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"flow\"\u003e\u003cspan class=\"node\"\u003ePack NOTE\u003cbr\u003e(iseki:true)\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003egameDefs\u003cbr\u003e定義\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003epackConfig\u003cbr\u003e硬連結取值\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003esaveModel\u003cbr\u003e加經驗/升級\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003ecombatEngine\u003cbr\u003e戰鬥結算\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003enarrative\u003cbr\u003e造句\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003efeed/Log\u003c/span\u003e\u003c/div\u003e\u003ch2 id=\"s2\"\u003e二、等級體系與解鎖\u003c/h2\u003e\u003cp\u003e四條獨立經驗軌，互不共用 XP；武器軌內再分 6 把獨立等級。\u003c/p\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e軌道\u003c/th\u003e\u003cth\u003e對應欄位\u003c/th\u003e\u003cth\u003e等級來源\u003c/th\u003e\u003cth\u003e解鎖內容\u003c/th\u003e\u003cth\u003e備註\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e武器\u003c/span\u003e 6 軌\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eweapons[cat].lv / xp\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e鍛造 Tick、探索戰鬥、章節 Boss\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每把各 \u003cstrong\u003eLv.2 / 8 / 16\u003c/strong\u003e 解 3 招（見下表）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e獨立制；雙持不同分類時\u003cstrong\u003e同量雙軌\u003c/strong\u003e寫入\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-p\"\u003e屬性\u003c/span\u003e 3 選 1\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eattrLv / attrXp / attrChoice\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e員工留言 Tick、探索戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efire/ice/wind\u003c/code\u003e 各 Lv.2/8/16 共 9 招\u003c/td\u003e\u003ctd class=\"wrap\"\u003e初始隨機；\u003ccode\u003eheroLv≥20\u003c/code\u003e 可在 SkillView 切換\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e身體\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e綁定 \u003ccode\u003eheroLv\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e隨人物等級\u003c/td\u003e\u003ctd class=\"wrap\"\u003eLv.2 鋼軀、Lv.8 疾影步、Lv.16 調息\u003c/td\u003e\u003ctd class=\"wrap\"\u003e被動／位移／回魔\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-p\"\u003e生活\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003elifeLv / lifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e聊天室 Tick、探索資源/寶箱、章節\u003c/td\u003e\u003ctd class=\"wrap\"\u003eLv.5 採集術、Lv.15 煉金術\u003c/td\u003e\u003ctd class=\"wrap\"\u003e在聚落煙火中成長\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e人物\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eheroLv / heroXp / heroPoints / stats\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eCEO 對話 Tick、探索、章節\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每級 \u003ccode\u003e+perLv\u003c/code\u003e 點，里程碑 Lv.10/20…各 +10\u003c/td\u003e\u003ctd class=\"wrap\"\u003e卡章節門檻；點數分配 STR/DEX/INT/LUK\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e武器 6 軌 × 3 招（WEAPON_SKILLS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e武器\u003c/th\u003e\u003cth\u003e對應 Stat\u003c/th\u003e\u003cth\u003eLv.2\u003c/th\u003e\u003cth\u003eLv.8\u003c/th\u003e\u003cth\u003eLv.16\u003c/th\u003e\u003cth\u003ekind 分布\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e單手劍\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e迅斬\u003c/td\u003e\u003ctd\u003e旋刃\u003c/td\u003e\u003ctd\u003e破空斬\u003c/td\u003e\u003ctd\u003e全 assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e雙手大劍\u003c/td\u003e\u003ctd\u003eSTR\u003c/td\u003e\u003ctd\u003e重劈\u003c/td\u003e\u003ctd\u003e橫斷\u003c/td\u003e\u003ctd\u003e大地崩斬\u003c/td\u003e\u003ctd\u003eassault / control / assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e弓\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e連射\u003c/td\u003e\u003ctd\u003e貫穿狙擊\u003c/td\u003e\u003ctd\u003e散射牽制\u003c/td\u003e\u003ctd\u003eassault / assault / control\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e雙手法杖\u003c/td\u003e\u003ctd\u003eINT\u003c/td\u003e\u003ctd\u003e魔力彈\u003c/td\u003e\u003ctd\u003e魔力護盾\u003c/td\u003e\u003ctd\u003e震盪波\u003c/td\u003e\u003ctd\u003eassault / guard / control\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e匕首\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e迅影刺\u003c/td\u003e\u003ctd\u003e背刺\u003c/td\u003e\u003ctd\u003e幻影連襲\u003c/td\u003e\u003ctd\u003eevade / assault / assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e小盾\u003c/td\u003e\u003ctd\u003eSTR\u003c/td\u003e\u003ctd\u003e盾擊\u003c/td\u003e\u003ctd\u003e堅守格擋\u003c/td\u003e\u003ctd\u003e聖盾衝鋒\u003c/td\u003e\u003ctd\u003econtrol / guard / control\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e屬性 3 系 × 3 招（ATTR_SKILLS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e系\u003c/th\u003e\u003cth\u003eLv.2\u003c/th\u003e\u003cth\u003eLv.8\u003c/th\u003e\u003cth\u003eLv.16\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e火\u003c/td\u003e\u003ctd\u003e火焰彈\u003c/td\u003e\u003ctd\u003e烈焰衝擊\u003c/td\u003e\u003ctd\u003e焚燼風暴\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e冰\u003c/td\u003e\u003ctd\u003e冰錐術（緩速）\u003c/td\u003e\u003ctd\u003e霜凍新星\u003c/td\u003e\u003ctd\u003e絕對零度\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e風\u003c/td\u003e\u003ctd\u003e風刃\u003c/td\u003e\u003ctd\u003e疾風連斬\u003c/td\u003e\u003ctd\u003e龍捲風暴\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e章節門檻（CHAPTERS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e章節\u003c/th\u003e\u003cth\u003eneedHeroLv\u003c/th\u003e\u003cth\u003eBoss\u003c/th\u003e\u003cth\u003ebossPower\u003c/th\u003e\u003cth\u003e通關獎勵\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003ec1 綠野村的晨霧\u003c/td\u003e\u003ctd\u003e1\u003c/td\u003e\u003ctd\u003e霧林史萊姆王\u003c/td\u003e\u003ctd\u003e120\u003c/td\u003e\u003ctd\u003e金 55＋野莓/回血藥\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec2 鐵爐小徑\u003c/td\u003e\u003ctd\u003e5\u003c/td\u003e\u003ctd\u003e鐵爐守衛\u003c/td\u003e\u003ctd\u003e240\u003c/td\u003e\u003ctd\u003e金 130＋鐵礦/破舊單手劍\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec3 翠風迴廊\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e翠風鷹王\u003c/td\u003e\u003ctd\u003e380\u003c/td\u003e\u003ctd\u003e金 240＋風紋羽毛/風行藥水\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec4 暮色王城\u003c/td\u003e\u003ctd\u003e15\u003c/td\u003e\u003ctd\u003e暮色騎士長\u003c/td\u003e\u003ctd\u003e580\u003c/td\u003e\u003ctd\u003e金 380＋王城徽印/暮光結晶\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003eRULE\u003c/span\u003e\u003cdiv\u003e通關需\u003cstrong\u003e順序解鎖\u003c/strong\u003e：未通關前一章不可進下一章；\u003ccode\u003eheroLv\u003c/code\u003e 不到也不可進。Boss 採\u003cstrong\u003e戰力比對\u003c/strong\u003e（見第五節），非等級碾壓。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s3\"\u003e三、XP 曲線與升級函數\u003c/h2\u003e\u003ch3\u003e3.1 曲線公式（balance.xpCurves，首發 Pack 預設）\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e武器曲線\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eneed = 60 × (Lv+1)\u003csup\u003e1.3\u003c/sup\u003e\u003c/code\u003e\u003cbr\u003e例：Lv1→2 需 148；Lv7→8 約 691；Lv15→16 約 1500＋\u003cbr\u003e\u003cspan style=\"font-size:11px;color:var(--ink2)\"\u003epack: balance.xpCurves.weapon {base:60, pow:1.3}\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e通用曲線（人物/屬性/生活共用）\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eneed = 100 × (Lv+1)\u003csup\u003e1.4\u003c/sup\u003e\u003c/code\u003e\u003cbr\u003e例：Lv1→2 需 264；Lv9→10 約 1580\u003cbr\u003e\u003cspan style=\"font-size:11px;color:var(--ink2)\"\u003epack: balance.xpCurves.general {base:100, pow:1.4}\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cpre\u003epackConfig.ts\nneedXpForWeaponLv(pack, nextLv) → Math.round(base * nextLv^pow)\nneedXpGeneral(pack, nextLv)     → Math.round(base * nextLv^pow)\ncumulXp(pack, kind, target)     → 累加 1→target 所需總量\u003c/pre\u003e\u003ch3\u003e3.2 升級函數（saveModel.ts）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e函數\u003c/th\u003e\u003cth\u003e行為\u003c/th\u003e\u003cth\u003e升級後動作\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddWeaponXp(pack, save, wid, amt)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003eweapons[wid].xp += amt\u003c/code\u003e；while 超過 \u003ccode\u003eneedWL(lv+1)\u003c/code\u003e 就 \u003ccode\u003exp-=need; lv++\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e回 \u003ccode\u003e{leveled, newLv}\u003c/code\u003e；由呼叫方寫 feed\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddHeroXp(pack, save, amt)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e同上；升級時 \u003ccode\u003eheroPoints += perLv\u003c/code\u003e，若 \u003ccode\u003emilestones\u003c/code\u003e 含該 Lv 額外 \u003ccode\u003e+milestoneBonus\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e首發：perLv 5，里程碑 10/20/…100 各 +10\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddAttrXp / addLifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e通用曲線 while 升級\u003c/td\u003e\u003ctd class=\"wrap\"\u003e屬性若 \u003ccode\u003eattrChoice==null\u003c/code\u003e 自動選第一個可解鎖系\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout purple\"\u003e\u003cspan class=\"tag2\" style=\"color:var(--accent2)\"\u003eDUAL\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e雙持同量規則\u003c/strong\u003e：當 \u003ccode\u003eleftHand\u003c/code\u003e 與 \u003ccode\u003erightHand\u003c/code\u003e 為\u003cstrong\u003e不同單手分類\u003c/strong\u003e（例：匕首＋小盾）時，所有武器 XP 寫入會對兩把\u003cstrong\u003e同時各加同量\u003c/strong\u003e。雙手武器（大劍/弓/法杖）佔兩格鏡像，只算一軌。程式在 \u003ccode\u003eIsekaiMainView:onExplore / onEnterChapter / tick\u003c/code\u003e 三處皆同邏輯判斷 \u003ccode\u003eleftCat !== rightCat\u003c/code\u003e。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s4\"\u003e四、經驗來源一覽\u003c/h2\u003e\u003ch3\u003e4.1 Tick — 每 10 分鐘四軌被動（IsekaiMainView tick）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e軌道\u003c/th\u003e\u003cth\u003e偵測指標（與上次快照差值）\u003c/th\u003e\u003cth\u003e換算公式\u003c/th\u003e\u003cth\u003e上限\u003c/th\u003e\u003cth\u003e觸發間隔\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e鍛造（武器）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edFile\u003c/code\u003e 檔案增量、\u003ccode\u003edPackNote\u003c/code\u003e Pack NOTE 增量\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003emin(cap×forgeCapMul, dFile×perFile + dPackNote×perPackNote)\u003c/code\u003e\u003cbr\u003e首發：40/檔、80/篇，cap 180×4=720\u003c/td\u003e\u003ctd\u003e\u003ccode\u003ecaps.perTick × forgeCapMul\u003c/code\u003e\u003c/td\u003e\u003ctd rowspan=\"4\" style=\"vertical-align:middle\"\u003e600000ms\u003cbr\u003e(10 分鐘)\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e員工（屬性）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edAgentCount\u003c/code\u003e 則數、\u003ccode\u003edAgentChars\u003c/code\u003e 字數（排除 CEO 留言）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edAgentCount×perCount + floor(dAgentChars/bonusChars)\u003c/code\u003e\u003cbr\u003e首發：10/則 + 20字=1\u003c/td\u003e\u003ctd rowspan=\"3\" style=\"vertical-align:middle\"\u003e\u003ccode\u003ecaps.perTick\u003c/code\u003e\u003cbr\u003e(首發 180)\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eCEO（人物）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edCeoChars\u003c/code\u003e（chatBotSessions 字數）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efloor(dCeoChars / perChars)\u003c/code\u003e 首發 20字=1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e聊天（生活）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edChatChars\u003c/code\u003e（chatRoom 字數）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efloor(dChatChars / perChars)\u003c/code\u003e 首發 20字=1\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cpre\u003e快照：computeSnapshot() 讀 byTypeAll[FILE/NOTE/COMMENT] + chatBotSessions + chatRoom\n比對：lastTickSnapshot → curSnap 差值 → 四軌 XP → addWeaponXp/addAttrXp/addHeroXp/addLifeXp\n掉落：每條有增益的軌各算一次「一般小怪」掉落（金 3~7、裝備 20% 白80/綠17/橘3）\u003c/pre\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003eNOTE\u003c/span\u003e\u003cdiv\u003e首次 tick 若 \u003ccode\u003elastTickSnapshot==null\u003c/code\u003e 僅建立快照不給 XP；之後每 10 分鐘比對一次。無增益的 tick 仍更新 \u003ccode\u003elastCubLvCheckAt\u003c/code\u003e 與快照，避免重複計算。\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e4.2 探索 — 戰鬥／資源／寶箱（ChaptersView → IsekaiMainView:onExplore）\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e事件抽選 combatEngine:rollExploreEvent\u003c/div\u003e\u003cdiv class=\"v\"\u003e基礎 \u003cstrong\u003e戰鬥 60% / 資源 25% / 寶箱 15%\u003c/strong\u003e；\u003cstrong\u003eLUK 動態修正\u003c/strong\u003e：\u003ccode\u003ebonus = min(cap, LUK×perLuk)\u003c/code\u003e → \u003ccode\u003echest += bonus\u003c/code\u003e、\u003ccode\u003ecombat -= bonus×combatReduce\u003c/code\u003e；\u003cstrong\u003e保底\u003c/strong\u003e \u003ccode\u003epityThreshold 100\u003c/code\u003e 連續未戰鬥達標則強制戰鬥。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e每日上限\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eexplore.dailyLimit 50\u003c/code\u003e 次／日（跨章共用、隔日重置 \u003ccode\u003eexploreDailyDate\u003c/code\u003e）。達限即提示「明天再來」。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e事件\u003c/th\u003e\u003cth\u003e經驗\u003c/th\u003e\u003cth\u003e掉落\u003c/th\u003e\u003cth\u003e保底推進\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e見 4.3 戰鬥 XP 公式（四軌分流＋詞條加成）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e依怪物隊伍 \u003ccode\u003erollDrops\u003c/code\u003e：見 4.4\u003c/td\u003e\u003ctd\u003e若擊敗 Boss 則 pity 歸 0，否則 +1；敗退也 +1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e資源\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定 \u003ccode\u003ecombatXp.fixed.resource {hero:1, life:4}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e金 6–11＋隨機素材 1\u003c/td\u003e\u003ctd\u003epity +1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e寶箱\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定 \u003ccode\u003ecombatXp.fixed.chest {hero:1, life:2}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e金 10–24＋50% 素材\u003c/td\u003e\u003ctd\u003epity +1\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e4.3 戰鬥 XP 公式（combatEngine:computeExploreXp）\u003c/h3\u003e\u003cpre\u003e1. 基礎池：base = Σ pool[tier] × (1 + (n-1)×groupBonus)\n   首發 pool: boss 100 / elite 30 / small 5；groupBonus 0.15\n2. 四軌分流：weapon 50% / attr 20% / hero 20% / life 10%\n3. 定位加成：agile→weapon×1.3；caster→attr×1.5；tank→hero×1.5；assassin+爆擊→hero×1.2 \u0026amp; weapon×1.15\n4. 詞條加成：命中/閃避 +1 weapon；元素剋制 attr×1.5；爆擊/秒殺 hero×1.3；殘血狂暴 +2 weapon/+2 hero；被格擋 -1 weapon\n5. 敗退懲罰：全軌 ×defeatMul（首發 0.3）仍至少 1\u003c/pre\u003e\u003ch3\u003e4.4 掉落（combatEngine:rollDrops，Pack drops.table）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003etier\u003c/th\u003e\u003cth\u003e金幣\u003c/th\u003e\u003cth\u003e素材率\u003c/th\u003e\u003cth\u003e裝備\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003eBoss\u003c/td\u003e\u003ctd\u003e30 + rand 20\u003c/td\u003e\u003ctd\u003e100%\u003c/td\u003e\u003ctd\u003e必掉 2–3 件；tier 白0/綠50/橘50\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eElite\u003c/td\u003e\u003ctd\u003e12 + rand 8\u003c/td\u003e\u003ctd\u003e100%\u003c/td\u003e\u003ctd\u003e必掉 1–2 件；tier 白30/綠50/橘20\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eSmall\u003c/td\u003e\u003ctd\u003e3 + rand 5\u003c/td\u003e\u003ctd\u003e50%\u003c/td\u003e\u003ctd\u003e20% 機率掉 1 件；tier 白80/綠17/橘3\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003e裝備數值：\u003ccode\u003eequipBase[baseName] × tier.mul\u003c/code\u003e（首發 白1 / 綠1.5 / 橘2.0）；綠/橘額外 \u003ccode\u003ebonusStat\u003c/code\u003e 隨機 STR/DEX/INT/LUK 其一（綠+3 / 橘+5）。敗退僅給金幣（×0.3），不掉裝備/素材。\u003c/p\u003e\u003ch3\u003e4.5 章節 Boss 挑戰（onEnterChapter）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e項目\u003c/th\u003e\u003cth\u003e內容\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e勝負判定\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ecalcPlayerPower(pack, save) ≥ bossPower\u003c/code\u003e 即勝；否則提示戰力不足\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e經驗\u003c/td\u003e\u003ctd class=\"wrap\"\u003e勝：\u003ccode\u003elife +12\u003c/code\u003e、\u003ccode\u003eweapon +10\u003c/code\u003e（雙持同量）；敗：無\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e獎勵\u003c/td\u003e\u003ctd class=\"wrap\"\u003e首次通關 \u003ccode\u003egrantChapterRewards\u003c/code\u003e：金＋道具；重複通關僅提示「再次擊敗」\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"s5\"\u003e五、探索戰鬥 — 怪物、戰力與勝負\u003c/h2\u003e\u003ch3\u003e5.1 怪物矩陣（gameDefs:CHAPTER_MONSTER_POOLS）\u003c/h3\u003e\u003cp\u003e每章 1 Boss ＋1 Elite ＋5 Small（balance/agile/caster/tank/assassin 各一），六元素火/冰/風/雷/毒/光，環形剋制：火→風→雷→冰→毒→光→火，剋制 ×1.5 / 被剋 ×0.75。\u003c/p\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e章節\u003c/th\u003e\u003cth\u003eBoss\u003c/th\u003e\u003cth\u003eSmall 5 種\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003ec1 綠野\u003c/td\u003e\u003ctd\u003e霧林史萊姆王（毒）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e苔綠/跳跳/孢子/岩殼/暗影 史萊姆\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec2 鐵爐\u003c/td\u003e\u003ctd\u003e鐵爐守衛（火）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e工人傀儡/礦鼠/晶礦術士/重裝鐵衛/割喉者\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec3 翠風\u003c/td\u003e\u003ctd\u003e翠風鷹王（風）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雛鷹/鷹隼/風語祭司/磐岩鷹衛/夜梟刺鷹\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec4 暮色\u003c/td\u003e\u003ctd\u003e暮色騎士長（光）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e步兵/斥候/詠唱者/重騎/潛刃\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e5.2 遭遇組成（combatEngine:rollEncounter）\u003c/h3\u003e\u003cp\u003e隊長抽選：Boss 5% / Elite 20% / Small 75%；保底強制 Boss；Boss 當日已擊殺則降為 Elite。隊伍大小 1–5 隻，依 \u003ccode\u003ecalcPlayerPower\u003c/code\u003e 動態配平，使 \u003ccode\u003emonsterTotal ≈ playerPower×(0.95–1.10)\u003c/code\u003e。\u003c/p\u003e\u003ch3\u003e5.3 詞條（combatEngine:resolveCombatTags）\u003c/h3\u003e\u003cp\u003e每隻怪各擲：命中/閃避（依 \u003ccode\u003ehit/eva\u003c/code\u003e）、元素剋制/被剋、爆擊（依 \u003ccode\u003ecrit%\u003c/code\u003e）、火/毒/雷/冰 DOT（依 \u003ccode\u003eattrLv≥2\u003c/code\u003e 15–18%）、隊伍級 秒殺 12%、殘血狂暴 25%（限 Boss/Elite）。最多 8 條，探索取前 6 條。\u003c/p\u003e\u003ch3\u003e5.4 勝負（combatEngine:resolveExploreOutcome — C 混合）\u003c/h3\u003e\u003cpre\u003eplayerPower = heroLv×8 + weaponLv×6(雙持各半) + attrLv×4 + lifeLv×2 + Σstats + ΣequipBonus\nmonsterPower = Σ tierBase×powerFactor × (0.88–1.12)  // tierBase: small 40 / elite 80 / boss 120 × (bossPower/120)\ntagScore = Σ weight[tag]  // 命中+1 閃避+1.5 爆擊+2 剋制+2 秒殺+3 ... 狂暴-1 被閃-1.5 格擋-1 被剋-2\ntagMul = clamp(tagScore×0.04, -0.20, +0.20)\neffectivePower = playerPower × (1+tagMul)\nwin = effectivePower ≥ monsterPower  // 基礎 r≥1.10 必勝、r≤0.90 必敗，詞條僅在 ±20% 模糊帶內可翻盤\nflipped 標記用於提示「詞條逆轉 / 被詞條翻盤」\u003c/pre\u003e\u003ch2 id=\"s6\"\u003e六、敘述事件 — 雙層架構與 kind 系統\u003c/h2\u003e\u003ch3\u003e6.1 設計原則\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e同一意思、自由造句\u003c/div\u003e\u003cdiv class=\"v\"\u003e所有敘述皆\u003cstrong\u003e同一意思換句話說\u003c/strong\u003e，每次用詞不同，不套固定模板。由 LLM 負責變化，本地僅作\u003cstrong\u003e超時後備\u003c/strong\u003e。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e按 kind 選對描述\u003c/div\u003e\u003cdiv class=\"v\"\u003e技能帶 \u003ccode\u003ekind: assault/guard/evade/control/recover\u003c/code\u003e，敘述必須對應：攻擊=出擊/命中、\u003cstrong\u003e防禦=硬抗/格擋/化解\u003c/strong\u003e、閃避=閃開/位移、牽制=震退/凍結、回復=調息/回流。防禦招不可寫成制勝句。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e6.2 SkillKind 推斷（narrative.ts）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003ekind\u003c/th\u003e\u003cth\u003e含義\u003c/th\u003e\u003cth\u003e敘述指引（kindHint）\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eassault\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e攻擊\u003c/td\u003e\u003ctd class=\"wrap\"\u003e描述為出擊/命中/破綻/連擊\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eguard\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e防禦\u003c/td\u003e\u003ctd class=\"wrap\"\u003e硬抗/格擋/化解傷害、避免重創，而非主動出擊\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eevade\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e閃避位移\u003c/td\u003e\u003ctd class=\"wrap\"\u003e閃開/側身/拉開距離、順勢反制\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003econtrol\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e牽制控場\u003c/td\u003e\u003ctd class=\"wrap\"\u003e牽制/震退/緩速/凍結/牽引敵陣\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003erecover\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e回復調息\u003c/td\u003e\u003ctd class=\"wrap\"\u003e調勻氣息/回氣/魔力回流、穩住陣腳\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cpre\u003enarrative.ts: kindOf(skill) → 有 kind 直接取，無則由 desc 關鍵字正則推斷\nresolveSkillKind(name) → 遍歷 WEAPON/ATTR/BODY 找同名技能回 kind\nskillAgentHint(name) → \"技能『XX』屬 防禦向：...\" 供 prompt\nkindSentenceVariants / kindDefeatSentenceVariants → 依 kind 的勝/敗各 3–4 句後備\u003c/pre\u003e\u003ch3\u003e6.3 雙層敘述鏈\u003c/h3\u003e\u003cdiv class=\"flow\"\u003e\u003cspan class=\"node\" style=\"background:var(--soft)\"\u003e本地 Fallback\u003cbr\u003e立即寫入 feed/log\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\" style=\"background:var(--soft2);border-color:var(--accent2)\"\u003ecallPrompt isekai_feed\u003cbr\u003e6 秒超時\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003e成功：替換/追記\u003cbr\u003e失敗：保留 Fallback\u003c/span\u003e\u003c/div\u003e\u003cpre\u003eIsekaiMainView: agentLine(context, fallback)\n  → withTimeout(callPrompt({\n      action: 'isekai_feed',\n      system_prompt: '你是「異世界冒險」的即時旁白。用繁體中文以一句話（20-45字）生動描寫...'\n      + '① 同一意思自由造句、每次不同 ② 按 kind 選對描述 ③ 全部品類皆自由發揮 ④ 奇幻語氣、不要數值、不要洩機制',\n      prompt: context,\n      model: 'auto'\n    }).then(content.slice(0,80)), 6000, fallback)\u003c/pre\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e先寫 Fallback\u003c/strong\u003e：戰鬥 \u003ccode\u003ebuildCombatSentence / buildCombatDefeatSentence\u003c/code\u003e、資源 \u003ccode\u003ebuildResourceFallback\u003c/code\u003e、寶箱 \u003ccode\u003ebuildChestFallback\u003c/code\u003e、Tick 各軌 \u003ccode\u003etick*GainFragment / tick*LevelFragment\u003c/code\u003e 等立即寫入 \u003ccode\u003efeed\u003c/code\u003e 與 \u003ccode\u003eexploreLog\u003c/code\u003e，保證有文字。\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e再追 LLM\u003c/strong\u003e：\u003ccode\u003eagentLine(ctx, fallback).then(... persist)\u003c/code\u003e 非同步回來後\u003cstrong\u003e替換\u003c/strong\u003e最新一筆 \u003ccode\u003eexploreLog[0].msg\u003c/code\u003e 並 \u003ccode\u003epushFeed(line)\u003c/code\u003e；若 5 分鐘內同 tags 則改為 \u003ccode\u003e追記：line\u003c/code\u003e 避免刷屏。\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e超時 6 秒\u003c/strong\u003e直接保留 Fallback，不阻塞主流程。\u003c/li\u003e\u003c/ul\u003e\u003ch3\u003e6.4 本地模板庫（narrative.ts 完整清單）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e函數\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003cth\u003e句數\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epublishWeaponGain/Level\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e上架 +120（舊路徑保留）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e各 6 / 5 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epackSuccess/Fail Gain/Level\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e打包成功 +25 / 失敗 +8\u003c/td\u003e\u003ctd class=\"wrap\"\u003e各 6 / 4 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003echapter* / tick* Gain/Level Fragment\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e章節與 Tick 四軌的短片段，拼成 base\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每軌 5 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003etick*AgentHint\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e餵 LLM 的 6–8 種指引（武器/火/冰/風/身體/生活）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每軌 8 句隨機挑一\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ecombatTagToSentence / sentenceVariants\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e標籤→自然句（命中/爆擊/閃避/格擋/剋制/燃燒/中毒/感電/凍結/秒殺/狂暴）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每標籤 3–6 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ebuildCombatSentence / Defeat\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e戰鬥勝/敗完整句：開場 ＋ 3 條去重標籤句\u003c/td\u003e\u003ctd class=\"wrap\"\u003e開場各 4 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epickCombatSkillRef / chooseTickWeapon\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e依當前裝備與等級挑可用技能；雙持輪替\u003c/td\u003e\u003ctd\u003e—\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"s7\"\u003e七、各場景的敘述調用鏈\u003c/h2\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e場景\u003c/th\u003e\u003cth\u003eFallback\u003c/th\u003e\u003cth\u003eLLM prompt 要點\u003c/th\u003e\u003cth\u003e寫入位置\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003eTick 四軌\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003etickForge/Attr/Hero/Life Gain/Level Fragment\u003c/code\u003e 拼 \u003ccode\u003ebase\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e按軌分別帶 \u003ccode\u003etickWeapon/Attr/Hero/Life AgentHint\u003c/code\u003e；雙持時指引註明「只描述輪到的那把」\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildCombatSentence / Defeat\u003c/code\u003e（含 monsterNames、tags、skillName）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e帶 \u003ccode\u003eskillRef.kind\u003c/code\u003e 的 \u003ccode\u003ekindHint\u003c/code\u003e；勝/敗語氣相符；標註 питом/敗退/翻盤\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·資源\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildResourceFallback(chTitle)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e「於 XX 採集素材」自由造句 20–45字\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·寶箱\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildChestFallback(chTitle, gold)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e「發現並開啟寶箱」不提具體金幣數\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e章節 Boss\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003echapterLife/Weapon GainFragment\u003c/code\u003e 或 \u003ccode\u003echapterBaseFallback\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e帶前後 Lv 對比 \u003ccode\u003eXX LvA→LvB\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e商城/背包/裝備\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定句：\u003ccode\u003e商店購入 / 售出 / 裝備 slot ← name / 卸下\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e不走 LLM，固定句即時可讀\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout purple\"\u003e\u003cspan class=\"tag2\" style=\"color:var(--accent2)\"\u003eUI\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e事件紀錄\u003c/strong\u003e（BottomFeed）顯示 \u003ccode\u003efeed\u003c/code\u003e 前 5 筆；\u003cstrong\u003e探索日誌\u003c/strong\u003e（ChaptersView）顯示 \u003ccode\u003eexploreLog\u003c/code\u003e 前 80 筆，兩者皆由敘述句構成。戰鬥句含怪物名、技能名與詞條效果（元素剋制/爆擊等），敗退句以 \u003ccode\u003ekindDefeatSentenceVariants\u003c/code\u003e 避免把防禦招寫成制勝句。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s8\"\u003e八、Pack 結構與熱更新\u003c/h2\u003e\u003cp\u003e在「異世界冒險 Packs」資料夾新增 \u003ccode\u003eNOTE\u003c/code\u003e，內文貼 \u003ccode\u003e{\"isekai\": true, ...}\u003c/code\u003e JSON 即可。訂閱機制：優先讀 \u003ccode\u003epackNoteIds\u003c/code\u003e 清單，未指定則自動掃描所有含 \u003ccode\u003eisekai\u003c/code\u003e 的 NOTE。\u003c/p\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e可熱更新（不洗檔）\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003ecover / covers[6軌] / weaponIcons / equipHeroDesc / badges / title / links / chapters[].title/desc/rewardGold/rewardItems/bossName\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e鎖定（改 Pack 不生效）\u003c/div\u003e\u003cdiv class=\"v\"\u003e曲線 \u003ccode\u003expCurves.*\u003c/code\u003e 門檻 \u003ccode\u003eneedHeroLv / bossPower\u003c/code\u003e 技能定義 \u003ccode\u003eWEAPON/ATTR/BODY/LIFE_SKILLS\u003c/code\u003e 的等級門檻，避免舊 Pack 洗亂難度\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cpre\u003e首發 Pack 平衡摘要（可直接複製改值）：\nbalance: {\n  xpCurves: {weapon:{base:60,pow:1.3}, general:{base:100,pow:1.4}},\n  heroPoints: {perLv:5, milestones:[10,20..100], milestoneBonus:10, initial:8, initialStats:{STR:2,DEX:2,INT:2,LUK:2}, initialGold:160},\n  tick: {intervalMs:600000, caps:{perTick:180}, forge:{perFile:40,perPackNote:80}, agentWork:{perChars:60,perCount:10,bonusChars:20}, ceoChat:{perChars:20}, chatRoom:{perChars:20}},\n  explore: {rates:{combat:.6,resource:.25,chest:.15}, pityThreshold:100, dailyLimit:50, luck:{perLuk:.002,cap:.05,chestCap:.2,combatReduce:.6}},\n  combatXp: {pool:{boss:100,elite:30,small:5}, split:{weapon:.5,attr:.2,hero:.2,life:.1}, groupBonus:.15, defeatMul:.3, fixed:{resource:{hero:1,life:4},chest:{hero:1,life:2}}},\n  drops: {tier:{mul:{0:1,1:1.5,2:2}, bonus:{green:3,epic:5}}, economy:{shop:{white:80,green:800}, sell:{equip:{white:8,green:80,epic:320}}}}\n}\u003c/pre\u003e\u003ch2 id=\"s9\"\u003e九、存檔欄位與常見坑\u003c/h2\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eweapons[cat]\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003e{xp, lv, fails, successes, publishes}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e6 軌獨立；\u003ccode\u003efails/successes/publishes\u003c/code\u003e 為舊統計保留\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eheroLv/heroXp/heroPoints/stats\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e人物主等級與四維點數\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003estats\u003c/code\u003e 為已分配後的值；\u003ccode\u003eheroPoints\u003c/code\u003e 為剩餘可分配點\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eattrLv/attrXp/attrChoice\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e屬性等級與當前系\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003eattrChoice\u003c/code\u003e 為 fire/ice/wind 或 null\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003elifeLv/lifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e生活等級\u003c/td\u003e\u003ctd class=\"wrap\"\u003e由聊天與探索推進\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eequipSlots / equipSlotStats\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e8 格紙娃娃＋每格數值\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雙手武器鏡像於 leftHand/rightHand 同名；\u003ccode\u003eequipCategory/equipped\u003c/code\u003e 為舊相容欄位，寫入時自動同步\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003efeed / exploreLog\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e事件流\u003c/td\u003e\u003ctd class=\"wrap\"\u003efeed 80 條、exploreLog 80 條，皆為敘述句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eexplorePity / bossKillDate / exploreCount / exploreDailyCount+Date\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e探索節奏\u003c/td\u003e\u003ctd class=\"wrap\"\u003eBoss 每章每日限 1 次；pity 保底 100；每日 50 次跨章共用\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ebag / gold\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e背包與金幣\u003c/td\u003e\u003ctd class=\"wrap\"\u003e裝備件有 \u003ccode\u003eequipStats\u003c/code\u003e 隨件綁定，同名多件各有獨立 id\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003elastTickSnapshot / lastCubLvCheckAt / tickWeaponTurn / exploreWeaponTurn\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003eTick 與輪替\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雙持輪替各用一獨立 turn（mod 2），避免兩處互相搶位\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003e坑位\u003c/span\u003e\u003cdiv\u003e\u003cul style=\"margin:4px 0;padding-left:16px\"\u003e\u003cli\u003e\u003ccode\u003eequipCategory / equipped\u003c/code\u003e 為舊欄位，現以 \u003ccode\u003eequipSlots\u003c/code\u003e 為準；寫入前必 \u003ccode\u003esyncEquipCategory()\u003c/code\u003e 同步，否則切匕首仍漲單手劍。\u003c/li\u003e\u003cli\u003e雙手武器切單手時需\u003cstrong\u003e先返還鏡像件\u003c/strong\u003e再寫單格，否則背包會多一件。\u003c/li\u003e\u003cli\u003eTick 與探索的雙持輪替分別用 \u003ccode\u003etickWeaponTurn / exploreWeaponTurn\u003c/code\u003e，不可共用。\u003c/li\u003e\u003cli\u003ePack 缺欄位會\u003cstrong\u003e直接阻斷\u003c/strong\u003e（assertPack 拋錯），不要給 fallback。\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"hr\"\u003e\u003c/div\u003e\u003cp style=\"color:var(--ink2);font-size:12px;line-height:1.6\"\u003e原始碼索引：\u003ccode\u003egameDefs.ts\u003c/code\u003e 定義武器/屬性/身體/生活/章節/元素/怪物；\u003ccode\u003epackConfig.ts\u003c/code\u003e 硬連結 Pack 與曲線；\u003ccode\u003esaveModel.ts\u003c/code\u003e 存檔與 addXp；\u003ccode\u003ecombatEngine.ts\u003c/code\u003e 遭遇/詞條/戰力/掉落；\u003ccode\u003enarrative.ts\u003c/code\u003e 全部敘述模板與 kind；\u003ccode\u003eIsekaiMainView.tsx\u003c/code\u003e 四軌 tick、探索、章節、商城與 agentLine 調度；\u003ccode\u003eBottomFeed.tsx\u003c/code\u003e 事件紀錄 UI。Pack 範例與製作說明見「異世界冒險 Packs」資料夾兩篇 NOTE。\u003c/p\u003e\u003c/div\u003e","createdAt":1787784631958,"deletedAt":null,"displayMode":"artifact","embedRenders":{},"id":"472fd24de16771ed3c281569","isNew":false,"isPublic":true,"itemType":"NOTE","name":"異世界冒險插件 — 等級提升與敘述事件 完整技術文件","parents":{"b7d5251b3deb213157d75793":1787784631958},"preParentID":null,"updatedAt":1787788320670,"updatedBy":{"userId":"6a46f1f3013d79e6f40868","userName":"平凡人"},"version":12},"ownerName":"平凡人","subtree":[{"artifactHtml":"\u003cstyle\u003e:root{--paper:#fdf8f0;--ink:#1a1a2e;--ink2:#5c6573;--accent:#f59e0b;--accent2:#7c3aed;--soft:#fef3c7;--soft2:#ede9fe;--hair:#e5decc;--card:#ffffff;--ok:#059669;--warn:#d97706;--bad:#dc2626}:root[data-theme=\"dark\"]{--paper:#0f1420;--ink:#e6e9ef;--ink2:#8a94a6;--accent:#fbbf24;--accent2:#a78bfa;--soft:#1e2a4a;--soft2:#1e1b3a;--hair:#24324d;--card:#161e2e;--ok:#34d399;--warn:#fbbf24;--bad:#f87171}.doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:15px/1.75 system-ui,-apple-system,\"PingFang TC\",\"Noto Sans TC\",sans-serif;border-radius:16px}.eyebrow{font:700 11px ui-monospace,monospace;letter-spacing:.14em;color:var(--accent);text-transform:uppercase}.doc h1{font-size:22px;line-height:1.25;letter-spacing:-.02em;margin:8px 0 6px}.lede{color:var(--ink2);font-size:13px;line-height:1.6;margin:0 0 4px}.meta{font:12px ui-monospace,monospace;color:var(--ink2)}.hr{height:1px;background:var(--hair);margin:20px 0}h2{font-size:16px;margin:24px 0 10px;letter-spacing:-.01em;padding-left:10px;border-left:3px solid var(--accent)}h3{font-size:14px;margin:18px 0 8px}h4{font-size:13px;margin:14px 0 6px;color:var(--accent2)}p{margin:8px 0;color:var(--ink);line-height:1.75}.doc ul,.doc ol{margin:8px 0;padding-left:20px}.doc li{margin:4px 0;color:var(--ink);line-height:1.7}code{font:12px ui-monospace,monospace;background:var(--soft);padding:1px 6px;border-radius:4px}.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px;margin:12px 0}.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin:12px 0}.card{background:var(--card);border:1px solid var(--hair);border-radius:10px;padding:12px 14px}.card .k{font:700 12px ui-monospace;color:var(--accent);margin-bottom:4px}.card .v{font-size:13px;color:var(--ink2);line-height:1.6}.card .v strong{color:var(--ink)}.tag{display:inline-block;font:700 10px ui-monospace;letter-spacing:.08em;padding:2px 7px;border-radius:20px}.tag-o{background:var(--soft);color:var(--accent);border:1px solid var(--hair)}.tag-p{background:var(--soft2);color:var(--accent2);border:1px solid var(--hair)}table{width:100%;border-collapse:collapse;font-size:13px;margin:10px 0;display:block;overflow-x:auto;white-space:nowrap}th{font:700 11px ui-monospace;letter-spacing:.06em;color:var(--ink2);text-align:left;padding:8px 10px;border-bottom:2px solid var(--hair);white-space:nowrap}td{padding:8px 10px;border-bottom:1px solid var(--hair);color:var(--ink);white-space:nowrap;vertical-align:top}td.wrap{white-space:normal;min-width:160px}pre{background:var(--card);border:1px solid var(--hair);border-radius:8px;padding:12px 14px;overflow:auto;font:12px/1.6 ui-monospace,monospace;white-space:pre-wrap;word-break:break-all;margin:10px 0}.callout{display:flex;gap:12px;background:var(--soft);border-radius:10px;padding:12px 14px;margin:14px 0;font-size:13px;line-height:1.6}.callout .tag2{flex:none;font:700 11px ui-monospace;letter-spacing:.08em;color:var(--accent);padding-top:2px}.callout.purple{background:var(--soft2)}.flow{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:10px 0}.flow .node{background:var(--card);border:1px solid var(--hair);border-radius:8px;padding:6px 10px;font:12px ui-monospace}.flow .arr{color:var(--ink2);font-size:14px}.toc{background:var(--card);border:1px solid var(--hair);border-radius:10px;padding:14px 18px;margin:14px 0}.toc ol{margin:6px 0;padding-left:18px}.toc li{font-size:13px;margin:3px 0}.toc a{color:var(--accent2);text-decoration:none}@media(max-width:640px){.doc{padding:20px 18px}.doc h1{font-size:19px}}\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eISEKAI · 202692dbca791014d08ea047 · 交接文件\u003c/div\u003e\u003ch1\u003e異世界冒險插件 — 等級提升與敘述事件 完整技術文件\u003c/h1\u003e\u003cp class=\"lede\"\u003e涵蓋四軌等級體系、XP 曲線與所有經驗來源、戰力公式、以及「模板後備＋ LLM 自由造句」雙層敘述架構。Pack 為唯一真實來源（硬連結、無 fallback）。\u003c/p\u003e\u003cdiv class=\"meta\"\u003e原始碼：plugins/202692dbca791014d08ea047/frontend · Pack 範例：筆記/異世界冒險 Packs · 產生日：2026-08-27\u003c/div\u003e\u003c/header\u003e\u003cdiv class=\"hr\"\u003e\u003c/div\u003e\u003cdiv class=\"toc\"\u003e\u003cstrong style=\"font-size:13px\"\u003e目錄\u003c/strong\u003e\u003col\u003e\u003cli\u003e\u003ca href=\"#s1\"\u003e總覽 — 四軌＋Pack 硬連結\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s2\"\u003e等級體系與解鎖\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s3\"\u003eXP 曲線與升級函數\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s4\"\u003e經驗來源一覽（Tick／探索／章節）\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s5\"\u003e探索戰鬥 — 怪物、戰力與勝負\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s6\"\u003e敘述事件 — 雙層架構與 kind 系統\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s7\"\u003e各場景的敘述調用鏈\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s8\"\u003ePack 結構與熱更新\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s9\"\u003e存檔欄位與常見坑\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003ch2 id=\"s1\"\u003e一、總覽\u003c/h2\u003e\u003cdiv class=\"grid3\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e插件定位\u003c/div\u003e\u003cdiv class=\"v\"\u003e與 \u003cstrong\u003eCubeLV 深度綁定\u003c/strong\u003e的養成冒險：鍛造、修練、文字歷練與紙娃娃裝備。前端純展示，無後端 API。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e唯一真實來源\u003c/div\u003e\u003cdiv class=\"v\"\u003e所有數值皆來自 \u003cstrong\u003eNOTE Pack\u003c/strong\u003e（\u003ccode\u003eisekai: true\u003c/code\u003e 的 JSON）。\u003ccode\u003epackConfig.ts:assertPack()\u003c/code\u003e 缺欄位即\u003cstrong\u003e阻斷遊戲\u003c/strong\u003e，不回落舊值。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e資料流\u003c/div\u003e\u003cdiv class=\"v\"\u003ePack NOTE → \u003ccode\u003esaveModel.ts:tryParsePackNote()\u003c/code\u003e → \u003ccode\u003eIsekaiMainView:pack\u003c/code\u003e → 全部計算皆 \u003ccode\u003eassertPack(pack)\u003c/code\u003e 後取值。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"flow\"\u003e\u003cspan class=\"node\"\u003ePack NOTE\u003cbr\u003e(iseki:true)\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003egameDefs\u003cbr\u003e定義\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003epackConfig\u003cbr\u003e硬連結取值\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003esaveModel\u003cbr\u003e加經驗/升級\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003ecombatEngine\u003cbr\u003e戰鬥結算\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003enarrative\u003cbr\u003e造句\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003efeed/Log\u003c/span\u003e\u003c/div\u003e\u003ch2 id=\"s2\"\u003e二、等級體系與解鎖\u003c/h2\u003e\u003cp\u003e四條獨立經驗軌，互不共用 XP；武器軌內再分 6 把獨立等級。\u003c/p\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e軌道\u003c/th\u003e\u003cth\u003e對應欄位\u003c/th\u003e\u003cth\u003e等級來源\u003c/th\u003e\u003cth\u003e解鎖內容\u003c/th\u003e\u003cth\u003e備註\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e武器\u003c/span\u003e 6 軌\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eweapons[cat].lv / xp\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e鍛造 Tick、探索戰鬥、章節 Boss\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每把各 \u003cstrong\u003eLv.2 / 8 / 16\u003c/strong\u003e 解 3 招（見下表）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e獨立制；雙持不同分類時\u003cstrong\u003e同量雙軌\u003c/strong\u003e寫入\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-p\"\u003e屬性\u003c/span\u003e 3 選 1\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eattrLv / attrXp / attrChoice\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e員工留言 Tick、探索戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efire/ice/wind\u003c/code\u003e 各 Lv.2/8/16 共 9 招\u003c/td\u003e\u003ctd class=\"wrap\"\u003e初始隨機；\u003ccode\u003eheroLv≥20\u003c/code\u003e 可在 SkillView 切換\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e身體\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e綁定 \u003ccode\u003eheroLv\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e隨人物等級\u003c/td\u003e\u003ctd class=\"wrap\"\u003eLv.2 鋼軀、Lv.8 疾影步、Lv.16 調息\u003c/td\u003e\u003ctd class=\"wrap\"\u003e被動／位移／回魔\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-p\"\u003e生活\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003elifeLv / lifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e聊天室 Tick、探索資源/寶箱、章節\u003c/td\u003e\u003ctd class=\"wrap\"\u003eLv.5 採集術、Lv.15 煉金術\u003c/td\u003e\u003ctd class=\"wrap\"\u003e在聚落煙火中成長\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e人物\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eheroLv / heroXp / heroPoints / stats\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eCEO 對話 Tick、探索、章節\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每級 \u003ccode\u003e+perLv\u003c/code\u003e 點，里程碑 Lv.10/20…各 +10\u003c/td\u003e\u003ctd class=\"wrap\"\u003e卡章節門檻；點數分配 STR/DEX/INT/LUK\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e武器 6 軌 × 3 招（WEAPON_SKILLS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e武器\u003c/th\u003e\u003cth\u003e對應 Stat\u003c/th\u003e\u003cth\u003eLv.2\u003c/th\u003e\u003cth\u003eLv.8\u003c/th\u003e\u003cth\u003eLv.16\u003c/th\u003e\u003cth\u003ekind 分布\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e單手劍\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e迅斬\u003c/td\u003e\u003ctd\u003e旋刃\u003c/td\u003e\u003ctd\u003e破空斬\u003c/td\u003e\u003ctd\u003e全 assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e雙手大劍\u003c/td\u003e\u003ctd\u003eSTR\u003c/td\u003e\u003ctd\u003e重劈\u003c/td\u003e\u003ctd\u003e橫斷\u003c/td\u003e\u003ctd\u003e大地崩斬\u003c/td\u003e\u003ctd\u003eassault / control / assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e弓\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e連射\u003c/td\u003e\u003ctd\u003e貫穿狙擊\u003c/td\u003e\u003ctd\u003e散射牽制\u003c/td\u003e\u003ctd\u003eassault / assault / control\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e雙手法杖\u003c/td\u003e\u003ctd\u003eINT\u003c/td\u003e\u003ctd\u003e魔力彈\u003c/td\u003e\u003ctd\u003e魔力護盾\u003c/td\u003e\u003ctd\u003e震盪波\u003c/td\u003e\u003ctd\u003eassault / guard / control\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e匕首\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e迅影刺\u003c/td\u003e\u003ctd\u003e背刺\u003c/td\u003e\u003ctd\u003e幻影連襲\u003c/td\u003e\u003ctd\u003eevade / assault / assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e小盾\u003c/td\u003e\u003ctd\u003eSTR\u003c/td\u003e\u003ctd\u003e盾擊\u003c/td\u003e\u003ctd\u003e堅守格擋\u003c/td\u003e\u003ctd\u003e聖盾衝鋒\u003c/td\u003e\u003ctd\u003econtrol / guard / control\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e屬性 3 系 × 3 招（ATTR_SKILLS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e系\u003c/th\u003e\u003cth\u003eLv.2\u003c/th\u003e\u003cth\u003eLv.8\u003c/th\u003e\u003cth\u003eLv.16\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e火\u003c/td\u003e\u003ctd\u003e火焰彈\u003c/td\u003e\u003ctd\u003e烈焰衝擊\u003c/td\u003e\u003ctd\u003e焚燼風暴\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e冰\u003c/td\u003e\u003ctd\u003e冰錐術（緩速）\u003c/td\u003e\u003ctd\u003e霜凍新星\u003c/td\u003e\u003ctd\u003e絕對零度\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e風\u003c/td\u003e\u003ctd\u003e風刃\u003c/td\u003e\u003ctd\u003e疾風連斬\u003c/td\u003e\u003ctd\u003e龍捲風暴\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e章節門檻（CHAPTERS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e章節\u003c/th\u003e\u003cth\u003eneedHeroLv\u003c/th\u003e\u003cth\u003eBoss\u003c/th\u003e\u003cth\u003ebossPower\u003c/th\u003e\u003cth\u003e通關獎勵\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003ec1 綠野村的晨霧\u003c/td\u003e\u003ctd\u003e1\u003c/td\u003e\u003ctd\u003e霧林史萊姆王\u003c/td\u003e\u003ctd\u003e120\u003c/td\u003e\u003ctd\u003e金 55＋野莓/回血藥\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec2 鐵爐小徑\u003c/td\u003e\u003ctd\u003e5\u003c/td\u003e\u003ctd\u003e鐵爐守衛\u003c/td\u003e\u003ctd\u003e240\u003c/td\u003e\u003ctd\u003e金 130＋鐵礦/破舊單手劍\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec3 翠風迴廊\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e翠風鷹王\u003c/td\u003e\u003ctd\u003e380\u003c/td\u003e\u003ctd\u003e金 240＋風紋羽毛/風行藥水\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec4 暮色王城\u003c/td\u003e\u003ctd\u003e15\u003c/td\u003e\u003ctd\u003e暮色騎士長\u003c/td\u003e\u003ctd\u003e580\u003c/td\u003e\u003ctd\u003e金 380＋王城徽印/暮光結晶\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003eRULE\u003c/span\u003e\u003cdiv\u003e通關需\u003cstrong\u003e順序解鎖\u003c/strong\u003e：未通關前一章不可進下一章；\u003ccode\u003eheroLv\u003c/code\u003e 不到也不可進。Boss 採\u003cstrong\u003e戰力比對\u003c/strong\u003e（見第五節），非等級碾壓。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s3\"\u003e三、XP 曲線與升級函數\u003c/h2\u003e\u003ch3\u003e3.1 曲線公式（balance.xpCurves，首發 Pack 預設）\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e武器曲線\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eneed = 60 × (Lv+1)\u003csup\u003e1.3\u003c/sup\u003e\u003c/code\u003e\u003cbr\u003e例：Lv1→2 需 148；Lv7→8 約 691；Lv15→16 約 1500＋\u003cbr\u003e\u003cspan style=\"font-size:11px;color:var(--ink2)\"\u003epack: balance.xpCurves.weapon {base:60, pow:1.3}\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e通用曲線（人物/屬性/生活共用）\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eneed = 100 × (Lv+1)\u003csup\u003e1.4\u003c/sup\u003e\u003c/code\u003e\u003cbr\u003e例：Lv1→2 需 264；Lv9→10 約 1580\u003cbr\u003e\u003cspan style=\"font-size:11px;color:var(--ink2)\"\u003epack: balance.xpCurves.general {base:100, pow:1.4}\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cpre\u003epackConfig.ts\nneedXpForWeaponLv(pack, nextLv) → Math.round(base * nextLv^pow)\nneedXpGeneral(pack, nextLv)     → Math.round(base * nextLv^pow)\ncumulXp(pack, kind, target)     → 累加 1→target 所需總量\u003c/pre\u003e\u003ch3\u003e3.2 升級函數（saveModel.ts）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e函數\u003c/th\u003e\u003cth\u003e行為\u003c/th\u003e\u003cth\u003e升級後動作\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddWeaponXp(pack, save, wid, amt)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003eweapons[wid].xp += amt\u003c/code\u003e；while 超過 \u003ccode\u003eneedWL(lv+1)\u003c/code\u003e 就 \u003ccode\u003exp-=need; lv++\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e回 \u003ccode\u003e{leveled, newLv}\u003c/code\u003e；由呼叫方寫 feed\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddHeroXp(pack, save, amt)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e同上；升級時 \u003ccode\u003eheroPoints += perLv\u003c/code\u003e，若 \u003ccode\u003emilestones\u003c/code\u003e 含該 Lv 額外 \u003ccode\u003e+milestoneBonus\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e首發：perLv 5，里程碑 10/20/…100 各 +10\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddAttrXp / addLifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e通用曲線 while 升級\u003c/td\u003e\u003ctd class=\"wrap\"\u003e屬性若 \u003ccode\u003eattrChoice==null\u003c/code\u003e 自動選第一個可解鎖系\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout purple\"\u003e\u003cspan class=\"tag2\" style=\"color:var(--accent2)\"\u003eDUAL\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e雙持同量規則\u003c/strong\u003e：當 \u003ccode\u003eleftHand\u003c/code\u003e 與 \u003ccode\u003erightHand\u003c/code\u003e 為\u003cstrong\u003e不同單手分類\u003c/strong\u003e（例：匕首＋小盾）時，所有武器 XP 寫入會對兩把\u003cstrong\u003e同時各加同量\u003c/strong\u003e。雙手武器（大劍/弓/法杖）佔兩格鏡像，只算一軌。程式在 \u003ccode\u003eIsekaiMainView:onExplore / onEnterChapter / tick\u003c/code\u003e 三處皆同邏輯判斷 \u003ccode\u003eleftCat !== rightCat\u003c/code\u003e。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s4\"\u003e四、經驗來源一覽\u003c/h2\u003e\u003ch3\u003e4.1 Tick — 每 10 分鐘四軌被動（IsekaiMainView tick）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e軌道\u003c/th\u003e\u003cth\u003e偵測指標（與上次快照差值）\u003c/th\u003e\u003cth\u003e換算公式\u003c/th\u003e\u003cth\u003e上限\u003c/th\u003e\u003cth\u003e觸發間隔\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e鍛造（武器）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edFile\u003c/code\u003e 檔案增量、\u003ccode\u003edPackNote\u003c/code\u003e Pack NOTE 增量\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003emin(cap×forgeCapMul, dFile×perFile + dPackNote×perPackNote)\u003c/code\u003e\u003cbr\u003e首發：40/檔、80/篇，cap 180×4=720\u003c/td\u003e\u003ctd\u003e\u003ccode\u003ecaps.perTick × forgeCapMul\u003c/code\u003e\u003c/td\u003e\u003ctd rowspan=\"4\" style=\"vertical-align:middle\"\u003e600000ms\u003cbr\u003e(10 分鐘)\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e員工（屬性）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edAgentCount\u003c/code\u003e 則數、\u003ccode\u003edAgentChars\u003c/code\u003e 字數（排除 CEO 留言）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edAgentCount×perCount + floor(dAgentChars/bonusChars)\u003c/code\u003e\u003cbr\u003e首發：10/則 + 20字=1\u003c/td\u003e\u003ctd rowspan=\"3\" style=\"vertical-align:middle\"\u003e\u003ccode\u003ecaps.perTick\u003c/code\u003e\u003cbr\u003e(首發 180)\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eCEO（人物）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edCeoChars\u003c/code\u003e（chatBotSessions 字數）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efloor(dCeoChars / perChars)\u003c/code\u003e 首發 20字=1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e聊天（生活）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edChatChars\u003c/code\u003e（chatRoom 字數）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efloor(dChatChars / perChars)\u003c/code\u003e 首發 20字=1\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cpre\u003e快照：computeSnapshot() 讀 byTypeAll[FILE/NOTE/COMMENT] + chatBotSessions + chatRoom\n比對：lastTickSnapshot → curSnap 差值 → 四軌 XP → addWeaponXp/addAttrXp/addHeroXp/addLifeXp\n掉落：每條有增益的軌各算一次「一般小怪」掉落（金 3~7、裝備 20% 白80/綠17/橘3）\u003c/pre\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003eNOTE\u003c/span\u003e\u003cdiv\u003e首次 tick 若 \u003ccode\u003elastTickSnapshot==null\u003c/code\u003e 僅建立快照不給 XP；之後每 10 分鐘比對一次。無增益的 tick 仍更新 \u003ccode\u003elastCubLvCheckAt\u003c/code\u003e 與快照，避免重複計算。\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e4.2 探索 — 戰鬥／資源／寶箱（ChaptersView → IsekaiMainView:onExplore）\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e事件抽選 combatEngine:rollExploreEvent\u003c/div\u003e\u003cdiv class=\"v\"\u003e基礎 \u003cstrong\u003e戰鬥 60% / 資源 25% / 寶箱 15%\u003c/strong\u003e；\u003cstrong\u003eLUK 動態修正\u003c/strong\u003e：\u003ccode\u003ebonus = min(cap, LUK×perLuk)\u003c/code\u003e → \u003ccode\u003echest += bonus\u003c/code\u003e、\u003ccode\u003ecombat -= bonus×combatReduce\u003c/code\u003e；\u003cstrong\u003e保底\u003c/strong\u003e \u003ccode\u003epityThreshold 100\u003c/code\u003e 連續未戰鬥達標則強制戰鬥。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e每日上限\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eexplore.dailyLimit 50\u003c/code\u003e 次／日（跨章共用、隔日重置 \u003ccode\u003eexploreDailyDate\u003c/code\u003e）。達限即提示「明天再來」。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e事件\u003c/th\u003e\u003cth\u003e經驗\u003c/th\u003e\u003cth\u003e掉落\u003c/th\u003e\u003cth\u003e保底推進\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e見 4.3 戰鬥 XP 公式（四軌分流＋詞條加成）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e依怪物隊伍 \u003ccode\u003erollDrops\u003c/code\u003e：見 4.4\u003c/td\u003e\u003ctd\u003e若擊敗 Boss 則 pity 歸 0，否則 +1；敗退也 +1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e資源\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定 \u003ccode\u003ecombatXp.fixed.resource {hero:1, life:4}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e金 6–11＋隨機素材 1\u003c/td\u003e\u003ctd\u003epity +1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e寶箱\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定 \u003ccode\u003ecombatXp.fixed.chest {hero:1, life:2}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e金 10–24＋50% 素材\u003c/td\u003e\u003ctd\u003epity +1\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e4.3 戰鬥 XP 公式（combatEngine:computeExploreXp）\u003c/h3\u003e\u003cpre\u003e1. 基礎池：base = Σ pool[tier] × (1 + (n-1)×groupBonus)\n   首發 pool: boss 100 / elite 30 / small 5；groupBonus 0.15\n2. 四軌分流：weapon 50% / attr 20% / hero 20% / life 10%\n3. 定位加成：agile→weapon×1.3；caster→attr×1.5；tank→hero×1.5；assassin+爆擊→hero×1.2 \u0026 weapon×1.15\n4. 詞條加成：命中/閃避 +1 weapon；元素剋制 attr×1.5；爆擊/秒殺 hero×1.3；殘血狂暴 +2 weapon/+2 hero；被格擋 -1 weapon\n5. 敗退懲罰：全軌 ×defeatMul（首發 0.3）仍至少 1\u003c/pre\u003e\u003ch3\u003e4.4 掉落（combatEngine:rollDrops，Pack drops.table）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003etier\u003c/th\u003e\u003cth\u003e金幣\u003c/th\u003e\u003cth\u003e素材率\u003c/th\u003e\u003cth\u003e裝備\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003eBoss\u003c/td\u003e\u003ctd\u003e30 + rand 20\u003c/td\u003e\u003ctd\u003e100%\u003c/td\u003e\u003ctd\u003e必掉 2–3 件；tier 白0/綠50/橘50\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eElite\u003c/td\u003e\u003ctd\u003e12 + rand 8\u003c/td\u003e\u003ctd\u003e100%\u003c/td\u003e\u003ctd\u003e必掉 1–2 件；tier 白30/綠50/橘20\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eSmall\u003c/td\u003e\u003ctd\u003e3 + rand 5\u003c/td\u003e\u003ctd\u003e50%\u003c/td\u003e\u003ctd\u003e20% 機率掉 1 件；tier 白80/綠17/橘3\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003e裝備數值：\u003ccode\u003eequipBase[baseName] × tier.mul\u003c/code\u003e（首發 白1 / 綠1.5 / 橘2.0）；綠/橘額外 \u003ccode\u003ebonusStat\u003c/code\u003e 隨機 STR/DEX/INT/LUK 其一（綠+3 / 橘+5）。敗退僅給金幣（×0.3），不掉裝備/素材。\u003c/p\u003e\u003ch3\u003e4.5 章節 Boss 挑戰（onEnterChapter）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e項目\u003c/th\u003e\u003cth\u003e內容\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e勝負判定\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ecalcPlayerPower(pack, save) ≥ bossPower\u003c/code\u003e 即勝；否則提示戰力不足\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e經驗\u003c/td\u003e\u003ctd class=\"wrap\"\u003e勝：\u003ccode\u003elife +12\u003c/code\u003e、\u003ccode\u003eweapon +10\u003c/code\u003e（雙持同量）；敗：無\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e獎勵\u003c/td\u003e\u003ctd class=\"wrap\"\u003e首次通關 \u003ccode\u003egrantChapterRewards\u003c/code\u003e：金＋道具；重複通關僅提示「再次擊敗」\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"s5\"\u003e五、探索戰鬥 — 怪物、戰力與勝負\u003c/h2\u003e\u003ch3\u003e5.1 怪物矩陣（gameDefs:CHAPTER_MONSTER_POOLS）\u003c/h3\u003e\u003cp\u003e每章 1 Boss ＋1 Elite ＋5 Small（balance/agile/caster/tank/assassin 各一），六元素火/冰/風/雷/毒/光，環形剋制：火→風→雷→冰→毒→光→火，剋制 ×1.5 / 被剋 ×0.75。\u003c/p\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e章節\u003c/th\u003e\u003cth\u003eBoss\u003c/th\u003e\u003cth\u003eSmall 5 種\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003ec1 綠野\u003c/td\u003e\u003ctd\u003e霧林史萊姆王（毒）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e苔綠/跳跳/孢子/岩殼/暗影 史萊姆\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec2 鐵爐\u003c/td\u003e\u003ctd\u003e鐵爐守衛（火）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e工人傀儡/礦鼠/晶礦術士/重裝鐵衛/割喉者\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec3 翠風\u003c/td\u003e\u003ctd\u003e翠風鷹王（風）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雛鷹/鷹隼/風語祭司/磐岩鷹衛/夜梟刺鷹\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec4 暮色\u003c/td\u003e\u003ctd\u003e暮色騎士長（光）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e步兵/斥候/詠唱者/重騎/潛刃\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e5.2 遭遇組成（combatEngine:rollEncounter）\u003c/h3\u003e\u003cp\u003e隊長抽選：Boss 5% / Elite 20% / Small 75%；保底強制 Boss；Boss 當日已擊殺則降為 Elite。隊伍大小 1–5 隻，依 \u003ccode\u003ecalcPlayerPower\u003c/code\u003e 動態配平，使 \u003ccode\u003emonsterTotal ≈ playerPower×(0.95–1.10)\u003c/code\u003e。\u003c/p\u003e\u003ch3\u003e5.3 詞條（combatEngine:resolveCombatTags）\u003c/h3\u003e\u003cp\u003e每隻怪各擲：命中/閃避（依 \u003ccode\u003ehit/eva\u003c/code\u003e）、元素剋制/被剋、爆擊（依 \u003ccode\u003ecrit%\u003c/code\u003e）、火/毒/雷/冰 DOT（依 \u003ccode\u003eattrLv≥2\u003c/code\u003e 15–18%）、隊伍級 秒殺 12%、殘血狂暴 25%（限 Boss/Elite）。最多 8 條，探索取前 6 條。\u003c/p\u003e\u003ch3\u003e5.4 勝負（combatEngine:resolveExploreOutcome — C 混合）\u003c/h3\u003e\u003cpre\u003eplayerPower = heroLv×8 + weaponLv×6(雙持各半) + attrLv×4 + lifeLv×2 + Σstats + ΣequipBonus\nmonsterPower = Σ tierBase×powerFactor × (0.88–1.12)  // tierBase: small 40 / elite 80 / boss 120 × (bossPower/120)\ntagScore = Σ weight[tag]  // 命中+1 閃避+1.5 爆擊+2 剋制+2 秒殺+3 ... 狂暴-1 被閃-1.5 格擋-1 被剋-2\ntagMul = clamp(tagScore×0.04, -0.20, +0.20)\neffectivePower = playerPower × (1+tagMul)\nwin = effectivePower ≥ monsterPower  // 基礎 r≥1.10 必勝、r≤0.90 必敗，詞條僅在 ±20% 模糊帶內可翻盤\nflipped 標記用於提示「詞條逆轉 / 被詞條翻盤」\u003c/pre\u003e\u003ch2 id=\"s6\"\u003e六、敘述事件 — 雙層架構與 kind 系統\u003c/h2\u003e\u003ch3\u003e6.1 設計原則\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e同一意思、自由造句\u003c/div\u003e\u003cdiv class=\"v\"\u003e所有敘述皆\u003cstrong\u003e同一意思換句話說\u003c/strong\u003e，每次用詞不同，不套固定模板。由 LLM 負責變化，本地僅作\u003cstrong\u003e超時後備\u003c/strong\u003e。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e按 kind 選對描述\u003c/div\u003e\u003cdiv class=\"v\"\u003e技能帶 \u003ccode\u003ekind: assault/guard/evade/control/recover\u003c/code\u003e，敘述必須對應：攻擊=出擊/命中、\u003cstrong\u003e防禦=硬抗/格擋/化解\u003c/strong\u003e、閃避=閃開/位移、牽制=震退/凍結、回復=調息/回流。防禦招不可寫成制勝句。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e6.2 SkillKind 推斷（narrative.ts）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003ekind\u003c/th\u003e\u003cth\u003e含義\u003c/th\u003e\u003cth\u003e敘述指引（kindHint）\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eassault\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e攻擊\u003c/td\u003e\u003ctd class=\"wrap\"\u003e描述為出擊/命中/破綻/連擊\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eguard\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e防禦\u003c/td\u003e\u003ctd class=\"wrap\"\u003e硬抗/格擋/化解傷害、避免重創，而非主動出擊\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eevade\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e閃避位移\u003c/td\u003e\u003ctd class=\"wrap\"\u003e閃開/側身/拉開距離、順勢反制\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003econtrol\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e牽制控場\u003c/td\u003e\u003ctd class=\"wrap\"\u003e牽制/震退/緩速/凍結/牽引敵陣\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003erecover\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e回復調息\u003c/td\u003e\u003ctd class=\"wrap\"\u003e調勻氣息/回氣/魔力回流、穩住陣腳\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cpre\u003enarrative.ts: kindOf(skill) → 有 kind 直接取，無則由 desc 關鍵字正則推斷\nresolveSkillKind(name) → 遍歷 WEAPON/ATTR/BODY 找同名技能回 kind\nskillAgentHint(name) → \"技能『XX』屬 防禦向：...\" 供 prompt\nkindSentenceVariants / kindDefeatSentenceVariants → 依 kind 的勝/敗各 3–4 句後備\u003c/pre\u003e\u003ch3\u003e6.3 雙層敘述鏈\u003c/h3\u003e\u003cdiv class=\"flow\"\u003e\u003cspan class=\"node\" style=\"background:var(--soft)\"\u003e本地 Fallback\u003cbr\u003e立即寫入 feed/log\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\" style=\"background:var(--soft2);border-color:var(--accent2)\"\u003ecallPrompt isekai_feed\u003cbr\u003e6 秒超時\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003e成功：替換/追記\u003cbr\u003e失敗：保留 Fallback\u003c/span\u003e\u003c/div\u003e\u003cpre\u003eIsekaiMainView: agentLine(context, fallback)\n  → withTimeout(callPrompt({\n      action: 'isekai_feed',\n      system_prompt: '你是「異世界冒險」的即時旁白。用繁體中文以一句話（20-45字）生動描寫...'\n      + '① 同一意思自由造句、每次不同 ② 按 kind 選對描述 ③ 全部品類皆自由發揮 ④ 奇幻語氣、不要數值、不要洩機制',\n      prompt: context,\n      model: 'auto'\n    }).then(content.slice(0,80)), 6000, fallback)\u003c/pre\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e先寫 Fallback\u003c/strong\u003e：戰鬥 \u003ccode\u003ebuildCombatSentence / buildCombatDefeatSentence\u003c/code\u003e、資源 \u003ccode\u003ebuildResourceFallback\u003c/code\u003e、寶箱 \u003ccode\u003ebuildChestFallback\u003c/code\u003e、Tick 各軌 \u003ccode\u003etick*GainFragment / tick*LevelFragment\u003c/code\u003e 等立即寫入 \u003ccode\u003efeed\u003c/code\u003e 與 \u003ccode\u003eexploreLog\u003c/code\u003e，保證有文字。\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e再追 LLM\u003c/strong\u003e：\u003ccode\u003eagentLine(ctx, fallback).then(... persist)\u003c/code\u003e 非同步回來後\u003cstrong\u003e替換\u003c/strong\u003e最新一筆 \u003ccode\u003eexploreLog[0].msg\u003c/code\u003e 並 \u003ccode\u003epushFeed(line)\u003c/code\u003e；若 5 分鐘內同 tags 則改為 \u003ccode\u003e追記：line\u003c/code\u003e 避免刷屏。\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e超時 6 秒\u003c/strong\u003e直接保留 Fallback，不阻塞主流程。\u003c/li\u003e\u003c/ul\u003e\u003ch3\u003e6.4 本地模板庫（narrative.ts 完整清單）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e函數\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003cth\u003e句數\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epublishWeaponGain/Level\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e上架 +120（舊路徑保留）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e各 6 / 5 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epackSuccess/Fail Gain/Level\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e打包成功 +25 / 失敗 +8\u003c/td\u003e\u003ctd class=\"wrap\"\u003e各 6 / 4 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003echapter* / tick* Gain/Level Fragment\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e章節與 Tick 四軌的短片段，拼成 base\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每軌 5 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003etick*AgentHint\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e餵 LLM 的 6–8 種指引（武器/火/冰/風/身體/生活）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每軌 8 句隨機挑一\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ecombatTagToSentence / sentenceVariants\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e標籤→自然句（命中/爆擊/閃避/格擋/剋制/燃燒/中毒/感電/凍結/秒殺/狂暴）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每標籤 3–6 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ebuildCombatSentence / Defeat\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e戰鬥勝/敗完整句：開場 ＋ 3 條去重標籤句\u003c/td\u003e\u003ctd class=\"wrap\"\u003e開場各 4 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epickCombatSkillRef / chooseTickWeapon\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e依當前裝備與等級挑可用技能；雙持輪替\u003c/td\u003e\u003ctd\u003e—\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"s7\"\u003e七、各場景的敘述調用鏈\u003c/h2\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e場景\u003c/th\u003e\u003cth\u003eFallback\u003c/th\u003e\u003cth\u003eLLM prompt 要點\u003c/th\u003e\u003cth\u003e寫入位置\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003eTick 四軌\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003etickForge/Attr/Hero/Life Gain/Level Fragment\u003c/code\u003e 拼 \u003ccode\u003ebase\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e按軌分別帶 \u003ccode\u003etickWeapon/Attr/Hero/Life AgentHint\u003c/code\u003e；雙持時指引註明「只描述輪到的那把」\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildCombatSentence / Defeat\u003c/code\u003e（含 monsterNames、tags、skillName）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e帶 \u003ccode\u003eskillRef.kind\u003c/code\u003e 的 \u003ccode\u003ekindHint\u003c/code\u003e；勝/敗語氣相符；標註 питом/敗退/翻盤\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·資源\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildResourceFallback(chTitle)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e「於 XX 採集素材」自由造句 20–45字\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·寶箱\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildChestFallback(chTitle, gold)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e「發現並開啟寶箱」不提具體金幣數\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e章節 Boss\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003echapterLife/Weapon GainFragment\u003c/code\u003e 或 \u003ccode\u003echapterBaseFallback\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e帶前後 Lv 對比 \u003ccode\u003eXX LvA→LvB\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e商城/背包/裝備\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定句：\u003ccode\u003e商店購入 / 售出 / 裝備 slot ← name / 卸下\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e不走 LLM，固定句即時可讀\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout purple\"\u003e\u003cspan class=\"tag2\" style=\"color:var(--accent2)\"\u003eUI\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e事件紀錄\u003c/strong\u003e（BottomFeed）顯示 \u003ccode\u003efeed\u003c/code\u003e 前 5 筆；\u003cstrong\u003e探索日誌\u003c/strong\u003e（ChaptersView）顯示 \u003ccode\u003eexploreLog\u003c/code\u003e 前 80 筆，兩者皆由敘述句構成。戰鬥句含怪物名、技能名與詞條效果（元素剋制/爆擊等），敗退句以 \u003ccode\u003ekindDefeatSentenceVariants\u003c/code\u003e 避免把防禦招寫成制勝句。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s8\"\u003e八、Pack 結構與熱更新\u003c/h2\u003e\u003cp\u003e在「異世界冒險 Packs」資料夾新增 \u003ccode\u003eNOTE\u003c/code\u003e，內文貼 \u003ccode\u003e{\"isekai\": true, ...}\u003c/code\u003e JSON 即可。訂閱機制：優先讀 \u003ccode\u003epackNoteIds\u003c/code\u003e 清單，未指定則自動掃描所有含 \u003ccode\u003eisekai\u003c/code\u003e 的 NOTE。\u003c/p\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e可熱更新（不洗檔）\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003ecover / covers[6軌] / weaponIcons / equipHeroDesc / badges / title / links / chapters[].title/desc/rewardGold/rewardItems/bossName\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e鎖定（改 Pack 不生效）\u003c/div\u003e\u003cdiv class=\"v\"\u003e曲線 \u003ccode\u003expCurves.*\u003c/code\u003e 門檻 \u003ccode\u003eneedHeroLv / bossPower\u003c/code\u003e 技能定義 \u003ccode\u003eWEAPON/ATTR/BODY/LIFE_SKILLS\u003c/code\u003e 的等級門檻，避免舊 Pack 洗亂難度\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cpre\u003e首發 Pack 平衡摘要（可直接複製改值）：\nbalance: {\n  xpCurves: {weapon:{base:60,pow:1.3}, general:{base:100,pow:1.4}},\n  heroPoints: {perLv:5, milestones:[10,20..100], milestoneBonus:10, initial:8, initialStats:{STR:2,DEX:2,INT:2,LUK:2}, initialGold:160},\n  tick: {intervalMs:600000, caps:{perTick:180}, forge:{perFile:40,perPackNote:80}, agentWork:{perChars:60,perCount:10,bonusChars:20}, ceoChat:{perChars:20}, chatRoom:{perChars:20}},\n  explore: {rates:{combat:.6,resource:.25,chest:.15}, pityThreshold:100, dailyLimit:50, luck:{perLuk:.002,cap:.05,chestCap:.2,combatReduce:.6}},\n  combatXp: {pool:{boss:100,elite:30,small:5}, split:{weapon:.5,attr:.2,hero:.2,life:.1}, groupBonus:.15, defeatMul:.3, fixed:{resource:{hero:1,life:4},chest:{hero:1,life:2}}},\n  drops: {tier:{mul:{0:1,1:1.5,2:2}, bonus:{green:3,epic:5}}, economy:{shop:{white:80,green:800}, sell:{equip:{white:8,green:80,epic:320}}}}\n}\u003c/pre\u003e\u003ch2 id=\"s9\"\u003e九、存檔欄位與常見坑\u003c/h2\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eweapons[cat]\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003e{xp, lv, fails, successes, publishes}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e6 軌獨立；\u003ccode\u003efails/successes/publishes\u003c/code\u003e 為舊統計保留\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eheroLv/heroXp/heroPoints/stats\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e人物主等級與四維點數\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003estats\u003c/code\u003e 為已分配後的值；\u003ccode\u003eheroPoints\u003c/code\u003e 為剩餘可分配點\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eattrLv/attrXp/attrChoice\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e屬性等級與當前系\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003eattrChoice\u003c/code\u003e 為 fire/ice/wind 或 null\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003elifeLv/lifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e生活等級\u003c/td\u003e\u003ctd class=\"wrap\"\u003e由聊天與探索推進\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eequipSlots / equipSlotStats\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e8 格紙娃娃＋每格數值\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雙手武器鏡像於 leftHand/rightHand 同名；\u003ccode\u003eequipCategory/equipped\u003c/code\u003e 為舊相容欄位，寫入時自動同步\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003efeed / exploreLog\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e事件流\u003c/td\u003e\u003ctd class=\"wrap\"\u003efeed 80 條、exploreLog 80 條，皆為敘述句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eexplorePity / bossKillDate / exploreCount / exploreDailyCount+Date\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e探索節奏\u003c/td\u003e\u003ctd class=\"wrap\"\u003eBoss 每章每日限 1 次；pity 保底 100；每日 50 次跨章共用\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ebag / gold\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e背包與金幣\u003c/td\u003e\u003ctd class=\"wrap\"\u003e裝備件有 \u003ccode\u003eequipStats\u003c/code\u003e 隨件綁定，同名多件各有獨立 id\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003elastTickSnapshot / lastCubLvCheckAt / tickWeaponTurn / exploreWeaponTurn\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003eTick 與輪替\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雙持輪替各用一獨立 turn（mod 2），避免兩處互相搶位\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003e坑位\u003c/span\u003e\u003cdiv\u003e\u003cul style=\"margin:4px 0;padding-left:16px\"\u003e\u003cli\u003e\u003ccode\u003eequipCategory / equipped\u003c/code\u003e 為舊欄位，現以 \u003ccode\u003eequipSlots\u003c/code\u003e 為準；寫入前必 \u003ccode\u003esyncEquipCategory()\u003c/code\u003e 同步，否則切匕首仍漲單手劍。\u003c/li\u003e\u003cli\u003e雙手武器切單手時需\u003cstrong\u003e先返還鏡像件\u003c/strong\u003e再寫單格，否則背包會多一件。\u003c/li\u003e\u003cli\u003eTick 與探索的雙持輪替分別用 \u003ccode\u003etickWeaponTurn / exploreWeaponTurn\u003c/code\u003e，不可共用。\u003c/li\u003e\u003cli\u003ePack 缺欄位會\u003cstrong\u003e直接阻斷\u003c/strong\u003e（assertPack 拋錯），不要給 fallback。\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"hr\"\u003e\u003c/div\u003e\u003cp style=\"color:var(--ink2);font-size:12px;line-height:1.6\"\u003e原始碼索引：\u003ccode\u003egameDefs.ts\u003c/code\u003e 定義武器/屬性/身體/生活/章節/元素/怪物；\u003ccode\u003epackConfig.ts\u003c/code\u003e 硬連結 Pack 與曲線；\u003ccode\u003esaveModel.ts\u003c/code\u003e 存檔與 addXp；\u003ccode\u003ecombatEngine.ts\u003c/code\u003e 遭遇/詞條/戰力/掉落；\u003ccode\u003enarrative.ts\u003c/code\u003e 全部敘述模板與 kind；\u003ccode\u003eIsekaiMainView.tsx\u003c/code\u003e 四軌 tick、探索、章節、商城與 agentLine 調度；\u003ccode\u003eBottomFeed.tsx\u003c/code\u003e 事件紀錄 UI。Pack 範例與製作說明見「異世界冒險 Packs」資料夾兩篇 NOTE。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003cdiv class=\"hr\"\u003e\u003c/div\u003e\u003cdiv class=\"toc\"\u003e\u003cstrong style=\"font-size:13px\"\u003e目錄\u003c/strong\u003e\u003col\u003e\u003cli\u003e\u003ca href=\"#s1\"\u003e總覽 — 四軌＋Pack 硬連結\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s2\"\u003e等級體系與解鎖\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s3\"\u003eXP 曲線與升級函數\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s4\"\u003e經驗來源一覽（Tick／探索／章節）\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s5\"\u003e探索戰鬥 — 怪物、戰力與勝負\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s6\"\u003e敘述事件 — 雙層架構與 kind 系統\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s7\"\u003e各場景的敘述調用鏈\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s8\"\u003ePack 結構與熱更新\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"#s9\"\u003e存檔欄位與常見坑\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003ch2 id=\"s1\"\u003e一、總覽\u003c/h2\u003e\u003cdiv class=\"grid3\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e插件定位\u003c/div\u003e\u003cdiv class=\"v\"\u003e與 \u003cstrong\u003eCubeLV 深度綁定\u003c/strong\u003e的養成冒險：鍛造、修練、文字歷練與紙娃娃裝備。前端純展示，無後端 API。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e唯一真實來源\u003c/div\u003e\u003cdiv class=\"v\"\u003e所有數值皆來自 \u003cstrong\u003eNOTE Pack\u003c/strong\u003e（\u003ccode\u003eisekai: true\u003c/code\u003e 的 JSON）。\u003ccode\u003epackConfig.ts:assertPack()\u003c/code\u003e 缺欄位即\u003cstrong\u003e阻斷遊戲\u003c/strong\u003e，不回落舊值。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e資料流\u003c/div\u003e\u003cdiv class=\"v\"\u003ePack NOTE → \u003ccode\u003esaveModel.ts:tryParsePackNote()\u003c/code\u003e → \u003ccode\u003eIsekaiMainView:pack\u003c/code\u003e → 全部計算皆 \u003ccode\u003eassertPack(pack)\u003c/code\u003e 後取值。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"flow\"\u003e\u003cspan class=\"node\"\u003ePack NOTE\u003cbr\u003e(iseki:true)\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003egameDefs\u003cbr\u003e定義\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003epackConfig\u003cbr\u003e硬連結取值\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003esaveModel\u003cbr\u003e加經驗/升級\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003ecombatEngine\u003cbr\u003e戰鬥結算\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003enarrative\u003cbr\u003e造句\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003efeed/Log\u003c/span\u003e\u003c/div\u003e\u003ch2 id=\"s2\"\u003e二、等級體系與解鎖\u003c/h2\u003e\u003cp\u003e四條獨立經驗軌，互不共用 XP；武器軌內再分 6 把獨立等級。\u003c/p\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e軌道\u003c/th\u003e\u003cth\u003e對應欄位\u003c/th\u003e\u003cth\u003e等級來源\u003c/th\u003e\u003cth\u003e解鎖內容\u003c/th\u003e\u003cth\u003e備註\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e武器\u003c/span\u003e 6 軌\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eweapons[cat].lv / xp\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e鍛造 Tick、探索戰鬥、章節 Boss\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每把各 \u003cstrong\u003eLv.2 / 8 / 16\u003c/strong\u003e 解 3 招（見下表）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e獨立制；雙持不同分類時\u003cstrong\u003e同量雙軌\u003c/strong\u003e寫入\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-p\"\u003e屬性\u003c/span\u003e 3 選 1\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eattrLv / attrXp / attrChoice\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e員工留言 Tick、探索戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efire/ice/wind\u003c/code\u003e 各 Lv.2/8/16 共 9 招\u003c/td\u003e\u003ctd class=\"wrap\"\u003e初始隨機；\u003ccode\u003eheroLv≥20\u003c/code\u003e 可在 SkillView 切換\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e身體\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e綁定 \u003ccode\u003eheroLv\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e隨人物等級\u003c/td\u003e\u003ctd class=\"wrap\"\u003eLv.2 鋼軀、Lv.8 疾影步、Lv.16 調息\u003c/td\u003e\u003ctd class=\"wrap\"\u003e被動／位移／回魔\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-p\"\u003e生活\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003elifeLv / lifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e聊天室 Tick、探索資源/寶箱、章節\u003c/td\u003e\u003ctd class=\"wrap\"\u003eLv.5 採集術、Lv.15 煉金術\u003c/td\u003e\u003ctd class=\"wrap\"\u003e在聚落煙火中成長\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class=\"tag tag-o\"\u003e人物\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eheroLv / heroXp / heroPoints / stats\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eCEO 對話 Tick、探索、章節\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每級 \u003ccode\u003e+perLv\u003c/code\u003e 點，里程碑 Lv.10/20…各 +10\u003c/td\u003e\u003ctd class=\"wrap\"\u003e卡章節門檻；點數分配 STR/DEX/INT/LUK\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e武器 6 軌 × 3 招（WEAPON_SKILLS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e武器\u003c/th\u003e\u003cth\u003e對應 Stat\u003c/th\u003e\u003cth\u003eLv.2\u003c/th\u003e\u003cth\u003eLv.8\u003c/th\u003e\u003cth\u003eLv.16\u003c/th\u003e\u003cth\u003ekind 分布\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e單手劍\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e迅斬\u003c/td\u003e\u003ctd\u003e旋刃\u003c/td\u003e\u003ctd\u003e破空斬\u003c/td\u003e\u003ctd\u003e全 assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e雙手大劍\u003c/td\u003e\u003ctd\u003eSTR\u003c/td\u003e\u003ctd\u003e重劈\u003c/td\u003e\u003ctd\u003e橫斷\u003c/td\u003e\u003ctd\u003e大地崩斬\u003c/td\u003e\u003ctd\u003eassault / control / assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e弓\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e連射\u003c/td\u003e\u003ctd\u003e貫穿狙擊\u003c/td\u003e\u003ctd\u003e散射牽制\u003c/td\u003e\u003ctd\u003eassault / assault / control\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e雙手法杖\u003c/td\u003e\u003ctd\u003eINT\u003c/td\u003e\u003ctd\u003e魔力彈\u003c/td\u003e\u003ctd\u003e魔力護盾\u003c/td\u003e\u003ctd\u003e震盪波\u003c/td\u003e\u003ctd\u003eassault / guard / control\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e匕首\u003c/td\u003e\u003ctd\u003eDEX\u003c/td\u003e\u003ctd\u003e迅影刺\u003c/td\u003e\u003ctd\u003e背刺\u003c/td\u003e\u003ctd\u003e幻影連襲\u003c/td\u003e\u003ctd\u003eevade / assault / assault\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e小盾\u003c/td\u003e\u003ctd\u003eSTR\u003c/td\u003e\u003ctd\u003e盾擊\u003c/td\u003e\u003ctd\u003e堅守格擋\u003c/td\u003e\u003ctd\u003e聖盾衝鋒\u003c/td\u003e\u003ctd\u003econtrol / guard / control\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e屬性 3 系 × 3 招（ATTR_SKILLS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e系\u003c/th\u003e\u003cth\u003eLv.2\u003c/th\u003e\u003cth\u003eLv.8\u003c/th\u003e\u003cth\u003eLv.16\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e火\u003c/td\u003e\u003ctd\u003e火焰彈\u003c/td\u003e\u003ctd\u003e烈焰衝擊\u003c/td\u003e\u003ctd\u003e焚燼風暴\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e冰\u003c/td\u003e\u003ctd\u003e冰錐術（緩速）\u003c/td\u003e\u003ctd\u003e霜凍新星\u003c/td\u003e\u003ctd\u003e絕對零度\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e風\u003c/td\u003e\u003ctd\u003e風刃\u003c/td\u003e\u003ctd\u003e疾風連斬\u003c/td\u003e\u003ctd\u003e龍捲風暴\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e章節門檻（CHAPTERS）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e章節\u003c/th\u003e\u003cth\u003eneedHeroLv\u003c/th\u003e\u003cth\u003eBoss\u003c/th\u003e\u003cth\u003ebossPower\u003c/th\u003e\u003cth\u003e通關獎勵\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003ec1 綠野村的晨霧\u003c/td\u003e\u003ctd\u003e1\u003c/td\u003e\u003ctd\u003e霧林史萊姆王\u003c/td\u003e\u003ctd\u003e120\u003c/td\u003e\u003ctd\u003e金 55＋野莓/回血藥\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec2 鐵爐小徑\u003c/td\u003e\u003ctd\u003e5\u003c/td\u003e\u003ctd\u003e鐵爐守衛\u003c/td\u003e\u003ctd\u003e240\u003c/td\u003e\u003ctd\u003e金 130＋鐵礦/破舊單手劍\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec3 翠風迴廊\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e翠風鷹王\u003c/td\u003e\u003ctd\u003e380\u003c/td\u003e\u003ctd\u003e金 240＋風紋羽毛/風行藥水\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec4 暮色王城\u003c/td\u003e\u003ctd\u003e15\u003c/td\u003e\u003ctd\u003e暮色騎士長\u003c/td\u003e\u003ctd\u003e580\u003c/td\u003e\u003ctd\u003e金 380＋王城徽印/暮光結晶\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003eRULE\u003c/span\u003e\u003cdiv\u003e通關需\u003cstrong\u003e順序解鎖\u003c/strong\u003e：未通關前一章不可進下一章；\u003ccode\u003eheroLv\u003c/code\u003e 不到也不可進。Boss 採\u003cstrong\u003e戰力比對\u003c/strong\u003e（見第五節），非等級碾壓。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s3\"\u003e三、XP 曲線與升級函數\u003c/h2\u003e\u003ch3\u003e3.1 曲線公式（balance.xpCurves，首發 Pack 預設）\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e武器曲線\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eneed = 60 × (Lv+1)\u003csup\u003e1.3\u003c/sup\u003e\u003c/code\u003e\u003cbr\u003e例：Lv1→2 需 148；Lv7→8 約 691；Lv15→16 約 1500＋\u003cbr\u003e\u003cspan style=\"font-size:11px;color:var(--ink2)\"\u003epack: balance.xpCurves.weapon {base:60, pow:1.3}\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e通用曲線（人物/屬性/生活共用）\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eneed = 100 × (Lv+1)\u003csup\u003e1.4\u003c/sup\u003e\u003c/code\u003e\u003cbr\u003e例：Lv1→2 需 264；Lv9→10 約 1580\u003cbr\u003e\u003cspan style=\"font-size:11px;color:var(--ink2)\"\u003epack: balance.xpCurves.general {base:100, pow:1.4}\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cpre\u003epackConfig.ts\nneedXpForWeaponLv(pack, nextLv) → Math.round(base * nextLv^pow)\nneedXpGeneral(pack, nextLv)     → Math.round(base * nextLv^pow)\ncumulXp(pack, kind, target)     → 累加 1→target 所需總量\u003c/pre\u003e\u003ch3\u003e3.2 升級函數（saveModel.ts）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e函數\u003c/th\u003e\u003cth\u003e行為\u003c/th\u003e\u003cth\u003e升級後動作\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddWeaponXp(pack, save, wid, amt)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003eweapons[wid].xp += amt\u003c/code\u003e；while 超過 \u003ccode\u003eneedWL(lv+1)\u003c/code\u003e 就 \u003ccode\u003exp-=need; lv++\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e回 \u003ccode\u003e{leveled, newLv}\u003c/code\u003e；由呼叫方寫 feed\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddHeroXp(pack, save, amt)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e同上；升級時 \u003ccode\u003eheroPoints += perLv\u003c/code\u003e，若 \u003ccode\u003emilestones\u003c/code\u003e 含該 Lv 額外 \u003ccode\u003e+milestoneBonus\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e首發：perLv 5，里程碑 10/20/…100 各 +10\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eaddAttrXp / addLifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e通用曲線 while 升級\u003c/td\u003e\u003ctd class=\"wrap\"\u003e屬性若 \u003ccode\u003eattrChoice==null\u003c/code\u003e 自動選第一個可解鎖系\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout purple\"\u003e\u003cspan class=\"tag2\" style=\"color:var(--accent2)\"\u003eDUAL\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e雙持同量規則\u003c/strong\u003e：當 \u003ccode\u003eleftHand\u003c/code\u003e 與 \u003ccode\u003erightHand\u003c/code\u003e 為\u003cstrong\u003e不同單手分類\u003c/strong\u003e（例：匕首＋小盾）時，所有武器 XP 寫入會對兩把\u003cstrong\u003e同時各加同量\u003c/strong\u003e。雙手武器（大劍/弓/法杖）佔兩格鏡像，只算一軌。程式在 \u003ccode\u003eIsekaiMainView:onExplore / onEnterChapter / tick\u003c/code\u003e 三處皆同邏輯判斷 \u003ccode\u003eleftCat !== rightCat\u003c/code\u003e。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s4\"\u003e四、經驗來源一覽\u003c/h2\u003e\u003ch3\u003e4.1 Tick — 每 10 分鐘四軌被動（IsekaiMainView tick）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e軌道\u003c/th\u003e\u003cth\u003e偵測指標（與上次快照差值）\u003c/th\u003e\u003cth\u003e換算公式\u003c/th\u003e\u003cth\u003e上限\u003c/th\u003e\u003cth\u003e觸發間隔\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e鍛造（武器）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edFile\u003c/code\u003e 檔案增量、\u003ccode\u003edPackNote\u003c/code\u003e Pack NOTE 增量\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003emin(cap×forgeCapMul, dFile×perFile + dPackNote×perPackNote)\u003c/code\u003e\u003cbr\u003e首發：40/檔、80/篇，cap 180×4=720\u003c/td\u003e\u003ctd\u003e\u003ccode\u003ecaps.perTick × forgeCapMul\u003c/code\u003e\u003c/td\u003e\u003ctd rowspan=\"4\" style=\"vertical-align:middle\"\u003e600000ms\u003cbr\u003e(10 分鐘)\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e員工（屬性）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edAgentCount\u003c/code\u003e 則數、\u003ccode\u003edAgentChars\u003c/code\u003e 字數（排除 CEO 留言）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edAgentCount×perCount + floor(dAgentChars/bonusChars)\u003c/code\u003e\u003cbr\u003e首發：10/則 + 20字=1\u003c/td\u003e\u003ctd rowspan=\"3\" style=\"vertical-align:middle\"\u003e\u003ccode\u003ecaps.perTick\u003c/code\u003e\u003cbr\u003e(首發 180)\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eCEO（人物）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edCeoChars\u003c/code\u003e（chatBotSessions 字數）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efloor(dCeoChars / perChars)\u003c/code\u003e 首發 20字=1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e聊天（生活）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003edChatChars\u003c/code\u003e（chatRoom 字數）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efloor(dChatChars / perChars)\u003c/code\u003e 首發 20字=1\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cpre\u003e快照：computeSnapshot() 讀 byTypeAll[FILE/NOTE/COMMENT] + chatBotSessions + chatRoom\n比對：lastTickSnapshot → curSnap 差值 → 四軌 XP → addWeaponXp/addAttrXp/addHeroXp/addLifeXp\n掉落：每條有增益的軌各算一次「一般小怪」掉落（金 3~7、裝備 20% 白80/綠17/橘3）\u003c/pre\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003eNOTE\u003c/span\u003e\u003cdiv\u003e首次 tick 若 \u003ccode\u003elastTickSnapshot==null\u003c/code\u003e 僅建立快照不給 XP；之後每 10 分鐘比對一次。無增益的 tick 仍更新 \u003ccode\u003elastCubLvCheckAt\u003c/code\u003e 與快照，避免重複計算。\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e4.2 探索 — 戰鬥／資源／寶箱（ChaptersView → IsekaiMainView:onExplore）\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e事件抽選 combatEngine:rollExploreEvent\u003c/div\u003e\u003cdiv class=\"v\"\u003e基礎 \u003cstrong\u003e戰鬥 60% / 資源 25% / 寶箱 15%\u003c/strong\u003e；\u003cstrong\u003eLUK 動態修正\u003c/strong\u003e：\u003ccode\u003ebonus = min(cap, LUK×perLuk)\u003c/code\u003e → \u003ccode\u003echest += bonus\u003c/code\u003e、\u003ccode\u003ecombat -= bonus×combatReduce\u003c/code\u003e；\u003cstrong\u003e保底\u003c/strong\u003e \u003ccode\u003epityThreshold 100\u003c/code\u003e 連續未戰鬥達標則強制戰鬥。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e每日上限\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003eexplore.dailyLimit 50\u003c/code\u003e 次／日（跨章共用、隔日重置 \u003ccode\u003eexploreDailyDate\u003c/code\u003e）。達限即提示「明天再來」。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e事件\u003c/th\u003e\u003cth\u003e經驗\u003c/th\u003e\u003cth\u003e掉落\u003c/th\u003e\u003cth\u003e保底推進\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e見 4.3 戰鬥 XP 公式（四軌分流＋詞條加成）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e依怪物隊伍 \u003ccode\u003erollDrops\u003c/code\u003e：見 4.4\u003c/td\u003e\u003ctd\u003e若擊敗 Boss 則 pity 歸 0，否則 +1；敗退也 +1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e資源\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定 \u003ccode\u003ecombatXp.fixed.resource {hero:1, life:4}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e金 6–11＋隨機素材 1\u003c/td\u003e\u003ctd\u003epity +1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e寶箱\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定 \u003ccode\u003ecombatXp.fixed.chest {hero:1, life:2}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e金 10–24＋50% 素材\u003c/td\u003e\u003ctd\u003epity +1\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e4.3 戰鬥 XP 公式（combatEngine:computeExploreXp）\u003c/h3\u003e\u003cpre\u003e1. 基礎池：base = Σ pool[tier] × (1 + (n-1)×groupBonus)\n   首發 pool: boss 100 / elite 30 / small 5；groupBonus 0.15\n2. 四軌分流：weapon 50% / attr 20% / hero 20% / life 10%\n3. 定位加成：agile→weapon×1.3；caster→attr×1.5；tank→hero×1.5；assassin+爆擊→hero×1.2 \u0026amp; weapon×1.15\n4. 詞條加成：命中/閃避 +1 weapon；元素剋制 attr×1.5；爆擊/秒殺 hero×1.3；殘血狂暴 +2 weapon/+2 hero；被格擋 -1 weapon\n5. 敗退懲罰：全軌 ×defeatMul（首發 0.3）仍至少 1\u003c/pre\u003e\u003ch3\u003e4.4 掉落（combatEngine:rollDrops，Pack drops.table）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003etier\u003c/th\u003e\u003cth\u003e金幣\u003c/th\u003e\u003cth\u003e素材率\u003c/th\u003e\u003cth\u003e裝備\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003eBoss\u003c/td\u003e\u003ctd\u003e30 + rand 20\u003c/td\u003e\u003ctd\u003e100%\u003c/td\u003e\u003ctd\u003e必掉 2–3 件；tier 白0/綠50/橘50\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eElite\u003c/td\u003e\u003ctd\u003e12 + rand 8\u003c/td\u003e\u003ctd\u003e100%\u003c/td\u003e\u003ctd\u003e必掉 1–2 件；tier 白30/綠50/橘20\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eSmall\u003c/td\u003e\u003ctd\u003e3 + rand 5\u003c/td\u003e\u003ctd\u003e50%\u003c/td\u003e\u003ctd\u003e20% 機率掉 1 件；tier 白80/綠17/橘3\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003e裝備數值：\u003ccode\u003eequipBase[baseName] × tier.mul\u003c/code\u003e（首發 白1 / 綠1.5 / 橘2.0）；綠/橘額外 \u003ccode\u003ebonusStat\u003c/code\u003e 隨機 STR/DEX/INT/LUK 其一（綠+3 / 橘+5）。敗退僅給金幣（×0.3），不掉裝備/素材。\u003c/p\u003e\u003ch3\u003e4.5 章節 Boss 挑戰（onEnterChapter）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e項目\u003c/th\u003e\u003cth\u003e內容\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e勝負判定\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ecalcPlayerPower(pack, save) ≥ bossPower\u003c/code\u003e 即勝；否則提示戰力不足\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e經驗\u003c/td\u003e\u003ctd class=\"wrap\"\u003e勝：\u003ccode\u003elife +12\u003c/code\u003e、\u003ccode\u003eweapon +10\u003c/code\u003e（雙持同量）；敗：無\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e獎勵\u003c/td\u003e\u003ctd class=\"wrap\"\u003e首次通關 \u003ccode\u003egrantChapterRewards\u003c/code\u003e：金＋道具；重複通關僅提示「再次擊敗」\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"s5\"\u003e五、探索戰鬥 — 怪物、戰力與勝負\u003c/h2\u003e\u003ch3\u003e5.1 怪物矩陣（gameDefs:CHAPTER_MONSTER_POOLS）\u003c/h3\u003e\u003cp\u003e每章 1 Boss ＋1 Elite ＋5 Small（balance/agile/caster/tank/assassin 各一），六元素火/冰/風/雷/毒/光，環形剋制：火→風→雷→冰→毒→光→火，剋制 ×1.5 / 被剋 ×0.75。\u003c/p\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e章節\u003c/th\u003e\u003cth\u003eBoss\u003c/th\u003e\u003cth\u003eSmall 5 種\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003ec1 綠野\u003c/td\u003e\u003ctd\u003e霧林史萊姆王（毒）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e苔綠/跳跳/孢子/岩殼/暗影 史萊姆\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec2 鐵爐\u003c/td\u003e\u003ctd\u003e鐵爐守衛（火）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e工人傀儡/礦鼠/晶礦術士/重裝鐵衛/割喉者\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec3 翠風\u003c/td\u003e\u003ctd\u003e翠風鷹王（風）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雛鷹/鷹隼/風語祭司/磐岩鷹衛/夜梟刺鷹\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ec4 暮色\u003c/td\u003e\u003ctd\u003e暮色騎士長（光）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e步兵/斥候/詠唱者/重騎/潛刃\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch3\u003e5.2 遭遇組成（combatEngine:rollEncounter）\u003c/h3\u003e\u003cp\u003e隊長抽選：Boss 5% / Elite 20% / Small 75%；保底強制 Boss；Boss 當日已擊殺則降為 Elite。隊伍大小 1–5 隻，依 \u003ccode\u003ecalcPlayerPower\u003c/code\u003e 動態配平，使 \u003ccode\u003emonsterTotal ≈ playerPower×(0.95–1.10)\u003c/code\u003e。\u003c/p\u003e\u003ch3\u003e5.3 詞條（combatEngine:resolveCombatTags）\u003c/h3\u003e\u003cp\u003e每隻怪各擲：命中/閃避（依 \u003ccode\u003ehit/eva\u003c/code\u003e）、元素剋制/被剋、爆擊（依 \u003ccode\u003ecrit%\u003c/code\u003e）、火/毒/雷/冰 DOT（依 \u003ccode\u003eattrLv≥2\u003c/code\u003e 15–18%）、隊伍級 秒殺 12%、殘血狂暴 25%（限 Boss/Elite）。最多 8 條，探索取前 6 條。\u003c/p\u003e\u003ch3\u003e5.4 勝負（combatEngine:resolveExploreOutcome — C 混合）\u003c/h3\u003e\u003cpre\u003eplayerPower = heroLv×8 + weaponLv×6(雙持各半) + attrLv×4 + lifeLv×2 + Σstats + ΣequipBonus\nmonsterPower = Σ tierBase×powerFactor × (0.88–1.12)  // tierBase: small 40 / elite 80 / boss 120 × (bossPower/120)\ntagScore = Σ weight[tag]  // 命中+1 閃避+1.5 爆擊+2 剋制+2 秒殺+3 ... 狂暴-1 被閃-1.5 格擋-1 被剋-2\ntagMul = clamp(tagScore×0.04, -0.20, +0.20)\neffectivePower = playerPower × (1+tagMul)\nwin = effectivePower ≥ monsterPower  // 基礎 r≥1.10 必勝、r≤0.90 必敗，詞條僅在 ±20% 模糊帶內可翻盤\nflipped 標記用於提示「詞條逆轉 / 被詞條翻盤」\u003c/pre\u003e\u003ch2 id=\"s6\"\u003e六、敘述事件 — 雙層架構與 kind 系統\u003c/h2\u003e\u003ch3\u003e6.1 設計原則\u003c/h3\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e同一意思、自由造句\u003c/div\u003e\u003cdiv class=\"v\"\u003e所有敘述皆\u003cstrong\u003e同一意思換句話說\u003c/strong\u003e，每次用詞不同，不套固定模板。由 LLM 負責變化，本地僅作\u003cstrong\u003e超時後備\u003c/strong\u003e。\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e按 kind 選對描述\u003c/div\u003e\u003cdiv class=\"v\"\u003e技能帶 \u003ccode\u003ekind: assault/guard/evade/control/recover\u003c/code\u003e，敘述必須對應：攻擊=出擊/命中、\u003cstrong\u003e防禦=硬抗/格擋/化解\u003c/strong\u003e、閃避=閃開/位移、牽制=震退/凍結、回復=調息/回流。防禦招不可寫成制勝句。\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e6.2 SkillKind 推斷（narrative.ts）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003ekind\u003c/th\u003e\u003cth\u003e含義\u003c/th\u003e\u003cth\u003e敘述指引（kindHint）\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eassault\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e攻擊\u003c/td\u003e\u003ctd class=\"wrap\"\u003e描述為出擊/命中/破綻/連擊\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eguard\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e防禦\u003c/td\u003e\u003ctd class=\"wrap\"\u003e硬抗/格擋/化解傷害、避免重創，而非主動出擊\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eevade\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e閃避位移\u003c/td\u003e\u003ctd class=\"wrap\"\u003e閃開/側身/拉開距離、順勢反制\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003econtrol\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e牽制控場\u003c/td\u003e\u003ctd class=\"wrap\"\u003e牽制/震退/緩速/凍結/牽引敵陣\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003erecover\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e回復調息\u003c/td\u003e\u003ctd class=\"wrap\"\u003e調勻氣息/回氣/魔力回流、穩住陣腳\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cpre\u003enarrative.ts: kindOf(skill) → 有 kind 直接取，無則由 desc 關鍵字正則推斷\nresolveSkillKind(name) → 遍歷 WEAPON/ATTR/BODY 找同名技能回 kind\nskillAgentHint(name) → \"技能『XX』屬 防禦向：...\" 供 prompt\nkindSentenceVariants / kindDefeatSentenceVariants → 依 kind 的勝/敗各 3–4 句後備\u003c/pre\u003e\u003ch3\u003e6.3 雙層敘述鏈\u003c/h3\u003e\u003cdiv class=\"flow\"\u003e\u003cspan class=\"node\" style=\"background:var(--soft)\"\u003e本地 Fallback\u003cbr\u003e立即寫入 feed/log\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\" style=\"background:var(--soft2);border-color:var(--accent2)\"\u003ecallPrompt isekai_feed\u003cbr\u003e6 秒超時\u003c/span\u003e\u003cspan class=\"arr\"\u003e→\u003c/span\u003e\u003cspan class=\"node\"\u003e成功：替換/追記\u003cbr\u003e失敗：保留 Fallback\u003c/span\u003e\u003c/div\u003e\u003cpre\u003eIsekaiMainView: agentLine(context, fallback)\n  → withTimeout(callPrompt({\n      action: 'isekai_feed',\n      system_prompt: '你是「異世界冒險」的即時旁白。用繁體中文以一句話（20-45字）生動描寫...'\n      + '① 同一意思自由造句、每次不同 ② 按 kind 選對描述 ③ 全部品類皆自由發揮 ④ 奇幻語氣、不要數值、不要洩機制',\n      prompt: context,\n      model: 'auto'\n    }).then(content.slice(0,80)), 6000, fallback)\u003c/pre\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e先寫 Fallback\u003c/strong\u003e：戰鬥 \u003ccode\u003ebuildCombatSentence / buildCombatDefeatSentence\u003c/code\u003e、資源 \u003ccode\u003ebuildResourceFallback\u003c/code\u003e、寶箱 \u003ccode\u003ebuildChestFallback\u003c/code\u003e、Tick 各軌 \u003ccode\u003etick*GainFragment / tick*LevelFragment\u003c/code\u003e 等立即寫入 \u003ccode\u003efeed\u003c/code\u003e 與 \u003ccode\u003eexploreLog\u003c/code\u003e，保證有文字。\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e再追 LLM\u003c/strong\u003e：\u003ccode\u003eagentLine(ctx, fallback).then(... persist)\u003c/code\u003e 非同步回來後\u003cstrong\u003e替換\u003c/strong\u003e最新一筆 \u003ccode\u003eexploreLog[0].msg\u003c/code\u003e 並 \u003ccode\u003epushFeed(line)\u003c/code\u003e；若 5 分鐘內同 tags 則改為 \u003ccode\u003e追記：line\u003c/code\u003e 避免刷屏。\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e超時 6 秒\u003c/strong\u003e直接保留 Fallback，不阻塞主流程。\u003c/li\u003e\u003c/ul\u003e\u003ch3\u003e6.4 本地模板庫（narrative.ts 完整清單）\u003c/h3\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e函數\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003cth\u003e句數\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epublishWeaponGain/Level\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e上架 +120（舊路徑保留）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e各 6 / 5 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epackSuccess/Fail Gain/Level\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e打包成功 +25 / 失敗 +8\u003c/td\u003e\u003ctd class=\"wrap\"\u003e各 6 / 4 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003echapter* / tick* Gain/Level Fragment\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e章節與 Tick 四軌的短片段，拼成 base\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每軌 5 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003etick*AgentHint\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e餵 LLM 的 6–8 種指引（武器/火/冰/風/身體/生活）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每軌 8 句隨機挑一\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ecombatTagToSentence / sentenceVariants\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e標籤→自然句（命中/爆擊/閃避/格擋/剋制/燃燒/中毒/感電/凍結/秒殺/狂暴）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e每標籤 3–6 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ebuildCombatSentence / Defeat\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e戰鬥勝/敗完整句：開場 ＋ 3 條去重標籤句\u003c/td\u003e\u003ctd class=\"wrap\"\u003e開場各 4 句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003epickCombatSkillRef / chooseTickWeapon\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e依當前裝備與等級挑可用技能；雙持輪替\u003c/td\u003e\u003ctd\u003e—\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"s7\"\u003e七、各場景的敘述調用鏈\u003c/h2\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e場景\u003c/th\u003e\u003cth\u003eFallback\u003c/th\u003e\u003cth\u003eLLM prompt 要點\u003c/th\u003e\u003cth\u003e寫入位置\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003eTick 四軌\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003etickForge/Attr/Hero/Life Gain/Level Fragment\u003c/code\u003e 拼 \u003ccode\u003ebase\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e按軌分別帶 \u003ccode\u003etickWeapon/Attr/Hero/Life AgentHint\u003c/code\u003e；雙持時指引註明「只描述輪到的那把」\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·戰鬥\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildCombatSentence / Defeat\u003c/code\u003e（含 monsterNames、tags、skillName）\u003c/td\u003e\u003ctd class=\"wrap\"\u003e帶 \u003ccode\u003eskillRef.kind\u003c/code\u003e 的 \u003ccode\u003ekindHint\u003c/code\u003e；勝/敗語氣相符；標註 питом/敗退/翻盤\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·資源\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildResourceFallback(chTitle)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e「於 XX 採集素材」自由造句 20–45字\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e探索·寶箱\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003ebuildChestFallback(chTitle, gold)\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e「發現並開啟寶箱」不提具體金幣數\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e ＋ \u003ccode\u003eexploreLog[]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e章節 Boss\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003echapterLife/Weapon GainFragment\u003c/code\u003e 或 \u003ccode\u003echapterBaseFallback\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e帶前後 Lv 對比 \u003ccode\u003eXX LvA→LvB\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e商城/背包/裝備\u003c/td\u003e\u003ctd class=\"wrap\"\u003e固定句：\u003ccode\u003e商店購入 / 售出 / 裝備 slot ← name / 卸下\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e不走 LLM，固定句即時可讀\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003efeed\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout purple\"\u003e\u003cspan class=\"tag2\" style=\"color:var(--accent2)\"\u003eUI\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e事件紀錄\u003c/strong\u003e（BottomFeed）顯示 \u003ccode\u003efeed\u003c/code\u003e 前 5 筆；\u003cstrong\u003e探索日誌\u003c/strong\u003e（ChaptersView）顯示 \u003ccode\u003eexploreLog\u003c/code\u003e 前 80 筆，兩者皆由敘述句構成。戰鬥句含怪物名、技能名與詞條效果（元素剋制/爆擊等），敗退句以 \u003ccode\u003ekindDefeatSentenceVariants\u003c/code\u003e 避免把防禦招寫成制勝句。\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"s8\"\u003e八、Pack 結構與熱更新\u003c/h2\u003e\u003cp\u003e在「異世界冒險 Packs」資料夾新增 \u003ccode\u003eNOTE\u003c/code\u003e，內文貼 \u003ccode\u003e{\"isekai\": true, ...}\u003c/code\u003e JSON 即可。訂閱機制：優先讀 \u003ccode\u003epackNoteIds\u003c/code\u003e 清單，未指定則自動掃描所有含 \u003ccode\u003eisekai\u003c/code\u003e 的 NOTE。\u003c/p\u003e\u003cdiv class=\"grid2\"\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e可熱更新（不洗檔）\u003c/div\u003e\u003cdiv class=\"v\"\u003e\u003ccode\u003ecover / covers[6軌] / weaponIcons / equipHeroDesc / badges / title / links / chapters[].title/desc/rewardGold/rewardItems/bossName\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"card\"\u003e\u003cdiv class=\"k\"\u003e鎖定（改 Pack 不生效）\u003c/div\u003e\u003cdiv class=\"v\"\u003e曲線 \u003ccode\u003expCurves.*\u003c/code\u003e 門檻 \u003ccode\u003eneedHeroLv / bossPower\u003c/code\u003e 技能定義 \u003ccode\u003eWEAPON/ATTR/BODY/LIFE_SKILLS\u003c/code\u003e 的等級門檻，避免舊 Pack 洗亂難度\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cpre\u003e首發 Pack 平衡摘要（可直接複製改值）：\nbalance: {\n  xpCurves: {weapon:{base:60,pow:1.3}, general:{base:100,pow:1.4}},\n  heroPoints: {perLv:5, milestones:[10,20..100], milestoneBonus:10, initial:8, initialStats:{STR:2,DEX:2,INT:2,LUK:2}, initialGold:160},\n  tick: {intervalMs:600000, caps:{perTick:180}, forge:{perFile:40,perPackNote:80}, agentWork:{perChars:60,perCount:10,bonusChars:20}, ceoChat:{perChars:20}, chatRoom:{perChars:20}},\n  explore: {rates:{combat:.6,resource:.25,chest:.15}, pityThreshold:100, dailyLimit:50, luck:{perLuk:.002,cap:.05,chestCap:.2,combatReduce:.6}},\n  combatXp: {pool:{boss:100,elite:30,small:5}, split:{weapon:.5,attr:.2,hero:.2,life:.1}, groupBonus:.15, defeatMul:.3, fixed:{resource:{hero:1,life:4},chest:{hero:1,life:2}}},\n  drops: {tier:{mul:{0:1,1:1.5,2:2}, bonus:{green:3,epic:5}}, economy:{shop:{white:80,green:800}, sell:{equip:{white:8,green:80,epic:320}}}}\n}\u003c/pre\u003e\u003ch2 id=\"s9\"\u003e九、存檔欄位與常見坑\u003c/h2\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eweapons[cat]\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003e{xp, lv, fails, successes, publishes}\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e6 軌獨立；\u003ccode\u003efails/successes/publishes\u003c/code\u003e 為舊統計保留\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eheroLv/heroXp/heroPoints/stats\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e人物主等級與四維點數\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003estats\u003c/code\u003e 為已分配後的值；\u003ccode\u003eheroPoints\u003c/code\u003e 為剩餘可分配點\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eattrLv/attrXp/attrChoice\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e屬性等級與當前系\u003c/td\u003e\u003ctd class=\"wrap\"\u003e\u003ccode\u003eattrChoice\u003c/code\u003e 為 fire/ice/wind 或 null\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003elifeLv/lifeXp\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e生活等級\u003c/td\u003e\u003ctd class=\"wrap\"\u003e由聊天與探索推進\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eequipSlots / equipSlotStats\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e8 格紙娃娃＋每格數值\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雙手武器鏡像於 leftHand/rightHand 同名；\u003ccode\u003eequipCategory/equipped\u003c/code\u003e 為舊相容欄位，寫入時自動同步\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003efeed / exploreLog\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e事件流\u003c/td\u003e\u003ctd class=\"wrap\"\u003efeed 80 條、exploreLog 80 條，皆為敘述句\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003eexplorePity / bossKillDate / exploreCount / exploreDailyCount+Date\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e探索節奏\u003c/td\u003e\u003ctd class=\"wrap\"\u003eBoss 每章每日限 1 次；pity 保底 100；每日 50 次跨章共用\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003ebag / gold\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003e背包與金幣\u003c/td\u003e\u003ctd class=\"wrap\"\u003e裝備件有 \u003ccode\u003eequipStats\u003c/code\u003e 隨件綁定，同名多件各有獨立 id\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ccode\u003elastTickSnapshot / lastCubLvCheckAt / tickWeaponTurn / exploreWeaponTurn\u003c/code\u003e\u003c/td\u003e\u003ctd class=\"wrap\"\u003eTick 與輪替\u003c/td\u003e\u003ctd class=\"wrap\"\u003e雙持輪替各用一獨立 turn（mod 2），避免兩處互相搶位\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag2\"\u003e坑位\u003c/span\u003e\u003cdiv\u003e\u003cul style=\"margin:4px 0;padding-left:16px\"\u003e\u003cli\u003e\u003ccode\u003eequipCategory / equipped\u003c/code\u003e 為舊欄位，現以 \u003ccode\u003eequipSlots\u003c/code\u003e 為準；寫入前必 \u003ccode\u003esyncEquipCategory()\u003c/code\u003e 同步，否則切匕首仍漲單手劍。\u003c/li\u003e\u003cli\u003e雙手武器切單手時需\u003cstrong\u003e先返還鏡像件\u003c/strong\u003e再寫單格，否則背包會多一件。\u003c/li\u003e\u003cli\u003eTick 與探索的雙持輪替分別用 \u003ccode\u003etickWeaponTurn / exploreWeaponTurn\u003c/code\u003e，不可共用。\u003c/li\u003e\u003cli\u003ePack 缺欄位會\u003cstrong\u003e直接阻斷\u003c/strong\u003e（assertPack 拋錯），不要給 fallback。\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"hr\"\u003e\u003c/div\u003e\u003cp style=\"color:var(--ink2);font-size:12px;line-height:1.6\"\u003e原始碼索引：\u003ccode\u003egameDefs.ts\u003c/code\u003e 定義武器/屬性/身體/生活/章節/元素/怪物；\u003ccode\u003epackConfig.ts\u003c/code\u003e 硬連結 Pack 與曲線；\u003ccode\u003esaveModel.ts\u003c/code\u003e 存檔與 addXp；\u003ccode\u003ecombatEngine.ts\u003c/code\u003e 遭遇/詞條/戰力/掉落；\u003ccode\u003enarrative.ts\u003c/code\u003e 全部敘述模板與 kind；\u003ccode\u003eIsekaiMainView.tsx\u003c/code\u003e 四軌 tick、探索、章節、商城與 agentLine 調度；\u003ccode\u003eBottomFeed.tsx\u003c/code\u003e 事件紀錄 UI。Pack 範例與製作說明見「異世界冒險 Packs」資料夾兩篇 NOTE。\u003c/p\u003e\u003c/div\u003e","createdAt":1787784631958,"deletedAt":null,"displayMode":"artifact","embedRenders":{},"id":"472fd24de16771ed3c281569","isNew":false,"isPublic":true,"itemType":"NOTE","name":"異世界冒險插件 — 等級提升與敘述事件 完整技術文件","parents":{"b7d5251b3deb213157d75793":1787784631958},"preParentID":null,"updatedAt":1787788320670,"updatedBy":{"userId":"6a46f1f3013d79e6f40868","userName":"平凡人"},"version":12}]}