====== 事件列表 ====== (版本:2019-01-20 翻译:Afry、kjiang [[https://github.com/bundabrg/BetonQuest/blob/5cac86e6a259b756f45d08372f4d987a67e98c52/docs/07-Events-List.md|原文链接]]) ===== 消息: message ===== **//static//** 可以向玩家对话框中发送一条消息. 可以用''%%&%%''显示颜色 . 可以用 ''%%{lang}%%'' 区分多语言. 这里可以使用和聊天中一样的参数. 但是不能用 ''%%%npc%%%''. **例子**: ''%%message {en} &4You are banned, %player%! {pl} &4Jestes zbanowany, %player%! {de}&4Ich weiß nicht.%%'' ===== 指令: command ===== **//persistent, static//** 通过控制台执行命令. 这里只能用 ''%%%player%%%'' 属性. 可以执行多条指令,用 ''%%|%%'' 分隔. **例子**: ''%%command kill %player%|ban %player%%%'' ===== 传送: teleport ===== 传送玩家到一个位置,可以控制玩家视角. 这个指令会导致强制关闭当前对话. 只有一个位置参数: ''%%100;200;300;world%%'' 或者 ''%%100;200;300;world;90;45%%'' (最后两个值控制玩家视角) **例子**: ''%%teleport 123;32;-789;world_the_nether;180;45%%'' ===== 积分: point ===== **//persistent//** 指定玩家一种积分进行操作. 可以用乘法. 第一个操作是积分的类型(自己命名), 第二个参数是 加/减/乘. **例子**: ''%%point 管家好感度 10%%'' **例子**: ''%%point 村庄荣誉 *0.75%%'' ===== 删除积分: deletepoint ===== **//persistent, static//** 删除指定玩家的某项积分。 **例子**: ''%%deletepoint 管家好感度%%'' **例子**: ''%%deletepoint 村庄荣誉%%'' ===== 标签: tag ===== **//persistent//** 为玩家添加(add)或者移除(del)标签. 多标签可以用逗号分隔. **例子**: ''%%tag add quest_started,new_entry%%'' ===== 任务控制: objective ===== **//persistent//** 启动/删除/完成任务。格式是''objective 任务名称'',''''可以是''start''、''delete''、''complete''。后面的''任务名称''应该提前在//objectives.yml//中定义。 **例子**: ''objective start wood'' ===== 日记: journal ===== 添加或删除玩家的日记. 第一个参数是添加(add)或删除(delete), 第二个参数定义在 ''%%journal.yml%%'' 中. 也可以直邮一个参数''%%update%%'', 据说挺有用. **例子**: ''%%journal add quest_started%%'' **例子**: ''%%journal delete quest_started%%'' 从日志中删除一个页面 **例子**: ''%%journal update%%'' ===== 闪电: lightning ===== **//static//** 根据给出的位置搞一个闪电出来. 只有一个这样的参数: ''%%100;200;300;world%%'' **例子**: ''%%lightning 100;64;-100;survival%%'' ===== 爆炸: explosion ===== **//static//** 制造一个爆炸. 据说能着火和摧毁方块. 能定义爆炸能量,但是不要炸服. TNT能量是4,凋零是7. 第一个参数定义是否着火(类似恶魂). 第二个参数定义是否会破坏方块. 第三个是爆炸能量. 最后一个参数是位置. **例子**: ''%%explosion 0 1 4 100;64;-100;survival%%'' ===== 给物品: give ===== 给玩家物品. 这些物品在 ''%%item.yml%%''定义. 用逗号隔开,每个物品可以用分号指定数量,默认数量是1. 如果背包没有位置,会掉在地上, 除非他们是任务物品. 这些东西会放在玩家背包,你可以写一个提示. **例子**: ''%%give emerald:5,emerald_block:9%%'' ===== 移除物品: take ===== 从玩家背包移除物品. 要注意的是,不要让玩家钻了“把扔物品扔地上再执行这个事件”的空子. 需要先判断玩家是否有这些物品! **例子**: ''%%take emerald:120,sword%%'' ===== 药水效果: effect ===== 给玩家药水效果。[[https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html|效果列表]],第二个参数代表药水效果的时间是多少秒,第三个代表了药水的等级。可以使用''ambient'' 可以让玩家看不到药水的视觉特效(类似于信标)。隐藏粒子特效添加''ambient'',不显示右上角图标则添加''noicon''。 **例子**: ''effect POISON 45 1 ambient hidden'' ===== 移除药水效果: deleffect ===== 移除玩家身上的药水效果。如果效果填写''any''则移除全部药水效果。 **例子**: ''deleffect ABSORPTION,BLINDNESS'' ===== 对话: conversation ===== 让玩家开始一个对话,只有一个参数,对话的ID. 这个需要对话的权限(应该都有)! **例子**: ''%%conversation village_smith%%'' ===== 杀死: kill ===== 一言不合就杀玩家. **例子**: ''%%kill%%'' ===== 生成生物: spawn ===== **//persistent//**, **//static//** 在指定的位置放置一定数量的某种生物。第一个参数是坐标位置,然后第二个是[[https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html|怪物类型]],第三个是数量。最后一个是可选参数,你可以给怪物取个名字,名字内所有的空格需要用''%%_%%''代替。除此之外,你还可以通过`marked:`给怪物添加一个隐藏标记,你可以在`mobkill`任务目标检中使用这个标记,来限定被杀的生物必须具有这个标记。 你还可以指定生物的装备和手持物品,如''h:''头盔、''c:''胸甲、''l:''腿部、''b:''鞋子、''m:''主手、''o:''副手,每样只可以规定一个物品所以不用填数量。物品名称来自''items.yml''。另外你还可以通过''drops:''指定生物死亡时的掉落物品,物品名称后面用'':''填写数量,多个物品用'',''隔开。 **例子**: ''spawn 100;200;300;world SKELETON 5 marked:targets'' **例子**: ''spawn 100;200;300;world ZOMBIE 1 name:Bolec h:blue_hat c:red_vest drops:emerald:10,bread:2'' ===== 时间: time ===== 设置或增减时间,24小时制。分钟可以用小数表示。 **例子**: ''%%time +6%%'' ===== 天气: weather ===== 设置天气. 参数是不需要翻译的 ''%%sun%%'', ''%%rain%%'' or ''%%storm%%''. **例子**: ''%%weather rain%%'' ===== 事件包: folder ===== **//persistent, static//** 可以一次性执行多个''事件''任务。每个任务之间可以延时执行。这个是//持续persistent//事件,所以即使玩家退出游戏了,BetonQuest依然会执行folder内的任务。需要注意的是,当玩家退出游戏后所有的//条件Conditions//都会变成//失效false//,所以这些事件都不能有任何前提条件! 这个事件有两个可选参数,''%%delay:%%'' 和 ''%%random:%%''。''delay''默认是0,单位是秒。''random''是事件执行的个数,如果为0或者不写这个参数,将会执行folder内的全部''事件''。 **例子**: ''%%folder event1,event2,event3 delay:5 random:1%%'' ===== 设置方块: setblock ===== **//persistent, static//** 可以给一个位置设置材料. 第一个参数是材料的名字 ([[https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html|材料列表]]). 有个可选参数''%%data:%%'' 是材料的子ID(比如木头就有好多种),整数,默认0。 **例子**: ''%%setblock REDSTONE_BLOCK 100;200;300;world%%'' ===== 伤害玩家: damage ===== 用小拳拳给玩家一定的伤害,可以为小数。 **例子**: ''%%damage 20%%'' ===== 团队事件: party ===== 对''团队Party''内的所有成员执行一系列事件。关于''团队Party''的更多信息请参阅[[插件手册:betonquest:基本概念#团队|团队 Party]]章节。 **例子**: ''%%party 10 has_tag1,!has_tag2 give_reward%%'' ===== 清除生物: clear ===== 清除一定区域内的指定生物。第一个参数是([[https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html|生物类型]]),第二个参数是 坐标''%%100;200;300;world;10%%'',然后是刷怪半径。可以指定名字 ''%%name:%%'' 参数。 **例子**: ''%%clear ZOMBIE,CREEPER 100;200;300;world 10 name:Monster%%'' ===== 多任务: run ===== 可以一次性执行多个//事件event//。为了区分每个任务,开头部分需用''%%^%%''标记。有别于//任务包folder//,你需要填写具体的event而不是event的名字。另外,这些//event//会在一个//时刻tick//内一次性执行而不是逐个//tick//轮流执行。因为Bug的原因,请不要使用//条件Condition//判断,作者表示此问题将会在1.9版修复。 **例子**: ''%%run ^tag add beton ^give emerald:5 ^entry add beton ^kill%%'' ===== 给日记本: givejournal ===== 类似于 **/j** 命令. **例子**: ''%%givejournal%%'' ===== 玩家指令: sudo ===== 类似于''%%command%%''指令,这个相当于玩家自己输入指令。 **例子**: ''%%sudo spawn%%'' ===== 超级玩家指令: opsudo ===== 类似于''%%command%%''指令,但是这个相当于玩家使用超级管理员(op)权限使用指令。 **例子**: ''opsudo fly'' ===== 往箱子里添加物品: chestgive ===== **//persistent, static//** 往箱子/容器里添加物品。如果容器满了,那么加不进去的物品就会掉到地上。添加的对象可以是箱子/陷阱箱/漏斗/投掷器/熔炉等等。当所在位置并没有任何容器的时候,BetonQuest会在服务器//控制台console//中显示一个错误。 **例子**: ''chestgive 100;200;300;world emerald:5,sword'' ===== 从箱子里移除物品: chesttake ===== **//persistent, static//** 和take类似,但这个事件会从箱子等容器移除物品,参数定义和''chestgive''事件一样。 **事件**: ''chesttake 100;200;300;world emerald:5,sword'' ===== 清空箱子: chestclear ===== **//persistent, static//** 这个事件会清空箱子等容器内的全部东西,唯一的参数是坐标。 **例子**: ''chestclear 100;200;300;world'' ===== 导航/指南针: compass ===== 当启动这个事件的时候,玩家可以让他的指南针指向特定的坐标。玩家还需要打开他的背包并点击“指南针”才可以选择坐标。第一个参数是//添加//''add''或//删除//''del'',第二个参数是''坐标的名字'',坐标名字在''main.yml''中定义。 目的地坐标必须提前在''main.yml''定义。你可以根据不同语言指定''目的地的名字'',你也可以干脆为所有//语言//直接写一个通用名字而不用管翻译问题。另外可选的你还可以自定义一个//物品(在''items.yml''中定义)//作为按钮图标,用于在玩家背包中展示。一个compass的配置文件例子如下: compass: beton: name: en: Target pl: Cel location: 100;200;300;world item: scroll **例子**: ''compass add beton'' ===== 取消任务: cancel ===== 类似于GUI里面的任务取消按钮,这个事件用来取消某个任务。启动这个事件相当与玩家自己点击取消任务按钮。唯一的参数是需要取消的''任务名称'',这个名称来自配置文件''main.yml''。 **例子**: ''cancel wood'' ===== 记分板Scoreboard: score ===== 和''积分point''类似,唯一的区别是这个功能使用的是Minecraft自带的记分板Scoreboard。你可以加/减/乘/除某个''记分项目''的积分。第一个参数是记分项目名称,第二个是加减乘除的分数,正数加,负数减,''*n''乘,乘以小数则是除。 **例子**: ''score kills 1'' ===== 拉杆: lever ===== **//持续的, 静态的//** 这个事件可以用来控制拉杆。第一个参数是拉杆所在的坐标,第二个是''on''打开、''off''关闭、或''toggle''扳动。 **例子**: ''lever 100;200;300;world toggle'' ===== 门: door ===== **//持续的, 静态的//** 可以用来控制门、陷阱门、栅栏门等。参数和上面的''lever''拉杆一样。 **例子**: ''door 100;200;300;world off'' ===== If else逻辑判断: if ===== 此事件可以根据某个//condition//的判断结果,决定执行第一个还是第二个//event//。基本格式是''if condition1 event1 else event2'',这里''condition1''来自于''conditions.yml'',''event1''和''event2''则是另外两个来自''events.yml''的事件名称。基本逻辑是,如果''conditions1''是满足的,那么启动事件''event1'',否则就启动事件''event2''。 **例子**: ''if sun rain else sun'' ===== 变量: variable ===== 这个事件只有一个功能:改变某个保存在//变量任务目标 Variable Objective//中的值。第一个参数是来自//variable objective//的ID(输入其它ID将会报错),第二个是''变量的名称'',第三个是需要更改的值。第二和第三个参数你可以直接使用''%...%''这样的值。关于''变量目标 variable objective''的更多信息请参阅[[插件手册:betonquest:任务目标#变量variable|任务目标:变量variable]]了解跟多关于变量的信息。 (kj:我看到也一脸懵比,可能翻译有误,所以英文原文摆这里了)This events has only one purpose - to change variables stored in `variable` objective. The first argument is the ID of a `variable` objective (if you use any other type you will get an error). Second one is the key of the variable and the third is the value. Both can use `%...%` variables. Refer to `variable` objective documentation for information about storing variables. **例子**: ''variable some_var_obj name %player%'' ===== Title: title ===== This event displays a title or a subtitle. The first argument is the type (''title'' or ''subtitle''), second argument are title's duration times (in ticks) separated by semicolons - fade in, stay and fade out: ''20;100;20''. If you set it to three zeros (''0;0;0'') the plugin will use default Minecraft values. After these two required arguments there is a title message, formatted like in the ''message'' event, which supports multiple languages, color codes and variables. Keep in mind that the subtitle will only appear if the title is visible - that's how Minecraft works. **Example**: ''title subtitle 0;0;0 {en} Lobby joined! {pl} Dołączono do lobby!'' ===== Language: language ===== This event changes player's language to the specified one. There is only one argument, the language name. **Example**: ''language es'' ===== Play sound: playsound ===== 此事件将为玩家播放指定的声音。唯一必需的参数是声音名称(如果您使用的是资源包,则可以使用自定义值)。还有一些可选参数。 ''location:'' 在固定地点播放音乐, ''category:'' 是 [[https://hub.spigotmc.org/javadocs/spigot/org/bukkit/SoundCategory.html|声音类型]] (如果没有指定,将默认使用 ''MASTER''), ''volume:'' 是一个控制音量的小数, ''pitch:'' 控制音高 **例子**: ''%%playsound ENTITY_EXPERIENCE_ORB_PICKUP location:100;200;300%%'' ===== Give experience: xp ===== Gives the specified amount of experience points to the player. If you want to give whole levels to a player add the `level` argument. **Example:** ''xp 4 level'' ===== 显示通知: notify ===== 使用[[插件手册:betonquest:通知提示|NotifyIO通知提示系统]]触发一个通知。第一个参数是你需要显示的通知内容。第二个可选参数是[[插件手册:betonquest:通知提示#通知类型|通知类型]]''category:'',如果有多个可用英文逗号分隔开。你还可以通过''io:''参数[[插件手册:betonquest:通知提示#notifyio通知方式|选择NotifyIO来自定义通知显示的方式]]。如果你决定采用自定义通知,你需要用''选项:值''的格式在后面为NotifyIO添加具体的参数。 如果你既不设定一个有效的''category:''类型,也没在''custom.yml''中定义过默认的类型,那么你必须指明具体用哪一个''io:'',否则系统会直接使用默认的io(一般情况下是聊天框)展示你的通知内容。 具体请参阅[[插件手册:betonquest:通知提示|通知与提示]]章节。 **例子: ** ''notify 这是一个测试 category:类型A io:bossbar barColor:red sound:BLOCK_CHEST_CLOSE''\\ (上例中用到[[插件手册:betonquest:通知提示#boss血条bossbar|Boss血条 NotifyIO]]) ===== 全局积分: globalpoint ===== **//persistent, static//** 这与正常点事件的工作方式相同,但它操纵全局类别中的积分,而不是操纵特定玩家类别的积分。这些全局类别与玩家无关,因此您可以例如在每次玩家执行任务时向此类全局类别添加一点积分,并为第 100 个执行任务的玩家提供一些特殊奖励。 **例子**: ''globalpoint global_knownusers 1'' ===== 全局标签: globaltag ===== **//persistent, static//** 与普通标签事件的工作方式相同,但不是为一个玩家设置标签,而是为所有玩家设置全局标签。 **例子**: ''globaltag add global_areNPCsAgressive'' ===== 随机选择: pickrandom ===== **//persistent, static//** 另一个事件容器。它选择一个(或多个)给定的事件并运行它。您必须通过在事件 ID 之前添加百分比来指定每个事件被选中的可能性。如果您的总百分比高于 100%,则事件不会中断。 默认情况下,它会从列表中随机选择一个事件,但如果添加 ''%%amount:3%%'' 就会选择随机三个事件,并且''%%amount:0%%''的时候什么都不做。 如果使用变量,则事件名称前必须有两个,一个来自变量,另一个来自事件的语法。 **例子**: ''%%pickrandom 20.5%event1,0.5%event2,79%event3 amount:2%%'' **例子**: ''%%pickrandom %point.factionXP.amount%%event1,0.5%event2,79%event3,1%event4 amount:3 ''