165 lines
7.5 KiB
GDScript
165 lines
7.5 KiB
GDScript
extends NpcScript
|
|
|
|
#
|
|
func OnStart():
|
|
var questState : int = GetQuest(ProgressCommons.Quest.TUTORIAL)
|
|
match questState:
|
|
ProgressCommons.TUTORIAL.INACTIVE:
|
|
OnFirstMeeting()
|
|
ProgressCommons.TUTORIAL.INTRO_ITEMS_GIVEN:
|
|
OnSendToKaelForCheck()
|
|
ProgressCommons.TUTORIAL.POTION_GIVEN:
|
|
OnSendToKaelForCheck()
|
|
ProgressCommons.TUTORIAL.CLOTHES_GIVEN:
|
|
OnSendToKaelForCheck()
|
|
ProgressCommons.TUTORIAL.UI_EXPLAINED:
|
|
OnSendToKaelForCheck()
|
|
_:
|
|
Mes("你回来了。需要药剂,还是想问些城里的事?")
|
|
OnMainChoice()
|
|
|
|
# First meeting
|
|
func OnFirstMeeting():
|
|
var waterBottleID : int = DB.GetCellHash("Water Bottle")
|
|
var cactusSourCandyID : int = DB.GetCellHash("Cactus Sour Candy")
|
|
|
|
Mes("醒了?欢迎来到图利姆沙。")
|
|
Mes("你差一点就倒在城墙看不见的地方了。巡逻队在沙地边缘发现你时,你已经晒到说不出话。")
|
|
Mes("我是埃拉诺。先喝点水,再吃这块仙人掌酸糖。别急着站太久,你的身体还没完全缓过来。")
|
|
SetQuest(ProgressCommons.Quest.TUTORIAL, ProgressCommons.TUTORIAL.INTRO_ITEMS_GIVEN)
|
|
AddItem(waterBottleID)
|
|
AddItem(cactusSourCandyID)
|
|
OnFeelingChoice()
|
|
|
|
func OnFeelingChoice():
|
|
Choice("我好多了,谢谢。", OnFeelingBetter)
|
|
Choice("还是有点虚弱。", OnFeelingWeak)
|
|
|
|
func OnFeelingWeak():
|
|
var cactusDrinkID : int = DB.GetCellHash("Cactus Drink")
|
|
|
|
Mes("那再拿一杯仙人掌饮料。剩下的就只能靠时间了,亲爱的。")
|
|
SetQuest(ProgressCommons.Quest.TUTORIAL, ProgressCommons.TUTORIAL.POTION_GIVEN)
|
|
AddItem(cactusDrinkID)
|
|
OnFeelingBetter()
|
|
|
|
func OnFeelingBetter():
|
|
Mes("能回答问题就好。关于你为什么会独自出现在沙漠里,凯尔会继续问。")
|
|
Mes("他负责巡逻队的初步确认,也负责给刚恢复的人安排第一只同行宠物。")
|
|
OnSendToKaelForCheck()
|
|
|
|
func OnGiveStarterClothes():
|
|
var cottonShirtID : int = DB.GetCellHash("Cotton Shirt")
|
|
var linenShortsID : int = DB.GetCellHash("Shorts")
|
|
|
|
Mes("不管你从哪里来,能站起来就是好事。图利姆沙需要愿意帮忙的人。")
|
|
Mes("最近沙漠越来越不安稳。东边山里有一群迷信 卡奥雷 的狂热者,袭击旅人,甚至曾经差点冲破城墙。")
|
|
Mes("先把这身破布换掉吧。城里人会看衣服判断你是不是刚从沙地里被捡回来。")
|
|
SetQuest(ProgressCommons.Quest.TUTORIAL, ProgressCommons.TUTORIAL.CLOTHES_GIVEN)
|
|
AddItem(cottonShirtID, 1, "Used")
|
|
AddItem(linenShortsID, 1, "Used")
|
|
OnExplainUI()
|
|
|
|
func OnExplainUI():
|
|
Mes("放你到城里乱跑之前,我先讲几件保命的事。")
|
|
HighlightUI(UICommons.UITarget.STATINDICATOR)
|
|
Narrate("这些是你的关键状态。探索和战斗时要随时留意。")
|
|
HighlightUI(UICommons.UITarget.HEALTHBAR)
|
|
Narrate("生命值代表你还能承受多少伤害。")
|
|
HighlightUI(UICommons.UITarget.MANABAR)
|
|
Narrate("玛纳 支撑技能释放。玛纳 不足时,许多能力无法使用。")
|
|
HighlightUI(UICommons.UITarget.STAMINABAR)
|
|
Narrate("耐力影响奔跑、攻击和体力动作。耗尽后会明显变慢。")
|
|
HighlightUI(UICommons.UITarget.MENUINDICATOR)
|
|
Narrate("菜单可以查看背包、技能、任务、设置等信息。")
|
|
HighlightUI(UICommons.UITarget.ACTION_BAR)
|
|
Narrate("快捷栏可以放常用技能和物品。战斗时每一秒都很重要。")
|
|
HighlightUI(UICommons.UITarget.INVENTORY)
|
|
Narrate("背包窗口可以管理物品、装备、药剂和收集品。")
|
|
HighlightUI(UICommons.UITarget.NONE)
|
|
SetQuest(ProgressCommons.Quest.TUTORIAL, ProgressCommons.TUTORIAL.UI_EXPLAINED)
|
|
Action(OnMainChoice)
|
|
|
|
# Main choice loop
|
|
func HasAllIngredients() -> bool:
|
|
return HasItem(DB.GetCellHash("Maggot Slime"), 6) and HasItem(DB.GetCellHash("Water Bottle")) and HasItem(DB.GetCellHash("Cactus Drink"))
|
|
|
|
func OnMainChoice():
|
|
var sideQuestState : int = GetQuest(ProgressCommons.Quest.ELANORE_POTION)
|
|
if sideQuestState == ProgressCommons.ELANORE_POTION.STARTED and HasAllIngredients():
|
|
Choice("我带来了你要的材料。", OnPotionQuestTurnIn)
|
|
elif sideQuestState == ProgressCommons.ELANORE_POTION.STARTED:
|
|
Choice("药剂材料还差什么?", OnPotionQuestReminder)
|
|
else:
|
|
Choice("有什么我能帮忙的吗?", OnHelpWithPotions)
|
|
Choice("卡奥雷 是什么?", OnExplainKaore)
|
|
Choice("你是谁?", OnExplainSelf)
|
|
if GetQuest(ProgressCommons.Quest.TUTORIAL) >= ProgressCommons.TUTORIAL.ELANORE_DONE:
|
|
Choice("谢谢,我先走了。", Farewell)
|
|
|
|
# Help with potions
|
|
func OnHelpWithPotions():
|
|
Mes("当然。我经常给守卫和居民调制治疗药剂,伤口、脱水和轻度 卡奥雷 侵蚀都能先稳住。")
|
|
Mes("药剂需要材料。你刚恢复,先做点不太危险的收集工作,也能熟悉城外生态。")
|
|
Mes("我需要 6 份沙虫黏液、1 瓶水和 1 杯仙人掌饮料。带回来后,我会给你一瓶仙人掌药剂。")
|
|
SetQuest(ProgressCommons.Quest.ELANORE_POTION, ProgressCommons.ELANORE_POTION.STARTED)
|
|
if GetQuest(ProgressCommons.Quest.TUTORIAL) < ProgressCommons.TUTORIAL.ELANORE_DONE:
|
|
OnSendToKael()
|
|
else:
|
|
OnMainChoice()
|
|
|
|
func OnPotionQuestReminder():
|
|
Mes("还需要 6 份沙虫黏液、1 瓶水和 1 杯仙人掌饮料。收齐后再来找我。")
|
|
OnMainChoice()
|
|
|
|
func OnPotionQuestTurnIn():
|
|
Mes("谢谢你。这些材料够我马上调一批新的治疗药剂。")
|
|
Mes("在城门边帮人,比困在高塔或王宫里讨论规矩有用得多。图利姆沙的领导者真该多看看这里。")
|
|
RemoveItem(DB.GetCellHash("Maggot Slime"), 6)
|
|
RemoveItem(DB.GetCellHash("Water Bottle"))
|
|
RemoveItem(DB.GetCellHash("Cactus Drink"))
|
|
SetQuest(ProgressCommons.Quest.ELANORE_POTION, ProgressCommons.ELANORE_POTION.INACTIVE)
|
|
AddItem(DB.GetCellHash("Cactus Potion"))
|
|
OnMainChoice()
|
|
|
|
# What is 卡奥雷
|
|
func OnExplainKaore():
|
|
Mes("玛纳 是连接生命的能量。卡奥雷 则像腐败的 玛纳,它不滋养生命,只会扭曲、侵蚀,让生物变得狂躁甚至半死不活。")
|
|
LookAtNpc("Nina")
|
|
Mes("如果你想知道更多,去问我的学徒 妮娜。她守着城里的 灵魂石碑,对 玛纳 和 卡奥雷 的解释比我更系统。")
|
|
ResetCamera()
|
|
OnMainChoice()
|
|
|
|
# Who are you
|
|
func OnExplainSelf():
|
|
Mes("我是埃拉诺,图利姆沙和周边土地的 卡维。外人通常把我们称作德鲁伊。")
|
|
Mes("我所属的 卡乌马图阿 传承守护着很古老的知识。不过现在你不用背这些名词。先活下来,再慢慢了解这个世界。")
|
|
OnMainChoice()
|
|
|
|
func Farewell():
|
|
if randi() % 2:
|
|
Chat("出城前检查水和药。")
|
|
else:
|
|
Chat("别一个人硬闯沙暴。")
|
|
|
|
# Tutorial conclusion
|
|
func OnSendToKael():
|
|
Mes("我不能把你留在这里一整天。你需要在城里站稳脚跟。")
|
|
Mes("看守凯尔正负责城墙内侧的巡逻和仙人掌田。如果你想找点正经事做,先去见他。")
|
|
LookAtNpc("Kael")
|
|
Mes("他就在东北边,靠近几棵棕榈树。")
|
|
Mes("沿着这面墙走到拐角,再往上走就能看见他。")
|
|
ResetCamera()
|
|
SetQuest(ProgressCommons.Quest.TUTORIAL, ProgressCommons.TUTORIAL.ELANORE_DONE)
|
|
DisplayActions(["gp_interact", "gp_target"])
|
|
Narrate("靠近 角色 后使用互动键可以交谈,也可以先用目标键选中对象。")
|
|
|
|
func OnSendToKaelForCheck():
|
|
Mes("先去找凯尔。")
|
|
Mes("你的身体能不能撑住外面的风、你醒来前发生了什么、还有初始宠物的选择,都由他来说明。")
|
|
LookAtNpc("Kael")
|
|
Mes("他就在东北边,靠近几棵棕榈树。沿着这面墙走到拐角,再往上走就能看见他。")
|
|
ResetCamera()
|
|
DisplayActions(["gp_interact", "gp_target"])
|
|
Narrate("靠近凯尔后使用互动键交谈。")
|