跳到主要内容

技能

每个技能一个文件,放在 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 # 同一个技能能否装备到多个技能槽

施放方式见技能槽与施放。