extends NpcScript # func OnStart(): var questState : int = GetQuest(ProgressCommons.Quest.TUTORIAL) if questState < ProgressCommons.TUTORIAL.ELANORE_DONE: OnSendToKaelForRecovery() elif questState < ProgressCommons.TUTORIAL.KAEL_DONE: OnSendToKael() elif questState < ProgressCommons.TUTORIAL.EKINU_DONE: OnKaelReport() else: OnComplete() # func OnSendToKaelForRecovery(): Mes("你已经醒了?") LookAtNpc("Kael") Mes("先去找凯尔。他负责确认你能不能上路,也会给你说明为什么必须选择一只初始宠物。") ResetCamera() func OnSendToKael(): Mes("你看见那些沙虫了吗?") Mes("恶心,但不能忽视。听老人说,它们以前没这么大,也没这么多。") Mes("仙人掌农户受影响最大。沙虫啃坏作物,仙人掌怪又被 卡奥雷 侵蚀,再拖下去城里的药材和食物都会出问题。") LookAtNpc("Kael") Mes("看守凯尔在东边的仙人掌田附近。") ResetCamera() Mes("如果你想证明自己不是巡逻队捡回来的麻烦,就去帮他清理田地。") # Kael's report func OnKaelReport(): Mes("凯尔那边处理完了?") Choice("处理完了。凯尔说我能帮你们的远征。", OnExpedition) func OnExpedition(): Mes("嗯,他判断得没错。") Mes("我们确实还缺一个能应付突发战斗的人。城墙不能抽走太多守卫,你这种外来帮手反而合适。") Mes("你要往南走,去沙漠风暴矿洞。名字不是吓唬人的,那片谷地风向混乱,沙会把路和怪物一起藏起来。") Choice("为什么要去那里?", OnWhyExpedition) Choice("我具体要做什么?", OnJobExplanation) func OnWhyExpedition(): Mes("那片矿洞以前盛产铁矿,整片区域又算红女王的私产,所以王宫一直惦记着它。") Mes("后来沙暴加重,矿工不是被风吞掉,就是被矿道里的怪物袭击,矿洞才被迫废弃。") Mes("现在王宫缺钱,女王又下令不惜代价重开矿洞。") Mes("她当然不会亲自去确认下面有什么危险,受苦的永远是被派去干活的人。") Choice("我具体要做什么?", OnJobExplanation) func OnJobExplanation(): Mes("你的任务是侦察矿洞路线,确认旧矿道里有没有足以杀死矿工的大威胁。") Mes("能避开的就记录,必须清理的就处理。别把每场战斗都当成证明自己的机会。") if GetQuest(ProgressCommons.Quest.TUTORIAL) < ProgressCommons.TUTORIAL.EKINU_DONE: var shortSwordID : int = DB.GetCellHash("Short Sword") var desertGogglesID : int = DB.GetCellHash("Desert Goggles") Mes("出城前不能让你空手去。") Mes("拿着短剑和沙漠护目镜。风沙会抢走视线,怪物会抢走犹豫的时间。") SetQuest(ProgressCommons.Quest.TUTORIAL, ProgressCommons.TUTORIAL.EKINU_DONE) AddItem(shortSwordID) AddItem(desertGogglesID) AddExp(50) Mes("这些足够让你自保,但不保证你能赢下所有战斗。") Mes("遇到危险就跑。死在沙地里没有荣耀,只会让别人多挖一个坑。") TeachSkill(DB.GetCellHash("Run")) DisplayActions(["gp_run"]) Narrate("按住奔跑键可以冲刺,用来赶路或脱离危险。") Narrate("冲刺会消耗耐力,别在真正需要逃命前把耐力耗空。") Mes("差不多准备好了。") LookAtNpc("Gilgames") Mes("不过出城前先找吉尔伽美什说几句。他守着城门,见过太多新人把简单错误变成遗言。") ResetCamera() Mes("其他守卫已经先出发了。到城外找看守道森,他会告诉你矿洞入口怎么走。") if GetQuest(ProgressCommons.Quest.MINE_EXPLORATION) < ProgressCommons.MINE_EXPLORATION.STARTED: SetQuest(ProgressCommons.Quest.MINE_EXPLORATION, ProgressCommons.MINE_EXPLORATION.STARTED) OnMainChoice() # Main choice loop func OnMainChoice(): if GetQuest(ProgressCommons.Quest.MINE_EXPLORATION) == ProgressCommons.MINE_EXPLORATION.STARTED: Choice("再说一遍我的任务。", OnJobExplanation) Choice("红女王是什么样的人?", OnRedQueen) Choice("遇到危险怎么办?", OnStrangerDanger) Choice("明白了,我出发。", Farewell) # Attack and flee func OnStrangerDanger(): Mes("能先手就先手,不能赢就撤。") Mes("你的宠物不是用来替你送死的,受伤太重就换路线、补给、或者直接回城。") DisplayActions(["gp_target"]) DisplayActions(["gp_interact"]) DisplayActions(["gp_run"]) Narrate("按住奔跑键可以冲刺,也可以在危险时拉开距离。") Narrate("冲刺会消耗耐力,需要时再用。") OnMainChoice() # 红女王 chain func OnRedQueen(): Mes("红女王,正式点叫卡罗琳娜一世,是这座城名义上的统治者。") Mes("她还自称 托诺里 女王,好像城墙外的沙子也会听她命令。") Mes("她说自己继承了古代 白金王朝 的血统。实际情况是,她父亲原本只是个非常聪明的仙人掌农户。") Choice("听起来你很讨厌她。", OnDislikeQueen) Choice("她父亲是农户?", OnRedQueenFather) func OnRedQueenFather(): Mes("是。他让临终的老国王相信自己是私生子。") Mes("老国王没有别的孩子,又确实喜欢他,就把继承权给了他。公平地说,她父亲很聪明,也比现在的女王更懂治理。") Mes("可他死后,女儿只剩下王冠和故事。没人真心喜欢她,所以她更需要血统传说来撑住面子。") Choice("听起来你很讨厌她。", OnDislikeQueen) func OnDislikeQueen(): Mes("讨厌这个词太轻了。") Mes("她冷漠、自私,只关心王宫花园和自己的脸面。") Mes("别到处说是我讲的。巡逻队不怕风沙,但没人想因为几句真话被王宫找麻烦。") Mes("她关心那些花,胜过关心被派去矿洞送命的人。") Choice("那我们最好先做正事。", OnMainChoice) # Expedition started func Farewell(): if randi() % 2: Chat("保持警觉。") else: Chat("完整地回来。") func OnComplete(): var questState : int = GetQuest(ProgressCommons.Quest.MINE_EXPLORATION) if questState == ProgressCommons.MINE_EXPLORATION.STARTED: Mes("准备出发时,去城外找看守道森。") else: Mes("你很幸运,在哥布林发现你之前先被我们捡到。看到你恢复得不错,我也放心些。") OnMainChoice()