Advertisement
NanoBob

Warturtle

Mar 1st, 2016
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.62 KB | None | 0 0
  1. local sendChannel=666
  2. local pingLimit=5
  3.  
  4. if fs.exists("events")==false then shell.run("pastebin get L7KYC10V events") end
  5. if os.loadAPI("events")==false then error("Failed to load events API") end
  6.  
  7. if fs.exists("data")==false then shell.run("pastebin get 5FpayqrQ data") end
  8. if os.loadAPI("data")==false then error("Failed to load data API") end
  9.  
  10. if fs.exists("utils")==false then shell.run("pastebin get c4CBkgKV utils") end
  11. if os.loadAPI("utils")==false then error("Failed to load utils API") end
  12.  
  13. local self={
  14.     facing="north",
  15.     pos={x=0,y=0,z=0},
  16. }
  17.  
  18. local whitelist={
  19.     ["NanoBob_"]=true,
  20.     ["DDerek"]=true,
  21.     ["bas260"]=true,
  22.     ["Ardron"]=true,
  23. }
  24.  
  25. local sensor
  26. local mainTimer
  27.  
  28. local facing={
  29.     [0]="west","north","east","south","west","north",
  30.     north=1,east=2,south=3,west=4,
  31. }
  32.  
  33. function self.turn(direction,ammount)
  34.     for i=1,ammount do
  35.         if direction=="right" then
  36.             turtle.turnRight()
  37.             self.facing=facing[ facing[self.facing]+1 ]
  38.         else
  39.             turtle.turnLeft()
  40.             self.facing=facing[ facing[self.facing]-1 ]
  41.         end
  42.     end
  43.     data.set("facing",self.facing,"db/position")
  44. end
  45.  
  46. function self.setFacing(targetFacing)
  47.     local targetFacing=string.lower(targetFacing)
  48.     local currentFacing=string.lower(self.facing)
  49.     if targetFacing==currentFacing then
  50.         return
  51.     else
  52.         local currentFacingIndex=facing[currentFacing]
  53.         local facingIndex=facing[targetFacing]
  54.         local turns=facingIndex-currentFacingIndex
  55.         if turns<0 then
  56.             turns=turns+4
  57.         end
  58.         if turns==3 then
  59.             self.turn("left",1)
  60.         else
  61.             for i=1,turns do
  62.                 self.turn("right",1)
  63.             end
  64.         end
  65.     end
  66. end
  67.  
  68. function initPos()
  69.     local facing=data.get("facing","db/position")
  70.     if facing==nil then
  71.         print("Please input facing:")
  72.         io.write("facing: ")
  73.         facing=read()
  74.         data.set("facing",facing,"db/position")
  75.     end
  76.     self.facing=facing
  77. end
  78.  
  79. function initSensor()
  80.     sensor=peripheral.wrap("left")
  81. end
  82.  
  83. function init()
  84.     initPos()
  85.     initSensor()
  86. end
  87. init()
  88.  
  89. function sensorHandle()
  90.    
  91. end
  92.  
  93. local messageHandles={
  94.    
  95. }
  96.  
  97. function handleMessages(side,channel,replyChannel,message)
  98.     if replyChannel==nil then return end
  99.     local messageType=utils.split(message,"|",1)
  100.     if messageHandles[messageType]==nil then return end
  101.     local returnMessage=messageHandles[messageType](replyChannel,message)
  102.     if returnMessage==nil then return end
  103.     wireless.transmit(replyChannel,localChannel,returnMessage)
  104. end
  105. events.addHandler("modem_message",handleMessages)
  106.  
  107. function searchForPlayers(id)
  108.     if id==mainTimer then
  109.         local players=sensor.getPlayers()
  110.         for _,player in ipairs(players) do
  111.             if whitelist[player.name]==nil then
  112.                 local data=sensor.getPlayerByName(player.name)
  113.                 if data==nil then break end
  114.                 local data=data.all()
  115.                 local pos=data.position
  116.                 pos.y=pos.y+1
  117.                 if pos.x>0.5 then
  118.                     self.setFacing("east")
  119.                     turtle.attack()
  120.                     if pos.x>1 then
  121.                         turtle.forward()
  122.                     end
  123.                 elseif pos.x<-0.5 then
  124.                     self.setFacing("west")
  125.                     turtle.attack()
  126.                     if pos.x<-1 then
  127.                         turtle.forward()
  128.                     end
  129.                 end
  130.                 if pos.y>0.5 then
  131.                     turtle.attackUp()
  132.                     if pos.y>-0.6 then
  133.                         turtle.up()
  134.                     end
  135.                 elseif pos.y<0 then
  136.                     turtle.attackDown()
  137.                     if pos.y<=-1.5 then
  138.                         turtle.down()
  139.                     end
  140.                 end
  141.                 if pos.z>0.5 then
  142.                     self.setFacing("south")
  143.                     turtle.attack()
  144.                     if pos.z>1 then
  145.                         turtle.forward()
  146.                     end
  147.                 elseif pos.z<-0.5 then
  148.                     self.setFacing("north")
  149.                     turtle.attack()
  150.                     if pos.z<-1 then
  151.                         turtle.forward()
  152.                     end
  153.                 end
  154.                 break
  155.             end
  156.         end
  157.     end
  158. end
  159. events.addHandler("timer",timerExpired)
  160.  
  161. while true do
  162.     searchForPlayers()
  163. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement