ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

配布マップのためのコマンド技法(Macro/Keybind mod 応用)
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

配布マップのためのコマンド技法(Macro/Keybind mod 応用)

2016-09-06 23:55
  • 1
まずは、基礎?編中編を見てね。

●見てきたけど、変数ってなんやねん
変数っていうのは、スクリプト内で自由に好きな値を入れられる箱です。
定数って言うのは「定まった数」なので変更できません。
  • この値を今じゃ無くて、後で使いたいねん!
  • この値を別のファイルでも使いたいねん!
  • この値を他の文字と合わせて使いたいねん!
  • この値を使って、相対座標とか計算したいねん!
って言うときにほしくなります。ならへん?

●変数の作り方
簡単です。はい、エディタ開いてー。
変数にはいくつか種類があります。
  1. true (1) と false (0) の二つだけしか使えない
  2. 数字 (マイナスからプラスまで)しか使えない
  3. 文字 (おはようからおやすみまで)しか使えない
それぞれ、
  1. hensuu
  2. #hensuu
  3. &hensuu
みたいな書き方します。下は一例。
// 最初に(//)を入れるとコメントにできるよ
a = 0;   // OK (数字だけど 1 と 0 でも表現できるので)
a = true;  // OK (たぶん。後で説明する関数使う方が便利。)
a = "test"; // NG
#b = 0; // OK (数字なので)
#b = true; // NG
#b = "test"; // NG
&c = 0; // NG
&c = true; // NG
&c = "test"; // OK (文字列("")なので)

itemFlag = 0;  // NG (変数名に途中で大文字が入ってはいけない)
itemflag = 0; // OK (全部小文字なので問題ない)
●配列の作り方
でも、これだと変数一つにつき一つまでしか使えない!
というときのために配列というものがあります。
書き方は、
  • hensuu[]
  • #hensuu[]
  • &hensuu[]
みたいな感じで、こう使います。
#hensuu[0] = 100; // 配列は0番から始まるよ
#hensuu[1] = 200;
#hensuu[2] = 300;

echo("%#hensuu[0]% :%#hensuu[1]% : %#hensuu[2]%");
パーセント(%)でてきた!
はい、前後のパーセントは何を表しているかというと、
これは変数やから中の値を見てくれ!定数やから中の値を見てくれ!
ってことです。イミフ?

つまりこういうこと。
#hensuu = 100;
echo("#hensuu");   // チャットで「#hensuu」って打たれる
echo("%#hensuu%"); // チャットで「100」って打たれる
●別のファイルで同じ内容の変数を使う
しかし、この変数達は別のファイルでは使えません。
同じ変数名を作っても使えません。
じゃあどうやったら使えるねん!

こうやって
  • @hensuu
  • @#hensuu
  • @&hensuu
頭にアットマーク(@)をつけるだけで他のファイルでも使えます。
逆に言うと、他のファイルから勝手に値を入れ替えられます。注意してね。

●変数に値を入れたり、計算する
変数なんだから、値を入れたい。計算したい。
だったらこうする(基本的にはこんな感じ)
// フラグ編
hensuu = 1;
set(hensuu);  // hensuu = 1 と一緒。trueにします
unset(hensuu);  // hensuu = 0 と一緒。falseにします
toggle(hensuu); // hensuuがtrueならfalseに、falseならtrueにする
        // 2値しか使えないので前後の%はいらない(入れても大丈夫)
// 数字編
#a = 10;
inc(#a);    // #a = #a + 1; と一緒。1足します。
dec(#a);    // #a = #a - 1; と一緒。1引きます。
        // 数字しか使えないので前後の%はいらない(入れても大丈夫)
#b = 5;
#c = 1;
#a = %#b% + %#c%; // #bと#cを足して#aに入れる
#a = %#b% - %#c%; // #bから#cを引いて#aに入れる
#a = %#b% * %#c%; // #bと#cを掛けて#aに入れる
#a = %#b% / %#c%; // #bから#cを割って#aに入れる(切り捨て)

// 文字編
&moji = "";  // 空の文字を入れる
&moji = "/setblock "; // setblockコマンドを文字に入れる
&moji = %&moji% + "%#a% %#b% %#c% "; // &mojiに数字を追加する
&moji = %&moji% + "minecraft:stone"; // &mojiに文字を追加する
ということで変数はこんな感じ。
詳しいことは他のプログラミング初心者向け講座とかその辺を見てきた方が速い。
(高級言語と呼ばれるC/C++、C#、Java等の有名なやつはいろいろできますが、
このModに関しては php という言語が近いような気がします。でも基本は全部同じ)

●じゃあどんな関数 (機能) があんねん
全部説明するのは時間がかかるので、よく使いそうなやつだけ。
もっと知りたい人は ココ のページを見てね。
// ----- 一般のプログラミングでも使われてるやつ編 -----
// 詳しいことは他のプログラミング言語のサイトを見たら分かるよ

// 条件文 - if(条件式) - elseif(条件式) - else - endif
if(%flag%);     // flagがtrueなら elseif か else か endif までを実行
elseif(%flagflag%);  // flagflagがtrueなら elseif か else か endif までを実行
else;         // ifとelseifが全部falseなら endif までの処理を実行
endif;

//------------------------------------------------------------
// 条件式について
// %#a% == %#b% -> #aと#bが一緒ならtrue
// %#a% != %#b%  -> #aと#bが違ったらtrue
// %#a% > %#b%  -> #aが#bよりも大きかったらtrue
// %#a% >= %#b%  -> #aが#b以上だったらtrue
// %#a% < %#b%  ->  #aが#bよりも小さかったらtrue
// %#a% <= %#b%  -> #aが#b以下だったらtrue
// (%flag%) || (%flagflag%)  -> どっちかがtrueだったらtrue
// (%flag%) && (%flagflag%)  -> どっちもtrueだったらtrue
//------------------------------------------------------------

if (%flag%);   // NG (ifと()の間にスペースが入ると関数とは見なされない)
endif;
if(#a==#b);  // NG (#aと#bは中身を見る必要があるため%が前後に必要)

// 繰り返し文 - for(数値型変数, ここから, ここまで);
for(#i, 0, 10);  // 0 ~ 10 までforとnextの間を何度も繰り返す(10で抜ける)
 #array[%#i%] = 0;
next;       // #iは一周するごとに勝手に+1されます

// 繰り返し文 - do - while(条件式)
do;
while(%flag%);   // flagがfalseになるまでdoとwhileの間を何度も繰り返す

// 繰り返し文 - do - until(条件式)
do;
until(%flag%);    // flagがtrueになるまでdoとuntilの間を何度も繰り返す

// 繰り返し文 - do - loop と break
do;
 if(%flag%);
  break;    // breakは繰り返し文ならどれでも使える
 endif;
loop;      // doとloopの間をbreakするまで永久に繰り返す

// 繰り返し文 - do(回数) - loop
do(10);
loop;      // doとloopの間を10回繰り返す

// 一定時間処理を止める - wait(時間)
wait(10);    // 10秒間処理を止める
wait(10t);    // 10tick処理を止める
wait(10ms);   // 10ミリ秒処理を止める

// 平方根を出す - sqrt(入力, 出力)
sqrt(%#a%,#b); // #aの平方根(ルート)を#bに入れる

// ランダムな数値をもらう - random(出力、最大値、最小値)
random(#a, 6, 1); // #aに1~6までの数字がランダムに入る

// 文字列の一部を置き換える - replace(文字列, 置換前の文字, 置換後の文字)
&str = "a,b,c,d";  // 文字列
replace(%&str%, ",", ":");  // a,b,c,d を a:b:c:d にする

// 文字列を全部大文字にする - ucase(文字列)
&str = ucase(%&str%);

// 文字列を全部小文字にする - lcase(文字列)
&str = lcase(%&str%);

// 文字列を分割して配列に入れる - split(分割する文字, 文字列, 出力)
&array[];    // 文字配列
split(":", %&str%, &array); // ":"で文字列を分割する
// &array[0]にa、&array[1]にb、&array[2]にc、&array[3]にdが入る

// 配列に入っている個数を取得する - arraysize(配列, 出力)
arraysize(%&array%, #size); // a,b,c,dの4つが入ってるので、4がsizeに入る
#size = arraysize(%&array%); // 上と一緒

// 配列の最後を取り出す - pop(配列, 出力)
pop(%&array%, &str); // 最後のdを取り出して、&strに入れる(dは消える)

// 配列の最後に入れる - push(配列, 入力)
push(%&array%, "e"); // 最後にeを入れる。-> a,b,c,eになる

// ----- 表示したり実行したり -----
// ログを表示する(表示だけなのでコマンドとして実行はされない) - log(文字列)
log("/time set 0");  // チャット欄に「/time set 0」と出てくるだけ

// チャット欄から打ったようにする(コマンドも実行される) - echo(文字列)
echo("/time set 6000");  // /time set 6000 が実際に実行される

// キーボードで入力したみたいにする - type(文字列)
type("/time set 12000");  // チャット欄を開いているとコレが入力される
type("a"); // ctrlキーを押しながらこれが打たれるとCtrl+aとかになるので注意

// 他のファイルを実行する - exec(ファイル名, 名前, 引数1, 引数2...)
exec("HelloWorld.txt"); // HelloWorld.txtのスクリプトを実行
exec("HelloWorld.txt", "Hello"); // Helloって名前で実行(名前だけ)
exec("HelloWorld.txt", "Hello", %#a%, 100);
// HelloWorld.txt に #a と 100 を渡すと、HelloWorld.txtで、
#b = $$[1];  // #b = %#a%; と同じ意味
#c = $$[2];  // #c = 100; と同じ意味
// みたいに使える

// ----- マイクラ固有の関数編 -----
// 強制的にログアウトする
disconnect();

// 死んでる場合に強制的にリスポーンする
respawn();

// 強制的にダッシュ状態にする
sprint();

// 強制的にダッシュ状態を解除する
unsprint();

// チャット欄をクリアする
clearchat();

// マイクラのウィンドウサイズを変更する - setres(横幅、縦幅)
setres(1920, 1080);

// 指定座標のブロックIDを取得する - getid(x, y, z, 出力, 出力メタデータ値)
getid(0, 0, 0, #id, #meta); // (0, 0, 0)の座標にあるブロックidとメタを取る)
getid(0, 0, 0, #id);     // メタデータはいらない子バージョン

// 相対座標のブロックIDを取得する - getidrel(xOffset,yOffset,zOffset,略)
getidrel(0, -1, 0, #id, #meta); // 今いる位置の1ブロック下のブロック

// 特定アイテムのスロット番号を返す - getslot(アイテム名, 出力)
getslot("stone", #slot); // スロット内にある石のスロット番号をもらう
getslot("stone:2", #slot); // こういうのも可能。無ければ-1が入る

// ここから先は全部書くと面倒なので、拡張系は無視する
// 特定スロットのアイテムIDを返す - getslotitem(スロット番号, 出力)
getslotitem(0, #id); // スロットの左端のアイテムIDをもらう

// アイテム名からアイテム番号(stoneなら1、woolなら35がかえる)
#number = itemid("stone");

// アイテム番号からアイテム名
&item =itemname(35);

// ホットバーにある特定アイテムを選択する(持つ)
pick("stone:2");

// ホットバーの特定のスロットを選択する
slot(0);  // 0は左端、8は右端

// 視野を変更する
fov(70);

// 明るさを変更する
gamma(100);

// 音量を変更する
volume(100);

// マウス感度を変更する
sensitivity(100);

// リソースパックを変更する
resourcepacks("resources.zip");  // .zipいらないかも?

// シェーダーを変更する
shadergroup("ファイルパス");

// ----- このMOD固有の関数編 -----
// GUIの表示、非表示を切り替える - gui(画面)

gui();       // なんでもかんでも切り替え
gui("default");  // defaultの画面のみ切り替え

// 特定のGUI(画面)を起動する - showgui(開く画面, 閉じたときの画面)
showgui("inchat"); // チャット用の画面を開く

// 特定のスロットにGUI画面を割り当てる - bindgui(スロット番号, 画面)
bindgui(0, "inchat");

// 指定のラベルのテキストを変更する
setlabel("SlotItem", %&item%);

// 設定を変更する
config("default");

// 入力画面表示して値を入れる
prompt(&input, "$$i");  // アイテム一覧画面を表示し、IDをinputに入れる
prompt(&input, "$$i:d"); // IDとメタをinputに入れる
prompt(&input, "$$[num]" // 入力画面を表示し、自由文字列をinputに入れる
prompt(&input, "$$[num[0,1,2]]"); // 0,1,2から好きな数(の文字)を選択する
prompt(&input, "$$u");  // ログインユーザーを表示し、IDをinputに入れる

// マクロを途中で停止させる
stop();
●どういう値(定数)が取ってこれるの?
またまた、よく使いそうなやつだけ。
もっと知りたい人はココを見てね。
詳しい値を知りたい場合は、log("%CANFLY%");とかスクリプトを組むと分かるよ。

■true/falseが分かる定数
  • CANFLY : 飛べるかどうか
  • FLYING : 飛んでいるかどうか
  • LMOUSE : 左クリックが押されているかどうか
  • RMOUSE : 右クリックが押されているかどうか
  • MIDDLEMOUSE : ホイールクリックが押されているかどうか
  • SHIFT : シフトキーが押されているかどうか
  • CTRL : コントロールキーが押されているかどうか
  • ALT : オルトキーが押されているかどうか
  • KEY_? : ?キー(KEY_AならAキー)が押されているかどうか
■数値が入ってる定数
  • MODE : ゲームモード(0:サバイバル,1:クリエ,2:アドベ,3:スペクテイター)
  • YAW : 左右の目線の角度(0~360?)
  • PITCH : 上下の目線の角度(0~180?)
  • XPOS : 今立っている位置のx座標
  • YPOS : 今立っている位置のy座標
  • ZPOS : 今立っている位置のz座標
  • HITX : カーソルが当たっているブロックのx座標(無ければ0)
  • HITY : カーソルが当たっているブロックのy座標(無ければ0)
  • HITZ : カーソルが当たっているブロックのz座標(無ければ0)
  • HITPROGRESS : カーソルが当たっているブロックの壊れ段階?
  • HITDATA : カーソルが当たっているブロックのメタデータ値
  • ITEMDAMAGE : 持っているアイテムのアイテムのメタデータ値
  • STACKSIZE : 持っているアイテムのスタック量
  • DURABILITY : 持っているアイテムの耐久値
  • INVSLOT : 選択しているインベントリ内のスロット番号
  • CONTAINERSLOTS : 選択しているチェストとかのスロット番号
  • HEALTH : 体力
  • HUNGER : スタミナ
  • LEVEL : 現在のレベル
  • XP : 現在の経験値
  • TOTALXP : 現在のレベルを含んで全部経験値にした量
  • LIGHT : 今いる場所のライトレベル
  • OXYGEN : 水中の空気量
  • ARMOUR : 防具の耐久値
  • SOUND : 音量
  • FOV : 視界
  • FPS : 最大fps
  • GAMMA : 明るさ
  • SENSITIVITY : マウス感度
  • MAXPLAYERS : サーバーの最大人数
  • ONLINEPLAYERS : サーバーにログインしている人数
  • DISPLAYWIDTH : ウィンドウの横幅
  • DISPLAYHEIGHT : ウィンドウの縦幅
■文字列が入ってる定数
  • PLAYER : プレイヤー名
  • DIRECTION : 今見ている方角
  • HITID : カーソルが当たっているブロックのID
  • HITNAME : カーソルが当たっているブロックの名前
  • ITEM : 今持っているアイテムID ("stone")
  • ITEMIDDMG : 今持っているアイテムIDとメタデータ値 ("stone:0")
  • ITEMNAME : 今持っているアイテム名 ("石")
  • ITEMCODE : 今持っているアイテムのマイクラコード ("item.stone")
  • VEHICLE : 今乗っている乗り物の名前?ID?
  • BIOME : 今いるバイオーム
  • DIMENSION : ディメンジョン("SURFACE","NETHER"など)
  • SERVER : サーバーのIP?
  • SERVERNAME : サーバー名
  • TIME : 現在のプレイ時間("20:21:22")
  • DATE : 現実の年月日?("2016-09-07")
  • DATETIME : 現実時間?("2016-09-07 21:30:05")
  • GUI : 開いている画面の名前(何も開いていないゲーム画面なら"NONE")
  • CONFIG : 今の設定(このMODのコンフィグ)
●コレを使って何かを作りたい!
ということで、ココにサンプルがいっぱいあるよ!

次回、実例を一つお見せします。

-----
[TOPへ戻る]
広告
×
日本語解説ありがとうございます ここの解説のお陰で昔から作りたかった様々なスプリクトが作れるようになりました
50ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。