技能
每个技能一个文件,放在 skills/ 下的任意子文件夹,文件名可以用中文,文件名就是技能 ID:
skills/
├─ 剑士/
│ ├─ 裂地斩.yml
│ ├─ 冲锋.yml
│ └─ 被动/
│ └─ 战意.yml
└─ 天罚雷狱仙/
└─ 天罚雷斩·裂穹坠霆.yml # id: S2THUNDER_SLASH
想保留英文 ID(例如从 MMOCore 搬来、玩家数据里存的是英文 ID)就在文件里写 id:,文件名照样用中文。
示例
skills/剑士/裂地斩.yml
name: '&e裂 地斩'
material: IRON_SWORD
mythicmobs-skill-id: Swordsman_GroundSlash # 执行的 MythicMobs 技能
lore:
- '&7横扫周围的敌人'
- ''
- '&f伤害:&c{damage}'
- '&f范围:&f{radius} 格'
- '&f冷却:&f{cooldown} 秒'
- '&f消耗:&b{mana} {mana_name}'
damage:
base: 6
per-level: 1.5
radius:
base: 3
per-level: 0.1
max: 5
cooldown:
base: 6
per-level: -0.1
min: 3
mana: 8
选项
| 选项 | 说明 |
|---|---|
id | + 技能 ID,不写 = 文件名(转大写,- 与空格换成 _) |
name | 名称 |
lore | 介绍。{参数名} 显示当前等级的数值,另有 {mana_name} {mana_color} 与 PlaceholderAPI 变量 |
material / icon | 图标,IRON_SWORD、IRON_SWORD:1001,支持 MythicLib 的全部图标写法;另有 custom-model-data、item-model |
mythicmobs-skill-id | + 要执行的 MythicMobs 技能 ID,不用再到 MythicLib 的 skill/ 登记 |
mythiclib-skill | + 使用 MythicLib 自带的技能(FIREBALL、CIRCULAR_SLASH、LEAP、HEAL…) |
passive-type | 不写 = 主动技能;写 MythicLib 触发类型 = 被动技能,见下表 |
categories | 分类,给技能槽 formula 与 skill_buff 判断用 |
upgrade-cost | + 每升一级消耗几点技能点(默认 1) |
parameters | 参数也可以集中写在这一节(MMOCore 的写法),或像示例一样直接写在根层 |
两个都不写时,会找 MythicLib skill/ 里与技能 ID 同名的技能(MMOCore 的方式)。
参数
技能里除了上面的选项,其他数值都是参数,会传给 MythicMobs / MythicLib:
damage:
base: 10 # 1 级的数值
per-level: 2 # 每升一级增加
min: 0 # 可选
max: 50 # 可选
decimal-format: '0.#' # 可选,介绍里显示几位小数
knockback: 1 # 固定数值
duration: '2 + level * 0.5' # 公式
数值 = base + per-level × (技能等级 − 1)。cooldown(秒)、mana、stamina、timer、delay 是内置参数:施放时检查冷却并扣除魔力与耐力,timer 给 TIMER 被动使用。
职业文件 skills.<技能> 下写同名参数可以只对这个职业覆盖数值。
在 MythicMobs 读取参数
plugins/MythicMobs/Skills/swordsman.yml
Swordsman_GroundSlash:
Skills:
- mmodamage{a="<modifier.damage>";types=PHYSICAL,SKILL} @EntitiesInRadius{r="<modifier.radius>"}
- effect:particles{p=sweep_attack;a=20;hs=2} @self
<modifier.参数名>:技能参数(已含技能槽、技能树等的加成)<modifier.level>:技能等级<mana><stamina><stellium><attribute.属性ID>:玩家资源与属性(见整合)
读不到的参数不会刷错误
MythicMobs 技能用到技能文件没有写的参数时,MMOCore 会每次施放都抛出 Could not find parameter。星月天职把它当成 0,并只在后台提示一次是哪个技能缺哪个参数。
被动技能
写了 passive-type 就是被动技能,满足条件时自动施放:
| passive-type | 时机 |
|---|---|
TIMER | 每 timer 秒 |
ATTACK / DAMAGED / DAMAGED_BY_ENTITY | 攻击 / 受到伤害 / 被实体攻击 |
KILL_ENTITY / KILL_PLAYER / DEATH | 击杀生物 / 击杀玩家 / 死亡 |
LEFT_CLICK / RIGHT_CLICK / SHIFT_LEFT_CLICK / SHIFT_RIGHT_CLICK | 左键 / 右键(加 SHIFT_ = 潜行时) |
DROP_ITEM / SWAP_ITEMS(及 SHIFT_ 版本) | 丢弃物品 / 切换副手 |
SNEAK / LOGIN / TELEPORT | 潜行 / 进服 / 传送 |
SHOOT_BOW / ARROW_HIT / ARROW_LAND / ARROW_TICK | 射箭 / 箭命中 / 箭落地 / 箭飞行 中每 tick |
SHOOT_TRIDENT / TRIDENT_HIT / TRIDENT_LAND / TRIDENT_TICK | 三叉戟,同上 |
PLACE_BLOCK / BREAK_BLOCK | 放置 / 破坏方块 |
EQUIP_ARMOR / UNEQUIP_ARMOR | 穿上 / 脱下盔甲 |
| 其他插件注册的 MythicLib 触发类型 | 同样支持 |
被动技能默认要放进技能槽才生效(config.yml 的 passive-skill-need-bound);职业文件 skills.<技能>.needs-bound: false 可以让某个被动自动生效。
skills/剑士/被动/战意.yml
name: '&d[被动] 战意'
material: GOLDEN_APPLE
mythiclib-skill: HEAL
passive-type: TIMER
lore:
- '&7每 {timer} 秒恢复 &a{heal} &7点生命'
timer: 10
heal: {base: 1, per-level: 0.5}
这个范例随插件附带,但默认职业没有加上(每 10 秒回血会一直冒特效)。要用时在职业文件的 skills: 加上 战意: {level: 1, max-level: 5, needs-bound: false}。
技能等级
- 职业文件
skills.<技能>.level是解锁需要的职业等级,max-level是技能等级上限。 - 玩家在
/sv skills右键技能,消耗upgrade-cost技能点升 1 级。 - 动作
levelup_skill{skill=裂地斩;amount=1}可以不花技能点升级(经验表、技能树奖励)。 - 冷却缩减属性
COOLDOWN_REDUCTION、技能伤害SKILL_DAMAGE等 MythicLib 属性照常生效。
公共冷却与其他
config.yml
global-skill-cooldown: 10 # 两个主动技能之间的公共冷却(tick)
passive-skill-need-bound: true
can-creative-cast: false # 创造模式能否施放
allow-duplicate-binding: false # 同一个技能能否装备到多个技能槽
施放方式见技能槽与施放。