黑茶RGO
本帖最后由 黑茶RGO 于 2023-4-25 21:35 编辑

如何让拥有10级不祥之兆(或其他buff)的玩家和生物在受到任何伤害时受到的伤害量翻倍,比如同时中凋零buff和10级不祥之兆时,每次凋零都会扣2两点血。

名副其实
本帖最后由 名副其实 于 2023-4-25 22:42 编辑

实现思路(仅供参考):
受伤后给予玩家瞬间伤害效果。
回:
瞬间伤害最低等级一次造成两颗心(4) 伤害,每次受伤均可由计分板或其他内容检测到。

也可使用新版本提供的 /attribute 命令,但具体过程和计算方法可能需要您自己解决。

黑茶RGO
名副其实 发表于 2023-4-25 22:30
实现思路(仅供参考):
受伤后给予玩家瞬间伤害效果。
回:

1.19.4有/damage指令可以指定伤害量和伤害类型,但光知道这个就能解决问题的话我就不会发这个帖子了~

白狗虚虚
我想到几个笨办法你可以尝试一下(仅供参考),①通过tick进度检测玩家是否存在10级的不祥之兆和是否受到伤害,并奖励一个函数。之所以是笨方法是因为每个伤害数值都要自己改,通过damage自己增加。②用attribute直接削弱防御(奇怪的想法?)


第一个方案:假设数据包命名空间是:effect。建立一个进度bad_own.json


函数event




7_a
我也有个笨方法,检查过程跳过不赘述,mc有个统计自己受到的伤害量
大致流程如下
首先你要批量做好一张表如下
execute as @a[scores={damage=10..19}] run damage @s 1
execute as @a[scores={damage=20..29}] run damage @s 2以此类推,较为保险建议推到记分板1000..1009(即100点伤害)

新建个统计受到伤害量的记分板
检测玩家记分板大于0运行接下来的命令

方法1
将记分板的数值放入另一个记分板2
将记分板2的分数*2(倍率)
然后用上面表中的指令执行
清空记分板

缺点,效率较低,效果需要穷举但一般玩家受到的伤害到100即使是抗性4也会G
且会容易造成卡顿(指令多的情况下)所以建议分段以提高效率
精度为1点伤害(虽然更加精细的也没什么必要)
优点多人友好

7_a
7_a 发表于 2023-4-26 07:49
我也有个笨方法,检查过程跳过不赘述,mc有个统计自己受到的伤害量
大致流程如下
首先你要批量做好一张表如 ...

本来是有方法2的,就是想利用data的追加功能,但是在没试出来,就不写了,大概就是通过追加把伤害值放到命令方块中执行(可行性未知)

黑茶RGO
7_a 发表于 2023-4-26 07:49
我也有个笨方法,检查过程跳过不赘述,mc有个统计自己受到的伤害量
大致流程如下
首先你要批量做好一张表如 ...

那个叫"damage_taken"的判据对非玩家生物无效,达不到我要的效果

dh381
因为我对计分板之间的运算指令并不是很清楚,所以我在这里只给出解决思路,具体写法还需要你查wiki

至于第二步的进度需要写两个,一个是楼上给的tick进度,用来判断玩家受伤,不过需要把damage_source词条的内容改成minecraft:out_of_world,如果还要判断实体受伤的话还需要再写一个player_hurt_entity_进度

看样子应该可以把你昨天发的那个悬赏一起解决了

7_a
黑茶RGO 发表于 2023-4-27 22:22
那个叫"damage_taken"的判据对非玩家生物无效,达不到我要的效果

那可以参考下面的方法,
创建两个记分板分别为[记分板1]和[记分板2]

以下命令要求循环
将所有生物血量存入记分板1
检查记分板1是否小于记分板2如果是进入我上面的写的函数
将所有的生物血量存入记分板2

因为在对比时记分板2为上一tick的数据所以和这一tick的数据不一样,而从比较血量变化
这里的所有生物可以使用目标选择器指定来节省性能,但和原版的记分板比肯定是比不上的

实况主小博
稍微做了个数据包,还没怎么打磨,大概能用(
初始化函数/function gm:damage_add_start
高频执行execute as @e[tag=damage_add,nbt=!{HurtTime:0s}] run function gm:damage_add1
(虽然可以放到tick里面,但是我懒得放了)
获得效果/execute as 获得者 run function gm:damage_add_effectgive
移除效果/tag 移除者 remove damage_add
伤害的倍率调整(不调整默认为0,也就是没有附加伤害)/scoreboard players set 获得者 damage1 倍率
倍率的计算公式为实际收到伤害为基础伤害x(1+0.1x倍率)
因为用了damage,所以会有重复的伤害音效,我把伤害音效改成冰冻音效了,也可以在伤害类型里面自己调整,暂时没有找到消除的办法,或许可以接一个stopsound,但是那样就得牺牲一种伤害音效了