Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -----------Castle in a turtle--------
- --main v4.6---
- --[[
- To do:
- -key presses moeten via keys api voor cc tweaked -done
- -functies updaten zoals tower v4.2 voor cc tweaked -done
- -plaatsing disk misschien niet bestand tegen gravel/sand -ignore
- -iets mis met alarm in tower -probably done, check it
- -tower start opnieuw met server restart -done
- -base toevoegen -in progress
- -model 2 toevoegen -done
- -model 3 toevoegen -done
- -orientatie bij plaatsing wall -done
- -center tower -done
- -zuigen met mate in wall -done
- -up after placement -done
- -enderchest automatisch printen -kan niet meer met cc tweaked
- -resume voorkomen -done
- -chunkloaders -beter in de map doen of erbij blijven
- -grass fucks up placement of turtles and disk drives -done
- -modem aan zelfde kant als diskdrive kan niet (no wireless? achterkant?) -done
- -als directory bestaat, verwijderen -done
- -setup wall stuff same as tower stuff -done
- --]]
- -------------pastebin links--------------
- local tower = "v5dhVpG0" --updated to tower v4.2 2023-07-16
- local wall = "712PwYyU" --updated to wall v2.1 2023-07-16
- local base = "" --moet nog
- ------------design parameters-----------------
- -- towerdiam 22 en wallheigt 20 kan wel maar is erg krap
- -- 24 en 18 lijkt beter
- -- 8 en 5 is lelijk maar werkt voor testen
- local towerDiamList = {24,24,24,24,24,24,24,24}
- local towerHeightList = {40,40,40,40,40,40,40,40}
- local overhangList = {2,2,2,2,2,2,2,2} --overhang van het dak, 2 is vaak het beste
- local towerDistance = 64 --afstand tussen torens
- local walHeight = 18 --muurhoogte
- local wallWidth = 5 --muurbreedte
- local wallLength = {}
- local slots = 1
- local turtleSlot = 1
- local fuelChestSlot = 2
- local materialChestSlot = 3
- local roofChestSlot = 4
- local roofSupportChestSlot = 5
- local diskDriveSlot = 6
- local diskSlot = 7
- local rommelSlot = 8
- local fuelSlot = 16
- local facing = 1 --orientatie is arbitrair zonder GPS, gebruik noord als interne benaming voor start facing
- local facings = {"north", "east", "south", "west"}
- local dx = {0, 1, 0, -1}
- local dz = {-1, 0, 1, 0}
- local home = vector.new(0, 0, 0)
- local current = vector.new(0, 0, 0)
- local target = vector.new(0, 0, 0)
- ----------counting stuff-----------------
- local wallMaterialQTY = 0
- local roofMaterialQTY = 0
- local supportQTY = 0
- ----------------menu stuff-----------------------
- local model = 1
- local modelMax = 3
- local offset = 22
- local kontgaatje = false --used as enter in gui()
- local passed = false --used in valseStart()
- local option = 1
- local optionMax = 8
- local preset = "Medium"
- ------------start positions-----------------
- local towerPos1 = vector.new(0, 0, 0)
- local towerPos2 = vector.new(0, 0, 0)
- local towerPos3 = vector.new(0, 0, 0)
- local towerPos4 = vector.new(0, 0, 0)
- local towerPos5 = vector.new(0, 0, 0)
- local towerPos6 = vector.new(0, 0, 0)
- local towerPos7 = vector.new(0, 0, 0)
- local towerPos8 = vector.new(0, 0, 0)
- local wallPos1 = vector.new(0, 0, 0)
- local wallPos2 = vector.new(0, 0, 0)
- local wallPos3 = vector.new(0, 0, 0)
- local wallPos4 = vector.new(0, 0, 0)
- local wallPos5 = vector.new(0, 0, 0)
- local wallPos6 = vector.new(0, 0, 0)
- local wallPos7 = vector.new(0, 0, 0)
- local wallPos8 = vector.new(0, 0, 0)
- local wallDir1 = ""
- local wallDir2 = ""
- local wallDir3 = ""
- local wallDir4 = ""
- local wallDir5 = ""
- local wallDir6 = ""
- local wallDir7 = ""
- local wallDir8 = ""
- local wallDir9 = ""
- function round(num, idp)
- local mult = 10^(idp or 0)
- return math.floor(num * mult + 0.5) / mult
- end
- function reFuel()--met 64 fuel moet hij het wel redden
- if turtle.getFuelLevel() < 16 then
- turtle.select(fuelSlot)
- turtle.refuel(8)
- if turtle.getFuelLevel() < 16 then
- term.clear()
- term.setCursorPos(1,1)
- print("Give me some fuel and press enter")
- read()
- reFuel()
- end
- end
- end
- function turtleLeft()
- facing = facing - 1
- facing = (facing - 1) % 4
- facing = facing + 1
- turtle.turnLeft()
- sendPos()
- end
- function turtleRight()
- facing = facing - 1
- facing = (facing + 1) % 4
- facing = facing + 1
- turtle.turnRight()
- sendPos()
- end
- function face(direction)
- if direction == "north" then dir = 1
- elseif direction == "east" then dir = 2
- elseif direction == "south" then dir = 3
- elseif direction == "west" then dir = 4
- end
- if dir - facing == 1 or dir - facing == -3 then
- while direction ~= facings[facing] do
- turtleRight()
- end
- else
- while direction ~= facings[facing] do
- turtleLeft()
- end
- end
- end
- function goNorth(distance)
- face("north")
- local dist = 0
- while dist < distance do
- local moved = false
- while not(moved) do
- turtle.select(rommelSlot)
- turtle.dig()
- turtle.drop()
- reFuel()
- moved = turtle.forward()
- end
- dist = dist + 1
- current.x = current.x + dx[facing] --change in location will be looked up in tables
- current.z = current.z + dz[facing] --dx and dz, dependend on faci
- end
- end
- function goEast(distance)
- face("east")
- local dist = 0
- while dist < distance do
- local moved = false
- while not(moved) do
- turtle.select(rommelSlot)
- turtle.dig()
- turtle.drop()
- reFuel()
- moved = turtle.forward()
- end
- dist = dist + 1
- current.x = current.x + dx[facing] --change in location will be looked up in tables
- current.z = current.z + dz[facing] --dx and dz, dependend on faci
- end
- end
- function goSouth(distance)
- face("south")
- local dist = 0
- while dist < distance do
- local moved = false
- while not(moved) do
- turtle.select(rommelSlot)
- turtle.dig()
- turtle.drop()
- reFuel()
- moved = turtle.forward()
- end
- dist = dist + 1
- current.x = current.x + dx[facing] --change in location will be looked up in tables
- current.z = current.z + dz[facing] --dx and dz, dependend on faci
- end
- end
- function goWest(distance)
- face("west")
- local dist = 0
- while dist < distance do
- local moved = false
- while not(moved) do
- turtle.select(rommelSlot)
- turtle.dig()
- turtle.drop()
- reFuel()
- moved = turtle.forward()
- end
- dist = dist + 1
- current.x = current.x + dx[facing] --change in location will be looked up in tables
- current.z = current.z + dz[facing] --dx and dz, dependend on faci
- end
- end
- function goUp(distance)
- local dist = 0
- while dist < distance do
- local moved = false
- while not(moved) do
- turtle.select(rommelSlot)
- turtle.digUp()
- turtle.drop()
- reFuel()
- moved = turtle.up()
- end
- dist = dist + 1
- current.y = current.y + 1
- end
- end
- function goDown(distance)
- local dist = 0
- while dist < distance do
- local moved = false
- while not(moved) do
- turtle.select(rommelSlot)
- turtle.digDown()
- turtle.drop()
- reFuel()
- moved = turtle.down()
- end
- dist = dist + 1
- current.y = current.y - 1
- end
- end
- function moveXYZ(Xmove, Ymove, Zmove)
- if Ymove > 0 then
- goUp(Ymove)
- elseif Ymove < 0 then
- Ypooplicker = -1 * Ymove
- goDown(Ypooplicker)
- else
- end
- if Xmove > 0 then
- goEast(Xmove)
- elseif Xmove < 0 then
- Xpooplicker = -1 * Xmove
- goWest(Xpooplicker)
- else
- end
- if Zmove > 0 then
- goSouth(Zmove)
- elseif Zmove < 0 then
- Zpooplicker = -1 * Zmove
- goNorth(Zpooplicker)
- else
- end
- end
- function moveToXYZ(Xtarget, Ytarget, Ztarget)
- local desiredPos = vector.new(Xtarget, Ytarget, Ztarget)
- currentPos = vector.new(current.x, current.y, current.z)
- local toMove = desiredPos - currentPos
- moveXYZ(toMove.x, toMove.y, toMove.z)
- end
- function fwrite(path, text)
- local file = assert(io.open(path, "w"))
- file:write(text)
- file:close()
- end
- function split(s, delimiter)
- result = {};
- for match in (s..delimiter):gmatch("(.-)"..delimiter) do
- table.insert(result, match);
- end
- return result;
- end
- function sendPos()
- if resume then
- fwrite("turtlePos", current.x..", "..current.y..", "..current.z..", "..facing..", "..quarryStart.x..", "..quarryStart.y..", "..quarryStart.z..", "..quarryEnd.x..", "..quarryEnd.y..", "..quarryEnd.z..", "..action)
- else
- end
- end
- function digForwards(distance)
- local dist = 0
- while dist < distance do
- local moved = false
- while not(moved) do
- turtle.select(rommelSlot)
- turtle.dig()
- turtle.drop()
- moved = turtle.forward()
- end
- dist = dist + 1
- current.x = current.x + dx[facing] --change in location will be looked up in tables
- current.z = current.z + dz[facing] --dx and dz, dependend on faci
- reFuel()
- end
- end
- function placer(what, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
- --[[ Syntax:
- Tower v4.2:
- placer("tower", 20, 2, 2, 1) voor toren diam=20 h=2, overhang=2, autostart=true
- Wall v2.1:
- placer direction height width distance kantelen needRoof roofHeight supportInterval fancyRoof Autostart
- placer("wall", angleLeft, 20, 5, 128, 1, 1, 3, 4, 1, 1) voor muur schuin naar links, 20 hoog,
- 5 breed, 128 lang, met kantelen, met dak, 3 hoog dak, om de 4 blokjes een support, met fancyroof, autostart
- --]]
- fs.delete("disk") --in geval dit als directory aanwezig was
- turtle.select(rommelSlot) --zooi opruimen
- turtle.dig()--dit werkt vast niet als er gravel of sand is
- goUp(1)
- turtle.dig()
- if what == "tower" then
- slots = 4
- elseif what == "wall" then
- slots = 5
- else
- end
- goDown(slots-1)
- while slots > 0 do
- goUp(1)
- local placed = false--turtle, kistjes en diskdrive plaatsen
- while not placed do --turtle=1, fuel=2, material=3, roof=4, roofSupport=5
- turtle.select(rommelSlot)
- turtle.dig()
- turtle.select(slots)
- local zaadlap = false --grass fix
- while not zaadlap do
- placed = turtle.place()
- zaadlap = turtle.detect()
- end
- end
- slots = slots - 1
- end
- goUp(1) --tot boven turtle
- turtle.select(diskDriveSlot)
- local placed = false --diskdrive=6
- while not placed do
- turtle.select(rommelSlot)
- turtle.dig()
- turtle.select(diskDriveSlot)
- local spermalap = false --grass fix
- while not spermalap do
- placed = turtle.place()
- spermalap = turtle.detect()
- end
- end
- turtle.select(diskSlot)
- turtle.drop() --disk=7
- if what == "tower" then --tower
- fs.delete("disk/startup")
- file = fs.open("disk/startup","w") --startup op disk
- file.write(
- [[
- fs.copy("disk/install","startup")
- fs.delete("disk/startup")
- fs.copy("disk/tower","tower")
- fs.delete("disk/tower")
- sleep(5)
- os.reboot()
- ]])
- file.close()
- fs.delete("disk/install")
- file = fs.open("disk/install","w") --startup van de turtle is: tower diam hoogte overhang autostart
- file.write(
- [[
- shell.run("tower ]]..arg1.." "..arg2.." "..arg3.." "..arg4..[[")
- ]])
- file.close()
- fs.delete("disk/tower")
- shell.run("pastebin get "..tower.." disk/tower") --programma tower pakken
- elseif what == "wall" then --wall
- fs.delete("disk/startup")
- file = fs.open("disk/startup","w") --startup op disk
- file.write(
- [[
- fs.copy("disk/install","startup")
- fs.delete("disk/startup")
- fs.copy("disk/wall","wall")
- fs.delete("disk/wall")
- sleep(5)
- os.reboot()
- ]])
- file.close()
- fs.delete("disk/install")
- file = fs.open("disk/install","w") --startup van de turtle is: wall ...
- file.write(
- [[
- shell.run("wall ]]..arg1.." "..arg2.." "..arg3.." "..arg4.." "..arg5.." "..arg6.." "..arg7.." "..arg8.." "..arg9.." "..arg10..[[")
- ]])
- file.close()
- fs.delete("disk/wall")
- shell.run("pastebin get "..wall.." disk/wall") --programma wall pakken
- elseif what == "base" then
- fs.delete("disk/startup")
- file = fs.open("disk/startup","w") --startup op disk
- file.write(
- [[
- fs.copy("disk/install","startup")
- fs.delete("disk/startup")
- fs.copy("disk/wall","base")
- fs.delete("disk/base")
- sleep(5)
- os.reboot()
- ]])
- file.close()
- fs.delete("disk/install")
- file = fs.open("disk/install","w") --startup van de turtle is: base ...
- file.write(
- [[
- shell.run("base ]]..arg1.." "..arg2.." "..arg3.." "..arg4.." "..arg5.." "..arg6.." "..arg7.." "..arg8.." "..arg9.." "..arg10..[[")
- ]])
- file.close()
- fs.delete("disk/base")
- shell.run("pastebin get "..base.." disk/base") --programma base pakken
- end
- goDown(1)
- peripheral.call("front","turnOn")
- goUp(1)
- turtle.select(diskSlot)
- turtle.suck() --disk
- turtle.select(diskDriveSlot)
- turtle.dig() --disk drive
- end
- function natteScheet()--de functie die het harde werk doet
- --[[
- Schets: mag geen hyperlink bij pastebin
- Begin posities torens is center, walls is rand van toren midden van de muur
- Turtle begint op 0,0,0
- Diam is de diameter voor elke toren respectievelijk
- dist = towerDistance
- Wall:
- placer direction height width distance kantelen needRoof roofHeight supportInterval fancyRoof Autostart
- placer("wall", angleLeft, 20, 5, 128, 1, 1, 3, 4, 1, 1) voor muur schuin naar links, 20 hoog,
- 5 breed, 128 lang, met kantelen, met dak, 3 hoog dak, om de 4 blokjes een support, met fancyroof, autostart
- ]]--
- if model == 1 then --start posities enzo uitrekenen afhankelijk van model en tower diam
- -- *--*
- -- | |
- -- *--*
- towerPos1 = vector.new(towerDiamList[1]/2, 0, -towerDiamList[1]/2)
- towerPos2 = vector.new(towerPos1.x + towerDistance, 0, towerPos1.z)
- towerPos3 = vector.new(towerPos2.x, 0, towerPos1.z - towerDistance)
- towerPos4 = vector.new(towerPos1.x, 0, towerPos3.z)
- wallPos1 = vector.new(towerDiamList[1], -3, towerPos1.z)
- wallPos2 = vector.new(towerPos2.x, -3, -towerDiamList[1])
- wallPos3 = vector.new(towerDistance, -3, towerPos3.z)
- wallPos4 = vector.new(towerPos1.x, -3, towerPos3.z + towerDiamList[1]/2)
- wallDir1 = "east"
- wallDir2 = "north"
- wallDir3 = "west"
- wallDir4 = "south"
- towerDiamList[5] = towerDiamList[1]
- n=1
- while n < 5 do
- wallLength[n] = towerDistance - math.floor((towerDiamList[n] + towerDiamList[n+1])/2)
- n = n + 1
- end
- ----------------------aan de slag---------------------------
- term.clear()
- term.setCursorPos(1,1)
- moveToXYZ(towerPos1.x, towerPos1.y, towerPos1.z)
- placer("tower", towerDiamList[1], towerHeightList[1], overhangList[1], 1)
- moveToXYZ(wallPos1.x,wallPos1.y + 10,wallPos1.z)
- moveToXYZ(wallPos1.x,wallPos1.y,wallPos1.z)
- face(wallDir1)
- placer("wall", "straight", walHeight, wallWidth, wallLength[1], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos2.x, towerPos2.y + 10, towerPos2.z)
- moveToXYZ(towerPos2.x, towerPos2.y, towerPos2.z)
- placer("tower", towerDiamList[2], towerHeightList[2], overhangList[2], 1)
- moveToXYZ(wallPos2.x,wallPos2.y + 10,wallPos2.z)
- moveToXYZ(wallPos2.x,wallPos2.y,wallPos2.z)
- face(wallDir2)
- placer("wall", "straight", walHeight, wallWidth, wallLength[2], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos3.x, towerPos3.y + 10, towerPos3.z)
- moveToXYZ(towerPos3.x, towerPos3.y, towerPos3.z)
- placer("tower", towerDiamList[3], towerHeightList[3], overhangList[3], 1)
- moveToXYZ(wallPos3.x,wallPos3.y + 10,wallPos3.z)
- moveToXYZ(wallPos3.x,wallPos3.y,wallPos3.z)
- face(wallDir3)
- placer("wall", "straight", walHeight, wallWidth, wallLength[3], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos4.x, towerPos4.y + 10, towerPos4.z)
- moveToXYZ(towerPos4.x, towerPos4.y, towerPos4.z)
- placer("tower", towerDiamList[4], towerHeightList[4], overhangList[4], 1)
- moveToXYZ(wallPos4.x,wallPos4.y + 10,wallPos4.z)
- moveToXYZ(wallPos4.x,wallPos4.y,wallPos4.z)
- face(wallDir4)
- placer("wall", "straight", walHeight, wallWidth, wallLength[4], 1, 1, 3, 4, 1, 1)
- elseif model == 2 then--start posities enzo uitrekenen afhankelijk van model en tower diam
- -- *--*
- -- / \
- -- * *
- -- \ /
- -- *--*
- towerPos1 = vector.new(towerDiamList[1]/2, 0, -towerDiamList[1]/2)
- towerPos2 = vector.new(towerPos1.x + towerDistance, 0, towerPos1.z)
- towerPos3 = vector.new(towerPos2.x + round(math.sqrt(towerDistance^2/2),0), 0, round(towerPos1.z-math.sqrt(towerDistance^2/2),0))
- towerPos4 = vector.new(towerPos2.x, 0, towerPos1.z - round(2*math.sqrt(towerDistance^2/2),0))
- towerPos5 = vector.new(towerPos1.x, 0, towerPos4.z)
- towerPos6 = vector.new((towerPos1.x - round(math.sqrt(towerDistance^2/2),0)), 0, towerPos3.z)
- wallPos1 = vector.new(towerDiamList[1], -3, towerPos1.z)
- wallDir1 = "east" --straight
- wallLength[1] = towerDistance - math.floor((towerDiamList[1] + towerDiamList[2])/2)
- wallPos2 = vector.new(towerPos2.x + round(math.sqrt((towerDiamList[2]/2)^2/2),0), -3, towerPos2.z - round(math.sqrt((towerDiamList[2]/2)^2/2),0))
- wallDir2 = "east" --angle left
- wallLength[2] = towerDistance - math.floor((towerDiamList[2] + towerDiamList[3])/2)
- wallPos3 = vector.new(towerPos3.x - round(math.sqrt((towerDiamList[3]/2)^2/2),0), -3, towerPos3.z - round(math.sqrt((towerDiamList[3]/2)^2/2),0))
- wallDir3 = "north" --angle left
- wallLength[3] = towerDistance - math.floor((towerDiamList[3] + towerDiamList[4])/2)
- wallPos4 = vector.new(towerPos4.x - round(towerDiamList[4]/2,0), -3, towerPos4.z)
- wallDir4 = "west" --straight
- wallLength[4] = towerDistance - math.floor((towerDiamList[4] + towerDiamList[5])/2)
- wallPos5 = vector.new(towerPos5.x - round(math.sqrt((towerDiamList[5]/2)^2/2),0), -3, towerPos5.z + round(math.sqrt((towerDiamList[5]/2)^2/2),0))
- wallDir5 = "west" --angle left
- wallLength[5] = towerDistance - math.floor((towerDiamList[5] + towerDiamList[6])/2)
- wallPos6 = vector.new(towerPos6.x + round(math.sqrt((towerDiamList[6]/2)^2/2),0), -3, towerPos6.z + round(math.sqrt((towerDiamList[6]/2)^2/2),0))
- wallDir6 = "south" --angle left
- wallLength[6] = towerDistance - math.floor((towerDiamList[6] + towerDiamList[1])/2)
- ----------------------aan de slag---------------------------
- term.clear()
- term.setCursorPos(1,1)
- moveToXYZ(towerPos1.x, towerPos1.y, towerPos1.z)
- placer("tower", towerDiamList[1], towerHeightList[1], overhangList[1], 1)
- moveToXYZ(wallPos1.x,wallPos1.y + 10,wallPos1.z)
- moveToXYZ(wallPos1.x,wallPos1.y,wallPos1.z)
- face(wallDir1)
- placer("wall", "straight", walHeight, wallWidth, wallLength[1], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos2.x, towerPos2.y + 10, towerPos2.z)
- moveToXYZ(towerPos2.x, towerPos2.y, towerPos2.z)
- placer("tower", towerDiamList[2], towerHeightList[2], overhangList[2], 1)
- moveToXYZ(wallPos2.x,wallPos2.y + 10,wallPos2.z)
- moveToXYZ(wallPos2.x,wallPos2.y,wallPos2.z)
- face(wallDir2)
- placer("wall", "angleLeft", walHeight, wallWidth, wallLength[2], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos3.x, towerPos3.y + 10, towerPos3.z)
- moveToXYZ(towerPos3.x, towerPos3.y, towerPos3.z)
- placer("tower", towerDiamList[3], towerHeightList[3], overhangList[3], 1)
- moveToXYZ(wallPos3.x,wallPos3.y + 10,wallPos3.z)
- moveToXYZ(wallPos3.x,wallPos3.y,wallPos3.z)
- face(wallDir3)
- placer("wall", "angleLeft", walHeight, wallWidth, wallLength[3], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos4.x, towerPos4.y + 10, towerPos4.z)
- moveToXYZ(towerPos4.x, towerPos4.y, towerPos4.z)
- placer("tower", towerDiamList[4], towerHeightList[4], overhangList[4], 1)
- moveToXYZ(wallPos4.x,wallPos4.y + 10,wallPos4.z)
- moveToXYZ(wallPos4.x,wallPos4.y,wallPos4.z)
- face(wallDir4)
- placer("wall", "straight", walHeight, wallWidth, wallLength[4], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos5.x, towerPos5.y + 10, towerPos5.z)
- moveToXYZ(towerPos5.x, towerPos5.y, towerPos5.z)
- placer("tower", towerDiamList[5], towerHeightList[5], overhangList[5], 1)
- moveToXYZ(wallPos5.x,wallPos5.y + 10,wallPos5.z)
- moveToXYZ(wallPos5.x,wallPos5.y,wallPos5.z)
- face(wallDir5)
- placer("wall", "angleLeft", walHeight, wallWidth, wallLength[5], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos6.x, towerPos6.y + 10, towerPos6.z)
- moveToXYZ(towerPos6.x, towerPos6.y, towerPos6.z)
- placer("tower", towerDiamList[6], towerHeightList[6], overhangList[6], 1)
- moveToXYZ(wallPos6.x,wallPos6.y + 10,wallPos6.z)
- moveToXYZ(wallPos6.x,wallPos6.y,wallPos6.z)
- face(wallDir6)
- placer("wall", "angleLeft", walHeight, wallWidth, wallLength[6], 1, 1, 3, 4, 1, 1)
- elseif model == 3 then
- -- *--*
- -- / \
- -- * *
- -- | |
- -- * *
- -- \ /
- -- *--*
- towerPos1 = vector.new(towerDiamList[1]/2, 0, -towerDiamList[1]/2)
- towerPos2 = vector.new(towerPos1.x + towerDistance, 0, towerPos1.z)
- towerPos3 = vector.new(towerPos2.x + round(math.sqrt(towerDistance^2/2),0), 0, round(towerPos1.z-math.sqrt(towerDistance^2/2),0))
- towerPos4 = vector.new(towerPos3.x, 0, towerPos3.z - towerDistance)
- towerPos5 = vector.new(towerPos2.x, 0, towerPos4.z - round(math.sqrt(towerDistance^2/2),0))
- towerPos6 = vector.new(towerPos1.x, 0, towerPos5.z)
- towerPos7 = vector.new(towerPos1.x - round(math.sqrt(towerDistance^2/2),0), 0, towerPos4.z)
- towerPos8 = vector.new(towerPos7.x, 0, towerPos3.z)
- wallPos1 = vector.new(towerDiamList[1], -3, towerPos1.z)
- wallDir1 = "east" --straight
- wallLength[1] = towerDistance - math.floor((towerDiamList[1] + towerDiamList[2])/2)
- wallPos2 = vector.new(towerPos2.x + round(math.sqrt((towerDiamList[2]/2)^2/2),0), -3, towerPos2.z - round(math.sqrt((towerDiamList[2]/2)^2/2),0))
- wallDir2 = "east" --angle left
- wallLength[2] = towerDistance - math.floor((towerDiamList[2] + towerDiamList[3])/2)
- wallPos3 = vector.new(towerPos3.x, -3, towerPos3.z - round(towerDiamList[3]/2,0))
- wallDir3 = "north" --straight
- wallLength[3] = towerDistance - math.floor((towerDiamList[3] + towerDiamList[4])/2)
- wallPos4 = vector.new(towerPos4.x - round(math.sqrt((towerDiamList[4]/2)^2/2),0), -3, towerPos4.z - round(math.sqrt((towerDiamList[4]/2)^2/2),0))
- wallDir4 = "north" --angle left
- wallLength[4] = towerDistance - math.floor((towerDiamList[4] + towerDiamList[5])/2)
- wallPos5 = vector.new(towerPos5.x - round(towerDiamList[5]/2,0), -3, towerPos5.z)
- wallDir5 = "west" --straight
- wallLength[5] = towerDistance - math.floor((towerDiamList[5] + towerDiamList[6])/2)
- wallPos6 = vector.new(towerPos6.x - round(math.sqrt((towerDiamList[6]/2)^2/2),0), -3, towerPos6.z + round(math.sqrt((towerDiamList[6]/2)^2/2),0))
- wallDir6 = "west" --angle left
- wallLength[6] = towerDistance - math.floor((towerDiamList[6] + towerDiamList[7])/2)
- wallPos7 = vector.new(towerPos7.x, -3, towerPos7.z + round(towerDiamList[7]/2,0))
- wallDir7 = "south" --straight
- wallLength[7] = towerDistance - math.floor((towerDiamList[7] + towerDiamList[8])/2)
- wallPos8 = vector.new(towerPos8.x + round(math.sqrt((towerDiamList[8]/2)^2/2),0), -3, towerPos8.z + round(math.sqrt((towerDiamList[8]/2)^2/2),0))
- wallDir8 = "south" --angle left
- wallLength[8] = towerDistance - math.floor((towerDiamList[8] + towerDiamList[1])/2)
- term.clear()
- term.setCursorPos(1,1)
- moveToXYZ(towerPos1.x, towerPos1.y, towerPos1.z)
- placer("tower", towerDiamList[1], towerHeightList[1], overhangList[1], 1)
- moveToXYZ(wallPos1.x,wallPos1.y + 10, wallPos1.z)
- moveToXYZ(wallPos1.x,wallPos1.y,wallPos1.z)
- face(wallDir1)
- placer("wall", "straight", walHeight, wallWidth, wallLength[1], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos2.x, towerPos2.y + 10, towerPos2.z)
- moveToXYZ(towerPos2.x, towerPos2.y, towerPos2.z)
- placer("tower", towerDiamList[2], towerHeightList[2], overhangList[2], 1)
- moveToXYZ(wallPos2.x,wallPos2.y + 10, wallPos2.z)
- moveToXYZ(wallPos2.x,wallPos2.y,wallPos2.z)
- face(wallDir2)
- placer("wall", "angleLeft", walHeight, wallWidth, wallLength[2], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos3.x, towerPos3.y, towerPos3.z)
- placer("tower", towerDiamList[3], towerHeightList[3], overhangList[3], 1)
- moveToXYZ(wallPos3.x,wallPos3.y + 10, wallPos3.z)
- moveToXYZ(wallPos3.x,wallPos3.y,wallPos3.z)
- face(wallDir3)
- placer("wall", "straight", walHeight, wallWidth, wallLength[3], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos4.x, towerPos4.y + 10, towerPos4.z)
- moveToXYZ(towerPos4.x, towerPos4.y, towerPos4.z)
- placer("tower", towerDiamList[4], towerHeightList[4], overhangList[4], 1)
- moveToXYZ(wallPos4.x,wallPos4.y + 10, wallPos4.z)
- moveToXYZ(wallPos4.x,wallPos4.y,wallPos4.z)
- face(wallDir4)
- placer("wall", "angleLeft", walHeight, wallWidth, wallLength[4], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos5.x, towerPos5.y, towerPos5.z)
- placer("tower", towerDiamList[5], towerHeightList[5], overhangList[5], 1)
- moveToXYZ(wallPos5.x,wallPos5.y + 10, wallPos5.z)
- moveToXYZ(wallPos5.x,wallPos5.y,wallPos5.z)
- face(wallDir5)
- placer("wall", "straight", walHeight, wallWidth, wallLength[5], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos6.x, towerPos6.y + 10, towerPos6.z)
- moveToXYZ(towerPos6.x, towerPos6.y, towerPos6.z)
- placer("tower", towerDiamList[6], towerHeightList[6], overhangList[6], 1)
- moveToXYZ(wallPos6.x,wallPos6.y + 10, wallPos6.z)
- moveToXYZ(wallPos6.x,wallPos6.y,wallPos6.z)
- face(wallDir6)
- placer("wall", "angleLeft", walHeight, wallWidth, wallLength[6], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos7.x, towerPos7.y, towerPos7.z)
- placer("tower", towerDiamList[7], towerHeightList[7], overhangList[7], 1)
- moveToXYZ(wallPos7.x,wallPos7.y + 10, wallPos7.z)
- moveToXYZ(wallPos7.x,wallPos7.y,wallPos7.z)
- face(wallDir7)
- placer("wall", "straight", walHeight, wallWidth, wallLength[7], 1, 1, 3, 4, 1, 1)
- moveToXYZ(towerPos8.x, towerPos8.y + 10, towerPos8.z)
- moveToXYZ(towerPos8.x, towerPos8.y, towerPos8.z)
- placer("tower", towerDiamList[8], towerHeightList[8], overhangList[8], 1)
- moveToXYZ(wallPos8.x,wallPos8.y + 10, wallPos8.z)
- moveToXYZ(wallPos8.x,wallPos8.y,wallPos8.z)
- face(wallDir8)
- placer("wall", "angleLeft", walHeight, wallWidth, wallLength[8], 1, 1, 3, 4, 1, 1)
- end
- end
- --------------menu stuff-----------------
- function plotTower(x, y)
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.black)
- local xt = x
- while xt <= x + 1 do
- local yt = y
- while yt <= y + 1 do
- term.setCursorPos(xt + offset,yt)
- term.write(" ")
- yt = yt + 1
- end
- xt = xt + 1
- end
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- end
- function plotWall(x, y, dir)
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- term.setCursorPos(x + offset,y)
- muurRichting = tostring(dir)
- if muurRichting == "1" then
- term.write("|")
- elseif muurRichting == "2" then
- term.write("/")
- elseif muurRichting == "3" then
- term.write("-")
- elseif muurRichting == "4" then
- term.write("\\")
- else
- term.write(muurRichting)
- end
- end
- function design1()
- plotTower(7,4)
- plotTower(11,4)
- plotTower(7,8)
- plotTower(11,8)
- plotWall(9,5,3)
- plotWall(10,5,3)
- plotWall(8,6,1)
- plotWall(8,7,1)
- plotWall(11,6,1)
- plotWall(11,7,1)
- plotWall(9,8,3)
- plotWall(10,8,3)
- end
- function design2()
- plotTower(7,2)
- plotTower(11,2)
- plotTower(3,6)
- plotTower(15,6)
- plotTower(7,10)
- plotTower(11,10)
- plotWall(9,3,3)
- plotWall(10,3,3)
- plotWall(6,4,2)
- plotWall(13,4,4)
- plotWall(5,5,2)
- plotWall(14,5,4)
- plotWall(5,8,4)
- plotWall(14,8,2)
- plotWall(6,9,4)
- plotWall(13,9,2)
- plotWall(9,10,3)
- plotWall(10,10,3)
- end
- function design3()
- plotTower(7,2)
- plotTower(11,2)
- plotTower(4,5)
- plotTower(14,5)
- plotTower(4,9)
- plotTower(14,9)
- plotTower(7,12)
- plotTower(11,12)
- plotWall(9,3,3)
- plotWall(10,3,3)
- plotWall(6,4,2)
- plotWall(13,4,4)
- plotWall(5,7,1)
- plotWall(14,7,1)
- plotWall(5,8,1)
- plotWall(14,8,1)
- plotWall(6,11,4)
- plotWall(13,11,2)
- plotWall(9,12,3)
- plotWall(10,12,3)
- end
- function plot(plotwat)
- hoer = {doen = plotwat}
- hoer.doen()
- end
- function clearGraphic()
- local breedte = offset + 1
- while breedte < 39 do
- local hoogte = 1
- while hoogte < 14 do
- term.setCursorPos(breedte, hoogte)
- term.write(" ")
- hoogte = hoogte + 1
- end
- breedte = breedte + 1
- end
- end
- function clearMenu()
- local breedte = 1
- while breedte < offset do
- local hoogte = 1
- while hoogte < 13 do
- term.setCursorPos(breedte, hoogte)
- term.write(" ")
- hoogte = hoogte + 1
- end
- breedte = breedte + 1
- end
- local lul = 1
- while lul < 13 do
- term.setCursorPos(offset + 1,lul)
- print(".")
- lul = lul + 1
- end
- end
- function gui()
- term.clear()
- while not kontgaatje do --while enter is not pressed do
- clearGraphic() --do graphic
- term.setCursorPos(7 + offset ,1)
- print("model "..model)
- if model == 1 then --4 torens
- plot(design1)
- elseif model == 2 then
- plot(design2)
- elseif model == 3 then
- plot(design3)
- end
- clearMenu() --do menu
- term.setCursorPos(1,6)
- print(" Use arrow keys to")
- print(" select model and hit")
- print(" enter to continue")
- local event, key = os.pullEvent("key") --do keyEvents
- if key == keys.left then --left
- model = model - 2
- model = model % modelMax
- model = model + 1
- elseif key == keys.right then --right
- model = model % modelMax
- model = model + 1
- elseif key == keys.enter then --enter
- kontgaatje = true
- else
- gui()
- end
- end
- end
- function menu()
- kontgaatje = false
- while not kontgaatje do
- term.clear()
- term.setCursorPos(1,1)
- print("Select variable to change.")
- print("")
- print("1-Tower specifications")
- print("2-Wall specifications")
- print("3-Presets")
- print("")
- print("Enter to continue with current specifications")
- print("")
- local event, key = os.pullEvent("key")
- if key == keys.enter then --enter
- kontgaatje = true
- elseif key == keys.one then --1
- subMenuTower()
- menu()
- elseif key == keys.two then --2
- subMenuWall()
- menu()
- elseif key == keys.three then --3
- subMenuPresets()
- menu()
- end
- end
- end
- function subMenuTower()
- term.clear()
- term.setCursorPos(1,1)
- print("Tower specification:")
- print("")
- print("1-Height")
- print("2-Diameter")
- print("3-Roof overhang")
- print("")
- print("4-Back")
- local event, key = os.pullEvent("key")
- if key == keys.one then --1
- subTowerHeight()
- subMenuTower()
- elseif key == keys.two then --2
- subTowerDiam()
- subMenuTower()
- elseif key == keys.three then --3
- subTowerOverhang()
- subMenuTower()
- end
- end
- function subTowerHeight()
- kontgaatje = false
- term.clear()
- term.setCursorPos(1,1)
- print("Tower heights: (Enter to go back)")
- print("")
- n=1
- while n <= optionMax do
- if option == n then
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.black)
- else
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- end
- print("Tower "..n..": "..towerHeightList[n])
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- n = n + 1
- end
- print("")
- print("Up/down to select, +/- to change.")
- local event, key = os.pullEvent("key") --do keyEvents
- if key == keys.down then --down
- option = option + 1
- if option > optionMax then
- option = 1
- end
- elseif key == keys.up then --up
- option = option - 1
- if option < 1 then
- option = optionMax
- end
- elseif key == keys.numPadAdd then -- +
- towerHeightList[option] = towerHeightList[option] + 1
- elseif key == keys.numPadSubtract then -- -
- towerHeightList[option] = towerHeightList[option] - 1
- if towerHeightList[option] < 1 then
- towerHeightList[option] = 1
- end
- elseif key == keys.enter then --enter
- kontgaatje = true
- end
- if not kontgaatje then
- subTowerHeight()
- end
- end
- function subTowerDiam()
- kontgaatje = false
- term.clear()
- term.setCursorPos(1,1)
- print("Tower diameters: (Enter to go back)")
- print("")
- n=1
- while n <= optionMax do
- if option == n then
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.black)
- else
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- end
- print("Tower "..n..": "..towerDiamList[n])
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- n = n + 1
- end
- print("")
- print("Up/down to select, +/- to change.")
- local event, key = os.pullEvent("key") --do keyEvents
- if key == keys.down then --down?
- option = option + 1
- if option > optionMax then
- option = 1
- end
- elseif key == keys.up then --up?
- option = option - 1
- if option < 1 then
- option = optionMax
- end
- elseif key == keys.numPadAdd then -- +
- towerDiamList[option] = towerDiamList[option] + 1
- elseif key == keys.numPadSubtract then -- -
- towerDiamList[option] = towerDiamList[option] - 1
- if towerDiamList[option] < 1 then
- towerDiamList[option] = 1
- end
- elseif key == keys.enter then --enter
- kontgaatje = true
- end
- if not kontgaatje then
- subTowerDiam()
- end
- end
- function subTowerOverhang()
- kontgaatje = false
- term.clear()
- term.setCursorPos(1,1)
- print("Tower roof overhang: (Enter to go back)")
- print("")
- n=1
- while n <= optionMax do
- if option == n then
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.black)
- else
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- end
- print("Tower "..n..": "..overhangList[n])
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- n = n + 1
- end
- print("")
- print("Up/down to select, +/- to change.")
- local event, key = os.pullEvent("key") --do keyEvents
- if key == keys.down then --down
- option = option + 1
- if option > optionMax then
- option = 1
- end
- elseif key == keys.up then --up
- option = option - 1
- if option < 1 then
- option = optionMax
- end
- elseif key == keys.numPadAdd then -- +
- overhangList[option] = overhangList[option] + 1
- elseif key == keys.numPadSubtract then -- -
- overhangList[option] = overhangList[option] - 1
- if overhangList[option] < 1 then
- overhangList[option] = 1
- end
- elseif key == keys.enter then --enter
- kontgaatje = true
- end
- if not kontgaatje then
- subTowerOverhang()
- end
- end
- function subMenuWall()
- option = 1
- kontgaatje = false
- while not kontgaatje do
- term.clear()
- term.setCursorPos(1,1)
- print("Wall specification: (Enter to go back)")
- print("")
- if option == 1 then
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.black)
- end
- print("Height "..walHeight)
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- if option == 2 then
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.black)
- end
- print("Width "..wallWidth)
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- if option == 3 then
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.black)
- end
- print("Tower distance "..towerDistance)
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- print("")
- print("Up/down to select, +/- to change.")
- local event, key = os.pullEvent("key")
- if key == keys.down then --down
- option = option + 1
- if option > 3 then
- option = 1
- end
- elseif key == keys.up then --up
- option = option - 1
- if option < 1 then
- option = 3
- end
- elseif key == keys.numPadAdd then -- +
- if option == 1 then
- walHeight = walHeight + 1
- elseif option == 2 then
- wallWidth = wallWidth + 1
- elseif option == 3 then
- towerDistance = towerDistance + 1
- end
- elseif key == keys.numPadSubtract then -- -
- if option == 1 then
- walHeight = walHeight - 1
- elseif option == 2 then
- wallWidth = wallWidth - 1
- elseif option == 3 then
- towerDistance = towerDistance - 1
- end
- elseif key == keys.enter then --enter
- kontgaatje = true
- end
- end
- end
- function subMenuPresets()
- term.clear()
- term.setCursorPos(1,1)
- print("Available presets: (Enter to go back)")
- print("")
- print("1-Tiny")
- print("2-Medium")
- print("3-HUUUUUGE")
- print("")
- print("*Unfinished*")
- local event, key = os.pullEvent("key")
- term.clear()
- term.setCursorPos(1,1)
- if key == keys.one or key == keys.numPad1 then --1
- preset = "Tiny"
- towerDiamList = {8,8,8,8,8,8,8,8}
- towerHeightList = {10,10,10,10,10,10,10,10}
- overhangList = {2,2,2,2,2,2,2,2}
- towerDistance = 16
- walHeight = 5
- wallWidth = 3
- elseif key == keys.two or key == keys.numPad2 then --2
- preset = "Medium"
- towerDiamList = {24,24,24,24,24,24,24,24} --vul hier de diameters van de torens in
- towerHeightList = {40,40,40,40,40,40,40,40}
- overhangList = {2,2,2,2,2,2,2,2}
- towerDistance = 64
- walHeight = 18
- wallWidth = 5
- elseif key == keys.three or key == keys.numPad3 then --3
- preset = "HUUUUUGE"
- towerDiamList = {32,32,32,32,32,32,32,32} --vul hier de diameters van de torens in
- towerHeightList = {60,60,60,60,60,60,60,60}
- overhangList = {4,4,4,4,4,4,4,4}
- towerDistance = 86
- walHeight = 30
- wallWidth = 7
- end
- term.clear()
- term.setCursorPos(1,1)
- print("Preset "..preset.." selected")
- print("")
- print("For all towers and walls:")
- print("")
- print("Tower diameter = "..towerDiamList[1])
- print("Tower height = "..towerHeightList[1])
- print("Roof overhang = "..overhangList[1])
- print("Tower distance = "..towerDistance)
- print("Wall height = "..walHeight)
- print("Wall width = "..wallWidth)
- print("")
- print("Enter to go back")
- os.pullEvent("key")
- end
- function estimate()--------Benodigd materiaal inschatten---------
- towerWallQTY = 4 * towerHeightList[1] * math.ceil(math.pi * towerDiamList[1])
- wallQTY = 4 * (towerDistance - towerDiamList[1]) * 20 * 2 + 3 * (towerDistance - towerDiamList[1])
- wallMaterialQTY = towerWallQTY + wallQTY
- towerRoofQTY = 0---dak van toren
- diamCalc = towerDiamList[1] + overhangList[1]
- while diamCalc > 0 do
- towerRoofQTY = towerRoofQTY + math.ceil(math.pi * diamCalc)
- diamCalc = diamCalc - 1
- end
- towerRoofQTY = towerRoofQTY * 4--4 torens
- wallRoofQTY = 4 * (towerDistance - towerDiamList[1]) * 5 --5 breed
- roofMaterialQTY = towerRoofQTY + wallRoofQTY
- supportQTY = (towerDistance - towerDiamList[1] + math.ceil((towerDistance - towerDiamList[1])/4)) * 8 --4 is support interval 8 is 4 torens 2 kanten
- if model == 2 then--1.5x zo groot als model 1
- wallMaterialQTY = wallMaterialQTY * 1.5
- roofMaterialQTY = roofMaterialQTY * 1.5
- supportQTY = supportQTY * 1.5
- elseif model == 3 then--2x zo groot als model 1
- wallMaterialQTY = wallMaterialQTY * 2
- roofMaterialQTY = roofMaterialQTY * 2
- supportQTY = supportQTY * 2
- end
- wallMaterialStack = math.ceil(wallMaterialQTY/64)
- roofMaterialStack = math.ceil(roofMaterialQTY/64)
- supportStack = math.ceil(supportQTY/64)
- term.clear()
- term.setCursorPos(1,1)
- print("Make sure the following is available:")
- print("(Use AE to fill ender chests)")
- print(" ")
- print("Wall Material: "..wallMaterialQTY.." ("..wallMaterialStack.." stacks)")
- print("Roof Material: "..roofMaterialQTY.." ("..roofMaterialStack.." stacks)")
- print("Roof Support: "..supportQTY.." ("..supportStack.." stacks)")
- print(" ")
- print("Press enter to proceed.")
- read()
- end
- function falseStart()---------turtle inventory check----------------
- local turtleAmount = {8,12,16}
- local fuelChestAmount = {9,13,17}
- local RoofSupportChestAmount = {4,6,8}
- term.clear()
- term.setCursorPos(1,1)
- print("Folowing is required:")
- print(" ")
- print("Slot Item Av./Req.")
- print("[01] turtle "..turtle.getItemCount(turtleSlot).."/"..turtleAmount[model])
- print("[02] FuelChest "..turtle.getItemCount(fuelChestSlot).."/"..fuelChestAmount[model])
- print("[03] WallMaterialChest "..turtle.getItemCount(materialChestSlot).."/"..turtleAmount[model])
- print("[04] RoofMaterialChest "..turtle.getItemCount(roofChestSlot).."/"..turtleAmount[model])
- print("[05] RoofSupportChest "..turtle.getItemCount(roofSupportChestSlot).."/"..RoofSupportChestAmount[model])
- print("[06] DiskDrive "..turtle.getItemCount(diskDriveSlot).."/1")
- print("[07] Disk "..turtle.getItemCount(diskSlot).."/1")
- print("[16] Fuel "..turtle.getItemCount(fuelSlot).."/64")
- if turtle.getItemCount(turtleSlot) >= turtleAmount[model] then
- if turtle.getItemCount(fuelChestSlot) >= fuelChestAmount[model] then
- if turtle.getItemCount(materialChestSlot) >= turtleAmount[model] then
- if turtle.getItemCount(roofChestSlot) >= turtleAmount[model] then
- if turtle.getItemCount(roofSupportChestSlot) >= RoofSupportChestAmount[model] then
- if turtle.getItemCount(diskDriveSlot) >= 1 then
- if turtle.getItemCount(diskSlot) >= 1 then
- if turtle.getItemCount(fuelSlot) >= 64 then
- passed = true
- print(" ")
- term.write("press enter to start")
- local balzak = tostring(read())
- end
- end
- end
- end
- end
- end
- end
- end
- if not passed then
- local event, p1 = os.pullEvent("turtle_inventory")
- falseStart()
- end
- end
- function programma()
- gui()
- menu()
- estimate()
- falseStart()
- reFuel()
- natteScheet()
- term.clear()
- term.setCursorPos(1,1)
- print("done")
- end
- programma()
- --model = 3
- --natteScheet()
Add Comment
Please, Sign In to add comment