skriptの右クリック検知時のアイテム名について

サーバー運用される方はこちらで情報交換されてはいかがでしょうか?
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.290614)

skriptの右クリック検知時のアイテム名について

投稿記事by sukafe » 2016年12月18日(日) 18:03

skriptのコードについて質問させていただきます。

コード: 全て選択
on rightclick:
   if player is holding a paper named "ランク1ギルド証明書" with lore "ランク1ギルドであることの証明書":


いま現在このように持っているアイテム名を検知しているのですが、
これだと名前も説明文もアイテムの種類も全く同じでなくては検知してくれなくて。

コード: 全て選択
on rightclick holding items:
   event-items name contains "ランク1ギルド証明書":


のように感じで”名前にこの文字を含んでいるときに発動”の仕方にさせたいのですが、これだとエラーがでてしまいます。
なんとかアイテムの名前の一部分だけを検知、と言う形にさせたいので、
よければご教授賜りたいです。
sukafe
ID:eced7f91
水から上がったとこ
 
記事: 9
登録日時: 2016年12月18日(日) 17:48

  • (PostNo.290636)

Re: skriptの右クリック検知時のアイテム名について

投稿記事by mcgo » 2016年12月18日(日) 20:46

on rightclick holding items:
event-items name contains "ランク1ギルド証明書":

まず1文目はなんのアイテムかを指定したいので
コード: 全て選択
on rightclick holding items:

”items”ではなく
コード: 全て選択
on rightclick holding a paper:

”a paper”にして紙を指定します。

2文目はアイテムの名前を指定します。以下のように書きます。
コード: 全て選択
name of held item contains "ランク1ギルド証明書"

これで持ってるアイテムの名前が”ランク1ギルド証明書”の時になります。

これらを合わせると・・・
コード: 全て選択
on rightclick holding a paper:
   name of held item contains "ランク1ギルド証明書"

こうなります。これで”ランク1ギルド証明書”という名前の紙を持って右クリックした時となります。
もし”ランク1ギルド証明書”という名前ではない場合はそれより下に書かれてるコードは実行されません。

不具合ありましたら返信ください。
最近はだいぶマイクラから離れつつあるこの頃...
主にSkriptトピックに出現して助言してましゅ。
人並み程度のプラグイン制作知識はもってりゅ。
開発依頼とかあればまあPMで気軽に(^o^)
【Skript自作コード公開中】
アバター
mcgo
ID:d7e2f34f
鉄鉱掘り
 
記事: 280
登録日時: 2016年11月04日(金) 00:05
お住まい: Minecraft

  • (PostNo.290643)

Re: skriptの右クリック検知時のアイテム名について

投稿記事by sukafe » 2016年12月18日(日) 21:11

mcgo さんが書きました:
on rightclick holding items:
event-items name contains "ランク1ギルド証明書":

まず1文目はなんのアイテムかを指定したいので
コード: 全て選択
on rightclick holding items:

”items”ではなく
コード: 全て選択
on rightclick holding a paper:

”a paper”にして紙を指定します。

2文目はアイテムの名前を指定します。以下のように書きます。
コード: 全て選択
name of held item contains "ランク1ギルド証明書"

これで持ってるアイテムの名前が”ランク1ギルド証明書”の時になります。

これらを合わせると・・・
コード: 全て選択
on rightclick holding a paper:
   name of held item contains "ランク1ギルド証明書"

こうなります。これで”ランク1ギルド証明書”という名前の紙を持って右クリックした時となります。
もし”ランク1ギルド証明書”という名前ではない場合はそれより下に書かれてるコードは実行されません。

不具合ありましたら返信ください。


確認しましたが正常に動作していました!
skript自体まだ初心者で他の人のコードや調べながらやっているのですがどうしても細かい応用が効かなくて
とても助かりました!
ありがとうございました!

フォーラムについても初心者で間違ってプライベートメッセージを送ってしまったようです申し訳ございません。。。
sukafe
ID:eced7f91
水から上がったとこ
 
記事: 9
登録日時: 2016年12月18日(日) 17:48

  • (PostNo.290650)

Re: skriptの右クリック検知時のアイテム名について

投稿記事by Dotoo » 2016年12月18日(日) 22:02

望んだ動作が出来ているようで何よりです。補足ですが、

コード: 全て選択
name of held item contains "ランク1ギルド証明書"


こう書いた場合、正確には「ランク1ギルド証明書」という名前が武器名に含まれている場合という意味になってしまいます。例えば「○○国専用ランク1ギルド証明書」と「☓☓国専用ランク1ギルド証明書」というアイテムを作ってしまった場合、このままではスクリプトがどちらのアイテムでも走ってしまいます。簡単な対策としては全てのアイテムに固有のアイテムを付けて絶対にアイテム名の一文が入らないようにするか、

コード: 全て選択
name of held item is "ランク1ギルド証明書"


とすると、「ランク1ギルド証明書」という名前以外のアイテム全てでスクリプトを走らせないようにする事ができます。

但しこの場合は色コードも含めて完全一致しなければスクリプトが走りません。ですから色コードを付けてアイテムを作った場合はその色コードも含めて書かなければならなくなります。
アバター
Dotoo
ID:1b5b13f1
レッドストーン掘り
 
記事: 528
登録日時: 2012年11月21日(水) 15:20

  • (PostNo.290668)

Re: skriptの右クリック検知時のアイテム名について

投稿記事by sukafe » 2016年12月19日(月) 01:41

Dotoo さんが書きました:望んだ動作が出来ているようで何よりです。補足ですが、

コード: 全て選択
name of held item contains "ランク1ギルド証明書"


こう書いた場合、正確には「ランク1ギルド証明書」という名前が武器名に含まれている場合という意味になってしまいます。例えば「○○国専用ランク1ギルド証明書」と「☓☓国専用ランク1ギルド証明書」というアイテムを作ってしまった場合、このままではスクリプトがどちらのアイテムでも走ってしまいます。簡単な対策としては全てのアイテムに固有のアイテムを付けて絶対にアイテム名の一文が入らないようにするか、

コード: 全て選択
name of held item is "ランク1ギルド証明書"


とすると、「ランク1ギルド証明書」という名前以外のアイテム全てでスクリプトを走らせないようにする事ができます。

但しこの場合は色コードも含めて完全一致しなければスクリプトが走りません。ですから色コードを付けてアイテムを作った場合はその色コードも含めて書かなければならなくなります。


補足ありがとうございます!
状況に応じて使わせていただきます!
補足になってしまうのですが、あれから進んでこのようなコードを作ったのですが。

コード: 全て選択
   if name of held item contains "ランク1ギルド証明書":
      if {guild.%player%} is not set:
         message "{@prefix} &7ギルドに加入していません。"
      else:
         {guild.%player%} is not player:
            message "{@prefix} &7ギルドマスターでないと実行できません。"
            stop
         if size of {guildrank.%{guild.%player%}%::*} is not 0:
            message "{@prefix} &7ギルドランクが0のギルドしか使えません。"
            stop
         message "{@prefix} &6ギルド %{guildname.%player%}% &aのギルドランクが1に昇格しました!"
         add 1 to {guildrank.%{guild.%player%}%::*}
         add 3 to {guildcrew.%{guild.%player%}%}
         remove 1 paper named "ランク1ギルド証明書" with lore "ランク1ギルドであることの証明書" from player


今度はそのアイテムを一つ消すという動作をするときにまた名前だけを検知させたくいろいろ試したのですがまたエラー続きになってしまい、
また躓いてしまいました。
removeの部分でまた名前だけを検知または持っているアイテムだけを一つ消したいと思っています。
質問続きになってしまい本当に申し訳ないのですがこちらも教えていただけると助かります。
https://www.skunity.com/
このサイトをいつも見ているのですがどうしても応用が効かなく、
おそらく見方も悪いのだと思いますが上達の仕方なども教えていただけると幸いです。
sukafe
ID:eced7f91
水から上がったとこ
 
記事: 9
登録日時: 2016年12月18日(日) 17:48

  • (PostNo.290673)

Re: skriptの右クリック検知時のアイテム名について

投稿記事by Dotoo » 2016年12月19日(月) 04:15

強調表示をしたいのでcodeタグ無しで失礼します。

remove 1 paper named "ランク1ギルド証明書" with lore "ランク1ギルドであることの証明書" from player

を、

remove 1 of paper named "ランク1ギルド証明書" with lore "ランク1ギルドであることの証明書" from player

に変えれば動きます。

また今回に限ればギルド証明書を手に持ち、それを右クリックするとそれを消耗してギルドランクというものを上げたいのでしょうから単純に

remove 1 of held item from player

でも問題はありません。

このサイトをいつも見ているのですがどうしても応用が効かなく、
おそらく見方も悪いのだと思いますが上達の仕方なども教えていただけると幸いです。


これだけのメソッドが構築できる方であるなら上達の仕方と言うよりもexpression等の細かい文法にミスがあるという事のみ気をつける以外に無いと思います。Skriptはスクリプトをプラグイン内で走らせるプラグインではありますが、その言語自体が英語に限りなく近い表記で書ける言語を独自実装するというコンセプトで作られている物ですからどうしてもこういったofが抜けているとアウトなどの細かい部分で引っかかりやすいとも言えます。その辺りに気をつけてみると良いのではないかと思います。
アバター
Dotoo
ID:1b5b13f1
レッドストーン掘り
 
記事: 528
登録日時: 2012年11月21日(水) 15:20

  • (PostNo.290771)

Re: skriptの右クリック検知時のアイテム名について

投稿記事by sukafe » 2016年12月20日(火) 03:34

Dotoo さんが書きました:強調表示をしたいのでcodeタグ無しで失礼します。

remove 1 paper named "ランク1ギルド証明書" with lore "ランク1ギルドであることの証明書" from player

を、

remove 1 of paper named "ランク1ギルド証明書" with lore "ランク1ギルドであることの証明書" from player

に変えれば動きます。

また今回に限ればギルド証明書を手に持ち、それを右クリックするとそれを消耗してギルドランクというものを上げたいのでしょうから単純に

remove 1 of held item from player

でも問題はありません。

このサイトをいつも見ているのですがどうしても応用が効かなく、
おそらく見方も悪いのだと思いますが上達の仕方なども教えていただけると幸いです。


これだけのメソッドが構築できる方であるなら上達の仕方と言うよりもexpression等の細かい文法にミスがあるという事のみ気をつける以外に無いと思います。Skriptはスクリプトをプラグイン内で走らせるプラグインではありますが、その言語自体が英語に限りなく近い表記で書ける言語を独自実装するというコンセプトで作られている物ですからどうしてもこういったofが抜けているとアウトなどの細かい部分で引っかかりやすいとも言えます。その辺りに気をつけてみると良いのではないかと思います。


うまくいったみたいです!
アドバイス通りexpressionの項目を深く呼んでみようと思います。
ありがとうございました!
sukafe
ID:eced7f91
水から上がったとこ
 
記事: 9
登録日時: 2016年12月18日(日) 17:48


Return to 質問:マルチサーバー運用

x