nbtの変更がバグっている

https://gyazo.com/6d5e3849987e555b1b6565c5464f51c0 skbee 1.9.1 skript 2.5.3 です 僕のサーバーではnbtを上のファンクションを使用して変更しているのですが 武器や防具のnbt変更がバグ?っています 過去に作った防具や装備のnbtは普通に変えることができるのですが クリエイティブ欄にあるアイテムやコマンドで出したアイテムに使うとなぜか正しく実行されず そのアイテム本来の攻撃力と防御力を超えずそこで固定になってしまいます https://gyazo.com/79cfb8e86c73deb9ed883111e793f48e 上の装備に change_nbt({_p},{_slot},"chest","generic.armor",2) を付与したとき #/eval send "%nbt of tool%" 場では正しく+されているのですが 実際着ると数値が皮防具の防御力から変わってません(実際に殴り比べたりもしました)
Gyazo
Gyazo
Gyazo
Gyazo
19 Replies
yukkina
yukkina6d ago
コードがスクショなの悪い質問の仕方すぎる
月猫ch(月雲)
ちょっと思った ちなみに、全く試してないけど クリエの時 インベの挙動がなんかおかしくなったりする記憶があるので まずはset slotではなく ドロップとか、変数に格納するとかで、Nbtが付いた上着自体が作れてるかどうかを試してほしい 風呂からスマホで返事してるから、雑ですまん
ラットリー
ラットリーOP4d ago
クリエイティブとサバイバルどっちでやっても結果は変わりませんでした nbtのついた防具は作れましたが そこからnbtを更新しようとするとおかしくなります
月猫ch(月雲)
ちょっとよくわかんないんですけど 『nntの更新された防具アイテムは作れた』ってことですか? もしそうなら、クリエイティブモードでのインベントリの挙動が違うせいで se slot 〜が動いてないだけないってことかなって
ラットリー
ラットリーOP4d ago
コマンドでnbtのついたアイテムは出せましたが evalなどで新たにつけようとすると新しくつけた項目のみ消えてしまいます わかりづらくてすみません
月猫ch(月雲)
クリエイティブモードサバイバルかんけいなく?
ラットリー
ラットリーOP4d ago
はい
月猫ch(月雲)
add nbt じゃなくて set nbt してるとか?
ラットリー
ラットリーOP4d ago
addです
月猫ch(月雲)
いずれにせよ、とりあえず使ってる関数とか文字として送信して欲しい 画像だと見にくいぜ
ラットリー
ラットリーOP4d ago
わかりました いまスマホなので あとで
月猫ch(月雲)
mata あとでたのむよ -# たぶん俺以外誰も顔を出さないのはそこもあると思う(
ラットリー
ラットリーOP4d ago
わかりました 次から気をつけます ありがとうございます
ラットリー
ラットリーOP4d ago
ありがとうございます 使用例
set {_slot} to check_slot({_p},"逃走者の上着")
change_nbt({_p},{_slot},"chest","generic.armor",2)
set {_slot} to check_slot({_p},"逃走者の上着")
change_nbt({_p},{_slot},"chest","generic.armor",2)
nbtで使用しているfunction
function change_nbt(p: player,slot: number,i: text,t: text,n: number):
set {_o} to 0
if "%{_t}%" is "generic.movementSpeed":
set {_o} to 1
set slot {_slot} of {_p}'s inventory to fnNBTSetModify(slot {_slot} of {_p}'s inventory, {_i},{_t}, {_o}, {_n})
function change_nbt(p: player,slot: number,i: text,t: text,n: number):
set {_o} to 0
if "%{_t}%" is "generic.movementSpeed":
set {_o} to 1
set slot {_slot} of {_p}'s inventory to fnNBTSetModify(slot {_slot} of {_p}'s inventory, {_i},{_t}, {_o}, {_n})
スロットを探すのに使用しているfunction
function check_slot(p: player, text: text) :: number:
set {_slot} to 0
loop 41 times:
if name of slot {_slot} of {_p}'s inventory contain {_text}:
return {_slot}
add 1 to {_slot}
function check_slot(p: player, text: text) :: number:
set {_slot} to 0
loop 41 times:
if name of slot {_slot} of {_p}'s inventory contain {_text}:
return {_slot}
add 1 to {_slot}
遅くなりました
月猫ch(月雲)
うーん、パッとで原因が分かんなかったです… あまり関係ない部分で情報出すとすると 1. loop NUMBER times: では、loop-number loop-numで、何回目のloopかを取得できます。loop LIST: では、loop-counter, loop_count で取得出来ます。 2. 〜's inventoryは、{_inv}とかの変数に格納することで、set slot 〜 on {_inv} のような使い方をできます 普段自分がpaper1.16.5 skbee1.15.xでやってるので あまりこのバージョンで役に立たないや…😅
shuian_kano
shuian_kano4d ago
昔経験したようなしていないような不具合かも slot %number% of %inventory%のitemstackインスタンスをどこかしらでクローン→クローンしたitemstackを編集→インベントリのスロットに入れる っぽい事をしてみたら、わんちゃん解決するかも、、、?
月猫ch(月雲)
つまり、インベントリのアイテムを直編集すると動かねえことがあるから 一旦別の変数にクローンして編集しないとダメかも〜ってこと?
ラットリー
ラットリーOP3d ago
ありがとうございますやってみます
function change_nbt(p: player,slot: number,i: text,t: text,n: number):
set {_o} to 0
if "%{_t}%" is "generic.movementSpeed":
set {_o} to 1
set {_item} to slot {_slot} of {_p}'s inventory
remove {_item} from {_p}'s inventory
send "%{_item}%" to players
set {_item} to fnNBTSetModify({_item}, {_i},{_t}, {_o}, {_n})
send "%{_item}%" to players
give {_item} to {_p}
function change_nbt(p: player,slot: number,i: text,t: text,n: number):
set {_o} to 0
if "%{_t}%" is "generic.movementSpeed":
set {_o} to 1
set {_item} to slot {_slot} of {_p}'s inventory
remove {_item} from {_p}'s inventory
send "%{_item}%" to players
set {_item} to fnNBTSetModify({_item}, {_i},{_t}, {_o}, {_n})
send "%{_item}%" to players
give {_item} to {_p}
こういうことですかね? あと完全に忘れてたんですけどこちらnbtを直接操作してるfunctionです
function fnNBTSetModify(i: itemtype, s: text, m: text, o: number, n: number) :: itemtype:
set {_modify::*} to tag "tag;AttributeModifiers" of nbt compound of {_i}
set {_notfound} to true
loop {_modify::*}:
tag "Slot" of loop-value is {_s}
tag "AttributeName" of loop-value is {_m}
tag "Operation" of loop-value is {_o}
set {_notfount} to false
set {_now} to tag "Amount" of loop-value
set tag "Amount" of loop-value to {_n} + {_now}
exit loop
set {_nbt} to nbt compound of {_i}
if tag "tag;AttributeModifiers" of {_nbt} is set:
delete tag "tag;AttributeModifiers" of {_nbt}
set tag "tag;AttributeModifiers" of {_nbt} to {_modify::*}
return item from nbt {_nbt}
function fnNBTSetModify(i: itemtype, s: text, m: text, o: number, n: number) :: itemtype:
set {_modify::*} to tag "tag;AttributeModifiers" of nbt compound of {_i}
set {_notfound} to true
loop {_modify::*}:
tag "Slot" of loop-value is {_s}
tag "AttributeName" of loop-value is {_m}
tag "Operation" of loop-value is {_o}
set {_notfount} to false
set {_now} to tag "Amount" of loop-value
set tag "Amount" of loop-value to {_n} + {_now}
exit loop
set {_nbt} to nbt compound of {_i}
if tag "tag;AttributeModifiers" of {_nbt} is set:
delete tag "tag;AttributeModifiers" of {_nbt}
set tag "tag;AttributeModifiers" of {_nbt} to {_modify::*}
return item from nbt {_nbt}
すみません🙇 ちなみにこれは上で行ったのと同様過去作だけ動いて普通のアイテムには動きませんでした

Did you find this page helpful?