#author("2023-06-08T11:39:41+09:00","default:admin","admin")
#author("2024-07-02T11:41:39+09:00","default:admin","admin")
*ロジックメモ
-printコマンドはコメント代わりに使える。jump先にも指定できるのでぜひ使おう。
-Controlコマンドの工場の稼働/非稼働はconfigureじゃなくてenabled?~
set (enabled) of (buildings) to (@dagger)~
→control enabled building @dagger 0 0 0
-コピペ時jumpコマンドの数字がずれるのでゲーム内貼り付け後、もしくはメモ帳編集時に要修正。
-GetLinkを使う際はプロセッサを建築後にリンク指定する順番にも注意すること。~
GetLinkを使うと細かい指定はできない(たぶん)ので、面倒でも直接指定した方が動作は確実。
GetLinkを使うと細かい指定はできない(たぶん)ので、面倒でも直接指定した方が動作は確実。~
設計図からロードして、そのまま建設する場合は設計図保存時のリンク順になるのできちんと動作する。~
-ロジック冒頭と処理の最後に@timeを取得、2つの差を求めることでロジックの実行にかかった時間を知ることができる。~
この時間は当然プロセッサを上位のものにすれば短くなり、概ね半減していく。~
~
*ロジックサンプル
[[MindustryWikiのサンプル>https://wikiwiki.jp/mindustry/%E3%83%AD%E3%82%B8%E3%83%83%E3%82%AF/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0#jbb4473b]]
***スイッチを使用した工場の稼働/停止ロジック
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、ユニットタイプ、アイテムを設定すること
#region(単体稼働・要フラグ手動設定)
 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
#endregion
#region(複数バインド・フラグ自動設定)
 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
#endregion

***トリウムリアクターの冷却水/温度表示
 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
***液体タンク残量グラフ
#region(液体タンク残量グラフ)
 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
#endregion
***PowerDisplayロジックコード解析
#region(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		//ループ回数フラグの減少
#endregion
***x秒数える
-x秒数える
#region(TimeLoop)
 set settime 60  //この秒数分数える
 set time 0
 wait 1
 op add time time 1
 print time
 printflush message1
 jump 2 lessThan time settime
#endregion
-x秒数える2
#region(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
#endregion
***60秒の間にコンテナに流入した数を数える
#region(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
#endregion
***クェーサーによるスクラップ採掘
#region(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
#endregion

*組み込み変数
#include(Steam/Mindustry/ロジック/組み込み変数,notitle)

編集 添付 バックアップ 名前変更