- Sky
- Blueberry
- Slate
- Blackcurrant
- Watermelon
- Strawberry
- Orange
- Banana
- Apple
- Emerald
- Chocolate
- Charcoal
leish0chiW1
-
Content Count
6 -
Joined
-
Last visited
Posts posted by leish0chiW1
-
-
I do not have an error message this time
but a display bug after a few minutes
attached a screenmoreover, when I use the color chart, all the colors are correctly displayed
when I do not use the array and I add true "my.setBackground (colors.white, true)" all colors are replaced with gray, white and black -
Once again I thank you
for the colors API, set if I do not use "true [example mon.setBackground (colors.black)]" nothing is displayed, black screen.
however, if I use "true [example mon.setBackground (colors.black, true)]" all colors are either gray, black or white (for the test I use full tier 3)
otherwise as I said above, before going to sleep I made many tests and I save over the main code and that's part of the test.
for the party "touch" actually it is for the touch
it's a code that I found on the forum and that I applied to the code
the program launches but after the bug display -
8 hours ago, CptMercury said:
Can you insert your entire code? Then I could help you find the issue.
If you kept the order of your function definitions, you need to change the order a bit, I will talk you through once posted the new code.
here is the new code
on the other hand I spent the evening to test and I ended up doing a ball ... under the effect of fatigue I save over the main code and remove the test code with all changes who goes with it ... so I do not really know what I did on this one compared to the other.I also tried to change the order this morning after reading your answer, but I'm coming from a mistake
local API = require("buttonAPI") -- On appelle l'API "buttonAPI" local component = require("component") -- On appelle l'API "component" local term = require("term") -- On appelle l'API "term" local event = require("event") -- On appelle l'API "event" local colors = require("colors") -- On appelle l'API "colors" local mon = component.gpu local trm = term local egy = component.energy_device local brR = component.br_reactor local brT = component.br_turbine local steamReactor = brR.isActivelyCooled() local menuType = "Reactor" local numCapacitors = 36 local turnOnAt = 50 local turnOffAt = 90 local targetSpeed = 1840 local energy = 0 local energyStored = 0 local energyMax = 0 local energyStoredPercent = 0 local timerCode local mode = "Automatic" local RFProduction = 0 local fuelUse = 0 local coreTemp = 0 local reactorOnline = false local rodLevel = 0 local turbineOnline = false local turbineRotorSpeed = 0 local turbineRFGen = 0 local turbineFluidRate = 0 local turbineInductor = false local OptFuelRodLevel = 0 -- COLORS local colors = {} colors.white = 0xFFFFFF colors.orange = 0xFFA500 colors.magenta = 0xFF00FF colors.lightblue = 0x00AEEF colors.yellow = 0xFFFF00 colors.lime = 0x00FF00 colors.pink = 0xFFC0CB colors.gray = 0x555555 colors.lightGray = 0xD3D3D3 colors.grey = 0x555555 colors.silver = 0xAAAAAA colors.cyan = 0x00FFFF colors.purple = 0x800080 colors.blue = 0x0000FF colors.brown = 0x603913 colors.green = 0x008000 colors.red = 0xFF0000 colors.black = 0x000000 local function checkMode() API.toggleButton(mode) end local function menuMode() if steamReactor then if menuType == "Reactor" then API.setButton("Reactor", true) API.setButton("Turbine", false) else API.setButton("Reactor", false) API.setButton("Turbine", true) end end end local function autoMenu() API.clearTable() API.setTable("Automatic", autoMode, "", 3, 13, 6, 6) API.setTable("Manual", manualMode, "", 15, 25, 6, 6) if steamReactor then API.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19) API.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19) end API.screen() checkMode() menuMode() end local function manualMenu() API.clearTable() API.setTable("Automatic", autoMode, "", 3, 13, 6, 6) API.setTable("Manual", manualMode, "", 15, 25, 6, 6) API.setTable("Online", online, "", 3, 13, 8, 8) API.setTable("Offline", offline, "", 15, 25, 8, 8) API.setTable("0", setRods, 0, 11,14, 10, 10) API.setTable("10", setRods, 10, 5,8, 12, 12) API.setTable("20", setRods, 20, 11,14, 12, 12) API.setTable("30", setRods, 30, 17,20, 12, 12) API.setTable("40", setRods, 40, 5,8, 14, 14) API.setTable("50", setRods, 50, 11,14, 14, 14) API.setTable("60", setRods, 60, 17,20, 14, 14) API.setTable("70", setRods, 70, 5,8, 16, 16) API.setTable("80", setRods, 80, 11,14, 16, 16) API.setTable("90", setRods, 90, 17,20, 16, 16) API.setTable("+", rodPlus, "", 23, 25, 12, 12) API.setTable("-", rodMinus, "", 23, 25, 16, 16) if steamReactor then API.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19) API.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19) end API.screen() checkMode() reactorOnOff() menuMode() end local function turbineAutoMenu() API.clearTable() API.setTable("Automatic", autoMode, "", 3, 13, 6, 6) API.setTable("Manual", manualMode, "", 15, 25, 6, 6) API.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19) API.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19) API.screen() checkMode() menuMode() end local function turbineManualMenu() API.clearTable() API.setTable("Automatic", autoMode, "", 3, 13, 6, 6) API.setTable("Manual", manualMode, "", 15, 25, 6, 6) API.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19) API.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19) API.setTable("Online", setTurbineOnline, "", 3, 13, 8, 8) API.setTable("Offline", setTurbineOffline, "", 15, 25, 8, 8) API.setTable("Coils On", coilsOn, "", 3, 13, 10, 10) API.setTable("Coils Off", coilsOff, "", 15, 25, 10, 10) API.screen() checkMode() turbineOnOff() coilsOnOff() menuMode() end local function reactorMenu() local menuType = "Reactor" displayScreen() end local function turbineMenu() local menuType = "Turbine" displayScreen() end local function online() brR.setActive(true) --API.flash("Online") end local function offline() brR.setActive(false) --API.flash("Offline") end local function setTurbineOnline() brT.setActive(true) --API.flash("Online") end local function setTurbineOffline() brT.setActive(false) --API.flash("Offline") end local function reactorOnOff() API.setButton("Online", brR.getActive()) API.setButton("Offline", not brR.getActive()) end local function turbineOnOff() API.setButton("Online", brT.getActive()) API.setButton("Offline", not brT.getActive()) end local function coilsOnOff() API.setButton("Coils On", brT.getInductorEngaged()) API.setButton("Coils Off", not brT.getInductorEngaged()) end local function coilsOn() brT.setInductorEngaged(true) end local function coilsOff() brT.setInductorEngaged(false) end local function setRods(setLevel) print("Setting Rod Level: "..setLevel) API.flash(tostring(setLevel)) brR.setAllControlRodLevels(setLevel) fuelRodLevel() end local function rodPlus() API.flash("+") brR.setAllControlRodLevels(rodLevel+1) fuelRodLevel() end local function rodMinus() API.flash("-") brR.setAllControlRodLevels(rodLevel-1) fuelRodLevel() end local function manualMode() local mode = "Manual" manualMenu() end local function autoMode() local mode = "Automatic" displayScreen() end local function comma_value(amount) local formatted = amount local swap = false if formatted < 0 then formatted = formatted*-1 swap = true end while true do formatted, k = string.gsub(tostring(formatted), "^(%d+)(%d%d%d)", '%1,%2') if k == 0 then break end end if swap then formatted = "-"..formatted end return formatted end local function displayEn() trm.clear() trm.setCursor(1,1) --print("Energy Use: "..energy) trm.write("Energy Use: ") if energy < 0 then mon.setForeground(colors.red) else mon.setForeground(colors.green) end trm.write(comma_value(math.floor(energy)).. "RF/t") mon.setForeground(colors.white) trm.setCursor(1,2) trm.write("Energy Stored: "..energyStoredPercent.."%") if menuType == "Reactor" then trm.setCursor(1,3) trm.write("Reactor is: ") if reactorOnline then mon.setForeground(colors.green) trm.write("Online") else mon.setForeground(colors.red) trm.write("Offline") end mon.setForeground(colors.white) trm.setCursor(22,1) if steamReactor then trm.write("Steam: ") mon.setForeground(colors.green) trm.write(comma_value(math.floor(RFProduction)).."MB/t") else trm.write("RF Gen: ") mon.setForeground(colors.green) trm.write(comma_value(math.floor(RFProduction)).."RF/t") end mon.setForeground(colors.white) trm.setCursor(22,2) trm.write("Core Temp: "..math.floor(coreTemp).."c") trm.setCursor(22,3) trm.write("Fuel Use: "..fuelUse.."MB/t") else trm.setCursor(1,3) trm.write("Turbine is: ") if turbineOnline then mon.setForeground(colors.green) trm.write("Online") else mon.setForeground(colors.red) trm.write("Offline") end trm.setCursor(1,4) mon.setForeground(colors.white) trm.write("Reactor is: ") if reactorOnline then mon.setForeground(colors.green) trm.write("Online") else mon.setForeground(colors.red) trm.write("Offline") end mon.setForeground(colors.white) trm.setCursor(22,1) trm.write("RFGen: ") mon.setForeground(colors.green) trm.write(comma_value(math.floor(turbineRFGen)).."RF/t") mon.setForeground(colors.white) trm.setCursor(22,2) trm.write("Rotor: "..comma_value(math.floor(turbineRotorSpeed)).." RPM") trm.setCursor(22,3) trm.write("Steam: "..comma_value(turbineFluidRate).."MB/t") end end local function checkEn() local tempEnergy = 0 energyStored = egy.getEnergyStored() energyMax = egy.getMaxEnergyStored() energyStoredPercent = math.floor((energyStored/energyMax)*100) RFProduction = brR.getEnergyProducedLastTick() fuelUse = brR.getFuelConsumedLastTick() fuelUse = math.floor(fuelUse*100) fuelUse = fuelUse/100 coreTemp = brR.getFuelTemperature() reactorOnline = brR.getActive() tempEnergy = egy.getEnergyStored() os.sleep(0.1) energy = (egy.getEnergyStored()-tempEnergy)/2 energy = energy*numCapacitors if steamReactor then turbineOnline = brT.getActive() turbineRotorSpeed = brT.getRotorSpeed() turbineRFGen = brT.getEnergyProducedLastTick() turbineFluidRate = brT.getFluidFlowRate() end end local function fuelRodLevel() rodLevel = brR.getControlRodLevel(0) --print(rodLevel) trm.setCursor(30,5) trm.write(tostring(rodLevel).."%") mon.setBackground(colors.white) trm.setCursor(28,6) trm.write(" ") for i = 1,10 do trm.setCursor(28,i+6) mon.setBackground(colors.white) trm.write(" ") mon.setBackground(colors.yellow) trm.write(" ") if rodLevel/10 >= i then mon.setBackground(colors.red) else mon.setBackground(colors.yellow) end trm.write(" ") mon.setBackground(colors.yellow) trm.write(" ") mon.setBackground(colors.white) trm.write(" ") end trm.setCursor(28,17) trm.write(" ") mon.setBackground(colors.black) end local function turbineInductorDisplay() turbineInductor = brT.getInductorEngaged() trm.setCursor(30,5) if turbineInductor then trm.write("On") else trm.write("Off") end mon.setBackground(colors.gray) trm.setCursor(28,6) trm.write(" ") for i = 1,7 do trm.setCursor(28,i+6) mon.setBackground(colors.gray) trm.write(" ") mon.setBackground(colors.lightGray) trm.write(" ") if i % 2 == 0 then mon.setBackground(colors.gray) end trm.write(" ") mon.setBackground(colors.gray) trm.write(" ") if i % 2 ~= 0 then mon.setBackground(colors.lightGray) end trm.write(" ") mon.setBackground(colors.lightGray) trm.write(" ") mon.setBackground(colors.gray) trm.write(" ") end for i = 8,10 do trm.setCursor(28,i+6) mon.setBackground(colors.gray) trm.write(" ") mon.setBackground(colors.lightGray) trm.write(" ") if turbineInductor then mon.setBackground(colors.red) else mon.setBackground(colors.blue) end trm.write(" ") mon.setBackground(colors.gray) trm.write(" ") if turbineInductor then mon.setBackground(colors.red) else mon.setBackground(colors.blue) end trm.write(" ") mon.setBackground(colors.lightGray) trm.write(" ") mon.setBackground(colors.gray) trm.write(" ") end trm.setCursor(28,17) trm.write(" ") mon.setBackground(colors.black) end local function getClick() local event, side, x, y = event.pull(1,touch) if x == nil or y == nil then local h, w = mon.getResolution() mon.set(h, w, ".") mon.set(h, w, " ") else API.checkxy(x,y) end end local function findOptFuelRods() trm.clear() brR.setActive(false) checkEn() displayEn() fuelRodLevel() while brR.getFuelTemperature() > 99 do for i= 1,3 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Finding Optimal Rod Level") trm.setCursor(3,7) trm.write("Core Temp: "..brR.getFuelTemperature()) trm.setCursor(3,8) trm.write("Waiting for 99c") os.sleep(1) end end while brR.getHotFluidAmount() > 10000 do for i = 1,3 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Finding Optimal Rod Level, please wait ....") trm.setCursor(3,7) trm.write("Fluid Amount: "..comma_value(brR.getHotFluidAmount()).."mb") trm.setCursor(3,8) trm.write("Waiting for 10,000mb") os.sleep(1) end end brR.setAllControlRodLevels(99) brR.setActive(true) while brR.getFuelTemperature() < 100 do for i = 1,5 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Set all rod levels to 99") trm.setCursor(3,7) trm.write("Waiting 5 seconds...") os.sleep(1) end end for i = 1,5 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Set all rod levels to 99") trm.setCursor(3,7) trm.write("Waiting 5 seconds...") os.sleep(1) end local tempMB = brR.getEnergyProducedLastTick() print(tempMB.."MB/t of steam") local tempRodLevels = math.floor(2000/tempMB) print("2000/"..tempMB.." = "..tempRodLevels) tempRodLevels = 100-tempRodLevels+5 print("Adding 5 to Rod Levels: "..math.floor(tempRodLevels)) brR.setAllControlRodLevels(math.floor(tempRodLevels)) print("Waiting 10 seconds to confirm...") for i = 1,10 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Estimated Level: "..tempRodLevels) trm.setCursor(3,7) trm.write("Waiting 10 seconds...") os.sleep(1) end tempMB = brR.getEnergyProducedLastTick() while tempMB > 2000 do tempRodLevels = tempRodLevels+1 brR.setAllControlRodLevels(math.floor(tempRodLevels)) print("Setting Rod Levels to: "..tempRodLevels) for i = 1,5 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Getting below 2000mb/t") trm.setCursor(3,7) trm.write("Currently at: "..tempMB) os.sleep(1) end tempMB = brR.getEnergyProducedLastTick() end while tempMB < 2000 do tempRodLevels = tempRodLevels -1 brR.setAllControlRodLevels(math.floor(tempRodLevels)) print("Setting Rod Levels to: "..tempRodLevels) for i = 1,5 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Getting Above 2000mb/t") trm.setCursor(3,7) trm.write("Currently at: "..tempMB) os.sleep(1) end tempMB = brR.getEnergyProducedLastTick() end OptFuelRodLevel = tempRodLevels end local function autoReactor() if not steamReactor then brR.setAllControlRodLevels(0) if energyStoredPercent < turnOnAt then if not reactorOnline then online() end end if energyStoredPercent > turnOffAt then if reactorOnline then offline() end end else brR.setAllControlRodLevels(OptFuelRodLevel) if energyStoredPercent < turnOnAt then --online() setTurbineOnline() coilsOn() end if energyStoredPercent > turnOffAt then --if turbineRotorSpeed > 1800 then -- offline() --else -- online() --end setTurbineOnline() coilsOff() end if turbineRotorSpeed > targetSpeed then offline() else online() end end end local function displayScreen() -- repeat checkEn() displayEn() if menuType == "Reactor" then fuelRodLevel() if mode == "Automatic" then autoMenu() autoReactor() else manualMenu() end else turbineInductorDisplay() if mode == "Automatic" then turbineAutoMenu() autoReactor() else turbineManualMenu() end end getClick() end if steamReactor then findOptFuelRods() end while true do displayScreen() os.sleep(1) end
-
20 hours ago, CptMercury said:
Hey,
I didn't check the entire code, it's a lot of stuff to go through, but I found the reason for your error.
You are calling string.gsub on a number, but it's a string lib, so you have to convert the number to a string first, by calling tostring(number). Your while loop in lines 219-224 would then look like this:
while true do formatted, k = string.gsub(tostring(formatted), "^(%d+)(%d%d%d)", '%1,%2') if k == 0 then break end end
May I also suggest to use local whenever possible? Like all variables, functions etc. It helps to reduce errors in form of variable overrides etc, plus access to locals is faster.
Try that and see, if it works, if not, just post the error message and I'll have a look again.
Hey,
Thank you for your help CptMercury
I did as said use "local", however I had to miss somewhere because I have as error "line 72: attempt to call global 'checkMod'local function autoMenu() API.clearTable() API.setTable("Automatic", autoMode, "", 3, 13, 6, 6) API.setTable("Manual", manualMode, "", 15, 25, 6, 6) if steamReactor then API.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19) API.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19) end API.screen() checkMode() <-- on this line menuMode() end
-
Greeting,
First of all please forgive my English because I use a translator
And thank you for any help and code optimizationI'm currently playing on the Modpack Project Ozone 3 and unlike 2, the modpack uses Opencomputers instead of Computercraft.
The problem that I currently encounter after countless error display and almost three sleepless nights (I specify that I am not a programmer, any time I tinker a little).
On Project Ozone 2 I used a Direwolf20 program code to manage my Big Reactor with computercraft, naturally I wanted to do the same by posting the code as it was on Opencomputer.
Following the first error encountered, I did some research and I came across some topics of this forum:
- a topic explaining basically the difference between the two mods (in particular on "os.load ()" and "require ()") - link : opencomputers-for-computercraft-users
- a topic about Direwolf20 Computercraft API button code conversion to Opencomputers
After an incalculable error display number (again) I came to understand that instead of "API.button.XXXXXX" it was enough just to replace "button.XXXX" with "API.XXXX"Exemple code topic :
API.setTable("Tor", tor, 10,20,3,5)
Exemple my code :
API.button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
also little question on the topic of each function code begins with "API.nameFunction" while on my own I just replaced the variable "button.XXXX" with "API.XXXX" and it finally seems to work when removes some line of the code.
Exemple code topic :
function API.fillTable() API.setTable("Tor", tor, 10,20,3,5) API.setTable("Bahn", bahn, 22,32,3,5) API.setTable("Raus", test3, 10,20,8,10) API.setTable("Rein", test4, 22,32,8,10) API.screen() end
Exemple original code program :
function autoMenu() API.clearTable() API.setTable("Automatic", autoMode, "", 3, 13, 6, 6) API.setTable("Manual", manualMode, "", 15, 25, 6, 6) if steamReactor then API.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19) API.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19) end API.screen() checkMode() menuMode() end
Currently I have the following error that appears
/home/br_Reactor.lua:220: bad argument # 1 (string exected, got number):
[C]: in function 'error'
machine: 69: in function 'checkArg'
/home/br_Reactor.lua:220: in function 'comma_value'
/home/br_Reactor.lua:241: in function 'displayEn'
/home/br_Reactor.lua:429: in function 'findOutFuelRods'
/home/br_reactor.lua:617: in main chunk
(... tail calls ...)
[C]: in function 'xpcall'
machine: 791: in function'xpcall '
/lib/process.lua:63: in function </lib/process.lua:59>
And when I delete lines "trm.write(comma_value(XXXXXXXXXX).. "XXXXXXX")" the code seems to work but with some bug like:
- The display is done in two colors (gray and white)
- The program displays a turbine error in the absence of it, on computeurcraft I just use the reactor or combi reactor / turbine it works
- The buttons are not touch- the control of the rods does not seem to control the rods
can you help me please and if so how to otpimize the codebuttonAPI.lua
local API = {} local button = {} local component = require("component") -- On appelle l'API "component" local term = require("term") -- On appelle l'API "term" local colors = require("colors") -- On appelle l'API "colors" local mon = component.gpu local trm = term function API.clear() mon.setBackground(colors.black, true) mon.fill(1, 1, w, h, " ") end function API.clearTable() button = {} term.clear() end function API.setButton(name, buttonOn) print(name) print(button[name]["active"]) button[name]["active"] = buttonOn API.screen() end function API.setTable(name, func, param, xmin, xmax, ymin, ymax) button[name] = {} button[name]["func"] = func button[name]["active"] = false button[name]["param"] = param button[name]["xmin"] = xmin button[name]["ymin"] = ymin button[name]["xmax"] = xmax button[name]["ymax"] = ymax end -- function API.fill(text, color, bData) -- mon.setBackground(color, true) -- local yspot = math.floor((bData["ymin"] + bData["ymax"]) /2) -- local xspot = math.floor((bData["xmax"] - bData["xmin"] - string.len(text)) /2) +1 -- for j = bData["ymin"], bData["ymax"] do -- trm.setCursor(bData["xmin"], j) -- if j == yspot then -- for k = 0, bData["xmax"] - bData["xmin"] - string.len(text) +1 do -- if k == xspot then -- trm.write(text) -- else -- trm.write(" ") -- end -- end -- else -- for i = bData["xmin"], bData["xmax"] do -- trm.write(" ") -- end -- end -- end -- mon.setBackground(colors.black) -- end function API.fill(text, color, bData) -- ## this part works just fine local yspot = math.floor((bData["ymin"] + bData["ymax"]) /2) local xspot = math.floor((bData["xmax"] + bData["xmin"] - string.len(text)) /2)+1 -- ## save any previous color used before, not just black local oldColor = mon.setBackground(color, true) -- ## gpu.fill(x,y,width,height,char) char here = " " for a blank space of color mon.fill(bData["xmin"], bData["ymin"], (bData["xmax"]-bData["xmin"]+1), (bData["ymax"]-bData["ymin"]+1), " ") -- ## write your text here from the gpu.set function instead of io. mon.set(xspot, yspot, text) -- ## reset the old color mon.setBackground(oldColor) end function API.screen() local currColor for name,data in pairs(button) do local on = data["active"] if on == true then currColor = colors.lime else currColor = colors.red end API.fill(name, currColor, data) end end function API.toggleButton(name) button[name]["active"] = not button[name]["active"] API.screen() end function API.flash(name) API.toggleButton(name) API.screen() os.sleep(0.15) API.toggleButton(name) API.screen() end function API.checkxy(x, y) for name, data in pairs(button) do if y>=data["ymin"] and y <= data["ymax"] then if x>=data["xmin"] and x<= data["xmax"] then if data["param"] == "" then data["func"]() else data["func"](data["param"]) end return true --data["active"] = not data["active"] --print(name) end end end return false end function API.heading(text) w, h = mon.getResolution() trm.setCursor((w-string.len(text))/2+1, 1) trm.write(text) end function API.label(w, h, text) trm.setCursor(w, h) trm.write(text) end return API
br_Reactor.lua
local API = require("buttonAPI") local button = {} local component = require("component") local term = require("term") local event = require("event") local colors = require("colors") local sides = require("sides") mon = component.gpu trm = term egy = component.energy_device brR = component.br_reactor brT = component.br_turbine local steamReactor = brR.isActivelyCooled() local menuType = "Reactor" local numCapacitors = 36 local turnOnAt = 50 local turnOffAt = 90 local targetSpeed = 1840 local energy = 0 local energyStored = 0 local energyMax = 0 local energyStoredPercent = 0 local timerCode local mode = "Automatic" local RFProduction = 0 local fuelUse = 0 local coreTemp = 0 local reactorOnline = false local rodLevel = 0 local turbineOnline = false local turbineRotorSpeed = 0 local turbineRFGen = 0 local turbineFluidRate = 0 local turbineInductor = false local OptFuelRodLevel = 0 function autoMenu() API.clearTable() API.setTable("Automatic", autoMode, "", 3, 13, 6, 6) API.setTable("Manual", manualMode, "", 15, 25, 6, 6) if steamReactor then API.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19) API.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19) end API.screen() checkMode() menuMode() end function manualMenu() API.clearTable() API.setTable("Automatic", autoMode, "", 3, 13, 6, 6) API.setTable("Manual", manualMode, "", 15, 25, 6, 6) API.setTable("Online", online, "", 3, 13, 8, 8) API.setTable("Offline", offline, "", 15, 25, 8, 8) API.setTable("0", setRods, 0, 11,14, 10, 10) API.setTable("10", setRods, 10, 5,8, 12, 12) API.setTable("20", setRods, 20, 11,14, 12, 12) API.setTable("30", setRods, 30, 17,20, 12, 12) API.setTable("40", setRods, 40, 5,8, 14, 14) API.setTable("50", setRods, 50, 11,14, 14, 14) API.setTable("60", setRods, 60, 17,20, 14, 14) API.setTable("70", setRods, 70, 5,8, 16, 16) API.setTable("80", setRods, 80, 11,14, 16, 16) API.setTable("90", setRods, 90, 17,20, 16, 16) API.setTable("+", rodPlus, "", 23, 25, 12, 12) API.setTable("-", rodMinus, "", 23, 25, 16, 16) if steamReactor then API.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19) API.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19) end API.screen() checkMode() reactorOnOff() menuMode() end function turbineAutoMenu() API.clearTable() API.setTable("Automatic", autoMode, "", 3, 13, 6, 6) API.setTable("Manual", manualMode, "", 15, 25, 6, 6) API.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19) API.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19) API.screen() checkMode() menuMode() end function turbineManualMenu() API.clearTable() API.setTable("Automatic", autoMode, "", 3, 13, 6, 6) API.setTable("Manual", manualMode, "", 15, 25, 6, 6) API.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19) API.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19) API.setTable("Online", setTurbineOnline, "", 3, 13, 8, 8) API.setTable("Offline", setTurbineOffline, "", 15, 25, 8, 8) API.setTable("Coils On", coilsOn, "", 3, 13, 10, 10) API.setTable("Coils Off", coilsOff, "", 15, 25, 10, 10) API.screen() checkMode() turbineOnOff() coilsOnOff() menuMode() end function reactorMenu() menuType = "Reactor" displayScreen() end function turbineMenu() menuType = "Turbine" displayScreen() end function online() brR.setActive(true) --API.flash("Online") end function offline() brR.setActive(false) --API.flash("Offline") end function setTurbineOnline() brT.setActive(true) --API.flash("Online") end function setTurbineOffline() brT.setActive(false) --API.flash("Offline") end function reactorOnOff() API.setButton("Online", brR.getActive()) API.setButton("Offline", not brR.getActive()) end function turbineOnOff() API.setButton("Online", brT.getActive()) API.setButton("Offline", not brT.getActive()) end function coilsOnOff() API.setButton("Coils On", brT.getInductorEngaged()) API.setButton("Coils Off", not brT.getInductorEngaged()) end function coilsOn() brT.setInductorEngaged(true) end function coilsOff() brT.setInductorEngaged(false) end function menuMode() if steamReactor then if menuType == "Reactor" then API.setButton("Reactor", true) API.setButton("Turbine", false) else API.setButton("Reactor", false) API.setButton("Turbine", true) end end end function setRods(setLevel) print("Setting Rod Level: "..setLevel) API.flash(tostring(setLevel)) brR.setAllControlRodLevels(setLevel) fuelRodLevel() end function rodPlus() API.flash("+") brR.setAllControlRodLevels(rodLevel+1) fuelRodLevel() end function rodMinus() API.flash("-") brR.setAllControlRodLevels(rodLevel-1) fuelRodLevel() end function checkMode() API.toggleButton(mode) end function manualMode() mode = "Manual" manualMenu() end function autoMode() mode = "Automatic" displayScreen() end function comma_value(amount) local formatted = amount local swap = false if formatted < 0 then formatted = formatted*-1 swap = true end while true do formatted, k = string.gsub(formatted, "^(%d+)(%d%d%d)", '%1,%2') if k == 0 then break end end if swap then formatted = "-"..formatted end return formatted end function displayEn() trm.clear() trm.setCursor(1,1) --print("Energy Use: "..energy) trm.write("Energy Use: ") if energy < 0 then mon.setForeground(colors.red) else mon.setForeground(colors.green) end trm.write(comma_value(math.floor(energy)).. "RF/t") mon.setForeground(colors.white) trm.setCursor(1,2) trm.write("Energy Stored: "..energyStoredPercent.."%") if menuType == "Reactor" then trm.setCursor(1,3) trm.write("Reactor is: ") if reactorOnline then mon.setForeground(colors.green) trm.write("Online") else mon.setForeground(colors.red) trm.write("Offline") end mon.setForeground(colors.white) trm.setCursor(22,1) if steamReactor then trm.write("Steam: ") mon.setForeground(colors.green) trm.write(comma_value(math.floor(RFProduction)).."MB/t") else trm.write("RF Gen: ") mon.setForeground(colors.green) trm.write(comma_value(math.floor(RFProduction)).."RF/t") end mon.setForeground(colors.white) trm.setCursor(22,2) trm.write("Core Temp: "..math.floor(coreTemp).."c") trm.setCursor(22,3) trm.write("Fuel Use: "..fuelUse.."MB/t") else trm.setCursor(1,3) trm.write("Turbine is: ") if turbineOnline then mon.setForeground(colors.green) trm.write("Online") else mon.setForeground(colors.red) trm.write("Offline") end trm.setCursor(1,4) mon.setForeground(colors.white) trm.write("Reactor is: ") if reactorOnline then mon.setForeground(colors.green) trm.write("Online") else mon.setForeground(colors.red) trm.write("Offline") end mon.setForeground(colors.white) trm.setCursor(22,1) trm.write("RFGen: ") mon.setForeground(colors.green) trm.write(comma_value(math.floor(turbineRFGen)).."RF/t") mon.setForeground(colors.white) trm.setCursor(22,2) trm.write("Rotor: "..comma_value(math.floor(turbineRotorSpeed)).." RPM") trm.setCursor(22,3) trm.write("Steam: "..comma_value(turbineFluidRate).."MB/t") end end function checkEn() local tempEnergy = 0 energyStored = egy.getEnergyStored() energyMax = egy.getMaxEnergyStored() energyStoredPercent = math.floor((energyStored/energyMax)*100) RFProduction = brR.getEnergyProducedLastTick() fuelUse = brR.getFuelConsumedLastTick() fuelUse = math.floor(fuelUse*100) fuelUse = fuelUse/100 coreTemp = brR.getFuelTemperature() reactorOnline = brR.getActive() tempEnergy = egy.getEnergyStored() os.sleep(0.1) energy = (egy.getEnergyStored()-tempEnergy)/2 energy = energy*numCapacitors if steamReactor then turbineOnline = brT.getActive() turbineRotorSpeed = brT.getRotorSpeed() turbineRFGen = brT.getEnergyProducedLastTick() turbineFluidRate = brT.getFluidFlowRate() end end function fuelRodLevel() rodLevel = brR.getControlRodLevel(0) --print(rodLevel) trm.setCursor(30,5) trm.write(tostring(rodLevel).."%") mon.setBackground(colors.white) trm.setCursor(28,6) trm.write(" ") for i = 1,10 do trm.setCursor(28,i+6) mon.setBackground(colors.white) trm.write(" ") mon.setBackground(colors.yellow) trm.write(" ") if rodLevel/10 >= i then mon.setBackground(colors.red) else mon.setBackground(colors.yellow) end trm.write(" ") mon.setBackground(colors.yellow) trm.write(" ") mon.setBackground(colors.white) trm.write(" ") end trm.setCursor(28,17) trm.write(" ") mon.setBackground(colors.black) end function turbineInductorDisplay() turbineInductor = brT.getInductorEngaged() trm.setCursor(30,5) if turbineInductor then trm.write("On") else trm.write("Off") end mon.setBackground(colors.gray) trm.setCursor(28,6) trm.write(" ") for i = 1,7 do trm.setCursor(28,i+6) mon.setBackground(colors.gray) trm.write(" ") mon.setBackground(colors.lightGray) trm.write(" ") if i % 2 == 0 then mon.setBackground(colors.gray) end trm.write(" ") mon.setBackground(colors.gray) trm.write(" ") if i % 2 ~= 0 then mon.setBackground(colors.lightGray) end trm.write(" ") mon.setBackground(colors.lightGray) trm.write(" ") mon.setBackground(colors.gray) trm.write(" ") end for i = 8,10 do trm.setCursor(28,i+6) mon.setBackground(colors.gray) trm.write(" ") mon.setBackground(colors.lightGray) trm.write(" ") if turbineInductor then mon.setBackground(colors.red) else mon.setBackground(colors.blue) end trm.write(" ") mon.setBackground(colors.gray) trm.write(" ") if turbineInductor then mon.setBackground(colors.red) else mon.setBackground(colors.blue) end trm.write(" ") mon.setBackground(colors.lightGray) trm.write(" ") mon.setBackground(colors.gray) trm.write(" ") end trm.setCursor(28,17) trm.write(" ") mon.setBackground(colors.black) end function getClick() local event, side, x, y = os.pullEvent("monitor_touch") API.checkxy(x,y) end function findOptFuelRods() trm.clear() brR.setActive(false) checkEn() displayEn() fuelRodLevel() while brR.getFuelTemperature() > 99 do for i= 1,3 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Finding Optimal Rod Level") trm.setCursor(3,7) trm.write("Core Temp: "..brR.getFuelTemperature()) trm.setCursor(3,8) trm.write("Waiting for 99c") os.sleep(1) end end while brR.getHotFluidAmount() > 10000 do for i = 1,3 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Finding Optimal Rod Level, please wait ....") trm.setCursor(3,7) trm.write("Fluid Amount: "..comma_value(brR.getHotFluidAmount()).."mb") trm.setCursor(3,8) trm.write("Waiting for 10,000mb") os.sleep(1) end end brR.setAllControlRodLevels(99) brR.setActive(true) while brR.getFuelTemperature() < 100 do for i = 1,5 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Set all rod levels to 99") trm.setCursor(3,7) trm.write("Waiting 5 seconds...") os.sleep(1) end end for i = 1,5 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Set all rod levels to 99") trm.setCursor(3,7) trm.write("Waiting 5 seconds...") os.sleep(1) end local tempMB = brR.getEnergyProducedLastTick() print(tempMB.."MB/t of steam") local tempRodLevels = math.floor(2000/tempMB) print("2000/"..tempMB.." = "..tempRodLevels) tempRodLevels = 100-tempRodLevels+5 print("Adding 5 to Rod Levels: "..math.floor(tempRodLevels)) brR.setAllControlRodLevels(math.floor(tempRodLevels)) print("Waiting 10 seconds to confirm...") for i = 1,10 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Estimated Level: "..tempRodLevels) trm.setCursor(3,7) trm.write("Waiting 10 seconds...") os.sleep(1) end tempMB = brR.getEnergyProducedLastTick() while tempMB > 2000 do tempRodLevels = tempRodLevels+1 brR.setAllControlRodLevels(math.floor(tempRodLevels)) print("Setting Rod Levels to: "..tempRodLevels) for i = 1,5 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Getting below 2000mb/t") trm.setCursor(3,7) trm.write("Currently at: "..tempMB) os.sleep(1) end tempMB = brR.getEnergyProducedLastTick() end while tempMB < 2000 do tempRodLevels = tempRodLevels -1 brR.setAllControlRodLevels(math.floor(tempRodLevels)) print("Setting Rod Levels to: "..tempRodLevels) for i = 1,5 do checkEn() displayEn() fuelRodLevel() trm.setCursor(3,6) trm.write("Getting Above 2000mb/t") trm.setCursor(3,7) trm.write("Currently at: "..tempMB) os.sleep(1) end tempMB = brR.getEnergyProducedLastTick() end OptFuelRodLevel = tempRodLevels end function autoReactor() if not steamReactor then brR.setAllControlRodLevels(0) if energyStoredPercent < turnOnAt then if not reactorOnline then online() end end if energyStoredPercent > turnOffAt then if reactorOnline then offline() end end else brR.setAllControlRodLevels(OptFuelRodLevel) if energyStoredPercent < turnOnAt then --online() setTurbineOnline() coilsOn() end if energyStoredPercent > turnOffAt then --if turbineRotorSpeed > 1800 then -- offline() --else -- online() --end setTurbineOnline() coilsOff() end if turbineRotorSpeed > targetSpeed then offline() else online() end end end function displayScreen() -- repeat checkEn() displayEn() if menuType == "Reactor" then fuelRodLevel() if mode == "Automatic" then autoMenu() autoReactor() else manualMenu() end else turbineInductorDisplay() if mode == "Automatic" then turbineAutoMenu() autoReactor() else turbineManualMenu() end end timerCode = os.startTimer(1) local event, side, x, y repeat event, side, x, y = os.pullEvent() print(event) if event == "timer" then print(timerCode..":"..side) if timerCode ~= side then print("Wrong Code") else print("Right Code") end end until event~= "timer" or timerCode == side if event == "monitor_touch" then print(x..":"..y) API.checkxy(x,y) end -- until event ~= "timer" end if steamReactor then findOptFuelRods() end while true do displayScreen() os.sleep(1) end
to convert BigReactor code from Direwolf20 computeurcraft to opencomputers
in Programming
Posted
a big thank you for your help (we never say it enough )
this code may not have been the best code to begin coding especially on opencomputer.
but the fact of going from CC to OC and seeing the code does not work, it made me want to continue and to interest me a little more.
without your help I would not have advanced to the point where I am, I still have progress to make but as we say Rome was not done in 1 day