Skip to content

✨ [Trader 15] 日替わり商人の作成 & 商人の日替わり更新システムの実装#2169

Open
Lapis-LJA wants to merge 40 commits into
masterfrom
dev/lapis_daily_trader
Open

✨ [Trader 15] 日替わり商人の作成 & 商人の日替わり更新システムの実装#2169
Lapis-LJA wants to merge 40 commits into
masterfrom
dev/lapis_daily_trader

Conversation

@Lapis-LJA
Copy link
Copy Markdown
Contributor

@Lapis-LJA Lapis-LJA commented Nov 12, 2025

Fix #2164

@Lapis-LJA Lapis-LJA changed the title ✨ [Trader 15] 日替わり商人の実装 & 日替わり更新の実装 ✨ [Trader 15] 日替わり商人の実装 & 商人の日替わり更新システムの実装 Nov 12, 2025
@Lapis-LJA Lapis-LJA marked this pull request as draft November 12, 2025 16:38
@Lapis-LJA Lapis-LJA marked this pull request as ready for review November 14, 2025 10:21
@Lapis-LJA Lapis-LJA changed the title ✨ [Trader 15] 日替わり商人の実装 & 商人の日替わり更新システムの実装 ✨ [Trader 15] 日替わり商人の作成 & 商人の日替わり更新システムの実装 Nov 14, 2025
@Lapis-LJA
Copy link
Copy Markdown
Contributor Author

発覚した問題:
島攻略による取引の更新で、取引数がリセットされて何度も同じ神器を購入できてしまう

@ChenCMD ChenCMD added the ⛏️ minor このPRはパッチアップデートに含められないよ label Dec 26, 2025
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

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.

Comment on lines +16 to +22
# 最後尾の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

Comment on lines +23 to +25
# TempCに移す
data modify storage asset:trader TempC[-1] set from storage asset:trader TempB[-1]

Comment on lines +16 to 18
# 日替わり更新するか
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
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.

[MUST] (おそらく)

Suggested change
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

# 日替わり商人の場合は現在の商品は維持し、攻略度だけ反映する
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.

[WANT]
そもそも論として、ネクサスローダー経由(かな?)で新規召喚した時に register が 2 回発火する設計自体が、まずいのでなにかしらの対策は入れたほうがいいかもー

  • 新規召喚時は by_progress/ の代わりに update.mcfunction を直接呼ぶとか? 知らんけど

# asset_manager:trader/common/update_recipe/by_daily
# asset_manager:trader/common/update_recipe/by_progress/

# 攻略率を取得
Copy link
Copy Markdown
Contributor

@EllaCoat EllaCoat May 22, 2026

Choose a reason for hiding this comment

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

[WANT]
select_artifact と、この update の mcf で api:global_vars/game_progress が重複呼び出しされているね。
まぁ別にそんなに影響はないけど、対応したかったら対応して、どうぞ。

Comment on lines +24 to +25
function api:artifact/get_registry/normal
function api:artifact/get_registry/hide
Copy link
Copy Markdown
Contributor

@EllaCoat EllaCoat May 22, 2026

Choose a reason for hiding this comment

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

[NITS]
asset:artifact RarityRegistry って想定重い SNBT (要するに重いストレージ)で
current_progress/set_pool.m って単一 Rarity しか参照しなさそうだから、RarityRegistry レベル別に取得する際の API とか後で作ったら良さそう。

Comment on lines +1 to +5
#> api:artifact/get_registry/red
#
#
#
# @api
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.

[NITS]
説明を書け~~~~~~~~~~~~~~~~~~~~~
(他も同様だゾ)

Suggested change
#> 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

@EllaCoat
Copy link
Copy Markdown
Contributor

Copilot の指摘の吟味はしてないけど、なんか超的外れって訳でもなさそうだから、見ておくと良いよ。

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

Labels

⛏️ minor このPRはパッチアップデートに含められないよ

Projects

None yet

Development

Successfully merging this pull request may close these issues.

日替わりで交換する神器が変わる村人を用意する

4 participants