feat: add OpenComputers RC bot

This commit is contained in:
LordMZTE 2024-04-07 23:17:00 +02:00
parent 98a9d0f0c2
commit 6de04ed12c
2 changed files with 88 additions and 0 deletions

View file

@ -0,0 +1,54 @@
(local ev (require :event))
(local bot (require :robot))
(local com (require :component))
(local infostr "WASD/Space/Shift: Move
B: Swing
P: Place
U: Use
,/.: Prev/Next slot
I: Inventory
Q: Drop Slot
C: Collect
O: Empty Inventory")
(local evmap {:__infomsg (fn [] infostr)
:w bot.forward
:a bot.turnLeft
:s bot.back
:d bot.turnRight
:space bot.up
:lshift bot.down
:b bot.swing
:p bot.place
:u bot.use
:comma (fn []
(bot.select (- (bot.select) 1)))
:period (fn []
(bot.select (+ (bot.select) 1)))
:i (fn []
(local selected (bot.select))
(faccumulate [s "" i 1 (bot.inventorySize)]
(let [info (com.inventory_controller.getStackInInternalSlot i)]
(.. s (if (= i selected) "> " " ")
(if info
(.. info.label "\t" info.size "/" info.maxSize)
"-") "\n"))))
:q bot.drop
:c bot.suck
:o (fn []
(let [prev (bot.select)
total (faccumulate [total 0 i 1 (bot.inventorySize)]
(do
(bot.select i)
(+ total (if (bot.drop) 1 0))))]
(bot.select prev)
(.. "Dropped items from " total " Slots.\nSelected Slot: "
prev)))})
(while true
(let [(_ _ _ _ _ msg) (ev.pull :modem_message)
func (. evmap msg)
(_ ret) (if func (pcall func) "Unknown Command")]
(print msg)
(com.tunnel.send ret)))

View file

@ -0,0 +1,34 @@
(local ev (require :event))
(local com (require :component))
(local term (require :term))
(local keyboard (require :keyboard))
(local infomsg (do
(print "fetching infomsg...")
(com.tunnel.send :__infomsg)
(let [(_ _ _ _ _ msg) (ev.pull :modem_message)]
msg)))
(fn show-info []
(term.clear)
(print infomsg)
(let [width (term.getViewport)]
(print (string.rep "=" width))))
(fn on-key [key]
(let [kname (. keyboard.keys key)]
(print ">> " kname)
(com.tunnel.send kname)))
(fn on-message [distance payload]
(show-info)
(print "D: " distance)
(print payload))
(show-info)
(while true
(let [(ev-type p1 p2 p3 p4 p5) (ev.pull)]
(case ev-type
:key_down (on-key p3)
:modem_message (on-message p4 p5))))