菲尼听书
加载中..
第六百五十六章无毒不丈夫静官
  其实这时候再去打破砂锅问到底,彻底去弄清隆美尔的想法根本没有必要,高达一个联队编制的堕落法师,顷刻音飞灰烟灭已经是不可挽回的事实。
  海族和魔族庞大无比的法师基数,爱琴任何一个种族也无法望及项背;假使是人类一战阵亡上千名法师,文明世界的魔法系统已经可以宣布崩溃。
  面对这个事先毫无征兆的突然变化,措手不及的各国特使,脸部表情也犹如万花筒一般精彩纷呈。
  三大魔界海族特使张大了嘴,瞳孔扭曲,手中攥着的法杖和武器无声滑落,叮叮啷啷摔在地上;因为语言不通的关系,他们是所有观战者中真正关注战况进展的人,这个突如其来的结果收割的是卢塞恩法师的生命,击溃的却是他们的神智-哪有仗打的好好的,一眨眼间大批法师就突然死光光的战争?
  波拿巴美杜莎用蛇尾撑直了身体,抻着脖子眺望战场,似乎有点不敢相信上千名法师一眨眼间就没了。卢塞恩军队的形势固然不妙,可他们再撑半个钟头绝对没什么问题,法师们也没到油尽灯枯的那一步,抛开预备队来不来得及支援他们先不说,再怎么样也不至于法师集团遽然间全变成哑巴,被敌军从容秒杀吧?
  这可是整整一支联队的法师啊!
  杜宾王国军情观察员揉揉眼睛,呆如木鸡之后一阵冷汗滂沱,看向隆美尔的眼神也变成了惊讶、厌恶和恐惧错综复杂的结合体;雷克萨的子孙继承了祖先耿直的脾性和敏锐地洞察力,别人或许还会以为这只是隆美尔的战术失误,但他们一眼就看出了这个无比冷静的混血福克斯分明是刻意而为!
  人类拥有爱琴最精明的头脑和最出色的智慧,当然迅速想通了这是怎么一回事。他们不错眼地重新打量隆美尔,凝重的目光中有深深的警惕和敬畏。
  比蒙这边比较复杂,两位天鹅大佬愕然无语的半晌,神色中抑制不住愤激的怒火,眼神虽然无比凌厉,却始终没有再看隆美尔哪怕一眼。狮心亲王则是事不关己,高高挂起的表情,甚至还带着点幸灾乐祸。
  刘震撼依旧一脸的没心没肺,堂尔皇之地戏耍了所有人的智商。
  是的!人人都看出了卢塞恩军队刚刚形势有点不对劲,可是大家都以为那只是常规兵种要蒙受大量战损,谁会联想到上千名堕落法师一刹那之后就化作了肉泥齑粉?
  根本没有人料到!
  隆美尔今天指挥的哪里是卢塞恩军队?
  他指挥地分明是远道而来的娜迦大军!
  能将自己地军队和敌军一起纳入指挥范畴,这样出类拔萃、神乎其神的指挥艺术,恐怕搜遍整个爱琴大陆也再找不出第二个;同样,如此心狠手辣、阴险歹毒的陷阱布置艺术,搜遍整个爱琴大陆也别无分号。
  刘震撼真是没办法不佩服这个混血杂种!
  “在抗击海族侵略者的战场上,我们博德比蒙不能只让卢塞恩盟友孤军奋战。”布吕克纳老公爵率先打破了沉默,一把摘下佩戴在胸口的美杜莎徽章,目不斜视地对儿子说道:“立刻升旗鸣鼓,聚将迎敌!”
  “这是我们博德第一次与你合作杀敌,也将是最后一次。”穆里尼奥扭过头看住了隆美尔,金质美杜莎徽章在他的手指间“咯咯”作响:“我不管你有什么理由,只要你用卑劣的伎俩做出陷阱,将刀口对准自己人,我们斯迈就永远不会再将你视为朋友!”
  “住口,魔力鸟!”老公爵银须凛冽地大喝一声:“别忘了你是斯迈贵族,跟这种小人说话简直是侮辱我们何塞家族的家徽!”
  若是换个场合,“魔力鸟”-穆里尼奥地小名一定会让很多人会心一笑,但今天哪还有人笑的出来。
  “空骑兵,做先锋!”狮心亲王念叨着博德军队消失已久地历史口号,抽出佩剑置于鼻尖,用庄严的军礼欢送布吕克纳老公爵和穆里尼奥带着卫队冲上战场。
  “卡恩殿下,你也别闲着。”刘震撼歪了歪脖子,示意这位跃跃欲试的莱茵亲王不妨跟着空骑先锋勇往直前。
  “冕下,那您地安全……”卡恩亲王有点犹豫,威瑟斯庞一战,比蒙祭祀系统遭受了重创,现在对于祭祀的人身安全,比蒙王国地保护措施已经近乎于神经质。
  “你放心,我的背后没有自己人捅过来的刀子。”刘震撼呵呵一笑。
  狮心亲王带队出发之后,人类特使、杜宾王国特派员和波拿巴美杜莎代表也坐不住了,都带着所属卫队假马日鬼地投入了战场,他们这么做并非同仇敌忾,协力杀敌,只是想籍此来避开尴尬罢了。
  甭管堕落精灵的名声多么恶劣,眼看着他们在战场上被自己人暗算,无论是谁都会产生一点兔死狐悲之心。
  战鼓响彻的沙场上,厮杀声已经渐渐宁歇,“堕落精灵不杀堕落精灵”、“投降吧同胞”、“我们是一家人”等等蛊惑意味十足的纳降口号,从无数鹰牛人的口中整齐吼出,激荡浮云。
  起初只有八头地狱黑龙轮番从头顶呼啸而过,娜迦们多多少少还显得有点犹豫不决。爱琴军队的确有优待俘虏的古老传统,也允许战俘在战后使用重金赎回自由,但这种人道主义的光辉在历届世界大战中还从未有过先例;无论尘封已久的神魔大战、上届海陆大战还是海加尔的落日黄昏,两大阵营的军人对待敌人都将“种族灭绝”这个血腥无比地信念视为金科玉律。
  娜迦们也是侵略爱琴的海族,他们从没想过跨上陆地战败被俘能有什么好下场。
  不过随着翡冷翠兄弟连杀气腾腾蹿上蓝天,娜迦们顿时又矮了一截;而紧跟着加入战场的博德比蒙,更是把娜迦仅剩的负隅顽抗之心打到了九霄云外;火焰不死鸟、尼密阿巨狮、利物朱鸟、深洋蓝极海豹、帝王蛤蜊,这些林林总总的超阶魔兽根本不象地狱黑龙那么空气,它们从空中一掠而过的同时,也抛下了密密麻麻、威力恐怖的魔法!
  响鼓不消重锤,革命全靠自觉,娜迦的重弩工兵、竖琴箭手和魔法师第一个放下了手中的武器;这三大王牌兵种放弃抵抗,也意味着娜迦大军被拔掉了仅有的、能够反击超阶生物地三颗獠牙,所以其余的娜迦军人在短暂的愣怔之后,旋即就加入了缴械投降的行列;只有极少数狂热份子仍然准备困兽犹斗,不过相比二十万娜迦大军,这样地亡命徒只是总人数的一个小小零头,大多数娜迦军人如果没有“萨弗拉斯权杖”之类地神器傍身,绝对难以鼓起勇气向数十头超阶魔兽公然叫板;随着这些顽固份子被定点清除,油丘之战也终于毫无悬念地分出了胜负。#
  对于卢塞恩大军来说,这场胜利可能是爱琴史上首个“不败而败”的经典战例。
  常规部队的伤亡惨重倒在其次,关键是上千名堕落法师的巨大牺牲,几乎一脚把堕落精灵傲视群雄的魔法优势从三万英尺高空踹进了无底巴托深渊。
  魔法师不是阿猫阿狗都能充当的,霜雪皮丘能靠龙族冥思诞生%的成材几率,已经是前无古人后无来者的惊世比例,就算堕落精灵从地底来到地表之后,可以凭借月蚀之期举行“血月赞美仪式”将摩尔法师们地魔法职称直接晋升一阶,三百万人口的卢塞恩城现如今一共也才两千出头地法师。
  此次随同隆美尔出征的一千名堕落法师,都是矮子里面拔将军,优先筛选出来的高等级法师。他们地战死,几乎让卢塞恩城只剩下一帮等级偏低的菜鸟法师!在如今这种,一场战争阵亡十来个魔法师,就能让主帅痛心疾首地征伐乱世,卢塞恩所遭受的损失之大,简直无法用语言去描述!
  这么可怕的损失没有人能事先想到,毕竟交战双方的兵力相等,卢塞恩又有八头地狱黑龙和绝对压倒性的法师数量优势,还有隆美尔这个超级名将指挥作战,更有大批比蒙高手押阵,海族军队凭什么尽歼上千名堕落法师?
  无敌书屋'!
  诶待身边的闲杂人等全部离开,刘震撼就乜斜住了隆美尔,目光咄咄。
  其实真正想通了倒也没什么,隆美尔就是打了个心理误差。
  种族异能从未在爱琴的大型会战中成编制形成过战斗力,即便是西雅美人鱼来到陆地之后,真正侧重的还是自己的水系魔法而不是天生领结。只有前不久威瑟斯庞守护战,天鹅主祭穆里尼奥亮出的异能兽亲部队,才算开创了专业异能兵种的先河。
  当代的军事专家,一直以来关注的焦点就是围绕着魔法、斗气和战歌打转,现在又加上了比蒙的两大狂化攻击、琴魔音刃、箭罡、能量武器和幻兽,谁也没把程度异能真正当过一回事-毕竟种族异能的诞生率太过偶然,无法进行系统培养;而且程度异能每使用一次,冷却时间就高达数个小时,火力持续性极度不足,只适合佣兵部队和冒险团体小打小闹派派用场。!
  当思维形成惯性之后就会变成传统,在爱琴的史书和典籍中,有关娜迦的描写大多集中在他们风木双修的魔法上,还有就是他们拥有多条手臂,能够同时使用种武器的特殊体质。上届海陆大战,娜迦虽然依靠“群体默言术”压制过爱琴法师,但从未在大型会战中单纯依靠这个异能取得过多么辉煌的战果,所以典籍中对娜迦的程度异能描写大多用春秋笔法轻描淡写地一笔略过。
  月精灵堕落成海娜迦是神魔大战后期的事,摩尔和卓尔早在那之前就被放逐进了地底世界。如果不是重新返回地表,摩尔和卓尔连“娜迦”这种堕落精灵听都没听说过,加上之前双方又没有任何交集,卢塞恩堕落精灵自然不会特地把这支躲藏在海底世界的同族列为重点研究的假想敌。
  卢塞恩会和娜迦开战,本身就是一件突发事件,如果没有老刘的提议,如果堕落精灵不出兵,卢塞恩和娜迦八杆子也打不到一起。
  综合以上这些小细节,当卢塞恩开动战争介战事,人人都以为拥有大批超阶魔兽助战的他们稳赢不输的情况下,还有哪个摩尔和卓尔能在这种十拿九稳的轻浮心态影响下,静下心来细细研究娜迦的特点?
  就算把堕落高层的脑袋换成诸葛亮,他们也绝对想不到这一仗会干掉他们一千名法师!?
  魔法师是所有兵种的克星,上千名魔法师聚集在一起,就算八头地狱黑龙也不敢轻缨其锋!再说了,一千名魔法师又不是一千个脑袋痴线的傻瓜,情况发展再怎么不妙,他们也可以选择决死突围,再怎么样也不至于一千名法师全部死光光!
  只有隆美尔的“双飞战阵”加上娜迦地“群体默言术”,才能让上千名堕落法师来不及逃跑,才能造成这样经典的结果!无敌书屋?)$
  “你做的这么绝,日后哪有国家还敢再收留你?”见对方始终不理自己,刘震撼干脆站到了隆美尔面前,将眼睛凑到了那双血丝密布的眸子上:“告诉我,这么做对你究竟有什么好处?”
  “我现在还需要别人来收留我吗?”沉默了一阵之后,隆美尔终于开口了,他地眼神如同钢铁,坚硬中吐露着拒绝熔化的意味:“当初我拉家带口来到多瑙荒原,手头只剩下些老弱病残,现在我有五千多名强壮地特拉维夫狂战士,只要“雷神之怒”战斧在手,以后还有更多的狂战士会来投奔我!”
  “狐狸尾巴露出来了!干的漂亮,无毒不丈夫,收留之恩算什么!想不到堕落精灵那么坏,最后还被一个更堕落的家伙摆了一道!”
  “你知道不知道,卢塞恩轮值城主幽月儿主母本来是不愿意出兵攻击娜迦的,因为没有任何好处。”隆美尔一点不恼,对老刘咧嘴一笑:“而其他的堕落高层则认为,这时候应该趁机敲诈你一笔劳务费,作为卢塞恩出兵的代价。”
  “他们门里虎做惯了,有这种小农意识不奇怪。”刘震撼摊摊手:“那后来呢?后来卢塞恩怎么又愿意无偿出兵了?”
  “因为我告诉堕落精灵,你这是代表爱琴同盟在试探他们的诚意。”
  “那是当然,我地战歌图腾柱是有免费赠送盟友的份额,但不准备往水里扔!”
  “你知不知道堕落高层怎么看待大陆局势?”
  “这帮墙头草是典型地政治投机商,得过且过的寒号鸟。”
  “没错!他们一致的看法就是:无论是谁打过来,只要不干涉他们地统治,名义上的称臣纳贡根本无所谓!如果不是我劝他们,卢塞恩会与海族宣战?做梦吧!”
  “无论卢塞恩投降海族还是魔族,也不管他们是名义上地投降还是真正的投降,只要堕落精灵敢这么干,任何一个爱琴种族都饶不了他们!”刘震撼冷笑不已:“这不是各人自打门前雪,休管他人瓦上霜的常规战争,这是种族与种族的生死存亡之战,每个人都有天然立场,谁背叛这个立场,都会受到惩罚!”
  无敌书屋 菲尼听书 - 兽血沸腾 - 第六百五十六章无毒不丈夫静官
;
  “那你对我今天的所作所为还有什么好奇怪的地方?”`
  “好象还是有点太过分了吧?”刘震撼也是一点就透的玲珑人:“好歹人家卢塞恩现在也加入了爱琴同盟,也为抵抗海族侵略出了力,你不想给他们陪葬也不能玩这么绝呀……”
  “除了海族还有一个魔族呢!海族一时之间还打不到卢塞恩,魔族不一样,魔族从东南部荒原**,第五站抵达的就是卢塞恩!”隆美尔撇了撇嘴:“你不会认为卢塞恩在魔族大军面前会选择死战到底吧?”
  刘震撼没话说了,按照隆美尔的说法,堕落精灵铁定是要投降魔族的,这一点也没有什么好意外的地方,他们在地底世界已经习惯了谁地拳头大谁称王,膜拜和崇尚弱肉强食这种丛林法则,对爱琴的认同感也远不如地表世界的圭著。
  “再说了,从卢塞恩的角度出发,就算投降……”隆美尔意味深长地看住了老刘,说了句意味深长的话:“宁可投降海族也不能投降魔族啊!”
  “你……”老刘蹙了半天眉毛,忍不住凑到隆美尔耳朵边问道:“你到底是怎么猜到我的打算的?魔族的事……”
  “很简单!如果你真的准备扼守桑干河渡口,没道理不在北岸修筑防御工事!”隆美尔淡淡一笑:“从军事防御角度来说,在桑干河北岸构筑一道防御工事,再凭借两座空中花园悬浮河面,远比你单靠翡冷翠一座防线更容易守住魔族军队的攻击-魔族军队攻打红土高坡是在平地上,还能使用攻城器械,攻击北岸就不行了,先要渡过桑干河天险,然后抢滩成功才能攻打你地防线,难度可不是一点点大!”:';
  “我好象没有在北岸修筑第二道防御工事……”
  “你们比蒙早在去年就已经拥有了烧窑锻砖的技术,翡冷翠也一直在大修特修格斗武塔,你明明有充裕的时间,也有大量的人手和物资,却始终不修筑第二道河防工事,这就不得不让我起疑心!”隆美尔斜乜着老刘:“你也是刀山血海滚过来地人,梯次防线和防御纵深的重要性你不会不清楚,把扼守桑干河地希望寄托在一个红土高坡上,你没那么蠢!
  不怕一万就怕万一,没有第二道防线,一旦翡冷翠失守,北部荒原上的比蒙王都和东北行省就对魔族军队敞开了大门!魔族可是实打实的陆地军队,他们攻起城来可比海族的花样多多了,这些道理你不会不明白!
  情况这么恶劣,你还敢这么托大,以你的性格来看,必然是掌握了克敌制胜的筹码!
  所以我翻来覆去地思考,彻夜不休拼命揣摩,到底是什么样的筹码让你有了这样十足的底气!
  “仅仅因为我没有在桑干河北岸修筑防线,你就推算出了这么多东西!”刘震撼起了一胳膊地鸡皮痱子:“欧比斯拉奇!你还是不是人?妈的早知道我就修那条防线了!”
  “瞧见没有?”美帅撩了撩自己地头发,鬓角里隐约搀杂着一簇簇淡淡的银丝:“这都是因为你的缘故!别人之所以想不到,那是因为他们没有深入地研究过你这个人!我不一样,我对你太了解了!”
  顿了一顿,隆美尔复又笑道:“你呢也别把我说地那么神,起先我也走入了误区,始终在战略和战术这两个层面考虑问题,不停分析你的优势之处,直到最后实在找不出结果,才通过回想你地事迹和经历,逐渐推敲了最终答案!
  万万没想到,这世界上居然还有人不靠战略布置来取得战略胜利!
  你果然是习惯剑走偏锋的天才!-
  但是别怪我没提醒你,用兵之道还是稳中求胜的好,你还是修葺一下北岸防线吧。如果翡冷翠失守,光凭两座巴比伦空中花园悬浮河水上空,并不是做到万无一失的全保险!”
  “这个不用你操心!你说,魔族会不会也意识到了你的猜测,毕竟哪个地方都不乏聪明人!”
  “如果魔族执意出兵爱琴,那他们肯定没有想到这方面问题。”隆美尔摇摇头:“其实对你而言,最大的优势就是海族选择攻打的爱琴的时间实在太正点了。现在魔族越是坐山观虎斗下去,情形就真是会对他们不利!拖的时间越久,就算他们能有人想到那茬,敢不敢进军爱琴,也要三思而后行了!”
  傻!你终究还是没猜到点子上,更没料到我的胃口有多大!刘震撼心里暗暗一乐,嘴上却连说你说的对你说的对。
  “俗话说良禽择木而栖,不是往火坑里栖,本来我个人在卢塞恩受点排挤和冷落都无所谓,但我拉家带口,不能让那些跟着我风里来雨里去的伙伴们也一起给堕落精灵陪葬。”隆美尔一阵黯然叹气:“正因为看穿了这些,我才必须从卢塞恩尽早脱身,万一魔族杀过来,堕落精灵早早竖起白旗,我将来势必也要跟着遭受鱼池之殃。”
  “你要走谁还能拦住你?以你地实力再加上谛听银象,堕落精灵里根本没有与你匹敌的高手!”刘震撼皱了皱眉心:“我们男人无论做好事还是做坏事都要光明磊落,如果你拿脱身来做借口,我觉得你未免太阴毒也忒无耻了一点!自立旗号就自立旗号,找那些无聊的理由做什么!”
  “上山容易下山难。你说的对,我想离开卢塞恩,是没人能拦住我,可我还有很多手下在卢塞恩城,堕落精灵曾经有意无意地从侧面给我提过醒。无论是谁想脱离卢塞恩,都只能孤身上路,想带人走,后果自负!”
  “都说了你不要找借口,我又不是斯迈那种眼里不搀沙子的比蒙!”刘震撼用脚踢了踢地上的沥青:“为了带着你的部下离开卢塞恩,你就用这么毒的阴招来黑堕落精灵?这就是你的理由?”
  “摩尔和卓尔凭什么统治灰矮人、鹰牛人和河仙人?优势和自信从何而来?不就是数量庞大的堕落法师!不先动摇他们地统治根基,我想带人走,不是等着卢塞恩大军在旷野上展开追杀?”
  “那可是一千名法师啊!我要是卢塞恩精灵,做亡灵也不会放过你!”
  “省省吧!现在没有了一千名级别最高的法师,剩下的那一千多名菜鸟魔法师能压的住谁?三十万灰矮人和六十万鹰牛人首先就不是省油地灯!”隆美尔耸耸肩膀:“知道我为什么要招降海娜迦吗?无论这些娜迦是迫于形式缴械投降,还是之后心甘情愿入伙堕落之城,他们的实力都足以导致卢塞恩经历一次剧烈动荡,乃至权利结构重新洗牌!”
  “我说你为什么要招隆娜迦呢!靠!真他妈无毒不丈夫!”刘震撼真是没办法不鼓掌喝彩:“我以为我已经够心狠手辣,无本起家,今天才知道,你才是山外青山楼外楼!”
  “别谦虚,论狠毒,你把堕落精灵走进出地底,天鹅在南十字星森林一个传染疫病就干掉了十万鹰牛人,都是我学习地楷模。”
  “我们和堕落精灵一山难容二虎,摆明是对手,可你是他们的自己人啊,而且你还帮河仙人改进了战力,原先是功臣,突然间就变成了叛将,这翻脸也翻的太快了吧?”
  “大家都是乱世飘萍,互相利用而已,何来突然翻脸之说?说起来魔族对阁下也不错啊,巫妖女王主动倒贴清白身子,您不一样拔鸟无情?”
  “你今后的打算是什么?堕落精灵绝不会放过你的!”
  “谁要他们放过我?我要带着更多的卢塞恩战士,自己打出一片天下!”
  “更多的卢塞恩战士?
  “你不要以为河仙人、灰矮人、牛鹰人和密林守护者、密林树妖都对堕落精灵忠心耿耿,哪有那种好事!在地底世界,堕落精灵一家独大,那是没得选择,可现在是地表世界,没了一千名高段位魔法师打底,堕落精灵算哪根葱?这些附庸跟谁混不行?”隆美尔低声笑道:“我敢肯定,随着卢塞恩的统治根本开始出现混乱,到时候肯定有人会投奔我!”
  “说来说去,焦点还是那一千名堕落法师。”老刘歪着脑袋想了想:“是不是那些地狱黑龙也和你谈妥了?还有那些鹰牛人军官。按道理说,前来督战地堕落高层,不至于没有联络鹰牛人的骨联宝盒座标才是,就算你不出动预备队,他们也一样可以下令,但我没看到这种情况发生!”
  “龙族有个优点,它们习惯不问俗事,只要得到它们承认地强者,就可以和它们进行平等的对话。你也是龙族,用你的眼光来看,我比堕落精灵,哪一个更有前途?”隆美尔傲然一笑:“十万鹰牛人就只有一个军团长才有骨联,他地贴身侍卫就是我送给他的秃鹫骑士,刚刚刀就架在他地脖子上,你说他敢不敢接听骨联?哼!我还以为四十二位摩尔高法一早就会飞回来质问我,没想到他们这么蠢,白白让我的狂战士准备了一批飞斧没派上用场!
  “你这么一说我又想通了一件事,堕落精灵不允许你带一兵一卒离开卢塞恩,可今天你明明连沙漠矮人的老弱病残都带了出来,不怪要趁机造反。”
  “没错是,不是此次出征,我还真没有借口把他们全部带出来。”
  “我真他妈奇怪!这帮堕落精灵怎么一个都没看出‘双飞战阵’是个陷阱?”
  “不懂不要乱说,‘双飞战阵’是事先我和他们磋商好的阵型。这的确是个好阵型,别看娜迦有二十万人,我真要是用心指挥,只要五万灰矮人步兵都能打跨他们!今天一开始阶段,灰矮人的进攻重点就搞错了,他们除了留下小股阻击部队之外,大部分应该向中心纵深**,不是全体人员扯到右翼去和海狮石球战车硬磕。这么做既让娜迦的步兵缠了上来,也让对方获得了布置远程攻击部队的空间和时间!左路的狼脚蜘蛛战车和剑齿兽战车根本就是两个笑话,我如果把他们改成骑兵部队,以轻骑的机动力,娜迦后阵地重弩的投石机早该完蛋了。”隆美尔一边说一边用剑鞘在沥青地面上划了个草图:“你仔细看看,如果‘双飞战阵’的两翼齐飞,中路的远程火力又可以完全展开,怎么赢不了娜迦?不用预备队我都能赢!就算刚刚的战况很糟糕,卢塞恩军队从头到尾没垮掉也是事实!”
  “我可算知道什么叫人嘴两张皮了。”
  “这话怎么说地,如果堕落精灵早点让我改革军制,训练部队,今天的情况根本不会发生。”
  “废话!枪杆子里出政权。如果军权给你掌握,卢塞恩还是堕落精灵当家作主地城市吗?”刘震撼笑歪了嘴:“难怪你今天公开宣布自己会提炼‘炭精’,原来是故意放出消息,好让自己有条后路。”
  “我早跟你说过,我准备去人类世界闯荡!不过有了弑主这个恶劣前科,没有哪个人类国家会收留我的。我正好拒绝招揽,自行发展,用炭精与他们进行贸易往来!”
  “你开个条件吧,到底要怎么样才肯反‘炭精’提炼技术转让给我。”
  “这话你就不该提,你给我煤炭,再付点劳务费,我帮你提炼‘炭精’自然义不容辞。但你让给你提炼技术,那我还怎么混?”'
  “瞧你那德行!我是看的起你才问你要‘炭精’的提炼配方,你知道不知道我的油瓜通过生命古树和绿巨人的植物嫁接,每个星期能出产四五百颗?”刘震撼用鼻孔轻蔑地喷出一股冷气:“一百磅煤炭才提炼一磅炭精,五百吨煤炭不过提炼一万枚胡桃大小的炭精航弹!算个屁啊!”
  “帐不是你这么算的,你每星期只有四五百颗油瓜地囤积量,产量根本无法提高,是固定的!炭精不同,只要我有足够地人手和矿源,每个星期开采一万吨煤炭也不是不可能,那样的话,我的炭精应该远比你地油瓜更宽裕吧?战争的消耗有多大你不是不明白,我地生产力明显比你先进的太多太多!”
  “你当人类国家全是傻?他们肯把大量的煤矿白白让给你开采?”
  “别忘了我还有一些沙漠矮人,我们沙漠中几乎没有多少山脉,所以这种矮人的特长不是开山,而是钻地探矿!他们和喜欢挖空山脉寻找矿藏的爱琴矮人完全不同!你们爱琴的矿藏也不是全部蕴藏在山脉里面,也有埋藏在地下的!”
  “你的沙漠矮人?哈哈,就那帮老人、小孩和妇女也能钻地打矿?”
  “他们再怎么样也是沙漠矮人!我要的只是他们勘探出矿源在哪,并不是要他们累死累活!”
  “那我就先祝贺你在人类世界能闯出名堂了!”
  “暂时不去人类世界,我要先帮你们比蒙住王都沙马克,别忘了,你答应过我五万骆驼骑兵,我正等着从沙巴克的海慕联军里面抠出人选呢。”
  “恐怕要让你失望了。现在我们并不想和沙巴克的那支海慕联军发生冲突,就这样僵持下去挺好!万一动作太大,我还怕海族恼羞成怒,将攻击重心从人类挪到比蒙这头来呢!”刘震撼正色说道:“我是答应过你五万骆驼骑兵,不过你恐怕有的等了。”
  “你们比蒙想海慕联军围而不打,海慕联军就真会执行?想的美啊你!你这段时间又是骚扰他们地粮道,又是阻拦他们砍伐木材,人家可是憋了一肚皮的火!”隆美尔仰天长笑:“别忘了,海慕联军的战略目标可是多洛特,他们在沙巴克绝不会长久保持沉默。现在战争造反权根本不在你手里,人家海族想打,随时都能发动攻城!”
  “海慕联军想怎么做那是他们的自由,我们随时欢迎他们来攻城!不过我可要把丑话先说在前头,如果你肯帮我们守卫沙巴克,我们比蒙可没有多余的给养来供给你的部队!
  你看看你,麾下又是砒霜巨人又是老老小小的沙漠矮人,还有一帮吹胡子瞪眼,看到我就是十万八千个不忿的秃鹫骑士……还有还有,你手下的特拉维夫狂战士少说也有五千多人,这样一支班底,每天的粮食消耗就不是一个小数目!
  !\+;
  你连个根据地都没有,早就该好好想想,万一脱离了卢塞恩该怎么养活他们。”
  “闲吃萝卜淡操心,我什么时候说过要你们比蒙为我地部队提供过给养?”!
  “嘿!那你给手下这几千号人吃什么?威瑟斯庞大战结束之后,那帮逃跑的慕兰败兵这些天可饿死了不少人,高空侦察拓图上甚至有了在人吃吃的画祯!你是不是准备让你的部队也和这些败兵学习,用石膏观音土和狗尾巴草填肚皮?”
  “我地冕下,您是不是忘了我刚刚做了些什么?”隆美尔伸手指了指战场:“您不妨仔细算一算,这二十万娜迦大军的给养,可以供我地部队吃多久?这些俘虏可是要通过卢塞恩军队押回堕落之城的,不需要我来照料!”
  刘震撼楞住了。
  隆美尔考虑事情确实面面俱到,算无遗策。
  万事不求人,这句话说起来容易做起来可就难了,隆美尔却做到了这一点。
  眼睁睁看着这么一个聪慧绝顶的命中夙敌远走他乡,老刘有点庆幸,也有点不太甘心。
  说庆幸,那是因为他在潜意识里想和才华横溢的隆美尔做朋友,远远多过想和他做仇人。说不甘心,那是因为如果没有现在这场世界大战纠缠,比蒙绝对会让隆美尔用自己的鲜血和生命,去告慰战死在滹夜古城下的勇士灵魂!'
  想想这个家伙几乎是光着膀子来到了爱琴大陆,先投奔堕落精灵,再无中生有,硬生生攒下现在的家当,然后再想办法脱离卢塞恩的钳制,趁着世界大战地东风,凭借自己的炭精航弹提炼技术,在一个个人类国度争相邀请下,风风光光进入卡瑞姆多大平原,用多洛特和大雪山遮断比蒙最后一束仇视地目光。
  他的做法对他而言是当前唯一的出路,如果继续呆在多瑙荒原,即使熬过世界大战,比蒙绝对饶不了他!这份心计、这份能耐、这一连串清晰有序,步骤明确地发展规划,不得不让刘震撼钦佩的五体投地!战火纷飞地乱世,正是这种人中之龙大展拳脚的好机会。老刘可以肯定,以隆美尔的脑袋,不难在人类世界闯荡出一番新天地。
  “枭雄”这个词,从被创造出来的那一天开始,就是为了配对他这样惊才绝艳风流的人物!
  为什么我们比蒙没有一个人能有他这样的头脑?刘震撼在心里叹息。
  为什么我这么出色,却与你生在了同一个时代?隆美尔同样也在心里叹息。
  顺便检讨一下自己……一直以来总有人说我写的太罗嗦,经过长久的反思之后,我终于意识到了自己的傻之处-我总是怕读者看不懂某些细节,特意强调来强调去,比如某些军事常识,比如大陆格局,比如战略思想,比如兵种互补的重要惦,偏偏这些东西就应该在魔幻小说中一笔带过才是,象好莱坞的新片那样,三百个肌**子穿着裤衩拿着盾牌长枪上阵,连辎重都不用带那才是王道。-%`-
  但我现在不准备有什么改变了,毕竟兽血已经从起初阶段老刘的随波逐流渐渐发展到了带领整个大陆以弱击强,反抗侵略这个大架子上,必须写细一点。
  这样的话,看连载或许觉得烦,当某些新读者从头开始读这本书,一气呵成时就不会有这样那样的疑虑
目录
设置
听书
顶部
加载中..
第六百五十六章无毒不丈夫静官
  其实这时候再去打破砂锅问到底,彻底去弄清隆美尔的想法根本没有必要,高达一个联队编制的堕落法师,顷刻音飞灰烟灭已经是不可挽回的事实。
  海族和魔族庞大无比的法师基数,爱琴任何一个种族也无法望及项背;假使是人类一战阵亡上千名法师,文明世界的魔法系统已经可以宣布崩溃。
  面对这个事先毫无征兆的突然变化,措手不及的各国特使,脸部表情也犹如万花筒一般精彩纷呈。
  三大魔界海族特使张大了嘴,瞳孔扭曲,手中攥着的法杖和武器无声滑落,叮叮啷啷摔在地上;因为语言不通的关系,他们是所有观战者中真正关注战况进展的人,这个突如其来的结果收割的是卢塞恩法师的生命,击溃的却是他们的神智-哪有仗打的好好的,一眨眼间大批法师就突然死光光的战争?
  波拿巴美杜莎用蛇尾撑直了身体,抻着脖子眺望战场,似乎有点不敢相信上千名法师一眨眼间就没了。卢塞恩军队的形势固然不妙,可他们再撑半个钟头绝对没什么问题,法师们也没到油尽灯枯的那一步,抛开预备队来不来得及支援他们先不说,再怎么样也不至于法师集团遽然间全变成哑巴,被敌军从容秒杀吧?
  这可是整整一支联队的法师啊!
  杜宾王国军情观察员揉揉眼睛,呆如木鸡之后一阵冷汗滂沱,看向隆美尔的眼神也变成了惊讶、厌恶和恐惧错综复杂的结合体;雷克萨的子孙继承了祖先耿直的脾性和敏锐地洞察力,别人或许还会以为这只是隆美尔的战术失误,但他们一眼就看出了这个无比冷静的混血福克斯分明是刻意而为!
  人类拥有爱琴最精明的头脑和最出色的智慧,当然迅速想通了这是怎么一回事。他们不错眼地重新打量隆美尔,凝重的目光中有深深的警惕和敬畏。
  比蒙这边比较复杂,两位天鹅大佬愕然无语的半晌,神色中抑制不住愤激的怒火,眼神虽然无比凌厉,却始终没有再看隆美尔哪怕一眼。狮心亲王则是事不关己,高高挂起的表情,甚至还带着点幸灾乐祸。
  刘震撼依旧一脸的没心没肺,堂尔皇之地戏耍了所有人的智商。
  是的!人人都看出了卢塞恩军队刚刚形势有点不对劲,可是大家都以为那只是常规兵种要蒙受大量战损,谁会联想到上千名堕落法师一刹那之后就化作了肉泥齑粉?
  根本没有人料到!
  隆美尔今天指挥的哪里是卢塞恩军队?
  他指挥地分明是远道而来的娜迦大军!
  能将自己地军队和敌军一起纳入指挥范畴,这样出类拔萃、神乎其神的指挥艺术,恐怕搜遍整个爱琴大陆也再找不出第二个;同样,如此心狠手辣、阴险歹毒的陷阱布置艺术,搜遍整个爱琴大陆也别无分号。
  刘震撼真是没办法不佩服这个混血杂种!
  “在抗击海族侵略者的战场上,我们博德比蒙不能只让卢塞恩盟友孤军奋战。”布吕克纳老公爵率先打破了沉默,一把摘下佩戴在胸口的美杜莎徽章,目不斜视地对儿子说道:“立刻升旗鸣鼓,聚将迎敌!”
  “这是我们博德第一次与你合作杀敌,也将是最后一次。”穆里尼奥扭过头看住了隆美尔,金质美杜莎徽章在他的手指间“咯咯”作响:“我不管你有什么理由,只要你用卑劣的伎俩做出陷阱,将刀口对准自己人,我们斯迈就永远不会再将你视为朋友!”
  “住口,魔力鸟!”老公爵银须凛冽地大喝一声:“别忘了你是斯迈贵族,跟这种小人说话简直是侮辱我们何塞家族的家徽!”
  若是换个场合,“魔力鸟”-穆里尼奥地小名一定会让很多人会心一笑,但今天哪还有人笑的出来。
  “空骑兵,做先锋!”狮心亲王念叨着博德军队消失已久地历史口号,抽出佩剑置于鼻尖,用庄严的军礼欢送布吕克纳老公爵和穆里尼奥带着卫队冲上战场。
  “卡恩殿下,你也别闲着。”刘震撼歪了歪脖子,示意这位跃跃欲试的莱茵亲王不妨跟着空骑先锋勇往直前。
  “冕下,那您地安全……”卡恩亲王有点犹豫,威瑟斯庞一战,比蒙祭祀系统遭受了重创,现在对于祭祀的人身安全,比蒙王国地保护措施已经近乎于神经质。
  “你放心,我的背后没有自己人捅过来的刀子。”刘震撼呵呵一笑。
  狮心亲王带队出发之后,人类特使、杜宾王国特派员和波拿巴美杜莎代表也坐不住了,都带着所属卫队假马日鬼地投入了战场,他们这么做并非同仇敌忾,协力杀敌,只是想籍此来避开尴尬罢了。
  甭管堕落精灵的名声多么恶劣,眼看着他们在战场上被自己人暗算,无论是谁都会产生一点兔死狐悲之心。
  战鼓响彻的沙场上,厮杀声已经渐渐宁歇,“堕落精灵不杀堕落精灵”、“投降吧同胞”、“我们是一家人”等等蛊惑意味十足的纳降口号,从无数鹰牛人的口中整齐吼出,激荡浮云。
  起初只有八头地狱黑龙轮番从头顶呼啸而过,娜迦们多多少少还显得有点犹豫不决。爱琴军队的确有优待俘虏的古老传统,也允许战俘在战后使用重金赎回自由,但这种人道主义的光辉在历届世界大战中还从未有过先例;无论尘封已久的神魔大战、上届海陆大战还是海加尔的落日黄昏,两大阵营的军人对待敌人都将“种族灭绝”这个血腥无比地信念视为金科玉律。
  娜迦们也是侵略爱琴的海族,他们从没想过跨上陆地战败被俘能有什么好下场。
  不过随着翡冷翠兄弟连杀气腾腾蹿上蓝天,娜迦们顿时又矮了一截;而紧跟着加入战场的博德比蒙,更是把娜迦仅剩的负隅顽抗之心打到了九霄云外;火焰不死鸟、尼密阿巨狮、利物朱鸟、深洋蓝极海豹、帝王蛤蜊,这些林林总总的超阶魔兽根本不象地狱黑龙那么空气,它们从空中一掠而过的同时,也抛下了密密麻麻、威力恐怖的魔法!
  响鼓不消重锤,革命全靠自觉,娜迦的重弩工兵、竖琴箭手和魔法师第一个放下了手中的武器;这三大王牌兵种放弃抵抗,也意味着娜迦大军被拔掉了仅有的、能够反击超阶生物地三颗獠牙,所以其余的娜迦军人在短暂的愣怔之后,旋即就加入了缴械投降的行列;只有极少数狂热份子仍然准备困兽犹斗,不过相比二十万娜迦大军,这样地亡命徒只是总人数的一个小小零头,大多数娜迦军人如果没有“萨弗拉斯权杖”之类地神器傍身,绝对难以鼓起勇气向数十头超阶魔兽公然叫板;随着这些顽固份子被定点清除,油丘之战也终于毫无悬念地分出了胜负。#
  对于卢塞恩大军来说,这场胜利可能是爱琴史上首个“不败而败”的经典战例。
  常规部队的伤亡惨重倒在其次,关键是上千名堕落法师的巨大牺牲,几乎一脚把堕落精灵傲视群雄的魔法优势从三万英尺高空踹进了无底巴托深渊。
  魔法师不是阿猫阿狗都能充当的,霜雪皮丘能靠龙族冥思诞生%的成材几率,已经是前无古人后无来者的惊世比例,就算堕落精灵从地底来到地表之后,可以凭借月蚀之期举行“血月赞美仪式”将摩尔法师们地魔法职称直接晋升一阶,三百万人口的卢塞恩城现如今一共也才两千出头地法师。
  此次随同隆美尔出征的一千名堕落法师,都是矮子里面拔将军,优先筛选出来的高等级法师。他们地战死,几乎让卢塞恩城只剩下一帮等级偏低的菜鸟法师!在如今这种,一场战争阵亡十来个魔法师,就能让主帅痛心疾首地征伐乱世,卢塞恩所遭受的损失之大,简直无法用语言去描述!
  这么可怕的损失没有人能事先想到,毕竟交战双方的兵力相等,卢塞恩又有八头地狱黑龙和绝对压倒性的法师数量优势,还有隆美尔这个超级名将指挥作战,更有大批比蒙高手押阵,海族军队凭什么尽歼上千名堕落法师?
  无敌书屋'!
  诶待身边的闲杂人等全部离开,刘震撼就乜斜住了隆美尔,目光咄咄。
  其实真正想通了倒也没什么,隆美尔就是打了个心理误差。
  种族异能从未在爱琴的大型会战中成编制形成过战斗力,即便是西雅美人鱼来到陆地之后,真正侧重的还是自己的水系魔法而不是天生领结。只有前不久威瑟斯庞守护战,天鹅主祭穆里尼奥亮出的异能兽亲部队,才算开创了专业异能兵种的先河。
  当代的军事专家,一直以来关注的焦点就是围绕着魔法、斗气和战歌打转,现在又加上了比蒙的两大狂化攻击、琴魔音刃、箭罡、能量武器和幻兽,谁也没把程度异能真正当过一回事-毕竟种族异能的诞生率太过偶然,无法进行系统培养;而且程度异能每使用一次,冷却时间就高达数个小时,火力持续性极度不足,只适合佣兵部队和冒险团体小打小闹派派用场。!
  当思维形成惯性之后就会变成传统,在爱琴的史书和典籍中,有关娜迦的描写大多集中在他们风木双修的魔法上,还有就是他们拥有多条手臂,能够同时使用种武器的特殊体质。上届海陆大战,娜迦虽然依靠“群体默言术”压制过爱琴法师,但从未在大型会战中单纯依靠这个异能取得过多么辉煌的战果,所以典籍中对娜迦的程度异能描写大多用春秋笔法轻描淡写地一笔略过。
  月精灵堕落成海娜迦是神魔大战后期的事,摩尔和卓尔早在那之前就被放逐进了地底世界。如果不是重新返回地表,摩尔和卓尔连“娜迦”这种堕落精灵听都没听说过,加上之前双方又没有任何交集,卢塞恩堕落精灵自然不会特地把这支躲藏在海底世界的同族列为重点研究的假想敌。
  卢塞恩会和娜迦开战,本身就是一件突发事件,如果没有老刘的提议,如果堕落精灵不出兵,卢塞恩和娜迦八杆子也打不到一起。
  综合以上这些小细节,当卢塞恩开动战争介战事,人人都以为拥有大批超阶魔兽助战的他们稳赢不输的情况下,还有哪个摩尔和卓尔能在这种十拿九稳的轻浮心态影响下,静下心来细细研究娜迦的特点?
  就算把堕落高层的脑袋换成诸葛亮,他们也绝对想不到这一仗会干掉他们一千名法师!?
  魔法师是所有兵种的克星,上千名魔法师聚集在一起,就算八头地狱黑龙也不敢轻缨其锋!再说了,一千名魔法师又不是一千个脑袋痴线的傻瓜,情况发展再怎么不妙,他们也可以选择决死突围,再怎么样也不至于一千名法师全部死光光!
  只有隆美尔的“双飞战阵”加上娜迦地“群体默言术”,才能让上千名堕落法师来不及逃跑,才能造成这样经典的结果!无敌书屋?)$
  “你做的这么绝,日后哪有国家还敢再收留你?”见对方始终不理自己,刘震撼干脆站到了隆美尔面前,将眼睛凑到了那双血丝密布的眸子上:“告诉我,这么做对你究竟有什么好处?”
  “我现在还需要别人来收留我吗?”沉默了一阵之后,隆美尔终于开口了,他地眼神如同钢铁,坚硬中吐露着拒绝熔化的意味:“当初我拉家带口来到多瑙荒原,手头只剩下些老弱病残,现在我有五千多名强壮地特拉维夫狂战士,只要“雷神之怒”战斧在手,以后还有更多的狂战士会来投奔我!”
  “狐狸尾巴露出来了!干的漂亮,无毒不丈夫,收留之恩算什么!想不到堕落精灵那么坏,最后还被一个更堕落的家伙摆了一道!”
  “你知道不知道,卢塞恩轮值城主幽月儿主母本来是不愿意出兵攻击娜迦的,因为没有任何好处。”隆美尔一点不恼,对老刘咧嘴一笑:“而其他的堕落高层则认为,这时候应该趁机敲诈你一笔劳务费,作为卢塞恩出兵的代价。”
  “他们门里虎做惯了,有这种小农意识不奇怪。”刘震撼摊摊手:“那后来呢?后来卢塞恩怎么又愿意无偿出兵了?”
  “因为我告诉堕落精灵,你这是代表爱琴同盟在试探他们的诚意。”
  “那是当然,我地战歌图腾柱是有免费赠送盟友的份额,但不准备往水里扔!”
  “你知不知道堕落高层怎么看待大陆局势?”
  “这帮墙头草是典型地政治投机商,得过且过的寒号鸟。”
  “没错!他们一致的看法就是:无论是谁打过来,只要不干涉他们地统治,名义上的称臣纳贡根本无所谓!如果不是我劝他们,卢塞恩会与海族宣战?做梦吧!”
  “无论卢塞恩投降海族还是魔族,也不管他们是名义上地投降还是真正的投降,只要堕落精灵敢这么干,任何一个爱琴种族都饶不了他们!”刘震撼冷笑不已:“这不是各人自打门前雪,休管他人瓦上霜的常规战争,这是种族与种族的生死存亡之战,每个人都有天然立场,谁背叛这个立场,都会受到惩罚!”
  无敌书屋 菲尼听书 - 兽血沸腾 - 第六百五十六章无毒不丈夫静官
;
  “那你对我今天的所作所为还有什么好奇怪的地方?”`
  “好象还是有点太过分了吧?”刘震撼也是一点就透的玲珑人:“好歹人家卢塞恩现在也加入了爱琴同盟,也为抵抗海族侵略出了力,你不想给他们陪葬也不能玩这么绝呀……”
  “除了海族还有一个魔族呢!海族一时之间还打不到卢塞恩,魔族不一样,魔族从东南部荒原**,第五站抵达的就是卢塞恩!”隆美尔撇了撇嘴:“你不会认为卢塞恩在魔族大军面前会选择死战到底吧?”
  刘震撼没话说了,按照隆美尔的说法,堕落精灵铁定是要投降魔族的,这一点也没有什么好意外的地方,他们在地底世界已经习惯了谁地拳头大谁称王,膜拜和崇尚弱肉强食这种丛林法则,对爱琴的认同感也远不如地表世界的圭著。
  “再说了,从卢塞恩的角度出发,就算投降……”隆美尔意味深长地看住了老刘,说了句意味深长的话:“宁可投降海族也不能投降魔族啊!”
  “你……”老刘蹙了半天眉毛,忍不住凑到隆美尔耳朵边问道:“你到底是怎么猜到我的打算的?魔族的事……”
  “很简单!如果你真的准备扼守桑干河渡口,没道理不在北岸修筑防御工事!”隆美尔淡淡一笑:“从军事防御角度来说,在桑干河北岸构筑一道防御工事,再凭借两座空中花园悬浮河面,远比你单靠翡冷翠一座防线更容易守住魔族军队的攻击-魔族军队攻打红土高坡是在平地上,还能使用攻城器械,攻击北岸就不行了,先要渡过桑干河天险,然后抢滩成功才能攻打你地防线,难度可不是一点点大!”:';
  “我好象没有在北岸修筑第二道防御工事……”
  “你们比蒙早在去年就已经拥有了烧窑锻砖的技术,翡冷翠也一直在大修特修格斗武塔,你明明有充裕的时间,也有大量的人手和物资,却始终不修筑第二道河防工事,这就不得不让我起疑心!”隆美尔斜乜着老刘:“你也是刀山血海滚过来地人,梯次防线和防御纵深的重要性你不会不清楚,把扼守桑干河地希望寄托在一个红土高坡上,你没那么蠢!
  不怕一万就怕万一,没有第二道防线,一旦翡冷翠失守,北部荒原上的比蒙王都和东北行省就对魔族军队敞开了大门!魔族可是实打实的陆地军队,他们攻起城来可比海族的花样多多了,这些道理你不会不明白!
  情况这么恶劣,你还敢这么托大,以你的性格来看,必然是掌握了克敌制胜的筹码!
  所以我翻来覆去地思考,彻夜不休拼命揣摩,到底是什么样的筹码让你有了这样十足的底气!
  “仅仅因为我没有在桑干河北岸修筑防线,你就推算出了这么多东西!”刘震撼起了一胳膊地鸡皮痱子:“欧比斯拉奇!你还是不是人?妈的早知道我就修那条防线了!”
  “瞧见没有?”美帅撩了撩自己地头发,鬓角里隐约搀杂着一簇簇淡淡的银丝:“这都是因为你的缘故!别人之所以想不到,那是因为他们没有深入地研究过你这个人!我不一样,我对你太了解了!”
  顿了一顿,隆美尔复又笑道:“你呢也别把我说地那么神,起先我也走入了误区,始终在战略和战术这两个层面考虑问题,不停分析你的优势之处,直到最后实在找不出结果,才通过回想你地事迹和经历,逐渐推敲了最终答案!
  万万没想到,这世界上居然还有人不靠战略布置来取得战略胜利!
  你果然是习惯剑走偏锋的天才!-
  但是别怪我没提醒你,用兵之道还是稳中求胜的好,你还是修葺一下北岸防线吧。如果翡冷翠失守,光凭两座巴比伦空中花园悬浮河水上空,并不是做到万无一失的全保险!”
  “这个不用你操心!你说,魔族会不会也意识到了你的猜测,毕竟哪个地方都不乏聪明人!”
  “如果魔族执意出兵爱琴,那他们肯定没有想到这方面问题。”隆美尔摇摇头:“其实对你而言,最大的优势就是海族选择攻打的爱琴的时间实在太正点了。现在魔族越是坐山观虎斗下去,情形就真是会对他们不利!拖的时间越久,就算他们能有人想到那茬,敢不敢进军爱琴,也要三思而后行了!”
  傻!你终究还是没猜到点子上,更没料到我的胃口有多大!刘震撼心里暗暗一乐,嘴上却连说你说的对你说的对。
  “俗话说良禽择木而栖,不是往火坑里栖,本来我个人在卢塞恩受点排挤和冷落都无所谓,但我拉家带口,不能让那些跟着我风里来雨里去的伙伴们也一起给堕落精灵陪葬。”隆美尔一阵黯然叹气:“正因为看穿了这些,我才必须从卢塞恩尽早脱身,万一魔族杀过来,堕落精灵早早竖起白旗,我将来势必也要跟着遭受鱼池之殃。”
  “你要走谁还能拦住你?以你地实力再加上谛听银象,堕落精灵里根本没有与你匹敌的高手!”刘震撼皱了皱眉心:“我们男人无论做好事还是做坏事都要光明磊落,如果你拿脱身来做借口,我觉得你未免太阴毒也忒无耻了一点!自立旗号就自立旗号,找那些无聊的理由做什么!”
  “上山容易下山难。你说的对,我想离开卢塞恩,是没人能拦住我,可我还有很多手下在卢塞恩城,堕落精灵曾经有意无意地从侧面给我提过醒。无论是谁想脱离卢塞恩,都只能孤身上路,想带人走,后果自负!”
  “都说了你不要找借口,我又不是斯迈那种眼里不搀沙子的比蒙!”刘震撼用脚踢了踢地上的沥青:“为了带着你的部下离开卢塞恩,你就用这么毒的阴招来黑堕落精灵?这就是你的理由?”
  “摩尔和卓尔凭什么统治灰矮人、鹰牛人和河仙人?优势和自信从何而来?不就是数量庞大的堕落法师!不先动摇他们地统治根基,我想带人走,不是等着卢塞恩大军在旷野上展开追杀?”
  “那可是一千名法师啊!我要是卢塞恩精灵,做亡灵也不会放过你!”
  “省省吧!现在没有了一千名级别最高的法师,剩下的那一千多名菜鸟魔法师能压的住谁?三十万灰矮人和六十万鹰牛人首先就不是省油地灯!”隆美尔耸耸肩膀:“知道我为什么要招降海娜迦吗?无论这些娜迦是迫于形式缴械投降,还是之后心甘情愿入伙堕落之城,他们的实力都足以导致卢塞恩经历一次剧烈动荡,乃至权利结构重新洗牌!”
  “我说你为什么要招隆娜迦呢!靠!真他妈无毒不丈夫!”刘震撼真是没办法不鼓掌喝彩:“我以为我已经够心狠手辣,无本起家,今天才知道,你才是山外青山楼外楼!”
  “别谦虚,论狠毒,你把堕落精灵走进出地底,天鹅在南十字星森林一个传染疫病就干掉了十万鹰牛人,都是我学习地楷模。”
  “我们和堕落精灵一山难容二虎,摆明是对手,可你是他们的自己人啊,而且你还帮河仙人改进了战力,原先是功臣,突然间就变成了叛将,这翻脸也翻的太快了吧?”
  “大家都是乱世飘萍,互相利用而已,何来突然翻脸之说?说起来魔族对阁下也不错啊,巫妖女王主动倒贴清白身子,您不一样拔鸟无情?”
  “你今后的打算是什么?堕落精灵绝不会放过你的!”
  “谁要他们放过我?我要带着更多的卢塞恩战士,自己打出一片天下!”
  “更多的卢塞恩战士?
  “你不要以为河仙人、灰矮人、牛鹰人和密林守护者、密林树妖都对堕落精灵忠心耿耿,哪有那种好事!在地底世界,堕落精灵一家独大,那是没得选择,可现在是地表世界,没了一千名高段位魔法师打底,堕落精灵算哪根葱?这些附庸跟谁混不行?”隆美尔低声笑道:“我敢肯定,随着卢塞恩的统治根本开始出现混乱,到时候肯定有人会投奔我!”
  “说来说去,焦点还是那一千名堕落法师。”老刘歪着脑袋想了想:“是不是那些地狱黑龙也和你谈妥了?还有那些鹰牛人军官。按道理说,前来督战地堕落高层,不至于没有联络鹰牛人的骨联宝盒座标才是,就算你不出动预备队,他们也一样可以下令,但我没看到这种情况发生!”
  “龙族有个优点,它们习惯不问俗事,只要得到它们承认地强者,就可以和它们进行平等的对话。你也是龙族,用你的眼光来看,我比堕落精灵,哪一个更有前途?”隆美尔傲然一笑:“十万鹰牛人就只有一个军团长才有骨联,他地贴身侍卫就是我送给他的秃鹫骑士,刚刚刀就架在他地脖子上,你说他敢不敢接听骨联?哼!我还以为四十二位摩尔高法一早就会飞回来质问我,没想到他们这么蠢,白白让我的狂战士准备了一批飞斧没派上用场!
  “你这么一说我又想通了一件事,堕落精灵不允许你带一兵一卒离开卢塞恩,可今天你明明连沙漠矮人的老弱病残都带了出来,不怪要趁机造反。”
  “没错是,不是此次出征,我还真没有借口把他们全部带出来。”
  “我真他妈奇怪!这帮堕落精灵怎么一个都没看出‘双飞战阵’是个陷阱?”
  “不懂不要乱说,‘双飞战阵’是事先我和他们磋商好的阵型。这的确是个好阵型,别看娜迦有二十万人,我真要是用心指挥,只要五万灰矮人步兵都能打跨他们!今天一开始阶段,灰矮人的进攻重点就搞错了,他们除了留下小股阻击部队之外,大部分应该向中心纵深**,不是全体人员扯到右翼去和海狮石球战车硬磕。这么做既让娜迦的步兵缠了上来,也让对方获得了布置远程攻击部队的空间和时间!左路的狼脚蜘蛛战车和剑齿兽战车根本就是两个笑话,我如果把他们改成骑兵部队,以轻骑的机动力,娜迦后阵地重弩的投石机早该完蛋了。”隆美尔一边说一边用剑鞘在沥青地面上划了个草图:“你仔细看看,如果‘双飞战阵’的两翼齐飞,中路的远程火力又可以完全展开,怎么赢不了娜迦?不用预备队我都能赢!就算刚刚的战况很糟糕,卢塞恩军队从头到尾没垮掉也是事实!”
  “我可算知道什么叫人嘴两张皮了。”
  “这话怎么说地,如果堕落精灵早点让我改革军制,训练部队,今天的情况根本不会发生。”
  “废话!枪杆子里出政权。如果军权给你掌握,卢塞恩还是堕落精灵当家作主地城市吗?”刘震撼笑歪了嘴:“难怪你今天公开宣布自己会提炼‘炭精’,原来是故意放出消息,好让自己有条后路。”
  “我早跟你说过,我准备去人类世界闯荡!不过有了弑主这个恶劣前科,没有哪个人类国家会收留我的。我正好拒绝招揽,自行发展,用炭精与他们进行贸易往来!”
  “你开个条件吧,到底要怎么样才肯反‘炭精’提炼技术转让给我。”
  “这话你就不该提,你给我煤炭,再付点劳务费,我帮你提炼‘炭精’自然义不容辞。但你让给你提炼技术,那我还怎么混?”'
  “瞧你那德行!我是看的起你才问你要‘炭精’的提炼配方,你知道不知道我的油瓜通过生命古树和绿巨人的植物嫁接,每个星期能出产四五百颗?”刘震撼用鼻孔轻蔑地喷出一股冷气:“一百磅煤炭才提炼一磅炭精,五百吨煤炭不过提炼一万枚胡桃大小的炭精航弹!算个屁啊!”
  “帐不是你这么算的,你每星期只有四五百颗油瓜地囤积量,产量根本无法提高,是固定的!炭精不同,只要我有足够地人手和矿源,每个星期开采一万吨煤炭也不是不可能,那样的话,我的炭精应该远比你地油瓜更宽裕吧?战争的消耗有多大你不是不明白,我地生产力明显比你先进的太多太多!”
  “你当人类国家全是傻?他们肯把大量的煤矿白白让给你开采?”
  “别忘了我还有一些沙漠矮人,我们沙漠中几乎没有多少山脉,所以这种矮人的特长不是开山,而是钻地探矿!他们和喜欢挖空山脉寻找矿藏的爱琴矮人完全不同!你们爱琴的矿藏也不是全部蕴藏在山脉里面,也有埋藏在地下的!”
  “你的沙漠矮人?哈哈,就那帮老人、小孩和妇女也能钻地打矿?”
  “他们再怎么样也是沙漠矮人!我要的只是他们勘探出矿源在哪,并不是要他们累死累活!”
  “那我就先祝贺你在人类世界能闯出名堂了!”
  “暂时不去人类世界,我要先帮你们比蒙住王都沙马克,别忘了,你答应过我五万骆驼骑兵,我正等着从沙巴克的海慕联军里面抠出人选呢。”
  “恐怕要让你失望了。现在我们并不想和沙巴克的那支海慕联军发生冲突,就这样僵持下去挺好!万一动作太大,我还怕海族恼羞成怒,将攻击重心从人类挪到比蒙这头来呢!”刘震撼正色说道:“我是答应过你五万骆驼骑兵,不过你恐怕有的等了。”
  “你们比蒙想海慕联军围而不打,海慕联军就真会执行?想的美啊你!你这段时间又是骚扰他们地粮道,又是阻拦他们砍伐木材,人家可是憋了一肚皮的火!”隆美尔仰天长笑:“别忘了,海慕联军的战略目标可是多洛特,他们在沙巴克绝不会长久保持沉默。现在战争造反权根本不在你手里,人家海族想打,随时都能发动攻城!”
  “海慕联军想怎么做那是他们的自由,我们随时欢迎他们来攻城!不过我可要把丑话先说在前头,如果你肯帮我们守卫沙巴克,我们比蒙可没有多余的给养来供给你的部队!
  你看看你,麾下又是砒霜巨人又是老老小小的沙漠矮人,还有一帮吹胡子瞪眼,看到我就是十万八千个不忿的秃鹫骑士……还有还有,你手下的特拉维夫狂战士少说也有五千多人,这样一支班底,每天的粮食消耗就不是一个小数目!
  !\+;
  你连个根据地都没有,早就该好好想想,万一脱离了卢塞恩该怎么养活他们。”
  “闲吃萝卜淡操心,我什么时候说过要你们比蒙为我地部队提供过给养?”!
  “嘿!那你给手下这几千号人吃什么?威瑟斯庞大战结束之后,那帮逃跑的慕兰败兵这些天可饿死了不少人,高空侦察拓图上甚至有了在人吃吃的画祯!你是不是准备让你的部队也和这些败兵学习,用石膏观音土和狗尾巴草填肚皮?”
  “我地冕下,您是不是忘了我刚刚做了些什么?”隆美尔伸手指了指战场:“您不妨仔细算一算,这二十万娜迦大军的给养,可以供我地部队吃多久?这些俘虏可是要通过卢塞恩军队押回堕落之城的,不需要我来照料!”
  刘震撼楞住了。
  隆美尔考虑事情确实面面俱到,算无遗策。
  万事不求人,这句话说起来容易做起来可就难了,隆美尔却做到了这一点。
  眼睁睁看着这么一个聪慧绝顶的命中夙敌远走他乡,老刘有点庆幸,也有点不太甘心。
  说庆幸,那是因为他在潜意识里想和才华横溢的隆美尔做朋友,远远多过想和他做仇人。说不甘心,那是因为如果没有现在这场世界大战纠缠,比蒙绝对会让隆美尔用自己的鲜血和生命,去告慰战死在滹夜古城下的勇士灵魂!'
  想想这个家伙几乎是光着膀子来到了爱琴大陆,先投奔堕落精灵,再无中生有,硬生生攒下现在的家当,然后再想办法脱离卢塞恩的钳制,趁着世界大战地东风,凭借自己的炭精航弹提炼技术,在一个个人类国度争相邀请下,风风光光进入卡瑞姆多大平原,用多洛特和大雪山遮断比蒙最后一束仇视地目光。
  他的做法对他而言是当前唯一的出路,如果继续呆在多瑙荒原,即使熬过世界大战,比蒙绝对饶不了他!这份心计、这份能耐、这一连串清晰有序,步骤明确地发展规划,不得不让刘震撼钦佩的五体投地!战火纷飞地乱世,正是这种人中之龙大展拳脚的好机会。老刘可以肯定,以隆美尔的脑袋,不难在人类世界闯荡出一番新天地。
  “枭雄”这个词,从被创造出来的那一天开始,就是为了配对他这样惊才绝艳风流的人物!
  为什么我们比蒙没有一个人能有他这样的头脑?刘震撼在心里叹息。
  为什么我这么出色,却与你生在了同一个时代?隆美尔同样也在心里叹息。
  顺便检讨一下自己……一直以来总有人说我写的太罗嗦,经过长久的反思之后,我终于意识到了自己的傻之处-我总是怕读者看不懂某些细节,特意强调来强调去,比如某些军事常识,比如大陆格局,比如战略思想,比如兵种互补的重要惦,偏偏这些东西就应该在魔幻小说中一笔带过才是,象好莱坞的新片那样,三百个肌**子穿着裤衩拿着盾牌长枪上阵,连辎重都不用带那才是王道。-%`-
  但我现在不准备有什么改变了,毕竟兽血已经从起初阶段老刘的随波逐流渐渐发展到了带领整个大陆以弱击强,反抗侵略这个大架子上,必须写细一点。
  这样的话,看连载或许觉得烦,当某些新读者从头开始读这本书,一气呵成时就不会有这样那样的疑虑
目录
设置
听书
顶部
;\n“那你对我今天的所作所为还有什么好奇怪的地方?”`\n“好象还是有点太过分了吧?”刘震撼也是一点就透的玲珑人:“好歹人家卢塞恩现在也加入了爱琴同盟,也为抵抗海族侵略出了力,你不想给他们陪葬也不能玩这么绝呀……”\n“除了海族还有一个魔族呢!海族一时之间还打不到卢塞恩,魔族不一样,魔族从东南部荒原**,第五站抵达的就是卢塞恩!”隆美尔撇了撇嘴:“你不会认为卢塞恩在魔族大军面前会选择死战到底吧?”\n刘震撼没话说了,按照隆美尔的说法,堕落精灵铁定是要投降魔族的,这一点也没有什么好意外的地方,他们在地底世界已经习惯了谁地拳头大谁称王,膜拜和崇尚弱肉强食这种丛林法则,对爱琴的认同感也远不如地表世界的圭著。\n“再说了,从卢塞恩的角度出发,就算投降……”隆美尔意味深长地看住了老刘,说了句意味深长的话:“宁可投降海族也不能投降魔族啊!”\n“你……”老刘蹙了半天眉毛,忍不住凑到隆美尔耳朵边问道:“你到底是怎么猜到我的打算的?魔族的事……”\n“很简单!如果你真的准备扼守桑干河渡口,没道理不在北岸修筑防御工事!”隆美尔淡淡一笑:“从军事防御角度来说,在桑干河北岸构筑一道防御工事,再凭借两座空中花园悬浮河面,远比你单靠翡冷翠一座防线更容易守住魔族军队的攻击-魔族军队攻打红土高坡是在平地上,还能使用攻城器械,攻击北岸就不行了,先要渡过桑干河天险,然后抢滩成功才能攻打你地防线,难度可不是一点点大!”:';\n“我好象没有在北岸修筑第二道防御工事……”\n“你们比蒙早在去年就已经拥有了烧窑锻砖的技术,翡冷翠也一直在大修特修格斗武塔,你明明有充裕的时间,也有大量的人手和物资,却始终不修筑第二道河防工事,这就不得不让我起疑心!”隆美尔斜乜着老刘:“你也是刀山血海滚过来地人,梯次防线和防御纵深的重要性你不会不清楚,把扼守桑干河地希望寄托在一个红土高坡上,你没那么蠢!\n不怕一万就怕万一,没有第二道防线,一旦翡冷翠失守,北部荒原上的比蒙王都和东北行省就对魔族军队敞开了大门!魔族可是实打实的陆地军队,他们攻起城来可比海族的花样多多了,这些道理你不会不明白!\n情况这么恶劣,你还敢这么托大,以你的性格来看,必然是掌握了克敌制胜的筹码!\n所以我翻来覆去地思考,彻夜不休拼命揣摩,到底是什么样的筹码让你有了这样十足的底气!\n“仅仅因为我没有在桑干河北岸修筑防线,你就推算出了这么多东西!”刘震撼起了一胳膊地鸡皮痱子:“欧比斯拉奇!你还是不是人?妈的早知道我就修那条防线了!”\n“瞧见没有?”美帅撩了撩自己地头发,鬓角里隐约搀杂着一簇簇淡淡的银丝:“这都是因为你的缘故!别人之所以想不到,那是因为他们没有深入地研究过你这个人!我不一样,我对你太了解了!”\n顿了一顿,隆美尔复又笑道:“你呢也别把我说地那么神,起先我也走入了误区,始终在战略和战术这两个层面考虑问题,不停分析你的优势之处,直到最后实在找不出结果,才通过回想你地事迹和经历,逐渐推敲了最终答案!\n万万没想到,这世界上居然还有人不靠战略布置来取得战略胜利!\n你果然是习惯剑走偏锋的天才!-\n但是别怪我没提醒你,用兵之道还是稳中求胜的好,你还是修葺一下北岸防线吧。如果翡冷翠失守,光凭两座巴比伦空中花园悬浮河水上空,并不是做到万无一失的全保险!”\n“这个不用你操心!你说,魔族会不会也意识到了你的猜测,毕竟哪个地方都不乏聪明人!”\n“如果魔族执意出兵爱琴,那他们肯定没有想到这方面问题。”隆美尔摇摇头:“其实对你而言,最大的优势就是海族选择攻打的爱琴的时间实在太正点了。现在魔族越是坐山观虎斗下去,情形就真是会对他们不利!拖的时间越久,就算他们能有人想到那茬,敢不敢进军爱琴,也要三思而后行了!”\n傻!你终究还是没猜到点子上,更没料到我的胃口有多大!刘震撼心里暗暗一乐,嘴上却连说你说的对你说的对。\n“俗话说良禽择木而栖,不是往火坑里栖,本来我个人在卢塞恩受点排挤和冷落都无所谓,但我拉家带口,不能让那些跟着我风里来雨里去的伙伴们也一起给堕落精灵陪葬。”隆美尔一阵黯然叹气:“正因为看穿了这些,我才必须从卢塞恩尽早脱身,万一魔族杀过来,堕落精灵早早竖起白旗,我将来势必也要跟着遭受鱼池之殃。”\n“你要走谁还能拦住你?以你地实力再加上谛听银象,堕落精灵里根本没有与你匹敌的高手!”刘震撼皱了皱眉心:“我们男人无论做好事还是做坏事都要光明磊落,如果你拿脱身来做借口,我觉得你未免太阴毒也忒无耻了一点!自立旗号就自立旗号,找那些无聊的理由做什么!”\n“上山容易下山难。你说的对,我想离开卢塞恩,是没人能拦住我,可我还有很多手下在卢塞恩城,堕落精灵曾经有意无意地从侧面给我提过醒。无论是谁想脱离卢塞恩,都只能孤身上路,想带人走,后果自负!”\n“都说了你不要找借口,我又不是斯迈那种眼里不搀沙子的比蒙!”刘震撼用脚踢了踢地上的沥青:“为了带着你的部下离开卢塞恩,你就用这么毒的阴招来黑堕落精灵?这就是你的理由?”\n“摩尔和卓尔凭什么统治灰矮人、鹰牛人和河仙人?优势和自信从何而来?不就是数量庞大的堕落法师!不先动摇他们地统治根基,我想带人走,不是等着卢塞恩大军在旷野上展开追杀?”\n“那可是一千名法师啊!我要是卢塞恩精灵,做亡灵也不会放过你!”\n“省省吧!现在没有了一千名级别最高的法师,剩下的那一千多名菜鸟魔法师能压的住谁?三十万灰矮人和六十万鹰牛人首先就不是省油地灯!”隆美尔耸耸肩膀:“知道我为什么要招降海娜迦吗?无论这些娜迦是迫于形式缴械投降,还是之后心甘情愿入伙堕落之城,他们的实力都足以导致卢塞恩经历一次剧烈动荡,乃至权利结构重新洗牌!”\n“我说你为什么要招隆娜迦呢!靠!真他妈无毒不丈夫!”刘震撼真是没办法不鼓掌喝彩:“我以为我已经够心狠手辣,无本起家,今天才知道,你才是山外青山楼外楼!”\n“别谦虚,论狠毒,你把堕落精灵走进出地底,天鹅在南十字星森林一个传染疫病就干掉了十万鹰牛人,都是我学习地楷模。”\n“我们和堕落精灵一山难容二虎,摆明是对手,可你是他们的自己人啊,而且你还帮河仙人改进了战力,原先是功臣,突然间就变成了叛将,这翻脸也翻的太快了吧?”\n“大家都是乱世飘萍,互相利用而已,何来突然翻脸之说?说起来魔族对阁下也不错啊,巫妖女王主动倒贴清白身子,您不一样拔鸟无情?”\n“你今后的打算是什么?堕落精灵绝不会放过你的!”\n“谁要他们放过我?我要带着更多的卢塞恩战士,自己打出一片天下!”\n“更多的卢塞恩战士?\n“你不要以为河仙人、灰矮人、牛鹰人和密林守护者、密林树妖都对堕落精灵忠心耿耿,哪有那种好事!在地底世界,堕落精灵一家独大,那是没得选择,可现在是地表世界,没了一千名高段位魔法师打底,堕落精灵算哪根葱?这些附庸跟谁混不行?”隆美尔低声笑道:“我敢肯定,随着卢塞恩的统治根本开始出现混乱,到时候肯定有人会投奔我!”\n“说来说去,焦点还是那一千名堕落法师。”老刘歪着脑袋想了想:“是不是那些地狱黑龙也和你谈妥了?还有那些鹰牛人军官。按道理说,前来督战地堕落高层,不至于没有联络鹰牛人的骨联宝盒座标才是,就算你不出动预备队,他们也一样可以下令,但我没看到这种情况发生!”\n“龙族有个优点,它们习惯不问俗事,只要得到它们承认地强者,就可以和它们进行平等的对话。你也是龙族,用你的眼光来看,我比堕落精灵,哪一个更有前途?”隆美尔傲然一笑:“十万鹰牛人就只有一个军团长才有骨联,他地贴身侍卫就是我送给他的秃鹫骑士,刚刚刀就架在他地脖子上,你说他敢不敢接听骨联?哼!我还以为四十二位摩尔高法一早就会飞回来质问我,没想到他们这么蠢,白白让我的狂战士准备了一批飞斧没派上用场!\n“你这么一说我又想通了一件事,堕落精灵不允许你带一兵一卒离开卢塞恩,可今天你明明连沙漠矮人的老弱病残都带了出来,不怪要趁机造反。”\n“没错是,不是此次出征,我还真没有借口把他们全部带出来。”\n“我真他妈奇怪!这帮堕落精灵怎么一个都没看出‘双飞战阵’是个陷阱?”\n“不懂不要乱说,‘双飞战阵’是事先我和他们磋商好的阵型。这的确是个好阵型,别看娜迦有二十万人,我真要是用心指挥,只要五万灰矮人步兵都能打跨他们!今天一开始阶段,灰矮人的进攻重点就搞错了,他们除了留下小股阻击部队之外,大部分应该向中心纵深**,不是全体人员扯到右翼去和海狮石球战车硬磕。这么做既让娜迦的步兵缠了上来,也让对方获得了布置远程攻击部队的空间和时间!左路的狼脚蜘蛛战车和剑齿兽战车根本就是两个笑话,我如果把他们改成骑兵部队,以轻骑的机动力,娜迦后阵地重弩的投石机早该完蛋了。”隆美尔一边说一边用剑鞘在沥青地面上划了个草图:“你仔细看看,如果‘双飞战阵’的两翼齐飞,中路的远程火力又可以完全展开,怎么赢不了娜迦?不用预备队我都能赢!就算刚刚的战况很糟糕,卢塞恩军队从头到尾没垮掉也是事实!”\n“我可算知道什么叫人嘴两张皮了。”\n“这话怎么说地,如果堕落精灵早点让我改革军制,训练部队,今天的情况根本不会发生。”\n“废话!枪杆子里出政权。如果军权给你掌握,卢塞恩还是堕落精灵当家作主地城市吗?”刘震撼笑歪了嘴:“难怪你今天公开宣布自己会提炼‘炭精’,原来是故意放出消息,好让自己有条后路。”\n“我早跟你说过,我准备去人类世界闯荡!不过有了弑主这个恶劣前科,没有哪个人类国家会收留我的。我正好拒绝招揽,自行发展,用炭精与他们进行贸易往来!”\n“你开个条件吧,到底要怎么样才肯反‘炭精’提炼技术转让给我。”\n“这话你就不该提,你给我煤炭,再付点劳务费,我帮你提炼‘炭精’自然义不容辞。但你让给你提炼技术,那我还怎么混?”'\n“瞧你那德行!我是看的起你才问你要‘炭精’的提炼配方,你知道不知道我的油瓜通过生命古树和绿巨人的植物嫁接,每个星期能出产四五百颗?”刘震撼用鼻孔轻蔑地喷出一股冷气:“一百磅煤炭才提炼一磅炭精,五百吨煤炭不过提炼一万枚胡桃大小的炭精航弹!算个屁啊!”\n“帐不是你这么算的,你每星期只有四五百颗油瓜地囤积量,产量根本无法提高,是固定的!炭精不同,只要我有足够地人手和矿源,每个星期开采一万吨煤炭也不是不可能,那样的话,我的炭精应该远比你地油瓜更宽裕吧?战争的消耗有多大你不是不明白,我地生产力明显比你先进的太多太多!”\n“你当人类国家全是傻?他们肯把大量的煤矿白白让给你开采?”\n“别忘了我还有一些沙漠矮人,我们沙漠中几乎没有多少山脉,所以这种矮人的特长不是开山,而是钻地探矿!他们和喜欢挖空山脉寻找矿藏的爱琴矮人完全不同!你们爱琴的矿藏也不是全部蕴藏在山脉里面,也有埋藏在地下的!”\n“你的沙漠矮人?哈哈,就那帮老人、小孩和妇女也能钻地打矿?”\n“他们再怎么样也是沙漠矮人!我要的只是他们勘探出矿源在哪,并不是要他们累死累活!”\n“那我就先祝贺你在人类世界能闯出名堂了!”\n“暂时不去人类世界,我要先帮你们比蒙住王都沙马克,别忘了,你答应过我五万骆驼骑兵,我正等着从沙巴克的海慕联军里面抠出人选呢。”\n“恐怕要让你失望了。现在我们并不想和沙巴克的那支海慕联军发生冲突,就这样僵持下去挺好!万一动作太大,我还怕海族恼羞成怒,将攻击重心从人类挪到比蒙这头来呢!”刘震撼正色说道:“我是答应过你五万骆驼骑兵,不过你恐怕有的等了。”\n“你们比蒙想海慕联军围而不打,海慕联军就真会执行?想的美啊你!你这段时间又是骚扰他们地粮道,又是阻拦他们砍伐木材,人家可是憋了一肚皮的火!”隆美尔仰天长笑:“别忘了,海慕联军的战略目标可是多洛特,他们在沙巴克绝不会长久保持沉默。现在战争造反权根本不在你手里,人家海族想打,随时都能发动攻城!”\n“海慕联军想怎么做那是他们的自由,我们随时欢迎他们来攻城!不过我可要把丑话先说在前头,如果你肯帮我们守卫沙巴克,我们比蒙可没有多余的给养来供给你的部队!\n你看看你,麾下又是砒霜巨人又是老老小小的沙漠矮人,还有一帮吹胡子瞪眼,看到我就是十万八千个不忿的秃鹫骑士……还有还有,你手下的特拉维夫狂战士少说也有五千多人,这样一支班底,每天的粮食消耗就不是一个小数目!\n!\\+;\n你连个根据地都没有,早就该好好想想,万一脱离了卢塞恩该怎么养活他们。”\n“闲吃萝卜淡操心,我什么时候说过要你们比蒙为我地部队提供过给养?”!\n“嘿!那你给手下这几千号人吃什么?威瑟斯庞大战结束之后,那帮逃跑的慕兰败兵这些天可饿死了不少人,高空侦察拓图上甚至有了在人吃吃的画祯!你是不是准备让你的部队也和这些败兵学习,用石膏观音土和狗尾巴草填肚皮?”\n“我地冕下,您是不是忘了我刚刚做了些什么?”隆美尔伸手指了指战场:“您不妨仔细算一算,这二十万娜迦大军的给养,可以供我地部队吃多久?这些俘虏可是要通过卢塞恩军队押回堕落之城的,不需要我来照料!”\n刘震撼楞住了。\n隆美尔考虑事情确实面面俱到,算无遗策。\n万事不求人,这句话说起来容易做起来可就难了,隆美尔却做到了这一点。\n眼睁睁看着这么一个聪慧绝顶的命中夙敌远走他乡,老刘有点庆幸,也有点不太甘心。\n说庆幸,那是因为他在潜意识里想和才华横溢的隆美尔做朋友,远远多过想和他做仇人。说不甘心,那是因为如果没有现在这场世界大战纠缠,比蒙绝对会让隆美尔用自己的鲜血和生命,去告慰战死在滹夜古城下的勇士灵魂!'\n想想这个家伙几乎是光着膀子来到了爱琴大陆,先投奔堕落精灵,再无中生有,硬生生攒下现在的家当,然后再想办法脱离卢塞恩的钳制,趁着世界大战地东风,凭借自己的炭精航弹提炼技术,在一个个人类国度争相邀请下,风风光光进入卡瑞姆多大平原,用多洛特和大雪山遮断比蒙最后一束仇视地目光。\n他的做法对他而言是当前唯一的出路,如果继续呆在多瑙荒原,即使熬过世界大战,比蒙绝对饶不了他!这份心计、这份能耐、这一连串清晰有序,步骤明确地发展规划,不得不让刘震撼钦佩的五体投地!战火纷飞地乱世,正是这种人中之龙大展拳脚的好机会。老刘可以肯定,以隆美尔的脑袋,不难在人类世界闯荡出一番新天地。\n“枭雄”这个词,从被创造出来的那一天开始,就是为了配对他这样惊才绝艳风流的人物!\n为什么我们比蒙没有一个人能有他这样的头脑?刘震撼在心里叹息。\n为什么我这么出色,却与你生在了同一个时代?隆美尔同样也在心里叹息。\n顺便检讨一下自己……一直以来总有人说我写的太罗嗦,经过长久的反思之后,我终于意识到了自己的傻之处-我总是怕读者看不懂某些细节,特意强调来强调去,比如某些军事常识,比如大陆格局,比如战略思想,比如兵种互补的重要惦,偏偏这些东西就应该在魔幻小说中一笔带过才是,象好莱坞的新片那样,三百个肌**子穿着裤衩拿着盾牌长枪上阵,连辎重都不用带那才是王道。-%`-\n但我现在不准备有什么改变了,毕竟兽血已经从起初阶段老刘的随波逐流渐渐发展到了带领整个大陆以弱击强,反抗侵略这个大架子上,必须写细一点。\n这样的话,看连载或许觉得烦,当某些新读者从头开始读这本书,一气呵成时就不会有这样那样的疑虑"},"backgrounds":{"#F6F8FA":["#ffffff","#000000"],"#D7DCE2":["#E3E7EB","#000000"],"#D5DCCC":["#E2E7DB","#000000"],"#EBE2E7":["#F1EBEE","#000000"],"#E2E7DB":["#D5DCCC","#000000"],"#E3E7EB":["#D7DCE2","#000000"],"#F1EBEE":["#EBE2E7","#000000"],"#0F0F0F":["#1D1D1D","#ADADAD"]},"fonts":{"宋体":"SourceHanSerifSC-Regular,SourceHanSerifCN-Regular,STSong,Simsun,system-ui,-apple-system,Georgia,Times New Roman,Times,serif","黑体":"SimHei","雅黑":"SourceHanSansSC-Regular,SourceHanSansCN-Regular,PingFangSC-Regular,\"Microsoft YaHei\",system-ui,\"-apple-system\",Segoe UI,Roboto,Emoji,Helvetica,Arial,sans-serif","楷体":"STKaiti,Kaiti,system-ui,-apple-system,Georgia,Times New Roman,Times,serif, -apple-system, Simsun"},"pages":{"640":"640px","800":"800px","1024":"1024px","1200":"1200px","1440":"1440px","1600":"1600px","1920":"1920px","自适应":"auto"},"showTop":false,"cache":true,"title":"兽血沸腾 - 第六百五十六章无毒不丈夫静官","javascript":"window.audioTools = function a() {\n\tif (typeof window !== 'undefined') {\n\t\twindow.audioTools = {\n\t\t\tchapterContent: '', //章节内容\n\t\t\tnextChapterId: '', //下一章节\n\t\t\tid: '',\n\t\t\tchapterId: '',\n\t\t\tapi: '',\n\t\t\tgotoNextChapter: null,\n\t\t\tonAudioPlay: null,\n\t\t\tonAudioPause: null,\n\t\t\tonAudioStop: null,\n\t\t\tonAudioError: null,\n\t\t\tonClickParagraph: null,\n\t\t\tshowLoading: null,\n\t\t\thideLoading: null,\n\n\t\t\tinit(ref, watch) {\n\t\t\t\tthis.clickParagraphToPlay = ref(true);\n\t\t\t\tthis.isPlaying = ref(false);\n\t\t\t\tthis.isPaused = ref(false);\n\t\t\t\tthis.currentIndex = ref(0);\n\t\t\t\tthis.audioQueue = ref([]);\n\t\t\t\tthis.currentAudio = ref(null);\n\t\t\t\tthis.totalParagraphs = ref(0);\n\t\t\t\tthis.audioCache = ref(new Map()); // 音频缓存\n\t\t\t\tthis.retryCount = ref(0); // 重试次数\n\t\t\t\tthis.maxRetries = 3; // 最大重试次数\n\t\t\t\tthis.cachePoolSize = ref(3); // 缓存池大小(可配置)\n\t\t\t\tthis.generatingStatus = ref(new Map()); // 音频生成状态跟踪\n\t\t\t\tthis.originalStyles = ref(new Map()); // 保存原始样式\n\t\t\t\tthis.isConfigChanging = ref(false); // 配置修改状态\n\t\t\t\tthis.shouldResumeAfterConfig = ref(false); // 配置修改后是否需要恢复播放\n\t\t\t\tthis.userScrolled = ref(false); // 用户是否手动滚动\n\t\t\t\tthis.scrollTimeout = ref(null); // 滚动检测定时器\n\t\t\t\tthis.isProgramScrolling = ref(false); // 是否正在程序滚动\n\t\t\t\tthis.currentRotation = ref(0); // 当前旋转角度\n\t\t\t\tthis.rotationInterval = ref(null); // 旋转定时器\n\t\t\t\tthis.audioPlaySuccess = ref(false); // 音频是否播放成功\n\t\t\t\tthis.speedList = {\n\t\t\t\t\t很慢: '0.5',\n\t\t\t\t\t慢速: '0.75',\n\t\t\t\t\t正常: '1.0',\n\t\t\t\t\t快速: '1.25',\n\t\t\t\t\t很快: '1.5',\n\t\t\t\t\t极速: '2.0',\n\t\t\t\t\t// 超速: '3.0',\n\t\t\t\t};\n\t\t\t\tthis.voiceList = {\n\t\t\t\t\t'晓晓 (女声·温柔)': 'zh-CN-XiaoxiaoNeural',\n\t\t\t\t\t'云希 (男声·清朗)': 'zh-CN-YunxiNeural',\n\t\t\t\t\t'云扬 (男声·阳光)': 'zh-CN-YunyangNeural',\n\t\t\t\t\t'晓伊 (女声·甜美)': 'zh-CN-XiaoyiNeural',\n\t\t\t\t\t'云健 (男声·稳重)': 'zh-CN-YunjianNeural',\n\t\t\t\t\t'晓辰 (女声·知性)': 'zh-CN-XiaochenNeural',\n\t\t\t\t\t'晓涵 (女声·优雅)': 'zh-CN-XiaohanNeural',\n\t\t\t\t\t'晓梦 (女声·梦幻)': 'zh-CN-XiaomengNeural',\n\t\t\t\t\t'晓墨 (女声·文艺)': 'zh-CN-XiaomoNeural',\n\t\t\t\t\t'晓秋 (女声·成熟)': 'zh-CN-XiaoqiuNeural',\n\t\t\t\t\t'晓睿 (女声·智慧)': 'zh-CN-XiaoruiNeural',\n\t\t\t\t\t'晓双 (女声·活泼)': 'zh-CN-XiaoshuangNeural',\n\t\t\t\t\t'晓萱 (女声·清新)': 'zh-CN-XiaoxuanNeural',\n\t\t\t\t\t'晓颜 (女声·柔美)': 'zh-CN-XiaoyanNeural',\n\t\t\t\t\t'晓悠 (女声·悠扬)': 'zh-CN-XiaoyouNeural',\n\t\t\t\t\t'晓甄 (女声·端庄)': 'zh-CN-XiaozhenNeural',\n\t\t\t\t\t'云枫 (男声·磁性)': 'zh-CN-YunfengNeural',\n\t\t\t\t\t'云皓 (男声·豪迈)': 'zh-CN-YunhaoNeural',\n\t\t\t\t\t'云夏 (男声·热情)': 'zh-CN-YunxiaNeural',\n\t\t\t\t\t'云野 (男声·野性)': 'zh-CN-YunyeNeural',\n\t\t\t\t\t'云泽 (男声·深沉)': 'zh-CN-YunzeNeural',\n\t\t\t\t};\n\t\t\t\tthis.pitchList = {\n\t\t\t\t\t很低沉: -50,\n\t\t\t\t\t低沉: -25,\n\t\t\t\t\t标准: 0,\n\t\t\t\t\t高亢: 25,\n\t\t\t\t\t很高亢: 50,\n\t\t\t\t};\n\t\t\t\tthis.styleList = {\n\t\t\t\t\t通用风格: 'general',\n\t\t\t\t\t智能助手: 'assistant',\n\t\t\t\t\t聊天对话: 'chat',\n\t\t\t\t\t客服专业: 'customerservice',\n\t\t\t\t\t新闻播报: 'newscast',\n\t\t\t\t\t亲切温暖: 'affectionate',\n\t\t\t\t\t平静舒缓: 'calm',\n\t\t\t\t\t愉快欢乐: 'cheerful',\n\t\t\t\t\t温和柔美: 'gentle',\n\t\t\t\t\t抒情诗意: 'lyrical',\n\t\t\t\t\t严肃正式: 'serious',\n\t\t\t\t};\n\t\t\t\tthis.settings = ref({\n\t\t\t\t\tspeed: '1.0',\n\t\t\t\t\tvoice: 'zh-CN-XiaoxiaoNeural',\n\t\t\t\t\tpitch: 0,\n\t\t\t\t\tstyles: 'general',\n\t\t\t\t});\n\t\t\t\tconst settingsAudio = localStorage.getItem('settings-audio');\n\t\t\t\tif (settingsAudio) {\n\t\t\t\t\tthis.settings.value = JSON.parse(settingsAudio);\n\t\t\t\t}\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.addParagraphClickListeners();\n\t\t\t\t\tthis.addScrollDetection();\n\n\t\t\t\t\t// 检查是否有自动播放参数\n\t\t\t\t\tthis.checkAutoPlay();\n\n\t\t\t\t\twatch(\n\t\t\t\t\t\tthis.settings,\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\t// 每次修改设置都重新生成音频队列,优选从正在播放的段落开始生成\n\t\t\t\t\t\t\tif (this.isPlaying.value || this.isPaused.value) {\n\t\t\t\t\t\t\t\tconsole.log('配置已修改,暂停播放并重新生成音频');\n\n\t\t\t\t\t\t\t\t// 标记配置修改状态\n\t\t\t\t\t\t\t\tthis.isConfigChanging.value = true;\n\t\t\t\t\t\t\t\tthis.shouldResumeAfterConfig.value = this.isPlaying.value; // 如果正在播放,标记需要恢复\n\n\t\t\t\t\t\t\t\t// 暂停当前播放\n\t\t\t\t\t\t\t\tif (this.isPlaying.value) {\n\t\t\t\t\t\t\t\t\tthis.pausePlay();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// 等待当前段落音频生成完成后重新开始播放\n\t\t\t\t\t\t\t\tawait this.handleConfigChangeWithResume();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// 如果没有开始播放,则忽略\n\t\t\t\t\t\t\t\tconsole.log('设置已修改,但未开始播放,忽略重新生成');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlocalStorage.setItem('settings-audio', JSON.stringify(this.settings.value));\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ deep: true },\n\t\t\t\t\t);\n\t\t\t\t}, 100);\n\t\t\t},\n\n\t\t\t// 开始旋转\n\t\t\tstartRotation() {\n\t\t\t\tif (this.rotationInterval.value) return; // 如果已经在旋转,不重复启动\n\n\t\t\t\tthis.rotationInterval.value = setInterval(() => {\n\t\t\t\t\tthis.currentRotation.value += 1; // 每16ms增加1度,约60fps\n\t\t\t\t\tif (this.currentRotation.value >= 360) {\n\t\t\t\t\t\tthis.currentRotation.value = 0; // 重置到0度\n\t\t\t\t\t}\n\t\t\t\t}, 16); // 约60fps\n\t\t\t},\n\n\t\t\t// 停止旋转\n\t\t\tstopRotation() {\n\t\t\t\tif (this.rotationInterval.value) {\n\t\t\t\t\tclearInterval(this.rotationInterval.value);\n\t\t\t\t\tthis.rotationInterval.value = null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// 点击段落开始播放\n\t\t\tplayFromParagraph(index) {\n\t\t\t\tconsole.log(`点击第${index + 1}段,开始播放`);\n\n\t\t\t\t// 如果正在修改配置,则忽略点击\n\t\t\t\tif (this.isConfigChanging.value) {\n\t\t\t\t\tconsole.log('配置修改中,忽略点击播放');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// 设置当前播放位置\n\t\t\t\tthis.currentIndex.value = index;\n\n\t\t\t\t// 重置用户滚动状态,强制滚动到高亮内容\n\t\t\t\tthis.userScrolled.value = false;\n\n\t\t\t\t// 如果正在播放,先停止\n\t\t\t\t// if (this.isPlaying.value || this.isPaused.value) {\n\t\t\t\tthis.stopPlay();\n\t\t\t\t// }\n\n\t\t\t\t// 开始播放\n\t\t\t\tthis.startPlay();\n\t\t\t},\n\n\t\t\t// 初始化音频队列\n\t\t\tinitAudioQueue() {\n\t\t\t\t// console.log('初始化音频队列,data:', data);\n\t\t\t\t// console.log('data.rs:', data.rs);\n\t\t\t\t// console.log('data.rs.content:', data.rs.content);\n\n\t\t\t\tif (!this.chapterContent) {\n\t\t\t\t\tconsole.error('没有找到内容数据');\n\t\t\t\t\tthis.totalParagraphs.value = 0;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst paragraphs = this.chapterContent.split('\\n').filter((v) => v.trim());\n\t\t\t\t// console.log('段落数量:', paragraphs.length);\n\t\t\t\t// console.log('段落内容:', paragraphs);\n\n\t\t\t\tthis.totalParagraphs.value = paragraphs.length + 1; // 加1是因为段落0是章节标题\n\t\t\t\tconsole.log(`initAudioQueue: 内容段落数=${paragraphs.length}, 总段落数=${this.totalParagraphs.value}`);\n\t\t\t\t// console.log('段落内容:', paragraphs);\n\t\t\t\tthis.currentIndex.value = 0;\n\t\t\t\tthis.audioQueue.value = new Array(this.totalParagraphs.value).fill(null); // 预填充null\n\t\t\t\tthis.isPlaying.value = false;\n\t\t\t\tthis.isPaused.value = false;\n\t\t\t\tthis.generatingStatus.value.clear(); // 清空生成状态\n\n\t\t\t\t// 停止当前播放的音频\n\t\t\t\tif (this.currentAudio.value) {\n\t\t\t\t\tthis.currentAudio.value.pause();\n\t\t\t\t\tthis.currentAudio.value = null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// 播放/暂停切换\n\t\t\ttogglePlay() {\n\t\t\t\tif (this.isPlaying.value) {\n\t\t\t\t\tthis.pausePlay();\n\t\t\t\t} else {\n\t\t\t\t\t// 如果当前播放位置是0或者没有播放过,从头开始播放\n\t\t\t\t\tif (this.currentIndex.value === 0 || (!this.isPlaying.value && !this.isPaused.value)) {\n\t\t\t\t\t\tthis.currentIndex.value = 0;\n\t\t\t\t\t}\n\t\t\t\t\tthis.startPlay();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// 从头开始播放\n\t\t\tplayFromStart() {\n\t\t\t\tthis.currentIndex.value = 0;\n\t\t\t\tthis.stopPlay();\n\t\t\t\tthis.startPlay();\n\t\t\t},\n\n\t\t\t// 重置滚动状态\n\t\t\tresetScrollState() {\n\t\t\t\tthis.userScrolled.value = false;\n\t\t\t\tthis.isProgramScrolling.value = false;\n\t\t\t\tconsole.log('滚动状态已重置');\n\n\t\t\t\t// 立即滚动到当前播放的段落\n\t\t\t\tthis.scrollToCurrentParagraph();\n\t\t\t},\n\n\t\t\t// 滚动到当前播放的段落\n\t\t\tscrollToCurrentParagraph() {\n\t\t\t\tconst contentElement = document.getElementById('content');\n\t\t\t\tif (!contentElement) return;\n\n\t\t\t\tconst paragraphs = contentElement.children;\n\t\t\t\tif (paragraphs && paragraphs[this.currentIndex.value]) {\n\t\t\t\t\tconst currentParagraph = paragraphs[this.currentIndex.value];\n\n\t\t\t\t\t// 标记开始程序滚动\n\t\t\t\t\tthis.isProgramScrolling.value = true;\n\n\t\t\t\t\tcurrentParagraph.scrollIntoView({\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'center',\n\t\t\t\t\t});\n\n\t\t\t\t\t// 程序滚动完成后,取消标记\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.isProgramScrolling.value = false;\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// 检查并跳转到下一章节\n\t\t\tasync checkAndGoToNextChapter() {\n\t\t\t\tif (this.gotoNextChapter) {\n\t\t\t\t\tthis.gotoNextChapter(this.nextChapterId);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconsole.log('当前章节播放完成,检查是否有下一章节');\n\n\t\t\t\t// 检查是否有下一章节\n\t\t\t\tif (!this.nextChapterId) {\n\t\t\t\t\tconsole.log('没有下一章节,播放结束');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconsole.log('发现下一章节,准备跳转');\n\n\t\t\t\ttry {\n\t\t\t\t\t// 解析下一章节信息\n\t\t\t\t\tconst nextChapterInfo = this.nextChapterId.split('|||');\n\t\t\t\t\tconst nextChapterTitle = nextChapterInfo[0];\n\t\t\t\t\tconst nextChapterId = nextChapterInfo[1];\n\n\t\t\t\t\tconsole.log(`跳转到下一章节: ${nextChapterTitle} (ID: ${nextChapterId})`);\n\n\t\t\t\t\t// 显示跳转提示\n\t\t\t\t\tthis.showChapterTransitionMessage(nextChapterTitle);\n\n\t\t\t\t\t// 延迟一下让用户看到提示\n\t\t\t\t\t// await new Promise((resolve) => setTimeout(resolve, 2000));\n\n\t\t\t\t\t// 跳转到下一章节,添加自动播放参数\n\t\t\t\t\tconst nextChapterUrl = `./read?id=${this.id}&chapter=${nextChapterId}&autoplay=1`;\n\t\t\t\t\twindow.location.href = nextChapterUrl;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('跳转到下一章节失败:', error);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// 显示章节跳转提示\n\t\t\tshowChapterTransitionMessage(nextChapterTitle) {\n\t\t\t\t// 创建提示元素\n\t\t\t\tconst messageElement = document.createElement('div');\n\t\t\t\tmessageElement.innerHTML = `\n\t\t
\n\t\t\t
🎵 当前章节播放完成
\n\t\t\t
正在跳转到下一章节...
\n\t\t\t
${nextChapterTitle}
\n\t\t
\n\t`;\n\n\t\t\t\tdocument.body.appendChild(messageElement);\n\n\t\t\t\t// 2秒后移除提示\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (messageElement.parentNode) {\n\t\t\t\t\t\tmessageElement.parentNode.removeChild(messageElement);\n\t\t\t\t\t}\n\t\t\t\t}, 2000);\n\t\t\t},\n\n\t\t\t// 开始播放\n\t\t\tasync startPlay() {\n\t\t\t\t// 如果正在修改配置,则忽略播放请求\n\t\t\t\tif (this.isConfigChanging.value) {\n\t\t\t\t\tconsole.log('配置修改中,忽略播放请求');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// 确保音频队列已初始化\n\t\t\t\tif (this.totalParagraphs.value === 0) {\n\t\t\t\t\tconsole.log('初始化音频队列...');\n\t\t\t\t\tconst savedIndex = this.currentIndex.value; // 保存当前索引\n\t\t\t\t\tthis.initAudioQueue();\n\t\t\t\t\tthis.currentIndex.value = savedIndex; // 恢复当前索引\n\t\t\t\t}\n\n\t\t\t\tconsole.log(`startPlay: this.totalParagraphs=${this.totalParagraphs.value}, this.currentIndex=${this.currentIndex.value}`);\n\n\t\t\t\tif (this.totalParagraphs.value === 0) {\n\t\t\t\t\tconsole.log('没有可播放的内容');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.isPlaying.value = true;\n\t\t\t\tthis.isPaused.value = false;\n\n\t\t\t\tif (this.onAudioPlay) {\n\t\t\t\t\tthis.onAudioPlay();\n\t\t\t\t}\n\n\t\t\t\t// 开始旋转\n\t\t\t\tthis.startRotation();\n\n\t\t\t\t// 从当前播放位置开始生成音频\n\t\t\t\tawait this.generateAudiosFromCurrentPosition();\n\n\t\t\t\t// 维护缓存池\n\t\t\t\tthis.maintainAudioCachePool();\n\n\t\t\t\t// 开始播放\n\t\t\t\tthis.playNextAudio();\n\t\t\t},\n\n\t\t\t// 从当前播放位置生成音频\n\t\t\tasync generateAudiosFromCurrentPosition() {\n\t\t\t\tconst currentPos = this.currentIndex.value;\n\t\t\t\tconst promises = [];\n\n\t\t\t\t// 计算需要生成的音频数量\n\t\t\t\tconst count = Math.min(this.cachePoolSize.value, this.totalParagraphs.value - currentPos);\n\n\t\t\t\t// 检查缓冲池是否有音频,如果没有则显示加载状态\n\t\t\t\tconst hasAudioInBuffer = this.audioQueue.value.slice(currentPos, currentPos + count).some((audio) => audio !== null);\n\t\t\t\tif (!hasAudioInBuffer && this.showLoading) {\n\t\t\t\t\tthis.showLoading();\n\t\t\t\t}\n\n\t\t\t\t// 从当前播放位置开始生成音频\n\t\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\t\tconst index = currentPos + i;\n\t\t\t\t\tif (index < this.totalParagraphs.value) {\n\t\t\t\t\t\tpromises.push(this.generateSingleAudio(index));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tawait Promise.all(promises);\n\t\t\t\tconsole.log(`从第${currentPos + 1}段开始生成了${count}个音频`);\n\t\t\t},\n\n\t\t\t// 处理配置修改并恢复播放\n\t\t\tasync handleConfigChangeWithResume() {\n\t\t\t\tconsole.log(`配置修改处理:从第${this.currentIndex.value + 1}段开始重新生成音频`);\n\n\t\t\t\t// 清空当前缓存\n\t\t\t\tthis.clearAudioCache();\n\n\t\t\t\t// 重新初始化队列\n\t\t\t\tthis.audioQueue.value = new Array(this.totalParagraphs.value).fill(null);\n\n\t\t\t\t// 从当前播放位置开始生成音频\n\t\t\t\tawait this.generateAudiosFromCurrentPosition();\n\n\t\t\t\t// 维护缓存池\n\t\t\t\tthis.maintainAudioCachePool();\n\n\t\t\t\t// 标记配置修改完成\n\t\t\t\tthis.isConfigChanging.value = false;\n\n\t\t\t\t// 如果需要恢复播放,则重新开始播放\n\t\t\t\tif (this.shouldResumeAfterConfig.value) {\n\t\t\t\t\tconsole.log('配置修改完成,恢复播放');\n\t\t\t\t\tthis.shouldResumeAfterConfig.value = false;\n\n\t\t\t\t\t// 直接设置播放状态并开始播放,避免重复初始化\n\t\t\t\t\tthis.isPlaying.value = true;\n\t\t\t\t\tthis.isPaused.value = false;\n\t\t\t\t\tthis.playNextAudio();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// 维护音频缓存池:确保始终有指定数量的音频可用\n\t\t\tmaintainAudioCachePool() {\n\t\t\t\tconst currentPos = this.currentIndex.value;\n\t\t\t\tconst maxIndex = this.totalParagraphs.value - 1;\n\n\t\t\t\t// 计算需要预生成的音频索引\n\t\t\t\tconst indicesToGenerate = [];\n\n\t\t\t\tfor (let i = 1; i <= this.cachePoolSize.value; i++) {\n\t\t\t\t\tconst targetIndex = currentPos + i;\n\t\t\t\t\tconst hasAudio = !!this.audioQueue.value[targetIndex];\n\t\t\t\t\tconst isGenerating = this.generatingStatus.value.has(targetIndex);\n\t\t\t\t\tconsole.log(`检查段落${targetIndex}: maxIndex=${maxIndex}, hasAudio=${hasAudio}, isGenerating=${isGenerating}`);\n\n\t\t\t\t\tif (targetIndex <= maxIndex && !hasAudio && !isGenerating) {\n\t\t\t\t\t\tindicesToGenerate.push(targetIndex);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 如果当前是最后一个段落,确保它被生成\n\t\t\t\tif (currentPos === maxIndex && !this.audioQueue.value[currentPos] && !this.generatingStatus.value.has(currentPos)) {\n\t\t\t\t\tconsole.log(`当前是最后一个段落${currentPos},确保它被生成`);\n\t\t\t\t\tindicesToGenerate.push(currentPos);\n\t\t\t\t}\n\n\t\t\t\t// 并发生成需要的音频\n\t\t\t\tindicesToGenerate.forEach((index) => {\n\t\t\t\t\tthis.generateSingleAudio(index);\n\t\t\t\t});\n\n\t\t\t\tconsole.log(`维护缓存池: 当前播放第${currentPos + 1}段,预生成索引:`, indicesToGenerate);\n\t\t\t},\n\n\t\t\t// 暂停播放\n\t\t\tpausePlay() {\n\t\t\t\tthis.isPlaying.value = false;\n\t\t\t\tthis.isPaused.value = true;\n\n\t\t\t\tif (this.onAudioPause) {\n\t\t\t\t\tthis.onAudioPause();\n\t\t\t\t}\n\n\t\t\t\t// 停止旋转\n\t\t\t\tthis.stopRotation();\n\n\t\t\t\tif (this.currentAudio.value) {\n\t\t\t\t\tthis.currentAudio.value.pause();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// 停止播放\n\t\t\tstopPlay() {\n\t\t\t\tthis.isPlaying.value = false;\n\t\t\t\tthis.isPaused.value = false;\n\n\t\t\t\tif (this.onAudioStop) {\n\t\t\t\t\tthis.onAudioStop();\n\t\t\t\t}\n\n\t\t\t\t// 不要重置 currentIndex,保持当前播放位置\n\n\t\t\t\t// 停止旋转\n\t\t\t\tthis.stopRotation();\n\n\t\t\t\tif (this.currentAudio.value) {\n\t\t\t\t\tthis.currentAudio.value.pause();\n\t\t\t\t\tthis.currentAudio.value = null;\n\t\t\t\t}\n\n\t\t\t\t// 清除高亮\n\t\t\t\tthis.clearHighlight();\n\t\t\t},\n\n\t\t\t// 播放下一个音频\n\t\t\tasync playNextAudio() {\n\t\t\t\tconsole.log(`playNextAudio: this.currentIndex=${this.currentIndex.value}, this.totalParagraphs=${this.totalParagraphs.value}, this.isPlaying=${this.isPlaying.value}`);\n\n\t\t\t\tif (!this.isPlaying.value) {\n\t\t\t\t\tconsole.log('播放已停止,退出');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.currentIndex.value >= this.totalParagraphs.value) {\n\t\t\t\t\t// 播放完成\n\t\t\t\t\tconsole.log('所有段落播放完成,准备跳转下一章节');\n\t\t\t\t\tthis.isPlaying.value = false;\n\t\t\t\t\tthis.isPaused.value = false;\n\t\t\t\t\t// 不要重置 currentIndex,保持当前播放位置\n\t\t\t\t\tthis.clearHighlight();\n\n\t\t\t\t\t// 检查是否有下一章节,如果有则自动跳转\n\t\t\t\t\tawait this.checkAndGoToNextChapter();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// 检查当前音频是否已生成\n\t\t\t\tif (!this.audioQueue.value[this.currentIndex.value]) {\n\t\t\t\t\t// 如果缓冲池没有音频,显示加载状态\n\t\t\t\t\tif (this.showLoading) {\n\t\t\t\t\t\tthis.showLoading();\n\t\t\t\t\t}\n\n\t\t\t\t\t// 如果当前音频未生成,先生成它\n\t\t\t\t\tawait this.generateSingleAudio(this.currentIndex.value);\n\t\t\t\t}\n\n\t\t\t\tconst audioData = this.audioQueue.value[this.currentIndex.value];\n\t\t\t\tif (!audioData) {\n\t\t\t\t\tconsole.error(`第${this.currentIndex.value + 1}段音频生成失败`);\n\n\t\t\t\t\t// 如果是最后一个段落,直接结束播放\n\t\t\t\t\tif (this.currentIndex.value >= this.totalParagraphs.value - 1) {\n\t\t\t\t\t\tconsole.log('最后一个段落音频生成失败,结束播放');\n\t\t\t\t\t\tthis.isPlaying.value = false;\n\t\t\t\t\t\tthis.isPaused.value = false;\n\t\t\t\t\t\tthis.clearHighlight();\n\t\t\t\t\t\tawait this.checkAndGoToNextChapter();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// 否则跳过这个段落\n\t\t\t\t\tthis.currentIndex.value++;\n\t\t\t\t\tthis.playNextAudio();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//判断是否预加载下一章节\n\t\t\t\tif (this.nextChapterId && this.getRemainingParagraphs() <= 3) {\n\t\t\t\t\tthis.preloadNextChapter();\n\t\t\t\t}\n\n\t\t\t\t// 高亮当前段落\n\t\t\t\tthis.highlightCurrentParagraph();\n\n\t\t\t\t// 创建音频对象\n\t\t\t\tthis.currentAudio.value = new Audio(audioData);\n\n\t\t\t\t// 音频播放完成事件\n\t\t\t\tthis.currentAudio.value.onended = () => {\n\t\t\t\t\tif (this.audioPlaySuccess.value) {\n\t\t\t\t\t\tthis.currentIndex.value++;\n\t\t\t\t\t\tconsole.log(`段落播放完成,currentIndex=${this.currentIndex.value}, this.totalParagraphs=${this.totalParagraphs.value}`);\n\n\t\t\t\t\t\t// 维护缓存池:确保始终有3条音频可用\n\t\t\t\t\t\tthis.maintainAudioCachePool();\n\n\t\t\t\t\t\t// 延迟一下让进度条更新,然后检查是否播放完成\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.playNextAudio();\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('音频播放失败,不处理onended事件');\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// 音频播放错误事件\n\t\t\t\tthis.currentAudio.value.onerror = (e) => {\n\t\t\t\t\tif (this.onAudioError) {\n\t\t\t\t\t\tthis.onAudioError(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tconsole.error('音频播放失败:', this.currentIndex.value, e);\n\t\t\t\t\tthis.audioPlaySuccess.value = false;\n\t\t\t\t\treturn;\n\n\t\t\t\t\t// 如果是最后一个段落播放失败,直接结束播放\n\t\t\t\t\tif (this.currentIndex.value >= this.totalParagraphs.value - 1) {\n\t\t\t\t\t\tconsole.log('最后一个段落播放失败,结束播放');\n\t\t\t\t\t\tthis.isPlaying.value = false;\n\t\t\t\t\t\tthis.isPaused.value = false;\n\t\t\t\t\t\tthis.clearHighlight();\n\t\t\t\t\t\tthis.checkAndGoToNextChapter();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// 否则让playNextAudio处理\n\t\t\t\t\tthis.playNextAudio();\n\t\t\t\t};\n\n\t\t\t\t// 开始播放\n\t\t\t\tthis.audioPlaySuccess.value = true; // 设置播放成功标志\n\t\t\t\tthis.currentAudio.value\n\t\t\t\t\t.play()\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t// 音频开始播放成功,隐藏加载状态\n\t\t\t\t\t\tif (this.hideLoading) {\n\t\t\t\t\t\t\tthis.hideLoading();\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tconsole.error('音频播放失败:', error);\n\t\t\t\t\t\tthis.audioPlaySuccess.value = false;\n\n\t\t\t\t\t\t// 播放失败时也要隐藏加载状态\n\t\t\t\t\t\tif (this.hideLoading) {\n\t\t\t\t\t\t\tthis.hideLoading();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// 如果是最后一个段落播放失败,直接结束播放\n\t\t\t\t\t\tif (this.currentIndex.value >= this.totalParagraphs.value - 1) {\n\t\t\t\t\t\t\tconsole.log('最后一个段落播放失败,结束播放');\n\t\t\t\t\t\t\tthis.isPlaying.value = false;\n\t\t\t\t\t\t\tthis.isPaused.value = false;\n\t\t\t\t\t\t\tthis.clearHighlight();\n\t\t\t\t\t\t\tthis.checkAndGoToNextChapter();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// 否则让playNextAudio处理\n\t\t\t\t\t\tthis.currentIndex.value++;\n\t\t\t\t\t\tthis.playNextAudio();\n\t\t\t\t\t});\n\t\t\t},\n\n\t\t\t// 生成单个音频(带缓存和重试)\n\t\t\tasync generateSingleAudio(index) {\n\t\t\t\tconst cacheKey = `${this.id}-${this.chapterId}-${index}-${this.settings.value.speed}-${this.settings.value.voice}-${this.settings.value.pitch}-${this.settings.value.styles}`;\n\n\t\t\t\t// 检查缓存\n\t\t\t\tif (this.audioCache.value.has(cacheKey)) {\n\t\t\t\t\tthis.audioQueue.value[index] = this.audioCache.value.get(cacheKey);\n\t\t\t\t\treturn this.audioCache.value.get(cacheKey);\n\t\t\t\t}\n\n\t\t\t\t// 检查是否正在生成\n\t\t\t\tif (this.generatingStatus.value.has(index)) {\n\t\t\t\t\t// 等待正在生成的音频完成\n\t\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\t\tconst checkStatus = () => {\n\t\t\t\t\t\t\tif (this.audioQueue.value[index]) {\n\t\t\t\t\t\t\t\tresolve(this.audioQueue.value[index]);\n\t\t\t\t\t\t\t} else if (!this.generatingStatus.value.has(index)) {\n\t\t\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsetTimeout(checkStatus, 100);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcheckStatus();\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// 标记为正在生成\n\t\t\t\tthis.generatingStatus.value.set(index, true);\n\n\t\t\t\tthis.retryCount = 0;\n\t\t\t\twhile (this.retryCount < this.maxRetries) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst ret = await axios({\n\t\t\t\t\t\t\turl: `${this.api}/ct-book/api/book/getAudio`,\n\t\t\t\t\t\t\tmethod: 'get',\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\tid: this.id,\n\t\t\t\t\t\t\t\tchapter: this.chapterId,\n\t\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\t\tspeed: this.settings.value.speed,\n\t\t\t\t\t\t\t\tvoice: this.settings.value.voice,\n\t\t\t\t\t\t\t\tpitch: this.settings.value.pitch,\n\t\t\t\t\t\t\t\tstyle: this.settings.value.styles,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tresponseType: 'blob', // 重要:设置为blob类型来接收音频流\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// 创建音频URL\n\t\t\t\t\t\tconst audioUrl = URL.createObjectURL(ret.data);\n\n\t\t\t\t\t\t// 缓存音频URL\n\t\t\t\t\t\tthis.audioCache.value.set(cacheKey, audioUrl);\n\t\t\t\t\t\tthis.audioQueue.value[index] = audioUrl;\n\t\t\t\t\t\tthis.generatingStatus.value.delete(index);\n\t\t\t\t\t\treturn audioUrl;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.retryCount++;\n\t\t\t\t\t\tconsole.error(`生成第${index + 1}段音频失败 (重试 ${this.retryCount}/${this.maxRetries}):`, error);\n\n\t\t\t\t\t\tif (this.retryCount >= this.maxRetries) {\n\t\t\t\t\t\t\tconsole.error(`第${index + 1}段音频生成最终失败`);\n\t\t\t\t\t\t\tthis.audioQueue.value[index] = null;\n\t\t\t\t\t\t\tthis.generatingStatus.value.delete(index);\n\t\t\t\t\t\t\treturn null; // 占位符\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// 等待一段时间后重试\n\t\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 1000 * this.retryCount));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.generatingStatus.value.delete(index);\n\t\t\t\treturn null;\n\t\t\t},\n\n\t\t\t// 高亮当前段落\n\t\t\thighlightCurrentParagraph() {\n\t\t\t\tthis.clearHighlight();\n\n\t\t\t\tlet currentElement = null;\n\n\t\t\t\tif (this.currentIndex.value === 0) {\n\t\t\t\t\t// 段落0:高亮章节标题\n\t\t\t\t\tcurrentElement = document.querySelector('.chapter-title');\n\t\t\t\t} else {\n\t\t\t\t\t// 段落1及以后:高亮内容段落\n\t\t\t\t\tconst contentElement = document.getElementById('content');\n\t\t\t\t\tif (!contentElement) return;\n\n\t\t\t\t\tconst paragraphs = contentElement.children;\n\t\t\t\t\tconst paragraphIndex = this.currentIndex.value - 1; // 内容段落索引需要减1\n\n\t\t\t\t\tif (paragraphs && paragraphs[paragraphIndex]) {\n\t\t\t\t\t\tcurrentElement = paragraphs[paragraphIndex];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!currentElement) return;\n\n\t\t\t\t// 保存原始样式\n\t\t\t\tconst originalStyle = {\n\t\t\t\t\tbackgroundColor: currentElement.style.backgroundColor,\n\t\t\t\t\tborderLeft: currentElement.style.borderLeft,\n\t\t\t\t\tpaddingLeft: currentElement.style.paddingLeft,\n\t\t\t\t\tcolor: currentElement.style.color,\n\t\t\t\t\tfontSize: currentElement.style.fontSize,\n\t\t\t\t};\n\t\t\t\tthis.originalStyles.value.set(this.currentIndex.value, originalStyle);\n\n\t\t\t\t// 设置高亮样式\n\t\t\t\tcurrentElement.style.backgroundColor = '#fff3cd';\n\t\t\t\tcurrentElement.style.borderLeft = '3px solid #ffc107';\n\t\t\t\tcurrentElement.style.paddingLeft = '10px';\n\t\t\t\tcurrentElement.style.color = 'black';\n\n\t\t\t\t// 智能滚动:只有在用户没有手动滚动时才自动滚动\n\t\t\t\tif (!this.userScrolled.value) {\n\t\t\t\t\t// 标记开始程序滚动\n\t\t\t\t\tthis.isProgramScrolling.value = true;\n\n\t\t\t\t\tcurrentElement.scrollIntoView({\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'center',\n\t\t\t\t\t});\n\n\t\t\t\t\t// 程序滚动完成后,取消标记\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.isProgramScrolling.value = false;\n\t\t\t\t\t}, 1000); // 给足够的时间让滚动完成\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// 清除高亮\n\t\t\tclearHighlight() {\n\t\t\t\t// 清除章节标题高亮(段落0)\n\t\t\t\tif (this.originalStyles.value.has(0)) {\n\t\t\t\t\tconst titleElement = document.querySelector('.font-30.mt-20.text-center.font-b');\n\t\t\t\t\tif (titleElement) {\n\t\t\t\t\t\tconst originalStyle = this.originalStyles.value.get(0);\n\t\t\t\t\t\ttitleElement.style.backgroundColor = originalStyle.backgroundColor || '';\n\t\t\t\t\t\ttitleElement.style.borderLeft = originalStyle.borderLeft || '';\n\t\t\t\t\t\ttitleElement.style.paddingLeft = originalStyle.paddingLeft || '';\n\t\t\t\t\t\ttitleElement.style.color = originalStyle.color || '';\n\t\t\t\t\t\ttitleElement.style.fontSize = originalStyle.fontSize || '';\n\t\t\t\t\t\tthis.originalStyles.value.delete(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 清除内容段落高亮(段落1及以后)\n\t\t\t\tconst contentElement = document.getElementById('content');\n\t\t\t\tif (!contentElement) return;\n\n\t\t\t\tconst paragraphs = contentElement.children;\n\t\t\t\tfor (let i = 0; i < paragraphs.length; i++) {\n\t\t\t\t\tconst paragraph = paragraphs[i];\n\t\t\t\t\tconst styleIndex = i + 1; // 内容段落索引需要加1\n\n\t\t\t\t\t// 检查是否有保存的原始样式\n\t\t\t\t\tif (this.originalStyles.value.has(styleIndex)) {\n\t\t\t\t\t\tconst originalStyle = this.originalStyles.value.get(styleIndex);\n\n\t\t\t\t\t\t// 还原原始样式\n\t\t\t\t\t\tparagraph.style.backgroundColor = originalStyle.backgroundColor || '';\n\t\t\t\t\t\tparagraph.style.borderLeft = originalStyle.borderLeft || '';\n\t\t\t\t\t\tparagraph.style.paddingLeft = originalStyle.paddingLeft || '';\n\t\t\t\t\t\tparagraph.style.color = originalStyle.color || '';\n\t\t\t\t\t\tparagraph.style.fontSize = originalStyle.fontSize || '';\n\n\t\t\t\t\t\t// 从保存的样式中移除\n\t\t\t\t\t\tthis.originalStyles.value.delete(styleIndex);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// 如果没有保存的样式,则清除高亮样式\n\t\t\t\t\t\tparagraph.style.backgroundColor = '';\n\t\t\t\t\t\tparagraph.style.borderLeft = '';\n\t\t\t\t\t\tparagraph.style.paddingLeft = '';\n\t\t\t\t\t\tparagraph.style.color = '';\n\t\t\t\t\t\tparagraph.style.fontSize = '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// 清理音频缓存\n\t\t\tclearAudioCache() {\n\t\t\t\t// 释放所有音频URL\n\t\t\t\tthis.audioCache.value.forEach((audioUrl) => {\n\t\t\t\t\tif (audioUrl && audioUrl.startsWith('blob:')) {\n\t\t\t\t\t\tURL.revokeObjectURL(audioUrl);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.audioCache.value.clear();\n\t\t\t\tthis.generatingStatus.value.clear();\n\t\t\t\tthis.originalStyles.value.clear(); // 清理原始样式\n\t\t\t},\n\n\t\t\t// 添加滚动检测\n\t\t\taddScrollDetection() {\n\t\t\t\t// 监听滚动事件\n\t\t\t\twindow.addEventListener('scroll', () => {\n\t\t\t\t\t// 如果正在程序滚动,忽略此次滚动事件\n\t\t\t\t\tif (this.isProgramScrolling.value) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// 清除之前的定时器\n\t\t\t\t\tif (this.scrollTimeout.value) {\n\t\t\t\t\t\tclearTimeout(this.scrollTimeout.value);\n\t\t\t\t\t}\n\n\t\t\t\t\t// 设置新的定时器,延迟检测用户滚动\n\t\t\t\t\tthis.scrollTimeout.value = setTimeout(() => {\n\t\t\t\t\t\t// 再次检查是否在程序滚动中\n\t\t\t\t\t\tif (!this.isProgramScrolling.value) {\n\t\t\t\t\t\t\tthis.userScrolled.value = true;\n\t\t\t\t\t\t\tconsole.log('检测到用户手动滚动,停止自动滚动');\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 100); // 增加延迟时间到300ms\n\t\t\t\t});\n\n\t\t\t\tconsole.log('已添加滚动检测');\n\t\t\t},\n\n\t\t\t// 添加段落点击事件监听\n\t\t\taddParagraphClickListeners() {\n\t\t\t\t// 为章节标题添加点击事件(段落0)\n\t\t\t\tconst titleElement = document.querySelector('.chapter-title');\n\t\t\t\tif (titleElement) {\n\t\t\t\t\ttitleElement.addEventListener('click', () => {\n\t\t\t\t\t\tthis.playFromParagraph(0);\n\t\t\t\t\t});\n\t\t\t\t\ttitleElement.style.cursor = 'pointer';\n\t\t\t\t\ttitleElement.title = '点击播放章节标题';\n\t\t\t\t}\n\n\t\t\t\t// 为内容段落添加点击事件(段落1及以后)\n\t\t\t\tconst contentElement = document.getElementById('content');\n\t\t\t\tif (!contentElement) return;\n\n\t\t\t\tconst paragraphs = contentElement.children;\n\t\t\t\tfor (let i = 0; i < paragraphs.length; i++) {\n\t\t\t\t\tlet paragraph = paragraphs[i];\n\t\t\t\t\tconst audioIcon = paragraph.querySelector('.audio-icon');\n\t\t\t\t\tconst audioIndex = i + 1; // 内容段落索引需要加1,因为段落0是章节标题\n\t\t\t\t\tif (audioIcon) paragraph = audioIcon;\n\n\t\t\t\t\t// 添加点击事件\n\t\t\t\t\tparagraph.addEventListener('click', (e) => {\n\t\t\t\t\t\tconsole.log('clickParagraphToPlay', this.clickParagraphToPlay.value);\n\t\t\t\t\t\tif (this.clickParagraphToPlay.value) {\n\t\t\t\t\t\t\tlet is;\n\t\t\t\t\t\t\tif (this.onClickParagraph) {\n\t\t\t\t\t\t\t\tis = this.onClickParagraph(audioIndex);\n\t\t\t\t\t\t\t\tif (is === false) return;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.playFromParagraph(audioIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\n\t\t\t\t\t// 添加鼠标悬停效果\n\t\t\t\t\tparagraph.style.cursor = 'pointer';\n\t\t\t\t\tparagraph.title = `点击播放第${audioIndex + 1}段`;\n\t\t\t\t}\n\n\t\t\t\tconsole.log(`已为章节标题和${paragraphs.length}个内容段落添加点击事件`);\n\t\t\t},\n\n\t\t\t// 检查自动播放\n\t\t\tcheckAutoPlay() {\n\t\t\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\t\t\tconst autoplay = urlParams.get('autoplay');\n\n\t\t\t\tif (autoplay === '1') {\n\t\t\t\t\tconsole.log('检测到自动播放参数,准备开始播放');\n\n\t\t\t\t\t// 延迟一下确保页面完全加载\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.startPlay();\n\t\t\t\t\t}, 500);\n\n\t\t\t\t\t// 移除URL中的autoplay参数,避免刷新时重复播放\n\t\t\t\t\tconst newUrl = new URL(window.location);\n\t\t\t\t\tnewUrl.searchParams.delete('autoplay');\n\t\t\t\t\twindow.history.replaceState({}, '', newUrl);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t//获取剩余段落数量\n\t\t\tgetRemainingParagraphs() {\n\t\t\t\treturn this.totalParagraphs.value - this.currentIndex.value; // 剩余段落 = 总段落数 - 当前索引\n\t\t\t},\n\n\t\t\t//预加载下一章节\n\t\t\tpreloadNextChapter() {\n\t\t\t\t//已经预加载过了\n\t\t\t\tif (document.querySelector('iframe')) return;\n\n\t\t\t\tconst nextChapterId = this.nextChapterId.split('|||')[1];\n\t\t\t\tconst nextChapterUrl = `./read?id=${this.id}&chapter=${nextChapterId}`;\n\t\t\t\tconst iframe = document.createElement('iframe');\n\t\t\t\tiframe.src = nextChapterUrl;\n\t\t\t\tiframe.style.display = 'none';\n\t\t\t\tdocument.body.appendChild(iframe);\n\t\t\t},\n\n\t\t\t// 组件卸载时清理\n\t\t\tunload() {\n\t\t\t\tif (this.currentAudio.value) {\n\t\t\t\t\tthis.currentAudio.value.pause();\n\t\t\t\t\tthis.currentAudio.value = null;\n\t\t\t\t}\n\t\t\t\tthis.clearHighlight();\n\t\t\t\tthis.clearAudioCache();\n\n\t\t\t\t// 停止旋转\n\t\t\t\tthis.stopRotation();\n\n\t\t\t\t// 清理滚动检测定时器\n\t\t\t\tif (this.scrollTimeout.value) {\n\t\t\t\t\tclearTimeout(this.scrollTimeout.value);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n}\n","utils":{}};