▶️事件
在你了解完如何创建对话之后,我们现在来学习事件。这些事件可以改变你的游戏世界。这可以是任何事情,从修改玩家的背包到放置方块。 在本教程中,我们将为玩家提供物品并使用事件将他传送到不同的位置。
要求
你必须已完成上一节“对话”内容
下载教程预设
如果您已经使用了上一个教程步骤的配置,请不要执行此操作。
在聊天框中输入以下命令下载本节教程的预设内容:
/bq download BetonQuest/Quest-Tutorials main QuestPackages /Basics/Conversations/1-DirectoryStructure /tutorialQuest
您现在可以在此位置找到本教程所需的所有文件:
"你的服务器文件存放位置/plugins/BetonQuest/QuestPackages/tutorialQuest"
1.为第一个事件创建文件结构
在“tutorialQuest”的文件夹里,新建一个名为"events.yml"的文件,
以下是你现在的文件结构:QuestPackage
📁tutorialQuest
📂package.yml
📂events.yml
📁conversations
📂jack.yml
现在,我们的文件结构已准备就绪,可以开始编写事件了!
2.定义你的第一个事件
打开我们已创建的events.yml
,并添加以下内容:
events:
giveFoodToPlayer: "give steak:16"
那么我们在这里看到了什么呢?
giveFoodToPlayer
是事件的名称。您可以随便起一个名字。但是,建议以它的作用命名它。这会让你更方便的编写你的任务。事件说明:
give
指令中的第一个值永远都是事件类型。steak:16
这是给定事件的一个选项。它定义了您要提供的物品以及由冒号隔开的数量。
在我们测试事件是否在游戏中起作用之前,我们必须创建该物品steak
,因为BetonQuest不知道steak
是什么。
3. 在物品部分中创建一个物品
对于某些事件类型,例如你需要在部分中指定物品。它包含您要在任务中创建/使用的所有物品的定义。我们将在“package.yml”文件中创建项目部分。giveitems
npcs:
'1': "Jack"
items:
steak: "COOKED_BEEF"
现在一个名为steak
的物品可以在整个任务中被使用。
4. 将事件整合到对话中
让我们在对话中执行事件。
与前面的示例相比,第9、10、13、14行,为新增部分。
conersations:
Jack:
quester: "Jack"
first: "firstGreeting"
NPC_options:
#...
foodAnswer:
text: "Your welcome! Take it... &7*gives food*"
events: "giveFoodToPlayer"
pointer: "thankYou"
player_options:
#...
thankYou:
text: "Oh that smells really good!"
第6、12行
#...
:为了方便你的阅读与学习,从现在开始,本教程将只显示示例的相关部分。第9行
events
:事件的参数必须包含一个或多个事件名称。当向玩家显示相应的选项时,将执行这些事件。 此参数可用于玩家和 NPC 的选项。
5. 测试你的第一个游戏事件
你还可以使用命令运行事件。
执行此操作的最简单方法是执行命令:
在服务器上输入:/bq event NAME tutorialQuest.giveFoodToPlayer
如果你按照教程设置无误,此命令会给你指定数量的牛排!
/bq event
告诉BetonQuest要执行一些事件
NAME
玩家名
tutorialQuest
QuestPackage的名字。在不同的package中可能具有相同名称的事件。
giveFoodToPlayer
要执行的事件的名称。不要忘记用一个点(.)将它与package分开:tutorialQuest.giveFoodToPlayer
你也可以直接从控制台执行命令(开头不带斜杠“/”)。
6.新建事件文件夹
现在,我们要创建一个游览市长城市的事件。同时,我们将了解传送和文件夹事件。
打开“events.yml”文件并添加以下内容的3-7行:
events:
giveFoodToPlayer: "give steak:16"
townTour: "folder tpLocation1,tpLocation2,tpLocation3,tpBlacksmith delay:2 period:5"
tpLocation1: "teleport 100;70;100;world"
tpLocation2: "teleport 200;73;200;world"
tpLocation3: "teleport 300;71;300;world"
tpBlacksmith: "teleport 50;70;50;world"
第4-7行:根据你的世界调整传送的位置。它必须采用统一的位置格式
如你所见,有一些新的事件类型。events事件合集里面包含了多个事件。一旦触发,它只是执行里面的事件。每个事件类型都记录在事件列表中,请阅读有关events的更多信息以及上方的传送事件。folderteleport
执行townTour
事件时每五秒钟会把你传送到一个新的位置,直到我们到达最终目的地——铁匠。evernt事件合集在tpBlacksmith
事件执行完后完成。
现在,我们要把evernt事件合集添加到 Jack 的对话当中。
与前面的与前面的示例相比,第11-18、23-29行,为新增部分。
conversations:
Jack:
quester: "Jack"
first: "firstGreeting"
NPC_options:
#...
foodAnswer:
text: "You're welcome! Take it... &7*gives food*"
events: "giveFoodToPlayer"
pointer: "thankYou"
townTour:
text: "Yeah that's true. You know what also smells good? The fresh air in my town! Would you like to take a little tour?"
pointer: "enoughTime,noTimeForThat"
startTheTour:
text: "Great! It is a honor for me to guide you through the town."
events: "townTour"
noProblem:
text: "That's fine! Maybe you have time another day... Just talk to me again. See you!"
player_options:
#...
thankYou:
text: "Oh that smells really good!"
pointer: "townTour"
enoughTime:
text: "Yes of course! Show me everything."
pointer: "startTheTour"
noTimeForThat:
text: "Sorry but I don't have time now..."
pointer: "noProblem"
第13行
pointer
:玩家玩家再次有了选择。第16行
events
:是我们刚创建新事件的startTheTour
名称。当显示NPC该选项时,它就会被触发。第23行
pointer
:它扩展了现有的对话。
以上的修改可以让玩家选择是否要进行城镇游览。
现在再次与NPC交谈来开始城镇游览。
总结
非常好!你已经了解了什么是事件以及如何创建它们。现在,你可以给玩家一些食物,甚至可以传送他穿过整个城镇!可以在事件列表中找到更多事件。接下来,您将学习如何使用目标向玩家分配任务。
最后更新于