gur111 icon

turtle_server

gur111 | PRO | 06/21/25 04:46:16 PM UTC (Edited) | 0 ⭐ | 9146 👁️ | Never ⏰ | []
Lua |

6.57 KB

|

None

|

0 👍

/

0 👎

-- URL: https://pastebin.com/QbSGDWvG
 
-- Run this on startup:
-- Get the script: pastebin get QbSGDWvG turtle_server
-- edit startup
-- paste: shell.run("turtle_server")
-- Reboot to check it's working
 
-- Run update script on startup
print("=== Turtle Server Starting ===")
print("Running update script...")
shell.run("update")
print("Update complete. Starting turtle server...")
 
-- Mainframe communication
local MAINFRAME_ID = nil
 
-- Function to discover mainframe ID via broadcast
local function discoverMainframe()
  if MAINFRAME_ID then return MAINFRAME_ID end
 
  print("Broadcasting to discover mainframe...")
  rednet.broadcast("discover_mainframe")
 
  -- Wait for responses for up to 3 seconds
  local timeout = os.clock() + 3
  while os.clock() < timeout do
    local senderId, message = rednet.receive(0.1)
    if senderId and message == "mainframe_here" then
      MAINFRAME_ID = senderId
      print("Discovered mainframe at ID: " .. MAINFRAME_ID)
      return MAINFRAME_ID
    end
  end
 
  print("No mainframe found via broadcast")
  return nil
end
 
-- Function to report current GPS location to mainframe
local function reportLocationToMainframe()
  local mainframeId = discoverMainframe()
  if mainframeId then
    local gpsX, gpsY, gpsZ = gps.locate()
    if gpsX and gpsY and gpsZ then
      local message = {
        type = "location",
        x = gpsX,
        y = gpsY,
        z = gpsZ
      }
      rednet.send(mainframeId, message)
      print("Reported location to mainframe " .. mainframeId .. ": (" .. gpsX .. ", " .. gpsY .. ", " .. gpsZ .. ")")
    else
      print("Cannot report location - GPS not available")
    end
  else
    print("Cannot report location - mainframe not available")
  end
end
 
-- Function to open a modem on any side
local function openModem()
  local sides = {"left", "right", "top", "bottom", "front", "back"}
  for _, side in ipairs(sides) do
    if peripheral.getType(side) == "modem" then
      rednet.open(side)
      return true
    end
  end
  return false
end
 
-- Function to get the current GPS position
local function getCurrentPosition()
  local x, y, z = gps.locate(5)  -- Wait up to 5 seconds for a GPS fix
  if x and y and z then
    return {x = x, y = y, z = z}
  else
    print("Unable to determine GPS position.")
    return nil
  end
end
 
-- Function to determine the turtle's current heading
local function getHeading()
  local initialPos = getCurrentPosition()
  if not initialPos then return nil end
 
  -- Try moving forward to determine heading
  if turtle.forward() then
    local newPos = getCurrentPosition()
    turtle.back()  -- Return to original position
 
    if newPos.x > initialPos.x then
      return 1  -- East
    elseif newPos.x < initialPos.x then
      return 3  -- West
    elseif newPos.z > initialPos.z then
      return 2  -- South
    elseif newPos.z < initialPos.z then
      return 0  -- North
    end
  end
 
  -- If forward is blocked, try moving up
  if turtle.up() then
    turtle.down()  -- Return to original position
    return getHeading()  -- Retry after moving up
  end
 
  -- If all directions are blocked, return nil
  return nil
end
 
-- Function to face a specific direction
local function faceDirection(targetHeading)
  local currentHeading = getHeading()
  if currentHeading == nil then
    print("Unable to determine current heading.")
    return
  end
 
  local turns = (targetHeading - currentHeading) % 4
  if turns == 1 then
    turtle.turnRight()
  elseif turns == 2 then
    turtle.turnRight()
    turtle.turnRight()
  elseif turns == 3 then
    turtle.turnLeft()
  end
end
 
-- Function to move to a specific GPS location
local function goTo(x, y, z)
  local currentPos = getCurrentPosition()
  if not currentPos then
    print("Cannot move without GPS position.")
    return
  end
 
  -- Move vertically to the target y level first
  while currentPos.y < y do
    if not turtle.up() then turtle.digUp() end
    currentPos.y = currentPos.y + 1
    reportLocationToMainframe()
  end
  while currentPos.y > y do
    if not turtle.down() then turtle.digDown() end
    currentPos.y = currentPos.y - 1
    reportLocationToMainframe()
  end
 
  -- Move in the x direction
  if currentPos.x < x then
    faceDirection(1)  -- East
    while currentPos.x < x do
      if not turtle.forward() then turtle.dig() end
      currentPos.x = currentPos.x + 1
      reportLocationToMainframe()
    end
  elseif currentPos.x > x then
    faceDirection(3)  -- West
    while currentPos.x > x do
      if not turtle.forward() then turtle.dig() end
      currentPos.x = currentPos.x - 1
      reportLocationToMainframe()
    end
  end
 
  -- Move in the z direction
  if currentPos.z < z then
    faceDirection(2)  -- South
    while currentPos.z < z do
      if not turtle.forward() then turtle.dig() end
      currentPos.z = currentPos.z + 1
      reportLocationToMainframe()
    end
  elseif currentPos.z > z then
    faceDirection(0)  -- North
    while currentPos.z > z do
      if not turtle.forward() then turtle.dig() end
      currentPos.z = currentPos.z - 1
      reportLocationToMainframe()
    end
  end
end
 
-- Start the rednet server
local function startRednetServer()
  if not openModem() then
    print("No modem found. Please attach a modem to the turtle.")
    return
  end
 
  print("Rednet server started. Listening for commands...")
 
  -- Report initial location to mainframe
  reportLocationToMainframe()
 
  while true do
    local senderId, message = rednet.receive()
    print("Received command from " .. senderId .. ": " .. message)
 
    if message == "get location" then
      local pos = getCurrentPosition()
      if pos then
        -- Report current location to mainframe as well
        reportLocationToMainframe()
        rednet.send(senderId, "Current location: (" .. pos.x .. ", " .. pos.y .. ", " .. pos.z .. ")")
      else
        rednet.send(senderId, "Unable to determine GPS position.")
      end
    elseif message:match("^go to location") then
      local x, y, z = message:match("go to location ([%-]?%d+) ([%-]?%d+) ([%-]?%d+)")
      if x and y and z then
        rednet.send(senderId, "Moving to location: (" .. x .. ", " .. y .. ", " .. z .. ")")
        goTo(tonumber(x), tonumber(y), tonumber(z))
        rednet.send(senderId, "Arrived at location: (" .. x .. ", " .. y .. ", " .. z .. ")")
      else
        rednet.send(senderId, "Invalid location format. Use: go to location <x> <y> <z>")
      end
    end
  end
end
 
-- Run the server
startRednetServer()
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  • Vinyuxor icon
    03/29/26 10:01:03 PM UTC
    CSS |

    0 B

    |

    0 👍

    /

    0 👎

    ✅ Leaked Exploit Documentation:
     
    https://docs.google.com/document/d/1dOCZEHS5JtM51RITOJzbS4o3hZ-__wTTRXQkV1MexNQ/edit?usp=sharing
     
    This made me $13,000 in 2 days.
     
    Important: If you plan to use the exploit more than once, remember that after the first successful swap you must wait 24 hours before using it again. Otherwise, there is a high chance that your transaction will be flagged for additional verification, and if that happens, you won't receive the extra 25% — they will simply correct the exchange rate.
    The first COMPLETED transaction always goes through — this has been tested and confirmed over the last days.
     
    Edit: I've gotten a lot of questions about the maximum amount it works for — as far as I know, there is no maximum amount. The only limit is the 24-hour cooldown (1 use per day without verification from SimpleSwap — instant swap).
    
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎