Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local ports = {
- ["serverport"] = 8080,
- ["phoneport"] = 8081,
- ["deployerPort"] = 5050,
- ["turtleports"] = {}
- }
- local connectedTurtles = {}
- local serverKey = math.random(10000,90000)
- local modem = peripheral.wrap("right")
- modem.open(ports.serverport)
- local segmentSize = 1
- function split(inputstr, sep)
- if sep == nil then
- sep = "%s"
- end
- local t={}
- for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
- table.insert(t, str)
- end
- return t
- end
- function parseParams(data)
- coords = {}
- params = split(data, " ")
- coords[1] = vector.new(params[1], params[2], params[3])
- coords[2] = vector.new(params[4], params[5], params[6])
- return (coords)
- end
- function vectorToString(vector)
- local str = tostring(vector.x).." "..tostring(vector.y).." "..tostring(vector.z)
- return str
- end
- function getPositioningTable(x, z, segmaentationSize)
- local xRemainder = x % segmaentationSize
- local zRemainder = z % segmaentationSize
- local xMain = x - xRemainder
- local zMain = z - zRemainder
- xRemainder = (xRemainder == 0 and segmaentationSize or xRemainder)
- zRemainder = (zRemainder == 0 and segmaentationSize or zRemainder)
- local positions = {}
- for zi = 0, z - 1 , segmaentationSize do
- for xi = 0, x - 1, segmaentationSize do
- local dims = {xi, zi, segmaentationSize, segmaentationSize}
- if(xi >= x - segmaentationSize and xi <= x - 1 ) then
- dims = {xi, zi, xRemainder, segmaentationSize}
- end
- if(zi >= z - segmaentationSize and zi <= z - 1 ) then
- dims = {xi, zi, segmaentationSize, zRemainder}
- end
- table.insert(positions, dims)
- end
- end
- return table.pack(positions, xRemainder, zRemainder)
- end
- function segmentArea(endPos)
- local x = endPos.x
- local z = endPos.z
- -- we dont segment height as theres litteraly no point lmao
- -- return getPositioningTable(x,z,segmentSize)
- return endPos
- end
- local parsed1,parsed2 = nil,nil
- repeat
- os.sleep()
- event, side, senderChannel, replyChannel, phoneargs, distance = os.pullEvent("modem_message")
- parsed1 = parseParams(phoneargs)[1]
- parsed2 = parseParams(phoneargs)[2]
- until replyChannel == ports.phoneport
- print(string.format("Recieved quarry start at %d %d %d", parsed1.x,parsed1.y,parsed1.z))
- print(string.format("Recieved quarry size of %d %d %d", parsed2.x,parsed2.y,parsed2.z))
- local turtlesToDeploy = 1
- for i = 1,turtlesToDeploy do
- print("Deploying turtle "..i)
- modem.transmit(ports.deployerPort,ports.serverport,"DEPLOY_TURTLE")
- local event, side, senderChannel, replyChannel, msg, distance = nil,nil,nil,nil,nil,nil
- repeat
- event, side, senderChannel, replyChannel, msg, distance = os.pullEvent("modem_message")
- until replyChannel ~= ports.phoneport
- print("Recieved ping")
- print("Reply channel: "..replyChannel)
- if msg == "CLIENT_READY" then
- table.insert(ports.turtleports,replyChannel)
- table.insert(connectedTurtles,{["id"] = i, ["port"] = replyChannel}) -- saves turtles id and port
- local segment = segmentArea(parsed2)
- print(segment)
- os.sleep(0.5)
- modem.transmit(replyChannel,ports.serverport,serverKey)
- os.sleep(1)
- modem.transmit(replyChannel,ports.serverport,vectorToString(parsed1).." "..vectorToString(segment))
- end
- end
- local str = nil
- for _,port in ipairs(ports.turtleports) do
- str = str..port..", "
- end
- str = string.sub(str,1,#str)
- modem.transmit(ports.phoneport,0,"Deployed "..turtlesToDeploy.." turtle(s) Ports: "..str)
Advertisement
Advertisement
Advertisement
RAW Paste Data
Copied
Advertisement