View difference between Paste ID: 9qJCF5VU and UG1HvuWG
SHOW: | | - or go back to the newest paste.
1-
    local scanSide = "right"
1+
    local scanSide = "bottom"
2-
    local projSide = "left"
2+
    local projSide = "top"
3-
    local modemSide = "back"
3+
    local modemSide = "front"
4
    local doorSec = 3
5
    local masterSec = 41
6
    local scanPath = "z"
7
     
8
    p = peripheral.wrap(scanSide)
9
    rednet.open(modemSide)
10
    redstone.setOutput(projSide, true)
11
     
12
    function playerInRange(name)
13
       data = p.getPlayerData(name)
14
       if data then
15
          return(math.abs(tonumber(data["position"][scanPath])) <2.5)
16
       end
17
       return false
18
    end
19
     
20
    function openDoor(name)
21
       redstone.setOutput(projSide, false)
22
       while playerInRange(name) do
23
         sleep(0.5)
24
       end
25
       redstone.setOutput(projSide, true)
26
    end  
27
     
28
    function getAccess(player)
29
       rednet.send(masterSec, player)
30
       local id, msg, dist = rednet.receive(5)
31
    --   print(msg)
32
       return(msg)
33
    end
34
     
35
    function checkAccess(secLevel)
36
       if secLevel ~= nil then
37
          return(secLevel >= doorSec)
38
       end
39
       return(false)
40
    end
41
     
42
    function scan()
43
       local players = p.getPlayerNames()
44
       local playerAccess
45
       for num,name in pairs(players) do
46
        playerAccess = getAccess(name)
47
        if checkAccess(playerAccess) then
48
           if playerInRange(name) then
49
             openDoor(name)
50
           end
51
         end
52
       end
53
    end
54
     
55
    while true do
56
      scan()
57
      sleep(0.025)
58
    end