• 欢迎来到Minecraft插件百科!
  • 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
  • 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289

BetonQuest:修订间差异

来自Minecraft插件百科
跳转到导航 跳转到搜索
无编辑摘要
第115行: 第115行:
Condition(条件), event(事件), objectives(目标)被定义为“指令字符”。它可以匹配包含condition/event/objective的文字。感谢这些字符知道它们需要做什么。如果你想使用这些指令字符,请看下面的参考。它描述了这些指令字符的作用和用法。所有的指令字符都在特定的文件中定义,例如所有条件都在condition.yml.中配置。定义语法:''name: 'the instruction string containing the data'''。单引号大多情况可以省略(建议不省略)。以下,我会更详细地描述使用方法
Condition(条件), event(事件), objectives(目标)被定义为“指令字符”。它可以匹配包含condition/event/objective的文字。感谢这些字符知道它们需要做什么。如果你想使用这些指令字符,请看下面的参考。它描述了这些指令字符的作用和用法。所有的指令字符都在特定的文件中定义,例如所有条件都在condition.yml.中配置。定义语法:''name: 'the instruction string containing the data'''。单引号大多情况可以省略(建议不省略)。以下,我会更详细地描述使用方法
=== 条件 ===
=== 条件 ===
条件是创建高级任务必不可少的工具。它们可以让你控制玩家在对话中可以选择哪些选项,NPC如何回应这些选项或者任务目标完成。所有可能的条件参考如下。
让我们看看玩家有没有一个''beton_start''标签(tags(标签)是一个可以在事件中添加给玩家的,之后我们就可以检查♂它了)你需要写一个像: ''tag beton_start''这样指令字符。这是定义我们需要寻找什么。第一个单词是条件类型。它说明了这个条件需要检查一个标签。第二个是''beton_test''。它定义了哪个标签是我们想要寻找的。注意,你不能在一个条件中定义多个标签。为了做到它你需要多个条件。现在如果你在对话选项中使用了条件,它将会在玩家拥有这个标签时候出现。但是如果你想在玩家没有这个标签时候显示呢?为了达到这个目的你要在条件前面加一个''!''来达到目的。注意它是在对话设置里添加而不是条件配置。
现在你拥有了一个条件
使用它来检查玩家是否正在做这个任务并且阻止他再做一次。当然,这个标签将会在任务开始之后添加,通过事件
=== 事件 ===
在某些时候你想让一些事情发生。刷新日志,设置标签,给予奖励,这些需要事件来完成。你需要像条件一样通过指令字符和指定名字定义它。你可以在事件参考中找到所有的给事件用的指令字符。在指令字符后面你可以添加条件:使用逗号分隔条件一类的东西,例如:''angry,!quest_started''。这将会让事件在条件达成时触发。
=== 目标 ===
当你在创建任务的时候,任务目标是最主要的。你可以用一个指令字符“objective”来创建一个任务目标。这些可以在objectives.yml文件中定义,在说明文字的后面,你可以为目标添加条件或者事件。条件即限制任务的完成条件(比如需要城镇的入口防卫,在给定的任务地点击杀僵尸),事件会在任务完成时触发(比如给予奖励,或者设置一个标签,当从NPC上获得奖励时标签会激活),你可以在说明位置后面按照这样的格式去定义:“''conditions:条件1,条件2 events:事件1,事件2''”,用逗号去分割,而不是用空格。
目标任务在启动的时候载入,但是除非玩家去激活它们,否则不会消耗资源。这意味着,如果你定义了100个目标任务,有20个玩家一起执行其中一个,另外20个玩家执行另一个,其他的任务没有人去执行,那么仅仅有2个目标任务是激活的,不是100个,也不是40个,这样会更加高效。


== 支持插件 ==
== 支持插件 ==

2016年1月23日 (六) 05:07的版本

BetonQuest
外文名BetonQuest
插件类型Spigot / CraftBukkit
最新版本v1.7.3
兼容服务端1.7.2-1.8.3
前置插件
源地址http://dev.bukkit.org/bukkit-plugins/BetonQuest


本条目已有一定量的内容,但仍需完善

欢迎参与本条目的完善工作

你可以从以下几个方面入手

  • 参阅格式化手册,并对该页面进行相应格式排版工作;
  • 日常检查是否内容有更新版本并更新该页面;
  • 修复该页面中已出现/潜在的问题

BetonQuest是一个高大上的任务插件。它不像传统的将任务变成一个与对话绑定,而是网状结构(即类似Gal的剧情系统)。
你的任务不一定要像"击杀, 带来物品, 获得奖励"这样: 你可以创建一个多条路线的任务,通过与NPC的对话,玩家可以进入不同的路线,获得不同的任务奖励。

特点

  • 你的冒险不止一条路可以走
  • 强大的事件系统:可以在任何地方发生你想的事情
  • 强大的条件系统:你可以限制任何事情的(不)发生
  • 拥有队伍系统,这带来了团队任务
  • 与NPC的对话的多样性
  • 所有的日志记录在一本书中
  • 独立的任务物品背包
  • 可以对物品操作,甚至是书中的文本
  • 可以给玩家增加标签(tag)来储存信息
  • 完善的荣誉系统
  • 位置监听:当玩家进入指定区域会触发事件
  • 每日任务和可重复任务
  • 任务可以分配到不同的包(方便管理)
  • 支持Citizens2
  • MythicMobs, Skript, WorldGuard和Vault的混合(意思就是全部支持)
  • 多语言支持并且非常容易翻译
  • 玩家可以选择自己的语种
  • 可以使用API创建你自己的事件、条件、目标(Developer)
  • 支持SQLite&MySQL数据库
  • 可备份的配置及数据
  • 自动升级

概览

这插件到底怎样运作?我将以一个简单的伐木任务为例来描述。请注意“事件”、“条件”和“目标”之间的区别。
首先,你需要创建一个和NPC的对话。玩家可在对话内的多个选项中进行选择,NPC会根据选项做出不同的反应(例如NPC会在玩家要求工作时告诉他去砍些树) 。同时,在某些地方会有“事件”被触发,增加一个获得木头的“目标”。它将会把该玩家标记为开始任务的人。从现在开始,NPC会在对话中使用不同的选项,例如他会让玩家快点干活。这些选项将会基于“条件”被选择。
当玩家完成“目标”时(例如通过摧毁木头),“事件”将会触发,将这个玩家标为采集木头的人。当玩家返回NPC处并与其对话时,NPC将以“条件”来核对玩家是否真的拥有那块木头。如果是的话,他将触发给予奖励的“事件”。
我们没有创建任何“任务”对象,只是创建了一个能触发“事件”并与“条件”进行核对的对话。“目标”当然也不是“任务”,它只能在玩家得到木头时标记该玩家,不能单独存在。另一方面,该对话可以在之后开始其他任务(例如挖一些矿石),所以“目标”也不是“任务”
不要为举的例子感到失望,这些只是简化后的过程,所以我可以更简单的解释这个系统,其实用BetonQuest可以做到更多
这些对话可以像在Baldur's Gate或是Skyrim一样有多种路线,任务可以有多种方式来结束,也可以有很多不同的影响玩家声誉的结局,就靠你来决定了。
这个插件也包含了一个在书中的日志。你玩过Morrowind吗? 它们差不多一样,我们只是保留了你查看日志的顺序,所以你不必翻好几百页。现在完成任务并不需要显示像“你收集了所有的矿石,现在回到矿工那儿!”这样的信息。反之,它可以更新玩家的日志,加入像这样的新的记录:“我收集了所有的矿石,我需要回到矿工那儿去拿奖励!”。这样会显得真实得多。

安装

  1. 首先您可以安装Citizens插件,你可以在Bukkit找到它.
  2. 不过这不是前置插件,您也可以用方块来做NPC不过那样会减少真实感
  3. 下载BetonQuest插件,将.jar放在您的插件文件夹中并启动服务器.BetonQuest将会生成配置文件.
  4. 如果您想使用MySQL进行储存数据,打开config.yml,填写您的数据库信息.如果不想,留空就好了,插件会使用SQLite来代替.
  5. 如果您不想使用自动更新,在禁用它之前,请重新启动服务器或重新加载插件.
  6. 当您认为完成之后,您可以重新加载插件(/q reload).现在让我们来学习BetonQuests插件的基础知识吧.

指令

/j – 给予一本日志
/backpack – 打开背包
/q – 列出所有可用的管理员指令
/q reload – 重载插件
/q objectives <playerName> [list/add/del] [instruction] –列出/修改玩家目标
/q tags <playerName> [list/add/del] [tag] – 列出/修改玩家的标签
/q points <playerName> [list/add/del] [category] [amount] – 列出/修改玩家在所有阵营的点数
/q journal <playerName> [list/add/del] [package.pointer] [date] - lists
/q event <playerName> <package.eventID> - 为玩家激活一个事件
/q condition <playerName> <package.conditionID> - 显示玩家是否经历过指定的环境
/q item <package.itemID> - 创建一个基于你手中物品的物品
/q config <set/add/read> <path> [value] – 操作配置项
/q purge <playerName> - 删除玩家数据
/q backup – 创建配置文件和数据库的备份
/q create <package>: 创建一个新的包并包含默认任务
/q vector <packname.variable> <newvariable>: 计算第一个位置变量到你的位置并且储存到第二个参数中
/questlang <lang> - 改变玩家的语言(如果由控制台使用就可以改变全局语言)

缩写

  • /j: bj, journal, bjournal, betonjournal, betonquestjournal
  • /backpack:b, bb, bbackpack, betonbackpack, betonquestbackpack
  • /q: bq, bquest, bquests, betonquest, betonquests, quest, quests
    • objective: o, objectives
    • tag: t, tags
    • point: p, points
    • event: e, events
    • condition: c, conditions
    • journal: j, journals
    • item: i, items
    • create: package
  • /questlang: ql

详情

  • /q reload重载所有配置,但是不是所有东西都会被保存。当数据库保存时,不可以修改玩家数据。数据库也是一样,你需要重启/重载服务器才可以保存数据库
  • 标签相关的命令可以让你快速的编辑它 ,'/q tags Beton' 将会列出Beton这个玩家的标签。'/q tags Beton add test'将会添加"test"标签给玩家,并且 '/q tags Beton del test' 会移除它
  • 点数相关的命令可以操纵点数。向一个类别添加点数应该用'/q points Beton add reputation 20' (给"reputation"添加20点)。你也可以使用负数来减去。 删除全部点数使用'/q points Beton del reputation'.
  • 日志相关命令与上面两项相同。添加或删除使用 /q journal Beton add default.wood_started (or del),并且你也可以在结尾加上时间来指定时间,格式为:23.04.2014_16:52。注意要用_来代替空格!名字前必须带上包名,因为命令不属于任何包
  • 目标相关命令可以显示玩家的目标。它也可以直接对不表进行操作。记住要在事件/条件前加上包名!如果你想添加一个在events.yml中有定义的目标,只需要使用事件的相关命令
  • 使在线玩家激活事件可以使用'/q event Beton default.give_emeralds'这将会为玩家Beton从”default”包激活 "give_emeralds"。也有条件相关的指令来操作,例如'/q condition Beton default.has_food'。事件与条件必须在它们的文件中定义,这个命令不支持原版指令。你可以不写包名,之后插件会自动读取default_package它可以在config.yml设置
  • 如果需要创建一个"Nettlebane"任务物品,只需要把它拿在手里之后输入'/q item default.nettlebane'. 你手中的物品就会复制到items.yml 并且以你指定的名称保存(这里是"nettlebane"). 你也可以不输入包名.
  • 你可以在. set 项中自定义命令的参数。.add 可以让你快捷的添加字符到存在的值上. (需要注意的地方: 插件不会识别空格,你可以用“_”这个字符来代替空格。例如objective location,是一段存在的字符串,并且你想给它附加 100;200;300;world;10这个值,你的命令应该是/q config add default.events.loc_obj _100;200;300;world;10). read 可以显示配置的值。

这里的路径就是值的地址。你可以用“.”来表示分支,例如config.language,可以设置语言键的值,同理"bye"这个玩家的配置项路径应该是 default.conversations.innkeeper.player_options.bye.text

  • 你可以使用'/q purge Beton'清除指定玩家的数据. 目前无法使用命令清除整个数据库,但你可以修改数据库的前缀

如果你想要备份你的设置以及数据,需要你的服务器是空的(需要获取所有数据库的数据>所有玩家离线)之后运行'/q backup'这条命令,你将会获得一个包含所有数据的zip压缩文件。

  • 使用'/q create beton' 你可以创建一个名为'beton'的任务,它将会与默认任务相同。
  • /q vector 命令可以让你创建一个由第一个位置变量到你的位置的矢量。结果会储存到"vectors.{第二参数}"

权限

  • betonquest.admin – 允许使用管理员命令(/q ...)且可以创建NPC
  • betonquest.journal – 允许使用/ J指令(默认为玩家)
  • betonquest.backpack –允许使用/backpack 指令(默认为玩家)
  • betonquest.conversation -允许与NPC对话(默认为玩家)betonquest.language -允许改变的语言(默认为玩家)

创建对话

对话是rpg系统的基础,这是开始或者完成任务的主要方法,也可以让游戏体验更加的身临其境.你制作的每一个对话文件都要放在"conversations" 文件夹里.(更多相关信息请看BetonQuest根目录里的"default"文件夹)对话文件必须以.yml为后缀,比如 innkeeper. yml

让我们来脑补一下.然后我们可以尝试去弄清楚如何完成它.在玩家的眼里面看上去是这样的:玩家右击npc(让我们把npc称作小芳玩家称作小五)小芳说出她的初始文本,然后小五可以从中选择,假设有三个选项.小五在聊天栏输入 1(或者2,3),然后小芳继续对话.小五再一次拥有选项去选择之类的.如果小五输入其他例如字母或者较大的数字.小芳会做出她无法理解他的回应.

每一个对话必须设定npc名字(一些对话不可以绑定到任何npc,所以指定它非常重要,即使还没有这个npc),他的初次问候选项,他对玩家未知的回答和最终事件.

注意1:配置文件使用yaml格式.如果你不知道什么是yaml,cnm不会百度么(can u f**k the Google?)?最主要的规则是当你进入更深层的阶层树时你要用两个空格代替标签.如果你想使用单引号(必须半角),你需要确保还有另一个单引号且它们分别处于文本开头及结尾 (例如上面的未知配置项).当写为ture或者false时它依旧需要用'围起来.如果你想用&来做一行的开头,那么你需要在开头结尾加上单引号. 注意2:上文的对话只是一个栗子.它并不是有效的,因为它缺少了很多其他的设置.

条件、事件、目标

Condition(条件), event(事件), objectives(目标)被定义为“指令字符”。它可以匹配包含condition/event/objective的文字。感谢这些字符知道它们需要做什么。如果你想使用这些指令字符,请看下面的参考。它描述了这些指令字符的作用和用法。所有的指令字符都在特定的文件中定义,例如所有条件都在condition.yml.中配置。定义语法:name: 'the instruction string containing the data'。单引号大多情况可以省略(建议不省略)。以下,我会更详细地描述使用方法

条件

条件是创建高级任务必不可少的工具。它们可以让你控制玩家在对话中可以选择哪些选项,NPC如何回应这些选项或者任务目标完成。所有可能的条件参考如下。 让我们看看玩家有没有一个beton_start标签(tags(标签)是一个可以在事件中添加给玩家的,之后我们就可以检查♂它了)你需要写一个像: tag beton_start这样指令字符。这是定义我们需要寻找什么。第一个单词是条件类型。它说明了这个条件需要检查一个标签。第二个是beton_test。它定义了哪个标签是我们想要寻找的。注意,你不能在一个条件中定义多个标签。为了做到它你需要多个条件。现在如果你在对话选项中使用了条件,它将会在玩家拥有这个标签时候出现。但是如果你想在玩家没有这个标签时候显示呢?为了达到这个目的你要在条件前面加一个!来达到目的。注意它是在对话设置里添加而不是条件配置。 现在你拥有了一个条件 使用它来检查玩家是否正在做这个任务并且阻止他再做一次。当然,这个标签将会在任务开始之后添加,通过事件

事件

在某些时候你想让一些事情发生。刷新日志,设置标签,给予奖励,这些需要事件来完成。你需要像条件一样通过指令字符和指定名字定义它。你可以在事件参考中找到所有的给事件用的指令字符。在指令字符后面你可以添加条件:使用逗号分隔条件一类的东西,例如:angry,!quest_started。这将会让事件在条件达成时触发。

目标

当你在创建任务的时候,任务目标是最主要的。你可以用一个指令字符“objective”来创建一个任务目标。这些可以在objectives.yml文件中定义,在说明文字的后面,你可以为目标添加条件或者事件。条件即限制任务的完成条件(比如需要城镇的入口防卫,在给定的任务地点击杀僵尸),事件会在任务完成时触发(比如给予奖励,或者设置一个标签,当从NPC上获得奖励时标签会激活),你可以在说明位置后面按照这样的格式去定义:“conditions:条件1,条件2 events:事件1,事件2”,用逗号去分割,而不是用空格。

目标任务在启动的时候载入,但是除非玩家去激活它们,否则不会消耗资源。这意味着,如果你定义了100个目标任务,有20个玩家一起执行其中一个,另外20个玩家执行另一个,其他的任务没有人去执行,那么仅仅有2个目标任务是激活的,不是100个,也不是40个,这样会更加高效。

支持插件

BetonQuest可以支持其他的插件,使用它们的功能。目前有三个插件: Citizens, Vault and MythicMobs.

Citizens

如果你有这个插件就可以创建NPC 来对话。我非常建议安装这个插件,NPC可以让对话更真实。Citizens也可以让你的NPC击杀的目标。

NPC击杀目标 npckill

NPC击杀目标需要玩家击杀指定ID的NPC。你也可以设置杀多少次NPC。目标名称后面必须是NPC的ID。你可以用amount: 设置数字。
例子: npckill 16 amount:3 events:reward label:citizens

NPC互动目标

玩家必须与指定ID的NPC交互。它也可以关闭动作,这样对话就不会触发了。第一个参数是数字(NPC的ID)第二个是设置项 cancel.
例子: npcinteract 3 cancel conditions:sneak events:steal label:stealing

Vault

安装Vault你可以有权限事件和金钱条件/事件。

权限事件 permission

删除或者增加一个组的权限。第一个参数是add或者remove,这很好理解。第二个是 perm或者group,这个也不难弄清楚。下一个就是你要添加或者删除的字符串。最后你需要指定一个世界。如果世界为空的话,这个修改就会变成全局的。
例子: permission remove group bandit world_nether

金钱事件 money

从玩家的帐户存取款,只有一个参数,就是数量,它可以是负数。
例子: money -100

金钱条件 money

检查玩家的金钱是否足够,也只有一个参数,即需要达到的数值,不能为负
例子: money 500

MythicMobs

你可以设置MythicMobs怪物击杀目标和MythicMobs生成怪物的事件。

MythicMobs怪物击杀目标 mmobkill

完成这个目标需要击杀指定数量的指定怪物。第一个参数必须是怪物的内部名称(在MythicMobs的配置中有)。你可以添加amount:来指定击杀的数量
例子: mmobkill SkeletalKnight amount:2 events:reward label:mythicmobs

MythicMobs怪物生存事件 mspawnmob

在指定的地方生成指定数量的怪。第一个参数应该是位置,格式是100;200;300;world。第二个是MythicMobs的内部名字(在MythicMobs的配置中有)后面跟一个冒号和等级。第三个是数量(必填)
例子: mspawnmob 100;200;300;world SkeletalKnight:1 5

Skript

BetonQuest也可以与Skript联动。为了避免混淆,我会使用插件的名称(Skript的一些事件BetonQuestnt也有。Skript可以让你通过脚本使用BetonQuest的事件,并且也可以用BetonQuest执行脚本。

Skript事件通过 BetonQuest skript 事件触发

这里描述了Skript事件和BetonQuest事件。

  1. Skript 事件 - on [betonquest] event "id" – 这一行可以触发 betonquest 中设定好的代码,并且 id 只能是字符串,且必须与你指定BetonQuest的事件相同。
  2. BetonQuest事件- skript – 这个事件会触发Skript的事件。指令只有一个参数,是事件的ID。必须和Skript中定义的事件相同。

例子: 脚本: on betonquest event "concrete" events.yml:fire_concrete_script: skript concrete

Skript条件

你可以用 player meets [betonquest] condition "id" 语句检查BetonQuest 的条件。Betonquest是配置项,并且 id 是条件名称,在conditions.yml中定义。 例子:脚本: player meets condition "has_ore" conditions.yml: has_ore: item iron_ore:5

Skript事件

你可以用脚本触发BetonQuest事件。Skript的语句是fire [betonquest] event "id" for player例子:脚本: fire event "give_emeralds" for player events.yml:give_emeralds: give emerald:5

WorldGuard

WorldGuard区域目标 region

完成这个目标需要进入指定区域,唯一的参数是区域名称。 例子: region beton events:kill label:trap

WorldGuard区域条件 region

条件会在玩家处于指定区域时成立,唯一的参数是区域名 例子: region beton 分类:娱乐