跳到主要内容

套装动作

套装动作是什么?

套装动作即满足套装条件时以一定规律执行的动作,主要用于制作RPG服务器的套装技能

套装动作配置

套装动作在主配置的action节点下,动作主要有三种触发方式: Start、End、Timer

  action:
#start的触发
#装备更新(简单理解就是有套装组合成功或者有套装被拆散)时(更新套装数据->onend结束旧数据对应的效果->onstart开始新数据对应的效果)
#加入服务器时(更新套装数据->onstart开始新数据对应的效果)
onStart:
- type: js #触发脚本的种类(js,kether,asahi),在脚本中suit_amount变量为套装件数
run: Example.js::main #格式为js文件名::函数名
- type: asahi
namespaces: [ bukkit,attsystem ]
run: |-
print inline '套装件数: ${suit_amount}'

#end的触发
#装备更新(简单理解就是有套装组合成功或者有套装被拆散)时(更新套装数据->onend结束旧数据对应的效果->onstart开始新数据对应的效果)
#退出服务器时(移除套装数据->onend结束旧数据对应的效果)
onEnd:
- type: asahi
namespaces: [ bukkit,attsystem ]
run: |-
print inline '套装件数: ${suit_amount}'
#timer
#即为在满足套装条件时,每隔一段时间触发一次
onTimer:
#间隔时间,以tick为单位,你可以简单理解为 1s约等于20tick
- period: 20
type: kether
run: |-
print join [ "套装件数: " &suit_amount ]
- period: 60
type: mythic
skillId: "套装技能-火花"

套装脚本配置

套装动作可执行JavaScript(js),Kether(kether),Asahi(asahi),MM技能(mythic)四种脚本

JavaScript

- type: js #触发脚本的种类(js,kether,asahi),在脚本中suit_amount变量为套装件数
run: Example.js::main #格式为js文件名::函数名

JavaScript文件全部放在 plugins\PoemSuits\scripts 文件夹下

在文件中可以使用来自Pouvoir的全局函数,全局函数在 plugins\Pouvoir\scripts\core 下

const Player = find("org.bukkit.entity.Player"); //用于导入Java包的函数
const Damageable = find("org.bukkit.entity.Damageable");
const Particle = find("org.bukkit.Particle");
const Vector = find("org.bukkit.util.Vector");

//按照上方yaml的配置,将会调用这个main()函数
function main() {
const player = this.player //this.player获取触发套装的玩家对象
player.sendMessage("套装件数(js)>>"+this.suit_amount) //this.suit_amount获取套装件数
container().set(player.getUniqueId(),"suitSkill",this.suit_amount)
}
//Pouvoir的监听事件注解,用于编写被动
//@Listener(-event org.bukkit.event.entity.EntityDamageByEntityEvent)
function onDamaged(event) {
const player = event.entity;
if(player != null && player instanceof Player) {
const suit_amount = container().get(player.getUniqueId(),"suitSkill")
if(suit_amount*0.1 < Math.random()) {
return;
}
player.spawnParticle(Particle.EXPLOSION_LARGE,player.getLocation(),3)
const entities = player.getNearbyEntities(5,5,5)
for (var i = entities.length - 1; i >= 0; i--) {
const target = entities[i]
print(target)
if(target instanceof Damageable) {
target.damage(15,player)
const vector = target.getLocation().subtract(player.getLocation()).toVector().normalize().multiply(2).add(new Vector(0,1,0))
target.setVelocity(vector)
}
}
}
}

Kether & Asahi

Asahi是什么?

Asahi是类似Kether的脚本语言,现在不推荐使用

- type: kether
run: |-
print join [ "套装件数: " &suit_amount ]

MM技能

- type: mythic
skillId: "套装技能-火花" #这里填写你mm技能的ID
#mm中你只能通过读取papi变量来获取套装件数