Minecraft Japan Wiki

MOD解説/JointBlock/R.I.N.G

  
親ページに戻る
追加ブロック&アイテム&レシピ&インターフェース一覧
チュートリアル
R.I.N.G



概要

◆R.I.N.Gシステムとは、
Ver0.7から取り入れられた簡易プログラミング機能のことである。
本機能を使えば、今までチップや数値調整だけでは難しかった複雑なユニット制御ができます。
大まかに言うと、
1.ブロックの操作(モーションとアクション)
2.ユニットの移動
3.ブロックやMOBなど対象の検知
4.対象の様々なパラメータの取得
などです。

例を挙げれば以下のようなことができる。
etc

設定操作は、アイテム「R.I.N.G.」を使用して行います。
プログラムはコードを打つのではなく、
すべてR.I.N.G.のGUIで編集ができます。
 


仕様

+仕様
◆ユニットの燃料画面にセットすることで、アセンブル後は毎tick動き、各ノードの処理を実行していきます。
 

◆編集は「R.I.N.G.」を持ち右クリックする事で編集GUIが開きます。
ページ毎にMAX24ノード、32ページまでひとつのR.I.N.G.に登録できます。
 

◆サイクルモードでは前回tickで止まった場所から再開する。
 ショットモードでは毎tick0ページ0ノードから処理を開始する。
◆サイクルモードでは1tick内に無限にノードを処理できるわけではなく、
 下記のルールに従ってtick内処理を中断して次のtickに処理を引き継ぐ。
 (ルール①)
  同tick内で同じノードを二度実行しようとすると中断。次tickはそのノードから始まりまる。
 (ルール②)
  24(1リングMAXノード数)*3=72の数のノードを処理すると中断。
 上記いずれの場合でも次tickは前tickに中断したノードから始まる。
 以上ルールによってひとつのユニットが無限にCPUリソースを消費することを防いでいる。
 ただ、上記仕様のためノードの処理がどこで止まるか、また、
 どこから再開されるかの保障はなく、意図した動作にならない場合もある。
 必ずtick内に動作させたいノードがある場合などはショットモードを選択してみる。

◆全てのノードは出力を持ち、他のノードから参照されたときに必ず何かの値を出す。
 基本的には
  ・真偽値(TRUE,FALSE)
  ・実数(浮動小数点)
  ・整数(浮動小数点を受け取り手に応じて整数に切り捨てたもの)
 が返される。

◆ノードは大別して
  DR系ノード(命令形ノード。ユニットやパーツへチャンネルを解して命令を出すノード)
  ST系ノード(シンタックス系ノード。つまり構文ノード)
  TG系ノード(トリガー系ノード、あるいはセンサー系ノードと呼んだほうがいいかも?)
 に分けられる。
◆上記DR系ノードは実行される際、必ずその仕事内容と関わる「チャンネル」を介して実行を行う。
 チャンネルには一つのノードのみ登録でき、
 あるノードが登録されている間は他のノードの登録を受け付けない。
 (強制的にクリアするためのノードもありますが、基本的にはこのルール。)
 全てのDR系ノードには「仕事期間(tick)」があり、仕事期間を経過するとチャンネルから退く、

移動系DRは前後左右上下の各移動チャネル、モーションはモーションチャネル
アクションはアクションチャネルを使う模様。※下の方に図解あり

◆OPCutにチェックを入れたR.I.N.Gがセットされたユニットは席1の基本操作を受け付けなくなる。
◆変数系ノードの内部値はjavaのdoubleすなわち倍精度(64bit)浮動小数点となる。
◆シングルでプレイしている場合のみ/jbringdebugコマンド(/jbrd・/jbdrでも可)
 「/jbringdebug on/off またはスロット番号」
 スロット番号は左上から右へ0, 1、左下から2, 3となる。
 (サーバーサイドから直接実行情報を見に行っているだけなので外部サーバーの場合は情報を取れない。)
 サーバーから情報をネット越しに送信するようにすればマルチでもデバッグ可能らしい。
 

解説

+解説
◆[基本の動作概念]
  • RINGは0ページ0番から開始し、ノードを順番に実行していきます(順次実行)
 ノードは時計回りに矢印で繋がっていると思ってください(ごちゃごちゃするのでRING画面では省略していますが)
 1TICK内で処理できるだけのノードを処理します
  ×間違った理解 → 1TICKで1ノードを処理
  ○正しい理解  → 1TICKで複数ノードを処理
  • 標準のモードである「サイクル」だとページの最後まで到達すると同ページゼロ番に戻ります
 (時計回りに処理が続けられるイメージです。11時の次は0時になるように、ひたすら針は回り続けます)
 ただそれだけだと時計の針が延々と回り続けて処理が終わらず、CPUのリソースを無限に消費し続けることになりますが、
 下記のルールにおいてTICK内で処理が一時中断される制限を設けています
  -TICK内で規定数以上のノードを通ると一時中断。
  -TICK内で同じノードを二度通ると一時中断。
 次のTICKでは中断したノードから再開されます
※要約※
RINGは時計回りの順次実行!
TICK内で制限に引っかかるまで順番にノードを処理!
RINGはTICKをまたいで実行され続ける!

+◆[もっと具体的な動作のイメージ]
◆[もっと具体的な動作のイメージ]
 まずはものすごい単純な例を書きます
 たとえば1ページ、ノードが6つあるRING(例1)があるとします

[(例1)RING構成]
  →①→
 ⑥   ②
 ↑    ↓
 ⑤   ③
  ←④←

 〔ユニットを起動してから最初のTICK〕
 Ⅰ.ユニットの内部処理がRINGを起動します
 Ⅱ.そのTICK内でノード①、②、③、④、⑤、⑥と順番に処理をしていきます
 Ⅲ.そのまま①にさしかかると①はこのTICK内ですでに通っているためRINGは一時中断されます。

 〔次のTICK〕
 Ⅰ.ユニットの内部処理がRINGを再び起動します
 Ⅱ.前回TICKは①で中断されていたので①から再開し、また①、②、③、④、⑤、⑥と処理します
 Ⅲ.前回TICK同様に①にさしかかると①はこのTICK内ですでに通っているためRINGは一時中断されます。

 〔以下略〕
 上記は分岐のない場合の単純なケースですが、次は分岐のあるケースです
 たとえば⑤のノードがジャンプノードで、条件によって③にジャンプするRING(例2)があるとします

[(例2)RING構成](例1とは別のRINGの話ですよ)
  →①→
 ⑥   ②
 ↑    ↓
 ⑤→→→③
  ←④←

 〔ユニットを起動してから最初のTICK〕
 Ⅰ.ユニットの内部処理がRINGを起動します
 Ⅱ.そのTICK内でノード①、②、③、④、⑤と順番に処理をしていきます
 Ⅲ.⑤では分岐条件によってそのまま⑥に進むか③に飛ぶかの選択があります
   今回は③へジャンプしたとしましょう。このとき本来ならば順番に処理されるはずの⑥、①、②は
   スキップ(順番を飛ば)されたことになります
 Ⅳ.RINGは③を処理しようとしますが、このTICK内ではすでに処理されているノードなのでRINGは一時中断されます

 〔次のTICK〕
 Ⅰ.ユニットの内部処理がRINGを再起動します
 Ⅱ.前回TICKは③で中断されていたので③から再開し、また③、④、⑤と処理していきます
 Ⅲ.再び⑤の条件分岐です。今回も全TICKと同様にジャンプ条件が成立し、③へとジャンプしたとします
 Ⅳ.RINGは③を処理しようとしますが、このTICK内ではすでに処理されているノードなのでRINGは一時中断されます

 〔以下略〕

◆ノードの基本特性「すべてのノードは出力を持つ」
  • 「出力」って書いちゃうと何かを放出してるようなイメージですが「状態」のほうがイメージが易いでしょうか
 「いずれのノードも何らかの数値を抱えていて、他のノードに問い合わせを受けるとその値を返答する
 それだけの話です

◆ノードの大まかな種類
  • 指示系ノード(DR:DirectionNode)
  • 構文系ノード(ST:SyntaxNode)
  • 検知系ノード(TG:TriggerNode)
  ※後ろの略称はあんまり気にしなくていいです。あるべが仕様を書き散らすときに使ってるだけなので
  (特にTriggerって呼び方は混乱のもとかも。ただステートノードだとSTで被るし。
   センサーだとセンサーノードと混同するし。。まあ呼び方はどうとでもです)
※要約※
RINGは「指示」「構文」「検知」の三種類のノードで成り立っている!


◆[指示系ノード]
 ユニットや(R.I.N.G.MCTRLが積まれた)ブロックに対して何らかの指示をするノードです
 ノードリストでは上のほうに集まっているノード群です
 たとえばユニットを前後に移動させたり、ローテーターを回したりなどの指示が可能です
 逆に言うとRINGはこの指示系にある処理以外のことは何もできません
 (今のところアトラクターなどが対応ノード未実装なので動かせないかな。。)
 指示系ノードには「チャンネル」という概念が絡んでくるのですが、、、
 ひとまずは「特定のMCTRLとノードを結び付けるキーのようなもの」の理解で大丈夫だと思います
 具体的にチャンネルが何なのか理解を深めたい方は項[チャンネルについてもっと詳しく]を読んでみて下さい。
※要約※
ユニットやブロックへの指示は指示系ノード!
 


◆[構文系ノード]
 ユニットやMCの動作とは関係なくRING自体の制御に関するノードです
 たとえば代表的なもので「IFジャンプノード」がありますが、RINGの流れを条件によって分岐させるノードです
 (たとえば本来であれば0,1,2,3..と順番に実行される流れを「2の次に3を飛ばして4や5へ」という風に
  文字通り先のノードへとジャンプさせるためのノードです。飛び越されたノードは実行されません)
 「もし(if)・・ならばスキップ(ジャンプ)する」ので「IFジャンプノード」です
 正直これさえ覚えておけば、他の構文系は必要になったらでいいと思います (変数系とか計算系とかは欲しくなったらで)
※要約※
IFジャンプノードがあれば分岐が書ける!


◆[検知系ノード]
 ユニットやMCワールドの状態を認識して値を出力するノードです
 リストでは下に集まっているノード群で、クエスチョンマークの添えられたものは全て検知系のノードです
 基本的には通っても自分の値の更新意外は何の処理も実行されません。値の出力だけを担う専門家です
 一番わかりやすいものは「キー状態検知ノード」でしょうか
 指定したキーが押されてるかどうかで「出力」が変化するノードです
 特に構文系ノードの説明で取り上げた「IFジャンプノード」と組み合わせることで真価を発揮します
 キー状態検知ノードにIFジャンプノードをつないでやることで
 「キーを押されているとき以外は回転処理をスキップ(ジャンプ)」などの機能を実現することができます
※要約※
状況判断は検知系ノード!
 


◆[各ノード種類が具体的にどんなケースで使われるか]
 たとえば「座席に人が座っているときだけローテーターを動かす」という処理をRINGに記述するとして
 「座席に人が座っているとき」というのを検知ノードが担い
 「だけ」を構文系ノード(具体的にはIFジャンプノード)が担い
 「ローテーターを動かす」を指示系ノードが担うことになります
 
上記のサンプルR.I.N.G.データです。Ctrl+Cでクリップボードに入れ、R.I.N.G.を持ち「/jbid」でインポートできます。
Bx+LCAAAAAAAAADjYmBgZ+DISrIqysxLL2BgYLDnEmNkBNIM/CCC5T8Y3Jsz+40cI7MNixcjg4gNCwcDkBRT4mAA8hjAioE0DAAAK0/7jFIAAAA=

◆[ノードの設定項目で「R」とか「F」とか切り替えられるのは何?]
・F:Fixed:つまり「固定値」です
 ユーザーの入力した値がその項目での設定値になります
 こちらは各MCTLの設定でもお馴染みですね
 (ローテーターでXの初期値に90を設定←こういうのと同じです)
・R:Reference:つまり「参照値」です
 参照とはつまり「見る」こと。→他のノードの出力を見に行ってその値を使うことです
 (あるべも「あちらを見てください」を「あちらを参照ください」みたいに言いまわすことがよくあるもよう)
 ユーザーの入力した値ではなく、他のノードが出力した値をもって処理を行うということです
 この方式の強みは「プログラム実行中に値をころころ変えられること」に尽きます(「値が動的である」とか言ったりします)
 主に検知ノードなどが出力した値を参照することになると思います
※要約※
F:固定値とは「ユーザーが入力した値を使わせる」こと!
R:参照値とは「(他のノードの出力値を)見に行く」こと!


◆[Rでいちいちノード番号入力するのめんどくさい!]
  • 右クリック→ドラッグで引き出せる線を参照先のノードに引っ張ることで参照先IDX番号を設定できます
 ノードにRef可能項目が複数ある場合は線を引き出した状態で左クリックで項目が切り替わります
※要約※
右ドラッグで線を繋げる!項目の切り替えは線を出した状態で左クリック!
 


+◆[その他ちょっとこまごました話]
◆[真偽値って??]
 よく「コンピューターは0と1で動いている」と言われたりしますが
 この0と1を「そうでない」「そうである」という概念にあてはめて「真偽値」などと呼んだりします
 一般的には
  0(:false)は「違う」こと。偽、否、違う、そうじゃないこと
  1(:true)は「合っている」こと。真、可、合致、そうであること
 という風に扱われます
 プログラムの世界ではこの通念が拡張され、たとえば整数世界では
  0:false
  0以外の数:true
 というように0のみを「false(偽)」として扱い、それ以外なら「falseではない=true(真)」と扱ったりします
 RINGもこの「0以外はtrueとして扱う」というルールを採用しています。この場合、当然「1」もtrueです

 ※なので、ローテータ指示ノードなどで、動いていて角度などが入っている時は「true」
  動いていなくて0の時は「false」

◆[ベクタ??って??]
  • 無視してOK!
 よほど変わったことをするのでなければV1とかV2とかベクタとかVectorとか書いてあるのはスルーで大丈夫です
 代入ではベクタが使えないなど実装も中途半端ですし、4値のベクタ計算実装してませんし、
 はっきり言ってあるべの自己満足領域です

◆[チャンネルについてもっと詳しく]
  • ある特定の機構に処理を実行させるにあたり、どのノードに処理をさせるか判別するための仕組みです
 チャンネルを解することで機構は実行のタイミングでどのノードに従って更新処理などを行うかが解ります
 実行するときにひとつの要素に対して複数のノードが競合しないようにする仕組みでもあります
 ターゲット検索などの重たい処理もチャンネルを解することでtick内に一機体で複数回実行できないよう制限する役目も
 もっとイメージを掴みたい方は下記にある概念図をご参照ください
+チャンネル概略図

チャンネル概略図

 

GUIと操作

+GUIと操作
◆ノードの配置
 左にあるノード一覧から、ノードをドラッグし、R.I.N.G.のうえに
 ドロップして配置します。
 R.I.N.G.内のノードは、ドラッグドロップで移動する事ができ、
 R.I.N.G.外でドロップすると「DELEED」エリアに一旦保存されます。 

◆ノードのコピーとペースト
 ノードを選択し、CTRL+Cを押すと「COPY」エリアに保存されます。
 (他リンク呼出ノードは、設定値が消えるようです)
 CTRLを押しながら選択や、SHIFTを押しながら選択、
 CTRL+SHIFT+Aなどで複数のノードを選択、コピーまた削除できます。

 COPY情報はクリップボードに入るため、他のR.I.N.G.にペーストする事も出来ます。
 (CTRL+SIFT+Aで前選択すれば、1ページまるっと別R.I.N.G.にコピペできて便利です。)

◆固定値と参照値の設定
 ノードのチェックボックスFにチェックを入れる事でRに変更出来ます。
 参照先の設定は、直接ノード番号を入力するか、
 参照ノードへ右ドラッグすること設定できます。
 ドラッグ中に左クリックすると、参照させる項目を変更できます。

◆ページの追加と削除
 左上の「ページ+」ボタンを押すと、新しいページを次に挿入できます。
 中央の「P:x」がページ番号で、ここをクリックすると、ページ名を設定できます。

 ページの移動は上の「前へ」「次へ」を押して行い、その際SHIFTを押す事で
 最終ページ、最初のページに飛ぶ事が出来ます。

 ページの削除は右上のページを削除ボタンを使用します。
 各ノードで設定されているページ番号は、自動的に新しいページ番号に切り替わります。
 ただし、無くなったページは参照が出来ない為、アセンブル後にエラーになります。

◆R.I.N.G.のインポートとエクスポート
 R.I.N.G.を持ちコマンド「/jbed」でTXTとしてクリップボードにエクスポートする事が出来ます。
 同じように「/jbid」でクリップボードのデータをR.I.N.G.にインポート出来ます。

R.I.N.G.モーションMCTRLの設置

◆ブロックへの設置
◆チャネルの割り振り

センサーMCTRLの設置

◆ブロックへの設置
◆配置位置と検知値の関係

ノードの種類と用途

+ノードの種類と用途
ノードの種類と、各ノードの使い方を開設していきます。

+指示系ノード「動かすノード」
●指示系ノード(DR:DirectionNode)  「動かすノード」
  実際に何かを動かす指示をするノード。何を動かすか、どう動かすかを書く。

ノード名 画像 説明
ローテータ ローテータを回す。
エクステンダー エクステンダーを伸ばす。
スライダー スライダーを動かす。
スケーラー スケーラーを動かす。
アクション指示ノード チャネルへアクションを指示。
ターゲット回転ノード ローテータの向きをターゲットに向ける。
移動指示ノード 指示した方向に移動する。
移動タスク指示ノード 追いかけたり逃げたりさせる。
Yaw更新指示ノード ユニットの向きを変える。
Yaw追従指示ノード シートの向きにユニットの向きを変える。
キー使用指示ノード 汎用キーを使用させる。
アイテム使用指示ノード アイテムMCTRLを使用させる。
Entity検索指示ノード センサーに何を探すか指示する。
ターゲット指示ノード 距離とかターゲット情報を取り出す。
chクリアノード いろんなチャネルをクリアさせる。
モード変更指示ノード コアをモード変更させる。

+構文系ノード「プログラムを書くノード」
●構文系ノード(ST:SyntaxNode) 「プログラムを書くノード」
  RING内でノードの行き先を指定したり、数値を用意したりする。
  ノード同士は構文を挟まなくても、入力で参照させる事が出来る。

ノード名 画像 説明
空ノード 何も行わないノード。ジャンプ先とか見やすくする目印などに使用する。
IFジャンプノード 設定した条件に一致すれば別ノードに移動させる。
ウェイトノード 指定したTickだけR.I.N.G処理を止める。1Tickは1/10秒。
他リング呼出ノード 別のページに移動する。
リターンノード 他リング呼出ノードで呼び出されたページ先で使用する。元のページに戻る。
変数ノード 数値を記憶する変数に値を代入する。
2値オペノード 2つの値を見比べる。
1値オペノード 色々計算して値を変える。
ミラーリンクノード 別ページのノードの値を変える。
ベクタノード 今は動作しない。

+検知系ノード「動きを受信するノード」
●検知系ノード(TG:TriggerNode) 「動きを受信するノード」
  状態を調べて数値にするノード。これを見て指示を出すことが多い。

ノード名 画像 説明
キー状態検知ノード 汎用キーが押されてるか見る。
アイテム状態検知ノード アイテムMCTRLを使ってか見る。
座席状態検知ノード 座ってるかとか座席の状態をみる。
プレイヤー状態検知ノード HPとかENとかプレイヤーの状態を見る。
ユニット移動検知ノード 向きとか移動状態を見る。
ユニット状態検知ノード HPやスレーブ、HPなどの状態を見る。
ch状態検知ノード 各チャネルの動いてる状態を見る。
センサー状態検知 各センサーの座標や状態を見る。
ターゲット状態検知ノード 各ターゲットの向きや状態を見る。
Entity状態検知ノード 対象の向きや座標、状態を見る。
Block状態検知ノード 指定座標ブロックの状態を見る。

まだできてないので下記ブログ参照
まからのブロマガ R.I.N.Gの取説 (操作と各ノードの解説)
http://ch.nicovideo.jp/makara/blomaga/ar1253164


ターゲットシステム

+ターゲットシステム
◆Entityの話
◆センサーの話
 「センサーMCTRL」をユニットに配置すると、そのセンサーに「対象」を探させる事ができます。
 探す対象は「Entity検索指示ノード」で指定します。
 指定できる対象は
生物全般 プレイヤー ユニット アイテム クリーチャー 動物 村人 ボス 全て ハッシュ指定
 これに敵味方の区別と探す距離を指定する事ができます。(最大32ブロック)

 センサーで見つけた対象の情報は「センサー状態検知ノード」で取り出すことが出来ます。
 取り出せる情報は


◆ターゲットの話

◆検索結果の話
以下非日本フォーラム抜粋
[0.7.2新要素一覧]
◆ターゲットシステム
 RINGにやらせたかったことを実現するキモの新システムです
 ユニットあたり5つのターゲットを持つことが出来ます
 設定したターゲットはキーMCTLの新機能「ターゲットへ回転(ローテーター用)」と組み合わせることで
 パーツをターゲット方向へ向けることができたり、RINGの「移動タスクノード」と合わせて自律移動などを行わせたりできます


 [ターゲット指定方法その①:ターゲットサイトアイテム]
 ユニットに搭乗して新アイテム「ターゲットサイト」を持つと一定範囲のEntity上にターゲット選択リングが現れるので
 右クリックでターゲットを選択することができます
 複数選択する場合は右クリックを押しっぱなしでそれぞれをドラッグオーバーしてください
 ctrlキーを押すごとにターゲットの指定方法が「生物のみ」「Entity全て」「ブロック指定」に切り替わります
 ブロック指定の状態ではブロック座標をひとつのみターゲットとすることができます
 [ターゲット指定方法その②:RINGのノード「ターゲット設定指示ノード」]
 後述のセンサーノードの機能などで取得したEntityIDをターゲット指定ノードに渡してやることで
 RING内でターゲットを指定することが出来ます

 なお0番ターゲットは固定でアセンブル主になります
 上手く組み合わせればRINGでターゲットを自動検索して射撃する機体なんかも作れるかも

 (※注意※ターゲット情報はEntityの保存情報に含まれていません
  セーブ・ロードを挟む、チャンクのアンロードを挟むなどで頭は空っぽになるのでご留意のうえご活用ください)

◆センサー機能(主にRINGで使用)
 新アイテム「センサーMCTRL」を配置することで対象ブロックを位置センサーとしてRINGに認識させることができます
 「センサー状態検知ノード」よりセンサーの位置を取得することができるほか、
 「Entity検索指示ノード」により検索されたEntityIDを取り出すこともできます

◆移動タスク指示(RING機能)
 ターゲットに追従してユニットを移動させることができます
 ただ経路検索のコストがユニットの高さに比例して跳ね上がるので、一般MOBなどに比べると若干頭が悪いところがあります
 ジャンプを活用しないなどもろもろの制限はありますが、その点ご理解いただけるとありがたいです

 (※ごめんなさい。ひとまず歩行系とホバー・ヘリだけの対応です。エアクラフト・フロート・宇宙などは未実装です)

◆Entity状態検知ノードとBlock状態検知ノード
 それぞれEntityIDやブロック座標を渡してやるとそのEntity/Blockの一部情報を取得して出力します
 ※ただし「Block状態検知」のほうは現状唯一のオーバーパワーノードとして「enableOverpowerNode」設定の影響を受けます
  設定ファイルを変えるか(デフォルトでは否設定)、「jbcset enableOverpowerNode true」で一時的に有効化できます
  (使い方によっては鉱脈検索機なども作れてしまうため)

◆ベクタ入出力(RING機能)
 詳細な説明は割愛。4値までのなんちゃってベクタを扱える感じです。座標などを受け渡ししたかったので付け加えました
 現状ノードの代入機能でベクタは渡せないのであしからず


よくある質問

+よくある質問
  • Q「ショットモードが途中で止まるんだけど。。」
 ショットモードは「毎TICK必ず0ページ0番から始まる」わかりやすいモードですが
 基本ルール「定められた数以上のノードを通ると中断」から逃れるものではないため
 TICK内で非常に長い処理を行わせようとすると最後まで辿りつけない場合があります
 基本的には「毎TICK絶対に行わせたい処理がある」というケース以外では推奨しません
 また分岐処理などで同じノードを二度通ろうとしても終了するため、かなり処理内容は制限されます

  • Q「指示系ノードが動かなくて、RingDebugで見てみると「err」を出してる。。。」
 指示ノードの入力として参照したノードが「err」を出していませんか?
 たとえば座席状態検知ノードで誰も席に座っていないのにその状態を問い合わせたりすると「err値」を返します
 err値を参照した指示系ノードはチャンネルへの登録自体に失敗するので動作しません
 参照先の検知ノードなどが「err」ではないちゃんとした値を出力しているかどうか確認しましょう
 RINGにはいわゆる「例外系」はないので、かっちりとした処理を組むには適切に「err」値をハンドリングすることが必要です

  • Q「思ったとおりに動かなくて、RingDebugで見てみるといくつかのノードが空ノードに置き換わってる」
 RINGのページ設定画面で「権限」のチェックがいくつか外れていませんか?
 一括で特定グループの指示を無効化するための仕組みで、権限に適合しないノードは実行前に空ノードに変換されます

  • Q「座標はわかるけどEntitIDって?」
 Entityの個体を識別するMCの内部IDです。たとえば豚が二匹いた場合、それぞれにユニーク(かぶらない)な値が振られます
 基本的にMCによって生成順に一匹にひとつIDが振られ、セーブ&ロードなどを挟むと同じ個体でもIDは変わります

 似たようなものにBlockIDがありますが、これはEntityIDとは別に「ブロック種別」に与えられた番号で、ワールドごとに固定です
 (セーブ・ロードを挟んでも変わらないが、ワールドが異なると同じ種類のブロックでも値が違う可能性がある)
 このあたりの一意性・一貫性・IDの有効サイクルなど理解していないと思った動作にならないことがあるのでご注意ください
 (たとえばRINGでゴールドブロックのIDを割り出して書き留め、それを地下から検索するようなRINGを組んだとしても、
  他のワールドにそのRINGを持ち込むとIDが変わっていて動作が異なる、というミスが予想されます)

  • Q「いわゆる再帰処理を組んだんだけど、思ったとおりに動かない。。。」
 ごめんなさい、他リングの呼び出し過程は8呼び出し前までしか記憶できません
 (プログラムごとにセーブ時の実行状態を保存するのにある程度の枠を設けなければならなかったため)
 末尾再帰化できる再帰以外はたぶん書けないと思います

  • Q「つまりRINGって、あるTICKでどこから始まるか、どこで終わるか不定ってこと?そんなの不安定すぎじゃ。。。」
 そうです
 なので処理が長くなればなるほど「必ずしもTICK内で実行されないノード」が増えることになります
 ある程度制御をはっきりさせるテクニックとしては、たとえば「1ウェイトノード」を任意の処理の前に置けば、
 必ずそこでTICKの処理が中断され、次のTICKはその次からのノードから開始されることが保証されます

  • Q「ひょっとして検知系ノードって通らなくてもいいんじゃ。。。」
 よくそこに気付きましたね!
 他ノードからの問い合わせでも値を計算して返すので通らなくても機能します
 固定ジャンプですっとばしたら実行ノード数の節約になります
 ただRingDebugで見るとき問い合わせされない限り値が更新されないのでちょっと不便かもです

サンプル

+サンプル
※全てRINGを設置したユニットの設計図データなので設計図とコンストラクタに突っ込んでください

ローテーター(とエクステンダー)を計画にそって動かす、というサンプルです
+「ローテーター順次回転」
BR+LCAAAAAAAAAB1ks1OwkAQx6f0g3X5PBAuJmg8eeRMOBlDAgdC4tfRbNulNO62pruo76IP4WP4
FD6BPgNOF0pBdA6Tf2Z+O7OZGQpQA1vxDACOV2gWrK1lowvhH7OAoD+x2wPDuH8AUAG6y3ibTBia
qjbYQSJzEhXfKiWKbGJiuZpLjaKDKtty2ig7f7HmquAqrX2B8jxnsOupTMPJ/SSNE30h0uBhkMVJ
FCxkquM0iTWXBJyESQ7eJUsCnlFwA0TmNtSVYE/8SqR6ujQdLWgwpbj0BR8JFqkKAbLEGtOd5xY0
/ZRl4W3Mnw2Ef/dyaByuJ9IRLIv4DUbueBwt9Ch+4WFYBSd77PeR+KZdy4y/lTtnZezz7fWrZ7WH
3TOCY6ZmpsZmxg8dgpUPsqv3Ilux0XvQKZlfy0LG9WDY7lFcEcVrgI8iXiVl3CquAeNHdK/jbL9a
rV5mrYNejebmPw4QqfxrFo3LK8vXGYiNYjozwR9PL8cpowIAAA==

視線追従の先につけたセンサーの射線から3番ターゲットを更新していく、というサンプルです
+「視線でロックオン」
BR+LCAAAAAAAAACFksFu1DAQhsd2wqbptk3LwgWJLqqQqARVDz0tORVRqT30AKEcKydx02idpIpd
oLwFEjd4DJ6HJ+AZGsZOQlMoWh9W/8z++cb+bR9gGZgSNQB8aXARaNcaw58U7lwEGnCMZ6MtGTSN
rfdsTV3keCg2o+ARMnwg5AWQWwjqkM7z+r8eQqEhlrtla7ft3bE32209OJssmO3ibLJoNnJgAYcg
BxZwbFpOv2cTNtBhPQZgw3qFAmv3thU8QOYz8z0iswFwFT3UN56nwUubQzfTeZ72qYzdppsT2Tpw
r2l/HsPdNnMJ/Bhy1+k1JX6f9zDf9A93Az3Ug2Cn25/fn7FfDFhSFmBfBRNWUVRKpt2/pe2NUJ0V
GtUEVW17S6i0VaanWsoIXKV1LFF/NUfEpJ8UVXp0elTlpd6XVTKfFTw5z0tRVDqvylyLAmOZ/m1S
olRVPfDswGbr2X9TxZWeYSHkqeSfRZ1xLfMywxP+g5mLq1qoG4wHTskLAUsRL+fT6OpC+OAmdV6e
MRgryT+It7LSx5dFG9MKV0oUsRQHkmcKb8S7RMzxbQKB1bjidXqSi4+tj8E94zs0IVICE8nrTLzD
znuRZ+f6IP8k0nQETn2xu4uWV/5DYq9kzT6Lxq6f37/9ekxYuDwjMDX9iR+GzgnSwvshszdJBo/X
Aa9QccSzw5uXYK4lkZ3iurbN3x9oQnFDBAAA
+参考動画

関連リンク

まからのブロマガ R.I.N.Gの取説 (操作と各ノードの解説)
http://ch.nicovideo.jp/makara/blomaga/ar1253164
minecraft非公式日本フォーラム JointBlock R.I.N.G.研究トピック
http://forum.minecraftuser.jp/viewtopic.php?f=12&t=34369

編集用コメント

コメント欄の方針に関してはコメント欄方針を参照して下さい。
wikiの編集が苦手な方は、以下のコメントフォームへ書き込んで頂ければ有志でページに取り込みます。
MODの情報について間違った点や、動作確認済みのMODの不具合等があればご報告下さい。
※コメントを投稿する際は、以下の点を確認して下さい※
  • 編集に関わらない内容のコメント・質問・雑談は一律して削除されます。
    MOD配布サイト、ReadMeを熟読しても分からなかった質問は、配布サイトや非公式フォーラムなどにて質問して下さい。
  • 投稿の前に一度コメントログに目を通し、既に同じ内容が載っていないか確認して下さい。
  • 投稿の際は必ず前提MOD及びそのMODのバージョンを明記し、様々なケースを試した上で報告して下さい。
  • 投稿されているコメントへの返信の際は、返信したいコメント横の○にチェックを入れて返信して下さい。
    表示できる親コメントの数は限られます。新規投稿をむやみに行うことは、他のコメントが流れてしまう要因になります。
コメントログ:MOD解説/JointBlock/R.I.N.G
+上記の内容を守れる方のみご利用ください。
上記の内容を守れる方のみご利用ください。
  • どこから手をつけていいやら(笑) とりあえずGUI周りの記事を作りますかね。 - まから 2017-12-04 16:12:31
名前:

このページをシェアする

メニュー

Wikiのガイドライン
必ずお読みください!

基本事項



プラットフォーム


アイテムデータ



エンティティ



ゲームデータ



ワールド



Tips



ADVANCE



マルチプレイ



リンク



Wiki運営



その他



カウンタ


合計
-

トップページ
今日 : -
昨日 : -

更新履歴


取得中です。
※「ログ」「アーカイブ」「コメント」のページはここの履歴に表示されませんので、「更新履歴」および「コメント」から参照してください

人気ページ


おすすめゲーム攻略

注目ゲームニュース

注目ゲームニュースをもっとみる