<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://mineplugin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E6%98%9F%E8%BE%B0</id>
	<title>Minecraft插件百科 - 用户贡献 [zh-cn]</title>
	<link rel="self" type="application/atom+xml" href="https://mineplugin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E6%98%9F%E8%BE%B0"/>
	<link rel="alternate" type="text/html" href="https://mineplugin.org/%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/%E6%98%9F%E8%BE%B0"/>
	<updated>2026-04-25T06:04:49Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://mineplugin.org/index.php?title=BetonQuest&amp;diff=1488</id>
		<title>BetonQuest</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=BetonQuest&amp;diff=1488"/>
		<updated>2015-10-02T16:42:20Z</updated>

		<summary type="html">&lt;p&gt;星辰：​/* 创建对话 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=BetonQuest&lt;br /&gt;
|版本=v1.7.3&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.2-1.8.3&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/betonquest/&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;center&amp;gt;[[文件:BetonQuestLOGO.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{待完善}}&lt;br /&gt;
[[Category:娱乐]] [[Category:角色]]&lt;br /&gt;
BetonQuest是一个高大上的任务插件。它不像传统的将任务变成一个与对话绑定，而是网状结构(即类似Gal的剧情系统)。&amp;lt;br&amp;gt;&lt;br /&gt;
你的任务不一定要像&amp;quot;击杀, 带来物品, 获得奖励&amp;quot;这样: 你可以创建一个多条路线的任务，通过与NPC的对话，玩家可以进入不同的路线，获得不同的任务奖励。&lt;br /&gt;
== 特点 ==&lt;br /&gt;
*你的冒险不止一条路可以走&lt;br /&gt;
*强大的事件系统:可以在任何地方发生你想的事情&lt;br /&gt;
*强大的条件系统:你可以限制任何事情的(不)发生&lt;br /&gt;
*拥有队伍系统，这带来了团队任务&lt;br /&gt;
*与NPC的对话的多样性&lt;br /&gt;
*所有的日志记录在一本书中&lt;br /&gt;
*独立的任务物品背包&lt;br /&gt;
*可以对物品操作，甚至是书中的文本&lt;br /&gt;
*可以给玩家增加标签(tag)来储存信息&lt;br /&gt;
*完善的荣誉系统&lt;br /&gt;
*位置监听:当玩家进入指定区域会触发事件&lt;br /&gt;
*每日任务和可重复任务&lt;br /&gt;
*任务可以分配到不同的包(方便管理)&lt;br /&gt;
*支持Citizens2&lt;br /&gt;
*MythicMobs, Skript, WorldGuard和Vault的混合(意思就是全部支持)&lt;br /&gt;
*多语言支持并且非常容易翻译&lt;br /&gt;
*玩家可以选择自己的语种&lt;br /&gt;
*可以使用API创建你自己的事件、条件、目标(Developer)&lt;br /&gt;
*支持SQLite&amp;amp;MySQL数据库&lt;br /&gt;
*可备份的配置及数据&lt;br /&gt;
*自动升级&lt;br /&gt;
== 概览 ==&lt;br /&gt;
这插件到底怎样运作？我将以一个简单的伐木任务为例来描述。请注意“事件”、“条件”和“目标”之间的区别。&amp;lt;br&amp;gt;&lt;br /&gt;
首先，你需要创建一个和NPC的对话。玩家可在对话内的多个选项中进行选择，NPC会根据选项做出不同的反应（例如NPC会在玩家要求工作时告诉他去砍些树） 。同时，在某些地方会有“事件”被触发，增加一个获得木头的“目标”。它将会把该玩家标记为开始任务的人。从现在开始，NPC会在对话中使用不同的选项，例如他会让玩家快点干活。这些选项将会基于“条件”被选择。&amp;lt;br&amp;gt;&lt;br /&gt;
当玩家完成“目标”时（例如通过摧毁木头），“事件”将会触发，将这个玩家标为采集木头的人。当玩家返回NPC处并与其对话时，NPC将以“条件”来核对玩家是否真的拥有那块木头。如果是的话，他将触发给予奖励的“事件”。&amp;lt;br&amp;gt;&lt;br /&gt;
我们没有创建任何“任务”对象，只是创建了一个能触发“事件”并与“条件”进行核对的对话。“目标”当然也不是“任务”，它只能在玩家得到木头时标记该玩家，不能单独存在。另一方面，该对话可以在之后开始其他任务（例如挖一些矿石），所以“目标”也不是“任务” &amp;lt;br&amp;gt;&lt;br /&gt;
不要为举的例子感到失望，这些只是简化后的过程，所以我可以更简单的解释这个系统，其实用BetonQuest可以做到更多&amp;lt;br&amp;gt;&lt;br /&gt;
这些对话可以像在Baldur&#039;s Gate或是Skyrim一样有多种路线，任务可以有多种方式来结束，也可以有很多不同的影响玩家声誉的结局，就靠你来决定了。&amp;lt;br&amp;gt;&lt;br /&gt;
这个插件也包含了一个在书中的日志。你玩过Morrowind吗? 它们差不多一样，我们只是保留了你查看日志的顺序，所以你不必翻好几百页。现在完成任务并不需要显示像“你收集了所有的矿石，现在回到矿工那儿！”这样的信息。反之，它可以更新玩家的日志，加入像这样的新的记录：“我收集了所有的矿石，我需要回到矿工那儿去拿奖励！”。这样会显得真实得多。&lt;br /&gt;
== 安装 ==&lt;br /&gt;
#首先您可以安装Citizens插件,你可以在[http://dev.bukkit.org/bukkit-plugins/citizens/ Bukkit]找到它.&lt;br /&gt;
#不过这不是前置插件,您也可以用方块来做NPC不过那样会减少真实感&lt;br /&gt;
#下载BetonQuest插件,将.jar放在您的插件文件夹中并启动服务器.BetonQuest将会生成配置文件.&lt;br /&gt;
#如果您想使用MySQL进行储存数据,打开config.yml，填写您的数据库信息.如果不想,留空就好了,插件会使用SQLite来代替.&lt;br /&gt;
#如果您不想使用自动更新,在禁用它之前,请重新启动服务器或重新加载插件.&lt;br /&gt;
#当您认为完成之后,您可以重新加载插件(/q reload).现在让我们来学习BetonQuests插件的基础知识吧.&lt;br /&gt;
== 指令 ==&lt;br /&gt;
 /j – 给予一本日志&lt;br /&gt;
 /backpack – 打开背包&lt;br /&gt;
 /q – 列出所有可用的管理员指令&lt;br /&gt;
 /q reload – 重载插件&lt;br /&gt;
 /q objectives &amp;lt;playerName&amp;gt; [list/add/del] [instruction] –列出/修改玩家目标&lt;br /&gt;
 /q tags &amp;lt;playerName&amp;gt; [list/add/del] [tag] – 列出/修改玩家的标签&lt;br /&gt;
 /q points &amp;lt;playerName&amp;gt; [list/add/del] [category] [amount] – 列出/修改玩家在所有阵营的点数&lt;br /&gt;
 /q journal &amp;lt;playerName&amp;gt; [list/add/del] [package.pointer] [date] - lists&lt;br /&gt;
 /q event &amp;lt;playerName&amp;gt; &amp;lt;package.eventID&amp;gt; - 为玩家激活一个事件&lt;br /&gt;
 /q condition &amp;lt;playerName&amp;gt; &amp;lt;package.conditionID&amp;gt; - 显示玩家是否经历过指定的环境&lt;br /&gt;
 /q item &amp;lt;package.itemID&amp;gt; - 创建一个基于你手中物品的物品&lt;br /&gt;
 /q config &amp;lt;set/add/read&amp;gt; &amp;lt;path&amp;gt; [value] – 操作配置项&lt;br /&gt;
 /q purge &amp;lt;playerName&amp;gt; - 删除玩家数据&lt;br /&gt;
 /q backup – 创建配置文件和数据库的备份&lt;br /&gt;
 /q create &amp;lt;package&amp;gt;: 创建一个新的包并包含默认任务&lt;br /&gt;
 /q vector &amp;lt;packname.variable&amp;gt; &amp;lt;newvariable&amp;gt;: 计算第一个位置变量到你的位置并且储存到第二个参数中&lt;br /&gt;
 /questlang &amp;lt;lang&amp;gt; - 改变玩家的语言(如果由控制台使用就可以改变全局语言)&lt;br /&gt;
=== 缩写 ===&lt;br /&gt;
*&#039;&#039;&#039;/j:&#039;&#039;&#039; bj, journal, bjournal, betonjournal, betonquestjournal&lt;br /&gt;
*&#039;&#039;&#039;/backpack:&#039;&#039;&#039;b, bb, bbackpack, betonbackpack, betonquestbackpack&lt;br /&gt;
*&#039;&#039;&#039;/q:&#039;&#039;&#039; bq, bquest, bquests, betonquest, betonquests, quest, quests&lt;br /&gt;
**&#039;&#039;&#039;objective:&#039;&#039;&#039; o, objectives&lt;br /&gt;
**&#039;&#039;&#039;tag:&#039;&#039;&#039; t, tags&lt;br /&gt;
**&#039;&#039;&#039;point:&#039;&#039;&#039; p, points&lt;br /&gt;
**&#039;&#039;&#039;event:&#039;&#039;&#039; e, events&lt;br /&gt;
**&#039;&#039;&#039;condition:&#039;&#039;&#039; c, conditions&lt;br /&gt;
**&#039;&#039;&#039;journal:&#039;&#039;&#039; j, journals&lt;br /&gt;
**&#039;&#039;&#039;item:&#039;&#039;&#039; i, items&lt;br /&gt;
**&#039;&#039;&#039;create:&#039;&#039;&#039; package&lt;br /&gt;
*&#039;&#039;&#039;/questlang:&#039;&#039;&#039; ql&lt;br /&gt;
&lt;br /&gt;
=== 详情 ===&lt;br /&gt;
*/q reload重载所有配置，但是不是所有东西都会被保存。当数据库保存时，不可以修改玩家数据。数据库也是一样，你需要重启/重载服务器才可以保存数据库&amp;lt;br&amp;gt;&lt;br /&gt;
*标签相关的命令可以让你快速的编辑它 ，&#039;/q tags Beton&#039; 将会列出Beton这个玩家的标签。&#039;/q tags Beton add test&#039;将会添加&amp;quot;test&amp;quot;标签给玩家，并且 &#039;/q tags Beton del test&#039; 会移除它&amp;lt;br&amp;gt;&lt;br /&gt;
*点数相关的命令可以操纵点数。向一个类别添加点数应该用&#039;/q points Beton add reputation 20&#039; (给&amp;quot;reputation&amp;quot;添加20点)。你也可以使用负数来减去。 删除全部点数使用&#039;/q points Beton del reputation&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
*日志相关命令与上面两项相同。添加或删除使用 /q journal Beton add default.wood_started (or del)，并且你也可以在结尾加上时间来指定时间，格式为:23.04.2014_16:52。注意要用_来代替空格！名字前必须带上包名，因为命令不属于任何包&amp;lt;br&amp;gt;&lt;br /&gt;
*目标相关命令可以显示玩家的目标。它也可以直接对不表进行操作。记住要在事件/条件前加上包名！如果你想添加一个在events.yml中有定义的目标，只需要使用事件的相关命令&amp;lt;br&amp;gt;&lt;br /&gt;
*使在线玩家激活事件可以使用&#039;/q event Beton default.give_emeralds&#039;这将会为玩家Beton从”default”包激活 &amp;quot;give_emeralds&amp;quot;。也有条件相关的指令来操作，例如&#039;/q condition Beton default.has_food&#039;。事件与条件必须在它们的文件中定义，这个命令不支持原版指令。你可以不写包名，之后插件会自动读取default_package它可以在config.yml设置&amp;lt;br&amp;gt;&lt;br /&gt;
*如果需要创建一个&amp;quot;Nettlebane&amp;quot;任务物品,只需要把它拿在手里之后输入&#039;/q item default.nettlebane&#039;. 你手中的物品就会复制到items.yml 并且以你指定的名称保存(这里是&amp;quot;nettlebane&amp;quot;). 你也可以不输入包名.&amp;lt;br&amp;gt;&lt;br /&gt;
*你可以在. set 项中自定义命令的参数。.add 可以让你快捷的添加字符到存在的值上. (需要注意的地方: 插件不会识别空格，你可以用“_”这个字符来代替空格。例如objective location，是一段存在的字符串，并且你想给它附加 100;200;300;world;10这个值，你的命令应该是/q config add default.events.loc_obj _100;200;300;world;10). read 可以显示配置的值。&amp;lt;br&amp;gt;&lt;br /&gt;
这里的路径就是值的地址。你可以用“.”来表示分支，例如config.language,可以设置语言键的值，同理&amp;quot;bye&amp;quot;这个玩家的配置项路径应该是&lt;br /&gt;
default.conversations.innkeeper.player_options.bye.text&amp;lt;br&amp;gt;&lt;br /&gt;
*你可以使用&#039;/q purge Beton&#039;清除指定玩家的数据. 目前无法使用命令清除整个数据库，但你可以修改数据库的前缀&amp;lt;br&amp;gt;&lt;br /&gt;
如果你想要备份你的设置以及数据，需要你的服务器是空的(需要获取所有数据库的数据&amp;gt;所有玩家离线)之后运行&#039;/q backup&#039;这条命令，你将会获得一个包含所有数据的zip压缩文件。&amp;lt;br&amp;gt;&lt;br /&gt;
*使用&#039;/q create beton&#039; 你可以创建一个名为&#039;beton&#039;的任务，它将会与默认任务相同。&amp;lt;br&amp;gt;&lt;br /&gt;
*/q vector 命令可以让你创建一个由第一个位置变量到你的位置的矢量。结果会储存到&amp;quot;vectors.{第二参数}&amp;quot;&lt;br /&gt;
== 权限 ==&lt;br /&gt;
*betonquest.admin – 允许使用管理员命令(/q ...)且可以创建NPC&lt;br /&gt;
*betonquest.journal – 允许使用/ J指令（默认为玩家）&lt;br /&gt;
*betonquest.backpack –允许使用/backpack 指令（默认为玩家）&lt;br /&gt;
*betonquest.conversation -允许与NPC对话（默认为玩家）betonquest.language -允许改变的语言（默认为玩家）&lt;br /&gt;
== 创建对话 ==&lt;br /&gt;
对话是rpg系统的基础,这是开始或者完成任务的主要方法,也可以让游戏体验更加的身临其境.你制作的每一个对话文件都要放在&amp;quot;conversations&amp;quot; 文件夹里.(更多相关信息请看BetonQuest根目录里的&amp;quot;default&amp;quot;文件夹)对话文件必须以.yml为后缀,比如 innkeeper. yml&lt;br /&gt;
&lt;br /&gt;
让我们来脑补一下.然后我们可以尝试去弄清楚如何完成它.在玩家的眼里面看上去是这样的:玩家右击npc(让我们把npc称作小芳玩家称作小五)小芳说出她的初始文本,然后小五可以从中选择,假设有三个选项.小五在聊天栏输入 1（或者2,3),然后小芳继续对话.小五再一次拥有选项去选择之类的.如果小五输入其他例如字母或者较大的数字.小芳会做出她无法理解他的回应.&lt;br /&gt;
&lt;br /&gt;
每一个对话必须设定npc名字（一些对话不可以绑定到任何npc,所以指定它非常重要,即使还没有这个npc）,他的初次问候选项,他对玩家未知的回答和最终事件.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;注意1:&#039;&#039;&#039;配置文件使用yaml格式.如果你不知道什么是yaml,cnm不会百度么(can u f**k the Google?)?最主要的规则是当你进入更深层的阶层树时你要用两个空格代替标签.如果你想使用单引号(必须半角),你需要确保还有另一个单引号且它们分别处于文本开头及结尾 (例如上面的未知配置项).当写为ture或者false时它依旧需要用&#039;围起来.如果你想用&amp;amp;来做一行的开头,那么你需要在开头结尾加上单引号.&lt;br /&gt;
&#039;&#039;&#039;注意2:&#039;&#039;&#039;上文的对话只是一个栗子.它并不是有效的,因为它缺少了很多其他的设置.&lt;br /&gt;
&lt;br /&gt;
== 支持插件 ==&lt;br /&gt;
BetonQuest可以支持其他的插件，使用它们的功能。目前有三个插件: Citizens, Vault and MythicMobs.&lt;br /&gt;
=== Citizens ===&lt;br /&gt;
如果你有这个插件就可以创建NPC 来对话。我非常建议安装这个插件，NPC可以让对话更真实。Citizens也可以让你的NPC击杀的目标。&lt;br /&gt;
==== NPC击杀目标 &#039;&#039;npckill&#039;&#039; ====&lt;br /&gt;
NPC击杀目标需要玩家击杀指定ID的NPC。你也可以设置杀多少次NPC。目标名称后面必须是NPC的ID。你可以用&#039;&#039;amount:&#039;&#039; 设置数字。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;npckill 16 amount:3 events:reward label:citizens&#039;&#039;&lt;br /&gt;
==== NPC互动目标 ====&lt;br /&gt;
玩家必须与指定ID的NPC交互。它也可以关闭动作，这样对话就不会触发了。第一个参数是数字(NPC的ID)第二个是设置项 &#039;&#039;cancel&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;npcinteract 3 cancel conditions:sneak events:steal label:stealing&#039;&#039;&lt;br /&gt;
=== Vault ===&lt;br /&gt;
安装Vault你可以有权限事件和金钱条件/事件。&lt;br /&gt;
==== 权限事件 &#039;&#039;permission&#039;&#039; ====&lt;br /&gt;
删除或者增加一个组的权限。第一个参数是&#039;&#039;add&#039;&#039;或者&#039;&#039;remove&#039;&#039;，这很好理解。第二个是 &#039;&#039;perm&#039;&#039;或者&#039;&#039;group&#039;&#039;，这个也不难弄清楚。下一个就是你要添加或者删除的字符串。最后你需要指定一个世界。如果世界为空的话，这个修改就会变成全局的。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;permission remove group bandit world_nether&#039;&#039;&lt;br /&gt;
==== 金钱事件 &#039;&#039;money&#039;&#039; ====&lt;br /&gt;
从玩家的帐户存取款，只有一个参数，就是数量，它可以是负数。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;money -100&#039;&#039;&lt;br /&gt;
==== 金钱条件 &#039;&#039;money&#039;&#039; ====&lt;br /&gt;
检查玩家的金钱是否足够，也只有一个参数，即需要达到的数值，不能为负&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;money 500&#039;&#039;&lt;br /&gt;
=== MythicMobs ===&lt;br /&gt;
你可以设置MythicMobs怪物击杀目标和MythicMobs生成怪物的事件。&lt;br /&gt;
==== MythicMobs怪物击杀目标 &#039;&#039;mmobkill&#039;&#039; ====&lt;br /&gt;
完成这个目标需要击杀指定数量的指定怪物。第一个参数必须是怪物的内部名称(在MythicMobs的配置中有)。你可以添加&#039;&#039;amount:&#039;&#039;来指定击杀的数量&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;mmobkill SkeletalKnight amount:2 events:reward label:mythicmobs&#039;&#039;&lt;br /&gt;
==== MythicMobs怪物生存事件 &#039;&#039;mspawnmob&#039;&#039; ====&lt;br /&gt;
在指定的地方生成指定数量的怪。第一个参数应该是位置，格式是&#039;&#039;100;200;300;world&#039;&#039;。第二个是MythicMobs的内部名字(在MythicMobs的配置中有)后面跟一个冒号和等级。第三个是数量(必填)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;mspawnmob 100;200;300;world SkeletalKnight:1 5&#039;&#039;&lt;br /&gt;
=== Skript ===&lt;br /&gt;
BetonQuest也可以与Skript联动。为了避免混淆，我会使用插件的名称(Skript的一些事件BetonQuestnt也有。Skript可以让你通过脚本使用BetonQuest的事件，并且也可以用BetonQuest执行脚本。&lt;br /&gt;
==== Skript事件通过 BetonQuest &#039;&#039;skript&#039;&#039; 事件触发 ====&lt;br /&gt;
这里描述了Skript事件和BetonQuest事件。&lt;br /&gt;
#&#039;&#039;&#039;Skript 事件&#039;&#039;&#039; - &#039;&#039;on [betonquest] event &amp;quot;id&amp;quot;&#039;&#039; – 这一行可以触发 &#039;&#039;betonquest&#039;&#039; 中设定好的代码，并且 &#039;&#039;id&#039;&#039; 只能是字符串，且必须与你指定BetonQuest的事件相同。&lt;br /&gt;
#&#039;&#039;&#039;BetonQuest事件&#039;&#039;&#039;- &#039;&#039;skript&#039;&#039; – 这个事件会触发Skript的事件。指令只有一个参数，是事件的ID。必须和Skript中定义的事件相同。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; 脚本: &#039;&#039;on betonquest event &amp;quot;concrete&amp;quot; &#039;&#039;&lt;br /&gt;
events.yml:&#039;&#039;fire_concrete_script: skript concrete&#039;&#039;&lt;br /&gt;
==== Skript条件 ====&lt;br /&gt;
你可以用 &#039;&#039;player meets [betonquest] condition &amp;quot;id&amp;quot;&#039;&#039; 语句检查BetonQuest 的条件。Betonquest是配置项，并且 &#039;&#039;id&#039;&#039; 是条件名称，在conditions.yml中定义。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039;脚本: &#039;&#039;player meets condition &amp;quot;has_ore&amp;quot;&#039;&#039;&lt;br /&gt;
conditions.yml: &#039;&#039;has_ore: item iron_ore:5&#039;&#039;&lt;br /&gt;
==== Skript事件 ====&lt;br /&gt;
你可以用脚本触发BetonQuest事件。Skript的语句是&#039;&#039;fire [betonquest] event &amp;quot;id&amp;quot; for player&#039;&#039;。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039;脚本: &#039;&#039;fire event &amp;quot;give_emeralds&amp;quot; for player&#039;&#039;&lt;br /&gt;
events.yml:&#039;&#039;give_emeralds: give emerald:5&#039;&#039;&lt;br /&gt;
=== WorldGuard ===&lt;br /&gt;
==== WorldGuard区域目标 &#039;&#039;region&#039;&#039; ====&lt;br /&gt;
完成这个目标需要进入指定区域，唯一的参数是区域名称。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;region beton events:kill label:trap&#039;&#039;&lt;br /&gt;
==== WorldGuard区域条件 &#039;&#039;region&#039;&#039; ====&lt;br /&gt;
条件会在玩家处于指定区域时成立，唯一的参数是区域名&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;region beton&#039;&#039;&lt;br /&gt;
[[分类:优秀条目申请]] [[分类:角色]] [[分类：娱乐]]&lt;/div&gt;</summary>
		<author><name>星辰</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=BetonQuest&amp;diff=1487</id>
		<title>BetonQuest</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=BetonQuest&amp;diff=1487"/>
		<updated>2015-10-02T16:41:53Z</updated>

		<summary type="html">&lt;p&gt;星辰：​/* 创建对话 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=BetonQuest&lt;br /&gt;
|版本=v1.7.3&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.2-1.8.3&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/betonquest/&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;center&amp;gt;[[文件:BetonQuestLOGO.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{待完善}}&lt;br /&gt;
[[Category:娱乐]] [[Category:角色]]&lt;br /&gt;
BetonQuest是一个高大上的任务插件。它不像传统的将任务变成一个与对话绑定，而是网状结构(即类似Gal的剧情系统)。&amp;lt;br&amp;gt;&lt;br /&gt;
你的任务不一定要像&amp;quot;击杀, 带来物品, 获得奖励&amp;quot;这样: 你可以创建一个多条路线的任务，通过与NPC的对话，玩家可以进入不同的路线，获得不同的任务奖励。&lt;br /&gt;
== 特点 ==&lt;br /&gt;
*你的冒险不止一条路可以走&lt;br /&gt;
*强大的事件系统:可以在任何地方发生你想的事情&lt;br /&gt;
*强大的条件系统:你可以限制任何事情的(不)发生&lt;br /&gt;
*拥有队伍系统，这带来了团队任务&lt;br /&gt;
*与NPC的对话的多样性&lt;br /&gt;
*所有的日志记录在一本书中&lt;br /&gt;
*独立的任务物品背包&lt;br /&gt;
*可以对物品操作，甚至是书中的文本&lt;br /&gt;
*可以给玩家增加标签(tag)来储存信息&lt;br /&gt;
*完善的荣誉系统&lt;br /&gt;
*位置监听:当玩家进入指定区域会触发事件&lt;br /&gt;
*每日任务和可重复任务&lt;br /&gt;
*任务可以分配到不同的包(方便管理)&lt;br /&gt;
*支持Citizens2&lt;br /&gt;
*MythicMobs, Skript, WorldGuard和Vault的混合(意思就是全部支持)&lt;br /&gt;
*多语言支持并且非常容易翻译&lt;br /&gt;
*玩家可以选择自己的语种&lt;br /&gt;
*可以使用API创建你自己的事件、条件、目标(Developer)&lt;br /&gt;
*支持SQLite&amp;amp;MySQL数据库&lt;br /&gt;
*可备份的配置及数据&lt;br /&gt;
*自动升级&lt;br /&gt;
== 概览 ==&lt;br /&gt;
这插件到底怎样运作？我将以一个简单的伐木任务为例来描述。请注意“事件”、“条件”和“目标”之间的区别。&amp;lt;br&amp;gt;&lt;br /&gt;
首先，你需要创建一个和NPC的对话。玩家可在对话内的多个选项中进行选择，NPC会根据选项做出不同的反应（例如NPC会在玩家要求工作时告诉他去砍些树） 。同时，在某些地方会有“事件”被触发，增加一个获得木头的“目标”。它将会把该玩家标记为开始任务的人。从现在开始，NPC会在对话中使用不同的选项，例如他会让玩家快点干活。这些选项将会基于“条件”被选择。&amp;lt;br&amp;gt;&lt;br /&gt;
当玩家完成“目标”时（例如通过摧毁木头），“事件”将会触发，将这个玩家标为采集木头的人。当玩家返回NPC处并与其对话时，NPC将以“条件”来核对玩家是否真的拥有那块木头。如果是的话，他将触发给予奖励的“事件”。&amp;lt;br&amp;gt;&lt;br /&gt;
我们没有创建任何“任务”对象，只是创建了一个能触发“事件”并与“条件”进行核对的对话。“目标”当然也不是“任务”，它只能在玩家得到木头时标记该玩家，不能单独存在。另一方面，该对话可以在之后开始其他任务（例如挖一些矿石），所以“目标”也不是“任务” &amp;lt;br&amp;gt;&lt;br /&gt;
不要为举的例子感到失望，这些只是简化后的过程，所以我可以更简单的解释这个系统，其实用BetonQuest可以做到更多&amp;lt;br&amp;gt;&lt;br /&gt;
这些对话可以像在Baldur&#039;s Gate或是Skyrim一样有多种路线，任务可以有多种方式来结束，也可以有很多不同的影响玩家声誉的结局，就靠你来决定了。&amp;lt;br&amp;gt;&lt;br /&gt;
这个插件也包含了一个在书中的日志。你玩过Morrowind吗? 它们差不多一样，我们只是保留了你查看日志的顺序，所以你不必翻好几百页。现在完成任务并不需要显示像“你收集了所有的矿石，现在回到矿工那儿！”这样的信息。反之，它可以更新玩家的日志，加入像这样的新的记录：“我收集了所有的矿石，我需要回到矿工那儿去拿奖励！”。这样会显得真实得多。&lt;br /&gt;
== 安装 ==&lt;br /&gt;
#首先您可以安装Citizens插件,你可以在[http://dev.bukkit.org/bukkit-plugins/citizens/ Bukkit]找到它.&lt;br /&gt;
#不过这不是前置插件,您也可以用方块来做NPC不过那样会减少真实感&lt;br /&gt;
#下载BetonQuest插件,将.jar放在您的插件文件夹中并启动服务器.BetonQuest将会生成配置文件.&lt;br /&gt;
#如果您想使用MySQL进行储存数据,打开config.yml，填写您的数据库信息.如果不想,留空就好了,插件会使用SQLite来代替.&lt;br /&gt;
#如果您不想使用自动更新,在禁用它之前,请重新启动服务器或重新加载插件.&lt;br /&gt;
#当您认为完成之后,您可以重新加载插件(/q reload).现在让我们来学习BetonQuests插件的基础知识吧.&lt;br /&gt;
== 指令 ==&lt;br /&gt;
 /j – 给予一本日志&lt;br /&gt;
 /backpack – 打开背包&lt;br /&gt;
 /q – 列出所有可用的管理员指令&lt;br /&gt;
 /q reload – 重载插件&lt;br /&gt;
 /q objectives &amp;lt;playerName&amp;gt; [list/add/del] [instruction] –列出/修改玩家目标&lt;br /&gt;
 /q tags &amp;lt;playerName&amp;gt; [list/add/del] [tag] – 列出/修改玩家的标签&lt;br /&gt;
 /q points &amp;lt;playerName&amp;gt; [list/add/del] [category] [amount] – 列出/修改玩家在所有阵营的点数&lt;br /&gt;
 /q journal &amp;lt;playerName&amp;gt; [list/add/del] [package.pointer] [date] - lists&lt;br /&gt;
 /q event &amp;lt;playerName&amp;gt; &amp;lt;package.eventID&amp;gt; - 为玩家激活一个事件&lt;br /&gt;
 /q condition &amp;lt;playerName&amp;gt; &amp;lt;package.conditionID&amp;gt; - 显示玩家是否经历过指定的环境&lt;br /&gt;
 /q item &amp;lt;package.itemID&amp;gt; - 创建一个基于你手中物品的物品&lt;br /&gt;
 /q config &amp;lt;set/add/read&amp;gt; &amp;lt;path&amp;gt; [value] – 操作配置项&lt;br /&gt;
 /q purge &amp;lt;playerName&amp;gt; - 删除玩家数据&lt;br /&gt;
 /q backup – 创建配置文件和数据库的备份&lt;br /&gt;
 /q create &amp;lt;package&amp;gt;: 创建一个新的包并包含默认任务&lt;br /&gt;
 /q vector &amp;lt;packname.variable&amp;gt; &amp;lt;newvariable&amp;gt;: 计算第一个位置变量到你的位置并且储存到第二个参数中&lt;br /&gt;
 /questlang &amp;lt;lang&amp;gt; - 改变玩家的语言(如果由控制台使用就可以改变全局语言)&lt;br /&gt;
=== 缩写 ===&lt;br /&gt;
*&#039;&#039;&#039;/j:&#039;&#039;&#039; bj, journal, bjournal, betonjournal, betonquestjournal&lt;br /&gt;
*&#039;&#039;&#039;/backpack:&#039;&#039;&#039;b, bb, bbackpack, betonbackpack, betonquestbackpack&lt;br /&gt;
*&#039;&#039;&#039;/q:&#039;&#039;&#039; bq, bquest, bquests, betonquest, betonquests, quest, quests&lt;br /&gt;
**&#039;&#039;&#039;objective:&#039;&#039;&#039; o, objectives&lt;br /&gt;
**&#039;&#039;&#039;tag:&#039;&#039;&#039; t, tags&lt;br /&gt;
**&#039;&#039;&#039;point:&#039;&#039;&#039; p, points&lt;br /&gt;
**&#039;&#039;&#039;event:&#039;&#039;&#039; e, events&lt;br /&gt;
**&#039;&#039;&#039;condition:&#039;&#039;&#039; c, conditions&lt;br /&gt;
**&#039;&#039;&#039;journal:&#039;&#039;&#039; j, journals&lt;br /&gt;
**&#039;&#039;&#039;item:&#039;&#039;&#039; i, items&lt;br /&gt;
**&#039;&#039;&#039;create:&#039;&#039;&#039; package&lt;br /&gt;
*&#039;&#039;&#039;/questlang:&#039;&#039;&#039; ql&lt;br /&gt;
&lt;br /&gt;
=== 详情 ===&lt;br /&gt;
*/q reload重载所有配置，但是不是所有东西都会被保存。当数据库保存时，不可以修改玩家数据。数据库也是一样，你需要重启/重载服务器才可以保存数据库&amp;lt;br&amp;gt;&lt;br /&gt;
*标签相关的命令可以让你快速的编辑它 ，&#039;/q tags Beton&#039; 将会列出Beton这个玩家的标签。&#039;/q tags Beton add test&#039;将会添加&amp;quot;test&amp;quot;标签给玩家，并且 &#039;/q tags Beton del test&#039; 会移除它&amp;lt;br&amp;gt;&lt;br /&gt;
*点数相关的命令可以操纵点数。向一个类别添加点数应该用&#039;/q points Beton add reputation 20&#039; (给&amp;quot;reputation&amp;quot;添加20点)。你也可以使用负数来减去。 删除全部点数使用&#039;/q points Beton del reputation&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
*日志相关命令与上面两项相同。添加或删除使用 /q journal Beton add default.wood_started (or del)，并且你也可以在结尾加上时间来指定时间，格式为:23.04.2014_16:52。注意要用_来代替空格！名字前必须带上包名，因为命令不属于任何包&amp;lt;br&amp;gt;&lt;br /&gt;
*目标相关命令可以显示玩家的目标。它也可以直接对不表进行操作。记住要在事件/条件前加上包名！如果你想添加一个在events.yml中有定义的目标，只需要使用事件的相关命令&amp;lt;br&amp;gt;&lt;br /&gt;
*使在线玩家激活事件可以使用&#039;/q event Beton default.give_emeralds&#039;这将会为玩家Beton从”default”包激活 &amp;quot;give_emeralds&amp;quot;。也有条件相关的指令来操作，例如&#039;/q condition Beton default.has_food&#039;。事件与条件必须在它们的文件中定义，这个命令不支持原版指令。你可以不写包名，之后插件会自动读取default_package它可以在config.yml设置&amp;lt;br&amp;gt;&lt;br /&gt;
*如果需要创建一个&amp;quot;Nettlebane&amp;quot;任务物品,只需要把它拿在手里之后输入&#039;/q item default.nettlebane&#039;. 你手中的物品就会复制到items.yml 并且以你指定的名称保存(这里是&amp;quot;nettlebane&amp;quot;). 你也可以不输入包名.&amp;lt;br&amp;gt;&lt;br /&gt;
*你可以在. set 项中自定义命令的参数。.add 可以让你快捷的添加字符到存在的值上. (需要注意的地方: 插件不会识别空格，你可以用“_”这个字符来代替空格。例如objective location，是一段存在的字符串，并且你想给它附加 100;200;300;world;10这个值，你的命令应该是/q config add default.events.loc_obj _100;200;300;world;10). read 可以显示配置的值。&amp;lt;br&amp;gt;&lt;br /&gt;
这里的路径就是值的地址。你可以用“.”来表示分支，例如config.language,可以设置语言键的值，同理&amp;quot;bye&amp;quot;这个玩家的配置项路径应该是&lt;br /&gt;
default.conversations.innkeeper.player_options.bye.text&amp;lt;br&amp;gt;&lt;br /&gt;
*你可以使用&#039;/q purge Beton&#039;清除指定玩家的数据. 目前无法使用命令清除整个数据库，但你可以修改数据库的前缀&amp;lt;br&amp;gt;&lt;br /&gt;
如果你想要备份你的设置以及数据，需要你的服务器是空的(需要获取所有数据库的数据&amp;gt;所有玩家离线)之后运行&#039;/q backup&#039;这条命令，你将会获得一个包含所有数据的zip压缩文件。&amp;lt;br&amp;gt;&lt;br /&gt;
*使用&#039;/q create beton&#039; 你可以创建一个名为&#039;beton&#039;的任务，它将会与默认任务相同。&amp;lt;br&amp;gt;&lt;br /&gt;
*/q vector 命令可以让你创建一个由第一个位置变量到你的位置的矢量。结果会储存到&amp;quot;vectors.{第二参数}&amp;quot;&lt;br /&gt;
== 权限 ==&lt;br /&gt;
*betonquest.admin – 允许使用管理员命令(/q ...)且可以创建NPC&lt;br /&gt;
*betonquest.journal – 允许使用/ J指令（默认为玩家）&lt;br /&gt;
*betonquest.backpack –允许使用/backpack 指令（默认为玩家）&lt;br /&gt;
*betonquest.conversation -允许与NPC对话（默认为玩家）betonquest.language -允许改变的语言（默认为玩家）&lt;br /&gt;
== 创建对话 ==&lt;br /&gt;
对话是rpg系统的基础,这是开始或者完成任务的主要方法,也可以让游戏体验更加的身临其境.你制作的每一个对话文件都要放在&amp;quot;conversations&amp;quot; 文件夹里.(更多相关信息请看BetonQuest根目录里的&amp;quot;default&amp;quot;文件夹)对话文件必须以.yml为后缀,比如 innkeeper. yml&lt;br /&gt;
&lt;br /&gt;
让我们来脑补一下.然后我们可以尝试去弄清楚如何完成它.在玩家的眼里面看上去是这样的:玩家右击npc(让我们把npc称作小芳玩家称作小五)小芳说出她的初始文本,然后小五可以从中选择,假设有三个选项.小五在聊天栏输入 1（或者2,3),然后小芳继续对话.小五再一次拥有选项去选择之类的.如果小五输入其他例如字母或者较大的数字.小芳会做出她无法理解他的回应.&lt;br /&gt;
&lt;br /&gt;
每一个对话必须设定npc名字（一些对话不可以绑定到任何npc,所以指定它非常重要,即使还没有这个npc）,他的初次问候选项,他对玩家未知的回答和最终事件.&lt;br /&gt;
&lt;br /&gt;
注意1:配置文件使用yaml格式.如果你不知道什么是yaml,cnm不会百度么(can u f**k the Google?)?最主要的规则是当你进入更深层的阶层树时你要用两个空格代替标签.如果你想使用单引号(必须半角),你需要确保还有另一个单引号且它们分别处于文本开头及结尾 (例如上面的未知配置项).当写为ture或者false时它依旧需要用&#039;围起来.如果你想用&amp;amp;来做一行的开头,那么你需要在开头结尾加上单引号.&lt;br /&gt;
注意2:上文的对话只是一个栗子.它并不是有效的,因为它缺少了很多其他的设置.&lt;br /&gt;
&lt;br /&gt;
== 支持插件 ==&lt;br /&gt;
BetonQuest可以支持其他的插件，使用它们的功能。目前有三个插件: Citizens, Vault and MythicMobs.&lt;br /&gt;
=== Citizens ===&lt;br /&gt;
如果你有这个插件就可以创建NPC 来对话。我非常建议安装这个插件，NPC可以让对话更真实。Citizens也可以让你的NPC击杀的目标。&lt;br /&gt;
==== NPC击杀目标 &#039;&#039;npckill&#039;&#039; ====&lt;br /&gt;
NPC击杀目标需要玩家击杀指定ID的NPC。你也可以设置杀多少次NPC。目标名称后面必须是NPC的ID。你可以用&#039;&#039;amount:&#039;&#039; 设置数字。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;npckill 16 amount:3 events:reward label:citizens&#039;&#039;&lt;br /&gt;
==== NPC互动目标 ====&lt;br /&gt;
玩家必须与指定ID的NPC交互。它也可以关闭动作，这样对话就不会触发了。第一个参数是数字(NPC的ID)第二个是设置项 &#039;&#039;cancel&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;npcinteract 3 cancel conditions:sneak events:steal label:stealing&#039;&#039;&lt;br /&gt;
=== Vault ===&lt;br /&gt;
安装Vault你可以有权限事件和金钱条件/事件。&lt;br /&gt;
==== 权限事件 &#039;&#039;permission&#039;&#039; ====&lt;br /&gt;
删除或者增加一个组的权限。第一个参数是&#039;&#039;add&#039;&#039;或者&#039;&#039;remove&#039;&#039;，这很好理解。第二个是 &#039;&#039;perm&#039;&#039;或者&#039;&#039;group&#039;&#039;，这个也不难弄清楚。下一个就是你要添加或者删除的字符串。最后你需要指定一个世界。如果世界为空的话，这个修改就会变成全局的。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;permission remove group bandit world_nether&#039;&#039;&lt;br /&gt;
==== 金钱事件 &#039;&#039;money&#039;&#039; ====&lt;br /&gt;
从玩家的帐户存取款，只有一个参数，就是数量，它可以是负数。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;money -100&#039;&#039;&lt;br /&gt;
==== 金钱条件 &#039;&#039;money&#039;&#039; ====&lt;br /&gt;
检查玩家的金钱是否足够，也只有一个参数，即需要达到的数值，不能为负&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;money 500&#039;&#039;&lt;br /&gt;
=== MythicMobs ===&lt;br /&gt;
你可以设置MythicMobs怪物击杀目标和MythicMobs生成怪物的事件。&lt;br /&gt;
==== MythicMobs怪物击杀目标 &#039;&#039;mmobkill&#039;&#039; ====&lt;br /&gt;
完成这个目标需要击杀指定数量的指定怪物。第一个参数必须是怪物的内部名称(在MythicMobs的配置中有)。你可以添加&#039;&#039;amount:&#039;&#039;来指定击杀的数量&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;mmobkill SkeletalKnight amount:2 events:reward label:mythicmobs&#039;&#039;&lt;br /&gt;
==== MythicMobs怪物生存事件 &#039;&#039;mspawnmob&#039;&#039; ====&lt;br /&gt;
在指定的地方生成指定数量的怪。第一个参数应该是位置，格式是&#039;&#039;100;200;300;world&#039;&#039;。第二个是MythicMobs的内部名字(在MythicMobs的配置中有)后面跟一个冒号和等级。第三个是数量(必填)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;mspawnmob 100;200;300;world SkeletalKnight:1 5&#039;&#039;&lt;br /&gt;
=== Skript ===&lt;br /&gt;
BetonQuest也可以与Skript联动。为了避免混淆，我会使用插件的名称(Skript的一些事件BetonQuestnt也有。Skript可以让你通过脚本使用BetonQuest的事件，并且也可以用BetonQuest执行脚本。&lt;br /&gt;
==== Skript事件通过 BetonQuest &#039;&#039;skript&#039;&#039; 事件触发 ====&lt;br /&gt;
这里描述了Skript事件和BetonQuest事件。&lt;br /&gt;
#&#039;&#039;&#039;Skript 事件&#039;&#039;&#039; - &#039;&#039;on [betonquest] event &amp;quot;id&amp;quot;&#039;&#039; – 这一行可以触发 &#039;&#039;betonquest&#039;&#039; 中设定好的代码，并且 &#039;&#039;id&#039;&#039; 只能是字符串，且必须与你指定BetonQuest的事件相同。&lt;br /&gt;
#&#039;&#039;&#039;BetonQuest事件&#039;&#039;&#039;- &#039;&#039;skript&#039;&#039; – 这个事件会触发Skript的事件。指令只有一个参数，是事件的ID。必须和Skript中定义的事件相同。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; 脚本: &#039;&#039;on betonquest event &amp;quot;concrete&amp;quot; &#039;&#039;&lt;br /&gt;
events.yml:&#039;&#039;fire_concrete_script: skript concrete&#039;&#039;&lt;br /&gt;
==== Skript条件 ====&lt;br /&gt;
你可以用 &#039;&#039;player meets [betonquest] condition &amp;quot;id&amp;quot;&#039;&#039; 语句检查BetonQuest 的条件。Betonquest是配置项，并且 &#039;&#039;id&#039;&#039; 是条件名称，在conditions.yml中定义。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039;脚本: &#039;&#039;player meets condition &amp;quot;has_ore&amp;quot;&#039;&#039;&lt;br /&gt;
conditions.yml: &#039;&#039;has_ore: item iron_ore:5&#039;&#039;&lt;br /&gt;
==== Skript事件 ====&lt;br /&gt;
你可以用脚本触发BetonQuest事件。Skript的语句是&#039;&#039;fire [betonquest] event &amp;quot;id&amp;quot; for player&#039;&#039;。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039;脚本: &#039;&#039;fire event &amp;quot;give_emeralds&amp;quot; for player&#039;&#039;&lt;br /&gt;
events.yml:&#039;&#039;give_emeralds: give emerald:5&#039;&#039;&lt;br /&gt;
=== WorldGuard ===&lt;br /&gt;
==== WorldGuard区域目标 &#039;&#039;region&#039;&#039; ====&lt;br /&gt;
完成这个目标需要进入指定区域，唯一的参数是区域名称。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;region beton events:kill label:trap&#039;&#039;&lt;br /&gt;
==== WorldGuard区域条件 &#039;&#039;region&#039;&#039; ====&lt;br /&gt;
条件会在玩家处于指定区域时成立，唯一的参数是区域名&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;region beton&#039;&#039;&lt;br /&gt;
[[分类:优秀条目申请]] [[分类:角色]] [[分类：娱乐]]&lt;/div&gt;</summary>
		<author><name>星辰</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=BetonQuest&amp;diff=1486</id>
		<title>BetonQuest</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=BetonQuest&amp;diff=1486"/>
		<updated>2015-10-02T16:31:13Z</updated>

		<summary type="html">&lt;p&gt;星辰：​/* 缩写 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=BetonQuest&lt;br /&gt;
|版本=v1.7.3&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.2-1.8.3&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/betonquest/&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;center&amp;gt;[[文件:BetonQuestLOGO.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{待完善}}&lt;br /&gt;
[[Category:娱乐]] [[Category:角色]]&lt;br /&gt;
BetonQuest是一个高大上的任务插件。它不像传统的将任务变成一个与对话绑定，而是网状结构(即类似Gal的剧情系统)。&amp;lt;br&amp;gt;&lt;br /&gt;
你的任务不一定要像&amp;quot;击杀, 带来物品, 获得奖励&amp;quot;这样: 你可以创建一个多条路线的任务，通过与NPC的对话，玩家可以进入不同的路线，获得不同的任务奖励。&lt;br /&gt;
== 特点 ==&lt;br /&gt;
*你的冒险不止一条路可以走&lt;br /&gt;
*强大的事件系统:可以在任何地方发生你想的事情&lt;br /&gt;
*强大的条件系统:你可以限制任何事情的(不)发生&lt;br /&gt;
*拥有队伍系统，这带来了团队任务&lt;br /&gt;
*与NPC的对话的多样性&lt;br /&gt;
*所有的日志记录在一本书中&lt;br /&gt;
*独立的任务物品背包&lt;br /&gt;
*可以对物品操作，甚至是书中的文本&lt;br /&gt;
*可以给玩家增加标签(tag)来储存信息&lt;br /&gt;
*完善的荣誉系统&lt;br /&gt;
*位置监听:当玩家进入指定区域会触发事件&lt;br /&gt;
*每日任务和可重复任务&lt;br /&gt;
*任务可以分配到不同的包(方便管理)&lt;br /&gt;
*支持Citizens2&lt;br /&gt;
*MythicMobs, Skript, WorldGuard和Vault的混合(意思就是全部支持)&lt;br /&gt;
*多语言支持并且非常容易翻译&lt;br /&gt;
*玩家可以选择自己的语种&lt;br /&gt;
*可以使用API创建你自己的事件、条件、目标(Developer)&lt;br /&gt;
*支持SQLite&amp;amp;MySQL数据库&lt;br /&gt;
*可备份的配置及数据&lt;br /&gt;
*自动升级&lt;br /&gt;
== 概览 ==&lt;br /&gt;
这插件到底怎样运作？我将以一个简单的伐木任务为例来描述。请注意“事件”、“条件”和“目标”之间的区别。&amp;lt;br&amp;gt;&lt;br /&gt;
首先，你需要创建一个和NPC的对话。玩家可在对话内的多个选项中进行选择，NPC会根据选项做出不同的反应（例如NPC会在玩家要求工作时告诉他去砍些树） 。同时，在某些地方会有“事件”被触发，增加一个获得木头的“目标”。它将会把该玩家标记为开始任务的人。从现在开始，NPC会在对话中使用不同的选项，例如他会让玩家快点干活。这些选项将会基于“条件”被选择。&amp;lt;br&amp;gt;&lt;br /&gt;
当玩家完成“目标”时（例如通过摧毁木头），“事件”将会触发，将这个玩家标为采集木头的人。当玩家返回NPC处并与其对话时，NPC将以“条件”来核对玩家是否真的拥有那块木头。如果是的话，他将触发给予奖励的“事件”。&amp;lt;br&amp;gt;&lt;br /&gt;
我们没有创建任何“任务”对象，只是创建了一个能触发“事件”并与“条件”进行核对的对话。“目标”当然也不是“任务”，它只能在玩家得到木头时标记该玩家，不能单独存在。另一方面，该对话可以在之后开始其他任务（例如挖一些矿石），所以“目标”也不是“任务” &amp;lt;br&amp;gt;&lt;br /&gt;
不要为举的例子感到失望，这些只是简化后的过程，所以我可以更简单的解释这个系统，其实用BetonQuest可以做到更多&amp;lt;br&amp;gt;&lt;br /&gt;
这些对话可以像在Baldur&#039;s Gate或是Skyrim一样有多种路线，任务可以有多种方式来结束，也可以有很多不同的影响玩家声誉的结局，就靠你来决定了。&amp;lt;br&amp;gt;&lt;br /&gt;
这个插件也包含了一个在书中的日志。你玩过Morrowind吗? 它们差不多一样，我们只是保留了你查看日志的顺序，所以你不必翻好几百页。现在完成任务并不需要显示像“你收集了所有的矿石，现在回到矿工那儿！”这样的信息。反之，它可以更新玩家的日志，加入像这样的新的记录：“我收集了所有的矿石，我需要回到矿工那儿去拿奖励！”。这样会显得真实得多。&lt;br /&gt;
== 安装 ==&lt;br /&gt;
#首先您可以安装Citizens插件,你可以在[http://dev.bukkit.org/bukkit-plugins/citizens/ Bukkit]找到它.&lt;br /&gt;
#不过这不是前置插件,您也可以用方块来做NPC不过那样会减少真实感&lt;br /&gt;
#下载BetonQuest插件,将.jar放在您的插件文件夹中并启动服务器.BetonQuest将会生成配置文件.&lt;br /&gt;
#如果您想使用MySQL进行储存数据,打开config.yml，填写您的数据库信息.如果不想,留空就好了,插件会使用SQLite来代替.&lt;br /&gt;
#如果您不想使用自动更新,在禁用它之前,请重新启动服务器或重新加载插件.&lt;br /&gt;
#当您认为完成之后,您可以重新加载插件(/q reload).现在让我们来学习BetonQuests插件的基础知识吧.&lt;br /&gt;
== 指令 ==&lt;br /&gt;
 /j – 给予一本日志&lt;br /&gt;
 /backpack – 打开背包&lt;br /&gt;
 /q – 列出所有可用的管理员指令&lt;br /&gt;
 /q reload – 重载插件&lt;br /&gt;
 /q objectives &amp;lt;playerName&amp;gt; [list/add/del] [instruction] –列出/修改玩家目标&lt;br /&gt;
 /q tags &amp;lt;playerName&amp;gt; [list/add/del] [tag] – 列出/修改玩家的标签&lt;br /&gt;
 /q points &amp;lt;playerName&amp;gt; [list/add/del] [category] [amount] – 列出/修改玩家在所有阵营的点数&lt;br /&gt;
 /q journal &amp;lt;playerName&amp;gt; [list/add/del] [package.pointer] [date] - lists&lt;br /&gt;
 /q event &amp;lt;playerName&amp;gt; &amp;lt;package.eventID&amp;gt; - 为玩家激活一个事件&lt;br /&gt;
 /q condition &amp;lt;playerName&amp;gt; &amp;lt;package.conditionID&amp;gt; - 显示玩家是否经历过指定的环境&lt;br /&gt;
 /q item &amp;lt;package.itemID&amp;gt; - 创建一个基于你手中物品的物品&lt;br /&gt;
 /q config &amp;lt;set/add/read&amp;gt; &amp;lt;path&amp;gt; [value] – 操作配置项&lt;br /&gt;
 /q purge &amp;lt;playerName&amp;gt; - 删除玩家数据&lt;br /&gt;
 /q backup – 创建配置文件和数据库的备份&lt;br /&gt;
 /q create &amp;lt;package&amp;gt;: 创建一个新的包并包含默认任务&lt;br /&gt;
 /q vector &amp;lt;packname.variable&amp;gt; &amp;lt;newvariable&amp;gt;: 计算第一个位置变量到你的位置并且储存到第二个参数中&lt;br /&gt;
 /questlang &amp;lt;lang&amp;gt; - 改变玩家的语言(如果由控制台使用就可以改变全局语言)&lt;br /&gt;
=== 缩写 ===&lt;br /&gt;
*&#039;&#039;&#039;/j:&#039;&#039;&#039; bj, journal, bjournal, betonjournal, betonquestjournal&lt;br /&gt;
*&#039;&#039;&#039;/backpack:&#039;&#039;&#039;b, bb, bbackpack, betonbackpack, betonquestbackpack&lt;br /&gt;
*&#039;&#039;&#039;/q:&#039;&#039;&#039; bq, bquest, bquests, betonquest, betonquests, quest, quests&lt;br /&gt;
**&#039;&#039;&#039;objective:&#039;&#039;&#039; o, objectives&lt;br /&gt;
**&#039;&#039;&#039;tag:&#039;&#039;&#039; t, tags&lt;br /&gt;
**&#039;&#039;&#039;point:&#039;&#039;&#039; p, points&lt;br /&gt;
**&#039;&#039;&#039;event:&#039;&#039;&#039; e, events&lt;br /&gt;
**&#039;&#039;&#039;condition:&#039;&#039;&#039; c, conditions&lt;br /&gt;
**&#039;&#039;&#039;journal:&#039;&#039;&#039; j, journals&lt;br /&gt;
**&#039;&#039;&#039;item:&#039;&#039;&#039; i, items&lt;br /&gt;
**&#039;&#039;&#039;create:&#039;&#039;&#039; package&lt;br /&gt;
*&#039;&#039;&#039;/questlang:&#039;&#039;&#039; ql&lt;br /&gt;
&lt;br /&gt;
=== 详情 ===&lt;br /&gt;
*/q reload重载所有配置，但是不是所有东西都会被保存。当数据库保存时，不可以修改玩家数据。数据库也是一样，你需要重启/重载服务器才可以保存数据库&amp;lt;br&amp;gt;&lt;br /&gt;
*标签相关的命令可以让你快速的编辑它 ，&#039;/q tags Beton&#039; 将会列出Beton这个玩家的标签。&#039;/q tags Beton add test&#039;将会添加&amp;quot;test&amp;quot;标签给玩家，并且 &#039;/q tags Beton del test&#039; 会移除它&amp;lt;br&amp;gt;&lt;br /&gt;
*点数相关的命令可以操纵点数。向一个类别添加点数应该用&#039;/q points Beton add reputation 20&#039; (给&amp;quot;reputation&amp;quot;添加20点)。你也可以使用负数来减去。 删除全部点数使用&#039;/q points Beton del reputation&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
*日志相关命令与上面两项相同。添加或删除使用 /q journal Beton add default.wood_started (or del)，并且你也可以在结尾加上时间来指定时间，格式为:23.04.2014_16:52。注意要用_来代替空格！名字前必须带上包名，因为命令不属于任何包&amp;lt;br&amp;gt;&lt;br /&gt;
*目标相关命令可以显示玩家的目标。它也可以直接对不表进行操作。记住要在事件/条件前加上包名！如果你想添加一个在events.yml中有定义的目标，只需要使用事件的相关命令&amp;lt;br&amp;gt;&lt;br /&gt;
*使在线玩家激活事件可以使用&#039;/q event Beton default.give_emeralds&#039;这将会为玩家Beton从”default”包激活 &amp;quot;give_emeralds&amp;quot;。也有条件相关的指令来操作，例如&#039;/q condition Beton default.has_food&#039;。事件与条件必须在它们的文件中定义，这个命令不支持原版指令。你可以不写包名，之后插件会自动读取default_package它可以在config.yml设置&amp;lt;br&amp;gt;&lt;br /&gt;
*如果需要创建一个&amp;quot;Nettlebane&amp;quot;任务物品,只需要把它拿在手里之后输入&#039;/q item default.nettlebane&#039;. 你手中的物品就会复制到items.yml 并且以你指定的名称保存(这里是&amp;quot;nettlebane&amp;quot;). 你也可以不输入包名.&amp;lt;br&amp;gt;&lt;br /&gt;
*你可以在. set 项中自定义命令的参数。.add 可以让你快捷的添加字符到存在的值上. (需要注意的地方: 插件不会识别空格，你可以用“_”这个字符来代替空格。例如objective location，是一段存在的字符串，并且你想给它附加 100;200;300;world;10这个值，你的命令应该是/q config add default.events.loc_obj _100;200;300;world;10). read 可以显示配置的值。&amp;lt;br&amp;gt;&lt;br /&gt;
这里的路径就是值的地址。你可以用“.”来表示分支，例如config.language,可以设置语言键的值，同理&amp;quot;bye&amp;quot;这个玩家的配置项路径应该是&lt;br /&gt;
default.conversations.innkeeper.player_options.bye.text&amp;lt;br&amp;gt;&lt;br /&gt;
*你可以使用&#039;/q purge Beton&#039;清除指定玩家的数据. 目前无法使用命令清除整个数据库，但你可以修改数据库的前缀&amp;lt;br&amp;gt;&lt;br /&gt;
如果你想要备份你的设置以及数据，需要你的服务器是空的(需要获取所有数据库的数据&amp;gt;所有玩家离线)之后运行&#039;/q backup&#039;这条命令，你将会获得一个包含所有数据的zip压缩文件。&amp;lt;br&amp;gt;&lt;br /&gt;
*使用&#039;/q create beton&#039; 你可以创建一个名为&#039;beton&#039;的任务，它将会与默认任务相同。&amp;lt;br&amp;gt;&lt;br /&gt;
*/q vector 命令可以让你创建一个由第一个位置变量到你的位置的矢量。结果会储存到&amp;quot;vectors.{第二参数}&amp;quot;&lt;br /&gt;
== 权限 ==&lt;br /&gt;
*betonquest.admin – 允许使用管理员命令(/q ...)且可以创建NPC&lt;br /&gt;
*betonquest.journal – 允许使用/ J指令（默认为玩家）&lt;br /&gt;
*betonquest.backpack –允许使用/backpack 指令（默认为玩家）&lt;br /&gt;
*betonquest.conversation -允许与NPC对话（默认为玩家）betonquest.language -允许改变的语言（默认为玩家）&lt;br /&gt;
== 创建对话 ==&lt;br /&gt;
对话是rpg系统的基础，这是开始或者完成任务的主要方法，也可以制造更多身临其境的游戏体验。你制作的每一个对话文件都放在在&amp;quot;conversations&amp;quot; 目录下。(更多相关信息请看&amp;quot;default&amp;quot;文件夹里面的 BetonQuest目录)对话文件文件必须以.yml为后缀，比如 innkeeper. yml&lt;br /&gt;
&lt;br /&gt;
让我们来脑补一下。然后我们可以尝试去弄清楚如何完成它。在玩家的眼里面看上去是这样的:玩家右击npc(让我们把npc称作小芳玩家称作小五)小芳说出她的初始文本，然后小五可以从中选择,假设有三个选项。小五在聊天栏输入 1（或者2，3),然后小芳继续对话。小五再一次拥有选项去选择之类的。如果小五输入其他例如字母或者较大的数字。小芳会做出她无法理解他的回应。&lt;br /&gt;
&lt;br /&gt;
每一个对话必须设定npc名字（一些对话不可以绑定任何npc，所以指定它非常重要，即使还没有这个npc），他的初次问候选项，他对未知玩家的回答和最终事件。&lt;br /&gt;
&lt;br /&gt;
注意1:配置文件使用yaml格式。如果你不知道什么是yaml，cnm不会百度么(can u f**k the Google?)?最主要的规则是当你进入更深层的阶层树时你要用两个空格代替标签。如果你想使用单引号(必须半角)，你需要确保还有另一个单引号且它们分别处于文本开头及结尾 (例如上面的未知配置项)。当写为ture或者false时它依旧需要用&#039;围起来。如果你想用&amp;amp;来做一行的开头，那么你需要在开头结尾加上单引号。&lt;br /&gt;
注意2:上文的对话只是一个栗子。它并不是有效的，因为它缺少了很多其他的设置。&lt;br /&gt;
== 支持插件 ==&lt;br /&gt;
BetonQuest可以支持其他的插件，使用它们的功能。目前有三个插件: Citizens, Vault and MythicMobs.&lt;br /&gt;
=== Citizens ===&lt;br /&gt;
如果你有这个插件就可以创建NPC 来对话。我非常建议安装这个插件，NPC可以让对话更真实。Citizens也可以让你的NPC击杀的目标。&lt;br /&gt;
==== NPC击杀目标 &#039;&#039;npckill&#039;&#039; ====&lt;br /&gt;
NPC击杀目标需要玩家击杀指定ID的NPC。你也可以设置杀多少次NPC。目标名称后面必须是NPC的ID。你可以用&#039;&#039;amount:&#039;&#039; 设置数字。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;npckill 16 amount:3 events:reward label:citizens&#039;&#039;&lt;br /&gt;
==== NPC互动目标 ====&lt;br /&gt;
玩家必须与指定ID的NPC交互。它也可以关闭动作，这样对话就不会触发了。第一个参数是数字(NPC的ID)第二个是设置项 &#039;&#039;cancel&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;npcinteract 3 cancel conditions:sneak events:steal label:stealing&#039;&#039;&lt;br /&gt;
=== Vault ===&lt;br /&gt;
安装Vault你可以有权限事件和金钱条件/事件。&lt;br /&gt;
==== 权限事件 &#039;&#039;permission&#039;&#039; ====&lt;br /&gt;
删除或者增加一个组的权限。第一个参数是&#039;&#039;add&#039;&#039;或者&#039;&#039;remove&#039;&#039;，这很好理解。第二个是 &#039;&#039;perm&#039;&#039;或者&#039;&#039;group&#039;&#039;，这个也不难弄清楚。下一个就是你要添加或者删除的字符串。最后你需要指定一个世界。如果世界为空的话，这个修改就会变成全局的。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;permission remove group bandit world_nether&#039;&#039;&lt;br /&gt;
==== 金钱事件 &#039;&#039;money&#039;&#039; ====&lt;br /&gt;
从玩家的帐户存取款，只有一个参数，就是数量，它可以是负数。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;money -100&#039;&#039;&lt;br /&gt;
==== 金钱条件 &#039;&#039;money&#039;&#039; ====&lt;br /&gt;
检查玩家的金钱是否足够，也只有一个参数，即需要达到的数值，不能为负&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;money 500&#039;&#039;&lt;br /&gt;
=== MythicMobs ===&lt;br /&gt;
你可以设置MythicMobs怪物击杀目标和MythicMobs生成怪物的事件。&lt;br /&gt;
==== MythicMobs怪物击杀目标 &#039;&#039;mmobkill&#039;&#039; ====&lt;br /&gt;
完成这个目标需要击杀指定数量的指定怪物。第一个参数必须是怪物的内部名称(在MythicMobs的配置中有)。你可以添加&#039;&#039;amount:&#039;&#039;来指定击杀的数量&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;mmobkill SkeletalKnight amount:2 events:reward label:mythicmobs&#039;&#039;&lt;br /&gt;
==== MythicMobs怪物生存事件 &#039;&#039;mspawnmob&#039;&#039; ====&lt;br /&gt;
在指定的地方生成指定数量的怪。第一个参数应该是位置，格式是&#039;&#039;100;200;300;world&#039;&#039;。第二个是MythicMobs的内部名字(在MythicMobs的配置中有)后面跟一个冒号和等级。第三个是数量(必填)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;mspawnmob 100;200;300;world SkeletalKnight:1 5&#039;&#039;&lt;br /&gt;
=== Skript ===&lt;br /&gt;
BetonQuest也可以与Skript联动。为了避免混淆，我会使用插件的名称(Skript的一些事件BetonQuestnt也有。Skript可以让你通过脚本使用BetonQuest的事件，并且也可以用BetonQuest执行脚本。&lt;br /&gt;
==== Skript事件通过 BetonQuest &#039;&#039;skript&#039;&#039; 事件触发 ====&lt;br /&gt;
这里描述了Skript事件和BetonQuest事件。&lt;br /&gt;
#&#039;&#039;&#039;Skript 事件&#039;&#039;&#039; - &#039;&#039;on [betonquest] event &amp;quot;id&amp;quot;&#039;&#039; – 这一行可以触发 &#039;&#039;betonquest&#039;&#039; 中设定好的代码，并且 &#039;&#039;id&#039;&#039; 只能是字符串，且必须与你指定BetonQuest的事件相同。&lt;br /&gt;
#&#039;&#039;&#039;BetonQuest事件&#039;&#039;&#039;- &#039;&#039;skript&#039;&#039; – 这个事件会触发Skript的事件。指令只有一个参数，是事件的ID。必须和Skript中定义的事件相同。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; 脚本: &#039;&#039;on betonquest event &amp;quot;concrete&amp;quot; &#039;&#039;&lt;br /&gt;
events.yml:&#039;&#039;fire_concrete_script: skript concrete&#039;&#039;&lt;br /&gt;
==== Skript条件 ====&lt;br /&gt;
你可以用 &#039;&#039;player meets [betonquest] condition &amp;quot;id&amp;quot;&#039;&#039; 语句检查BetonQuest 的条件。Betonquest是配置项，并且 &#039;&#039;id&#039;&#039; 是条件名称，在conditions.yml中定义。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039;脚本: &#039;&#039;player meets condition &amp;quot;has_ore&amp;quot;&#039;&#039;&lt;br /&gt;
conditions.yml: &#039;&#039;has_ore: item iron_ore:5&#039;&#039;&lt;br /&gt;
==== Skript事件 ====&lt;br /&gt;
你可以用脚本触发BetonQuest事件。Skript的语句是&#039;&#039;fire [betonquest] event &amp;quot;id&amp;quot; for player&#039;&#039;。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039;脚本: &#039;&#039;fire event &amp;quot;give_emeralds&amp;quot; for player&#039;&#039;&lt;br /&gt;
events.yml:&#039;&#039;give_emeralds: give emerald:5&#039;&#039;&lt;br /&gt;
=== WorldGuard ===&lt;br /&gt;
==== WorldGuard区域目标 &#039;&#039;region&#039;&#039; ====&lt;br /&gt;
完成这个目标需要进入指定区域，唯一的参数是区域名称。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;region beton events:kill label:trap&#039;&#039;&lt;br /&gt;
==== WorldGuard区域条件 &#039;&#039;region&#039;&#039; ====&lt;br /&gt;
条件会在玩家处于指定区域时成立，唯一的参数是区域名&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;region beton&#039;&#039;&lt;br /&gt;
[[分类:优秀条目申请]] [[分类:角色]] [[分类：娱乐]]&lt;/div&gt;</summary>
		<author><name>星辰</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=BetonQuest&amp;diff=1485</id>
		<title>BetonQuest</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=BetonQuest&amp;diff=1485"/>
		<updated>2015-10-02T16:09:59Z</updated>

		<summary type="html">&lt;p&gt;星辰：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=BetonQuest&lt;br /&gt;
|版本=v1.7.3&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.2-1.8.3&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/betonquest/&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;center&amp;gt;[[文件:BetonQuestLOGO.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{待完善}}&lt;br /&gt;
[[Category:娱乐]] [[Category:角色]]&lt;br /&gt;
BetonQuest是一个高大上的任务插件。它不像传统的将任务变成一个与对话绑定，而是网状结构(即类似Gal的剧情系统)。&amp;lt;br&amp;gt;&lt;br /&gt;
你的任务不一定要像&amp;quot;击杀, 带来物品, 获得奖励&amp;quot;这样: 你可以创建一个多条路线的任务，通过与NPC的对话，玩家可以进入不同的路线，获得不同的任务奖励。&lt;br /&gt;
== 特点 ==&lt;br /&gt;
*你的冒险不止一条路可以走&lt;br /&gt;
*强大的事件系统:可以在任何地方发生你想的事情&lt;br /&gt;
*强大的条件系统:你可以限制任何事情的(不)发生&lt;br /&gt;
*拥有队伍系统，这带来了团队任务&lt;br /&gt;
*与NPC的对话的多样性&lt;br /&gt;
*所有的日志记录在一本书中&lt;br /&gt;
*独立的任务物品背包&lt;br /&gt;
*可以对物品操作，甚至是书中的文本&lt;br /&gt;
*可以给玩家增加标签(tag)来储存信息&lt;br /&gt;
*完善的荣誉系统&lt;br /&gt;
*位置监听:当玩家进入指定区域会触发事件&lt;br /&gt;
*每日任务和可重复任务&lt;br /&gt;
*任务可以分配到不同的包(方便管理)&lt;br /&gt;
*支持Citizens2&lt;br /&gt;
*MythicMobs, Skript, WorldGuard和Vault的混合(意思就是全部支持)&lt;br /&gt;
*多语言支持并且非常容易翻译&lt;br /&gt;
*玩家可以选择自己的语种&lt;br /&gt;
*可以使用API创建你自己的事件、条件、目标(Developer)&lt;br /&gt;
*支持SQLite&amp;amp;MySQL数据库&lt;br /&gt;
*可备份的配置及数据&lt;br /&gt;
*自动升级&lt;br /&gt;
== 概览 ==&lt;br /&gt;
这插件到底怎样运作？我将以一个简单的伐木任务为例来描述。请注意“事件”、“条件”和“目标”之间的区别。&amp;lt;br&amp;gt;&lt;br /&gt;
首先，你需要创建一个和NPC的对话。玩家可在对话内的多个选项中进行选择，NPC会根据选项做出不同的反应（例如NPC会在玩家要求工作时告诉他去砍些树） 。同时，在某些地方会有“事件”被触发，增加一个获得木头的“目标”。它将会把该玩家标记为开始任务的人。从现在开始，NPC会在对话中使用不同的选项，例如他会让玩家快点干活。这些选项将会基于“条件”被选择。&amp;lt;br&amp;gt;&lt;br /&gt;
当玩家完成“目标”时（例如通过摧毁木头），“事件”将会触发，将这个玩家标为采集木头的人。当玩家返回NPC处并与其对话时，NPC将以“条件”来核对玩家是否真的拥有那块木头。如果是的话，他将触发给予奖励的“事件”。&amp;lt;br&amp;gt;&lt;br /&gt;
我们没有创建任何“任务”对象，只是创建了一个能触发“事件”并与“条件”进行核对的对话。“目标”当然也不是“任务”，它只能在玩家得到木头时标记该玩家，不能单独存在。另一方面，该对话可以在之后开始其他任务（例如挖一些矿石），所以“目标”也不是“任务” &amp;lt;br&amp;gt;&lt;br /&gt;
不要为举的例子感到失望，这些只是简化后的过程，所以我可以更简单的解释这个系统，其实用BetonQuest可以做到更多&amp;lt;br&amp;gt;&lt;br /&gt;
这些对话可以像在Baldur&#039;s Gate或是Skyrim一样有多种路线，任务可以有多种方式来结束，也可以有很多不同的影响玩家声誉的结局，就靠你来决定了。&amp;lt;br&amp;gt;&lt;br /&gt;
这个插件也包含了一个在书中的日志。你玩过Morrowind吗? 它们差不多一样，我们只是保留了你查看日志的顺序，所以你不必翻好几百页。现在完成任务并不需要显示像“你收集了所有的矿石，现在回到矿工那儿！”这样的信息。反之，它可以更新玩家的日志，加入像这样的新的记录：“我收集了所有的矿石，我需要回到矿工那儿去拿奖励！”。这样会显得真实得多。&lt;br /&gt;
== 安装 ==&lt;br /&gt;
#首先您可以安装Citizens插件,你可以在[http://dev.bukkit.org/bukkit-plugins/citizens/ Bukkit]找到它.&lt;br /&gt;
#不过这不是前置插件,您也可以用方块来做NPC不过那样会减少真实感&lt;br /&gt;
#下载BetonQuest插件,将.jar放在您的插件文件夹中并启动服务器.BetonQuest将会生成配置文件.&lt;br /&gt;
#如果您想使用MySQL进行储存数据,打开config.yml，填写您的数据库信息.如果不想,留空就好了,插件会使用SQLite来代替.&lt;br /&gt;
#如果您不想使用自动更新,在禁用它之前,请重新启动服务器或重新加载插件.&lt;br /&gt;
#当您认为完成之后,您可以重新加载插件(/q reload).现在让我们来学习BetonQuests插件的基础知识吧.&lt;br /&gt;
== 指令 ==&lt;br /&gt;
 /j – 给予一本日志&lt;br /&gt;
 /backpack – 打开背包&lt;br /&gt;
 /q – 列出所有可用的管理员指令&lt;br /&gt;
 /q reload – 重载插件&lt;br /&gt;
 /q objectives &amp;lt;playerName&amp;gt; [list/add/del] [instruction] –列出/修改玩家目标&lt;br /&gt;
 /q tags &amp;lt;playerName&amp;gt; [list/add/del] [tag] – 列出/修改玩家的标签&lt;br /&gt;
 /q points &amp;lt;playerName&amp;gt; [list/add/del] [category] [amount] – 列出/修改玩家在所有阵营的点数&lt;br /&gt;
 /q journal &amp;lt;playerName&amp;gt; [list/add/del] [package.pointer] [date] - lists&lt;br /&gt;
 /q event &amp;lt;playerName&amp;gt; &amp;lt;package.eventID&amp;gt; - 为玩家激活一个事件&lt;br /&gt;
 /q condition &amp;lt;playerName&amp;gt; &amp;lt;package.conditionID&amp;gt; - 显示玩家是否经历过指定的环境&lt;br /&gt;
 /q item &amp;lt;package.itemID&amp;gt; - 创建一个基于你手中物品的物品&lt;br /&gt;
 /q config &amp;lt;set/add/read&amp;gt; &amp;lt;path&amp;gt; [value] – 操作配置项&lt;br /&gt;
 /q purge &amp;lt;playerName&amp;gt; - 删除玩家数据&lt;br /&gt;
 /q backup – 创建配置文件和数据库的备份&lt;br /&gt;
 /q create &amp;lt;package&amp;gt;: 创建一个新的包并包含默认任务&lt;br /&gt;
 /q vector &amp;lt;packname.variable&amp;gt; &amp;lt;newvariable&amp;gt;: 计算第一个位置变量到你的位置并且储存到第二个参数中&lt;br /&gt;
 /questlang &amp;lt;lang&amp;gt; - 改变玩家的语言(如果由控制台使用就可以改变全局语言)&lt;br /&gt;
=== 缩写 ===&lt;br /&gt;
*/j: bj, journal, bjournal, betonjournal, betonquestjournal&lt;br /&gt;
*/backpack: b, bb, bbackpack, betonbackpack, betonquestbackpack&lt;br /&gt;
*/q: bq, bquest, bquests, betonquest, betonquests, quest, quests&lt;br /&gt;
**objective: o, objectives&lt;br /&gt;
**tag: t, tags&lt;br /&gt;
**point: p, points&lt;br /&gt;
**event: e, events&lt;br /&gt;
**condition: c, conditions&lt;br /&gt;
**journal: j, journals&lt;br /&gt;
**item: i, items&lt;br /&gt;
**create: package&lt;br /&gt;
*/questlang: ql&lt;br /&gt;
=== 详情 ===&lt;br /&gt;
*/q reload重载所有配置，但是不是所有东西都会被保存。当数据库保存时，不可以修改玩家数据。数据库也是一样，你需要重启/重载服务器才可以保存数据库&amp;lt;br&amp;gt;&lt;br /&gt;
*标签相关的命令可以让你快速的编辑它 ，&#039;/q tags Beton&#039; 将会列出Beton这个玩家的标签。&#039;/q tags Beton add test&#039;将会添加&amp;quot;test&amp;quot;标签给玩家，并且 &#039;/q tags Beton del test&#039; 会移除它&amp;lt;br&amp;gt;&lt;br /&gt;
*点数相关的命令可以操纵点数。向一个类别添加点数应该用&#039;/q points Beton add reputation 20&#039; (给&amp;quot;reputation&amp;quot;添加20点)。你也可以使用负数来减去。 删除全部点数使用&#039;/q points Beton del reputation&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
*日志相关命令与上面两项相同。添加或删除使用 /q journal Beton add default.wood_started (or del)，并且你也可以在结尾加上时间来指定时间，格式为:23.04.2014_16:52。注意要用_来代替空格！名字前必须带上包名，因为命令不属于任何包&amp;lt;br&amp;gt;&lt;br /&gt;
*目标相关命令可以显示玩家的目标。它也可以直接对不表进行操作。记住要在事件/条件前加上包名！如果你想添加一个在events.yml中有定义的目标，只需要使用事件的相关命令&amp;lt;br&amp;gt;&lt;br /&gt;
*使在线玩家激活事件可以使用&#039;/q event Beton default.give_emeralds&#039;这将会为玩家Beton从”default”包激活 &amp;quot;give_emeralds&amp;quot;。也有条件相关的指令来操作，例如&#039;/q condition Beton default.has_food&#039;。事件与条件必须在它们的文件中定义，这个命令不支持原版指令。你可以不写包名，之后插件会自动读取default_package它可以在config.yml设置&amp;lt;br&amp;gt;&lt;br /&gt;
*如果需要创建一个&amp;quot;Nettlebane&amp;quot;任务物品,只需要把它拿在手里之后输入&#039;/q item default.nettlebane&#039;. 你手中的物品就会复制到items.yml 并且以你指定的名称保存(这里是&amp;quot;nettlebane&amp;quot;). 你也可以不输入包名.&amp;lt;br&amp;gt;&lt;br /&gt;
*你可以在. set 项中自定义命令的参数。.add 可以让你快捷的添加字符到存在的值上. (需要注意的地方: 插件不会识别空格，你可以用“_”这个字符来代替空格。例如objective location，是一段存在的字符串，并且你想给它附加 100;200;300;world;10这个值，你的命令应该是/q config add default.events.loc_obj _100;200;300;world;10). read 可以显示配置的值。&amp;lt;br&amp;gt;&lt;br /&gt;
这里的路径就是值的地址。你可以用“.”来表示分支，例如config.language,可以设置语言键的值，同理&amp;quot;bye&amp;quot;这个玩家的配置项路径应该是&lt;br /&gt;
default.conversations.innkeeper.player_options.bye.text&amp;lt;br&amp;gt;&lt;br /&gt;
*你可以使用&#039;/q purge Beton&#039;清除指定玩家的数据. 目前无法使用命令清除整个数据库，但你可以修改数据库的前缀&amp;lt;br&amp;gt;&lt;br /&gt;
如果你想要备份你的设置以及数据，需要你的服务器是空的(需要获取所有数据库的数据&amp;gt;所有玩家离线)之后运行&#039;/q backup&#039;这条命令，你将会获得一个包含所有数据的zip压缩文件。&amp;lt;br&amp;gt;&lt;br /&gt;
*使用&#039;/q create beton&#039; 你可以创建一个名为&#039;beton&#039;的任务，它将会与默认任务相同。&amp;lt;br&amp;gt;&lt;br /&gt;
*/q vector 命令可以让你创建一个由第一个位置变量到你的位置的矢量。结果会储存到&amp;quot;vectors.{第二参数}&amp;quot;&lt;br /&gt;
== 权限 ==&lt;br /&gt;
*betonquest.admin – 允许使用管理员命令(/q ...)且可以创建NPC&lt;br /&gt;
*betonquest.journal – 允许使用/ J指令（默认为玩家）&lt;br /&gt;
*betonquest.backpack –允许使用/backpack 指令（默认为玩家）&lt;br /&gt;
*betonquest.conversation -允许与NPC对话（默认为玩家）betonquest.language -允许改变的语言（默认为玩家）&lt;br /&gt;
== 创建对话 ==&lt;br /&gt;
对话是rpg系统的基础，这是开始或者完成任务的主要方法，也可以制造更多身临其境的游戏体验。你制作的每一个对话文件都放在在&amp;quot;conversations&amp;quot; 目录下。(更多相关信息请看&amp;quot;default&amp;quot;文件夹里面的 BetonQuest目录)对话文件文件必须以.yml为后缀，比如 innkeeper. yml&lt;br /&gt;
&lt;br /&gt;
让我们来脑补一下。然后我们可以尝试去弄清楚如何完成它。在玩家的眼里面看上去是这样的:玩家右击npc(让我们把npc称作小芳玩家称作小五)小芳说出她的初始文本，然后小五可以从中选择,假设有三个选项。小五在聊天栏输入 1（或者2，3),然后小芳继续对话。小五再一次拥有选项去选择之类的。如果小五输入其他例如字母或者较大的数字。小芳会做出她无法理解他的回应。&lt;br /&gt;
&lt;br /&gt;
每一个对话必须设定npc名字（一些对话不可以绑定任何npc，所以指定它非常重要，即使还没有这个npc），他的初次问候选项，他对未知玩家的回答和最终事件。&lt;br /&gt;
&lt;br /&gt;
注意1:配置文件使用yaml格式。如果你不知道什么是yaml，cnm不会百度么(can u f**k the Google?)?最主要的规则是当你进入更深层的阶层树时你要用两个空格代替标签。如果你想使用单引号(必须半角)，你需要确保还有另一个单引号且它们分别处于文本开头及结尾 (例如上面的未知配置项)。当写为ture或者false时它依旧需要用&#039;围起来。如果你想用&amp;amp;来做一行的开头，那么你需要在开头结尾加上单引号。&lt;br /&gt;
注意2:上文的对话只是一个栗子。它并不是有效的，因为它缺少了很多其他的设置。&lt;br /&gt;
== 支持插件 ==&lt;br /&gt;
BetonQuest可以支持其他的插件，使用它们的功能。目前有三个插件: Citizens, Vault and MythicMobs.&lt;br /&gt;
=== Citizens ===&lt;br /&gt;
如果你有这个插件就可以创建NPC 来对话。我非常建议安装这个插件，NPC可以让对话更真实。Citizens也可以让你的NPC击杀的目标。&lt;br /&gt;
==== NPC击杀目标 &#039;&#039;npckill&#039;&#039; ====&lt;br /&gt;
NPC击杀目标需要玩家击杀指定ID的NPC。你也可以设置杀多少次NPC。目标名称后面必须是NPC的ID。你可以用&#039;&#039;amount:&#039;&#039; 设置数字。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;npckill 16 amount:3 events:reward label:citizens&#039;&#039;&lt;br /&gt;
==== NPC互动目标 ====&lt;br /&gt;
玩家必须与指定ID的NPC交互。它也可以关闭动作，这样对话就不会触发了。第一个参数是数字(NPC的ID)第二个是设置项 &#039;&#039;cancel&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;npcinteract 3 cancel conditions:sneak events:steal label:stealing&#039;&#039;&lt;br /&gt;
=== Vault ===&lt;br /&gt;
安装Vault你可以有权限事件和金钱条件/事件。&lt;br /&gt;
==== 权限事件 &#039;&#039;permission&#039;&#039; ====&lt;br /&gt;
删除或者增加一个组的权限。第一个参数是&#039;&#039;add&#039;&#039;或者&#039;&#039;remove&#039;&#039;，这很好理解。第二个是 &#039;&#039;perm&#039;&#039;或者&#039;&#039;group&#039;&#039;，这个也不难弄清楚。下一个就是你要添加或者删除的字符串。最后你需要指定一个世界。如果世界为空的话，这个修改就会变成全局的。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;permission remove group bandit world_nether&#039;&#039;&lt;br /&gt;
==== 金钱事件 &#039;&#039;money&#039;&#039; ====&lt;br /&gt;
从玩家的帐户存取款，只有一个参数，就是数量，它可以是负数。&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;money -100&#039;&#039;&lt;br /&gt;
==== 金钱条件 &#039;&#039;money&#039;&#039; ====&lt;br /&gt;
检查玩家的金钱是否足够，也只有一个参数，即需要达到的数值，不能为负&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;money 500&#039;&#039;&lt;br /&gt;
=== MythicMobs ===&lt;br /&gt;
你可以设置MythicMobs怪物击杀目标和MythicMobs生成怪物的事件。&lt;br /&gt;
==== MythicMobs怪物击杀目标 &#039;&#039;mmobkill&#039;&#039; ====&lt;br /&gt;
完成这个目标需要击杀指定数量的指定怪物。第一个参数必须是怪物的内部名称(在MythicMobs的配置中有)。你可以添加&#039;&#039;amount:&#039;&#039;来指定击杀的数量&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;mmobkill SkeletalKnight amount:2 events:reward label:mythicmobs&#039;&#039;&lt;br /&gt;
==== MythicMobs怪物生存事件 &#039;&#039;mspawnmob&#039;&#039; ====&lt;br /&gt;
在指定的地方生成指定数量的怪。第一个参数应该是位置，格式是&#039;&#039;100;200;300;world&#039;&#039;。第二个是MythicMobs的内部名字(在MythicMobs的配置中有)后面跟一个冒号和等级。第三个是数量(必填)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;mspawnmob 100;200;300;world SkeletalKnight:1 5&#039;&#039;&lt;br /&gt;
=== Skript ===&lt;br /&gt;
BetonQuest也可以与Skript联动。为了避免混淆，我会使用插件的名称(Skript的一些事件BetonQuestnt也有。Skript可以让你通过脚本使用BetonQuest的事件，并且也可以用BetonQuest执行脚本。&lt;br /&gt;
==== Skript事件通过 BetonQuest &#039;&#039;skript&#039;&#039; 事件触发 ====&lt;br /&gt;
这里描述了Skript事件和BetonQuest事件。&lt;br /&gt;
#&#039;&#039;&#039;Skript 事件&#039;&#039;&#039; - &#039;&#039;on [betonquest] event &amp;quot;id&amp;quot;&#039;&#039; – 这一行可以触发 &#039;&#039;betonquest&#039;&#039; 中设定好的代码，并且 &#039;&#039;id&#039;&#039; 只能是字符串，且必须与你指定BetonQuest的事件相同。&lt;br /&gt;
#&#039;&#039;&#039;BetonQuest事件&#039;&#039;&#039;- &#039;&#039;skript&#039;&#039; – 这个事件会触发Skript的事件。指令只有一个参数，是事件的ID。必须和Skript中定义的事件相同。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; 脚本: &#039;&#039;on betonquest event &amp;quot;concrete&amp;quot; &#039;&#039;&lt;br /&gt;
events.yml:&#039;&#039;fire_concrete_script: skript concrete&#039;&#039;&lt;br /&gt;
==== Skript条件 ====&lt;br /&gt;
你可以用 &#039;&#039;player meets [betonquest] condition &amp;quot;id&amp;quot;&#039;&#039; 语句检查BetonQuest 的条件。Betonquest是配置项，并且 &#039;&#039;id&#039;&#039; 是条件名称，在conditions.yml中定义。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039;脚本: &#039;&#039;player meets condition &amp;quot;has_ore&amp;quot;&#039;&#039;&lt;br /&gt;
conditions.yml: &#039;&#039;has_ore: item iron_ore:5&#039;&#039;&lt;br /&gt;
==== Skript事件 ====&lt;br /&gt;
你可以用脚本触发BetonQuest事件。Skript的语句是&#039;&#039;fire [betonquest] event &amp;quot;id&amp;quot; for player&#039;&#039;。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039;脚本: &#039;&#039;fire event &amp;quot;give_emeralds&amp;quot; for player&#039;&#039;&lt;br /&gt;
events.yml:&#039;&#039;give_emeralds: give emerald:5&#039;&#039;&lt;br /&gt;
=== WorldGuard ===&lt;br /&gt;
==== WorldGuard区域目标 &#039;&#039;region&#039;&#039; ====&lt;br /&gt;
完成这个目标需要进入指定区域，唯一的参数是区域名称。&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;region beton events:kill label:trap&#039;&#039;&lt;br /&gt;
==== WorldGuard区域条件 &#039;&#039;region&#039;&#039; ====&lt;br /&gt;
条件会在玩家处于指定区域时成立，唯一的参数是区域名&lt;br /&gt;
&#039;&#039;&#039;例子:&#039;&#039;&#039; &#039;&#039;region beton&#039;&#039;&lt;br /&gt;
[[分类:优秀条目申请]] [[分类:角色]] [[分类：娱乐]]&lt;/div&gt;</summary>
		<author><name>星辰</name></author>
	</entry>
</feed>