概览 - woshiermuqwq/mythic-chinese GitHub Wiki
技能, 通常指的是 技能行 或 技能组
技能组配置(包含多条技能)必须被存放于Skills文件夹内或其子文件夹内的文档内, 文件后缀应较为常见(.txt .yml 等), 其内容格式必须为 Yaml
但当在实体配置内使用 行内技能组 写法时, 技能组可以位于实体配置中.
技能组, 用英语来讲就是 MetaSkill
技能组, 换句话来讲就是 元技能
实体配置内的技能配置由以下因素组成:
技能配置指的是实体配置内 Skills 一栏的内容.
实体技能配置示例:
Type: ZOMBIE
Display: '技能配置 示例'
Skills:
- 技能 目标选择器 次要因素的一种(以此类推)
- 无目标类技能 次要因素的一种(以此类推)
- 技能{修改项=值} 次要因素的一种(以此类推)
修改项, 就是技能的选项, 多个修改项之间用 ;
隔开
技能的选项, 如 Damage 的修改项: amount
定义了damage技能能造成多少伤害
?
开头的选项为单行条件, 详见点我
技能将为实体带来些什么呢? 见下:
实体技能配置示例:
Type: ZOMBIE
Display: '技能配置 示例'
Skills:
- ignite @target ~onTimer:10
- ignite @trigger ~ondamaged
- skill{skill=测试技能组} @self ~onInteract 0.1(触发几率 见下) =40%(血量需求 见下) ?targetwithin{d=10}
- skill{s=测试技能组B} @trigger ~ondamaged ?damagetype{c=entity_attack}
- skill:测试技能组C @pir{r=5;conditions=[ - distance{d=<5} ]} ~onDeath
- skill:测试技能组D{修改项=值;sync=true;delay=0;repeat=2;repeatinterval=1}
- skill:测试技能组E{delay=0} =90% 0.1
- skill{s=[
- message{m=我被<trigger.name> 所射出的箭矢攻击了} @server
- damage{a=5;i=true} @trigger
- message{m=并对它造成了 5 点 反伤} @server
]} ~ondamaged ?damagetype{c=projectile}
- 等
上方技能配置示例是由什么因素构成的呢? 见下:
Skills:
- 技能{修改项=值} 目标选择器 次要因素(触发器 血量要求 触发几率 单行条件)
- 技能{修改项=值} 目标选择器 次要因素(触发器 血量要求 触发几率 单行条件)
- 技能{修改项=值} 次要因素(触发器 血量要求 触发几率 单行条件)
- 技能{修改项=值} 为首要因素, 任何差错都将直接导致整个技能配置失效, 而不是单行技能.
-
目标选择器 为次要因素, 决定技能作用于什么,可以是多个实体也可以是多个位置甚至是一片区域内的方块, 技能必须拥有目标选择器, 且只能有一个目标选择器
但对于无目标类技能而言则不需要填写目标选择器. - 触发器 为次要因素, 它们通常以 "~" 开头\ 决定技能怎样触发, 默认触发器为 ~onCombat, 若触发器出差错将让其它地方正确的技能无法激活, 技能只能有一个触发器
- 血量要求 与 触发几率 为次要因素/ 血量要求以"="/">"/"<"开头, 触发几率则为小数或者1, 1=100%
- 单行条件 为次要因素, 直接将条件/触发者条件及true/false条件活动至于技能行内.
- 这些因素没有先后顺序, 甚至不需要在同一行, 且只有触发器无法被放入技能组, 该功能需付费版
- 实体/物品配置内的技能, 其每行的要素都是独立的
###实体配置
测试实体:
Type: husk
Skills:
- skill:测试技能组 ~ondamaged
- skill{s=测试技能组B} ~onspawn
###技能配置
测试技能组:
Conditions:
- incombat
Cooldown: 0.1
Skills:
- message{m=你打了我!} @trigger
- throw{v=3} @trigger
测试技能组B:
Skills:
- message{m=我出生了!} @server
大部分技能修改项由{}包裹,各修改项之间用:隔开,修改项=值是固定格式,有的修改项的值可被""所包裹
单行技能是十分简单的,如您想要点燃某实体5秒,您只需要这么写:
Skills:
- ignite{ticks=100}
决定技能作用于什么,可以是多个实体也可以是多个位置甚至是一片区域内的方块,且必须以@开头
但对于无目标类技能而言它是没有任何效果的.. 目标选择器列表.
Skills:
- 技能{修改项=值;修改项=布尔值;修改项=字符;修改项=数值} 目标选择器{修改项=值}
假设您想要先前所写的"点燃某实体5秒"变为"点燃目标5秒",只需要:
Skills:
- ignite{ticks=100} @target
或者点燃半径5格方块半径内的所有玩家(不包括创造/观察模式)
Skills:
- ignite{ticks=100} @PlayersInRadius{r=5}
决定技能怎样触发,若触发器出差错将让有效的技能无法激活,且必须以~on开头
Skills:
- 技能{修改项=值;修改项=布尔值;修改项=字符;修改项=数值} 目标选择器{修改项=值} 触发器
假设您想要上方所写的"点燃目标5秒"变为"造成伤害后点燃目标5秒",只需要:
Skills:
- ignite{ticks=100} @target ~onAttack
实体技能必须让当前血量符合血量条件才可以触发,默认为无条件
可存在于技能组内.
例子:
- =90% - 实体当前生命为最大生命90%时 仅触发一次
- <50% - 实体当前生命为最大生命50%以下时
- =30%-50% - 实体当前生命为最大生命30%~50%之内时 health
- <2000 - 实体当前生命在2000以下时
- >500 - 实体当前生命在500以上时
使用 =, <, or > 来表示范围.
Skills:
- 技能{修改项=值} 目标选择器 触发器 血量要求
假设您想要上方所写的"造成伤害后点燃目标5秒"变为只在当前生命低于最大生命50%时才可以激活,只需要:
Skills:
- ignite{ticks=100} @target ~onAttack <50%
触发几率通常为小数, 值为1时表示100%
它决定了技能被激活后有多少几率成功执行
它可存在于技能组内
Skills:
- ignite{ticks=100} @t ~onAttack <50% 0.5
Skills:
- damage @trigger 0.4
### 实体配置
测试实体A:
Type: husk
Health: 100
Options:
NoGravity: true
Skills:
- skill:测试 @trigger ~onattack 0.5
### 该技能组在攻击后有 50% 概率激活
### 技能组配置
```yaml
测试:
Skills:
- teleport
# 技能组被调用后必定将施法者传送到攻击者
- damage{a=9999;i=true} 0.01
# 技能组被调用后有1%概率秒杀攻击者
- heal{a=9999} @self 0.1 <50
# 技能组被调用后有10%概率恢复满血, 但自身血量需在50以下
Skills:
- 技能{修改项=值;修改项=布尔值;修改项=字符(可被双引号包裹);修改项=[ - 技能{修改项=值} 目标选择器 - 技能{修改项=值} ];修改项=数值}
上述的 修改项=[ - 技能 ]
, 就是 行内技能组 写法.
以下还有一些普通写法与行内技能组混搭的示例:
Skills:
- 技能{修改项=值;
修改项=值;
修改项=布尔值;
修改项=值}
- 技能{
修改项=值;
修改项=布尔值;
修改项=[
- 技能
- 技能 目标选择器
]}
]}
上述的
修改项=[
- 技能
- 技能 目标选择器
]}
就是 行内技能组
但该格式中, { 必须与技能名处在同一行, 将它写在独立的一行中会导致技能(并非整个文档)无法加载
该格式最重要的是缩进, 上一种格式的[]最重要的事间距.
- 多行修改项写法
Skills:
- Projectile{
onTick=ATickSkill;
interval=1;
velocity=5} @target ~onTimer:100
多行修改项+行内技能组写法
- 单行写法
Skills:
- Projectile{
onTick=[ - effect:particles{p=flame} @origin - message{m=1} @server ];
interval=1;
velocity=5;
hp=true} @target ~onTimer:100
- 多行修改项+多行内技能组写法
Skills:
- Projectile{
onTick=[
- effect:particles{p=flame} @origin
- message{m=1} @server
];
interval=1;
velocity=5;
hp=true} @target ~onTimer:100
- 多行修改项+多行目标选择器修改项写法
Skills:
- damage{i=true;
a=5;
pk=true
} @forward{
f=5;
sideoffset=3;
y=3;
}