Skip to main content
Number Codec Compiler は、パケット 1 つにつき Sender (送信側) と Receiver (受信側) の 2 つの Lua コードを生成します。それぞれ別の MC のスクリプトに組み込みます。

Sender.lua

送信側 MC のスクリプトに、生成された onTick() をそのまま貼り付けます。フィールドごとに input.getNumber(sourceChannel) / input.getBool(sourceChannel) で値を読み、量子化・範囲外処理をしたうえで output.setNumber(<送信CH>, ...) に書き込みます。 パッキング方式によっては、値をそのまま送らずビット再解釈するヘルパー関数 (u2f、範囲によっては put) がコードの先頭に生成されます。既存の onTick() がある場合は、ヘルパー関数の定義と、生成された処理内容をその中にマージしてください。
Sender.lua (サンプルパケットでの生成例)

Receiver.lua

受信側 MC のスクリプトには、受信テーブルの初期化 (<受信テーブル変数名> = <受信テーブル変数名> or {})、そして receive_<パケット名>() 関数が生成されます。Sender 側と同様に、パッキング方式によってはヘルパー関数 (f2u、方式によっては get) も先頭に生成されます。
Receiver.lua (サンプルパケットでの生成例)
生成されたコードは、receive_<パケット名>() を自動的には呼び出しません。受信側 MC の自分の onTick() から明示的に呼び出す必要があります。呼び出し忘れると rx テーブルが更新されません。
デコードされた値は <受信テーブル変数名>.<フィールド名> (既定では rx.<フィールド名>) に書き込まれます。範囲外検知 (Overflow) を使ったフィールドは、範囲外の入力に対して -math.huge / math.huge が入ることがあるため、その値を使う側のロジックで考慮してください。
u2f/f2u/put/get ヘルパー関数や、その中の定数は、浮動小数点のビット再解釈と NaN/Infinity 回避のために使われています。削除したり並べ替えたりすると、デコード結果が壊れます。仕組みの詳細は パッキング方式 を参照してください。

送受信が噛み合わない場合

  • Sender.lua と Receiver.lua は、必ず同じ候補 (同じ使用チャンネル数) から生成された組を貼り付けてください。候補を切り替えるとエンコードの並び順や基数が変わります。
  • 送信CH/受信CH は、リストの先頭から順に 1 対 1 で対応します。番号そのものではなく並び順で対応するため、片方だけ並べ替えると噛み合わなくなります。
  • フィールドを追加・変更したら、Sender/Receiver の両方を貼り直してください。