Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal

RedStine

Members
  • Content Count

    1
  • Joined

  • Last visited

  1. I've taken the above codes and gotten very close to making the program work. The problem is that the main loop isn't working right. When you press a key, it either does nothing or only goes to the warp data menu. I don't know whats wrong. -- Component lib for access to the gpu local component = require "component" -- Put term lib into local space.. local term = require "term" -- Other libs we need as well local textutils = require("serialization") -- CC to OC. The 'serialize' method is used the same here i think.... local gpu = component.getPrimary("gpu") local fs = require("filesystem") local event = require("event") local keyboard = require("keyboard") -- 'term' Compatibility. These libs are similar in interface but OC lib has shorter method names. term.setCursorPos, term.getCursorPos = term.setCursor, term.getCursor term.setTextColor, term.setBackgroundColor = gpu.setForeground, gpu.setBackground print("loading...") Style = { CDeflt = 0xFFFFFF, BGDeflt = 0x0000FF, CTitle = 0x000000, BGTitle = 0x0092FF, CWarn = 0xFFFFFF, BGWarn = 0xFF0000 } function SetColorDeflt() term.setBackgroundColor(Style.BGDeflt) term.setTextColor(Style.CDeflt) end function SetColorTitle() term.setBackgroundColor(Style.BGTitle) term.setTextColor(Style.CTitle) end function SetColorWarn() term.setBackgroundColor(Style.BGWarn) term.setTextColor(Style.CWarn) end function Clear() term.clear() term.setCursorPos(1,1) end function Show(Text) term.write(Text) local xt,yt = term.getCursorPos() term.setCursorPos(1, yt+1) end function ShowTitle(Text) SetColorTitle() term.setCursorPos(12, 1) Show(Text) SetColorDeflt() end function ShowMenu(Text) term.write(Text) local xt, yt = term.getCursorPos() for i = xt, 51 do term.write(" ") end term.setCursorPos(1, yt+1) end function ShowWarning(Text) SetColorWarn() term.setCursorPos(10, 19) term.write(" "..Text.." ") SetColorDeflt() end function SaveData() local file = fs.open("shipdata.txt", "w") file.writeLine(textutils.serialize(SData)) file.close() end function ReadData() local file = fs.open("shipdata.txt", "r") SData = textutils.unserialize(file.readAll()) file.close() end function Explode(d, p) local t, ll t = {} ll = 0 if(#p == 1) then return {p} end while true do l = string.find(p ,d, ll, true) if l ~= nil then table.insert(t, string.sub(p, ll, l-1)) ll = l+1 else table.insert(t, string.sub(p, ll)) break end end return t end function ShowDirection() if SData.Direction == 1 then Show(" Direction = Up") elseif SData.Direction == 2 then Show(" Direction = Down") elseif SData.Direction == 0 then Show(" Direction = Front") elseif SData.Direction == 180 then Show(" Direction = Back") elseif SData.Direction == 90 then Show(" Direction = Left") elseif SData.Direction == 255 then Show(" Direction = Right") end end function CalcRealDistance() if IsInHyper then RealDistance = SData.Distance * 100 MinimumDistance = 1 JumpCost = (1000 * Weight) + (1000 * SData.Distance) else if SData.Direction == 1 or SData.Direction == 2 then MinimumDistance = GUp + GDown RealDistance = SData.Distance + MinimumDistance elseif SData.Direction == 0 or SData.Direction == 180 then MinimumDistance = GFront + GBack RealDistance = SData.Distance + MinimumDistance elseif SData.Direction == 90 or SData.Direction == 255 then MinimumDistance = GLeft + GRight RealDistance = SData.Distance + MinimumDistance end MinimumDistance = MinimumDistance + 1 JumpCost = (10 * Weight) + (100 * SData.Distance) end end function CalcNewCoords(cx, cy, cz) local res = {x=cx, y=cy, z=cz} if SData.Direction == 1 then res.y = res.y + RealDistance elseif SData.Direction == 2 then res.y = res.y - RealDistance end local dx = component.warpdriveShipController.direction("X") local dz = component.warpdriveShipController.direction("Z") if dx ~= 0 then if SData.Direction == 0 then res.x = res.x + (RealDistance * dx) elseif SData.Direction == 180 then res.x = res.x - (RealDistance * dx) elseif SData.Direction == 90 then res.z = res.z + (RealDistance * dx) elseif SData.Direction == 255 then res.z = res.z - (RealDistance * dx) end else if SData.Direction == 0 then res.z = res.z + (RealDistance * dz) elseif SData.Direction == 180 then res.z = res.z - (RealDistance * dz) elseif SData.Direction == 90 then res.x = res.x + (RealDistance * dz) elseif SData.Direction == 255 then res.x = res.x - (RealDistance * dz) end end return res end function ShowInfo() ShowTitle(Title) Show("Core:") Show(" x, y, z = "..X..", "..Y..", "..Z) local energy = component.warpdriveShipController.energy() Show(" Energy = "..math.floor(energy / 1000000).." % ("..energy.."EU)") Show(" Attached players = "..component.warpdriveShipController.getAttachedPlayers()) Show("Dimensions:") Show(" Front, Right, Up = "..GFront..", "..GRight..", "..GUp) Show(" Back, Left, Down = "..GBack..", "..GLeft..", "..GDown) Show(" Size = "..Weight.." blocks") Show("Warp data:") ShowDirection() local dest = CalcNewCoords(X, Y, Z) Show(" Distance = "..RealDistance.." ("..JumpCost.."EU, "..math.floor(energy/JumpCost).." jumps)") Show(" Dest.coordinates = "..dest.x..", "..dest.y..", "..dest.z) if SData.Summon then Show(" Summon after = Yes") else Show(" Summon after = No") end end function Confirm() ShowWarning("Are you sure? (y/n)") ev, p1, p2, p3, p4, p5 = event.pull(nil, _, ev, p1, p2, p3, p4, p5) local char = keyboard.keys[p2] if char == y then return true else return false end end function Warp() os.sleep(1) component.warpdriveShipController.direction(SData.Direction) if IsInHyper then component.warpdriveShipController.mode(2) else component.warpdriveShipController.mode(1) end component.warpdriveShipController.jump() end function SetDistance() Clear() ShowTitle("<==== Set distance ====>") SData.Distance = 0 CalcRealDistance() MaximumDistance = MinimumDistance + 127 if IsInHyper then term.write("Distance * 100 (min "..MinimumDistance..", max "..MaximumDistance.."): ") else term.write("Distance (min "..MinimumDistance..", max "..MaximumDistance.."): ") end os.sleep(0.3) SData.Distance = tonumber(term.read()) if SData.Distance == nil then SData.Distance = 1 end if SData.Distance < MinimumDistance or SData.Distance > MaximumDistance then SData.Distance = 1 ShowWarning("Wrong distance. Try again.") event.pull("key") CalcRealDistance() else if not IsInHyper then SData.Distance = SData.Distance - RealDistance end warp.set_distance(SData.Distance) CalcRealDistance() end end function SetDirection() local drun = true while(drun) do Clear() ShowTitle("<==== Set direction ====>") ShowDirection() term.setCursorPos(1, 16) SetColorTitle() ShowMenu("Use directional keys") ShowMenu("W/S keys for Up/Down") ShowMenu("Enter - confirm") SetColorDeflt() event.pull("key") if keycode == 200 then SData.Direction = 0 elseif keycode == 17 then SData.Direction = 1 elseif keycode == 203 then SData.Direction = 90 elseif keycode == 205 then SData.Direction = 255 elseif keycode == 208 then SData.Direction = 180 elseif keycode == 31 then SData.Direction = 2 elseif keycode == 28 then drun = false end end end function SetDimensions() Clear() os.sleep(0.3) ShowTitle("<==== Set dimensions ====>") term.write(" Front ("..GFront..") : ") GFront = tonumber(read()) term.write(" Right ("..GRight..") : ") GRight = tonumber(read()) term.write(" Up ("..GUp..") : ") GUp = tonumber(read()) term.write(" Back ("..GBack..") : ") GBack = tonumber(read()) term.write(" Left ("..GLeft..") : ") GLeft = tonumber(read()) term.write(" Down ("..GDown..") : ") GDown = tonumber(read()) term.write("Setting dimensions...") component.warpdriveShipController.dim_positive(GFront, GRight, GUp) component.warpdriveShipController.dim_negative(GBack, GLeft, GDown) end function Summon() Clear() ShowTitle("<==== Summon players ====>") local players = Explode(",", warp.get_attached_players()) for i = 1, #players do Show(i..". "..players[i]) end SetColorTitle() ShowMenu("Enter player number") ShowMenu("or press enter to summon everyone") SetColorDeflt() sleep(0.3) term.write(":") local input = read() if input == "" then component.warpdriveShipController.summon_all() else input = tonumber(input) component.warpdriveShipController.summon(input - 1) end end function JumpToBeacon() Clear() ShowTitle("<==== Jump to beacon ====>") sleep(0.3) term.write("Enter beacon frequency: ") local freq = tostring(read()) if Confirm() then component.warpdriveShipController.mode(4) component.warpdriveShipCOntroller.beaconFrequency(freq) component.warpdriveShipController.jump() end end function JumpToGate() Clear() ShowTitle("<==== Jump to JumpGate ====>") os.sleep(0.3) term.write("Enter jumpgate name: ") local name = tostring(read()) if Confirm() then component.warpdriveShipController.mode(6) component.warpdriveShipController.targetJumpgate(name) component.warpdriveShipController.jump() end end if fs.exists("shipdata.txt") then ReadData() else SData = { Summon = false, Distance = 1, Direction = 0 } end component.gpu.setResolution(50, 20) SetColorDeflt() component.getPrimary("warpdriveShipController") if SData.Summon then component.warpdriveShipController.summon_all() end GFront, GRight, GUp = component.warpdriveShipController.dim_positive() GBack, GLeft, GDown = component.warpdriveShipController.dim_negative() IsInHyper = component.warpdriveShipController.isInHyperspace() X, Y, Z = component.warpdriveShipController.position() Weight = component.warpdriveShipController.getShipSize() CalcRealDistance() component.warpdriveShipController.mode(1) mainloop = true while(mainloop) do Clear() ShowInfo() term.setCursorPos(1, 15) SetColorTitle() ShowMenu("D - Dimensions, M - Toggle summon") ShowMenu("S - Set Warp Data, J - Jump, G - Jump to JumpGate") ShowMenu("B - Jump to Beacon, H -Jump to Hyperspace") ShowMenu("C - Summon, X - Shutdown WarpCore and Exit") SetColorDeflt() ev, p1, p2, p3, p4, p5 = event.pull(nil, _, ev, p1, p2, p3, p4, p5) if ev == "key_down" then local char = keyboard.keys[p1] if char == s then SetDirection() SetDistance() SaveData() elseif char == m then if SData.Summon then SData.Summon = false else SData.Summon = true end SaveData() elseif char == d then SetDimensions() SaveData() elseif char == j then if Confirm() then Warp() end elseif char == c then Summon() elseif char == b then JumpToBeacon() elseif char == g then JumpToGate() elseif char == h then if Confirm() then component.warpdriveShipController.mode(5) component.warpdriveShipComponent.jump() end elseif char == x then mainloop = false end end end if SData.Summon then SData.Summon = false SaveData() end Clear() print("Shutting Down") component.warpdriveShipController.mode(0) os.sleep(0.5)
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.