• 欢迎来到Minecraft插件百科!
  • 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
  • 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289

MythicMobs/教程/护盾

来自Minecraft插件百科
1240798440讨论 | 贡献2020年3月31日 (二) 00:04的版本 (创建页面,内容为“<pre>原理:首先让怪物出生自动生成一个护盾,同时初始化两个记分板冷却利用变量读取两次实体的生命 ,因为需要一个"上一次…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索
原理:首先让怪物出生自动生成一个护盾,同时初始化两个记分板冷却利用变量读取两次实体的生命
,因为需要一个"上一次生命"和"当前生命",故俩次读取中间加了个延迟(delay)接着每次读取到生命
都转化为记分板加减的数值,(护盾容量+上一次生命-当前生命=剩余护盾).
接着利用变量读取记分板加减后得到的数值,并作为heal(治疗)的数值,来做到表面上的无敌
(护盾容量-剩余护盾=护盾受到的伤害=恢复的数值),由于受到的伤害可能大于剩余护盾,就会导致护盾变
为负数,从而影响每秒恢复2点护盾,所以需要技能"护盾数值修正"来让剩余护盾无法变为负数.

这里不将剩余护盾提示放到怪物yml的原因是要让它计算后读取并提示玩家,如果放怪物yml,数值可能就是
刚加了最大生命的护盾数值,也可能是减去当前生命后的护盾数值.

每次受伤都会重置护盾恢复的冷却(5秒,也就是指定记分板100分数),也就是说5秒内没受到任
何伤害才会进行护盾恢复,每0.25秒-5分,也就是每秒-20分,20分=1秒冷却
剩余护盾为0时会使怪物无敌,获得抗性提升VI,并再次利用记分板设置5秒冷却.

鲲鲲为啥不用其它方法做冷却QAQ,(被火龙果指点)利用实体是否拥有指定药水效果条件来做也是行的QAQ

好惹,下面是详细配置QAQ
#怪物Yml:
#  - skill{s=测试护盾} @self ~onDamaged
#  - skill{s=护盾恢复冷却} @self ~onTimer:5
#  - skill{s=测试护盾提示} @self ~onDamaged
#  - skill{s=护盾格挡伤害} @self ~onDamaged
#  - skill{s=护盾无敌冷却} @self ~onTimer:1
#  - skill{s=护盾恢复1} @self ~onTimer:10
#  - modifytargetscore{o=护盾;a=SET;v=40} @self ~onSpawn
#  - modifytargetscore{o=护盾无敌冷却;a=SET;v=0} @self ~onSpawn
#  - modifytargetscore{o=护盾恢复冷却;a=SET;v=0} @self ~onSpawn
测试增伤:
  Skills:
  - setvariable{type=STRING;var=caster.dm;value="<caster.php>"} @self
测试增伤提示:
  Skills:
  - damage{a='1 + 1 * (100 - <caster.var.dm>) '} @EIR{r=10}
护盾数值修正:
  Conditions:
  - score{o=护盾;value=<0}
  Skills:
  - modifytargetscore{o=护盾;a=SET;v=0} @self
测试护盾:
  Conditions:
#护盾是否还没呗耗尽
  - score{objective=护盾;value=<0} false
  Skills:
  - removeTag{t=护盾恢复1} @self
  - modifytargetscore{o=护盾恢复冷却;a=SET;v=100} @self
  - skill{s=清除无敌一秒} @self
  - setvariable{type=STRING;var=caster.hd1;value="<caster.hp>"} @self
护盾恢复冷却:
  Conditions:
  - score{objective=护盾恢复冷却;value=>1}
  Skills:
  - modifytargetscore{o=护盾恢复冷却;a=SUBTRACT;v=5} @self
测试护盾提示:
  Conditions:
  - score{objective=护盾;value=<0} false
  Skills:
#将施法者在护盾记分板的分数减去当前生命
  - modifytargetscore{o=护盾;a=SUBTRACT;v='<caster.var.hd1>'}
  - delay 1
#读取生物上一次生命值作为变量
  - setvariable{type=STRING;var=caster.hd2;value="<caster.hp>"} @self
  - delay 1
#已呗减去当前生命后的护盾分数加上上一次生命,计算到这儿结束
  - modifytargetscore{o=护盾;a=ADD;v='<caster.var.hd2>'}
  - delay 1
#计算好后将施法者"护盾"记分板的分数作为护盾数值
  - setvariable{type=STRING;var=caster.hd;value="<mob.score.护盾>"} @self
  - skill{s=测试护盾提示1} @self
  - delay 5
  - skill{s=护盾数值修正} @self
  - delay 2
  - skill{s=护盾耗尽无敌} @self
测试护盾提示1:
  Conditions:
#检测护盾是否还没耗尽
  - variableInRange{var=caster.hd;value=>0}
  Skills:
  - speak{offset=0.6f;radius=10;maxlinelength=22;lineprefix="&5";message="&b剩余护盾:<caster.var.hd>";chatprefix=&f<&co>;duration=60} @self
护盾格挡伤害:
  Conditions:
#检测护盾是否还没耗尽
  - variableInRange{var=caster.hd;value=>0}
  Skills:
  - delay 5
#客观上的无敌,恢复的血量=受到伤害的血量
  - heal{a='40 - <caster.var.hd>'} @self
护盾无敌冷却:
  Conditions:
  - score{objective=护盾无敌冷却;value=<1} false
  Skills:
  - modifytargetscore{o=护盾无敌冷却;a=SUBTRACT;v=1} @self
护盾耗尽无敌:
#护盾耗尽时无敌
  Conditions:
  - score{o=护盾;v=0}
  - score{o=护盾无敌冷却;v=<1}
  Skills:
  - modifytargetscore{o=护盾无敌冷却;a=SET;v=100} @self
  - speak{offset=0.6f;radius=10;maxlinelength=22;lineprefix="&5";message="&c怪物的护盾耗尽,无敌1秒>";chatprefix=&f<&co>;duration=60} @self
  - potion{t=DAMAGE_RESISTANCE;d=20;lvl=5} @self
护盾恢复1:
#检测5秒内是否没有被伤害,呼应第一个技能的设置分数
  Conditions:
  - score{o=护盾恢复冷却;v=<1}
  - score{objective=护盾;value=<40}
  Skills:
#不断恢复护盾
  - modifytargetscore{o=护盾;a=ADD;v=1} @self