Advertisement
qwertz19281

SGctl for CC (main=1.1,sgcc=0.1(beta),lntc=1pre1)

Aug 26th, 2015
715
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 15.42 KB | None | 0 0
  1.         local args = {...}
  2.              local MAIN_VERSION = "1.1"
  3.    local SGC_CONTROLLER_VERSION = "0.1(beta)"
  4. local LANTEA_CONTROLLER_VERSION = "1pre1"
  5.         term.clear()
  6.         term.setCursorPos(1,1)
  7.         term.write("define config")
  8.        
  9. -- CONFIGURATION START
  10. term.write(" (Edit script to change config)") --Comment out this line
  11.  
  12. local SGCRAFT_REFRESHRATE=0.5
  13. local LANTEA_REFRESHRATE=1
  14.  
  15. -- CONFIGURATION END
  16. -- Menu API provided by cyanisaac and ProjectB, licensed under the MIT license.
  17.  
  18.         print()
  19.         local sg=nil
  20.         local running = false
  21.         local rd_timeout=nil
  22.  
  23. print("define bridge")
  24.  
  25. local gmsg=nil
  26.  
  27. function gloop() --SGCraft loop
  28.     local gdat = {os.pullEvent()}
  29.     if sg.energyAvailable ~= nil then
  30.         gpwr=sg.energyAvailable()
  31.     end
  32.     gir=sg.irisState()
  33.     --tclear()
  34.     if gdat[1]=="key" then
  35.         if gdat[2]==keys.d then
  36.             local h, j = term.getCursorPos()
  37.             print("Enter Address: ")
  38.             term.setCursorPos(1,j+2)
  39.             gtxt=slrd()
  40.             ok, gdp=pcall(sg.energyToDial, gtxt)
  41.             if ok then
  42.                 if gpwr==0 then
  43.                     print("WARNING: Energy buffer is empty!")
  44.                     ok, result = pcall(sg.dial, gtxt)
  45.                     if ok then
  46.                         print("dial "..gtxt.." now!")
  47.                     else
  48.                         print("Dialling failed: "..result)
  49.                         sleep(3)
  50.                     end
  51.                 elseif gdp > gpwr then
  52.                     print("Not enough energy: "..gtxt.." needs "..tostring(gdp).."SU but only "..tostring(gpwr).."SU are available!")
  53.                     sleep(5)
  54.                 else    
  55.                     ok, result = pcall(sg.dial, gtxt)
  56.                     if ok then
  57.                         print("dial "..gtxt.." now!")
  58.                     else
  59.                         print("Dialling failed: "..result)
  60.                         sleep(3)
  61.                     end
  62.                 end
  63.             else
  64.                 print("Address error: "..gdp)
  65.                 sleep(4)
  66.             end
  67.         elseif gdat[2]==keys.b then
  68.             gtxt=selAddr()
  69.             if gtxt ~= nil then
  70.             ok, gdp=pcall(sg.energyToDial, gtxt)
  71.             if ok then
  72.                 if gpwr==0 then
  73.                     print("WARNING: Energy buffer is empty!")
  74.                     ok, result = pcall(sg.dial, gtxt)
  75.                     if ok then
  76.                         print("dial "..gtxt.." now!")
  77.                     else
  78.                         print("Dialling failed: "..result)
  79.                         sleep(3)
  80.                     end
  81.                 elseif gdp == nil then
  82.                     print("invalid address?")
  83.                     sleep(1)
  84.                 elseif gdp > gpwr then
  85.                     print("Not enough energy: "..gtxt.." needs "..tostring(gdp).."SU but only "..tostring(gpwr).."SU are available!")
  86.                     sleep(5)
  87.                 else    
  88.                     ok, result = pcall(sg.dial, gtxt)
  89.                     if ok then
  90.                         print("dial "..gtxt.." now!")
  91.                     else
  92.                         print("Dialling failed: "..result)
  93.                         sleep(3)
  94.                     end
  95.                 end
  96.             else
  97.                 print("Address error: "..gdp)
  98.                 sleep(4)
  99.             end
  100.             else
  101.                 print("DialBook FAILED")
  102.                 sleep(0.4)
  103.             end
  104.         elseif gdat[2]==keys.c then
  105.             sg.disconnect()
  106.         elseif gdat[2]==keys.i then
  107.             if gir=="Opening" or gir=="Open" then
  108.                 sg.closeIris()
  109.             elseif gir=="Closed" or gir=="Closing" then
  110.                 sg.openIris()
  111.             end
  112.         elseif gdat[2]==keys.m then
  113.             local h, j = term.getCursorPos()
  114.             print("Enter Message: ")
  115.             term.setCursorPos(1,j+2)
  116.             local ok, reta = pcall(sg.sendMessage, slrd())
  117.             if ok then
  118.                 print("Sent message")
  119.             else
  120.                 print("ERROR: "..reta)
  121.                 sleep(3)
  122.             end
  123.         elseif gdat[2]==keys.x then
  124.             running=false
  125.         end
  126.     elseif gdat[1]=="sgMessageReceived" then
  127.        gmsg=string.gsub(textutils.serialize(gdat),"\n","")
  128.        
  129.     elseif gdat[1]=="timer" and gdat[2]==rd_timeout then
  130.        rd_timeout = os.startTimer(SGCRAFT_REFRESHRATE)
  131.     end
  132.     gst, gchr, gdir = sg.stargateState()
  133.     gla=sg.localAddress()
  134.     grm=sg.remoteAddress()
  135.    
  136.     tclear()
  137.     --print("State: "..gst)
  138.     prclstate(gst)
  139.     --print("Direction: "..gdir)
  140.     prclwormhole(gdir)
  141.     --print("Iris: "..gir)
  142.     prcliris(gir)
  143.     print()
  144.     print("Local Address: "..gla.."\nRemote Address: "..tostring(grm))
  145.     print()
  146.     print("SGCraft Controller "..SGC_CONTROLLER_VERSION.." - SU Available: "..tostring(gpwr))
  147.    
  148.     if gmsg ~= nil then
  149.        print("last message: "..gmsg)
  150.     end
  151.     if gchr ~= nil then
  152.        print("engaged chevron "..tostring(gchr))
  153.     end
  154.    
  155.     print("\nKeys: Dial (D), DialBook (B), Disconnect (C), Toggle Iris(I), Send Message (M), Exit (X)")
  156. end
  157.  
  158. local gcs = {Idle=colors.green, Offline=colors.white, Connected=colors.blue, Opening=colors.red, Closing=colors.yellow, Dialling=colors.orange}
  159. function prclstate(mesg)
  160.     if mesg~=nil and mesg~="" then
  161.         term.write("State: ")
  162.         coltex(gcs[mesg])
  163.         print(mesg)
  164.         coltex(colors.white)
  165.     else
  166.         print("State: Idle")
  167.     end
  168. end
  169.  
  170. local gwh={Outgoing=colors.blue, Incoming=colors.red}
  171. function prclwormhole(mesg)
  172.     if mesg~=nil and mesg~="" then
  173.         term.write("Direction: ")
  174.         coltex(gwh[mesg])
  175.         print(mesg)
  176.         coltex(colors.white)
  177.     else
  178.         term.write("Direction: ")
  179.         coltex(colors.green)
  180.         print("Closed")
  181.         coltex(colors.white)
  182.     end
  183. end
  184.  
  185. local giirriiss={Closed=colors.green, Closing=colors.lightBlue, Open=colors.blue, Opening=colors.lime, Offline=colors.yellow}
  186. function prcliris(mesg)
  187.     if mesg~=nil and mesg~="" then
  188.         term.write("Iris: ")
  189.         coltex(giirriiss[mesg])
  190.         print(mesg)
  191.         coltex(colors.white)
  192.     else
  193.         print("Iris: "..tostring(mesg))
  194.     end
  195. end
  196.  
  197. --local lincoming=nil
  198. --local loutgoing=nil
  199. --local lidle=true
  200. --local lwop=false
  201. --local lwos=false
  202. --local lwoc=false
  203. local lstate="idle"
  204. local lcs=colors.green
  205. local lwh="closed"
  206. local lcw=colors.green
  207. local lencoded=nil
  208. local liv=nil
  209. local loa=nil
  210.  
  211. function lloop() --LanteaCraft loop
  212.     local evt, earg = os.pullEvent()
  213.     if not sg.isDialing() then
  214.         lencoded=nil
  215.     end
  216.     if evt=="key" then
  217.         if earg==keys.d then
  218.             local h, j = term.getCursorPos()
  219.             print("Enter Address: ")
  220.             term.setCursorPos(1,j+2)
  221.             ltxt=slrd()
  222.             ok, result = pcall(sg.dial, ltxt)
  223.             if ok then
  224.                 print("dial "..ltxt.." now!")
  225.             else
  226.                 print("Dialling failed: "..result)
  227.                 sleep(3)
  228.             end
  229.         elseif earg==keys.b then
  230.             ltxt=selAddr()
  231.             if ltxt ~= nil then --Able to do?
  232.             ok, result = pcall(sg.dial, ltxt)
  233.             if ok then
  234.                 print("dial "..ltxt.." now!")
  235.             else
  236.                 print("Dialling failed: "..result)
  237.                 sleep(4)
  238.             end
  239.             else
  240.                 print("DialBook FAILED")
  241.                 sleep(0.4)
  242.             end
  243.         elseif earg==keys.c then
  244.             sg.disconnect()
  245.         elseif earg==keys.x then
  246.             running=false
  247.         end
  248.     elseif evt=="sgIncoming" then
  249.        lcs=colors.red
  250.        lstate="incoming from - "..earg
  251.     elseif evt=="sgOutgoing" then
  252.        lcs=colors.blue
  253.        lstate="outgoing to - "..earg
  254.     elseif evt=="sgChevronEncode" then
  255.        lencoded=earg
  256.     elseif evt=="sgIdle" then
  257.         if earg then
  258.             lcs=colors.green
  259.             lstate="idle"
  260.            
  261.             lcw=colors.green
  262.             lwh="closed"
  263.         end
  264.     elseif evt=="sgWormholeOpening" then
  265.         if earg then
  266.             lcw=colors.red
  267.             lwh="opening"
  268.         end
  269.     elseif evt=="sgWormholeClosing" then
  270.         if earg then
  271.             lcw=colors.yellow
  272.             lwh="closing"
  273.         end
  274.     elseif evt=="sgWormholeStable" then
  275.         if earg then
  276.             lcw=colors.blue
  277.             lwh="open"
  278.         end
  279.     elseif evt=="timer" and earg==rd_timeout then
  280.        rd_timeout = os.startTimer(LANTEA_REFRESHRATE)
  281.     end
  282.     lhf=sg.hasFuel()
  283.    
  284.     tclear()
  285.     coltex(colors.white)
  286.     term.write("State: ")
  287.     coltex(lcs)
  288.     print(lstate)
  289.     coltex(colors.white)
  290.     term.write("Wormhole: ")
  291.     coltex(lcw)
  292.     print(lwh)
  293.    
  294.     coltex(colors.white)
  295.     print()
  296.     print("LanteaCraft controller "..LANTEA_CONTROLLER_VERSION.." - address="..loa)
  297.     term.write("    ModVersion="..liv)
  298.     if lhf then
  299.        coltex(colors.green)
  300.        print(" (hasFuel=true)")
  301.        coltex(colors.white)
  302.     else
  303.        coltex(colors.red)
  304.        print(" (hasFuel=false)")
  305.        coltex(colors.white)
  306.     end
  307.    
  308.     if lencoded ~= nil then
  309.        print("encoded chevron "..tostring(lencoded))
  310.     end
  311.    
  312.     print("\nKeys: Dial (D), DialBook (B), Disconnect (C), Exit (X)")
  313. end
  314.  
  315. local gsc=nil
  316.  
  317. function checkmod(stbl) --write SGCraft boolean to gsc
  318.    gsc=(stbl.stargateState ~= nil)
  319. end
  320.  
  321. print("define utils")
  322.  
  323. local colsup=term.isColor()
  324. function coltex(col)
  325.     if colsup then
  326.         term.setTextColor(col)
  327.     end
  328. end
  329.  
  330. function PREflushX(inp)
  331.    if inp=="X" or inp=="x" then
  332.        error()
  333.    else
  334.        return inp
  335.    end
  336. end
  337.  
  338. function flushX(inp)
  339.    if inp=="X" or inp=="x" then
  340.        running=false
  341.    else
  342.        return inp
  343.    end
  344. end
  345.  
  346. function curpos(x,y)
  347.    term.setCursorPos(x, y+2)
  348. end
  349.  
  350. function slrd()
  351.     to_sluk=os.startTimer(0.1)
  352.     while true do
  353.         evrt = {os.pullEvent()}
  354.         --print(string.sub(evrt[1], 1, 2))
  355.         if evrt[1]=="timer" and evrt[2]==to_sluk then
  356.             return read()
  357.         --elseif evrt[1]=="key" then
  358.         --    evrt=nil --Ignore key
  359.         elseif string.sub(evrt[1], 1, 2)=="sg" then
  360.             --sleep(0.1)
  361.             os.queueEvent(unpack(evrt))
  362.         end
  363.     end
  364. end
  365.  
  366. function tclear()
  367.    term.clear()
  368.    term.setCursorPos(1,1)
  369.    print("SGctl ("..MAIN_VERSION..") -- by qwertz19281")
  370.    print("")
  371. end
  372.  
  373.  
  374.  
  375. -- Address Book
  376. -- Menu API provided by cyanisaac and ProjectB, licensed under the MIT license.
  377. -- Menu API provided by cyanisaac and ProjectB, licensed under the MIT license.
  378. -- Menu API provided by cyanisaac and ProjectB, licensed under the MIT license.
  379. local menuloaded=false
  380.  
  381. function forceLibLoaded()
  382.     if(not menuloaded) then
  383.         if(not fs.exists("sgctl_menu")) then--UK4ATXvH
  384.             shell.run("pastebin","get","UK4ATXvH","sgctl_menu")
  385.             if(not fs.exists("sgctl_menu")) then
  386.                 print("cyanisaac's basic menu API Download failed")
  387.                 print("Do you have the HTTP API enabled?")
  388.                 sleep(4)
  389.                 return
  390.             end
  391.         end
  392.         if((sgctl_menu ~= nil)) then
  393.             if((sgctl_menu.doMenu ~=nil)) then
  394.                 menuloaded=true
  395.                 return
  396.             else
  397.                 print("Something wrong with the menu api?")
  398.                 sleep(4)
  399.                 os.unloadAPI("sgctl_menu")
  400.                 os.loadAPI("sgctl_menu")
  401.             end
  402.         elseif((menuloaded)) then
  403.             print("Something wrong with the menu api?")
  404.             sleep(4)
  405.             os.unloadAPI("sgctl_menu")
  406.             os.loadAPI("sgctl_menu")
  407.         end
  408.        
  409.         os.loadAPI("sgctl_menu")
  410.     end
  411. end
  412.  
  413. local addrs=nil
  414.  
  415. function forceListLoaded()
  416.     if(addrN==nil) then
  417.         --Not loaded
  418.         if(fs.exists("sgctl_addr")) then
  419.             h=fs.open("sgctl_addr","r")
  420.             addrs=textutils.unserialize(h.readAll())
  421.             h.close()
  422.         else
  423.             addrs={{},{}}
  424.         end
  425.     end
  426. end
  427.  
  428. function writeList()
  429.     h=fs.open("sgctl_addr","w")
  430.     h.write(textutils.serialize(addrs))
  431.     h.close()
  432. end
  433.  
  434. function addAddr()
  435.     tclear()
  436.     print("Enter name: ")
  437.     name=read()
  438.     if(name=="Add" or name=="Delete" or name=="Cancel") then
  439.         print("Invalid name")
  440.         sleep(3)
  441.         return
  442.     end
  443.     print("Enter Address: ")
  444.     addr=read()
  445.     addrs[1][(#addrs[1])+1]=name
  446.     addrs[2][(#addrs[2])+1]=addr
  447.     writeList()
  448. end
  449.  
  450. function delete()
  451.     name=sgctl_menu.doMenu("Select address to DELETE",{"Cancel",unpack(addrs[1])})
  452.     if(name==1) then
  453.         return
  454.     end
  455.     tclear()
  456.     print("Do you really want to delete "..addrs[1][name-1].." ? write \"y\" to delete")
  457.     ans=read()
  458.     if(ans=="y") then
  459.         --OK. Now delete entry
  460.         table.remove(addrs[1], name-1)
  461.         table.remove(addrs[2], name-1)
  462.         writeList()
  463.     end
  464. end
  465.  
  466. function selAddr()
  467.     --Begin Selection Loop
  468.     forceLibLoaded()
  469.     forceListLoaded()
  470.     while true do
  471.         selid=sgctl_menu.doMenu("SGCtl Dial Book",{"Cancel","Add","Delete",unpack(addrs[1])})
  472.         if(selid==1) then
  473.             return nil
  474.         elseif(selid==2) then
  475.             addAddr()
  476.         elseif(selid==3) then
  477.             delete()
  478.         else
  479.             return addrs[2][selid-3]
  480.         end
  481.     end
  482. end
  483.  
  484.  
  485.  
  486. -- Main loop
  487.  
  488.  
  489. print("execute")
  490. print("search stargate")
  491. local sc = {peripheral.find("stargate")}
  492. local scn=1
  493. if sc==nil or #sc<1 then
  494.     print("ERROR: No stargate peripheral found!")
  495.     error()
  496. end
  497. if #sc > 1 then
  498.     selsolved=false
  499.     if args~=nil and #args>0 then
  500.         scn=tonumber(args[1])
  501.         if not (scn==nil or scn>#sc or scn<1) then
  502.             selsolved=true
  503.         end
  504.     end
  505.     if not selsolved then
  506.         tclear()
  507.         curpos(1, 1)
  508.         for i=1,#sc do
  509.             term.write("stargate_"..tostring(i)..": ")
  510.             if(sc[i].stargateState ~= nil) then
  511.                 print("SGCraft "..tostring(sc[i].localAddress()))
  512.             else
  513.                 print("LanteaCraft "..tostring(sc[i].getAddress()))
  514.             end
  515.         end
  516.         print("Please select one from "..tostring(#sc).." stargates! (X for exit)")
  517.         term.write("Enter Number: ")
  518.         scn=tonumber(PREflushX(slrd()))
  519.         while scn==nil or scn>#sc or scn<1 do
  520.             tclear()
  521.             print("NUMBER MALFORMED OR OUT OF BOUNDS!")
  522.             curpos(1, 2)
  523.             for i=1,#sc do
  524.                 term.write("stargate_"..tostring(i)..": ")
  525.                 if(sc[i].stargateState ~= nil) then
  526.                     print("SGCraft "..tostring(sc[i].localAddress()))
  527.                 else
  528.                     print("LanteaCraft "..tostring(sc[i].getAddress()))
  529.                 end
  530.             end
  531.             print("Please select one from "..tostring(#sc).." stargates! (type X for exit)")
  532.             term.write("Enter Number: ")
  533.             scn=tonumber(PREflushX(slrd()))
  534.         end
  535.     end
  536. end
  537. sg=sc[scn]
  538. checkmod(sg)
  539. running = true
  540. if not gsc then
  541.    loa=sg.getAddress()
  542.    liv=sg.getInterfaceVersion()
  543. end
  544. rd_timeout = os.startTimer(LANTEA_REFRESHRATE)
  545. while running do
  546.     if gsc then
  547.         gloop()
  548.     else
  549.         lloop()
  550.     end
  551. end
  552. term.clear()
  553. term.setCursorPos(1,1)
  554. print("SGctl exited")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement