sanityko
本帖最后由 1582952890 于 2017-9-17 09:15 编辑


Variable Triggers
本贴只适用于Variable Triggers1.3.3.1及其以下版本
VT2.0版本请自行前往官网查看教程


这是一个十分逆天的插件,虽然说学习量比较大
与其相似的插件有Script Block(SB)等等,但是综合起来VT的功能更为强大,可惜的是由于学习起来比较困难,MCBBS上还没有一个全面的教程。
在经过几个月后的艰苦学习之后我已经能熟练使用VT了,在此我在此制作一个教程,让大家来熟悉这一款十分逆天的插件。


简介


触发器介绍:




生成的配置文件:


使用范例:


Triggers:
    Click Triggers:

    Walk Triggers:

    Event Triggers:

    Command Triggers:

    Area Triggers:

    Inventory Triggers:


Scripts:
Scripts由变量和Script Command和占位符以及功能性占位符组成


    变量:

    Script Command:
        Script Command就是前面有@的那一堆英文啦,这里逐一介绍

    Place Holder(占位符):

    Functional PHS(功能性占位符):


BUG研究与汇报:


虽然是1.7.9的插件但是1.7.2mcpc服务器亲测能用,理论上版本向下兼容











2021.12 数据,可能有更多内容

Variable Triggers本贴只适用于Variable Triggers1.3.3.1及其以下版本VT2.0版本请自行前往官网查看教程


这是一个十分逆天的插件,虽然说学习量比较大
与其相似的插件有Script Block(SB)等等,但是综合起来VT的功能更为强大,可惜的是由于学习起来比较困难,MCBBS上还没有一个全面的教程。
在经过几个月后的艰苦学习之后我已经能熟练使用VT了,在此我在此制作一个教程,让大家来熟悉这一款十分逆天的插件。


简介


Variable Triggers这个插件是这样工作的:首先玩家通过某种方式(以后会讲)触发了触发器(Fire The Tirgger),触发触发器所连接的脚本(Scripts),服务器通过执行脚本来实现某种效果。




触发器介绍:



clicktriggers:点击触发,玩家点击方块后会触发脚本
walkTriggers:行走触发,当玩家走过这个方块时会触发脚本
InventoryTriggers:物品触发,当玩家对某物品栏(自己编辑)中的物品进行操作时触发
AreaTriggers:区域触发,进入某区域(自己圈定)触发或离开时触发
EventTriggers:事件触发,细分为:
    玩家死亡 PlayerDeath
    生物死亡 EntityDeath
    玩家重生 Respawn
    玩家加入游戏 Join
    玩家退出游戏 Quit
    玩家右键点击生物或其他玩家(交互) Interact
    生物出生 EntitySpawn
    聊天 Chat 
    点击某个物品栏里的某样物品(用于Inventory Triggers)Inventory
    定时器 Timer(每分钟触发一次)
    方块被破坏 BlockBreak
    方块被放置 BlockPlaced
    CommandTriggers 输入一个命令(可自定义)触发
以上动作均可以触发脚本



生成的配置文件:
在plugins\VariableTriggers里会生成一堆yml文件,这里讲解一下他们的作用,请使用notepad++来编辑(只支持ANSI格式的中文)
clicktriggers:点击触发的位置,所在世界,冷却时间,所要激发的脚本都在这里面
walkTriggers:行走触发的位置,所在世界,冷却时间,所要激发的脚本都在这里面
InventoryTriggers:自定义物品栏的相关设定储存在这里(后面详解)
AreaTriggers:区域的位置(对角线两个点),区域的名称,所在世界,进入和离开所激发的脚本都在这里面
EventTriggers:事件触发的时间名称,所在世界,冷却时间,所要激发的脚本都在这里面
CommandTriggers:指令触发所输入的指令名称,以及其他相关设定和脚本都在这里面(后面详解)
config:关于VT的一些基础设定,比如wand是什么,adv模式是否开启
vardata:储存变量(后面会讲)的地方,相同obj的变量会被归在一起
backup文件夹:VT储存备份的地方(VT会自动备份)
example.script:用于@CALL的范本(后面会讲到)



使用范例:


这里使用Event triggers做一个范例,在游戏中输入
/vtevent join @IF s <playername> = Sanityko
/vtevent join @PLAYER 欢迎光临
/vtevent join @ENDIF
这三个指令,并且输入/vt st 保存Triggers文件
接下来我们打开EventTriggers.yml
会看到以下内容(#后面内容为解说)
这样只要我进入游戏,聊天框里就会出现一条 欢迎光临的 信息


如果你不喜欢在游戏里编辑,你也可以在生成配置文件里编辑,但是要注意:
任何一行脚本都是以四个空格和- '开头的(均为英文符号
任何一行脚本都是以'结尾的
任何@IF后都会有@ENDIF
若@IF成立后需要执行的脚本比@IF那一行多4个空格(据说多几个都行,但是我没试过)
在yml编写完脚本后在游戏中输入/vt rt(重载triggers文件)或/vt rs(重载script文件)



Triggers:
    Click Triggers:
先做一个简单的右击方块放随机烟花的脚本
输入/vtclick @FIREWORK random random <triggerloc>
然后拿着骨头右键某一方块
这样的话右击该方块就会在触发位置放一个大小形状都随机的烟花出来
在上面的例子中@FIREWORK random random <triggerloc>叫做脚本
其中的<triggerloc>叫做占位符
玩家通过点击(click)触发了这个脚本
但是此时打开clicktriggers.yml你会发现什么也没有
但是别急,输入/vt st(/vtrigger savetriggers)就能看到你的脚本了


关于点击触发的其他指令:
/vtclickview:    查看点击触发的相关信息
/vtclickreset <脚本>:    修改脚本行 输入完毕后拿骨头右键
/vtclickremove:    移除点击触发 输入完毕后拿骨头右键
/vtclickedit <行数> <脚本>:    在某一行添加脚本(大多数脚本都有好几十行,那样的话使用指令极其不方便,推荐在clicktriggers.yml里编辑)



    Walk Triggers:


用法和Click Triggers一样,只是指令不同
关于行走触发的指令:
/vtwalk <脚本>:    基本同Click Triggers里的指令
/vtwalkview:    基本同Click Triggers里的指令
</vtwalkreset< 脚本>:    基本同Click Triggers里的指令
/vtwalkremove:    基本同Click Triggers里的指令
/vtwalkedit <行数> <脚本>:    基本同Click Triggers里的指令



    Event Triggers:


指令:
/vtevent <事件名称> <脚本>(输入即可,不需要骨头点击)
事件名称:
玩家死亡 PlayerDeath
    生物死亡 EntityDeath
    玩家重生 Respawn
    玩家加入游戏 Join
    玩家退出游戏 Quit
    玩家右键点击生物或其他玩家(交互) Interact
    生物出生 EntitySpawn
    聊天 Chat
    点击某个物品栏里的某样物品(用于Inventory Triggers)Inventory
    定时器 Timer(每分钟触发一次)
    方块被破坏 BlockBreak
    方块被放置 BlockPlaced
其它指令:
    /vteventview <事件名称>:基本同Click Triggers
    /vteventremove <事件名称>:基本同Click Triggers
    /vteventedit <事件名称> <行数> <脚本>:基本同Click Triggers



    Command Triggers:
首先呢给大家普及一个单词:argument 在文中是指自变量,什么意思呢,比如你使用give指令时需要用/give <玩家> <物品ID> <数量>其中呢<玩家> <物品ID> <数量>叫做自变量。
相关指令:
/vtcommand <指令名称> <脚本> :创建一个指令以及输入指令后触发的脚本
/vtcommandoverride <指令名称> TRUE/FALSE :设定一个指令的覆盖是否有效(下面会讲覆盖的作用)
/vtcommandpermission <指令名称> <权限节点/REMOVE> :设定/移除一个指令的权限节点
/vtcommandremove <指令名称> :移除一个指令
/vtcommandview <指令名称> :查看一个指令的脚本
/vtcommandedit <指令名称> <行数> <新脚本> :替换一个指令某一行的脚本
/vtrigger cmdlist <指令名称> :若不填写指令名称,会列出所有的Command Triggers,若填写则会显示那个指令的详细信息   关于Override:
其实就是是否覆盖原指令的选项,使用指令或者修改Command.yml都可以开关Override
有以下几种情况:
如果你想创建一个新的指令或覆盖掉原来的指令,请开启Override
如果你只是想扩展原有的指令的话,请关闭Override
    关于权限节点:
    Command Triggers允许玩家自定义权限节点(乱打都行),在Groupmanager插件里可以把这个权限节点添加给玩家
用于Command Triggers的占位符能在占位符或功能性占位符一栏找到



    Area Triggers:


首先呢我们要圈一片地
怎么圈呢,首先拿出我们喜闻乐见的wand(默认是骨头,可以在config.yml里更改)
输入/vt setarea,然后像圈领地一样选择两个点,之后输入/vt definearea Area名称 就万事大吉了。
创建好Area之后呢我们该设置脚本了,输入/vtarea Area名称 <ENTER/EXIT> <脚本>   即可,当然本人还是一如既往地喜欢在游戏外编脚本,输入/vt st即可保存,接下来便可以自由编辑脚本了。关于area的其他指令:
/vt getarea :列出你所在Area的名称,若没有则为null
/vtareaview Area名称 ENTER/EXIT 页数 :查看一个Area的进入/离开脚本
/vtareaview Area名称 ENTER/EXIT 脚本行数 新脚本 :修改脚本(我从来不用)
/vtarearemove Area名称 ENTER/EXIT :移除一个Area的进入/离开脚本,当两样都被删除时自动删除Area
/vtrigger arealist 世界名称 Area名称 :若不输入后面两个变量(世界名称 Area名称),所有世界的所有Area都会被列出来,只提供世界名称,那个世界的全部Area都会被列出来,都提供则会显示该Area的详细信息


接下来是圈地的小贴士,作者提供了这张图:



大意是说若两个Area地重合了,则先圈的Area会覆盖后圈的Area,所以当你要圈一个环环相扣的Area时一定要先圈最里面的


用于Area Triggers的占位符能在占位符或功能性占位符一栏找到



    Inventory Triggers:


用作者的例子来进行解释
首先你需要创建一个物品栏,我们在InventoryTriggers.yml输入以下格式的东西


teleportInventory:
    - 'cancelled: true'
   - 'title: TELEPORTS'
    - 'slots: 9'
    - 'item: wool, meta: 5, amount: 1, name: Spawn, lore: Teleport % &a&ospawn, enchant:durability, slot: 0'
    - 'item: wool, meta: 6, amount: 1, name: PVP, lore: Teleport % &4&opvp, enchant:durability, slot: 1'
    - 'item: wool, meta: 7, amount: 1, name: Minigames, lore: Teleport % &3&ominigames, enchant:durability, slot: 2'


下面详细讲解,
第一行,物品栏的名字
第二行:在玩家从物品栏向外拿东西的时候是否阻止
第三行:物品栏的标题(会显示在物品栏的左上方)
第四行:该物品栏的格数(必须是⑨的倍数)
第五行:什么地方放置什么样的物品,格式如下:item: 物品英文名称(使用give指令或TMI给予玩家物品时会看到,中间有空格时使用_替代), meta: 物品的子ID(如35:3的中3), amount: 数量, name: 物品名称, lore: 物品标签,使用 % 进行换行, enchant:附魔, slot: 位置(居然是从0开始数)*
第六行和第七行和第四行基本一样
值得一提的是,在这里面不一定要严格按照格式来写,我擅自删掉了enchant:附魔,也能够正常运行,不知道删掉其它的会不会


接下来要设置打开方法,请使用@OPENINV 脚本命令进行打开(详细使用方法请看Script Command一栏)
最后设置玩家点击物品栏里的相应物品的时候会执行的脚本,用Event Triggers的Inventor进行设置
脚本如下

解释:如果物品栏标题里含有TELEPORTS
那么对玩家点击的位置进行SWICH
若位置是0,让玩家以op身份输入/spawn
若位置是1,让玩家以op身份输入/warp 玩家姓名 pvp
若位置是2,让玩家以op身份输入/warp 玩家姓名 minigames


不过据说SWICH出了点问题所以我们还是乖乖的用@IF吧


这样就实现了玩家点击第一个羊毛就回到出生点,点击第二第三个羊毛以此类推的功能


用于Inventory Triggers的占位符能在占位符或功能性占位符一栏找到



Scripts:
Scripts由变量和Script Command和占位符以及功能性占位符组成


    变量:


变量是一串能储存数据的字符,变量名称通常为$obj.var(注意格式)
相同obj的变量在vtdata.yml里会被归在一起方便管理


变量名≠变量的值
在一般情况下会使用功能性占位符<var:$obj.var>来表示变量的值(但有些情况下不是,后面说明)


变量的种类:
BOOL:布尔变量,其值只能为true和false
INT:整数变量,其值只能为整数
STR:字符串变量,其值可以为任意数量的字符



    Script Command:
  Script Command就是前面有@的那一堆英文啦,这里逐一介绍


信息类:
@QUITE 玩家姓名 秒数
让玩家的聊天框在一定时间内收不到信息
@CLEARCHAT 玩家姓名
清空玩家的聊天框
@BROADCAST 内容
向全服玩家发送一条广播
@PLAYER 内容
向触发变量的玩家发送一条信息
@TELL 玩家姓名 内容
向玩家发送一条信息
@PRINT 内容
在服务器后台显示一条消息


功能类:
@CALL 文件名:脚本名
还记得example.script.yml吗?将它复制一份并重命名为***.script.yml
举个例子吧,我重命名为123.script.yml,打开后看到一群绿字(可删掉)和有用部分:


代码:

  1. <div>Scripts:</div><div>TestExample1:</div><div>Script:</div><div>- '@PLAYER This is a script line of a script named TestExample1'</div><div>- '@CALL example:testexample1'</div><div>testexample1:</div><div>Script:</div><div>- '@PLAYER Another script named testexample1'</div><div>- '@PLAYER Notice that the names are case sensitive'</div><div>- '@PLAYER A script can have as many lines as needed'</div>



现在我对其进行修改,成果如下:


代码:

  1. <div>Scripts:</div><div>456:</div><div>Script:</div><div>- '@PLAYER 12450'</div>



并进行保存
下面我进入服务器,输入/vtclick @CALL 123:456
并用骨头点击某一方块
然后我再点击该方块,我就会收到一条信息:12450
@CALL 经常用于编写超长脚本而又希望clicktriggers.yml过于复杂难而以管理的情况
是十分重要的脚本
@EXIT
退出脚本,不继续执行下去
@PAUSE 秒数
暂停一段时间,继续执行脚本
@COOLDOWN 秒数
脚本的冷却,在冷却期间无论怎样都不会激活脚本
@CMD 指令(不加/)
让触发玩家执行一条指令
例:@CMD back
@CMDOP 指令
让触发玩家以OP身份执行一条指令
例:@CMDOP restart
@CMDCON 后台指令
让触发玩家以后台身份执行一条指令


WE(世界编辑)类:
@SETBLOCK ID 坐标(x,y,z或变量或占位符)
在坐标x,y,z放一个方块
@SETBLOCKSAFE ID:元数据 坐标
为spigot服务器安全的放置方块
元数据:若方块ID为35:1,其中元数据为1,若没有元数据则填写0
@DROPITEM 物品名称 数量 附魔:等级 附魔:等级 … 坐标
在指定位置掉落(生成)物品
例: @DROPITEM Iron_Sword 1 Sharpness:2,BaneOfArthropods:1 &lt;triggerloc&gt;
释:在变量触发的位置掉落一把锋利II节肢杀手I的铁剑
英文名称自行wiki
@SIGNTEXT 坐标 行数 文本
改变该坐标木牌上指定行数的文本,支持颜色代码
@FALLINGBLOCK 方块名称 坐标
生成一个像沙子一样受重力影响的方块
@ENTITY 生物名称 数量 坐标
生成生物
生物名称:BLAZE, CAVE_SPIDER, CHICKEN, COW, CREEPER, ENDER_DRAGON, ENDERMAN, EXPERIENCE_ORB, GHAST, GIANT, IRON_GOLEM, MAGMA_CUBE, MUSHROOM_COW, PIG, PIG_ZOMBIE, SHEEP, SILVERFISH, SKELETON, SLIME, SNOWMAN, SPIDER, SQUID, VILLAGER, FARMER, BLACKSMITH, BUTCHER, LIBRARIAN, PRIEST, WOLF, ZOMBIE


修改玩家数据类:
@TP 坐标
将触发者tp到某一坐标
@WORLDTP 玩家姓名 世界名称
将某一玩家传送到某世界
@OPENINV 物品栏名称
打开一个物品栏(用于Inventory Triggers
@CLOSEINV 玩家名称
强行关上某个玩家的物品栏
@MODIFYPLAYER 玩家名称 modification
改变玩家的某些数值
可用的modification:
    HEALTH 数字 :改变玩家的生命值
    FOOD 数字 :改变玩家的饱食度?
    SATURATION 数字:不知道……
    EXP 数字/XP 数字 : 改变经验
    WALKSPEED 数字 改变移动速度 超过1特快 0.2有点快 下同
    FLYSPEED 数字:改变飞行速度
    DISPLAYNAME 任意名称:改变玩家的名称
    LISTNAME 任意名称:改变玩家在tab里的名称
    FLYING true/false :开启/关闭飞行
    GAMEMODE creative/survival/adventure :改变玩家的模式
    MAXHEALTH 数字:改变玩家的血量上限
    HELDITEM 英文名称:改变玩家手里的物品
    HELDITEM:ID ID :改变玩家手中的物品为特定ID物品 例:HELDITEM:ID 1 将玩家手中物品换成ID为1的物品
    HELDITEM:META 数字 : 改变玩家手中物品的元数据(子ID,上文提到过)
    HELDITEM:AMOUNT 数字 :改变玩家手中的物品数量 最高为64
    HELDITEM:ENCHANT 附魔名称:为玩家手中的物品附魔(只有1级)
    HELDITEM:DISPLAYNAME 任意名称:改变玩家手中物品的名称
    HELDITEM:LORE:SET 任意名称: 为玩家手中的物品设置标签
    HELDITEM:LORE:ADD 任意名称: 为玩家手中的物品添加标签
    HELDITEM:LORE:REMOVE 标签名称:移除标签
    HIDDEN true/fasle :隐藏玩家在世界里和tab里都看不见
    BANNED true/fasle:需要adv模式,BAN/解BAN掉玩家,但不会将他提出服务器(看不懂了……)
    OPERATOR true/fasle:是否成为OP,需要adv模式


特效类:
@FIREWORK 颜色 种类 坐标
颜色: red, blue, aqua, black, fuchsia, gray, green, lime, maroon, navy, olive, orange, purple, silver, teal, white, yellow, random
种类:ball, ball_large, burst, creeper, star, random
@SMOKE 量 位置:
量:一个数字,最大是5
@PARTICLE 方块英文名称 坐标
让某方块产生颗粒效果(不确定)
@SOUND 音效 坐标
在某位置播放音效
可用音效:BLAZE_SHOOT, BOW_FIRE, CLICK1, CLICK2, DOOR_TOGGLE, EXTINGUISH, GHAST_SHOOT, GHAST_SHRIEK, STEP_SOUND, ZOMBIE_CHEW_IRON_DOOR, ZOMBIE_CHEW_WOODEN_DOOR, ZOMBIE_DESTROY_DOOR
@SOUNDEX 声音 音量 间隔 坐标
音量是0.0到1.0的数字
间隔是0.5到2.0的数字
可用声音查看这里吧http://dev.bukkit.org/bukkit-plu ... r-use-with-soundex/
@SETVELOCITY 玩家姓名 数字1 数字2 数字3:
看不懂,原文如下:


代码:

  1. <div>Push a player in a direction!</div><div>Usage: @SETVELOCITY [player] [x] [y] [z] the numbers for x,y,z are how powerful in that direction to push</div><div>Example: @SETVELOCITY <playername> 0 2 0 this would give about 20 blocks of push</div>



@FLAMES 量 坐标
在某坐标生成火焰
量:一个数字,5为最大
@POOF 量 坐标
生成向四周吹开的烟
量:一个数字,5为最大
@LIGHTNING true/false 坐标
在某处生成造成伤害/不造成伤害的闪电
@EXPLOSION 能量 坐标
生成爆炸
能量为0.0到4.0的数字,设置为0.0只有特效没有伤害


收集类:
@GETBLOCK 变量 坐标
将一个方块的信息存入变量中
变量:格式为$OBJ.VAR其中OBJ和VAR可以是任意单词数字,例:&amp;abc.efg是个变量,其中OBJ只能使用占位符&lt;this&gt;和&lt;playername&gt;(使用playername后每个玩家都会有一个不同的变量。)
@GETENTITYCOUNT 变量 生物名称 半径
将特定半径内的特定生物的数量储存在变量中
@GETLIGHT 变量 坐标
将特定坐标的光照强度存入变量中


变量类:
@SETINT 变量名 整数
定义一个整数变量以及它的值
@ADDINT 变量名 整数
对某一变量进行整数加法
@SUBINT 变量名 整数
对某一变量进行整数减法
@MULINT 变量名 整数
对某一变量进行整数乘法
@DIVINT 变量名 整数
对某一变量进行整数除法
@SETBOOL 变量名 true/false
设置一个布尔变量以及它的正误
@SETSTR 变量名 文本
设置一个STRING变量以及它的内容(文本)
@ADDSTR 变量名 文本
在一个STRING变量的文本后加上文本
@GETSTRLEN 变量名 文本
获取该文本的长度并将其储存进变量里
@DELVAR i/b/s 变量名


删除一个int(整数)/bool(布尔)/string(字符串)变量


阵列列表(由于这部分功能是另一个人开发的所以格式有些不同):
@ADDLIST @obj.var(将变量前的$换成@) 文本
将某文本加入变量
@REMLIST @obj.var 文本
将在变量里的某文本删除
@DELLIST @obj.var
删除这个变量
@obj.var[数字]
将替换成改变量的第几个位置
常用@PLAYER @ obj.var[数字]来检测第几个位置是什么东西
使用IF变量来检测目标文本是否在该变量里
例如@IF @ player.list ?= WinneonSword(注意格式)


条件类:
@IF b/s/i/si 变量 =/!=/&gt;/&lt;/&gt;=/&lt;=/?= 变量/true/false
其中
b是布尔的简称
s是字符串的简称
i是整数的简称
si是模糊的字符串(不区分大小写)


=等于
!=不等于
&gt;大于
&lt;小于
&gt;=大于等于
&lt;=小于等于
?=模糊等于(不太清楚[]
@OR
或者/布尔逻辑中的或门
用于@IF或@AND或@OR后面
与@IF或@AND或@OR同级
@AND
并且/布尔逻辑的与门
同上
@ELSE
否则,例子如下:
- '@SETSTR $player.233 &lt;playername&gt;' 第一行:将字符串变量$player.233的值设定为激活脚本的玩家名称
- '@IF s $player.233 = Sanityko' 第二行:若触发变量的人叫sanityko
- '@OR s $player.233 = DOGE' 第三行:或者叫DOGE
- ' @BROADCAST 233' 第四行:若IF成立向全服广播233
- '@ELSE' 第五行:否则的话
- ' @BROADCAST 12450' 第六行:向全服广播12450
- '@ENDIF' 第六行:结束IF
@ENDIF
不解释


@SWITCH与@CASE
与@IF相像,但是更好
官方例子如下
- '@SWITCH s $object.variable'
- ' @CASE red'
- ' @PLAYER The object is red!'
- ' @CASE blue green orange purple'
- ' @PLAYER The object is blue, green, orange, or purple!'
- '@ENDSWITCH'
其实用@IF和@SWITCH都可以,主要看个人喜好与编程习惯
*:注意没有@ENDCASE但是有@ENDSWITCH


循环类:
@LOOP 次数
对其名下的脚本循环执行
参见上面那个放⑨次烟花的例子
@BREAKLOOP
跳出循环
与@IF使用可实现在某种条件下结束循环
@ENDLOOP
不解释
@WHILE i/b/s/si [vaule] =/!=/&gt;/&lt;/&gt;=/&lt;= [value]
相当于有条件的@LOOP(不会用……)
@ENDWHILE
不解释
@LOOP和@WHILE需要adv模式,在config.yml里开启
@LOOP和@WHILE编辑不当可能会死循环搞坏服务器



    Place Holder(占位符):


占位符是一个在脚本实际运行过程中被替换成特定参数的一串字符,由&lt;&gt;包围


通用类:
&lt;this&gt; 属于字符串(string),会被替换成触发单位的名称,可以是除玩家以外的其他实体单位,能被用作OBJ或VAR的名称(变量是$OBJ.VAR)
&lt;playername&gt; 字符串,会被替换成触发者的名称
&lt;playerdisplayname&gt; 字符串,会被替换成触发者在服务器里显示出来的名称(?可能包括前后缀什么的)
&lt;playerlistname&gt; 字符串,会被替换成玩家在tab里显示的名字
&lt;playerprefix&gt; 字符串,会被替换成玩家的前缀
&lt;playersuffix&gt; 字符串,会被替换成玩家的后缀
&lt;helditemname&gt; 字符串,会被替换成玩家手中物品的名称
&lt;helditemdisplayname&gt; 字符串,会被替换成玩家手中物品的显示名称,如果有的话(不明)
&lt;itemid&gt; 整数,会被替换成玩家激活脚本时手中物品的ID
&lt;playerloc&gt; 字符串,会被替换成触发脚本的玩家坐标
&lt;triggerloc&gt; 字符串,会被替换成脚本触发地的坐标
&lt;issneaking&gt; 布尔,会被替换成true或false,依据玩家是否潜行
&lt;issprinting&gt; 布尔,会被替换成true或false,依据玩家是否奔跑
&lt;health&gt; 整数,会被替换成触发变量时玩家的HP
&lt;worldname&gt; 字符串,会被替换成触发所在的世界名称,能被用作OBJ或VAR的名称
&lt;biome&gt; 字符串,会被替换成触发所在的生物群系名称
&lt;gamemode&gt; 字符串,会被替换成玩家的游戏模式


Command Triggers使用的占位符:
&lt;cmdname&gt;:字符串会被替换成指令名称
&lt;cmdargcount&gt;:整数会被替换成输入指令时输入的自变量数
&lt;cmdline&gt;:字符串会被替换成指令后面的那一段话(也就是所有自变量)
&lt;cmdarg1/2/3/4&gt;(旧版功能):会被替换成第几个自变量(作者为了让旧版本的脚本还能继续使用保留了此功能,但是他推荐使用新版功能)
&lt;cmdarg:数字&gt;(新版功能,属于功能性占位符):会被替换成第几个自变量


Event Triggers下的玩家死亡&amp;生物死亡使用的占位符:
&lt;whodied&gt; 字符串,会被替换成死亡生物的名称或死亡玩家的姓名
&lt;killedbyplayer&gt; 布尔,会被替换成true或false,依据是否是被玩家杀死
&lt;killername&gt; 字符串,被玩家杀死会变成杀人者姓名,被生物杀死会变成空白


Event Triggers下的方块放置&amp;方块破坏使用的占位符
&lt;blockid&gt; 整数,会被替换成方块的ID 如35:11中的35
&lt;blockdata&gt; 整数,会被替换成方块的元数据 如35:11中的11
&lt;blocktype&gt; 字符串,会被替换成方块的整个ID 如35:11中的35:11


Event Triggers下的交互&amp;生物出生使用的占位符:
&lt;entitytype&gt; 字符串,会被替换成生物的种类,例如PLAYER, ZOMBIE, VILLAGER...
&lt;entityname&gt; 字符串,会被替换成生物的名称,若是玩家则为玩家名称,若是村民则为村民职业(FARMER, BUTCHER...)其余和&lt;entitytype&gt;相同


Area Triggers使用的占位符:
&lt;areaentered&gt; 字符串,会被替换成玩家正在进入的Area名称
&lt;areaexited&gt; 字符串,会被替换成玩家正在离开的Area名称


Event Triggers下的聊天触发使用的占位符:
&lt;chatline&gt; 字符串,会被替换成聊天框里玩家打的字
&lt;chatwordcount&gt; 整数,会被替换成聊天的字数

    Functional PHS(功能性占位符):


和普通占位符不一样的是,功能性占位符可以在冒号后面输入一些自定义内容,有些功能性占位符有着特殊的功能


Event Triggers下的聊天触发使用的占位符:
&lt;chatline&gt; 字符串,会被替换成聊天框里玩家打的字
&lt;chatwordcount&gt; 整数,会被替换成聊天的字数


通用型功能性占位符:
&lt;haspermission:权限节点&gt; 布尔,会被替换成true或false,依据是玩家是否有该权限
&lt;haspotioneffect:药效名称&gt; 布尔,会被替换成true或false,依据是玩家是否有该药效效果
&lt;currentloc:玩家姓名&gt; 字符串,若不填写玩家姓名则被替换成触发者的坐标,若填写则替换成填写的玩家的坐标
&lt;random0to:整数&gt; 整数,将会被替换为0到填写的数中的一个随机整数
&lt;random1to:argument&gt; 整数,将会被替换为1到填写的数中的一个随机整数


&lt;totalexp:玩家姓名&gt; 整数,若不填写玩家姓名则被替换成触发者的经验值,若填写则替换成填写的玩家的经验值,若找不到该玩家会替换成空
&lt;relativeloc:坐标:相对坐标&gt; 字符串,会回归为坐标与相对坐标(正负均可)x,y,z分别相加的坐标值
&lt;hasmoney:玩家名称:钱数&gt; 布尔,会被替换成true或false,依据是玩家是否有该数量的钱
&lt;givemoney:玩家名称:钱数&gt; 布尔,会被替换成true或false,依据是给钱是否成功,同时给予玩家钱,对于这种功能后面会详细讲到使用方法
&lt;takemoney:玩家名称:钱数&gt; 布尔,会被替换成true或false,依据是拿走玩家的钱是否成功,同时拿走玩家钱,若玩家钱不够则会被替换为false且不会拿走玩家的钱
&lt;isblocktype:坐标:ID:元数据&gt; 布尔,会被替换成true或false,依据是该位置的方块的ID是否是该ID
&lt;distance:坐标1:坐标2&gt; 整数,会被替换成两个坐标间的距离
&lt;startswith:文本1:文本2&gt; 布尔,会被替换成true或false,依据是文本2是否以文本1开头
&lt;endswith:文本1:文本2&gt; 布尔,会被替换成true或false,依据是文本2是否以文本1结尾
&lt;direction:INT或TEXT&gt; 整数/字符串,会被替换成玩家的方向,若用整数(INT)表示则为1到15的数字,用TEXT表示则为英文,
其中 0 = NORTH, 1 = NORTH_NORTH_EAST, 2 = NORTH_EAST……以此类推
&lt;secondticks:整数&gt; 整数,会被替换成距离1970年1月1日的秒数,填写的整数的话会替换成秒数再加上这个整数得出的值(可以填写负数)
&lt;hour:&gt; 整数,会被替换成游戏里的小时(0到23)
&lt;min:&gt; 整数,会被替换成游戏里的分钟(00到59)
&lt;var:变量名称&gt; 整数/布尔/字符串,会被替换成该变量的值(在@SETINT $Obj.Var 1 中,变量名称是$Obj.Var,值是1)
&lt;getchar:字符串:数字&gt; 字符串,会被替换成该字符串中的第[填写数字]个字母,若没有则替换为空
&lt;hasitem:玩家姓名:物品ID&gt; 整数,会被替换成玩家拥有该物品的数目 *:此处的物品ID不支持元数据(子ID)下同
&lt;giveitem:玩家姓名:物品ID:数量&gt; 整数,会被替换成玩家收到物品的实际数量,并同时给予玩家物品
&lt;takeitem:玩家姓名:物品ID:数量&gt; 布尔,会被替换成true或false,依据是拿走玩家的物品是否成功,同时拿走玩家一定数量物品,若玩家物品不够则会被替换为false且不会拿走玩家的物品。
&lt;uuid:玩家姓名&gt; 会替换成玩家的uuid(不明觉厉)
&lt;playeruuid&gt; 会替换成触发者的uuid
&lt;playerloc:x&gt; 整数,会被替换成触发者的x坐标
&lt;playerloc:y&gt; 整数,会被替换成触发者的y坐标
&lt;playerloc:z&gt; 整数,会被替换成触发者的z坐标
&lt;holdingitem:玩家姓名:物品英文名称&gt; 布尔,会被替换成true或false,依据是玩家手上是否拿着规定物品
&lt;eval:数学运算&gt; 整数,会被替换成运算结果,若在这里使用变量的话需在变量名前后加上%
例:表达5倍的$obj.var加上7就是&lt;eval:5*%$object.var%+7&quot;&gt;


对于给予/拿走物品或钱等等功能性占位符的使用:
若是布尔型,则用
- ‘@SETBOOL $123.456(乱起的) &lt;占位符&gt;’根据需求后面可再设置条件
若是整数型 则用
- ‘@SETINT $456.789(乱起的) &lt;占位符&gt;’



BUG研究与汇报:
暂时懒得写




虽然是1.7.9的插件但是1.7.2mcpc服务器亲测能用,理论上版本向下兼容



GreatGBL
头像不错

sanityko

看来我存在感太低了

Exsu
@-@还是跟编程似得,晕

DouSeiSan
。。。几个月的艰苦学习{:10_499:}

Mayomi
请麻烦修正帖子标题

钟翊
不错,这个可以省掉很多插件诶- -

sanityko
Mayomi 发表于 2014-8-30 01:24
请麻烦修正帖子标题

是加上一个破折号么

Mayomi
sanityko 发表于 2014-8-30 10:01
是加上一个破折号么

[综合|安全|经济|传送|管理]Essentials v2.9.2 —— 一些有用的命令的集合[1.2.5-R4.0]

Yniyer
{:10_503:}表示已哭晕在电脑桌前

sanityko
Mayomi 发表于 2014-8-30 10:13
[综合|安全|经济|传送|管理]Essentials v2.9.2 —— 一些有用的命令的集合[1.2.5-R4.0] ...

已经整改,多谢提醒

非常强大 但是 支持1.6.4的么?

sanityko
cxl159桑 发表于 2014-9-10 14:29
非常强大 但是 支持1.6.4的么?

有1.6.4版本的插件可以下载,不过少了一些功能而已

sanityko 发表于 2014-9-10 21:33
有1.6.4版本的插件可以下载,不过少了一些功能而已

在原帖没有找到1.6.4的啊 最低1.7.2的...

大大求给一个1.6.4的下载链接把

sanityko
cxl159桑 发表于 2014-9-10 21:53
大大求给一个1.6.4的下载链接把

http://dev.bukkit.org/bukkit-plu ... le-triggers-v1-2-6/
这个版本的应该能用

sanityko 发表于 2014-9-10 22:29
http://dev.bukkit.org/bukkit-plugins/variabletriggers/files/27-variable-triggers-v1-2-6/
这个版本 ...

嗯 感谢大大 半夜爬起来 试试这个插件

a101010aq
好插件,这玩意这么diao,SB都快可以淘汰了。

a101010aq
大大救命啊QAQ @SUBINT $JuHeI.Neng 15
为什么我用给变量整数加法、减法都没有效果啊(版本是VariableTriggersv1.2.6 服务端是1.6.4mcpc+)
难道我代码输错了么

Tollainmear
很强大的插件,但是有点复杂,所以没有学习QwQ
支持一下楼主啦!

李泽天才小子
楼主英文肯定好

w44225769
{:10_503:}呜呜呜,如果不是不向下兼容,不支持1.6.2mcpc    我一定给作者上香。

虽然有162版本  但是少了太多东西了  比如变量 <loc>  在162里面 取到的就是只能是字符串 x,y,z

在172的版本   可以 <loc:x>  取一个坐标值  通过坐标运算可以完成无比强大的功能。

哎。看来是我服务器落后了。不能怪插件,落后就要挨打。。。

WY.
系统自动公告?

gaojinmin
啦啊啊啊啊啊啊啊拉啊啊啊啊啊阿

sanityko
w44225769 发表于 2014-10-7 06:07
呜呜呜,如果不是不向下兼容,不支持1.6.2mcpc    我一定给作者上香。

虽然有162版本  但是少了 ...

我就是因为这个插件才上172的

a101010aq
求解怎么样让每个玩家触发脚本时命名一个以自己名字为变量名的变量

sanityko
a101010aq 发表于 2014-10-18 17:15
求解怎么样让每个玩家触发脚本时命名一个以自己名字为变量名的变量

/vtclick @SETSTR $123(乱起的).<playername> 值

a101010aq
本帖最后由 a101010aq 于 2014-10-19 10:00 编辑
sanityko 发表于 2014-10-18 19:33
/vtclick @SETSTR $123(乱起的). 值

我已经会用了,不过还是谢了,我用这个超残暴的插件做了一堆变态神器哈哈话说完全没学过类似的人要学这个估计是挺麻烦的。
不过我学过做魔能MOD(是真的Magicka里的MOD,不是MC的魔能MOD),那个和这个蛮类似的。
用起来反倒觉得这个更简单了。

a101010aq
本帖最后由 a101010aq 于 2014-11-8 10:14 编辑

我明白了。。。。我知道怎么用@WHILE和开启adv了开启adv的方法丧心病狂啊

q549365815
感觉这样就有很多扩展了

WinsonXC
强! 真的非常强大`!! 感谢大大详细的教学. 如果能兼容一些MOD,好像怪物名称只能是MC內原始名称, 不能分別第三方MOD內的MOB这个是可惜啊..

q549365815
表示 我已经看懂
明天写教程!

耗子
非常好,希望更新一下内容

sanityko
WinsonXC 发表于 2014-11-20 18:24
强! 真的非常强大`!! 感谢大大详细的教学. 如果能兼容一些MOD,好像怪物名称只能是MC內原始名称, 不能分別第 ...

其实可以识别的,使用@player <whodied>来输出死亡mob的名称,缺点在于配合npcmod的时候所有npc名称都是一致的

WinsonXC
sanityko 发表于 2014-11-22 18:37
其实可以识别的,使用@player 来输出死亡mob的名称,缺点在于配合npcmod的时候所有npc名称都是一致的 ...

能精细到识別怪物的名字吗? 因为有些插件不支持自变量, 比如坐标那些只能是定值, 就这个可插件可以,我用了MM(MythicMobs)写了一个Boss,但MM只能选mobtype,就说只能是MC內定的, 但又不能用MutantCretures(突变怪物)所以,我就用了大大的Vt写了个 如果杀死MM的BOSS就用VT输出summon生成MutantCreatures的怪..只能这样.....但在做BOSS这块來讲,MM比VT好一点..但这样变成了如果说我用MM指定的type,比如说僵说,,那我杀任何一支僵尸,不管是不是boss, VT都會執行- -""""" 但VT又识不了MM內定的怪物名字(mobname不是mobtype)..烦惱中.

sanityko
WinsonXC 发表于 2014-11-23 16:13
能精细到识別怪物的名字吗? 因为有些插件不支持自变量, 比如坐标那些只能是定值, 就这个可插件可以,我用 ...

是插件的话Vt应该识别不了,目前只能识别mod生物

WinsonXC
sanityko 发表于 2014-11-23 21:57
是插件的话Vt应该识别不了,目前只能识别mod生物

那个,再问一下, 有沒有什么办法能夠找到MOD生物在MC內的正确名字??? 像MutantZombie,在MC內要召喚他,他的名字是MutantCreatures.MutantZombie,中间居然是点..试了超级超级久才知道.. 但好像VT对这名字不感冒啊.

sanityko
WinsonXC 发表于 2014-11-24 12:38
那个,再问一下, 有沒有什么办法能夠找到MOD生物在MC內的正确名字??? 像MutantZombie,在MC內要召喚他,他的 ...

我首先做一个杀死生物后告诉我杀死生物名称的脚本,在eventtriggers里的EntityDeath下做一个@player <whodied>脚本就好了,这样我杀谁vt就会告诉我它叫啥

WinsonXC
sanityko 发表于 2014-11-25 23:34
我首先做一个杀死生物后告诉我杀死生物名称的脚本,在eventtriggers里的EntityDeath下做一个@player 脚本 ...

哦.学到老活到老

absent-cyd
楼主更新=-=1.8.1版本已经有了.顺带问一句,vt支持if二重嵌套么....还有,之前我设置了一个布朗类型的变量为true,但是输出的时候怎么变成0了...

sanityko
最近直接学编插件去了就开始疏远VT了,支持IF套嵌,bool变量看起来是true和false本质上是0和1

a841140726
BBS论坛有你更精彩~

Agger_
好插件 顶一个

sofa
好高端=。=我个懒人还是叉了吧

1357373363
1720942566 发表于 2014-8-30 10:40
表示已哭晕在电脑桌前

有缘头像。

世界来了
我也要1.6.4的可好

0ye
楼主,如果是吃掉某个东西或者捡起某个物品能不能作为触发条件啊?

chaoji_x
好复杂,还是用SB吧,省得再熟悉代码

absent-cyd
LZ=-=可以重新搬运么。。这都没有看到更新诶。。
嘛,我还要加一些内容。比如说版本和各种触发器之间的关系,更新日志之类的。
谢谢啦!

hwwxyhyt123
怎么在bukkit上下载以前版本的插件,都是只有最新的

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