View difference between Paste ID: <a href="/h1inHXHE">h1inHXHE</a> and <a href="/tQZCVcfA">tQZCVcfA</a> - Pastebin.com

View difference between Paste ID: h1inHXHE and tQZCVcfA
SHOW: | | - or go back to the newest paste.
1
-- Laser‐Guided Warp System ("ztc") with clean, scaled UI and full X,Y,Z reporting
2
3
-- 1) Wrap terminal + any attached monitors
4 -
4 +
local screens = {}
5 -
for i = #lasers, 1, -1 do
5 +
6 -
 if peripheral.getType(lasers[i]) ~= "warpdriveLaserCamera" then
6 +
-- Terminal
7 -
 table.remove(lasers, i)
7 +
table.insert(screens, {
8 -
 else
8 +
 clear = function() term.clear() term.setCursorPos(1,1) end,
9 -
 peripheral.wrap(lasers[i]).beamFrequency(1420)
9 +
 getSize = function() return term.getSize() end,
10
 setTextColor = term.setTextColor,
11
 setBackgroundColor = term.setBackgroundColor,
12
 setCursorPos = term.setCursorPos,
13 -
print("Emit Scanning Laser to Set Jump Target Without Y Movements")
13 +
 write = term.write,
14 -
14 +
})
15
16 -
 local event, laserName, lx, ly, lz, block, _, _, _, type, metadata, resistance = os.pullEvent()
16 +
-- Monitors
17 -
17 +
for _, side in ipairs(peripheral.getNames()) do
18 -
 if event == "laserScanning" then
18 +
 if peripheral.getType(side) == "monitor" then
19 -
 -- Convert the laser scanning coordinates to numbers and store them
19 +
 local m = peripheral.wrap(side)
20 -
 local lastLx = tonumber(lx)
20 +
 table.insert(screens, {
21 -
 local lastLy = tonumber(ly)
21 +
 clear = function() m.clear(); m.setCursorPos(1,1) end,
22 -
 local lastLz = tonumber(lz)
22 +
 getSize = function() return m.getSize() end,
23 -
23 +
 setTextColor = function(c) m.setTextColor(c) end,
24 -
24 +
 setBackgroundColor = function(c) m.setBackgroundColor(c) end,
25 -
 print("Laser Target: X:" .. lastLx .. " Y:" .. lastLy .. " Z:" .. lastLz)
25 +
 setCursorPos = function(x,y) m.setCursorPos(x,y) end,
26
 write = function(txt) m.write(txt) end,
27 -
 -- Package the coordinates into a table (you can also send a formatted string)
27 +
 monitor = m,
28 -
 local data = { x = lastLx, y = lastLy, z = lastLz }
28 +
 })
29 -
29 +
 end
30 -
 -- Broadcast the coordinates using a custom protocol ("coordBroadcast")
30 +
31 -
 rednet.broadcast(data, "HorizontalJumpBroadcast")
31 +
32
-- 2) Auto‐scale monitors so 5 lines fit (lines 1,3,5)
33
for _, s in ipairs(screens) do
34
 if s.monitor then
35
 local best = 0.5
36
 for _, scale in ipairs({1,0.5}) do
37
 s.monitor.setTextScale(scale)
38
 local w,h = s.getSize()
39
 if w >= 40 and h >= 5 then
40
 best = scale
41
 break
42
 end
43
 end
44
 s.monitor.setTextScale(best)
45
 end
46
end
47
48
-- 3) Helpers
49
local function forAll(fn) for _,s in ipairs(screens) do fn(s) end end
50
local function clearAll() forAll(function(s) s.clear() end) end
51
52
-- 4) Header & Subtitle
53
local titleText = "Laser Guided Warp System"
54
local subtitleText = "Emit Scanning Laser to Warp"
55
56
local function drawHeader()
57
 forAll(function(s)
58
 local w,_ = s.getSize()
59
 s.clear()
60
 -- Title (line 1): white on black
61
 local xT = math.floor((w - #titleText)/2) + 1
62
 s.setTextColor(colors.white)
63
 s.setBackgroundColor(colors.black)
64
 s.setCursorPos(xT,1)
65
 s.write(titleText)
66
 -- Subtitle (line 3): black on lightGray
67
 local xS = math.floor((w - #subtitleText)/2) + 1
68
 s.setTextColor(colors.black)
69
 s.setBackgroundColor(colors.lightGray)
70
 s.setCursorPos(xS,3)
71
 s.write(subtitleText)
72
 end)
73
end
74
75
-- 5) Setup peripherals
76
rednet.open("top")
77
local lasers = peripheral.getNames()
78
for i=#lasers,1,-1 do
79
 if peripheral.getType(lasers[i]) ~= "warpdriveLaserCamera" then
80
 table.remove(lasers,i)
81
 else
82
 peripheral.wrap(lasers[i]).beamFrequency(1420)
83
 end
84
end
85
86
-- 6) Initial draw
87
clearAll()
88
drawHeader()
89
90
-- 7) Dynamic coordinate line on row 5 (full X, Y, Z)
91
local function updateCoords(x,y,z)
92
 local line = string.format("Target: X:%d Y:%d Z:%d", x, y, z)
93
 forAll(function(s)
94
 local w,_ = s.getSize()
95
 -- clear entire line 5
96
 s.setTextColor(colors.black)
97
 s.setBackgroundColor(colors.lightGray)
98
 s.setCursorPos(1,5)
99
 s.write(string.rep(" ", w))
100
 -- write centered
101
 local xs = math.floor((w - #line)/2) + 1
102
 s.setCursorPos(xs,5)
103
 s.write(line)
104
 end)
105
end
106
107
-- 8) Main loop: listen for laserScanning
108
while true do
109
 local event, side, lx, ly, lz = os.pullEvent("laserScanning")
110
 local tx = tonumber(lx)
111
 local ty = tonumber(ly)
112
 local tz = tonumber(lz)
113
 updateCoords(tx, ty, tz)
114
 rednet.broadcast({ x = tx, y = ty, z = tz }, "HorizontalJumpBroadcast")
115
end
116
Public Pastes
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!

AltStyle によって変換されたページ (->オリジナル) /