Skip to content

🐛 緩衝体力の get・calc_amount・remove が実行者のデータを扱うように修正 - #2325

Open
tatuharu wants to merge 1 commit into
masterfrom
fix/tatuharu_absorption_api
Open

tatuharu wants to merge 1 commit into
masterfrom
fix/tatuharu_absorption_api

Conversation

@tatuharu

Copy link
Copy Markdown
Member

api:entity/player/absorption/get・calc_amount・remove は、IMP Doc では実行者(as player)の緩衝体力を扱う API です。ところが oh_my_dat:please を呼ばずに oh_my_dat: を読み書きしていたため、その時点で OhMyDat が参照しているエンティティのデータを扱っていました。この PR で、3つの API がデータを扱う前に oh_my_dat:please を呼び、実行者のデータを扱うようにします。

add の core/upsert.m と同じ形です。呼出し後は OhMyDat の参照先が実行者に切り替わったままになる点も、add と同じです。

Closes #2324

検証用サーバー(Minecraft 1.20.4、Asset 3e173c9)で、修正前(95528d1)と修正後を比べました。

プレイヤー A に 20、C に 7 のバリアを同じ UUID で付け、B には付けずに、参照先を A に向けてから各プレイヤーを実行者にして呼びました。

実行者 API 修正前 修正後
B get A の 20.0 を返す 何も返さない
C get A の 20.0 を返す C の 7.0 を返す
B calc_amount 20.0(A の合計) 0
B remove A のバリアが消える A のバリアは残る
C remove C のバリアは残る C のバリアが消え、A は残る

A を実行者にした通常の呼出しは、修正前後で同じ結果でした。

Asset の 0258 猫の夢見枕は、回復した相手の今のバリアを get で読み、回復量の30%がそれ以上ならバリアを付けます。0258 由来のバリアを 50 持つ使用者が、バリアのない相手を 10・5・20 と3回回復すると、修正前は相手にバリアが一度も付きませんでした。修正後は 3.0 が付き、5 の回復では付け直さず、20 の回復で 6.0 に更新されました。修正前の get は毎回使用者の 50 を返していました。回復の入力は、RCON から api:heal/modifier → api:heal/ → api:heal/reset を呼んで代え、次の tick から先の 0258 の処理は実際の経路を通っています。トリガーの後の後始末(タグ、asset:context、api: Argument、イベント)は修正前後で同じで、エラーの表示もありませんでした。

バリアが削られるときの callback と、Effect のバリア解除などの remove のほかの呼出し元は、ゲーム内では確かめていません。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

緩衝体力の get・calc_amount・remove が、実行者ではなく OhMyDat の参照先のデータを扱う

1 participant