[Skript] このコードを短縮できませんか?

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

[Skript] このコードを短縮できませんか?

投稿記事by りくとん2002 » 2017年8月22日(火) 09:30

コード: 全て選択
options:
   default : §d§lSOM §7§l≫ §a§l[N] §e§l%player%
   toprank : §d§lSOM §7§l≫ §b§l[TR] §e§l%player%

on join:
   if player has permission "default.chat":
      set the join message to " §d§lSOM §7§l≫ §a§l[N] §e§l%player%§a§lさんが§b§lログイン§a§lしました!"
      stop
   if player has permission "toprank.chat":
      set the join message to " §d§lSOM §7§l≫ §b§l[TP] §e§l%player%§a§lさんが§b§lログイン§a§lしました!"
      stop
on quit:
   if player has permission "default.chat":
      set the quit message to " §d§lSOM §7§l≫ §a§l[N] §e§l%player%§a§lさんが§c§lログアウト§a§lしました..."
      stop
   if player has permission "default.chat":
      set the quit message to " §d§lSOM §7§l≫ §b§l[TR] §e§l%player%§a§lさんが§c§lログアウト§a§lしました..."
      stop

これの§a§l[N],§a§l[TR]とこだけを変数化?したいのですが可能でしょうか?
具体的には
if player has permission "default.chat":
 A = §a§l[N]
if player has permission "toprank.chat":
 A = §b§l[TR]
   set the join message to " §d§lSOM §7§l≫ {@A} §e§l%player%§a§lさんが§b§lログイン§a§lしました!"

見ないな感じにしたいのですが、一部だけpermissionによって変わるようにしたいのですが可能でしょうか?
最悪permissionではなくても構いません
url=https://minecraft.jp/servers/SOMRPG.f5.si]画像[/url]
りくとん2002
ID:f2f4ac0c
水から上がったとこ
 
記事: 9
登録日時: 2016年1月30日(土) 16:08

  • (PostNo.306674)

Re: [Skript] このコードを短縮できませんか?

投稿記事by りくとん2002 » 2017年8月22日(火) 09:34

追記: spigot1.8 skript 最新?(verわかんなくてすいません)
url=https://minecraft.jp/servers/SOMRPG.f5.si]画像[/url]
りくとん2002
ID:f2f4ac0c
水から上がったとこ
 
記事: 9
登録日時: 2016年1月30日(土) 16:08

  • (PostNo.306681)

Re: [Skript] このコードを短縮できませんか?

投稿記事by mcgo » 2017年8月22日(火) 12:55

これの§a§l[N],§a§l[TR]とこだけを変数化?したいのですが可能でしょうか?


コード: 全て選択
on join:
   if player has permission "default.chat":
      set {_temp} to "&a&l[N]"
   else if player has permission "toprank.chat":
      set {_temp} to "&b&l[TP]"
   set the join message to "&d&lSOM &7&l≫ %{_temp}% &e&l%player%&a&lさんが&b&lログイン&a&lしました!"

on quit:
   if player has permission "default.chat":
      set {_temp} to "&a&l[N]"
   else if player has permission "toprank.chat":
      set {_temp} to "&b&l[TP]"
   set the quit message to "&d&lSOM &7&l≫ %{_temp}% &e&l%player%&a&lさんが&c&lログアウト&a&lしました!"


りくとん2002さんのコードを省略すると上記のように出来ます。
ログイン・ログアウトした際に、{_temp}というローカル変数にプレイヤーのパーミッション毎に文字をセットして
それを最終的にメッセージにするというものです。
ローカル変数は一連の処理を終えると変数の中身が削除されるため、他に干渉しないという特徴があります。



一部だけpermissionによって変わるようにしたいのですが可能でしょうか?

一部だけというのはどの部分のことでしょうか?
具体的なものを答えていただけると回答が可能です。
サーバー関係の分からないことは英語で検索したら案外出ててくるで!
だってMinecraftって海外生まれやで!
最近はSkriptを使って色々自作してサーバー作ってます。
もしよければSkript作成してもいいゾ(激ムズは拒否するかも・・・)
詳しくはPMで!
【Skript自作コード公開中】
アバター
mcgo
ID:2a37f7a7
石炭掘り
 
記事: 234
登録日時: 2016年11月04日(金) 00:05

  • (PostNo.306696)

Re: [Skript] このコードを短縮できませんか?

投稿記事by sympholy » 2017年8月22日(火) 17:52

以下の書き方が自分的にはいいと思います

コード: 全て選択
on join:
   if player has permission "toprank.chat":
      set {rank.%player%} to "&a&l[TR]"      
   else if player has permission "default.chat":
      set {rank.%player%} to "&a&l[N]"

   set the join message to "&d&lSOM &7&l≫ %{rank.%player%}% &e&l%player%&a&lさんが&b&lログイン&a&lしました!"
   
on quit:
   set the quit message to "&d&lSOM &7&l≫ %{rank.%player%}% &e&l%player%&a&lさんが&c&lログアウト&a&lしました..."
   clear {rank.%player%}


変数{rank.%player%}にパーミッションごとに変えたい文字列を格納しています.
その文字列をjoin と quit で使いまわすことで,パーミッションを増やした時に編集する箇所を減らしています.
最後にclear {rank.%player%}で変数の削除を行なっています.(特に保存する必要がない変数なので)

mcgoさんは{_変数名}とすることで,そのイベント内のみで動く変数にすることで,variables.csvへの書き込みを減らすように工夫をしています.(このskriptに限定すると,書き込みはjoinとquitのみなので,負荷はほぼ皆無ではありますが)負荷が少ないという面で,有効なコードです.

一方で,自分の提案するコードは,よりミスを少なくすることを意識して作っています.
全く同じ条件分岐を複数箇所で使うと,修正時にミスを起こしやすい・可読性の低下などの問題が起こります.
また,書き込みによる負荷も考えられないことからこのようなコードにしています.

パーミッションを追加したい場合
コード: 全て選択
on join:
   if player has permission "toprank.chat":
      set {rank.%player%} to "&a&l[N]"
   else if player has permission "middle.chat":
      set {rank.%player%} to "&a&l[MD]"      
   else if player has permission "default.chat":
      set {rank.%player%} to "&a&l[TR]"

   set the join message to "&d&lSOM &7&l≫ %{rank.%player%}% &e&l%player%&a&lさんが&b&lログイン&a&lしました!"
   
on quit:
   set the quit message to "&d&lSOM &7&l≫ %{rank.%player%}% &e&l%player%&a&lさんが&c&lログアウト&a&lしました..."
   clear {rank.%player%}


8/23 15:00 編集(勘違いが起こりそうな部分について加筆)
最後に編集したユーザー sympholy [ 2017年8月23日(水) 15:17 ], 累計 2 回
主にskript関係のページに出没
書いているコードがベストだとは限りません...
「もっといいコードがあるよ」などありましたら教えてください
開発中のFlan'sPvP [ Hide鯖 ] 海戦PVP [Warships鯖]でプラグイン開発を行っています
アバター
sympholy
ID:1134fc5e
石掘り
 
記事: 105
登録日時: 2013年10月27日(日) 11:50

  • (PostNo.306717)

Re: [Skript] このコードを短縮できませんか?

投稿記事by mcgo » 2017年8月22日(火) 22:02

sympholy さんが書きました:
コード: 全て選択
on join:
   if player has permission "toprank.chat":
      set {rank.%player%} to "&a&l[TR]"     
   else if player has permission "default.chat":
      set {rank.%player%} to "&a&l[N]"

   set the join message to "&d&lSOM &7&l≫ %{rank.%player%}% &e&l%player%&a&lさんが&b&lログイン&a&lしました!"
   
on quit:
   set the quit message to "&d&lSOM &7&l≫ %{rank.%player%}% &e&l%player%&a&lさんが&c&lログアウト&a&lしました..."
   clear {rank.%player%}


確かに僕のよりコードが省略されていて良いコードだと思いますが、通常の変数に%player%を使うと
例えclearをしていてもプレイヤーの数だけ変数が作られ、その数だけvariable.csvファイルに変数が書き込みされてしまいます。
しかし、ローカル変数を使うことでファイルへの書き込みがなくなり、さらに1つの変数で済むということです。
つまり、ローカル変数の方がわずかながら軽いということです。
これはりくとん2002さん次第ですが、これからSkriptで多くの通常の変数を扱う場合は
なるべく%player%の入った変数を使わないようにしたほうがいいので、少ししかSkriptを使わないのであれば
どちらのコードを使っても問題ありませんが、Skriptをかなり使う場合は僕の提案したコードをりくとん2002さんにおすすめします。
サーバー関係の分からないことは英語で検索したら案外出ててくるで!
だってMinecraftって海外生まれやで!
最近はSkriptを使って色々自作してサーバー作ってます。
もしよければSkript作成してもいいゾ(激ムズは拒否するかも・・・)
詳しくはPMで!
【Skript自作コード公開中】
アバター
mcgo
ID:3214aafb
石炭掘り
 
記事: 234
登録日時: 2016年11月04日(金) 00:05

  • (PostNo.307439)

Re: [Skript] このコードを短縮できませんか?

投稿記事by りくとん2002 » 2017年9月07日(木) 17:24

sympholyさんのコードがかなりイメージしていたのと近いので使わさせていただきます!ありがとうございました
url=https://minecraft.jp/servers/SOMRPG.f5.si]画像[/url]
りくとん2002
ID:f2f4ac0c
水から上がったとこ
 
記事: 9
登録日時: 2016年1月30日(土) 16:08


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

x