Skip to content

[Artifact1620] サテライトドロップの作成 - #2139

Open
firgde wants to merge 29 commits into
masterfrom
dev/firgde_artifact1620
Open

firgde wants to merge 29 commits into
masterfrom
dev/firgde_artifact1620

Conversation

@firgde

@firgde firgde commented Oct 1, 2026

Copy link
Copy Markdown
Member

以下のAssetを追加

  • Artifact 1620 サテライトドロップ
  • Effect 395 チャージ・サテライトドロップ
  • Effect 396 玉露の星
  • Effect 397 サテライトドロップ・攻撃クールダウン
  • Object 1192 玉露の星

@Lapis-LJA

Copy link
Copy Markdown
Contributor

まずlinterがエラーを吐かないようにしてね

@Lapis-LJA Lapis-LJA left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ちょっと簡単レビューなのだけど

  • チャージ時間1.5秒につき~、って書いてあるけど、召喚数がEffect395のStack数だけ召喚、って扱いだから、395の付与時に1、チャージ3秒で+2で、3秒で3つ召喚できそう
  • Objectがプレイヤー死亡時に消えなさそう (Effectのremoveとかで消すといいかも?)
  • 何かしらでプレイヤーが待機してる弾から離れてる時に射撃すると、ワンチャンスタックが消費されるだけになりそう?

@Lapis-LJA Lapis-LJA left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

長押しトリガーと長押し解除トリガーが実装されたので、ソレを使った実装にしよう、話はそれからだ

@tatuharu tatuharu left a comment •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このレビューはハルがAI自動レビューの動作テストのためにOpus5.5 Extra Highを使用してレビューを行なったものです。鵜呑みにせず、指摘を採用するかはお任せします。

指摘が 4 件あります。詳細は行コメントに書いています。

  • 〔不具合〕代わりに召喚する弾に Damage・AttackType などが渡されず、命中するとエラーが表示されてダメージが0になる
  • 〔不具合〕代わりの弾を動かす tp が召喚した弾を選ぶとは限らない
  • 〔確認〕段階が上がるときのMP消費がなくなっている
  • 〔不具合〕数が合わないときに消す弾を所有者で絞っておらず、ほかのプレイヤーの弾が消えることがある

scoreboard players operation $UserID Temporary = @s UserID
execute as @e[type=marker,tag=1192.Idle,distance=..3] if score @s 1192.UserID = $UserID Temporary run scoreboard players add $BulletCount Temporary 1
#数が合わないならObjectを削除する
execute if score $Stack Temporary < $BulletCount Temporary run kill @e[type=marker,tag=1192.Idle,distance=..3,sort=arbitrary,limit=1]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

待機中の弾が Stack より多いときに消す弾を、所有者で絞り込まずに選んでいます。16行目は自分の弾だけを数えていますが、この行の kill は 1192.UserID を見ていないため、3ブロック以内にほかのプレイヤーの待機中の弾があると、そちらが消えることがあります。

この行が働くのは、例えば発射時に自分の弾が3ブロック以内になく、attack/.mcfunction で弾を発射できなかったときです。attack/.mcfunction の15〜24行目は発射できたかどうかに関係なく Stack を1減らします。また、代わりの弾を召喚するかを決める attack/.mcfunction 8行目の判定も、所有者を見ていません。自分の弾が近くになく、ほかのプレイヤーの弾が近くにあると、代わりの弾は召喚されず、Stack だけが減ります。

attack/.mcfunction の 1192.Launchable と同じように、所有者の弾にだけタグを付けてから1体を選ぶと、ほかのプレイヤーの弾を対象から外せます。

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

一部が未解消です。ほかのプレイヤーの待機中の弾が消える件は解消されましたが、そのプレイヤーの弾が先に選ばれると、自分の余った弾が消えずに残ります。

36219d9 で、18行目は limit=1 で1体を選んでから、その1体が自分の弾かを確かめる形になりました。sort=arbitrary で選ばれた1体がほかのプレイヤーの弾なら、その tick は何も消しません。

検証用サーバー(Minecraft 1.20.4、このPRの head 4dd40f5)で確かめました。2人のプレイヤー D と E に Effect 396 を Stack 3 で付与して、待機中の弾を3体ずつ持たせ、1.5m離して立たせています。E を先に付与して、E の弾を entity の並びで先にしました。そのあと D の Stack を1にしています。

  • D の弾は観測を終えるまでの約120 tick の間、3体のまま残りました。E の弾も3体のまま消えませんでした。
  • 近くにほかの弾がないプレイヤー K で同じ操作をすると、5 tick 後には1体まで減りました。

attack/.mcfunction の11行目と同じように、自分の弾にだけタグを付けてから1体を選ぶと、ほかのプレイヤーの弾が先にあっても自分の弾を消せます。

Effect 396 の付与と Stack を1にする操作は、api:entity/mob/effect/give で代えています。

また、指摘に書いた attack/.mcfunction 8行目の判定(代わりの弾を召喚するかどうか)は変わっていません。自分の弾が近くになく、ほかのプレイヤーの待機中の弾が3ブロック以内にあると、代わりの弾は召喚されず、Stack だけが減ります。

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

一部が未解消です。余った弾を消す件は解消されましたが、attack/.mcfunction 8行目の判定(代わりの弾を召喚するかどうか)は変わっていません。

ea99f93 で、18行目は自分の待機中の弾に 0396.RemovalCandidate を付けてから、その中の1体を選んで消す形になりました。

検証用サーバー(Minecraft 1.20.4、このPRの head ea99f93)で確かめました。前回と同じく、D と E に待機中の弾を3体ずつ持たせて1.5m離して立たせ、E の弾を entity の並びで先にしてから D の Stack を1にしています。

  • D の弾は Stack を1にしてから5 tick 後には1体まで減り、その後も1体のままでした。E の弾は3体のまま残りました。
  • 近くにほかの弾がないプレイヤー K でも、同じく5 tick 後に1体になりました。

8行目の判定は所有者を問わず、待機中の弾が足元から3ブロック以内にあるかを確かめています。上の状態から D と K の待機中の弾を消し、Stack 1 のまま撃って比べました。このとき D の近くには、E の待機中の弾が3体あります。

  • D は弾が発射されないまま、Effect 396 がなくなりました。
  • K は代わりの弾が発射されてから、Effect 396 がなくなりました。

8行目の判定を11行目の後に移し、自分の弾に付けた 1192.Launchable で判定すると、ほかのプレイヤーの弾が近くにあっても代わりの弾が召喚されます。この形は試していません。

# ランダムなObject 1192から1192.Idleを外す
    execute as @e[type=marker,tag=1192.Idle,distance=..3] if score @s 1192.UserID = @p[tag=this] UserID run tag @s add 1192.Launchable
# なんらかの理由で自分のObjectが近くに存在しない場合、LaunchInstantlyをtrueにした状態のObjectを新しく召喚
    execute unless entity @e[type=marker,tag=1192.Launchable,distance=..3] run function asset:artifact/1620.satelite_drop/attack/launch_new
    execute anchored eyes positioned ^ ^-0.1 ^0.5 as @e[type=marker,tag=1192.Launchable,distance=..3,sort=arbitrary,limit=1] if score @s 1192.UserID = @p[tag=this] UserID run function asset:artifact/1620.satelite_drop/attack/launch
    tag @e[type=marker,tag=1192.Launchable,distance=..3] remove 1192.Launchable

Effect 396 の付与と Stack を1にする操作は api:entity/mob/effect/give で、撃つ操作は core:handler/using_item の進捗の付与で代えています。待機中の弾は kill で消しました。

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

修正を確認しました。attack/.mcfunction で代わりの弾を召喚するかの判定も解消されていて、この指摘への対応として問題ありません。

89ba2c1 で、判定は自分の弾に 1192.Launchable を付けた後に移り、1192.Launchable の有無で代わりの弾を召喚するようになりました。

検証用サーバー(Minecraft 1.20.4、このPRの head 89ba2c1)で、前回と同じ手順を流しました。

  • D の近くに E の待機中の弾が3体ある状態で、自分の待機中の弾を消して撃つと、代わりの弾が発射されました。E の弾は3体のまま残りました。前回の head(ea99f93)では、D の弾は発射されませんでした。
  • 余った弾を消す処理は前回と同じく、Stack を1にしてから5 tick 後には1体まで減り、E の弾は3体のまま残りました。

@Lapis-LJA Lapis-LJA left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

提案:1.5秒のTCD持ちとし、3スタックになるまで長押しで生成する。生成後はTCD・MP条件を無視して発射できる。これならLCD以外は本質的には変わらず、今よりも素直な実装だと思うんだけど、どうだろう

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.

3 participants