占位符 - woshiermuqwq/mythic-chinese GitHub Wiki

教学: 计时器

也许您想给您的技能组写一个计时器,以取代技能冷却或制作技能持续时间
有很多种方法来制作计时器 占位符(仅限付费版)、记分板、Meta(拓展技能)

步骤

设计计时器 (占位符做法)

记分板做法-> 点我

实体配置:

计时器测试:
  Type: Wither_Skeleton
  Options:
    NoAI: true
  Skills:
  - setvariable{var=caster.Tick;type=float;value="0"} @self ~onSpawn
  - setvariable{var=caster.Tick;type=float;value="<caster.var.Tick> - 0.05"} @self ~onTimer:1
  - message{m=<caster.var.Tick>} @EIR{r=16} ~onTimer:1

生成后将自身身上的变量: Tick的值 设为0 每0.05秒将自身身上的变量: Tick的值 -0.05(这样1秒就是-1) 每0.05秒向半径16方块格内的所有实体发送聊天栏信息
信息为 自身身上的变量: Tick1的值 这样, 一个计时器就写好了, 当然, 加值也可以这么写(箭头表变更):

实体配置:

计时器测试:
  Type: Wither_Skeleton
  Options:
    NoAI: true
  Skills:
  - setvariable{var=caster.Tick;type=float;value="0"} @self ~onSpawn
  - setvariable{var=caster.Tick;type=float;value="<caster.var.Tick> - 0.05"} @self ~onTimer:1 -> - skill:加值 @self ~onSpawn
  - message{m=<caster.var.Tick>} @EIR{r=16} ~onTimer:1

现在,实体将在 生成后 激活技能组: 加分技能组
当然触发器不一定非得是 ~onSpawn

技能配置:

加值:
  Skills:
  - setvariable{var=caster.Tick;type=float;value="<caster.var.Tick> - 0.05"}

诶, 这不是只给变量: Tick的值 -0.05么? 别急(箭头表变更):

加值:
  Skills:
  - setvariable{var=caster.Tick;type=float;value="<caster.var.Tick> - 0.05"} @self -> -       - setvariable{var=caster.Tick;type=float;value="<caster.var.Tick> - 0.05";repeat=199;repeatInterval=1} @self

现在,它将在生成后每0.05秒 将为自身身上的变量: Tick的值 -0.05 (因重复间隔为1刻), 共-10(因重复次数为199次)

那如果不用 Repeat 与 RepeatInterval
且使用 ~onTimer:1 来加分,怎么做分数限制呢(箭头表变更):

实体配置:

计时器测试:
  Type: Wither_Skeleton
  Options:
    NoAI: true
  Skills:
  - setvariable{var=caster.Tick;type=float;value="<caster.var.Tick> - 0.05"} @self ~onTimer:1 -> - skill:加值 @self ~onTimer:1
  - message{m=<caster.var.Tick>} @EIR{r=16} ~onTimer:1

每0.05秒 将为自身身上的变量: Tick的值 -0.05

技能配置:

加值:
  Conditions:
  - variableinrange{var=<caster.Tick>;v=>-10}
  Skills:
  - modifytargetscore{o=Tick;v=1;a=ADD} @self

因为 '每 0.05秒 激活1次技能组: 加值' , 而此技能组的内容就是 '为自身身上的变量: Tick的值 -0.05'
所以效果仍相当于 '每0.05秒 将为自身身上的变量: Tick的值 -0.05'

这里的 '- variableinrange{var=<caster.Tick>;v=>-10}' 是干什么的呢?
当自身身上的变量: Tick的值大于 -10 时符合条件(默认条件活动为 true 也就是 符合条件后激活)

这样,此变量的值最多只能为-10,也就是-10秒.

应用计时器1: 替代冷却

原实体配置:

计时器测试:
  Type: Wither_Skeleton
  Options:
    NoAI: true
  Skills:
  - skill:某技能组 @self ~onDamaged

受伤后 对自己激活技能组: 某技能组

原技能配置:

某技能组:
  Cooldown: 10.1
  Skills:
  - damage{a=10;pi=true}

某技能组的内容为 对技能目标(自身 因为实体配置内的目标选择器为 @self) 造成 10点 伤害,且 无视受伤间隔
此技能组的冷却为 10.1 秒.

现实体配置:

计时器测试:
  Type: Wither_Skeleton
  Options:
    NoAI: true
  Skills:
  - skill:某技能组 @self ~onDamaged
  - setvariable{var=caster.Cooldown;type=float;value="<caster.var.Cooldown> - 0.05"} @self ~onTimer:1
  - setvariable{var=caster.Cooldown;type=float;value="0"} @self ~onSpawn

受伤后 对自己激活技能组: 某技能组
每0.05秒 将为自身身上的变量: Cooldown的值 设为 当前变量: Cooldown的值 -0.05

现技能配置(箭头为单行变更):

某技能组:
  Cooldown: 10.1 -> Conditions:
  - variableinrange{var=<caster.Cooldown>;v=<0}
  Skills:
  - damage{a=10;pi=true}
  - setvariable{var=caster.Cooldown;type=float;value="10.1"}

某技能组的内容为:
对技能目标(自身 因为实体配置内的目标选择器为 @self) 造成 10点 伤害,且 无视受伤间隔
将自身(var的前缀为caster, 也就是施法者)身上的变量: Cooldown 值设为 10.1 某技能组的条件为: 自身身上的变量: Tick的值≤0 当没有激活技能组时, 变量会被减为负数, 但由于是 ≤0 所以仍然符合条件 setvariable的技能目标必须是自身, 所以以防万一还是在后面写上 @self
var的值一定要以caster.开头

这样,激活技能组时会将施法者身上的变量: Cooldown的值设为10.1 施法者每0.05秒将自身身上的变量: Cooldown的值 设为 当前变量: Cooldown的值 -0.05

应用计时器2: 自定义冷却缩减速度

在 应用计时器1: 替代冷却 的基础上编写

实体配置:

计时器测试:
  Type: Wither_Skeleton
  Options:
    NoAI: true
  Skills:
  - skill:某技能组 @self ~onDamaged
  - setvariable{var=caster.Cooldown;type=float;value="<caster.var.Cooldown> - 0.05"} @self ~onTimer:1
  - setvariable{var=caster.Cooldown;type=float;value="0"} @self ~onSpawn
  - skill:缩减翻倍 @self ~onTimer:400

现在该实体每20秒将对自己激活技能组: 缩减翻倍

技能组配置(新增):

缩减翻倍:
  Skills:
  - setvariable{var=caster.Cooldown;type=float;value="<caster.var.Cooldown> - 0.05"} @self

缩减翻倍的内容是,重复99次且重复间隔为0.05秒,将自身身上的变量: Cooldown的值 设为 当前变量: Cooldown的值 -0.05

这样,这个实体在激活技能组: 缩减翻倍 后的 5秒 内,冷却缩减速度为原先的俩倍,因为
技能组: ·- setvariable{var=caster.Cooldown;type=float;value="<caster.var.Cooldown> - 0.05"} @self·
与实体配置:- setvariable{var=caster.Cooldown;type=float;value="<caster.var.Cooldown> - 0.05"} @self ~onTimer:1 相叠加
也就相当于每20秒, 就有5秒是冷却缩减速度翻倍的, 假设实体一直受到伤害, 那么原先
每10秒激活1次技能组:每技能组, 30秒激活3次 现在 每10秒激活1次,但每20秒就有5秒的冷却缩减速度翻倍
所以激活3次某技能组只需要25秒.

应用计时器3: 技能持续

实体配置:

计时器测试:
  Type: Wither_Skeleton
  Options:
    NoAI: true
  Skills:
  - skill:持续性技能 @self ~onDamaged
  - setvariable{var=caster.Time;type=float;value="<caster.var.Time> - 0.05"} @self ~onTimer:1
  - setvariable{var=caster.Time;type=float;value="0"} @self ~onSpawn
  - skill:持续性技能效果 @self ~onTimer:1

受伤后向自身激活技能组: 持续性技能 每0.05秒将自身身上的变量: Cooldown的值 设为 当前变量: Cooldown的值 -0.05 生成后新建一个位于自身身上的变量: Cooldown, 值为0 每0.05秒激活1次技能组: 持续性技能效果

技能组配置:

持续性技能:
  Skills:
  - setvariable{var=caster.Time;type=float;value="5"} @self ~onSpawn

持续性技能内容: 自身身上的变量: Cooldown的值 设为 5

持续性技能效果:
  Conditions:
  - variableinrange{var=caster.Time;value=>0}
  Skills:
  - skill:又套了一层技能效果 @EIR{r=10}

持续性技能效果内容: 对半径10方块格范围内的所有实体激活技能组: 又套了一层技能效果

又套了一层技能效果:
  TargetConditions:
  - isPlayer true
  Skills:
  - pull{v=999}

又套了一层技能效果内容: 将@EIR所选择的所有实体 且实体类型为玩家的实体引向自身

讲解下上方个技能组叭..

  1. 持续性技能在受伤后将自身身上的变量: Cooldown的值 设为 当5
  2. 持续性技能效果虽每0.05秒激活1次,但由于条件: '- variableinrange{var=caster.Time;value=>0}' 也就是自身身上的变量: Time的值 ≥0
  3. 由于实体配置内写有功能为 '每0.05秒将自身身上的变量: Cooldown的值 设为 当前变量: Cooldown的值 -0.05 ' 的技能行
    所以, 持续性技能效果 只会在激活 持续性技能后的5秒内不断激活.

整个技能组的效果就是: 受伤后在5秒内将半径10米内所有玩家引向自身.

当然,用repeat也能做, 改法与 计时器2: 自定义冷却缩减速度 所写的一致

⚠️ **GitHub.com Fallback** ⚠️