职业
每个职业一个文件,放在 classes/(可以放子文件夹)。文件名就是职业 ID,可以用中文;也可以写 id: 职业ID 另外指定。
ID 会转成大写,- 与空格换成 _(与 MMOCore 相同)。
MMOCore 的职业文件可以直接复制进来使用。标 + 的选项是星月天职额外提供的。
完整示例
classes/剑士.yml
display:
name: '<gradient:#FFB36B:#FFE0A3>剑士</gradient>'
lore:
- '&7手持长剑的近战职业'
- ''
- '{stat_lines}'
item: IRON_SWORD
max-level: 100
exp-curve: levels
exp-sources: [原版, 新手村, 首领]
attributes:
max-health: {base: 20, per-level: 2}
attack-damage: {base: 1, per-level: 0.5}
max-mana: {base: 20, per-level: 1}
options:
display: true
needs-permission: false
triggers:
level-up:
- 'points: skill 1'
- 'points: attribute 1'
skills:
裂地斩: {level: 1, max-level: 20}
冲锋: {level: 5, max-level: 15}
跃击: {level: 10, max-level: 10}
skill-slots:
1: {name: '&b主动技能槽 I', formula: '<ACTIVE>'}
2: {name: '&b主动技能槽 II', formula: '<ACTIVE>'}
3: {name: '&b主动技能槽 III', formula: '<ACTIVE>', unlock-level: 10}
4: {name: '&d被动技能槽', formula: '<PASSIVE>'}
skill-trees: [剑士天赋]
subclasses:
狂剑士: 30
exp-table: 剑士升级奖励
显示
| 选项 | 说明 |
|---|---|
display.name | 名称,支持 & 颜色与 MiniMessage(<gradient> 等) |
display.lore | 介绍。写一行 {stat_lines} 会自动展开成「每级 +N 最大生命」等,数值来自 attributes: |
display.attribute-lore | MMOCore 的写法:追加在介绍后面的属性说明 |
display.item | 图标,IRON_SWORD、IRON_SWORD:1001(材质:模型数据),支持 MythicLib 的全部图标写法 |
order | 选择界面的顺序,小的在前(MMOCore 读了但没有使用) |
等级与经验
| 选项 | 默认 | 说明 |
|---|---|---|
max-level | 0 | 等级上限,0 = 不限 |
exp-curve | — | expcurves/ 里的文件名(每行一个数字),或 formula: 100 + level * 50。找不到时用 100、200、300、400、500,见经验 |
exp-source / exp-sources | — | + 经验组(exp-sources.yml 的组名) |
main-exp-sources | — | MMOCore 的写法:经验来源列表 |
exp-multiplier | 1.0 | + 本职业经验倍率 |
exp-table | — | 每升一级抽一次的经验表:exp-tables/ 的 ID,或直接写在这里,见经验表 |
每级属性 attributes
属性名是 MythicLib 属性(max-health、attack-damage、max-mana、defense… 大小写、- _ 都可以)。
attributes:
max-health:
base: 20 # 1 级时的数值
per-level: 2 # 每升一级增加
min: 20 # 可选,下限
max: 300 # 可选,上限
attack-damage: '1 + level * 0.5' # 也可以写公式
max-mana:
formula: '20 + %player_level% * 0.1' # 公式可以使用 PlaceholderAPI
failsafe: 20 # 公式算不出来时的值
数值 = base + per-level × (等级 − 1),与 MMOCore 相同。没有写的属性使用 stats.yml 的数值(所有职业共用)。
选项 options
| 选项 | 默认 | 说明 |
|---|---|---|
default | false | 默认职业(新玩家的职业,通常是「旅人」) |
display | true | 是否出现在选择界面;子职业通常设为 false |
needs-permission | false | 需要 starvocation.class.<ID>(或 mmocore.class.<ID>)才能选择;也可以写 permission: 自定义权限 |
off-combat-health-regen | false | 只在脱战时回复生命 |
off-combat-mana-regen | false | 只在脱战时回复魔力 |
off-combat-stamina-regen / off-combat-stellium-regen | false | 同上 |
技能 skills
技能界面照 这里的顺序显示,第一个写的技能就在第一格。
skills:
裂地斩:
level: 1 # 解锁需要的职业等级(默认 0)
max-level: 20 # 技能等级上限(默认 0 = 不限)
unlocked-by-default: true # false = 需要 unlock_skill 或指令解锁
needs-bound: true # 被动技能是否要放进技能槽才生效(不写 = config 的 passive-skill-need-bound)
upgradable: true # false = 不能用技能点升级
slot: 10 # + 指定技能界面的格子
damage: {base: 12, per-level: 3} # 覆盖技能文件的参数,只对这个职业有效
没有写在这里的技能,玩家只能经由经验表、技能树等动作解锁(等级 1、上限 1,与 MMOCore 相同)。技能本身的写法见技能。
技能槽 skill-slots
skill-slots:
1:
name: '&b主动技能槽 I'
lore: ['&7放入主动技能']
formula: '<ACTIVE>' # 能放什么技能
unlocked-by-default: true
can-manually-bind: true # false = 玩家不能在界面装备 / 卸下(只能由动作 bind_skill)
unlock-level: 10 # + 职业到达这个等级自动解锁
skill-buffs: # 装在这个槽的技能获得加成
- 'skill_buff{modifier=damage;amount=10;type=RELATIVE;formula="<ACTIVE>"}'
formula 用 <> 包住条件:<ACTIVE>(主动)、<PASSIVE>(被动)、<技能ID>、<技能的 categories>,可以用 && || ! == != 与括号组合,例如 <ACTIVE> && !<冲锋>、<火系> || <冰系>。不写 = 任何技能(与 MMOCore 相同)。
槽号中间有空缺时,会自动补上锁住的「未设定技能槽」,避免数字 键对不上。
子职业
classes/剑士.yml
subclasses:
狂剑士: 30 # 剑士 30 级可以转职成狂剑士
- 达到等级后
/sv class打开转职界面,只列出可以转的子职业。 - 转职保留全部进度(等级、经验、点数、技能等级),清空技能槽,消耗 1 职业点(与 MMOCore 相同)。
- 子职业文件通常写
options.display: false,不出现在一般的选择界面。 - 管理员可以用
/sv admin subclass <玩家> <职业>直接转职(等同 MMOCore 的force-class)。
选择职业的规则
在 config.yml 设定:
class-select:
cost: 1 # 选择职业消耗几点职业点
first-choice-free: false # + 从默认职业第一次选择时免费
keep-progress: true # 换回以 前玩过的职业时保留进度
confirm: true # 先打开确认界面
default-playerdata:
class-points: 1 # 新玩家的职业点
save-default-class-info: false # 默认职业的进度在选择其他职业后是否保留
force-class-selection: false # 还是默认职业时进服自动打开选择界面
每个职业的进度分开保存,换回原本的职业时等级、技能、技能槽、经验表奖励都还在。
触发 triggers
triggers:
level-up: # 每升一级
- 'points: skill 1'
level-up-10: # 升到 10 级
- 'title: &6Lv.10|&e解锁新技能'
level-up-multiple-5: # 每 5 级
- 'points: skill-tree 1'
level-up-max: # 到达等级上限
- 'broadcast: &6{player} 的剑士已满级!'
class-chosen: # 选择这个职业时
- 'message: &a你成为了剑士'
first-choice: # + 第一次选择这个职业时
- 'item: IRON_SWORD 1'
break-block: [] # 破坏方块
place-block: [] # 放置方块
magic-damage: # 造成某种伤害时:weapon / physical / magic / skill / projectile / unarmed / on-hit / minion / dot
- 'mmskill: Burn'
level-rewards: # + 指定等级奖励的另一种写法
10: ['points: attribute 3']
every-5: ['points: skill-tree 1']
动作的完整写法见触发动作。on-hit-damage 在 MMOCore 永远不会触发(键名转换的问题),星月天职可以正常使用。
其他
| 选项 | 说明 |
|---|---|
skill-trees | 职业可以使用的技能树 ID 列表,见技能树 |
mana | 魔力的名称、图标与条的颜色,见资源 |
resource | 职业额外的生命 / 魔力 / 耐力 / 星能回复,见资源 |
key-combos | KEY_COMBOS 施放模式下这个职业的按键组合,见施放 |
cast-particle | 施放模式时身边的粒子:{particle: DUST, size: 1, color: {red: 255, green: 200, blue: 80}} |
action-bar | 这个职业专用的常驻动作栏格式 |
scripts | MythicLib 脚本:触发类型: 脚本,例如 TIMER: my_script、LOGIN: welcome |