View difference between Paste ID: fkR5gCki and e37ZwnXJ
SHOW: | | - or go back to the newest paste.
1-
local chat = peripheral.find "chat_box"
1+
rednet.open "top"
2
local radar = peripheral.find "radar"
3
local side = "right"
4
local onoff = false
5-
chat.setName "Tesla Thingy"
5+
local admin = "gollark"
6
local alreadyHandledTrespass = false
7
8
local banned = {
9
	"demhydraz",
10
	"Terrariola"
11-
while true do
11+
}
12-
    _, _, usr, msg = os.pullEvent "chat_message"
12+
13
function speak(msg)
14-
    local cmd = string.sub(msg, 2)
14+
	rednet.broadcast({"GTech Base Defense System: ID " .. os.getComputerID(), msg}, "chat_announce")
15
end
16-
    print(usr, msg, cmd)
16+
17
function checkTrespassers(radarOutput)
18-
    if cmd == "tesla" then
18+
	for _, data in pairs(radarOutput) do
19-
        onoff = not onoff
19+
		for _, bannedName in pairs(banned) do
20-
        chat.say("Acknowledged. RS: " .. tostring(onoff))
20+
			if data.name == bannedName then
21-
        set()
21+
				return true, bannedName
22-
    end
22+
			end
23-
end
23+
		end
24
	end
25
26
	return false
27
end
28
29
function set()
30
    redstone.setOutput(side, onoff)
31
end
32
33
function scanNearby()
34
	while true do
35
		local players = radar.getPlayers()
36
		local trespassersExist, name = checkTrespassers(players)
37
38
		if trespassersExist then
39
			print "Trespass detected"
40
			if not alreadyHandledTrespass then
41
				speak "TRESPASSER DETECTED. Coil engaged."
42
				if name then
43
					speak("Go away, " .. name .. ".")
44
					if name == "nagoL2015" then
45
						speak "Dark Lords are not welcome here, dank or not."
46
					end
47
				end
48
				alreadyHandledTrespass = true
49
			end
50
			onoff = true
51
		else
52
			if alreadyHandledTrespass then
53
				onoff = false
54
			end
55
			alreadyHandledTrespass = false
56
		end
57
58
		set()
59
60
		sleep(1)
61
	end
62
end
63
64
function controlCoil()
65
	while true do
66
    	local _, raw = rednet.receive "chat_message"
67
    	local msg, usr = raw[2], raw[1]
68
69
		local cmd = string.sub(msg or "", 2) -- msg is somehow nil sometimes
70
    
71
    	print(usr, msg, cmd)
72
    
73
    	if usr == admin then
74
			if cmd == "toggle" then
75
        		onoff = not onoff
76
        		speak("Message acknowledged. Coil set to: " .. tostring(onoff) .. ".")
77
        		set()
78
			elseif cmd == "reboot" then
79
				speak "Rebooting..."
80
				os.reboot()
81
			end
82
    	end
83
	end
84
end
85
86
speak "System ready."
87
88
parallel.waitForAll(controlCoil, scanNearby)