skriptについて

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

skriptについて

投稿記事by Meguism » 2017年4月03日(月) 01:47

skriptの書き方について調べてみたのですが、少しかじったレベルではできないのではと思いトピックを建てました

Skriptの内容としては

・指定worldにTP、指定worldの人数が4人を超えたら 用意されている別worldにTP
用意されてるworldが全て埋まったらエラーメッセージの表示

という風に書こうと考えました。
私が調べた限りでは不可能と思っていますが、できる”かも”を頼りにきました。
よろしくお願いします。

不要かもしれませんがverは
1.8-R0.1-SNAPSHOT
Meguism
ID:d5683f82
 

  • (PostNo.299646)

Re: skriptについて

投稿記事by Dotoo » 2017年4月03日(月) 18:47

コード: 全て選択
command /teleportset <number>:
   trigger:
      player is op
      set {worldspawn%arg-1%} to location of player
      send "world%arg-1%にテレポートをセットしました。"

command /test:
   trigger:
      loop all players:
         if loop-player is in world "world1":
            add 1 to {world1}
            if {world1} is more than 4:
               stop
            else:
               teleport player to {world1spawn1}
         if loop-player is in world "world2":
            add 1 to {world2}
            if {world2} is more than 4:
               stop
            else:
               teleport player to {world1spawn2}
         else:
            send "エラーメッセージ"
アバター
Dotoo
ID:0e4bd4bc
金掘り
 
記事: 445
登録日時: 2012年11月21日(水) 15:20

  • (PostNo.299672)

Re: skriptについて

投稿記事by Meguism » 2017年4月04日(火) 04:59

ありがとうございます!!
動作確認はまだ行ってませんが、
こういった制限を課すスクリプトを複数設置する場合はどのようにすればいいのでしょうか。
world1 ~ world3
world4 ~ world6
のようにworld1の場合とworld4の場合を分けたいのですが...
何度も申し訳ありません
Meguism
ID:d5683f82
 

  • (PostNo.299684)

Re: skriptについて

投稿記事by Dotoo » 2017年4月04日(火) 10:48

コード: 全て選択
command /test <number>:
   trigger:
   
      loop all players:
 
         if loop-player is in world "world%arg-1%":
            add 1 to {world%arg-1%}
            if {world1} is more than 4:
               stop
            else:
               teleport player to {world1spawn1}
            
         else:
            send "エラーメッセージ"

ワールド移動させる時のコマンドか何か:

    if world of player is "world1":
        subtract 1 from {world1}
    if world of player is "world2":
        subtract 1 from {world1}
    if world of player is "world3":
        subtract 1 from {world3}

#以下このように"world数字"と{world数字}を書いていく

これで要件は満たすはずです。
アバター
Dotoo
ID:0e4bd4bc
金掘り
 
記事: 445
登録日時: 2012年11月21日(水) 15:20

  • (PostNo.299749)

Re: skriptについて

投稿記事by Meguism » 2017年4月04日(火) 22:52

コード: 全て選択
command /limittp <number>:
   trigger:
   
      loop all players:
 
         if loop-player is in world "world%arg-1%":
            add 1 to {world%arg-1%}
            if {world1} is more than 4:
               stop
            else:
               teleport player to {world1spawn1}
           
         else:
            send "エラーメッセージ"

command /tptest :

    if world of player is "world1":
        subtract 1 from {world1}
    if world of player is "world2":
        subtract 1 from {world1}
    if world of player is "world3":
        subtract 1 from {world3}

このような感じに書き換えて動作確認をしてみました。しかし、skriptの読み込み時にerrorが発生しました。
内容としては
・"world%arg-1%" is not an entity type
となっています。
Meguism
ID:d5683f82
水から上がったとこ
 
記事: 5
登録日時: 2017年4月04日(火) 22:37

  • (PostNo.299750)

Re: skriptについて

投稿記事by Dotoo » 2017年4月04日(火) 23:23

内容としては
・"world%arg-1%" is not an entity type
となっています。

エラーは端折らないで下さい。
アバター
Dotoo
ID:0e4bd4bc
金掘り
 
記事: 445
登録日時: 2012年11月21日(水) 15:20

  • (PostNo.299754)

Re: skriptについて

投稿記事by Meguism » 2017年4月04日(火) 23:49

'in world "world%arg-1% is not an entity type (limit.sk line 6: if loop-player is in world "world%arg-1%":")
これです。
Meguism
ID:d5683f82
水から上がったとこ
 
記事: 5
登録日時: 2017年4月04日(火) 22:37

  • (PostNo.299755)

Re: skriptについて

投稿記事by mcgo » 2017年4月04日(火) 23:51

"world%arg-1%" is not an entity type

少ししか検証してませんが%arg%がワールド名に入っているとエラーを吐くので、別の方法が必要だと思います。
あまりワールドの数が多くないのであれば、
コード: 全て選択
if loop-player is in world "world":
            add 1 to {world%arg-1%}
            if {world1} is more than 4:
               stop
            else:
               teleport player to {world1spawn1}

この部分をワールドの数だけ書くのが早いかと思います。
主にSkriptのトピックに出現中・・・
個人的に話したければプライベートメッセージいつでも送ってね♪
最近少しだけプラグイン開発に手を出し始めました^p^
どっかのサーバーでSkriptでお仕事したいなぁ~
【Skript自作コード公開中】
アバター
mcgo
ID:92035218
石炭掘り
 
記事: 246
登録日時: 2016年11月04日(金) 00:05
お住まい: Minecraft

  • (PostNo.299856)

Re: skriptについて

投稿記事by Meguism » 2017年4月05日(水) 23:26

とりあいず、増やすマップの数だけコマンドを作ってしまえばいいと思ったので
一番最初に書いてもらったskriptを使ってみました。
しかし、
スポーン地点をsetし、コマンドを実行すると設定したエラーメッセージが二回表示されます。
skriptは以下のような変更をしました。

コード: 全て選択
command /teleportset <number>:
   trigger:
      player is op
      set {worldspawn%arg-1%} to location of player
      send "world%arg-1%にテレポートをセットしました。"

command /test:
   trigger:
      loop all players:
         if loop-player is in world "normal1":
            add 1 to {world1}
            if {world1} is more than 4:
               stop
            else:
               teleport player to {world1spawn1}
         if loop-player is in world "normal2_1":
            add 1 to {world2}
            if {world2} is more than 4:
               stop
            else:
               teleport player to {world1spawn2}
         else:
            send "エラーメッセージ"
           
Meguism
ID:d5683f82
水から上がったとこ
 
記事: 5
登録日時: 2017年4月04日(火) 22:37

  • (PostNo.299861)

Re: skriptについて

投稿記事by Meguism » 2017年4月06日(木) 00:46

連続的な投稿で申し訳ありません。
実はもう一つ書きたいskriptがありまして、内容は

・エメラルドブロックを右クリしたら別のブロックに変更 (解決済み)
・クールタイム30秒経過後にもとに戻る (解決済み)
・1ワールド内のプレイヤーのみにメッセージを表示 "playerが(場所の名前)を占領しました"
・エメラルドを3つ獲得 (解決済み)

以上のskriptです。
実際に他の人に書いてもらったskriptを編集してみましたが、場所の名前を入れるのができませんでした。
その場所の名前はワールド内に複数あるので、座標しか表示させることができませんでした。
Skript Block自体があまり向いていないみたいなので、使用することができませんでした。

現在使用しているskriptは以下のようなものです。
コード: 全て選択
on rightclick:
   player is in world "FreePVP"
   block is a emerald block
   give player 3 emeralds
   message "&a&lエメラルドを3つ入手。"
   set {_location} to location of event-block
   set {_brokenblock} to type of event-block
   broadcast "&e&l%Player%&7&lが%{_location}%を占領しました。"
   set event-block to gold block
   wait 30 seconds
   set block at {_location} to {_brokenblock}
Meguism
ID:d5683f82
水から上がったとこ
 
記事: 5
登録日時: 2017年4月04日(火) 22:37

  • (PostNo.299915)

Re: skriptについて

投稿記事by mcgo » 2017年4月06日(木) 14:15

Meguism さんが書きました:実際に他の人に書いてもらったskriptを編集してみましたが、場所の名前を入れるのができませんでした。
その場所の名前はワールド内に複数あるので、座標しか表示させることができませんでした。
Skript Block自体があまり向いていないみたいなので、使用することができませんでした。

僕の方でMeguismさんのコードを基に使いやすいようにコードを書いてみました。
/set-point <数字>で指定した数字のポイントのエメラルドブロックを右クリックしてポイントをセットします。
そのセットしたエメラルドブロックの座標を読み取り、その座標ごとの場所の名前を右クリックした時に占領したというメッセージが流れる仕組みです。
もし何かあれば気軽に言ってください。
コード: 全て選択
on rightclick:
   player is in world "world"
   block is a emerald block
   set {_location} to location of event-block
   set {_brokenblock} to type of event-block
   if location of event-block is {point-1}:
      broadcast "&e&l%Player%&7&lがポイント1を占領しました。"
      give player 3 emeralds
      message "&a&lエメラルドを3つ入手。" to player
      set event-block to gold block
      wait 30 seconds
      set block at {_location} to {_brokenblock}
   else if location of event-block is {point-2}:
      broadcast "&e&l%Player%&7&lがポイント2を占領しました。"
      give player 3 emeralds
      message "&a&lエメラルドを3つ入手。" to player
      set event-block to gold block
      wait 30 seconds
      set block at {_location} to {_brokenblock}

command /set-point <number>:
   trigger:
      player is op
      set {set-point} to "on"
      set {set-point-number} to arg
      send "&a&l10秒以内に&6&lポイント%arg%&a&lを右クリックしてください。" to player
      wait 10 seconds
      clear {set-point}
      send "&6&lポイント%{set-point-number}%&c&lのセット時間を解除しました!" to player

on rightclick:
   player is op
   block is a emerald block
   {set-point} = "on"
   set {point-%{set-point-number}%} to location of event-block
   send "&6&lポイント%{set-point-number}%&a&lをセットしました!" to player
主にSkriptのトピックに出現中・・・
個人的に話したければプライベートメッセージいつでも送ってね♪
最近少しだけプラグイン開発に手を出し始めました^p^
どっかのサーバーでSkriptでお仕事したいなぁ~
【Skript自作コード公開中】
アバター
mcgo
ID:92035218
石炭掘り
 
記事: 246
登録日時: 2016年11月04日(金) 00:05
お住まい: Minecraft

  • (PostNo.299958)

Re: skriptについて

投稿記事by Meguism » 2017年4月06日(木) 23:33

ありがとうございます!
早速使用させていただきます!!!
Meguism
ID:d5683f82
水から上がったとこ
 
記事: 5
登録日時: 2017年4月04日(火) 22:37


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

x