ChenCMD/MCCMD-ScoreDamage

プレイヤーは同じtickでの2回目以降の実行で死亡しない。

Closed this issue · 3 comments

概要

プレイヤーに対して同じtick内で複数回実行したときに、2回目以降で合計が現在体力以上のダメージを与えた時に死亡しない。
11ダメージを2回実行して22ダメージを与えたとしても体力が1.0f残ってしまう。
2回目以降であっても現在体力以上のダメージを与えれば死亡する。

再現方法

以下に示す「使用コマンド」を実行する。
1tickで実行できればいいのでFunctionもしくはCommandBlockで実行する。

私の想定する動作

同じtickで複数回実行したとき、そのダメージの合計が現在体力以上なら死亡する。
11ダメージを2回実行すると、合計22ダメージとなって死亡する。

検証環境

使用コマンド

data modify storage score_damage: Argument set value {Damage:11d}
execute as @p run function score_damage:api/attack
data modify storage score_damage: Argument set value {Damage:11d}
execute as @p run function score_damage:api/attack

参考動画

https://twitter.com/i/status/1659186999390269440


考えられる原因

$Health ScoreDamageCoreを設定するとき、毎回@s Healthから取得しており、同tickですでに設定された@s ScoreToHealthと違いが生じる。
すると、@s ScoreToHealthは0以下になるが、$SubtractedHealth ScoreToHealthは1以上のままという場合が起こり、結果killされなくなる。

修正方法の提案

score_damage:core/get_statusで現在HPを取得するとき、@s ScoreToHealthが設定されていればその100倍の値を$Health ScoreDamageCoreに設定する。

ちょっと忙しいので修正出来ても5月末くらいになります(PR 出してくれてもいいんだよ)

forkするとして、どのブランチを利用して開発すればいいでしょう?
master-1.19ですかね?

Fixed from #6