概览 - 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:
- 技能{修改项=值} 目标选择器 次要因素(触发器 血量要求 触发几率 单行条件)
- 技能{修改项=值} 目标选择器 次要因素(触发器 血量要求 触发几率 单行条件)
- 技能{修改项=值} 次要因素(触发器 血量要求 触发几率 单行条件)

各因素讲解 (详细信息点击对应的蓝字)

  1. 技能{修改项=值} 为首要因素, 任何差错都将直接导致整个技能配置失效, 而不是单行技能.
  2. 目标选择器 为次要因素, 决定技能作用于什么,可以是多个实体也可以是多个位置甚至是一片区域内的方块, 技能必须拥有目标选择器, 且只能有一个目标选择器
    但对于无目标类技能而言则不需要填写目标选择器.
  3. 触发器 为次要因素, 它们通常以 "~" 开头\ 决定技能怎样触发, 默认触发器为 ~onCombat, 若触发器出差错将让其它地方正确的技能无法激活, 技能只能有一个触发器
  4. 血量要求触发几率 为次要因素/ 血量要求以"="/">"/"<"开头, 触发几率则为小数或者1, 1=100%
  5. 单行条件 为次要因素, 直接将条件/触发者条件及true/false条件活动至于技能行内.
  6. 这些因素没有先后顺序, 甚至不需要在同一行, 且只有触发器无法被放入技能组, 该功能需付费版
  7. 实体/物品配置内的技能, 其每行的要素都是独立的

调用技能组示例

###实体配置

测试实体:
 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:
- 技能{修改项=值;
    修改项=值;
    修改项=布尔值;
    修改项=值}
- 技能{
    修改项=值;
    修改项=布尔值;
    修改项=[
    - 技能
    - 技能 目标选择器
    ]}
  ]}

上述的

    修改项=[
    - 技能
    - 技能 目标选择器
    ]}

就是 行内技能组

但该格式中, { 必须与技能名处在同一行, 将它写在独立的一行中会导致技能(并非整个文档)无法加载
该格式最重要的是缩进, 上一种格式的[]最重要的事间距.

多行修改项格式

  1. 多行修改项写法
  Skills:
  - Projectile{
      onTick=ATickSkill;
      interval=1;
      velocity=5} @target ~onTimer:100

多行修改项+行内技能组写法

  1. 单行写法
  Skills:
  - Projectile{
      onTick=[  - effect:particles{p=flame} @origin  - message{m=1} @server ];
      interval=1;
      velocity=5;
      hp=true} @target ~onTimer:100
  1. 多行修改项+多行内技能组写法
  Skills:
  - Projectile{
      onTick=[
        - effect:particles{p=flame} @origin
        - message{m=1} @server
      ];
      interval=1;
      velocity=5;
      hp=true} @target ~onTimer:100
  1. 多行修改项+多行目标选择器修改项写法
  Skills:
  - damage{i=true;
    a=5;
    pk=true
   } @forward{
     f=5;
     sideoffset=3;
     y=3;
     }
⚠️ **GitHub.com Fallback** ⚠️