diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/1.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/1.mcfunction new file mode 100644 index 0000000000..3fcd373a9d --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/1.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/blue/1 +# +# ブルーシャード産のLv1神器の配列を返します +# +# @output storage api: Return.Registry.Blue.Lv1 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# ブルーシャードのLv1プールを返す + data modify storage api: Return.Registry.Blue.Lv1 set from storage asset:artifact RarityRegistryWithColor.Blue[1] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/2.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/2.mcfunction new file mode 100644 index 0000000000..4ee501bc33 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/2.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/blue/2 +# +# ブルーシャード産のLv2神器の配列を返します +# +# @output storage api: Return.Registry.Blue.Lv2 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# ブルーシャードのLv2プールを返す + data modify storage api: Return.Registry.Blue.Lv2 set from storage asset:artifact RarityRegistryWithColor.Blue[2] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/3.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/3.mcfunction new file mode 100644 index 0000000000..ec18b8e43d --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/3.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/blue/3 +# +# ブルーシャード産のLv3神器の配列を返します +# +# @output storage api: Return.Registry.Blue.Lv3 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# ブルーシャードのLv3プールを返す + data modify storage api: Return.Registry.Blue.Lv3 set from storage asset:artifact RarityRegistryWithColor.Blue[3] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/4.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/4.mcfunction new file mode 100644 index 0000000000..d5a5599835 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/4.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/blue/4 +# +# ブルーシャード産のLv4神器の配列を返します +# +# @output storage api: Return.Registry.Blue.Lv4 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# ブルーシャードのLv4プールを返す + data modify storage api: Return.Registry.Blue.Lv4 set from storage asset:artifact RarityRegistryWithColor.Blue[4] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/all.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/all.mcfunction new file mode 100644 index 0000000000..09475cc88c --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/blue/all.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/blue/all +# +# ブルーシャード産の神器の配列を返します +# +# @output storage api: Return.Registry.Blue.Lv4 : int[][][] +# 神器のIDの2次元配列 1次元目は要素数5、2次元目は要素数n、3次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# ブルーシャードのプールを返す + data modify storage api: Return.Registry.Blue.All set from storage asset:artifact RarityRegistryWithColor.Blue diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/1.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/1.mcfunction new file mode 100644 index 0000000000..d4664e6412 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/1.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/green/1 +# +# グリーンシャード産のLv1神器の配列を返します +# +# @output storage api: Return.Registry.Green.Lv1 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# グリーンシャードのLv1プールを返す + data modify storage api: Return.Registry.Green.Lv1 set from storage asset:artifact RarityRegistryWithColor.Green[1] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/2.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/2.mcfunction new file mode 100644 index 0000000000..b14360a929 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/2.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/green/2 +# +# グリーンシャード産のLv2神器の配列を返します +# +# @output storage api: Return.Registry.Green.Lv2 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# グリーンシャードのLv2プールを返す + data modify storage api: Return.Registry.Green.Lv2 set from storage asset:artifact RarityRegistryWithColor.Green[2] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/3.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/3.mcfunction new file mode 100644 index 0000000000..384b4cb1ee --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/3.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/green/3 +# +# グリーンシャード産のLv3神器の配列を返します +# +# @output storage api: Return.Registry.Green.Lv3 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# グリーンシャードのLv3プールを返す + data modify storage api: Return.Registry.Green.Lv3 set from storage asset:artifact RarityRegistryWithColor.Green[3] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/4.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/4.mcfunction new file mode 100644 index 0000000000..f89eefef61 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/4.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/green/4 +# +# グリーンシャード産のLv4神器の配列を返します +# +# @output storage api: Return.Registry.Green.Lv4 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# グリーンシャードのLv4プールを返す + data modify storage api: Return.Registry.Green.Lv4 set from storage asset:artifact RarityRegistryWithColor.Green[4] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/all.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/all.mcfunction new file mode 100644 index 0000000000..c9356b5dad --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/green/all.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/green/all +# +# グリーンシャード産の神器の配列を返します +# +# @output storage api: Return.Registry.Green.Lv4 : int[][][] +# 神器のIDの2次元配列 1次元目は要素数5、2次元目は要素数n、3次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# グリーンシャードのプールを返す + data modify storage api: Return.Registry.Green.All set from storage asset:artifact RarityRegistryWithColor.Green diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/1.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/1.mcfunction new file mode 100644 index 0000000000..eb1aa06e73 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/1.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/red/1 +# +# レッドシャード産のLv1神器の配列を返します +# +# @output storage api: Return.Registry.Red.Lv1 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# レッドシャードのLv1プールを返す + data modify storage api: Return.Registry.Red.Lv1 set from storage asset:artifact RarityRegistryWithColor.Red[1] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/2.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/2.mcfunction new file mode 100644 index 0000000000..bcd1b15ab5 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/2.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/red/2 +# +# レッドシャード産のLv2神器の配列を返します +# +# @output storage api: Return.Registry.Red.Lv2 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# レッドシャードのLv2プールを返す + data modify storage api: Return.Registry.Red.Lv2 set from storage asset:artifact RarityRegistryWithColor.Red[2] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/3.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/3.mcfunction new file mode 100644 index 0000000000..9b596354dc --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/3.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/red/3 +# +# レッドシャード産のLv3神器の配列を返します +# +# @output storage api: Return.Registry.Red.Lv3 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# レッドシャードのLv3プールを返す + data modify storage api: Return.Registry.Red.Lv3 set from storage asset:artifact RarityRegistryWithColor.Red[3] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/4.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/4.mcfunction new file mode 100644 index 0000000000..53a20bfdf5 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/4.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/red/4 +# +# レッドシャード産のLv4神器の配列を返します +# +# @output storage api: Return.Registry.Red.Lv4 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# レッドシャードのLv4プールを返す + data modify storage api: Return.Registry.Red.Lv4 set from storage asset:artifact RarityRegistryWithColor.Red[4] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/all.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/all.mcfunction new file mode 100644 index 0000000000..a4b50a5fc4 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/color/red/all.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/color/red/all +# +# レッドシャード産の神器の配列を返します +# +# @output storage api: Return.Registry.Green.Lv4 : int[][][] +# 神器のIDの2次元配列 1次元目は要素数5、2次元目は要素数n、3次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# シャードのプールを返す + data modify storage api: Return.Registry.Red.All set from storage asset:artifact RarityRegistryWithColor.Red diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/1.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/1.mcfunction new file mode 100644 index 0000000000..fc82aad784 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/1.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/extra/daily/1 +# +# 日替わり神器のLv1神器の配列を返します +# +# @output storage api: Return.Registry.Daily.Lv1 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# 日替わり神器のLv1プールを返す + data modify storage api: Return.Registry.Daily.Lv1 set from storage asset:artifact RarityRegistryExtra.Daily[1] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/2.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/2.mcfunction new file mode 100644 index 0000000000..6ab8afe45a --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/2.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/extra/daily/2 +# +# 日替わり神器のLv2神器の配列を返します +# +# @output storage api: Return.Registry.Daily.Lv2 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# 日替わり神器のLv2プールを返す + data modify storage api: Return.Registry.Daily.Lv2 set from storage asset:artifact RarityRegistryExtra.Daily[2] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/3.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/3.mcfunction new file mode 100644 index 0000000000..25b651c99c --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/3.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/extra/daily/3 +# +# 日替わり神器のLv3神器の配列を返します +# +# @output storage api: Return.Registry.Daily.Lv3 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# 日替わり神器のLv3プールを返す + data modify storage api: Return.Registry.Daily.Lv3 set from storage asset:artifact RarityRegistryExtra.Daily[3] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/4.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/4.mcfunction new file mode 100644 index 0000000000..29436e88a1 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/4.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/extra/daily/4 +# +# 日替わり神器のLv4神器の配列を返します +# +# @output storage api: Return.Registry.Daily.Lv4 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# 日替わり神器のLv4プールを返す + data modify storage api: Return.Registry.Daily.Lv4 set from storage asset:artifact RarityRegistryExtra.Daily[4] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/all.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/all.mcfunction new file mode 100644 index 0000000000..e28da15ec4 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/extra/daily/all.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/extra/daily/all +# +# 日替わり神器の配列を返します +# +# @output storage api: Return.Registry.Daily.All : int[][][] +# 神器のIDの2次元配列 1次元目は要素数5、2次元目は要素数n、3次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# 日替わり神器のプールを返す + data modify storage api: Return.Registry.Daily.All set from storage asset:artifact RarityRegistryExtra.Daily diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/1.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/1.mcfunction new file mode 100644 index 0000000000..9c78730f34 --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/1.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/normal/1 +# +# 通常シャード産のLv1神器の配列を返します +# +# @output storage api: Return.Registry.Normal.Lv1 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# シャードのLv1プールを返す + data modify storage api: Return.Registry.Normal.Lv1 set from storage asset:artifact RarityRegistry[1] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/2.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/2.mcfunction new file mode 100644 index 0000000000..64441aa87a --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/2.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/normal/2 +# +# 通常シャード産のLv2神器の配列を返します +# +# @output storage api: Return.Registry.Normal.Lv2 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# シャードのLv2プールを返す + data modify storage api: Return.Registry.Normal.Lv2 set from storage asset:artifact RarityRegistry[2] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/3.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/3.mcfunction new file mode 100644 index 0000000000..62950026ab --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/3.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/normal/3 +# +# 通常シャード産のLv3神器の配列を返します +# +# @output storage api: Return.Registry.Normal.Lv3 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# シャードのLv3プールを返す + data modify storage api: Return.Registry.Normal.Lv3 set from storage asset:artifact RarityRegistry[3] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/4.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/4.mcfunction new file mode 100644 index 0000000000..fffb45e26c --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/4.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/normal/4 +# +# 通常シャード産のLv1神器の配列を返します +# +# @output storage api: Return.Registry.Normal.Lv4 : int[][] +# 神器のIDの2次元配列 1次元目は要素数n、2次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# シャードのLv4プールを返す + data modify storage api: Return.Registry.Normal.Lv4 set from storage asset:artifact RarityRegistry[4] diff --git a/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/all.mcfunction b/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/all.mcfunction new file mode 100644 index 0000000000..69cfb1679a --- /dev/null +++ b/TheSkyBlessing/data/api/functions/artifact/get_registry/normal/all.mcfunction @@ -0,0 +1,11 @@ +#> api:artifact/get_registry/normal/all +# +# 通常シャード産の神器の配列を返します +# +# @output storage api: Return.Registry.Green.Lv4 : int[][][] +# 神器のIDの2次元配列 1次元目は要素数5、2次元目は要素数n、3次元目は要素数が1以上で、神器IDを格納 +# +# @api + +# シャードのプールを返す + data modify storage api: Return.Registry.Normal.All set from storage asset:artifact RarityRegistry diff --git a/TheSkyBlessing/data/asset/functions/trader/15/_index.d.mcfunction b/TheSkyBlessing/data/asset/functions/trader/15/_index.d.mcfunction new file mode 100644 index 0000000000..60e6385588 --- /dev/null +++ b/TheSkyBlessing/data/asset/functions/trader/15/_index.d.mcfunction @@ -0,0 +1,10 @@ +#> asset:trader/15/_index.d +# @private + +#> tag +# @within function asset:trader/15/select_artifact/** + #declare score_holder $Current + #declare score_holder $UnlockLv1 + #declare score_holder $UnlockLv2 + #declare score_holder $UnlockLv3 + #declare score_holder $UnlockLv4 diff --git a/TheSkyBlessing/data/asset/functions/trader/15/register.mcfunction b/TheSkyBlessing/data/asset/functions/trader/15/register.mcfunction new file mode 100644 index 0000000000..71fec94f32 --- /dev/null +++ b/TheSkyBlessing/data/asset/functions/trader/15/register.mcfunction @@ -0,0 +1,37 @@ +#> asset:trader/15/register +# +# +# +# @within function asset_manager:trader/register/register.m + +execute unless loaded 37 15 -6 run return 1 + +# ID (int) + data modify storage asset:trader ID set value 15 +# Pos ([int] @ 3) + data modify storage asset:trader Pos set value [37,15,-6] +# 名前 (TextComponent) (オプション) + data modify storage asset:trader Name set value '{"text":"日替わり商人"}' +# 方向 (float) (オプション) + data modify storage asset:trader Rotation set value 180f + +# 日替わりで更新する (boolean) + data modify storage asset:trader DailyUpdate set value true + +# 売る神器を決める + function asset:trader/15/select_artifact/ + +# プレイヤーの攻略度に対応した神器 + data modify storage asset:trader Trades append value {} + data modify storage asset:trader Trades[-1].BuyA set value {PresetItem:"currency/high",Count:8b} + data modify storage asset:trader Trades[-1].Sell set from storage asset:temp Sell.CurrentProgress + data modify storage asset:trader Trades[-1].MaxUses set value 1 + +# プレイヤーの攻略段階までの神器 + data modify storage asset:trader Trades append value {} + data modify storage asset:trader Trades[-1].BuyA set value {PresetItem:"currency/high",Count:8b} + data modify storage asset:trader Trades[-1].Sell set from storage asset:temp Sell.UpToProgress + data modify storage asset:trader Trades[-1].MaxUses set value 1 + +# リセット + data remove storage asset:temp Sell diff --git a/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/.mcfunction b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/.mcfunction new file mode 100644 index 0000000000..701671adf9 --- /dev/null +++ b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/.mcfunction @@ -0,0 +1,36 @@ +#> asset:trader/15/select_artifact/ +# +# +# +# @within function asset:trader/15/register + +# 販売する神器をプールから選択する +# 1. 攻略段階に合ったランクの神器 +# 2. 攻略段階までのランクの神器 +# +# また、低確率で、このプールが隠し神器のプールに上書きされる + +# 攻略度取得 + function api:global_vars/game_progress + execute store result score $Current Temporary run data get storage api: Return.Progress 100 + +# globalで定義された攻略度によるシャード解放の割合をそれぞれ取得 + execute store result score $UnlockLv1 Temporary run data get storage global UnlockShardProgress[0] + execute store result score $UnlockLv2 Temporary run data get storage global UnlockShardProgress[1] + execute store result score $UnlockLv3 Temporary run data get storage global UnlockShardProgress[2] + execute store result score $UnlockLv4 Temporary run data get storage global UnlockShardProgress[3] + +# 日替わり枠プールになる確率 + data modify storage asset:temp Temp.Per set value "5" + +# 1, 2それぞれで神器を選択 + function asset:trader/15/select_artifact/current_progress/ + function asset:trader/15/select_artifact/up_to_progress/m with storage asset:temp Temp + +# リセット + scoreboard players reset $Current Temporary + scoreboard players reset $UnlockLv1 Temporary + scoreboard players reset $UnlockLv2 Temporary + scoreboard players reset $UnlockLv3 Temporary + scoreboard players reset $UnlockLv4 Temporary + data remove storage asset:temp Temp diff --git a/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/current_progress/.mcfunction b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/current_progress/.mcfunction new file mode 100644 index 0000000000..aedfe1fa28 --- /dev/null +++ b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/current_progress/.mcfunction @@ -0,0 +1,26 @@ +#> asset:trader/15/select_artifact/current_progress/ +# +# +# +# @within function asset:trader/15/select_artifact/ + +# 攻略度段階に応じてプールを決める +# シャード村人に対応した攻略度で設定しておく + +# プールを設定 +# Lv1は最初から買えるようにする + data modify storage asset:temp Temp.Rarity set value 1 + execute if score $Current Temporary >= $UnlockLv2 Temporary run data modify storage asset:temp Temp.Rarity set value 2 + execute if score $Current Temporary >= $UnlockLv3 Temporary run data modify storage asset:temp Temp.Rarity set value 3 + execute if score $Current Temporary >= $UnlockLv4 Temporary run data modify storage asset:temp Temp.Rarity set value 4 + function asset:trader/15/select_artifact/current_progress/set_pool.m with storage asset:temp Temp + +# プールから神器を1つ抽出する + function lib:array/session/open + data modify storage lib: Array set from storage asset:temp Pool + function asset:trader/15/select_artifact/picks + data modify storage asset:temp Sell.CurrentProgress set from storage lib: Elements[] + function lib:array/session/close + +# リセット + data remove storage asset:temp Pool diff --git a/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/current_progress/set_pool.m.mcfunction b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/current_progress/set_pool.m.mcfunction new file mode 100644 index 0000000000..f3ab5063ec --- /dev/null +++ b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/current_progress/set_pool.m.mcfunction @@ -0,0 +1,15 @@ +#> asset:trader/15/select_artifact/current_progress/set_pool.m +# @input args: +# Rarity : int +# @within function asset:trader/15/select_artifact/current_progress/ + +# プールを設定 + $function api:artifact/get_registry/normal/$(Rarity) + $data modify storage asset:temp Pool set from storage api: Return.Registry.Normal.Lv$(Rarity) + +# 確率でプールを日替わり枠に置換 + $execute unless predicate lib:random_pass_per/$(Per) run return fail + +# 該当Lvの要素が1個でもあれば置換 + $function api:artifact/get_registry/extra/daily/$(Rarity) + $execute if data storage api: Return.Registry.Daily.Lv$(Rarity)[0] run data modify storage asset:temp Pool set from storage api: Return.Registry.Daily.Lv$(Rarity) diff --git a/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/picks.mcfunction b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/picks.mcfunction new file mode 100644 index 0000000000..afa92956cb --- /dev/null +++ b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/picks.mcfunction @@ -0,0 +1,36 @@ +#> asset:trader/15/select_artifact/picks +# +# プールから1つの神器を選択する +# +# @within function +# asset:trader/15/select_artifact/current_progress/ +# asset:trader/15/select_artifact/up_to_progress/m +# asset:trader/15/select_artifact/picks + +#> private +# @private + #declare score_holder $CandidatesLength + #declare score_holder $Random + +# pickする + data modify storage lib: Picks set value [0] + execute store result score $CandidatesLength Temporary if data storage lib: Array[] + execute store result score $Random Temporary run random value 0..65535 + execute store result storage lib: Picks[0] int 1 run scoreboard players operation $Random Temporary %= $CandidatesLength Temporary + function lib:array/picks + +# リセット + scoreboard players reset $Random Temporary + scoreboard players reset $CandidatesLength Temporary + +# 選択した配列が2次元 &&、要素数が1 なら、次元を1減らしてreturnする + execute if data storage lib: Elements[][] unless data storage lib: Elements[][1] run return run data modify storage lib: Elements set from storage lib: Elements[] + +# 1次元配列ならreturn + execute unless data storage lib: Elements[][] run return fail + +# 配列の次元を1減らす + data modify storage lib: Array set from storage lib: Elements[] + +# 再帰 + function asset:trader/15/select_artifact/picks diff --git a/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/up_to_progress/m.mcfunction b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/up_to_progress/m.mcfunction new file mode 100644 index 0000000000..375b471cba --- /dev/null +++ b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/up_to_progress/m.mcfunction @@ -0,0 +1,40 @@ +#> asset:trader/15/select_artifact/up_to_progress/m +# +# +# +# @within function asset:trader/15/select_artifact/ + +# 隠しプールにするかの判定 + $execute if predicate lib:random_pass_per/$(Per) run data modify storage asset:temp IsSpecialPool set value true + +# プール初期化 + data modify storage asset:temp Pool set value [] + +# 攻略段階に応じて各ランクのプールを取得 + execute unless data storage asset:temp {IsSpecialPool:true} run function api:artifact/get_registry/normal/1 + execute if score $Current Temporary >= $UnlockLv2 Temporary unless data storage asset:temp {IsSpecialPool:true} run function api:artifact/get_registry/normal/2 + execute if score $Current Temporary >= $UnlockLv3 Temporary unless data storage asset:temp {IsSpecialPool:true} run function api:artifact/get_registry/normal/3 + execute if score $Current Temporary >= $UnlockLv4 Temporary unless data storage asset:temp {IsSpecialPool:true} run function api:artifact/get_registry/normal/4 + + execute if data storage asset:temp {IsSpecialPool:true} run function api:artifact/get_registry/extra/daily/1 + execute if score $Current Temporary >= $UnlockLv2 Temporary if data storage asset:temp {IsSpecialPool:true} run function api:artifact/get_registry/extra/daily/2 + execute if score $Current Temporary >= $UnlockLv3 Temporary if data storage asset:temp {IsSpecialPool:true} run function api:artifact/get_registry/extra/daily/3 + execute if score $Current Temporary >= $UnlockLv4 Temporary if data storage asset:temp {IsSpecialPool:true} run function api:artifact/get_registry/extra/daily/4 + +# プールを設定 + execute unless data storage asset:temp {IsSpecialPool:true} run function asset:trader/15/select_artifact/up_to_progress/set_pool.m {Type:"Normal"} + execute if data storage asset:temp {IsSpecialPool:true} run function asset:trader/15/select_artifact/up_to_progress/set_pool.m {Type:"Daily"} + +# 要素数が0の場合、強制的に通常シャードのプールで上書きする (隠しプールの神器が0個である可能性があるため) + execute unless data storage asset:temp Pool[0] run function asset:trader/15/select_artifact/up_to_progress/set_pool.m {Type:"Normal"} + +# プールから神器を1つ抽出する + function lib:array/session/open + data modify storage lib: Array set from storage asset:temp Pool + function asset:trader/15/select_artifact/picks + data modify storage asset:temp Sell.UpToProgress set from storage lib: Elements[] + function lib:array/session/close + +# リセット + data remove storage asset:temp IsSpecialPool + data remove storage asset:temp Pool diff --git a/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/up_to_progress/set_pool.m.mcfunction b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/up_to_progress/set_pool.m.mcfunction new file mode 100644 index 0000000000..bef4ea3ed5 --- /dev/null +++ b/TheSkyBlessing/data/asset/functions/trader/15/select_artifact/up_to_progress/set_pool.m.mcfunction @@ -0,0 +1,9 @@ +#> asset:trader/15/select_artifact/up_to_progress/set_pool.m +# @input args: +# Type : string (Normal | Hide) +# @within function asset:trader/15/select_artifact/up_to_progress/m + + $data modify storage asset:temp Pool append from storage api: Return.Registry.$(Type).Lv1[] + $execute if score $Current Temporary >= $UnlockLv2 Temporary run data modify storage asset:temp Pool append from storage api: Return.Registry.$(Type).Lv2[] + $execute if score $Current Temporary >= $UnlockLv3 Temporary run data modify storage asset:temp Pool append from storage api: Return.Registry.$(Type).Lv3[] + $execute if score $Current Temporary >= $UnlockLv4 Temporary run data modify storage asset:temp Pool append from storage api: Return.Registry.$(Type).Lv4[] diff --git a/TheSkyBlessing/data/asset_manager/functions/artifact/_index.d.mcfunction b/TheSkyBlessing/data/asset_manager/functions/artifact/_index.d.mcfunction index edd8b505ef..3d8c24b133 100644 --- a/TheSkyBlessing/data/asset_manager/functions/artifact/_index.d.mcfunction +++ b/TheSkyBlessing/data/asset_manager/functions/artifact/_index.d.mcfunction @@ -4,6 +4,7 @@ #> storage # @within * # api:artifact/core/** +# api:artifact/get_registry/** # asset:artifact/*/register # asset:artifact/*/give/2.give # asset:artifact/*/*/2.check_condition diff --git a/TheSkyBlessing/data/asset_manager/functions/artifact/load.mcfunction b/TheSkyBlessing/data/asset_manager/functions/artifact/load.mcfunction index be7362ac37..6b9f61b065 100644 --- a/TheSkyBlessing/data/asset_manager/functions/artifact/load.mcfunction +++ b/TheSkyBlessing/data/asset_manager/functions/artifact/load.mcfunction @@ -9,5 +9,7 @@ data modify storage asset:artifact RarityRegistryWithColor.Red set value [["UNUSED"], [], [], [], []] data modify storage asset:artifact RarityRegistryWithColor.Blue set value [["UNUSED"], [], [], [], []] data modify storage asset:artifact RarityRegistryWithColor.Green set value [["UNUSED"], [], [], [], []] + data modify storage asset:artifact RarityRegistryExtra.Daily set value [["UNUSED"], [], [], [], []] + # 読み込み function #asset:artifact/register diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/_index.d.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/_index.d.mcfunction index ad3ec5b910..b8f060e41f 100644 --- a/TheSkyBlessing/data/asset_manager/functions/trader/_index.d.mcfunction +++ b/TheSkyBlessing/data/asset_manager/functions/trader/_index.d.mcfunction @@ -12,6 +12,8 @@ # core:tick/4_interval # debug:trader/update #declare tag Trader + #declare tag Trader.DailyUpdate + #declare tag Trader.Initialized #> storage # @within @@ -28,13 +30,13 @@ # @within function # api:trader/schedule_recipe_update_check # asset_manager:trader/tick/4_interval -# asset_manager:trader/common/update_recipe +# asset_manager:trader/common/update_recipe/by_progress/ # core:load_once #declare score_holder $TraderRecipeVersion #> update # @within * -# asset_manager:trader/common/update_recipe +# asset_manager:trader/common/update_recipe/update # asset_manager:trader/common/trades_map/** #declare score_holder $Current #declare score_holder $Required diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/m.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/.mcfunction similarity index 62% rename from TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/m.mcfunction rename to TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/.mcfunction index 1b7f43a666..139020d60f 100644 --- a/TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/m.mcfunction +++ b/TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/.mcfunction @@ -1,10 +1,6 @@ -#> asset_manager:trader/common/refresh_trades/m -# @input args -# GameVersion: string -# @within function asset_manager:trader/common/update_recipe - -# バージョンが不一致なことをチェックする - $execute if data storage oh_my_dat: _[-4][-4][-4][-4][-4][-4][-4][-4].TraderData{Version:"$(GameVersion)"} run return fail +#> asset_manager:trader/common/refresh_trades/ +# +# @within function asset_manager:trader/common/update_recipe/get_trades # 更新する // TODO 本当は Trades に限らず、Pos, Name, Rotation 等も更新するべきだが、実装コストが重いので後回しにする function asset_manager:trader/common/refresh_trades/load_register.m with storage oh_my_dat: _[-4][-4][-4][-4][-4][-4][-4][-4].TraderData diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/load_register.m.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/load_register.m.mcfunction index e6de38a275..1ecd7f6661 100644 --- a/TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/load_register.m.mcfunction +++ b/TheSkyBlessing/data/asset_manager/functions/trader/common/refresh_trades/load_register.m.mcfunction @@ -1,6 +1,6 @@ #> asset_manager:trader/common/refresh_trades/load_register.m # @input args # ID: int -# @within function asset_manager:trader/common/refresh_trades/m +# @within function asset_manager:trader/common/refresh_trades/ $function asset:trader/$(ID)/register diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/common/trades_map/.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/common/trades_map/.mcfunction index 3b7b3c6837..e11527458f 100644 --- a/TheSkyBlessing/data/asset_manager/functions/trader/common/trades_map/.mcfunction +++ b/TheSkyBlessing/data/asset_manager/functions/trader/common/trades_map/.mcfunction @@ -5,7 +5,7 @@ # @input storage asset:trader Trades # @output storage asset:trader Recipes # @within function -# asset_manager:trader/common/update_recipe +# asset_manager:trader/common/update_recipe/update # asset_manager:trader/common/trades_map/ # 攻略進捗 (条件) のチェック用データ取得 diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_daily.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_daily.mcfunction new file mode 100644 index 0000000000..3759949be6 --- /dev/null +++ b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_daily.mcfunction @@ -0,0 +1,15 @@ +#> asset_manager:trader/common/update_recipe/by_daily +# +# +# +# @within function asset_manager:trader/daily_update + +# 取引一覧を抽出 + function asset_manager:trader/common/update_recipe/get_trades + data modify storage asset:trader Trades set from storage oh_my_dat: _[-4][-4][-4][-4][-4][-4][-4][-4].TraderData.Trades + +# 取引を更新 + function asset_manager:trader/common/update_recipe/update + +# リセット + function asset_manager:trader/register/reset diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/.mcfunction new file mode 100644 index 0000000000..18cceb56d8 --- /dev/null +++ b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/.mcfunction @@ -0,0 +1,31 @@ +#> asset_manager:trader/common/update_recipe/by_progress/ +# +# 商人のレシピを更新する +# +# @within function +# asset_manager:trader/tick/4_interval +# asset_manager:trader/daily_update +# asset_manager:trader/register/construct/set_data + +# OhMyDat呼び出し + function oh_my_dat:please + +# 日替わり商人の場合は現在の商品は維持し、攻略度だけ反映する +# 初回は実行する必要がないため弾く + execute if entity @s[tag=Trader.DailyUpdate,tag=Trader.Initialized] run function asset_manager:trader/common/update_recipe/by_progress/keep_sells/ + execute if entity @s[tag=Trader.DailyUpdate,tag=!Trader.Initialized] run tag @s add Trader.Initialized + +# バージョンをチェックし、違うなら取引内容を更新する + function asset_manager:trader/common/update_recipe/by_progress/check_version.m with storage global + +# storageに入れる + data modify storage asset:trader Trades set from storage oh_my_dat: _[-4][-4][-4][-4][-4][-4][-4][-4].TraderData.Trades + +# 取引を更新 + function asset_manager:trader/common/update_recipe/update + +# バージョンを更新 + scoreboard players operation @s RecipeVersion = $TraderRecipeVersion Global + +# リセット + function asset_manager:trader/register/reset diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/check_version.m.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/check_version.m.mcfunction new file mode 100644 index 0000000000..1739bc6566 --- /dev/null +++ b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/check_version.m.mcfunction @@ -0,0 +1,11 @@ +#> asset_manager:trader/common/update_recipe/by_progress/check_version.m +# +# +# +# @within function asset_manager:trader/common/update_recipe/by_progress/ + +# バージョンが不一致なことをチェックする + $execute if data storage oh_my_dat: _[-4][-4][-4][-4][-4][-4][-4][-4].TraderData{Version:"$(GameVersion)"} run return fail + +# 一致してないならregisterから取引内容を取得 + function asset_manager:trader/common/update_recipe/get_trades diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/keep_sells/.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/keep_sells/.mcfunction new file mode 100644 index 0000000000..b634737eac --- /dev/null +++ b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/keep_sells/.mcfunction @@ -0,0 +1,36 @@ +#> asset_manager:trader/common/update_recipe/by_progress/keep_sells/ +# +# +# +# @within function asset_manager:trader/common/update_recipe/by_progress/ + +# 取引データ取得 + function asset_manager:trader/common/update_recipe/get_trades + +# 自身の取引データ取得 + data modify storage asset:trader TempA set from entity @s Offers.Recipes + +# 更新後のデータを取得 + data modify storage asset:trader TempB set from storage asset:trader Trades + #tellraw @a {"storage":"asset:trader","nbt":"Trades"} + +# 必要なデータだけ移す + # 事前初期化 + data modify storage asset:trader TempC set value [] + # 実行 + function asset_manager:trader/common/update_recipe/by_progress/keep_sells/keep + +# TempCを逆にする + function lib:array/session/open + data modify storage lib: Array set from storage asset:trader TempC + function lib:array/reverse + data modify storage asset:trader TempC set from storage lib: Array + function lib:array/session/close + +# OhMyDatに戻す + data modify storage oh_my_dat: _[-4][-4][-4][-4][-4][-4][-4][-4].TraderData.Trades set from storage asset:trader TempC + +# リセット + data remove storage asset:trader TempA + data remove storage asset:trader TempB + data remove storage asset:trader TempC diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/keep_sells/keep.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/keep_sells/keep.mcfunction new file mode 100644 index 0000000000..3d70cbf02a --- /dev/null +++ b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/by_progress/keep_sells/keep.mcfunction @@ -0,0 +1,45 @@ +#> asset_manager:trader/common/update_recipe/by_progress/keep_sells/keep +# +# 更新前の商品と取引数を維持する +# +# storage +# @input +# asset:trader TempA: 更新前の取引データ配列 +# asset:trader TempB: 更新後の取引データ配列 +# @output +# asset:trader TempC: 更新前の商品とmaxUsesだけ維持した取引データ配列 +# +# @within function +# asset_manager:trader/common/update_recipe/by_progress/keep_sells/ +# asset_manager:trader/common/update_recipe/by_progress/keep_sells/keep + +#> Private +# @private + #declare score_holder $Uses + #declare score_holder $MaxUses + +# 最後尾のsellを移し、usesを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].uses + +# maxUses - UsesをTempBに移す + execute store result score $Uses Temporary run data get storage asset:trader TempA[-1].uses + execute store result score $MaxUses Temporary run data get storage asset:trader TempA[-1].maxUses + execute store result storage asset:trader TempB[-1].MaxUses int 1 run scoreboard players operation $MaxUses Temporary -= $Uses Temporary + +# 売ってるのが神器の場合は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 append from storage asset:trader TempB[-1] + +# 最後尾の要素を削除 + data remove storage asset:trader TempA[-1] + data remove storage asset:trader TempB[-1] + +# リセット + scoreboard players reset $Uses Temporary + scoreboard players reset $MaxUses Temporary + +# 要素がまだあれば再帰 + execute if data storage asset:trader TempA[0] run function asset_manager:trader/common/update_recipe/by_progress/keep_sells/keep diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/get_trades.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/get_trades.mcfunction new file mode 100644 index 0000000000..93726752ea --- /dev/null +++ b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/get_trades.mcfunction @@ -0,0 +1,15 @@ +#> asset_manager:trader/common/update_recipe/get_trades +# +# +# +# @within function +# asset_manager:trader/common/update_recipe/by_daily +# asset_manager:trader/common/update_recipe/by_progress/keep_sells/ +# asset_manager:trader/common/update_recipe/by_progress/check_version.m + +# 事前にstorage初期化 + data modify storage asset:trader Trades set value [] + +# 取引一覧を抽出 + function oh_my_dat:please + function asset_manager:trader/common/refresh_trades/ diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/update.mcfunction similarity index 59% rename from TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe.mcfunction rename to TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/update.mcfunction index 17701861a3..63912bd9f5 100644 --- a/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe.mcfunction +++ b/TheSkyBlessing/data/asset_manager/functions/trader/common/update_recipe/update.mcfunction @@ -1,18 +1,14 @@ -#> asset_manager:trader/common/update_recipe +#> asset_manager:trader/common/update_recipe/update +# # -# 商人のレシピを更新する # # @within function -# asset_manager:trader/tick/4_interval -# asset_manager:trader/register/construct/set_data +# asset_manager:trader/common/update_recipe/by_daily +# asset_manager:trader/common/update_recipe/by_progress/ # 攻略率を取得 function api:global_vars/game_progress execute store result score $Current Temporary run data get storage api: Return.Progress 100 -# 取引一覧を抽出 - function oh_my_dat:please - function asset_manager:trader/common/refresh_trades/m with storage global - data modify storage asset:trader Trades set from storage oh_my_dat: _[-4][-4][-4][-4][-4][-4][-4][-4].TraderData.Trades # 取引一覧を更新 function lib:array/session/open data modify storage lib: Array set from storage asset:trader Trades @@ -22,9 +18,6 @@ execute if data storage asset:trader Trades[0] run function asset_manager:trader/common/trades_map/ data modify entity @s Offers.Recipes set from storage asset:trader Recipes -# バージョンを更新 - scoreboard players operation @s RecipeVersion = $TraderRecipeVersion Global - # リセット scoreboard players reset $Current Temporary data remove storage asset:trader Trades diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/daily_update.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/daily_update.mcfunction new file mode 100644 index 0000000000..803e3942bb --- /dev/null +++ b/TheSkyBlessing/data/asset_manager/functions/trader/daily_update.mcfunction @@ -0,0 +1,35 @@ +#> asset_manager:trader/daily_update +# +# +# +# @within function asset_manager:trader/tick/4_interval + +#> Private +# @private + #declare score_holder $DayTime + #declare score_holder $GameTime + #declare tag Update + +# 現在のdaytime/gametimeを取得 + execute store result score $DayTime Temporary run time query daytime + execute store result score $GameTime Temporary run time query gametime + +# 4tick前のdaytimeと比較し、4tick前の方がdaytimeが大きい かつ 現在のdaytimeが0~2000 +# または +# 最後に更新してから24000tick以上経過しているなら更新 + execute if score $DayTime Temporary < @s LatestDayTime if score $DayTime Temporary matches 0..2000 run tag @s add Update + + execute if entity @s[tag=!Update] run scoreboard players operation $GameTime Temporary -= @s LatestDailyUpdateTick + execute if entity @s[tag=!Update] if score $GameTime Temporary matches 24000.. run tag @s add Update + +# 更新 + execute if entity @s[tag=Update] run function asset_manager:trader/common/update_recipe/by_daily + +# LatestDayTime/LatestUpdateTick更新 + execute store result score @s LatestDayTime run time query daytime + execute if entity @s[tag=Update] store result score @s LatestDailyUpdateTick run data get storage global Time + +# リセット + scoreboard players reset $DayTime Temporary + scoreboard players reset $GameTime Temporary + tag @s remove Update diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/register/construct/set_data.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/register/construct/set_data.mcfunction index 3f871a71be..e61316456d 100644 --- a/TheSkyBlessing/data/asset_manager/functions/trader/register/construct/set_data.mcfunction +++ b/TheSkyBlessing/data/asset_manager/functions/trader/register/construct/set_data.mcfunction @@ -13,13 +13,17 @@ # Default位置 data modify storage oh_my_dat: _[-4][-4][-4][-4][-4][-4][-4][-4].TraderData.DefaultPos set from entity @s Pos data modify storage oh_my_dat: _[-4][-4][-4][-4][-4][-4][-4][-4].TraderData.DefaultRotation set from storage asset:trader Rotation +# 日替わり更新するか + execute if data storage asset:trader {DailyUpdate:true} run tag @s add Trader.DailyUpdate + execute if data storage asset:trader {DailyUpdate:true} store result score @s LatestDayTime run time query daytime + execute if data storage asset:trader {DailyUpdate:true} store result score @s LatestDailyUpdateTick run data get storage global Time # 取引一覧 data modify storage oh_my_dat: _[-4][-4][-4][-4][-4][-4][-4][-4].TraderData.Trades set from storage asset:trader Trades # そのまま適用するやつ data modify entity @s CustomName set from storage asset:trader Name data modify entity @s Rotation[0] set from storage asset:trader Rotation # 取引データ - function asset_manager:trader/common/update_recipe + function asset_manager:trader/common/update_recipe/by_progress/ # リセット tag @s remove TraderInit diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/register/reset.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/register/reset.mcfunction index 9f8be8c575..d51d1aa734 100644 --- a/TheSkyBlessing/data/asset_manager/functions/trader/register/reset.mcfunction +++ b/TheSkyBlessing/data/asset_manager/functions/trader/register/reset.mcfunction @@ -1,8 +1,12 @@ #> asset_manager:trader/register/reset -# @within function world_manager:nexus_loader/try_load_asset/m +# @within function +# world_manager:nexus_loader/try_load_asset/m +# asset_manager:trader/common/update_recipe/by_daily +# asset_manager:trader/common/update_recipe/by_progress/ data remove storage asset:trader ID data remove storage asset:trader Pos data remove storage asset:trader Name data remove storage asset:trader Rotation data remove storage asset:trader Trades +data remove storage asset:trader DailyUpdate diff --git a/TheSkyBlessing/data/asset_manager/functions/trader/tick/4_interval.mcfunction b/TheSkyBlessing/data/asset_manager/functions/trader/tick/4_interval.mcfunction index 6fa05effef..bd9276dade 100644 --- a/TheSkyBlessing/data/asset_manager/functions/trader/tick/4_interval.mcfunction +++ b/TheSkyBlessing/data/asset_manager/functions/trader/tick/4_interval.mcfunction @@ -7,5 +7,8 @@ # 奈落回避 execute if predicate lib:is_void unless predicate lib:is_vehicle run function asset_manager:trader/to_spawn +# 日替わり更新 + execute if entity @s[tag=Trader.DailyUpdate] run function asset_manager:trader/daily_update + # 更新処理 - execute unless score $TraderRecipeVersion Global = @s RecipeVersion run function asset_manager:trader/common/update_recipe + execute unless score $TraderRecipeVersion Global = @s RecipeVersion run function asset_manager:trader/common/update_recipe/by_progress/ diff --git a/TheSkyBlessing/data/core/functions/load_once.mcfunction b/TheSkyBlessing/data/core/functions/load_once.mcfunction index 3fa5d1508d..da4027c914 100644 --- a/TheSkyBlessing/data/core/functions/load_once.mcfunction +++ b/TheSkyBlessing/data/core/functions/load_once.mcfunction @@ -235,9 +235,13 @@ team modify NoCollision collisionRule never #> AssetManager: Trader # @within function - # asset_manager:trader/tick/4_interval + # asset_manager:trader/tick/** + # asset_manager:trader/daily_update # asset_manager:trader/common/** + # asset_manager:trader/register/construct/set_data scoreboard objectives add RecipeVersion dummy {"text":"商人の取引内容の更新チェック用スコア"} + scoreboard objectives add LatestDayTime dummy {"text":"商人の日替わり更新チェック用スコア"} + scoreboard objectives add LatestDailyUpdateTick dummy {"text":"商人が最後に日替わり更新したTick"} #> イベントハンドラ用スコアボード # @within function