Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Stargate Touchscreen Dialer
- local interface =
- peripheral.find("advanced_crystal_interface")
- or peripheral.find("crystal_interface")
- if not interface then
- error("No crystal or advanced Stargate Interface found")
- end
- local monitor = peripheral.find("monitor")
- if not monitor then
- error("No Monitor connected")
- end
- monitor.setTextScale(0.5)
- -- ===== Galaxy Speicher =====
- local galaxyFile = "current_galaxy.txt"
- local currentGalaxy
- if fs.exists(galaxyFile) then
- local f = fs.open(galaxyFile,"r")
- currentGalaxy = tonumber(f.readLine())
- f.close()
- else
- term.clear()
- print("Current Galaxy?")
- print("1 = Milky Way")
- print("18 = Pegasus")
- currentGalaxy = tonumber(read())
- local f = fs.open(galaxyFile,"w")
- f.writeLine(currentGalaxy)
- f.close()
- end
- -- ===== Adressen =====
- local planets = {
- ["Overworld"]={
- galaxy=1,
- prio=1,
- localAddr={27,25,4,35,10,28},
- intergal={1,35,4,31,15,30,32}
- },
- ["Nether"]={
- galaxy=1,
- prio=2,
- localAddr={27,23,4,34,12,28},
- intergal={1,35,6,31,15,28,32}
- },
- ["End"]={
- galaxy=1,
- prio=3,
- localAddr={35,2,10,29,30,21},
- intergal={1,29,27,13,31,4,34}
- },
- ["wasteland"]={
- galaxy=1,
- prio=4,
- localAddr={28,19,37,14,20,30},
- intergal={1,35,15,21,7,33,16}
- },
- ["abydos"]={
- galaxy=1,
- prio=5,
- localAddr={26,6,14,31,11,29},
- intergal={1,17,2,34,26,9,33}
- },
- ["unitas"]={
- galaxy=1,
- prio=6,
- localAddr={2,27,8,34,24,15},
- intergal={1,12,34,24,15,8,17}
- },
- ["chulak"]={
- galaxy=1,
- prio=7,
- localAddr={8,1,22,14,36,19},
- intergal={1,9,14,21,17,3,29}
- },
- ["rima"]={
- galaxy=1,
- prio=8,
- localAddr={33,20,10,22,3,17},
- intergal={1,31,21,8,19,2,9}
- },
- ["cavum tenebrae"]={
- galaxy=1,
- prio=9,
- localAddr={18,7,3,36,25,15},
- intergal={1,34,12,18,7,31,6}
- },
- ["the other"]={
- galaxy=1,
- prio=10,
- localAddr={26,20,4,36,9,27},
- intergal={1,36,28,4,6,26,22}
- },
- ["the beyond"]={
- galaxy=1,
- prio=11,
- localAddr={33,28,1,15,17,24},
- intergal={1,30,28,19,32,12,16}
- },
- ["mining"]={
- galaxy=1,
- prio=12,
- localAddr={11,15,29,37,34,18},
- intergal={1,2,3,4,5,6,7}
- },
- ["proxima centauri b"]={
- galaxy=1,
- prio=13,
- localAddr={4,10,21,20,38,32},
- intergal={1,27,24,29,18,7,22}
- },
- ["black hole orbit"]={
- galaxy=1,
- prio=14,
- localAddr={31,13,12,17,1,22},
- intergal={1,2,3,4,5,6,7}
- },
- ["spatial storage"]={
- galaxy=1,
- prio=15,
- localAddr={24,20,16,10,29,27},
- intergal={1,16,29,8,30,10,14}
- },
- --["the other orbit"]={
- --galaxy=1,
- --prio=1,
- --localAddr={26,20,4,36,9,27},
- --intergal={1,36,28,4,6,26,22}
- --},
- --["luna"]={
- --galaxy=1,
- --prio=1,
- --localAddr={27,25,4,35,10,28},
- --intergal={1,35,4,31,15,30,32}
- --},
- --["luna orbit"]={
- --galaxy=1,
- --prio=1,
- --localAddr={27,25,4,35,10,28},
- --intergal={1,35,4,31,15,30,32}
- --},
- --["mars"]={
- --galaxy=1,
- --prio=1,
- --localAddr={27,25,4,35,10,28},
- --intergal={1,35,4,31,15,30,32}
- --},
- --["mars orbit"]={
- --galaxy=1,
- --prio=1,
- --localAddr={27,25,4,35,10,28},
- --intergal={1,35,4,31,15,30,32}
- --},
- --["mercury"]={
- --galaxy=1,
- --prio=1,
- --localAddr={27,25,4,35,10,28},
- --intergal={1,35,4,31,15,30,32}
- --},
- --["mercury orbit"]={
- --galaxy=1,
- --prio=1,
- --localAddr={27,25,4,35,10,28},
- --intergal={1,35,4,31,15,30,32}
- --},
- --["overworld orbit"]={
- --galaxy=1,
- --prio=1,
- --localAddr={27,25,4,35,10,28},
- --intergal={1,35,4,31,15,30,32}
- --},
- --["venus"]={
- --galaxy=1,
- --prio=1,
- --localAddr={27,25,4,35,10,28},
- --intergal={1,35,4,31,15,30,32}
- --},
- --["venus orbit"]={
- --galaxy=1,
- --prio=1,
- --localAddr={27,25,4,35,10,28},
- --intergal={1,35,4,31,15,30,32}
- --},
- ["lantea"]={
- galaxy=18,
- prio=1,
- localAddr={20,1,15,14,7,19},
- intergal={18,20,1,15,14,7,19}
- },
- ["athos"]={
- galaxy=18,
- prio=2,
- localAddr={21,14,24,1,26,28},
- intergal={18,21,14,24,1,26,28}
- }
- }
- -- ===== Dial Funktion =====
- local function dial(address)
- local final={}
- for k,v in ipairs(address) do
- table.insert(final,v)
- end
- table.insert(final,0)
- local start = interface.getChevronsEngaged()+1
- for i=start,#final do
- interface.engageSymbol(final[i])
- end
- end
- -- ===== Gate schließen =====
- local function closeGate()
- if interface.disconnectStargate then
- interface.disconnectStargate()
- elseif interface.closeStargate then
- interface.closeStargate()
- elseif interface.disconnect then
- interface.disconnect()
- end
- end
- -- ===== UI =====
- local buttons={}
- local targetGalaxy=1
- local autoCloseTimer=nil
- local function drawMenu()
- monitor.clear()
- monitor.setCursorPos(2,1)
- monitor.write("Stargate Dialer")
- monitor.setCursorPos(2,3)
- monitor.write("Current Galaxy: "..currentGalaxy)
- monitor.setCursorPos(2,5)
- monitor.write("Target Galaxy")
- monitor.setCursorPos(2,6)
- monitor.write("[1] Milky Way")
- monitor.setCursorPos(2,7)
- monitor.write("[18] Pegasus")
- buttons={}
- local y=9
- local id=1
- -- sortierte Liste erstellen
- local sorted = {}
- for name,data in pairs(planets) do
- if data.galaxy == targetGalaxy then
- table.insert(sorted, {name=name, data=data})
- end
- end
- -- nach prio sortieren
- table.sort(sorted, function(a,b)
- return (a.data.prio or 999) < (b.data.prio or 999)
- end)
- -- anzeigen
- for i,entry in ipairs(sorted) do
- local name = entry.name
- monitor.setCursorPos(2,y)
- monitor.write(i.." "..name)
- buttons[i] = {name=name, y=y}
- y = y + 1
- end
- monitor.setCursorPos(25,3)
- monitor.write("[CLOSE GATE]")
- end
- drawMenu()
- -- ===== Event Loop =====
- while true do
- local event,p1,p2,p3 = os.pullEvent()
- -- Touchscreen
- if event=="monitor_touch" then
- local side=p1
- local x=p2
- local y=p3
- if y==6 then
- targetGalaxy=1
- drawMenu()
- elseif y==7 then
- targetGalaxy=18
- drawMenu()
- elseif x>24 and y==3 then
- closeGate()
- else
- for id,b in pairs(buttons) do
- if y==b.y then
- local planet=planets[b.name]
- local address
- if currentGalaxy==targetGalaxy then
- address=planet.localAddr
- else
- address=planet.intergal
- end
- dial(address)
- autoCloseTimer=os.startTimer(20)
- end
- end
- end
- -- Timer Auto Close
- elseif event=="timer" then
- if p1==autoCloseTimer then
- closeGate()
- drawMenu()
- autoCloseTimer=nil
- end
- -- Fehlgeschlagenes Dial
- elseif event=="stargate_failed" then
- drawMenu()
- end
- end
Advertisement