Smokey_Days
取消任务

如果你想让你的玩家取消任务,有一个功能可以做到。在main.yml文件中有被称为cancel的分支。您可以在这儿指定可以取消的任务和取消它们所需要完成的操作。你同样可以在default包中找到一个例子。您可以指定的参数有:
  • name - 这将是显示给玩家的名称。_(英文半角下划线)将转换为空格。如果您想要启用翻译/多语言系统,您可以在此添加其他语言的选项(en,cn等等)
  • conditions - 在这儿你列出删除任务所需要的条件,用 , 也就是英文半角逗号分隔多个条件。例如,你可以通过这个来令玩家必须完成任务的某个阶段才能停止。
  • objectives - 在这儿请列出你所取消的任务中使用过的目标。这些目标将被取消/不启动
  • tags - 在这儿列出的标签将被全部删除。这些标签应当是任务中使用过的(当然也可以通过这个来实现“取消了就不能再领取的任务”)
  • points - 列在这儿的点数类别将被清空。
  • journal - 这些日志条目将在取消任务时被删除。
  • events - 如果您想在取消任务时执行其他操作(例如惩罚玩家),请在此处列出事件。当玩家取消任务时,这些事件将被执行。
  • loc - 这是当取消任务时,玩家将被传送到的位置。(你可以把它理解为一个传送事件)
  • 要取消任务,你需要打开你的任务物品背包(使用/backpage,并选择命名为“取消/cancel”的按钮(默认显示为骨头物品,将一个物品重命名为“cancel_button”然后放入背包即可修改显示物品)。点击后将显示可以取消的任务列表。点击其中的某个,它将被取消。



全球位置

全局位置是事件可以被触发的位置。你需要从objectives.yml中选择一个位置类型的目标,然后当任何玩家经过这些位置,他们就会触发指定的事件。全球位置将始终启用,即使途径这个位置的玩家没有任何目标,他们也会触发这个位置上的事件。他们可以用于从特定位置开始任务(比如说让玩家经过一个地方然后掉进地牢?),或者传送阵之类的东西。这个系统将使用tag来标识玩家是否处在指定位置。这些tag的格式是这样的:global_<tag>,其中<tag>是位置目标的标签,它需要在指令字符串的末尾定义(例如global_conversation_start,其中conversation_start是位置目标的标记)。您可以在包中的main.yml指定全局变量,例子如下:

  1. global_locations: dungeon_entrance,trap,something_else
复制代码



静态事件


静态事件是将在一天的指定时间触发的事件。它们没有指定玩家,因此所以不是所有的事件类型都可以用作静态事件。(如果使用静态事件,如何指定玩家添加标签和目标?如何指定玩家添加物品?)另外,静态事件也不能设置条件,因为在不指定玩家的情况下,系统无法识别玩家是否满足指定条件。可以作为静态使用的事件,在本Wiki中会使用static关键字进行标记。你可以在main.yml文件的静态部分下定义你的静态事件,语法如下:

  1. static:
  2.   '09:00': beton
  3.   '23:59': lightning_strike
  4.   '11:23': some_command
复制代码

  
小时必须被''包裹(英文半角引号)以避免出现问题,如果数值小于10,那么请使用0来补足两位。beton,lightnint_strike等都是事件的ID。一次只能指定一个事件,但它可以是“folder”类型的折叠事件。


日记



这本日记是一本书,其中描述了所有的冒险经历。您可以通过键入/j直接或键入/b然后从背包中选择它来获取它。你不能把它放到任何箱子,物品展示框之类的地方。如果你觉得日记太烦人/占背包格,那就把它放置回/b打开的任务背包。更新日记需要使用日记类事件,其中援引的文本需要在journal.yml配置文件中自行定义。如果您更新这些文本并重新加载插件,更改将会应用到所有玩家的日记上。日记的默认颜色可以在config.yml中更改。条目可以使用颜色代码,但是只会在该条目中应用——下一个条目将在行首重置为Config中的颜色。

默认情况下,日记的位置是在快捷栏的最后一格。如果你想改变它的位置,那么在config.yml中的default_journal_slot项,尝试修改,直到你确定。

如果您要翻译条目,你要做的和对话一样——到下一行,添加语言ID和对应的文本。

您可以在日志部分中的config.yml文件中控制日记的相关内容。 chars_per_page指定在一个页面上放置多少字符。如果你设置太高,文本会溢出页面,太低,太多页。 one_entry_per_page允许您一页一个条目。在这种情况下,系统将忽略chars_per_page项,BetonQuest将把整个条目放在一个页面上。
reversed_order允许您倒序排放条目,而hide_date将使得条目不显示日期。

您可以在config.yml中的journal_colors部分中设置日记中的颜色:date是每个条目的日期的颜色,line是分割线的颜色,text是文本的颜色。您需要使用不带&的标准颜色代码(意思就是说,直接填写即可。例如,使用“4”来表示深红色)。

您还可以将给日记添加一些固有页面。它是几个字符串列表,只有满足指定的条件才会显示。您可以在main.yml文件中的journal_main_page条目中进行设置。每个字符串可以有多语言系统/翻译,后方可以跟着用英文半角逗号分隔的条件列表。对了,还有个优先级的,它控制这些字符串在固有页面中的显示顺序。你可以在文本中使用变量,但是只有当玩家每次使用/journal命令获取日志时,它们才会被更新。固有页面支持颜色代码。


标签


标签是一小串文本,你可以把它添加给玩家,然后检测玩家是否拥有该标签。标签常常用于检测玩家是否正在进行/已经完成任务。使用标签类事件可以添加标签,而标签类条件则用于检测标签。所有标签都有其单独的包,所以打个比方,如果你从default包中添加beton标签,标签将看起来像default.beton。如果你在default包中检查beton标签,系统默认你在检查default.beton。如果你想使用一个包的事件/条件来检查/添加另一个包的标签,那么你只需要为它的名称添加包名前缀,例如quest.beton


点数


点数和标签有相似之处,但不一样的是,标签是一个有名称的布尔值,但是点数却是一个有类别的变量。例如,可以设置玩家完成某个任务可以赚取某类点数,然后达到指定点数可以和指定NPC交谈。一切皆有可能。你也可以把点数设置为负数。点数有不同的类别,每个类别的点数都单独储存,来自beton类别的点不会与quest中的点混合。当然,你也可以检查玩家是否有(或没有)一定的数额,因此点数可以影响玩家是否达成条件。点数可以用作计数器来计算玩家完成了某个任务几次,或者可以制作一个好感度系统来影响NPC对玩家的态度。



NPC


对话可以分配给NPC。你可以在package中的main.yml文件中的“npcs”部分中进行如下设定:

  1. npcs:
  2.   '0': innkeeper
  3.   '老板': innkeeper
复制代码

  
第一个字符串是NPC的名称,第二个是相应的会话文件名。如果你使用Citizens插件,那么名字请填写NPC的ID(不要尝试把CitizenNPC的名字在这里,它必须是ID)。要获取一个Citizen中NPC的ID,只需要选中它然后键入/npc。如果你不想使用Citizens,你也可以“建”起一个NPC:

在某个地方放置一个任意颜色的染色粘土/粘土块。然后在它的顶部放一个头(类型无所谓,但必须是头)。然后在粘土块的一侧(可以在它的背面)放置一个告示牌,并在第一行中输入[NPC],第二行输入NPC的名称(是NPC名称而并非对话名称。在上述代码示例的情况下,请填写“老板”)。你需要有betonquest.createnpc权限。恭喜,您已创建NPC。现在你可以添加杠杆(当做手),和栅栏门(当做腿)。玩家可以通过右键单击它的头来开始对话。



物品

如果要在Give和Take事件或Item和Hand条件中使用物品,则必须在items.yml文件中设定这些物品。这保证给予的/带走的/手持的/背包中的将是和你要求的完全相同的物品。您可以通过两种方式将它们添加到此文件:

方法一:使用命令/q item <包>.<物品内部名>。它会检测你手中的物品,并把它储存在<包>内的items.yml里面的<物品内部名>名称下。方便快捷。

方法二:手动敲代码。向items.yml添加一行,并键入物品的ID,后跟冒号和空格。现在你需要做的第一件事是插入物品的类型。您可以在这里找到所有可用的物品类型。如果你只是需要一个普通的物品,那么现在就可以结束了。但是你可以添加一些NBT:
  • data:是方块附加值(例如,不同的羊毛颜色)。它后面应该是一个整数。默认值为0,因此在大多数情况下,您可以忽略它。
  • name是物品的显示名称。所有空格应由_替换。
  • lore:是物品的介绍。空格遵循与名称中相同的规则,每一行由分号隔开。
  • enchants:是由命令分隔的附魔列表。每个附魔有两个值,用英文半角冒号分隔:名称和等级。所有的名字都可以在这里找到。这里是例子:
    1. enchants:DAMAGE_ALL:3,KNOCKBACK:2
    复制代码

  • 如果物品是书,您还可以添加title: 和 author: 以及 text:。空格应该始终由_替换。使用|分隔多个页面,您可以用\n来换行。
  • 如果物品是药水,那么你可以添加药水效果:,其中不同的效果用逗号分隔。药水效果的样式如下:
    1. 药水名:X:Y
    复制代码

  • 其中可用的效果名称列表可以在这里找到,X是药水的等级(1就是I,不是II,不像某些插件会自动+1),Y是以秒为单位的持续时间(不是tick)。
  • 如果物品是皮革盔甲部分,您可以通过添加color: (后方跟着颜色数据)指定它的颜色。这里使用RGB颜色系统(例如#ff00ff)。使用此工具可以轻松生成你想要的颜色。如果你需要得到染料的颜色,只需通过/q item 随便一个名称 来保存一个染色的盔甲,然后进入配置文件查看确切的结果。
  • 如果该物品是玩家的头部,您可以通过添加owner: 来指定其所有者,owner后面跟着的是所有者的姓名,例如owner:Notch。注意:当头颅的附加值不为3的时候,这个属性就不会正常运作。
  • 如果这个物品是附魔书,那么请参考enchants条目。

有时候你想要广泛地检测物品,例如检查玩家是否有一柄任何样式的钻石剑(你肯定不希望玩家在没有适当装备的情况下进行危险的任务)。但是有时候,你会遇到一些问题。想象一下,任务要求玩家必须送给某人一柄钻石剑。但他还身上还带有自己名叫Diamond Sword of Beton and Destruction的钻石剑。你肯定不希望随便移除玩家的一柄钻石剑,因为这样可能会移除他的“私人”剑。这时候none选项就变得有用了。

如果你想只定位没有任何附魔的物品,或没有名字(或没有效果的魔药等),你应该把它设为enchants:none 或者 name:none等。该物品将照常使用,但在条件和事件中,将进行有特殊的选取。

物品无法使用多语言功能/翻译,因为在每次更改语言时,无法都跟踪您的每个物品并更改其元数据。抱歉。



关于1.8版本的Minecraft书的重要说明
有些服务器,由于一些插件的影响,在书本每行的末尾默认添加了§0,当插件生成书籍时。它看起来没有什么大不了,因为这个颜色代码只是将下一行的颜色重置为黑色,但它可以搅乱物品的配置(保存到配置的物品不同于您拥有的物品)。因此,我建议您执行以下操作,以确保这两本书(手中的和配置里的)是相同的:

获得所需的书(例如通过写它)
用/q item 书(或任何其他名称,对这个例子而言用什么名称没有关系)保存它,
接着输入指令获得它(/q give 书)
然后把刚刚获得的书再次保存。(最好用相同名字以覆盖掉之前的记录)
再次输入指令获得它
这一次获得的将是和配置中完全相同的
对于由此带来的不便,我们深感抱歉,但是自动删除这些§0会导致一系列的错误。我(指作者)不打算冒险。


例子:

  1. sword: 'DIAMOND_SWORD data:0 name:Slasher lore:Very_powerful;Forged_by_Endermen
  2.   enchants:DAMAGE_ALL:5,KNOCKBACK:2'
  3. potion: 'POTION name:Poison lore:Will_kill_you_in_10_secods_flat effects:HARM:10:0'
  4. book: 'WRITTEN_BOOK title:Book_about_everything author:Notch
  5.   text:The_text_goes_here.|This_is_on_the_new_page.\nAnd_this_is_one_line_below.'
复制代码

  
注意YAML允许换行。



任务背包



有时候,你会希望一些物品不会死亡掉落。如果玩家失去了这些物品,那么任务就会失败。你可以给物品添加一行特殊的介绍,令其绑定给玩家(默认是&2Quest_Item;_,也就是英文半角下划线代表一个空格)。注意,必须是全新的一行介绍!这样,玩家死亡时,这件物品便不会掉落。
例如:
  1. important_sword: 'DIAMOND_SWORD name:Sword_for_destroying__The_Concrete lore:Made_of_pure_Mithril;&2Quest_Item'
复制代码

只需要输入/j你便可以打开你的任务背包。这将打开一个箱子状的GUI,里面可以储存你的物品。第一个槽始终是日记,当你把它拿出来那么这个格子就会变空。你可以通过点击来将任务物品传输到任务背包。左键单击将传输单个任务物品,右键单击将尝试传输所有任务物品。普通物品不能存储在任务背包中,所以这将不会使玩家拥有无限的背包格。

如果你有超过一页的任务物品,将出现按钮(比如用于翻页)。您可以通过在items.yml文件中创建previous_button和next_button物品来自定义这些按钮。它们的名称将被messages.yml中定义的名称覆盖。

正常情况下任务物品不会消失——它们不能被丢弃,也不会死亡掉落。但是有一种情况除外——使用它们(比如说吃掉一个苹果或者喝下一瓶药水)。这样,你就可以制作一个“吃饼干”的任务——给玩家一堆标记为任务物品的饼干,系统将检测玩家背包&任务背包里是否还有饼干,由于饼干是任务物品,玩家无法丢弃,所以为了完成任务,玩家将必须吃掉全部的饼干。

不要担心,在创造模式下,“物品丢失保护器”(也就是上文提到的任务物品不能被丢弃)将不会启用——这不是BUG,这是特性。玩家应当能自由地决定任务物品的去留或者把他们放到某个箱子中(比如宝箱?)。


队伍


组队非常简单。简单到你难以理解其他的冗杂的任务系统。基本上,只有你需要使用队伍,系统才会创建队伍。队伍直接通过条件/事件定义(队伍事件和队伍条件,可以在下面的列表中看到)。在这样的指令字符串中,第一个参数是数字范围。它定义了将要查找队员的半径。第二个是条件列表。只有符合条件的玩家才会被认为是队伍的成员。对于玩家来说,这是最直观的,因为他们不需要做任何事情,没有任何命令,没有GUI,只需要“正在做一样的任务”或者“拥有一样的物品”,你们就是同志了 —— 你的选择意味着你的队伍。

为了更好地了解它如何运作,我会给你一个队伍事件的例子。我的意思是,每个玩家都有一个目标——按下按钮。当玩家按下它时,此事件被触发:

  1. party_reward: party 50 quest_started cancel_button,teleport_to_dungeon
复制代码


现在,这意味着,所有在按下按钮(也就是执行这个指令)的玩家周围50格内并满足quest_started条件的玩家将执行cancel_button和teleport_to_dungeon事件。第一个将取消按下其他按钮的任务(不再需要),第二个将传送把他们传送到某处。
现在,假设在世界的另一边有一个玩家也满足quest_started条件,但他不会被传送到dungeon,因为他没有在50格内;在按下按钮的玩家旁边有一堆其他的玩家,但他们没有满足quest_started条件,因此他们也不会被传送(因为他们没有开始这个任务)。


想要跟踪本帖的,请在下方回复或评分
  1. 这wiki翻译不错,我想订阅
复制代码
这样在每次更新时我会@你

订阅席:
@1345979462 |
@lsz7575 |
@光の旋律 |
@Rolas |
@moshimowang18 |
@S_RwE |
@WM2030 |
@尻雨魔理沙 |
@十年不晚 |
@bo_bo2001 |
后面三个就自动帮忙加订阅了~反正经常看到你们~

来自群组: PluginsCDTribe

lsz7575
NICE..原来静态事件,需要玩家在线...每日任务泡汤了..

1559540917
很棒的教程

1559540917
很棒的教程!

aa846301
訂閱一下 我也想用這個任務插件

3086186853
谢谢你的插件 对我十分有用

498525451
静态事件能不能设置 条件触发 如果可以的话 求个列子

第一页 上一页 下一页 最后一页