ロジックメモ
- printコマンドはコメント代わりに使える。jump先にも指定できるのでぜひ使おう。
- Controlコマンドの工場の稼働/非稼働はconfigureじゃなくてenabled?
set (enabled) of (buildings) to (@dagger)
→control enabled building @dagger 0 0 0
- コピペ時jumpコマンドの数字がずれるのでゲーム内貼り付け後、もしくはメモ帳編集時に要修正。
- GetLinkを使う際はプロセッサを建築後にリンク指定する順番にも注意すること。
GetLinkを使うと細かい指定はできない(たぶん)ので、面倒でも直接指定した方が動作は確実。
設計図からロードして、そのまま建設する場合は設計図保存時のリンク順になるのできちんと動作する。
- ロジック冒頭と処理の最後に@timeを取得、2つの差を求めることでロジックの実行にかかった時間を知ることができる。
この時間は当然プロセッサを上位のものにすれば短くなり、概ね半減していく。
ロジックサンプル
MindustryWikiのサンプル
スイッチを使用した工場の稼働/停止ロジック
Wikiはconfigureになってるけど、サンドボックスだとなぜかenabledに(@dagger)を突っ込むと動いた
上記にもあるけどGetLinkを使うので、プロセッサー建築後のリンク指定の順番に注意する
(具体的にはスイッチ→工場x8までの順番で指定する)
Reconstructor(上位加工)は指定しない(大元を止めればよいため)
工場自体を止めなくても、素材供給ラインの根元にソーターを仕込んでそこでオンオフでもいい気がする
set seisan @dagger
sensor flg switch1 @enabled
jump 11 equal flg 1
print "工場停止"
printflush message1
set i 1
getlink Link i
control enabled Link 0 0 0 0
op add i i 1
jump 6 lessThanEq i 8
end
print "工場稼働"
printflush message1
set y 1
getlink Link y
control enabled Link @dagger 0 0 0
op add y y 1
jump 14 lessThanEq y 8
end
コアからコンテナに物資を運ぶ
冒頭3行のflag、ユニットタイプ、アイテムを設定すること
+
| | 単体稼働・要フラグ手動設定
|
set flag 0000
set UType @flare
set Item @graphite
set box vault1
jump 9 notEqual @unit null
ubind UType
sensor f @unit @flag
jump 9 equal f flag
jump 5 notEqual f 0
ucontrol flag flag dy 0 0 0
sensor hold @unit @totalItems
sensor capa @unit @itemCapacity
jump 18 equal hold 0
sensor dx box @x
sensor dy box @y
ucontrol move dx dy 0 0 0
ucontrol itemDrop box 999 capa 0 0
end
ulocate building core false @copper cx cy c core
ucontrol move cx cy 0 0 0
ucontrol itemTake core Item capa 0 0
end
|
+
| | 複数バインド・フラグ自動設定
|
set item @graphite
set UType @poly
set UNum 2
getlink from 0
jump 0 equal from null
sensor thisX @this @x
op floor thisX thisX 0
sensor thisY @this @y
op floor thisY thisY 0
op mul thisX2 thisX 1e4
op add flagBase thisX2 thisY
op rand r 999 0
op floor r r 0
op mul r r 1e8
op add flag r flagBase
set cnt -1
op add cnt cnt 1
jump 26 greaterThanEq cnt UNum
ubind UType
sensor f @unit @flag
op mod fBase f 1e8
jump 24 equal f null
jump 18 notEqual fBase flagBase
jump 33 equal f flag
ucontrol flag flag 0 0 0 0
jump 16 always 0 0
ubind UType
sensor f @unit @flag
op mod fBase f 1e8
jump 26 notEqual fBase flagBase
jump 33 equal f flag
ucontrol flag 0 0 0 0 0
jump 26 always 0 0
ubind UType
sensor f @unit @flag
jump 33 notEqual f flag
sensor hold @unit item
jump 42 notEqual hold 0
ulocate building core false 0 coreX coreY found core
ucontrol move coreX coreY 0 0 0
ucontrol itemTake core item 999 0 0
jump 33 always 0 0
sensor x from @x
sensor y from @y
ucontrol move x y 0 0 0
ucontrol itemDrop from 999 999 0 0
jump 33 always 0 0
|
トリウムリアクターの冷却水/温度表示
draw clear 0 0 0 0 0 0
sensor cf reactor1 @cryofluid
op mul res cf 2.66
draw color 0 255 255 255 0 0
draw rect 0 0 40 res 0 0
sensor he reactor1 @heat
op mul heat 80 he
draw color 255 00 00 255 0 0
draw rect 40 0 80 heat 0 0
drawflush display1
メモ:
draw rectのx.yは0~80/179、sensorの結果をそのまま投げるとまずいので補正してやる
heatの実数値は百分率
発電機用の冷却水切れ防止コード
getlink reactors bango
sensor cryofluid reactors @cryofluid
op greaterThanEq working cryofluid 5
control enabled reactors working 0 0 0
op add bango bango 1
jump 7 lessThanEq bango 5
set bango 0
end
コピペ用
スイッチのON/OFFで工場の稼働停止
set seisan @dagger
sensor flg switch1 @enabled
jump 11 equal flg 1
print "工場停止"
printflush message1
control enabled factory1 0 0 0 0
control enabled factory2 0 0 0 0
control enabled factory3 0 0 0 0
control enabled factory4 0 0 0 0
end
print "工場稼働"
printflush message1
control enabled factory1 seisan 0 0 0
control enabled factory2 seisan 0 0 0
control enabled factory3 seisan 0 0 0
control enabled factory4 seisan 0 0 0
end
上記のスイッチ状態をfoundation1の在庫で決める
set value 1000
sensor silicon foundation1 @silicon
jump 6 lessThan silicon value
sensor graphite foundation1 @graphite
jump 6 lessThan graphite value
end
control enabled switch1 0 0 0 0
液体タンク残量グラフ
+
| | 液体タンク残量グラフ
|
set tank tank2
drawflush display1
printflush message4
jump 6 notEqual loaded 1
set loaded 1
draw clear 35 35 35 0 0 0
draw color 70 70 70 255 0 0
draw lineRect 2 2 76 76 0 0
set tmp 0
sensor tmp tank @water
set type @water
jump 22 greaterThan tmp 1
sensor tmp tank @slag
set type @slag
jump 22 greaterThan tmp 1
sensor tmp tank @oil
set type @oil
jump 22 greaterThan tmp 1
sensor tmp tank @cryofluid
set type @cryofluid
jump 22 greaterThan tmp 1
set type "none"
print type
draw color 255 255 255 255 0 0
draw rect 0 0 24 24 0 0
draw image 12 12 type 24 0 0
sensor now tank type
sensor capa tank @liquidCapacity
op floor now now 74
op div par now 1500
op mul par par 100
op floor par par 100
print "\nNow : "
print now
print "\nPar : "
print par
print "%\nPrev. : ("
print par_tmp
print "%)"
op mul height now 74
op div height height capa
op add x1 i 1
op add x2 x1 1
draw line x1 h_tmp x2 height 0 0
set h_tmp height
jump 49 lessThan i 80
set i 0
set par_tmp par
draw clear 35 35 35 0 0 0
op add i i 1
|
PowerDisplayロジックコード解析
+
| | PowerDisplay
|
sensor p node1 @powerNetIn
sensor c node1 @powerNetOut
sensor s node1 @powerNetStored
sensor cap node1 @powerNetCapacity
drawflush display1
jump 11 greaterThan i 0 //枠作成後まで飛ぶ
jump 9 greaterThan k 0 //枠作る
set k 8 //k=8、8回ループしたら初期化(グラフ棒がなくなるだけ)
draw clear 35 35 35 0 0 0
draw color 70 70 70 255 0 0
draw lineRect 2 2 76 76 0 0 //ここまで枠
op max max p c //ここからLine28まで
op mul barP p 64 //左の縦バー更新部分
op div barP barP max
op mul barC c 64
op div barC barC max
op mul barS s 74
op div barS barS cap
draw color 35 35 35 255 0 0
draw rect 4 13 5 64 0 0
draw rect 15 13 5 64 0 0
draw rect 25 3 5 74 0 0
draw color 40 240 40 255 0 0
draw rect 4 13 5 barP 0 0
draw color 240 40 40 255 0 0
draw rect 15 13 5 barC 0 0
draw color 230 230 30 255 0 0
draw rect 25 3 5 barS 0 0 //左の縦バー更新部分
op add x1 i 35 //更新位置(i)に35px足す(グラフ分)
op add x2 x1 1 //更新位置(x1)に1px分足す(x2)
op mod color k 2 //color=背景色フラグ、奇数か偶数で背景色いじってる
draw color 42 42 42 255 0 0 //薄灰に変更
jump 34 greaterThan color 0 //↑のフラグチェック
draw color 35 35 35 255 0 0 //フラグによっては濃灰に戻す
draw rect x1 3 1 74 0 0 //横1px分書き換え(灰)←グラフ部分じゃなくて1px分の背景
set tmp s //tmp=蓄電量
set tmpLast sLast /
set l cap
draw color 240 240 20 255 0 0 //黄色変更
op add back @counter 1 //戻り位置
jump 53 always x false //関数へ飛ぶ
set sLast dot
set tmp p
set tmpLast pLast
set l max
draw color 40 250 40 255 0 0
op add back @counter 1
jump 53 always x false
set pLast dot
set tmp c
set tmpLast cLast
draw color 250 30 30 255 0 0
op add back @counter 6 //↓の関数飛ばす
op mul dot tmp 73 //<-----------関数
op div dot dot l //
op add dot dot 4 //
jump 58 equal i 0
draw line x1 tmpLast x2 dot 0 0
set @counter back
set cLast dot
op add i i 1
jump 63 greaterThan i 41 //40?回描写更新したらリセット(iは横幅準拠)
end
set i 0
op sub k k 1 //ループ回数フラグの減少
|
x秒数える
- x秒数える
+
| | TimeLoop
|
set settime 60 //この秒数分数える
set time 0
wait 1
op add time time 1
print time
printflush message1
jump 2 lessThan time settime
|
- x秒数える2
+
| | TimeLoop2
|
set limit 5 //この秒数分数える
op idiv time60 @tick 60
op add time60 time60 limit
op idiv time @tick 60
op sub tmp time time60
op add tmp tmp limit
print "Time : "
print tmp
printflush message1
jump 4 lessThan time time60
|
60秒の間にコンテナに流入した数を数える
+
| | CountNum
|
set settime 60 //数える秒数
set box vault1 //数えるコンテナ
set type @sand //数える資源
set time 0
sensor result box type
wait 1
op add time time 1
print "time : "
print time
print "\n plus : "
print plus
printflush message1
jump 5 lessThan time settime
sensor result2 box type
op sub plus result2 result
|
クェーサーによるスクラップ採掘
+
| | Scrap
|
set item @scrap
set UType @quasar
set UNum 24
getlink from 0
jump 0 equal from null
sensor thisX @this @x
op floor thisX thisX 0
sensor thisY @this @y
op floor thisY thisY 0
op mul thisX2 thisX 1e4
op add flagBase thisX2 thisY
op rand r 999 0
op floor r r 0
op mul r r 1e8
op add flag r flagBase
set cnt -1
op add cnt cnt 1
jump 26 greaterThanEq cnt UNum
ubind UType
sensor f @unit @flag
op mod fBase f 1e8
jump 24 equal f null
jump 18 notEqual fBase flagBase
jump 33 equal f flag
ucontrol flag flag 0 0 0 0
jump 16 always 0 0
ubind UType
sensor f @unit @flag
op mod fBase f 1e8
jump 26 notEqual fBase flagBase
jump 33 equal f flag
ucontrol flag 0 0 0 0 0
jump 26 always 0 0
ubind UType
sensor f @unit @flag
jump 33 notEqual f flag
sensor hold @unit item
jump 43 notEqual hold 0
sensor x from @x
sensor y from @y
ucontrol move x y 0 0 0
ucontrol mine 264 211 999 0 0
jump 33 always 0 0
ulocate building storage false 0 coreX coreY found core
ucontrol move coreX coreY 0 0 0
ucontrol itemDrop from 999 0 0 0
jump 33 always 0 0
|
組み込み変数
#include(): No such page: Steam/Mindustry/ロジック/組み込み変数