関数内での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
tanoKun4mo ago
eval 使わないとどうなる?
unnnnnnnnnnn
unnnnnnnnnnn4mo ago
関係ないと思うけど{_id}と{id}両方あって変 loreって{_ts::} :: stringsで set {_item}'s lore to {_ts::} みたいにできなかったっけ
unnnnnnnnnnn
unnnnnnnnnnn4mo ago
{_id}の部分治して結構試したけど毎回正常に実行できた
No description
No description
unnnnnnnnnnn
unnnnnnnnnnn4mo ago
環境は非PR1.12.2 skquery3.6.4 skbee1.10.2 mundosk 1.8.6-BETA.57 reflect2.2.3 頻度どのくらいだった?
Futaba
Futaba4mo 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
Futaba4mo ago
No description
Futaba
Futaba4mo ago
No description
Futaba
Futaba4mo 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
unnnnnnnnnnn4mo ago
id=3で毎回おかしくなるってこと?
Futaba
Futaba4mo ago
自分より若いidで 自分よりcntが大きいのが存在したらおかしくなります
unnnnnnnnnnn
unnnnnnnnnnn4mo ago
こっちの環境だとそうならない
Futaba
Futaba4mo ago
プラグイン関係とか見直してみます
unnnnnnnnnnn
unnnnnnnnnnn4mo ago
グローバル変数使ってほかのコードと干渉してる ラグか何か そもそも使ってるコードが違う skriptかアドオンの違い が考えられる
Futaba
Futaba4mo ago
そっちのskriptのバージョンっていくつですか?
unnnnnnnnnnn
unnnnnnnnnnn4mo ago
書き忘れてた2.5.3
Futaba
Futaba4mo ago
2.5.3にしたら治りました!
unnnnnnnnnnn
unnnnnnnnnnn4mo ago
ee なんだろう
Futaba
Futaba4mo ago
不具合か何かで修正されたんですかね・・・? 相談乗ってくれてありがとうございました🙏
Want results from more Discord servers?
Add your server
More Posts
エンティティを円を描くように特定の位置に移動させる方法画像のようにエンティティを円を描くような形で特定の位置に移動させたいです。 調べてみてもあまりいい方法が分からず、何か方法があればご教授していただきたいです。レシピを削除した状態でログインした際のエラー文のスパムについてSkBee の構文( https://skripthub.net/docs/?id=10537 )を用いて、バニラのレシピを全て削除しています。 ``` on load: remove allon chest close みたいなことがしたいチェストの開閉を検知したいです ひとしきり調べてみたのですが いい方法が思い浮かびませんでした なにとぞ知恵をお貸しください…アイテムがつるはしかどうか検知したいgui作ってるのですが、クリックしたアイテムがつるはしだったとき(木,石,轍,ダイヤなど関係なく)検知したいのですが、なにかいい方法あったりしますか? ``` if item is wood pickshow TEMP の挙動の相談sk 2.5.3 です `show crit with speed 1 at location at {_loc}` 上記構文でエフェクトを表示させると vector 1,1,1 方向にだけ飛ぶエフェスキンが変更されない2TCT-plusにあやかって、妖狐の変身アイテムを実装してます ``` if name of clicked inventory is "TCTショップ": ~ else if name of cl大量の変数を消去したい`{entity::%uuid of entity%}` の形式で保存しているつもりが `{entity:%uuid of entity%}` という、リストになっていない形式で保存されてしまい deSkriptで与えたダメージのdamage causeを変更したいTCTの地雷を作ってます。 地雷の死因(damage cause)を変えるのに手間取っています。 SkRageのdamagesourceを用いて、クリーパー頭の近くにいるプレイヤーに対し `damaブロックの向きをプレイヤーの向きによって決める方法私は、今ブロックかくれんぼを作っています。 しかし、**ブロックの向きをプレイヤーの向きによって決める方法**がわからず、困惑しています。 誰か教えてください・「Mobを左クリック」のイベント剣でぶん殴るようなバニラとは違う攻撃方法を作成しており、 ``` on left click: ``` だけだとMobをクリックした場合は動作しないのでMobを左クリックした際に攻撃を行うコードを別に