関数内でのlore設定に関する動作不良

環境 PlayerRealms (1.12.2) - Skbee 1.10.2 - Skquery 4.1.3 - Skellet 1.9.11-pr - Skript 2.3.6 - SkRayFall 1.9.21 - SkDragon 0.16 プログラム
on load:
set {id} to 0

function temp() :: item:
set {_item} to paper
add 1 to {_id}
set {_cnt} to random integer between 1 and 3

set {_line} to 2
broadcast "cnt = %{_cnt}%, id = %{_id}%"
set line 1 of {_item}'s lore to "cnt = %{_cnt}%, id = %{_id}%"
loop {_cnt} times:
set {_ran} to get_random_integer()
set line {_line} of {_item}'s lore to "&7index %{_line}% : value %{_ran}%"
broadcast "&7index %{_line}% : value %{_ran}%"
add 1 to {_line}

return {_item}

function get_random_integer() :: number:

# 省略
set {_res} to random integer between 1 and 3

return {_res}

command /eval <text>:
trigger:
evaluate arg-1
on load:
set {id} to 0

function temp() :: item:
set {_item} to paper
add 1 to {_id}
set {_cnt} to random integer between 1 and 3

set {_line} to 2
broadcast "cnt = %{_cnt}%, id = %{_id}%"
set line 1 of {_item}'s lore to "cnt = %{_cnt}%, id = %{_id}%"
loop {_cnt} times:
set {_ran} to get_random_integer()
set line {_line} of {_item}'s lore to "&7index %{_line}% : value %{_ran}%"
broadcast "&7index %{_line}% : value %{_ran}%"
add 1 to {_line}

return {_item}

function get_random_integer() :: number:

# 省略
set {_res} to random integer between 1 and 3

return {_res}

command /eval <text>:
trigger:
evaluate arg-1
複数回 /eval give temp() to player コマンドを実行してアイテムを手に入れたとき、 写真のように chatに表示されているものと異なるアイテムが渡される ことがあります。 解決策があるなら教えていただきたいです。 その他試した結果解決に至らなかった方法を以下に記載しておきます。
1. 関数呼び出し時に毎回 delete {_item} する → 変化なし

2. ループを使わず、以下のように条件分岐で記述する → 変化なし
if 1 <= {_cnt}:
set line 2 of ~~~
if 2 <= {_cnt}:
set line 3 of ~~~

3. set line ではなく、 add "" to line of ~~ を使用する → 悪化する(だんだん行数が増えていきます)

4. 先に個数分 set line {_n} to "loading..." などと枠を作っておき、そこを編集する → 変化なし

5. waitを挟む → 戻り値を返す関数では使えない
1. 関数呼び出し時に毎回 delete {_item} する → 変化なし

2. ループを使わず、以下のように条件分岐で記述する → 変化なし
if 1 <= {_cnt}:
set line 2 of ~~~
if 2 <= {_cnt}:
set line 3 of ~~~

3. set line ではなく、 add "" to line of ~~ を使用する → 悪化する(だんだん行数が増えていきます)

4. 先に個数分 set line {_n} to "loading..." などと枠を作っておき、そこを編集する → 変化なし

5. waitを挟む → 戻り値を返す関数では使えない
No description
No description
18 Replies
tanoKun
tanoKun10mo ago
eval 使わないとどうなる?
unnnnnnnnnnn
unnnnnnnnnnn10mo ago
関係ないと思うけど{_id}と{id}両方あって変 loreって{_ts::} :: stringsで set {_item}'s lore to {_ts::} みたいにできなかったっけ
unnnnnnnnnnn
unnnnnnnnnnn10mo ago
{_id}の部分治して結構試したけど毎回正常に実行できた
No description
No description
unnnnnnnnnnn
unnnnnnnnnnn10mo ago
環境は非PR1.12.2 skquery3.6.4 skbee1.10.2 mundosk 1.8.6-BETA.57 reflect2.2.3 頻度どのくらいだった?
Futaba
FutabaOP10mo ago
貼るsk間違ってました、ごめんなさい({id}に統一済みです)
command /test:
trigger:
player is an op
give temp() to player
command /test:
trigger:
player is an op
give temp() to player
eval使わずに試してみても結果は変わりませんでした
Futaba
FutabaOP10mo ago
No description
Futaba
FutabaOP10mo ago
No description
Futaba
FutabaOP10mo ago
凄く説明するのが難しいのですが、 毎回 それぞれの index 毎に value を更新し、 もし indexとvalueが存在しなかったときはそのデータに置き換える、みたいな挙動をしている気がします
↓ item の lore だと思ってください ↓

# id = 1, cnt = 1 # 正常に出力されます
1 行目 : 3

# id = 2, cnt = 2 # 正常に出力されます
1 行目 : 2
2 行目 : 3

# id = 3, cnt = 1 # ここの挙動がおかしくなります(cnt = 1 なので、本来ここに2行目は入らないはず)
1 行目 : 3
2 行目 : 3 # id = 2 の 2 行目が適用されます

# id = 4, cnt = 3 # 正常に出力されます
1 行目 : 1
2 行目 : 2
3 行目 : 3

# id = 5, cnt = 1 # ここの挙動がおかしくなります(cnt = 1 なので、本来ここに2, 3行目は入らないはず)
1 行目 : 3
2 行目 : 2 # id = 4 の 2 行目が適用されます
3 行目 : 3 # id = 4 の 3 行目が適用されます
↓ item の lore だと思ってください ↓

# id = 1, cnt = 1 # 正常に出力されます
1 行目 : 3

# id = 2, cnt = 2 # 正常に出力されます
1 行目 : 2
2 行目 : 3

# id = 3, cnt = 1 # ここの挙動がおかしくなります(cnt = 1 なので、本来ここに2行目は入らないはず)
1 行目 : 3
2 行目 : 3 # id = 2 の 2 行目が適用されます

# id = 4, cnt = 3 # 正常に出力されます
1 行目 : 1
2 行目 : 2
3 行目 : 3

# id = 5, cnt = 1 # ここの挙動がおかしくなります(cnt = 1 なので、本来ここに2, 3行目は入らないはず)
1 行目 : 3
2 行目 : 2 # id = 4 の 2 行目が適用されます
3 行目 : 3 # id = 4 の 3 行目が適用されます
これらの条件下で毎回発生します リロードすることでリセットできるみたいです
unnnnnnnnnnn
unnnnnnnnnnn10mo ago
id=3で毎回おかしくなるってこと?
Futaba
FutabaOP10mo ago
自分より若いidで 自分よりcntが大きいのが存在したらおかしくなります
unnnnnnnnnnn
unnnnnnnnnnn10mo ago
こっちの環境だとそうならない
Futaba
FutabaOP10mo ago
プラグイン関係とか見直してみます
unnnnnnnnnnn
unnnnnnnnnnn10mo ago
グローバル変数使ってほかのコードと干渉してる ラグか何か そもそも使ってるコードが違う skriptかアドオンの違い が考えられる
Futaba
FutabaOP10mo ago
そっちのskriptのバージョンっていくつですか?
unnnnnnnnnnn
unnnnnnnnnnn10mo ago
書き忘れてた2.5.3
Futaba
FutabaOP10mo ago
2.5.3にしたら治りました!
unnnnnnnnnnn
unnnnnnnnnnn10mo ago
ee なんだろう
Futaba
FutabaOP10mo ago
不具合か何かで修正されたんですかね・・・? 相談乗ってくれてありがとうございました🙏
Want results from more Discord servers?
Add your server