✨ [Trader 15] 日替わり商人の作成 & 商人の日替わり更新システムの実装#2169
Conversation
…B/TheSkyBlessing into dev/lapis_daily_trader
|
発覚した問題: |
There was a problem hiding this comment.
Pull request overview
日替わりで取引内容(交換できる神器)が変化する「日替わり商人(Trader 15)」を追加し、商人の取引更新処理を「攻略度更新」と「日替わり更新」に分離して実装するPRです。
Changes:
- Trader 15(日替わり商人)の登録処理と、攻略度に応じた神器プールからの抽選ロジックを追加
- 商人の取引更新を
by_progress(攻略度/バージョン反映)とby_daily(日替わり更新)に分割し、tick から呼び分け - 神器レジストリ取得API(通常/色別/隠し枠)と、日替わり更新判定用スコアボードを追加
Reviewed changes
Copilot reviewed 31 out of 31 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| TheSkyBlessing/data/core/functions/load_once.mcfunction | 日替わり更新判定用のスコアボードを追加 |
| TheSkyBlessing/data/asset/functions/trader/15/select_artifact/up_to_progress/set_pool.m.mcfunction | 攻略度到達までのランクをプールに追加する処理を追加 |
| TheSkyBlessing/data/asset/functions/trader/15/select_artifact/up_to_progress/.mcfunction | up_to_progress 用の抽選フローを追加(隠しプール含む) |
| TheSkyBlessing/data/asset/functions/trader/15/select_artifact/picks.mcfunction | 多次元配列プールから1要素を抽選する共通処理を追加 |
| TheSkyBlessing/data/asset/functions/trader/15/select_artifact/current_progress/set_pool.m.mcfunction | current_progress 用のプール決定(隠し枠への差し替え含む)を追加 |
| TheSkyBlessing/data/asset/functions/trader/15/select_artifact/current_progress/.mcfunction | current_progress 用の抽選フローを追加 |
| TheSkyBlessing/data/asset/functions/trader/15/select_artifact/.mcfunction | 攻略度取得〜通常/隠しレジストリ取得〜2種抽選の統合処理を追加 |
| TheSkyBlessing/data/asset/functions/trader/15/register.mcfunction | 日替わり商人(ID 15)の登録と取引定義(神器2枠)を追加 |
| TheSkyBlessing/data/asset/functions/trader/15/_index.d.mcfunction | Trader 15 用スコアホルダ宣言を追加 |
| TheSkyBlessing/data/asset_manager/functions/trader/tick/4_interval.mcfunction | tickで日替わり更新を追加し、攻略度更新呼び出し先を変更 |
| TheSkyBlessing/data/asset_manager/functions/trader/register/reset.mcfunction | DailyUpdate フラグをリセット対象に追加 |
| TheSkyBlessing/data/asset_manager/functions/trader/register/construct/set_data.mcfunction | DailyUpdate 用タグ付与と初期更新処理呼び出し先を変更 |
| TheSkyBlessing/data/asset_manager/functions/trader/daily_update.mcfunction | 日替わり更新の判定(daytime/gametime)と更新実行を追加 |
| TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/update.mcfunction | 取引の実更新処理を共通関数として切り出し |
| TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/get_trades.mcfunction | OhMyDat/登録関数から取引一覧を取得する共通処理を追加 |
| TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/keep_sells/keep.mcfunction | 日替わり商人向けに商品維持しつつ更新する処理を追加 |
| TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/keep_sells/.mcfunction | keep_sells 実行と OhMyDat 反映フローを追加 |
| TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/check_version.m.mcfunction | バージョン不一致時のみ取引定義を再取得する処理を追加 |
| TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/.mcfunction | 攻略度/バージョン反映の更新フローを新設(DailyUpdate の分岐含む) |
| TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_daily.mcfunction | 日替わり更新用の更新フローを新設 |
| TheSkyBlessing/data/asset_manager/functions/trader/common/trades_map/.mcfunction | @within 注釈の参照先を更新 |
| TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/load_register.m.mcfunction | @within 注釈の参照先を更新 |
| TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/.mcfunction | refresh_trades の入口関数へ整理し、取引/Version の更新に特化 |
| TheSkyBlessing/data/asset_manager/functions/trader/_index.d.mcfunction | DailyUpdate タグ宣言と @within 参照更新 |
| TheSkyBlessing/data/asset_manager/functions/artifact/load.mcfunction | 隠し枠レジストリ用ストレージを追加 |
| TheSkyBlessing/data/asset_manager/functions/artifact/_index.d.mcfunction | get_registry API を @within 対象に追加 |
| TheSkyBlessing/data/api/functions/artifact/get_registry/red.mcfunction | レッドシャードの神器レジストリ取得APIを追加 |
| TheSkyBlessing/data/api/functions/artifact/get_registry/normal.mcfunction | 通常シャードの神器レジストリ取得APIを追加 |
| TheSkyBlessing/data/api/functions/artifact/get_registry/hide.mcfunction | 隠し枠神器のレジストリ取得APIを追加 |
| TheSkyBlessing/data/api/functions/artifact/get_registry/green.mcfunction | グリーンシャードの神器レジストリ取得APIを追加 |
| TheSkyBlessing/data/api/functions/artifact/get_registry/blue.mcfunction | ブルーシャードの神器レジストリ取得APIを追加 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| # 最後尾のsellとmaxUsesだけ移す | ||
| data modify storage asset:trader TempB[-1].sell set from storage asset:trader TempA[-1].sell | ||
| data modify storage asset:trader TempB[-1].maxUses set from storage asset:trader TempA[-1].maxUses | ||
|
|
||
| # 売ってるのが神器の場合はIDを入れておく | ||
| execute if data storage asset:trader TempA[-1].sell.tag.TSB.ID run data modify storage asset:trader TempB[-1].sell set from storage asset:trader TempA[-1].sell.tag.TSB.ID | ||
|
|
| # TempCに移す | ||
| data modify storage asset:trader TempC[-1] set from storage asset:trader TempB[-1] | ||
|
|
| # 日替わり更新するか | ||
| execute if data storage asset:trader {DailyUpdate:true} run tag @s add Trader.DailyUpdate | ||
| # 取引一覧 |
| # asset_manager:trader/common/update_recipe/by_progress/check_version.m | ||
|
|
||
| # 取引一覧を抽出 | ||
| function oh_my_dat:please |
There was a problem hiding this comment.
[MUST] (おそらく)
| function oh_my_dat:please | |
| function oh_my_dat:please | |
| data modify storage asset:trader Trades set value [] |
私が読んだ感じの話だけどね、コイツってさてはリセットされてないな?
なにが起きるかと言うとですね……日替わり商人が初めて召喚された場合の話だけど、
function asset_manager:trader/register/construct/set_dataでデータが登録- 内部で
function asset_manager:trader/common/update_recipe/by_progress/が発火、当然keep_sells/も発火。 asset:trader Tradesはおそらくリセットされていないので……後はおわかりですね?
ちょっとリセット抜けというか、歪な用いられ方をしている箇所が多いから、ここで初期化処理を挟む提案をするべ
| # OhMyDat呼び出し | ||
| function oh_my_dat:please | ||
|
|
||
| # 日替わり商人の場合は現在の商品は維持し、攻略度だけ反映する |
There was a problem hiding this comment.
[WANT]
そもそも論として、ネクサスローダー経由(かな?)で新規召喚した時に register が 2 回発火する設計自体が、まずいのでなにかしらの対策は入れたほうがいいかもー
- 新規召喚時は
by_progress/の代わりにupdate.mcfunctionを直接呼ぶとか? 知らんけど
| # asset_manager:trader/common/update_recipe/by_daily | ||
| # asset_manager:trader/common/update_recipe/by_progress/ | ||
|
|
||
| # 攻略率を取得 |
There was a problem hiding this comment.
[WANT]
select_artifact と、この update の mcf で api:global_vars/game_progress が重複呼び出しされているね。
まぁ別にそんなに影響はないけど、対応したかったら対応して、どうぞ。
| function api:artifact/get_registry/normal | ||
| function api:artifact/get_registry/hide |
There was a problem hiding this comment.
[NITS]
asset:artifact RarityRegistry って想定重い SNBT (要するに重いストレージ)で
current_progress/set_pool.m って単一 Rarity しか参照しなさそうだから、RarityRegistry レベル別に取得する際の API とか後で作ったら良さそう。
| #> api:artifact/get_registry/red | ||
| # | ||
| # | ||
| # | ||
| # @api |
There was a problem hiding this comment.
[NITS]
説明を書け~~~~~~~~~~~~~~~~~~~~~
(他も同様だゾ)
| #> api:artifact/get_registry/red | |
| # | |
| # | |
| # | |
| # @api | |
| #> api:artifact/get_registry/red | |
| # | |
| # レッドシャードの神器プールを返す | |
| # | |
| # @output storage api: Return.Registry.Red : int[][] (神器IDの2次元配列、 第1次元はRarity 0~4) | |
| # @api |
|
Copilot の指摘の吟味はしてないけど、なんか超的外れって訳でもなさそうだから、見ておくと良いよ。 |
Fix #2164