Advertisement
Corona

[Computercraft] SensorControl

Aug 27th, 2014
359
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.06 KB | None | 0 0
  1. -- Refresh rate of the sensor
  2. local iRefreshRate = 0.3
  3. -- Edit the range of the sensor!
  4. local tSensorRange = {}
  5. tSensorRange.xMin = -5
  6. tSensorRange.xMax = 5
  7. tSensorRange.yMin = -5
  8. tSensorRange.yMax = 5
  9. tSensorRange.zMin = -5
  10. tSensorRange.zMax = 5
  11. -- Set 'bUSR' to true, if you want to enable the Sensor Range Limit!
  12. local bUSR = true
  13. -- Edit this whitelist to your likings!
  14. local tWhitelist = {"Coronaxe","Notch","Direwolf20","Dinnerbone"}
  15. -- Set 'bUWL' to true, if you want to enable the whitelist!
  16. local bUWL = false
  17. -- Invert the Output
  18. local bInvert = false
  19. -- Determine the side(s), where the output should occur.
  20. local tRSides = {"left","right"}
  21. -- determine this variable, if you have more than one sensor in your network. The Numbers will show up on startup.
  22. local iSensorID = 1
  23.  
  24. function getPeripherals()
  25.     local tTempStore = {}
  26.     for i,s in pairs( peripheral.getNames() ) do
  27.         if tTempStore[ peripheral.getType( s ) ] == nil then
  28.             tTempStore[ peripheral.getType ( s ) ] = {}
  29.         end
  30.         table.insert( tTempStore[ peripheral.getType ( s ) ], s )
  31.     end
  32.     return tTempStore
  33. end
  34.  
  35. function getRSOutput()
  36.     local tTempStore = {}
  37.     for i, s in pairs( rs.getSides() ) do
  38.         table.insert( tTempStore, s )
  39.     end
  40.     return tTempStore
  41. end
  42.  
  43. function getEntities( pSensor )
  44.     local tTempStore = {}
  45.     tTempStore.mobs, tTempStore.players = pSensor.getMobIds(), pSensor.getPlayerNames()
  46.     return tTempStore
  47. end
  48.  
  49. function control( tRSides, bState, bInvert )
  50.     if bInvert then
  51.         bState = not bState
  52.     end
  53.     for i=1, #tRSides do
  54.         rs.setOutput( tRSides[i], bState )
  55.     end
  56. end
  57.  
  58. function cls()
  59.     term.setBackgroundColor( colors.black )
  60.     term.clear()
  61.     term.setCursorPos( 1, 1 )
  62. end
  63.  
  64. function main()
  65.     cls()
  66.     print( "Initializing..." )
  67.     print( "Searching for sensors..." )
  68.     local tPeripherals = getPeripherals()
  69.     local pSensor, tEntities, tAdvancedPlayerData
  70.     if not tPeripherals.openperipheral_sensor then
  71.         error( "NO SENSOR CONNECTED!" )
  72.     end
  73.     print( "\nSensors found:" )
  74.     for i=1, #tPeripherals.openperipheral_sensor do
  75.         print( "["..i.."]:"..tPeripherals.openperipheral_sensor[i] )
  76.     end
  77.     if ( #tPeripherals.openperipheral_sensor > 1 and iSensorID < 1 ) or ( #tPeripherals.openperipheral_sensor > 1 and iSensorID > #tPeripherals.openperipheral_sensor ) then
  78.         error( "iSensorID is out of range!" )
  79.     end
  80.     if #tPeripherals.openperipheral_sensor == 1 then
  81.         iSensorID = 1
  82.     end
  83.     pSensor = peripheral.wrap( tPeripherals.openperipheral_sensor[ iSensorID ] )
  84.     print( "Wrapped sensor on "..tPeripherals.openperipheral_sensor[ iSensorID ] )
  85.     sleep( 0.2 )
  86.     while true do
  87.         tEntities = getEntities( pSensor )
  88.         if #tEntities.players > 0 then
  89.             for i=1, #tEntities.players do
  90.                 local bAllow = false
  91.                 for j=1, #tWhitelist do
  92.                     if tEntities.players[ i ] == tWhitelist[ j ] then
  93.                         bAllow = true
  94.                     end
  95.                 end
  96.                 if not bUWL then
  97.                     bAllow = true
  98.                 end
  99.                 if bUSR then
  100.                     if not ( tSensorRange.xMin < pSensor.getPlayerData( tEntities.players[ i ] ).position.x and tSensorRange.xMax > pSensor.getPlayerData( tEntities.players[ i ] ).position.x ) or not ( tSensorRange.yMin < pSensor.getPlayerData( tEntities.players[ i ] ).position.y and tSensorRange.yMax > pSensor.getPlayerData( tEntities.players[ i ] ).position.y ) or not ( tSensorRange.zMin < pSensor.getPlayerData( tEntities.players[ i ] ).position.z and tSensorRange.zMax > pSensor.getPlayerData( tEntities.players[ i ] ).position.z ) then
  101.                         control( tRSides, false, bInvert )
  102.                     elseif bAllow then
  103.                         control( tRSides, true, bInvert )
  104.                     end
  105.                 elseif bAllow then
  106.                     control( tRSides, true, bInvert )
  107.                 end
  108.                 tAdvancedPlayerData = pSensor.getPlayerData( tEntities.players[ i ] )
  109.                 cls()
  110.                 print( " Listening... Terminate with ctrl + t for 2 seconds" )
  111.                 print( "Players:" )
  112.                 print( "\t"..tEntities.players[ i ] )
  113.                 print( "\t[X]:"..tAdvancedPlayerData.position.x )
  114.                 print( "\t[Y]:"..tAdvancedPlayerData.position.y )
  115.                 print( "\t[Z]:"..tAdvancedPlayerData.position.z )
  116.             end
  117.         else
  118.             control( tRSides, false, bInvert )
  119.         end
  120.         sleep( iRefreshRate )
  121.     end
  122. end
  123.  
  124. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement