【Skript】変数の中身を表示させたい 【解決】

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

【Skript】変数の中身を表示させたい 【解決】

投稿記事by Aoi0728@アップデート見送り勢 » 2018年1月04日(木) 07:54

こんにちは。これでユーザー登録以降3回目となるあおいです。
今回、Skriptを使ったワープコマンドを作ろうと思っています。

コード: 全て選択
command /fwarp [<text>] [<player>] [<text>]:
    description: ワープコマンド
    permission: skript.fwarp
    executable by: players
    trigger:
        if arg 2 is not set:
            if arg 1 is "create":
                set {fwarp.%arg 3%} to location of player
                message "正常に %arg 3% のワープ地点は作成されました。"
            else if arg 1 is "delete":
                clear {fwarp.%arg 3%}
                message "正常に %arg 3% のワープ地点は削除されました。"
            else if arg 1 is "list":
                message "null"
        if arg 1 is not set:
            teleport arg 2 to {fwarp.%arg 3%}
            message "%arg 2% は正常に %arg 3% へワープしました。"
        else:
            message "Usage: /fwarp <warp> <player> <warpname>"


このようなSkriptを作ったのですが、else if arg 1 is "list":の所で、どう表示すればいいのか分からず、nullと書いてあります。
{fwarp.%arg 3%}のように、fwarp.***に当たるものをすべて表示する(ワープポイントの一覧)ものを作るにはどうすればいいでしょうか。

Spigotバージョン 1.12.2-R0.1-SNAPSHOT
MCバージョン 1.12.1(Via入ってるため)
最後に編集したユーザー Aoi0728@アップデート見送り勢 [ 2018年1月05日(金) 08:17 ], 累計 1 回
最近鯖主デビューしたやつ
画像
誰でも鯖に来いよな!
http://com.nicovideo.jp/community/co3753006
最近ニコニコも始めました
Aoi0728@アップデート見送り勢
ID:c29792e5
木を殴ってる
 
記事: 19
登録日時: 2017年12月18日(月) 09:33

  • (PostNo.312252)

Re: 【Skript】変数の中身を表示させたい

投稿記事by Dotoo » 2018年1月04日(木) 16:53

これそもそも何に使うコマンドとして作っていますか?この状態では全プレイヤーがこのコマンドを使用できる訳ですから他人のワープを勝手に設定できてしまいますし、無限に変数をプレイヤーが生成出来るわけですから結構危険だと思いますし、かといってOP用コマンドにも見えないけれども何故か<player>の引数も入れたい(本来ならゲーム内でコマンドを打つのはプレイヤーなのでplayerと記述すればいい)という感じで「どうやって変数の一覧を表示するか」以前に課題が山積みな気がします。

そんなの関係ねえとりあえず変数の中身を全部リスト化して表示させたいだけだならばこんな感じでリスト変数を2つ作るのが楽です。
コード: 全て選択
command /test:
   trigger:
      player is op
      send "%{fwarp.::*}%"
      
command /setteleport <text>:
   trigger:
      set {fwarp.::%arg-1%} to location of player
      set {fwarpname.::%arg-1%} to arg-1#ワープの名前一覧を作るためだけの変数
      
command /showteleport <player>:
   trigger:
      send "テレポートの名前一覧: %{fwarpname.::%arg-1%}%"#ワープの名前一覧
      
command /doteleport <text>:
   trigger:
      teleport player to {fwarp.::%arg-1%}
最後に編集したユーザー Dotoo [ 2018年1月04日(木) 20:15 ], 累計 2 回
アバター
Dotoo
ID:8c8f5629
レッドストーン掘り
 
記事: 510
登録日時: 2012年11月21日(水) 15:20

  • (PostNo.312261)

Re: 【Skript】変数の中身を表示させたい

投稿記事by Aoi0728@アップデート見送り勢 » 2018年1月04日(木) 18:35

あ...
貼るの間違えてました。

まずそういうところを考えていませんでした。すみません。
最近鯖主デビューしたやつ
画像
誰でも鯖に来いよな!
http://com.nicovideo.jp/community/co3753006
最近ニコニコも始めました
Aoi0728@アップデート見送り勢
ID:c29792e5
木を殴ってる
 
記事: 19
登録日時: 2017年12月18日(月) 09:33

  • (PostNo.312262)

Re: 【Skript】変数の中身を表示させたい

投稿記事by Aoi0728@アップデート見送り勢 » 2018年1月04日(木) 18:46

一応もともとの構想としては

1. プレイヤーが一人あたり3個のwarpを作れる
2. ほかのプレイヤーのwarpにもワープすることが出来る
3. そのために、1で作られたwarpのリスト表示をする

4.OPはそれぞれのプレイヤーのwarpを消すことが出来る(未実装)
5.OPはそれぞれのプレイヤーのwarp数を増減できる(恐らく無理)

というものです。

コード: 全て選択
command /fwarp [<text>] [<text>]:
    description: ワープコマンド
    permission: skript.fwarp
    executable by: players
    trigger:
        if arg 2 is not set:
            if arg 1 is "set1":
                set {fwarp.%player%.1} to location of player
                message "正常に作成されました。"
            else if arg 1 is "set2"
                set {fwarp.%player%.1} to location of player
                message "正常に作成されました。"
            else if arg 1 is "set3"
                set {fwarp.%player%.1} to location of player
                message "正常に作成されました。"
            else if arg 1 is "list":
                message "ここが問題の場所です"
            else if arg 1 is "warp":
                teleport arg 2 to ここも謎です
                message "正常にテレポートされました。"
        else:
            message "Usage: /fwarp <warp> <player>"


貼りたかったのはこれです
最近鯖主デビューしたやつ
画像
誰でも鯖に来いよな!
http://com.nicovideo.jp/community/co3753006
最近ニコニコも始めました
Aoi0728@アップデート見送り勢
ID:c29792e5
木を殴ってる
 
記事: 19
登録日時: 2017年12月18日(月) 09:33

  • (PostNo.312266)

Re: 【Skript】変数の中身を表示させたい

投稿記事by Dotoo » 2018年1月04日(木) 20:06

コード: 全て選択
if arg 1 is "set1":
            set {fwarp.%player%.1} to location of player
            message "正常に作成されました。"
         else if arg 1 is "set2"
            set {fwarp.%player%.1} to location of player
            message "正常に作成されました。"
         else if arg 1 is "set3"
            set {fwarp.%player%.1} to location of player
            message "正常に作成されました。"

これ、set1・set2・set3のどれを入力してもワープ箇所が1箇所しか作れないです。

1. プレイヤーが一人あたり3個のwarpを作れる
2. ほかのプレイヤーのwarpにもワープすることが出来る
3. そのために、1で作られたwarpのリスト表示をする

4.OPはそれぞれのプレイヤーのwarpを消すことが出来る(未実装)
5.OPはそれぞれのプレイヤーのwarp数を増減できる(恐らく無理)


全部可能です。ですので自分で書いてみようと思ったのですが、
https://gyazo.com/4842970c5a1c2c9b223930ea131b3367 このあたりまで書いて色々気づいたのですが

・プレイヤーが3つのワープを作った後はどうするのか(上書きして消していく、3つ以上は絶対に作れない、個別に消すコマンドを新たに実装など)
・OPは全プレイヤーに対して手動でコマンドを打ち最大ワープ数をしていく作業を繰り返すのか、それはまた何故か、ワープ数はプレイヤーが何らかを達成した際に増加させる予定があるのかどうか
・引数にset1、set2等を採用した際はOPは「それぞれのプレイヤーのwarpを消すことが出来る」という要件が「プレイヤーが個別に作ったワープを消すことが出来る」のか「プレイヤーが設定したワープ全てを消去で良い」なのかによってコードが不要に複雑化するため「1」や「2」などでは駄目なのか

など、ご自分でもそのコマンドの仕様が頭にはっきり浮かんでなさそうな部分が多かったので断念しました。
アバター
Dotoo
ID:8c8f5629
レッドストーン掘り
 
記事: 510
登録日時: 2012年11月21日(水) 15:20

  • (PostNo.312287)

Re: 【Skript】変数の中身を表示させたい

投稿記事by Aoi0728@アップデート見送り勢 » 2018年1月05日(金) 07:29

1. プレイヤーが一人あたり3個のwarpを作れる
2. ほかのプレイヤーのwarpにもワープすることが出来る
3. そのために、1で作られたwarpのリスト表示をする

4.OPはそれぞれのプレイヤーのwarpを消すことが出来る(未実装)
5.OPはそれぞれのプレイヤーのwarp数を増減できる(恐らく無理)

返信ありがとうございます。
確かにまだふわふわしているところもありました。

昨晩から考えたのですが、
1.一人当たり3個のwarpを作れる は固定。
2.の他のプレイヤーにもワープすることが出来るを外し
3.を自分の作ったワープリストを表示する

というコマンドにしようと思っています。

4.についてはhome全消去
5.については増減ではなく、3,5,7のように、切り替えるようにしたいと思っています。
最近鯖主デビューしたやつ
画像
誰でも鯖に来いよな!
http://com.nicovideo.jp/community/co3753006
最近ニコニコも始めました
Aoi0728@アップデート見送り勢
ID:c29792e5
木を殴ってる
 
記事: 19
登録日時: 2017年12月18日(月) 09:33

  • (PostNo.312288)

Re: 【Skript】変数の中身を表示させたい

投稿記事by Aoi0728@アップデート見送り勢 » 2018年1月05日(金) 08:17

すいません
方針を変えて

コード: 全て選択
command /ahome [<text>]:
    description: ホームワープコマンド
    permission: aoicmd.ahome
    permission message: あなたはMemberランク以上ではないため使うことが出来ません。
    executable by: players
    aliases: /ah
    usage: /ahome <homename>
    trigger:
        if arg 1 is "1":
            teleport player to {ahome.%player%.1}
        else if arg 1 is "2":
            teleport player to {ahome.%player%.2}
        else if arg 1 is "3":
            teleport player to {ahome.%player%.3}
        else if arg 1 is "4":
            player has permission "ahome.limit.5"
            teleport player to {ahome.%player%.4}
        else if arg 1 is "5":
            player has permission "ahome.limit.5"
            teleport player to {ahome.%player%.5}
        else:
            message "&eあなたは4個以上のhomeを所持する権限を持っていないか、使い方が間違っています。 /ahome <homename>"

command /asethome [<text>]:
    description: ホームセットコマンド
    permission: aoicmd.asethome
    permission message: あなたはMemberランク以上ではないため使うことが出来ません。
    executable by: players
    aliases: /ash
    usage: /asethome <homename>
    trigger:
        if arg 1 is "1":
            set {ahome.%player%.1} to location of player
            message "&dホーム地点1 は正常に作成されました!"
        else if arg 1 is "2":
            set {ahome.%player%.2} to location of player
            message "&dホーム地点2 は正常に作成されました!"
        else if arg 1 is "3":
            set {ahome.%player%.3} to location of player
            message "&dホーム地点3 は正常に作成されました!"
        else if arg 1 is "4":
            player has permission "ahome.limit.5"
            set {ahome.%player%.4} to location of player
            message "&dホーム地点4 は正常に作成されました!"
        else if arg 1 is "5":
            player has permission "ahome.limit.5"
            set {ahome.%player%.5} to location of player
            message "&dホーム地点5 は正常に作成されました!"
        else:
            message "&eあなたは4個以上のhomeを設置する権限を持っていないか、使い方が間違っています。 /asethome <homename>"

command /adelhome [<text>]:
    description: ホーム消去コマンド
    permission: aoicmd.adelhome
    permission message: あなたはMemberランク以上ではないため使うことが出来ません。
    executable by: players
    aliases: /adh
    usage: /adelhome <homename>
    trigger:
        if arg 1 is "1":
            clear {ahome.%player%.1}
            message "&cホーム地点1 は正常に削除されました!"
        else if arg 1 is "2":
            clear {ahome.%player%.2}
            message "&cホーム地点2 は正常に削除されました!"
        else if arg 1 is "3":
            clear {ahome.%player%.3}
            message "&cホーム地点3 は正常に削除されました!"
        else if arg 1 is "4":
            player has permission "ahome.limit.5"
            clear {ahome.%player%.4}
            message "&cホーム地点4 は正常に削除されました!"
        else if arg 1 is "5":
            player has permission "ahome.limit.5"
            clear {ahome.%player%.5}
            message "&cホーム地点5 は正常に削除されました!"
        else if arg 1 is "alldel":
            player has permission "ahome.alldel"
            clear {ahome.%player%.1}
            clear {ahome.%player%.2}
            clear {ahome.%player%.3}
            clear {ahome.%player%.4}
            clear {ahome.%player%.5}
            message "&cホーム地点1から5 をすべて削除しました。"
        else:
            message "&eあなたは4個以上のhomeを所持、削除する権限を持っていないか、使い方が間違っています。 /adelhome <homename>"

command /ahomecheck [<text>]:
    description: ホーム確認コマンド
    permission: aoicmd.ahomecheck
    permission message: あなたはMemberランク以上ではないため使うことが出来ません。
    executable by: players
    aliases: /ahc
    usage: /ahomecheck <homename>
    trigger:
        if arg 1 is "1":
            if {ahome.%player%.1} is set:
                message "&cホーム地点1 は設置されています。"
            else if {ahome.%player%.1} is not set:
                message "&cホーム地点1 は設置されていません。"
        else if arg 1 is "2":
            if {ahome.%player%.2} is set:
                message "&cホーム地点2 は設置されています。"
            else if {ahome.%player%.2} is not set:
                message "&cホーム地点2 は設置されていません。"
        else if arg 1 is "3":
            if {ahome.%player%.3} is set:
                message "&cホーム地点3 は設置されています。"
            else if {ahome.%player%.3} is not set:
                message "&cホーム地点3 は設置されていません。"
        else if arg 1 is "4":
            player has permission "ahome.limit.5"
            if {ahome.%player%.4} is set:
                message "&cホーム地点4 は設置されています。"
            else if {ahome.%player%.4} is not set:
                message "&cホーム地点4 は設置されていません。"
        else if arg 1 is "5":
            player has permission "ahome.limit.5"
            if {ahome.%player%.5} is set:
                message "&cホーム地点5 は設置されています。"
            else if {ahome.%player%.5} is not set:
                message "&cホーム地点5 は設置されていません。"
        else:
            message "&eあなたは4個以上のhomeを所持、確認する権限を持っていないか、使い方が間違っています。 /ahomecheck <homename>"


このようなSkriptにして解決しました。
質問に答えてくださった方、本当にすみません。
最近鯖主デビューしたやつ
画像
誰でも鯖に来いよな!
http://com.nicovideo.jp/community/co3753006
最近ニコニコも始めました
Aoi0728@アップデート見送り勢
ID:c29792e5
木を殴ってる
 
記事: 19
登録日時: 2017年12月18日(月) 09:33


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

x