jianzhihuixiang/alacarte-novel-website/chapters/chapter-68.html

986 lines
42 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<title>绿都格罗兹尼·魔雷者莫纳亨 - 阿拉德:剑之回响</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-primary: linear-gradient(135deg, #0f0c29 0%, #302b63 50%, #24243e 100%);
--text-primary: #e0e0e0;
--text-secondary: #888;
--accent-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
--border-color: rgba(255,255,255,0.1);
--btn-bg: rgba(255,255,255,0.1);
--btn-hover: rgba(255,255,255,0.2);
}
[data-theme="light"] {
--bg-primary: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
--text-primary: #333;
--text-secondary: #666;
--border-color: rgba(0,0,0,0.1);
--btn-bg: rgba(0,0,0,0.05);
--btn-hover: rgba(0,0,0,0.1);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Noto Serif SC', serif;
background: var(--bg-primary);
color: var(--text-primary);
line-height: 1.8;
min-height: 100vh;
transition: all 0.3s ease;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
padding-bottom: 120px;
}
/* 顶部导航 */
.top-nav {
position: fixed;
top: 0;
left: 0;
right: 0;
background: rgba(0,0,0,0.3);
backdrop-filter: blur(10px);
border-bottom: 1px solid var(--border-color);
z-index: 1000;
padding: 10px 20px;
}
.top-nav-content {
max-width: 800px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-link {
color: var(--text-primary);
text-decoration: none;
font-family: 'Noto Sans SC', sans-serif;
font-size: 14px;
padding: 8px 16px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
transition: all 0.3s ease;
}
.nav-link:hover {
background: var(--btn-hover);
}
.chapter-header {
text-align: center;
padding: 80px 0 40px;
border-bottom: 1px solid var(--border-color);
margin-bottom: 40px;
}
.chapter-number {
font-size: 14px;
color: var(--text-secondary);
letter-spacing: 4px;
text-transform: uppercase;
margin-bottom: 10px;
}
.chapter-title {
font-size: 32px;
font-weight: 700;
background: var(--accent-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 20px;
}
.chapter-meta {
font-size: 14px;
color: var(--text-secondary);
}
.chapter-content {
font-size: 18px;
line-height: 2;
text-align: justify;
}
.chapter-content p {
margin-bottom: 1.5em;
text-indent: 2em;
}
.chapter-content p:first-of-type::first-letter {
font-size: 3em;
float: left;
line-height: 1;
margin-right: 8px;
margin-top: -5px;
background: var(--accent-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
font-weight: 700;
}
/* 固定底部导航 */
.fixed-nav {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background: rgba(0,0,0,0.3);
backdrop-filter: blur(10px);
border-top: 1px solid var(--border-color);
z-index: 1000;
padding: 15px 20px;
}
.fixed-nav-content {
max-width: 800px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-btn {
padding: 12px 24px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
color: var(--text-primary);
text-decoration: none;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
font-size: 14px;
cursor: pointer;
}
.nav-btn:hover {
background: var(--btn-hover);
transform: translateY(-2px);
}
.nav-btn.disabled {
opacity: 0.3;
cursor: not-allowed;
pointer-events: none;
}
.nav-btn.active {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-color: #667eea;
}
/* 右侧滚动按钮 */
.scroll-buttons {
position: fixed;
right: 20px;
bottom: 90px;
display: flex;
flex-direction: column;
gap: 10px;
z-index: 1001;
}
.scroll-btn {
width: 40px;
height: 40px;
border-radius: 8px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
color: var(--text-primary);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
}
.scroll-btn:hover {
background: var(--btn-hover);
}
/* TTS弹出面板 */
.tts-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.5);
z-index: 2000;
display: none;
align-items: center;
justify-content: center;
}
.tts-overlay.show {
display: flex;
}
.tts-panel {
background: rgba(30,30,50,0.95);
backdrop-filter: blur(10px);
border-radius: 16px;
border: 1px solid var(--border-color);
padding: 24px;
width: 90%;
max-width: 400px;
box-shadow: 0 10px 40px rgba(0,0,0,0.3);
}
[data-theme="light"] .tts-panel {
background: rgba(255,255,255,0.95);
}
.tts-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 15px;
border-bottom: 1px solid var(--border-color);
}
.tts-title {
font-size: 18px;
font-weight: 600;
color: var(--text-primary);
font-family: 'Noto Sans SC', sans-serif;
}
.tts-close {
width: 32px;
height: 32px;
border-radius: 50%;
background: var(--btn-bg);
border: 1px solid var(--border-color);
color: var(--text-primary);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
transition: all 0.3s ease;
}
.tts-close:hover {
background: var(--btn-hover);
}
.tts-controls {
display: flex;
justify-content: center;
gap: 16px;
margin-bottom: 20px;
}
.tts-btn {
width: 56px;
height: 56px;
border-radius: 50%;
background: var(--btn-bg);
border: 2px solid var(--border-color);
color: var(--text-primary);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
}
.tts-btn:hover {
background: var(--btn-hover);
transform: scale(1.1);
}
.tts-btn.active {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-color: #667eea;
transform: scale(1.1);
}
.tts-progress {
margin-bottom: 20px;
}
.tts-progress-bar {
height: 6px;
background: var(--btn-bg);
border-radius: 3px;
overflow: hidden;
margin-bottom: 8px;
}
.tts-progress-fill {
height: 100%;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
width: 0%;
transition: width 0.1s ease;
}
.tts-time {
font-size: 13px;
color: var(--text-secondary);
font-family: 'Noto Sans SC', sans-serif;
text-align: center;
}
.tts-speed {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
}
.tts-speed-label {
font-size: 14px;
color: var(--text-secondary);
font-family: 'Noto Sans SC', sans-serif;
}
.tts-speed-select {
padding: 8px 16px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
color: var(--text-primary);
font-size: 14px;
cursor: pointer;
font-family: 'Noto Sans SC', sans-serif;
}
/* 侧边栏 - 标题固定,内容滚动 */
.sidebar {
position: fixed;
right: 20px;
top: 50%;
transform: translateY(-50%);
background: rgba(0,0,0,0.5);
backdrop-filter: blur(10px);
border-radius: 12px;
border: 1px solid var(--border-color);
width: 200px;
max-height: 70vh;
z-index: 999;
display: flex;
flex-direction: column;
}
.sidebar-title {
font-size: 14px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 2px;
padding: 15px 20px;
border-bottom: 1px solid var(--border-color);
flex-shrink: 0;
}
.sidebar-content {
overflow-y: auto;
padding: 10px 20px 20px;
flex: 1;
scrollbar-width: thin;
scrollbar-color: transparent transparent;
transition: scrollbar-color 0.3s ease;
}
.sidebar-content:hover {
scrollbar-color: rgba(255,255,255,0.3) transparent;
}
.sidebar-content::-webkit-scrollbar {
width: 6px;
}
.sidebar-content::-webkit-scrollbar-track {
background: transparent;
}
.sidebar-content::-webkit-scrollbar-thumb {
background: transparent;
border-radius: 3px;
transition: background 0.3s ease;
}
.sidebar-content:hover::-webkit-scrollbar-thumb {
background: rgba(255,255,255,0.3);
}
.sidebar-content:hover::-webkit-scrollbar-thumb:hover {
background: rgba(255,255,255,0.5);
}
[data-theme="light"] .sidebar-content:hover {
scrollbar-color: rgba(0,0,0,0.3) transparent;
}
[data-theme="light"] .sidebar-content:hover::-webkit-scrollbar-thumb {
background: rgba(0,0,0,0.3);
}
[data-theme="light"] .sidebar-content:hover::-webkit-scrollbar-thumb:hover {
background: rgba(0,0,0,0.5);
}
.sidebar-chapter {
display: block;
padding: 8px 0;
color: #aaa;
text-decoration: none;
font-size: 13px;
border-bottom: 1px solid rgba(255,255,255,0.05);
transition: all 0.3s ease;
line-height: 1.5;
}
.sidebar-chapter:hover {
color: #667eea;
}
.sidebar-chapter.current {
color: #667eea;
font-weight: 600;
}
@media (max-width: 1200px) {
.sidebar {
display: none;
}
}
@media (max-width: 600px) {
.chapter-title {
font-size: 24px;
}
.chapter-content {
font-size: 16px;
}
.fixed-nav-content {
gap: 8px;
}
.nav-btn {
padding: 10px 12px;
font-size: 12px;
}
.scroll-buttons {
display: none;
}
.tts-panel {
padding: 20px;
width: 95%;
}
.tts-btn {
width: 48px;
height: 48px;
font-size: 18px;
}
.tts-title {
font-size: 16px;
}
}
/* 滚动条样式 */
.sidebar::-webkit-scrollbar {
width: 4px;
}
.sidebar::-webkit-scrollbar-track {
background: transparent;
}
.sidebar::-webkit-scrollbar-thumb {
background: rgba(255,255,255,0.2);
border-radius: 2px;
}
</style>
</head>
<body>
<!-- 顶部导航 -->
<nav class="top-nav">
<div class="top-nav-content">
<a href="../index.html" class="nav-link">返回首页</a>
<button class="nav-link" id="themeToggle">切换主题</button>
</div>
</nav>
<div class="container">
<header class="chapter-header">
<div class="chapter-number">Chapter 68</div>
<h1 class="chapter-title">{{CHAPTER_TITLE}}</h1>
</header>
<article class="chapter-content">
<p>热血八番街的战斗结束后,林克六人带着受伤的麦吉返回赫顿玛尔。</p>
<p>凯丽的工坊里,机械臂的嗡鸣声和焊接的火花交织在一起。麦吉躺在工作台上,虽然伤势不轻,但嘴里还在嘟囔着:"那个疯女人……下次见到她一定要……"</p>
<p>"安静点。"凯丽没好气地敲了一下他的脑袋,"要不是我,你早就成烤哥布林了。"</p>
<p>麦吉撇撇嘴,不再说话。</p>
<p>林克将卡勒特的阿拉德潜入计划书交给凯丽:"这是从火箭侠那里找到的。"</p>
<p>凯丽接过文件,快速浏览后,脸色变得凝重:"果然,卡勒特的野心不止于此。他们计划在阿拉德建立多个据点,然后里应外合,彻底占领这片大陆。"</p>
<p>"有办法阻止吗?"赛丽亚担忧地问。</p>
<p>"有。"凯丽指着文件上的一处标记,"根据计划书,卡勒特在诺斯玛尔的绿都格罗兹尼还有一个重要据点。那里是他们的念动力者研究中心,如果能摧毁那里,就能重创卡勒特的情报网络。"</p>
<p>"念动力者?"敏泰好奇地歪着头。</p>
<p>"一群拥有特殊能力的人。"凯丽解释道,"他们能够用意念操控物体,是非常危险的存在。卡勒特一直在试图控制他们为己所用。"</p>
<p>林克站起身:"那我们就去格罗兹尼。"</p>
<p>"等等。"凯丽叫住他,"格罗兹尼比热血八番街危险得多。那里的首领是魔雷者麦瑟·莫纳亨,她是念动力者中的最强者,被称为超女。"</p>
<p>"超女?"帕丽丝挑了挑眉,"听起来挺嚣张的。"</p>
<p>"不要轻敌。"凯丽严肃地说,"莫纳亨的魔雷念动力非常强大,她周围的物体都能自行移动,还能让敌人的动作变得无力。而且……她似乎并不是自愿为卡勒特效力的。"</p>
<p>"什么意思?"林克问道。</p>
<p>"根据情报,莫纳亨和其他的念动力者原本只是想在格罗兹尼安静地生活,但因为他们的能力被普通人排斥,最终被卡勒特胁迫控制。"凯丽叹了口气,"他们其实是受害者。"</p>
<p>林克沉思片刻:"如果能解救他们呢?"</p>
<p>"那就是最好的结果。"凯丽点点头,"但首先,你们得突破卡勒特的防线。格罗兹尼被大量的念动力怪物把守,还有卡勒特的精英部队。"</p>
<p>"明白了。"林克看向身边的五位少女,"准备好了吗?"</p>
<p>"当然。"赛丽亚微笑道。</p>
<p>"走吧。"帕丽丝活动着手腕。</p>
<p>"我会努力的。"敏泰握紧骨杖。</p>
<p>"让我见识一下念动力的力量。"莎兰轻抚法杖。</p>
<p>"GBL教会指引我们。"奥菲利亚双手合十。</p>
<p>六人告别凯丽和麦吉,再次踏上征程。</p>
<p>诺斯玛尔的废墟在晨光中显得格外荒凉。穿过熟悉的街道,他们来到了陌路者要塞的深处。这里的空气比热血八番街更加压抑,一股诡异的气息弥漫在四周。</p>
<p>"这就是绿都格罗兹尼……"林克看着眼前的景象,眉头紧锁。</p>
<p>原本应该是繁华商业区的格罗兹尼,如今变成了一片废墟。建筑物破败不堪,街道上到处都是废弃的物品和诡异的物体——被念动力操控的桌椅、漂浮的石头、自行移动的垃圾。</p>
<p>"好诡异的地方……"敏泰下意识地靠近林克。</p>
<p>"小心,那些物体会攻击人。"林克提醒道。</p>
<p>话音刚落,几张椅子和桌子突然飞了起来,朝他们砸来。</p>
<p>"散开!"</p>
<p>六人迅速分散躲避。林克挥动光剑将飞来的物体斩碎赛丽亚的魔法箭矢精准地命中那些诡异的物体帕丽丝用毒针和砖块反击敏泰的冰霜箭冻结了漂浮的石头莎兰的魔法轰炸将成群的物体摧毁奥菲利亚则召唤出GBL教的守护灵保护队友。</p>
<p>"这些只是被念动力影响的普通物体。"林克说道,"真正的敌人还在深处。"</p>
<p>继续前进,他们遇到了格罗兹尼的第一道防线——乌云稻草人。</p>
<p>这些稻草人被念动力赋予了生命,眼中闪烁着诡异的光芒。它们挥舞着镰刀,发出刺耳的尖啸,朝六人扑来。</p>
<p>"让我来。"敏泰举起骨杖,冰霜之力涌动,将稻草人们冻结成冰雕。</p>
<p>但更多的稻草人从四面八方涌来,数量之多让人头皮发麻。</p>
<p>"太多了!"帕丽丝一边战斗一边喊道。</p>
<p>林克深吸一口气,光剑高举:"极·鬼剑术!"</p>
<p>剑圣的觉醒技能发动,无数剑气如同风暴般席卷四周,将成片的稻草人斩成碎片。</p>
<p>"好强……"奥菲利亚惊叹道。</p>
<p>突破稻草人的包围,他们来到了战神广场。这里是格罗兹尼的中心区域,也是卡勒特精英部队的驻地。</p>
<p>一个身影挡在了他们面前。</p>
<p>那是德鲁伊·梅亚,一名被念动力改造的女性战士。她的身体周围环绕着绿色的能量,眼神空洞而疯狂。</p>
<p>"入侵者……必须消灭……"梅亚的声音如同机械般冰冷。</p>
<p>"她被控制了。"莎兰说道,"让我试试解除她的控制。"</p>
<p>莎兰挥动法杖,一道净化魔法射向梅亚。但梅亚周围的念动力形成了一道屏障,将魔法弹开。</p>
<p>"没用……"梅亚抬起手,无数碎石和金属碎片在她周围凝聚,然后如同暴雨般射向六人。</p>
<p>"防御!"</p>
<p>林克和莎兰同时施展防御技能,挡住了这波攻击。但梅亚的攻击源源不断,念动力让她拥有了无穷的弹药。</p>
<p>"得近身!"林克说道,"赛丽亚,掩护我!"</p>
<p>"明白!"</p>
<p>赛丽亚的魔法箭矢连续射出,压制梅亚的攻势。林克抓住机会,以极快的速度冲向梅亚。</p>
<p>"极·鬼剑术·暴风式!"</p>
<p>剑气风暴将梅亚周围的念动力屏障撕裂,林克的光剑直指她的胸口。但在最后一刻,他改变了剑锋的方向,只是用剑柄击中了她的后颈。</p>
<p>梅亚闷哼一声,倒在地上,周围的念动力消散。</p>
<p>"林克……"赛丽亚跑过来,"你没事吧?"</p>
<p>"没事。"林克看着昏迷的梅亚,"希望她能恢复正常。"</p>
<p>继续前进,他们来到了格罗兹尼的深处。这里的念动力更加强大,空气中都弥漫着一种压迫感。</p>
<p>最终,他们在一片废墟中见到了魔雷者麦瑟·莫纳亨。</p>
<p>那是一个美丽的女子,紫色的长发在念动力的作用下飘动,眼眸中闪烁着神秘的光芒。她身穿一件白色的长袍,周围环绕着强大的念动力场,让空气都产生了扭曲。</p>
<p>"你们终于来了。"莫纳亨的声音平静而空灵,"火箭侠的失败,我已经知道了。"</p>
<p>"莫纳亨,我们不是来战斗的。"林克说道,"我们知道你是被卡勒特胁迫的,我们可以帮你。"</p>
<p>"帮我?"莫纳亨轻笑一声,"你们这些普通人,怎么可能理解我们的痛苦?我们拥有力量,却被排斥、被恐惧、被驱逐。卡勒特给了我们容身之所,就算是被利用,也比在外面被当成怪物强。"</p>
<p>"但你并不快乐。"赛丽亚轻声说道,"你的眼神……充满了悲伤。"</p>
<p>莫纳亨的身体微微一颤。</p>
<p>"我们可以改变这一切。"林克向前一步,"在赫顿玛尔,在我的身边,你们可以过上正常的生活。没有人会排斥你们,没有人会恐惧你们。"</p>
<p>"你以为……凭你几句话,就能改变什么吗?"莫纳亨的声音有些颤抖,"卡勒特控制着我的同伴,如果我不服从,他们就会……"</p>
<p>"我们会救他们出来。"林克坚定地说,"一起。"</p>
<p>莫纳亨沉默了。她看着眼前这个年轻的剑圣,看着他身边那五位美丽的少女,看着他们眼中的真诚和善意。</p>
<p>"为什么……"她低声问道,"为什么要帮助我们?我们……是怪物啊。"</p>
<p>"你不是怪物。"林克摇头,"你只是一个被伤害过的人。而我……想要保护你。"</p>
<p>这句话如同一道闪电,击中了莫纳亨的心。</p>
<p>"保护……我?"</p>
<p>"是的。"林克微笑,"就像我保护她们一样。"</p>
<p>他指向身边的五位少女。</p>
<p>"赛丽亚、敏泰、帕丽丝、莎兰、奥菲利亚……她们每个人都有自己的故事,都曾经历过痛苦和磨难。但现在,她们在我身边,我保护她们,她们也支持我。这就是……我们的羁绊。"</p>
<p>莫纳亨的眼眸中闪过一丝泪光。</p>
<p>"我……"</p>
<p>就在这时,一个阴沉的声音响起:"莫纳亨,你在干什么?"</p>
<p>一个身影从阴影中走出,那是虫之狄桑,卡勒特派来监视莫纳亨的干部。</p>
<p>"这些入侵者,为什么不消灭他们?"狄桑冷冷地问道。</p>
<p>"我……"莫纳亨犹豫着。</p>
<p>"哼,看来你也有二心。"狄桑冷笑,"既然如此,那就去死吧!"</p>
<p>他按下手中的控制器,莫纳亨身上的念动力突然失控,强大的能量在她体内暴走。</p>
<p>"啊——!"莫纳亨发出痛苦的惨叫,身体被自己的念动力撕裂。</p>
<p>"莫纳亨!"林克大惊,冲向狄桑,"你敢!"</p>
<p>"极·鬼剑术!"</p>
<p>愤怒的剑气将狄桑斩成碎片,但莫纳亨的情况已经危急。</p>
<p>"赛丽亚,快!"</p>
<p>赛丽亚连忙施展治愈魔法,但莫纳亨的伤势太重,普通的治愈根本无效。</p>
<p>"怎么办……"敏泰急得眼泪都要掉下来了。</p>
<p>"让我来。"莎兰走上前,施展了一个古老的魔法,暂时稳定了莫纳亨的伤势。</p>
<p>"这样只能维持一时。"莎兰说道,"必须尽快带她回赫顿玛尔,找凯丽想办法。"</p>
<p>林克抱起昏迷的莫纳亨:"走!"</p>
<p>六人带着莫纳亨,迅速撤离格罗兹尼。在他们身后,失去了控制的念动力怪物们开始暴走,整个格罗兹尼陷入混乱。</p>
<p>回到赫顿玛尔,凯丽看到莫纳亨的伤势,脸色凝重:"这是卡勒特的控制装置暴走造成的,必须尽快手术取出她体内的装置。"</p>
<p>"能救她吗?"林克紧张地问。</p>
<p>"有我在,没问题。"凯丽露出自信的笑容,"不过……手术需要很长时间,你们先回去休息吧。"</p>
<p>"不,我在这里等。"林克坚定地说。</p>
<p>赛丽亚和其他四女相视一笑,也留了下来。</p>
<p>手术进行了整整一夜。当晨光透过窗户洒入时,凯丽终于走出了手术室。</p>
<p>"成功了。"凯丽摘下口罩,"她体内的控制装置已经取出,休息一段时间就能恢复。"</p>
<p>林克长舒一口气,心中的石头终于落地。</p>
<p>"谢谢。"他真诚地说道。</p>
<p>"别谢我。"凯丽摆摆手,"要谢就谢你自己吧。如果不是你把她带回来,她早就死在那片废墟里了。"</p>
<p>林克走进病房,看着床上昏迷的莫纳亨。她的脸色苍白,但呼吸平稳,已经脱离了危险。</p>
<p>"好好休息吧。"林克轻声说道,"等你醒来,这里就是你的新家。"</p>
<p>赛丽亚走到他身边,握住他的手:"你又救了一位少女呢。"</p>
<p>林克苦笑:"我只是……不想看到任何人再被伤害了。"</p>
<p>"这就是我们爱你的原因啊。"赛丽亚微笑道。</p>
<p>窗外,阳光正好。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0; margin-top: 2em;">(第六十八章完)</p>
</article>
</div>
<!-- 固定底部导航 -->
<nav class="fixed-nav">
<div class="fixed-nav-content">
<a href="chapter-67.html" class="nav-btn ">上一章</a>
<a href="../chapters.html" class="nav-btn">目录</a>
<button class="nav-btn" id="ttsToggleBtn">朗读</button>
<a href="chapter-69.html" class="nav-btn ">下一章</a>
</div>
</nav>
<!-- 右侧滚动按钮 -->
<div class="scroll-buttons">
<button class="scroll-btn" id="scrollTop" title="回到顶部"></button>
<button class="scroll-btn" id="scrollBottom" title="回到底部"></button>
</div>
<!-- TTS弹出面板 -->
<div class="tts-overlay" id="ttsOverlay">
<div class="tts-panel">
<div class="tts-header">
<div class="tts-title">🔊 语音朗读</div>
<button class="tts-close" id="ttsClose">×</button>
</div>
<div class="tts-controls">
<button class="tts-btn" id="ttsPlay" title="播放"></button>
<button class="tts-btn" id="ttsPause" title="暂停"></button>
<button class="tts-btn" id="ttsStop" title="停止"></button>
</div>
<div class="tts-progress">
<div class="tts-progress-bar">
<div class="tts-progress-fill" id="ttsProgressFill"></div>
</div>
<div class="tts-time" id="ttsTime">0 / 0 句</div>
</div>
<div class="tts-speed">
<span class="tts-speed-label">朗读速度:</span>
<select class="tts-speed-select" id="ttsSpeed">
<option value="0.5">慢速 (0.5x)</option>
<option value="0.75">较慢 (0.75x)</option>
<option value="1" selected>正常 (1x)</option>
<option value="1.25">较快 (1.25x)</option>
<option value="1.5">快速 (1.5x)</option>
<option value="2">极速 (2x)</option>
</select>
</div>
</div>
</div>
<!-- 侧边栏章节导航 -->
<aside class="sidebar">
<div class="sidebar-title">章节导航</div>
<div class="sidebar-content" id="sidebarContent">
<a href="chapter-38.html" class="sidebar-chapter ">第38章熔岩穴·泰坦之怒</a>
<a href="chapter-39.html" class="sidebar-chapter ">第39章暗黑城入口·无头骑士</a>
<a href="chapter-40.html" class="sidebar-chapter ">第40章万年雪山·冰心少年</a>
<a href="chapter-41.html" class="sidebar-chapter ">第41章敏泰的加入</a>
<a href="chapter-42.html" class="sidebar-chapter ">第42章山脊·野兽师</a>
<a href="chapter-43.html" class="sidebar-chapter ">第43章番外·雪山温泉</a>
<a href="chapter-44.html" class="sidebar-chapter ">第44章白色废墟</a>
<a href="chapter-45.html" class="sidebar-chapter ">第45章冰雪宫殿</a>
<a href="chapter-46.html" class="sidebar-chapter ">第46章布万加修炼场</a>
<a href="chapter-47.html" class="sidebar-chapter ">第47章斯卡萨之巢·龙威</a>
<a href="chapter-48.html" class="sidebar-chapter ">第48章斯卡萨之巢·龙陨</a>
<a href="chapter-49.html" class="sidebar-chapter ">第49章重返赫顿玛尔</a>
<a href="chapter-50.html" class="sidebar-chapter ">第50章诺斯玛尔·盗贼团</a>
<a href="chapter-51.html" class="sidebar-chapter ">第51章哈穆林·鼠患</a>
<a href="chapter-52.html" class="sidebar-chapter ">第52章月光酒馆·寻找阿甘左</a>
<a href="chapter-53.html" class="sidebar-chapter ">第53章番外·帕丽丝的誓言</a>
<a href="chapter-54.html" class="sidebar-chapter ">第54章觉醒之路·启程</a>
<a href="chapter-55.html" class="sidebar-chapter ">第55章比尔马克帝国试验场</a>
<a href="chapter-56.html" class="sidebar-chapter ">第56章王的遗迹·远古五骑士</a>
<a href="chapter-57.html" class="sidebar-chapter ">第57章心灵试炼·剑圣觉醒</a>
<a href="chapter-58.html" class="sidebar-chapter ">第58章番外·后宫的温馨</a>
<a href="chapter-59.html" class="sidebar-chapter ">第59章敏泰的思念</a>
<a href="chapter-60.html" class="sidebar-chapter ">第60章敏泰加入·前往诺伊佩拉</a>
<a href="chapter-61.html" class="sidebar-chapter ">第61章悲鸣洞穴·阿甘左与卢克西</a>
<a href="chapter-62.html" class="sidebar-chapter ">第62章战前准备·痛苦之村的情报</a>
<a href="chapter-63.html" class="sidebar-chapter ">第63章痛苦之村列瑟芬·狄瑞吉的真身</a>
<a href="chapter-64.html" class="sidebar-chapter ">第64章胜利归来·赫顿玛尔的庆祝</a>
<a href="chapter-65.html" class="sidebar-chapter ">第65章正宫的专属时光·赛丽亚的深情</a>
<a href="chapter-66.html" class="sidebar-chapter ">第66章番外·五人同床·后宫大被同眠</a>
<a href="chapter-67.html" class="sidebar-chapter ">第67章热血八番街·火箭侠的阴谋</a>
<a href="chapter-68.html" class="sidebar-chapter current">第68章绿都格罗兹尼·魔雷者莫纳亨</a>
<a href="chapter-69.html" class="sidebar-chapter ">第69章魔雷者的苏醒·莫纳亨的抉择</a>
<a href="chapter-70.html" class="sidebar-chapter ">第70章天界之门·根特外围的战火</a>
<a href="chapter-71.html" class="sidebar-chapter ">第71章根特北门·泽丁的誓言</a>
<a href="chapter-72.html" class="sidebar-chapter ">第72章根特南门·马琳的效忠</a>
<a href="chapter-73.html" class="sidebar-chapter ">第73章根特防御战·钢铁与血肉的碰撞</a>
<a href="chapter-74.html" class="sidebar-chapter ">第74章夜间袭击战·银勺杂技团的覆灭</a>
<a href="chapter-75.html" class="sidebar-chapter ">第75章补给线阻断战·UM-0终结者</a>
<a href="chapter-76.html" class="sidebar-chapter ">第76章追击歼灭战·机械吉赛尔的末路</a>
<a href="chapter-77.html" class="sidebar-chapter ">第77章海上列车·鲁夫特悬空海港</a>
<a href="chapter-78.html" class="sidebar-chapter ">第78章列车上的海贼·铁鳞团的覆灭</a>
<a href="chapter-79.html" class="sidebar-chapter ">第79章夺回西部线·卡勒特的余孽</a>
<a href="chapter-80.html" class="sidebar-chapter ">第80章雾都赫伊斯·无法地带的阴影</a>
<a href="chapter-81.html" class="sidebar-chapter ">第81章阿登高地·GT-9600</a>
<a href="chapter-82.html" class="sidebar-chapter ">第82章卡勒特指挥部·兰蒂卢斯</a>
<a href="chapter-83.html" class="sidebar-chapter ">第83章皇女的告白·天界的新篇章</a>
<a href="chapter-84.html" class="sidebar-chapter ">第84章幽灵列车·亡者的低语</a>
<a href="chapter-85.html" class="sidebar-chapter ">第85章伊顿工业区·克雷发电站</a>
<a href="chapter-86.html" class="sidebar-chapter ">第86章普鲁兹发电站·闪电之帕特里斯</a>
<a href="chapter-87.html" class="sidebar-chapter ">第87章特伦斯发电站·熔岩之萨姆</a>
<a href="chapter-88.html" class="sidebar-chapter ">第88章格兰迪发电站·虚空之弗曼</a>
<a href="chapter-89.html" class="sidebar-chapter ">第89章安图恩攻坚战·黑雾之源</a>
<a href="chapter-90.html" class="sidebar-chapter ">第90章安图恩攻坚战·震颤的大地</a>
<a href="chapter-91.html" class="sidebar-chapter ">第91章安图恩攻坚战·擎天之柱</a>
<a href="chapter-92.html" class="sidebar-chapter ">第92章安图恩攻坚战·黑色火山</a>
<a href="chapter-93.html" class="sidebar-chapter ">第93章安图恩攻坚战·使徒陨落</a>
<a href="chapter-94.html" class="sidebar-chapter ">第94章克洛诺斯岛·寂静城的召唤</a>
<a href="chapter-95.html" class="sidebar-chapter ">第95章寂静城的秘密</a>
<a href="chapter-96.html" class="sidebar-chapter ">第96章番外·贝奇的献身</a>
<a href="chapter-97.html" class="sidebar-chapter ">第97章光之舞会</a>
<a href="chapter-98.html" class="sidebar-chapter ">第98章钢铁之臂</a>
</div>
</aside>
<script>
// 记录阅读进度
let readChapters = JSON.parse(localStorage.getItem('readChapters') || '[]');
if (!readChapters.includes(68)) {
readChapters.push({{CHAPTER_ID}});
localStorage.setItem('readChapters', JSON.stringify(readChapters));
}
// 主题切换
const themeToggle = document.getElementById('themeToggle');
const savedTheme = localStorage.getItem('theme') || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
themeToggle.textContent = savedTheme === 'dark' ? '浅色' : '深色';
themeToggle.addEventListener('click', () => {
const currentTheme = document.documentElement.getAttribute('data-theme');
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
document.documentElement.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);
themeToggle.textContent = newTheme === 'dark' ? '浅色' : '深色';
});
// 滚动到顶部
document.getElementById('scrollTop').addEventListener('click', () => {
window.scrollTo({ top: 0, behavior: 'smooth' });
});
// 滚动到底部
document.getElementById('scrollBottom').addEventListener('click', () => {
window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' });
});
// 页面加载时,侧边栏自动滚动到当前章节
window.addEventListener('load', () => {
const sidebarContent = document.getElementById('sidebarContent');
const currentChapter = sidebarContent.querySelector('.current');
if (currentChapter) {
currentChapter.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
// ========== TTS弹出面板 ==========
const ttsOverlay = document.getElementById('ttsOverlay');
const ttsToggleBtn = document.getElementById('ttsToggleBtn');
const ttsClose = document.getElementById('ttsClose');
// 打开TTS面板
ttsToggleBtn.addEventListener('click', () => {
ttsOverlay.classList.add('show');
initTTS();
});
// 关闭TTS面板
ttsClose.addEventListener('click', () => {
ttsOverlay.classList.remove('show');
});
// 点击遮罩关闭
ttsOverlay.addEventListener('click', (e) => {
if (e.target === ttsOverlay) {
ttsOverlay.classList.remove('show');
}
});
// ========== TTS语音朗读功能 ==========
let ttsSynth = window.speechSynthesis;
let ttsUtterance = null;
let ttsText = '';
let ttsSentences = [];
let ttsCurrentIndex = 0;
let ttsIsPlaying = false;
let ttsIsPaused = false;
let ttsSpeed = 1;
// 初始化:提取章节内容
function initTTS() {
const contentEl = document.querySelector('.chapter-content');
if (!contentEl) return;
// 获取所有段落文本清理HTML标签
ttsText = contentEl.innerText || contentEl.textContent;
// 分割成句子(中文按句号、问号、感叹号分割)
ttsSentences = ttsText.match(/[^。!?\n]+[。!?\n]+|[^。!?\n]+$/g) || [ttsText];
ttsSentences = ttsSentences.filter(s => s.trim().length > 0);
updateTTSProgress();
}
// 更新进度显示
function updateTTSProgress() {
const total = ttsSentences.length;
const current = ttsCurrentIndex;
document.getElementById('ttsTime').textContent = `${current} / ${total}`;
const percent = total > 0 ? (current / total * 100) : 0;
document.getElementById('ttsProgressFill').style.width = `${percent}%`;
}
// 播放当前句子
function playCurrentSentence() {
if (ttsCurrentIndex >= ttsSentences.length) {
stopTTS();
return;
}
const text = ttsSentences[ttsCurrentIndex].trim();
ttsUtterance = new SpeechSynthesisUtterance(text);
ttsUtterance.lang = 'zh-CN';
ttsUtterance.rate = ttsSpeed;
// 尝试选择中文语音
const voices = ttsSynth.getVoices();
const zhVoice = voices.find(v => v.lang.includes('zh') || v.lang.includes('CN'));
if (zhVoice) {
ttsUtterance.voice = zhVoice;
}
ttsUtterance.onend = () => {
if (ttsIsPlaying && !ttsIsPaused) {
ttsCurrentIndex++;
updateTTSProgress();
playCurrentSentence();
}
};
ttsUtterance.onerror = (e) => {
console.error('TTS error:', e);
if (ttsIsPlaying) {
ttsCurrentIndex++;
updateTTSProgress();
playCurrentSentence();
}
};
ttsSynth.speak(ttsUtterance);
}
// 播放
function playTTS() {
if (ttsSentences.length === 0) {
initTTS();
}
if (ttsIsPaused) {
ttsSynth.resume();
ttsIsPaused = false;
} else {
ttsIsPlaying = true;
playCurrentSentence();
}
document.getElementById('ttsPlay').classList.add('active');
document.getElementById('ttsPause').classList.remove('active');
ttsToggleBtn.classList.add('active');
}
// 暂停
function pauseTTS() {
if (ttsIsPlaying) {
ttsSynth.pause();
ttsIsPaused = true;
document.getElementById('ttsPlay').classList.remove('active');
document.getElementById('ttsPause').classList.add('active');
ttsToggleBtn.classList.remove('active');
}
}
// 停止
function stopTTS() {
ttsSynth.cancel();
ttsIsPlaying = false;
ttsIsPaused = false;
ttsCurrentIndex = 0;
updateTTSProgress();
document.getElementById('ttsPlay').classList.remove('active');
document.getElementById('ttsPause').classList.remove('active');
ttsToggleBtn.classList.remove('active');
}
// 设置速度
function setTTSSpeed(speed) {
ttsSpeed = parseFloat(speed);
// 如果正在播放,需要重新开始当前句子
if (ttsIsPlaying && !ttsIsPaused) {
ttsSynth.cancel();
playCurrentSentence();
}
}
// 绑定事件
document.getElementById('ttsPlay').addEventListener('click', playTTS);
document.getElementById('ttsPause').addEventListener('click', pauseTTS);
document.getElementById('ttsStop').addEventListener('click', stopTTS);
document.getElementById('ttsSpeed').addEventListener('change', (e) => setTTSSpeed(e.target.value));
// 加载语音列表(某些浏览器需要异步加载)
if (speechSynthesis.onvoiceschanged !== undefined) {
speechSynthesis.onvoiceschanged = initTTS;
}
// 页面离开时停止播放
window.addEventListener('beforeunload', stopTTS);
</script>
</body>
</html>