はいどうもー
今回は乱数生成してみたよ。ちなみに眠すぎて今すぐにでも寝たい
早速本題へ入っていきます
まず実行結果を提示しておきます
まず前提として00spcmdを設置、コマンドはいくつか追加する予定なので、0randomで識別。
range=は別に何でも六文字入れりゃok
=後の数字が乱数生成範囲。
opとつけるとopenの略で全員に見えるように結果を表示します。
ついでに値が大きすぎると警告文が出るのもあります
ではスクリプト
こういう文ですね。
B_textはコマンド検知用の文字列。
B_passはチャット履歴を取得するためのサーバー内ログファイル(latest.log)を指定してます。これは文字列検知するときに必要になります。
B_screenはマイクラを実行しているscreen名です、これは乱数を表示するとき必要になります。
B_countとB_count_tempは内部処理用です。
これは後述while分実行前、このスクリプト実行時のみの初期設定部分なので既存データがあった際にスクリプト実行時この処理を実行しないように制御するための物です。
★この部分のまとめ・・・前提となる設定。
while(true)からが本文です。
この前はvoid Start()メソッドで、whileからがvoid Update()メソッドです。C#言語的に言えばね。
細かく説明するのも面倒だし前提話したので大まかな流れだけ。
35行目ではB_countにチャットで00spcmdなんたらの数を取得(grep)し代入します。
この後のif文見りゃわかる通り、前回実行時とB_count_tempと値が異なる=新しく羅列が入力された場合に新しくチャットで打ち込まれたという扱いになり、本文が実行されるという事ですね。
その後はB_tempnameにプレイヤー名を代入し、B_rangeに乱数範囲(range=数字)の数字の部分を代入して、それだけ。
というのも文字数を取得して文字数使ってawkコマンドで大まかに文字列を取得してcutコマンドで細かく切り取りしてマイクラのセレクタ部分にB_tempname変数を使うことでプレイヤーが直接指定できるほどの制度にまで調整している・・・てな感じですね。
awkだと謎の空白が入ったりするので環境にもよるかもしれないです。
★この部分のまとめ・・・プレイヤー名と乱数範囲の取得
次ィ
クソ長いので端折りの極み
44行目でop文字があるかの識別のための文字列取得。
次のif文でop文字であればsayコマンドとして乱数を表示、否であれば(#部分はミスったので要らない)tellコマンドで実行するというだけ。
B_rangeを細かく削って整数として扱えるようにして、
echoはデバッグ用です後で消しときます()
B_rangeが1以上であれば正規処理が出来るという判断で本文へ入りB_randomに4byte領域の乱数を取得し代入。その後B_rangeの値で割って余りの値を乱数としてsayコマンドで乱数生成結果[乱数]としてマイクラに出力します。0もしくは数時じゃないとかであればelseに入りrange入力エラーとマイクラで表示します。
screen -p 0 -S $B_screen -X eval 'stuff "say '${B_tempname}' 乱数生成結果[ '${B_randomnum}' ]\015"'
この文は「B_screen という名前のscreenにて、say '${B_tempname}' 乱数生成結果[ '${B_randomnum}' ]\015と入力する」という意味です。\015はエンターキーです。
サーバーコンソールで文字打ちこんでるだけそれだけ。
opがなければ?
というのは、elseに入って上記とほぼ同じことをやってます。
乱数生成結果の出力をsayかtell (プレイヤー名)か。それだけの違いです。
それ以外全く同じです
★この部分のまとめ・・・乱数生成と出力タイプ識別後の出力、エラー表示。
その後の処理は?という事で、
B_rangeさっきの乱数生成範囲の値の文字数(=桁数)を取得します。
それが10桁以上であれば警告を出します。乱数生成範囲はこのコマンドでも42憶までなので正確性は失われるという事です。
ちなみに$RANDOMでは0-32767までの範囲でしか乱数は生成できません。
sleepenhは正直いらないと思います。確かミリ秒単位のsleepコマンド。
あと最初の本文実行での条件
if (( B_count != B_count_temp ));
から解放するために
B_count_temp=$B_count
で実質リセット処理を行うことで処理は終了です。
★この部分のまとめ・・・条件警告通知、リセット処理
いかがだったでしょうか。
役に立てたら幸いです。
ただ改善点やもっと省略できる、この処理はこうした方が良い、という部分は少なからずあると思うので参考程度に。
マイクラ鯖はSpigotにて運用しているものです。
では
この記事へのコメント