antonsavov

registry v2.5

Dec 7th, 2017
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 33.19 KB | None | 0 0
  1. --------------------------------------------------------------------------------------
  2. --- VARIABLES THAT AFFECT THE SPACE OF THE GAME AREA (SPAWN AREA, PLAY AREA AND CATALOGUE AREA TOGETHER)
  3. --------------------------------------------------------------------------------------
  4. --
  5. -- PLAY AREA
  6. --
  7. GRIDCELL_SIZE = 5 -- the width of one grid cell in minecraft blocks. MUST BE ODD NUMBER minimum is 3 maximum is 11
  8. GRIDCELL_COUNT = 10 -- the number of gridcells or slots across X and Z in one game. MUST BE between 5 and 10
  9. --
  10. -- CATALOGUE AREA
  11. --
  12. CATALOGUE_SLOTCOUNT = {
  13.     x = 2, --the number of slots along the X axis
  14.     z = 3 --the number of slots along the Z axis
  15. }
  16. --
  17. --
  18. --
  19. ------------------------------
  20. ---ADVANCED SETTINGS BELOW----
  21. ------------------------------
  22. --
  23. -- ADVANCED PLAY AREA SETTINGS
  24. --
  25. PLAY_AREA_OFFSET = {
  26.     x = 3, -- the number of grid cells along X the play area is offset from the edge of the spawn zone (the same is used of the CATALOGUE offset)
  27.     z = 3 -- the number of grid cells along Z the play area is offset from the edge of the spawn zone (the negtive of this is used for the catalogue offset)
  28. }
  29. TRENCHES ={
  30.     WIDTH = 1, -- in minecraft blocks how WIDE are trenches carved around the platforms of the play area, catalogue area and spawn area (from the edge out)
  31.     DEPTH = 5 -- in minecraft blocks how DEEP are trenches carved around the platforms of the play area, catalogue area and spawn area  (from level of computer down)
  32. }
  33. DO_GRID = true --this refers to the grid of detector blocks placed on the ground at the start of each new game
  34. GRID_HOLE_CHANCE = 0 --
  35.  
  36. --BUILDZONE_FLOOR_HEIGHT = -1 --the elevation of the floor of the play area realtive to the computer elevation (along Y axis)
  37.  
  38. --- this is the matrix or grid of play areas that are created in the world
  39. GAME_FIELD = {
  40.     countX = 1,
  41.     countZ = 1
  42. }
  43. GAME_FIELD_MAX = {
  44.     countX = 3, --don't change this, it must stay 3
  45.     countZ = 3 --don't change this, it must stay 3
  46. }
  47.  
  48. BUILDZONE_OFFSET = 0 -- in grid cells, the number of grid cells left between the play areas (buildzones)
  49. --
  50. -- ADVANCED CATALOGUE AREA SETTINGS
  51. --
  52. CATALOGUE_SLOTSIZE = {
  53.     x = 3, -- the size of the slot defined as number of grid cells along X
  54.     z = 3 -- the size of the slot defined as number of grid cells along Z
  55. }
  56. CATALOGUE_SLOT_OFFSET = 1 -- the number of grid cells left free between the slots, also used of the width of the edge of both catalogue and play area
  57. VOCAB_HEIGHT = 29 --the maximum height of an element in the catalgoue
  58. --
  59. -- ADVANCED SPAWN AREA
  60. --
  61. --the spawn area consists of one large area for the spawn of everyone, both ops and adventure players and
  62. -- a dispatching area with launchpads that lead to a buildzone. for each buildzone there is a dedicated launchpad
  63. SPAWNZONE_SIZE = 39 -- in minecraft blocks, the size of the spawn zone
  64.  
  65. --the launch pads are the square ares in the spawn zone on which players jump to join a game in the corresponding buildzone
  66. PORTAL = {
  67.     SIZE = 5, -- in minecraft blocks, the size of the launch pads along X and Z
  68.     OFFSET = 3 -- in minecraft blocks, the distance between the launch pads
  69. }
  70.  
  71. -- Status ( 0 = in game, 1 = quit with homecomer, 2 = left game )
  72. PLAYER_STATUS = {
  73.     IN_GAME = 0,
  74.     LEFT_WITH_HOMECOMER = 1,
  75.     LEFT_OTHERWISE = 2
  76. }
  77.  
  78. -- Phase ( 1 = dormant, 2 = currently playing, 3 = game over, waiting for players to leave the buildzone )
  79. QUEUE_PHASE = {
  80.     DORMANT = 1,
  81.     PLAYING = 2,
  82.     GAMEOVER = 3
  83. }
  84.  
  85. CLONE_MASK_MODE = {
  86.     REPLACE = "replace", -- Clones all blocks, including air.
  87.     MASKED = "masked", -- Clones only blocks that are not air.
  88.     FILTERED = "filtered" -- Clones only blocks that match the tileName.
  89. }
  90.  
  91. CLONE_MODE = {
  92.     NORMAL = "normal", -- Clone the blocks from the source region to the destination region.
  93.     FORCE = "force", -- Force the clone if the source region and destination region overlap.
  94.     MOVE = "move" -- Clone the blocks from the source region to the destination region. Then replace the cloned blocks in the source region with air (blocks not cloned in the source region will remain unchanged if CLONE_MASK_MODE.FILTERED was used).
  95. }
  96.  
  97. FILL_LIMIT = 32768
  98.  
  99. RECORDS_FOLDER = "/records"
  100. BUILDZONES_LIST_FILE = RECORDS_FOLDER.."/_buildzones-list.json"
  101. ------------------
  102. --OLDER STUFF
  103. -------------------
  104.  
  105. DEBUG_MODE = true
  106.  
  107. ANNOUNCE_ENGLISH = false
  108. ANNOUNCE_GERMAN = false
  109.  
  110. SHOW_HIGHSCORES = false --maybe have debug mode highscroes and actual game highscores saved into files
  111.  
  112. if not DEBUG_MODE then
  113.     ANNOUNCE_ENGLISH = true --in actual play mode at least english messages will be displayed
  114.     SHOW_HIGHSCORES = true --in play mode always show the highscores in the sidebar
  115. end
  116.  
  117.  
  118.  
  119. CITY_VERSION = 1 -- this denotes which iteration of the map is current. When the map is full, i.e. all buildzones have been played we replace it with an empty one and increase the city vesrion with 1
  120. SPAWN_VILLAGER = false
  121.  
  122.  
  123.  
  124. PHASE_LENGTH_GAME = 600 --seconds a game lasts
  125. PHASE_LENGTH_WAIT = 15 --seconds to wait for players to stand in the yeloow box before starting a game
  126. PHASE_LENGTH_OVER = 15 --seconds to wait after a game is completing befor setting the buildzone to the next phase
  127.  
  128. HOMECOMER_TYPE = "Pig"
  129. HOMECOMER_VALUE = 90 --90 is for pig
  130. MAX_PLAYERS_PER_GAME = 4
  131. MIN_BUILDINGS = 5 -- the minimum number of buildings a buildzone must have in order to be saved and no discarded at the end of a game
  132.  
  133. DEFAULT_NAME = 'BUILDING'
  134.  
  135. WOOL_PER_EMERALD = 64
  136. PICKAXE_USES = 40
  137.  
  138. BLOCKS = {
  139.     AIR = {block='minecraft:air',variant=0},
  140.     CAMP_FLOOR = {block='minecraft:sandstone',variant=0},
  141.     WHITE_GRID = {block='minecraft:sandstone',variant=0},
  142.     DARK_GRID = {block='minecraft:snow',variant=0},
  143.     CONSTRUCTION = {block='minecraft:diamond_ore',variant=0},
  144.     RING = {block='minecraft:diamond_ore',variant=0},
  145.     DETECT = {block='minecraft:red_sandstone',variant=0},
  146.     DETECT_DEAD = {block='minecraft:redstone_block',variant=0},
  147.     VOCAB_DETECT = {block="minecraft:quartz_block",variant=0},
  148.     VOCAB_REPLACE = {block="minecraft:coal_block",variant=0},
  149.     VICTORY_MARKER = {block="minecraft:emerald_block",variant=0},
  150.     PLUG = {block="minecraft:lapis_ore",variant=0},
  151.     PHVFLOOR = {block="minecraft:stone_slab",variant=3},
  152.     BUILDING_HOUSE = {block="minecraft:wool",variant=0},
  153.     BUILDING_GARDEN = {block="minecraft:wool",variant=13},
  154.     BUILDING_WATER = {block="minecraft:wool",variant=1},
  155.     SPAWNZONE_FENCE = {block="minecraft:stained_glass",variant=0},
  156.     _matWhiteSmooth ={block="mincreaft:stained_hardened_clay",variant=0},
  157.     _matWhiteSmooth2 = {block="minecraft:brick_block",variant=0},
  158.     _matYellowSmooth = {block="minecraft:stained_hardened_clay",variant=4},
  159.     _matPinkSmooth = {block="minecraft:stained_hardened_clay",variant=6},
  160.     _matBlueSmooth = {block="minecraft:stained_hardened_clay",variant=9},
  161.     _matPurpleSmooth = {block="minecraft:stained_hardened_clay",variant=10},
  162.     _matWhiteTextured = {block="minecraft:planks",variant=4},
  163.     _matYellowTextured = {block="minecraft:planks",variant=1},
  164.     _matPinkTextured = {block="minecraft:planks",variant=0},
  165.     _matBlueTextured = {block="minecraft:planks",variant=2},
  166.     _matPurpleTextured = {block="minecraft:planks",variant=5}
  167. }
  168.  
  169. os.loadAPI('utils')
  170. os.loadAPI('json')
  171.  
  172. local ox,oy,oz = commands.getBlockPosition()
  173. computer = {
  174.     x = ox,
  175.     y = oy,
  176.     z = oz
  177. }
  178.  
  179.  
  180. -- function to check if settings file exist and if not create it using the default settings in registry
  181. --if settings file exists then read it and change the variables to reflect the settings there
  182. function loadCustomSettings()
  183.     -- does json file exist?
  184.     --local result = nil
  185.     --fs.makeDir("/records")
  186.     local filename = "settings"
  187.     local settings = {}
  188.     if utils.file_exists(filename) then
  189.         ---read from file and change the settings
  190.         settings = json.decodeFromFile(filename)
  191.         --set the settings to the ones found in the file
  192.        
  193.         GRIDCELL_SIZE           = settings.grid_cell_size          
  194.         GRIDCELL_COUNT          = settings.grid_cell_count     
  195.         CATALOGUE_SLOTCOUNT     = settings.catalogue_slot_count
  196.         --PLAY_AREA_OFFSET      = settings.play_area_offset    
  197.         --TRENCHES              = settings.trenches                    
  198.         DO_GRID                 = settings.do_grid             
  199.         GRID_HOLE_CHANCE        = settings.grid_hole_chance    
  200.         --PLUG_LENGTH           = settings.plug_length         
  201.         GAME_FIELD              = settings.game_field          
  202.         BUILDZONE_OFFSET        = settings.buildzone_offset        
  203.         CATALOGUE_SLOTSIZE      = settings.catalogue_slot_size  
  204.         --CATALOGUE_SLOT_OFFSET = settings.catalogue_slot_offset    
  205.         --DEBUG_MODE                = settings.debug_mode          
  206.         ANNOUNCE_ENGLISH        = settings.announce_english    
  207.         ANNOUNCE_GERMAN         = settings.announce_german     
  208.         --SHOW_HIGHSCORES       = settings.show_highscores     
  209.         --CITY_VERSION          = settings.city_version        
  210.         SPAWN_VILLAGER          = settings.spawn_villager          
  211.         --NUMBER_OF_BUILDZONES  = settings.number_of_buildzones
  212.         PHASE_LENGTH_GAME       = settings.phase_length_game       
  213.         PHASE_LENGTH_WAIT       = settings.phase_length_wait       
  214.         PHASE_LENGTH_OVER       = settings.phase_length_over       
  215.         --HOMECOMER_TYPE            = settings.homecomer_type          
  216.         --HOMECOMER_VALUE       = settings.homecomer_value     
  217.         --MAX_PLAYERS_PER_GAME  = settings.max_players_per_game
  218.         --MIN_BUILDINGS             = settings.min_buildings
  219.         --]]           
  220.     else
  221.         --create the file with default settings
  222.         --collect the settings variables in one json object
  223.         settings.grid_cell_size         = GRIDCELL_SIZE
  224.         settings.grid_cell_count        = GRIDCELL_COUNT
  225.         settings.catalogue_slot_count   = CATALOGUE_SLOTCOUNT
  226.         --settings.play_area_offset     = PLAY_AREA_OFFSET
  227.         --settings.trenches             = TRENCHES     
  228.         settings.do_grid                = DO_GRID
  229.         settings.grid_hole_chance       = GRID_HOLE_CHANCE
  230.         --settings.plug_length          = PLUG_LENGTH
  231.         settings.game_field             = GAME_FIELD
  232.         settings.buildzone_offset       = BUILDZONE_OFFSET
  233.         settings.catalogue_slot_size    = CATALOGUE_SLOTSIZE
  234.         --settings.catalogue_slot_offset    = CATALOGUE_SLOT_OFFSET
  235.         --settings.debug_mode           = DEBUG_MODE
  236.         settings.announce_english       = ANNOUNCE_ENGLISH
  237.         settings.announce_german        = ANNOUNCE_GERMAN
  238.         --settings.show_highscores      = SHOW_HIGHSCORES
  239.         --settings.city_version         = CITY_VERSION
  240.         settings.spawn_villager         = SPAWN_VILLAGER
  241.         --settings.number_of_buildzones = NUMBER_OF_BUILDZONES
  242.         settings.phase_length_game      = PHASE_LENGTH_GAME
  243.         settings.phase_length_wait      = PHASE_LENGTH_WAIT
  244.         settings.phase_length_over      = PHASE_LENGTH_OVER
  245.         --settings.homecomer_type           = HOMECOMER_TYPE
  246.         --settings.homecomer_value      = HOMECOMER_VALUE
  247.         --settings.max_players_per_game = MAX_PLAYERS_PER_GAME
  248.         --settings.min_buildings            = MIN_BUILDINGS
  249.         --save the file with settings
  250.         local file = fs.open(filename,"w")
  251.         file.write(json.encodePretty(settings))
  252.         file.close()
  253.     end
  254.    
  255.     return settings
  256. end
  257.  
  258.  
  259. loadCustomSettings()
  260.  
  261.  
  262.  
  263. --- VARIABLES CONSTRUCTED FROM THE SETTINGS ABOVE
  264.  
  265. BUILDZONE_WIDTH = GRIDCELL_SIZE * GRIDCELL_COUNT --
  266. PLUG_LENGTH = math.floor(GRIDCELL_SIZE/3) -- the number of minecraft blocks which the crosses arround each detector block that are made out of plug blocks will expand to
  267.  
  268. --SPAWN related
  269. MAIN_SPAWN_AREA = {
  270.     x = computer.x - math.floor(SPAWNZONE_SIZE/2),
  271.     y = computer.y - 1,
  272.     z = computer.z - math.floor(SPAWNZONE_SIZE/2),
  273.     w = SPAWNZONE_SIZE + PORTAL.SIZE*GAME_FIELD_MAX.countX + PORTAL.OFFSET*(GAME_FIELD_MAX.countX+1),
  274.     l = SPAWNZONE_SIZE,
  275.     h = 3 -- the height of the fence around the spawn zone
  276. }
  277.  
  278.  
  279. PORTALS_LOCATIONS = {} --the coordinates of the 3x3 waitng zones for joining a game that correspond to a buildzone
  280.  
  281. local padx = computer.x + math.floor(SPAWNZONE_SIZE/2) + PORTAL.OFFSET
  282. local pady = computer.y - 1
  283. local padz = computer.z - math.floor(GAME_FIELD_MAX.countZ/2) * PORTAL.OFFSET - math.floor((GAME_FIELD_MAX.countZ/2) * PORTAL.SIZE)
  284. for ix = 0, GAME_FIELD_MAX.countZ - 1 do
  285.     for iz=0, GAME_FIELD_MAX.countZ - 1 do
  286.         local xpos = padx + ix * (PORTAL.OFFSET + PORTAL.SIZE)
  287.         local ypos = pady
  288.         local zpos = padz + iz * (PORTAL.OFFSET + PORTAL.SIZE)             
  289.         --print("making pads", ix, iz, xpos, ypos, zpos)
  290.         table.insert(PORTALS_LOCATIONS,{x=xpos,y=ypos,z=zpos})
  291.     end
  292. end
  293.  
  294. ---CATALOGUE related
  295. --the sizes of any catalogue slot in minecraft blocks
  296. ELEMENT = {
  297.     sizeX = CATALOGUE_SLOTSIZE.x * GRIDCELL_SIZE,
  298.     sizeZ = CATALOGUE_SLOTSIZE.z * GRIDCELL_SIZE
  299. }
  300.  
  301. FIRST_ELEMENT= {
  302.     --x = computer x minus the play are offset x minus 2 times the width (cells*2 + 3)
  303.     x = computer.x - PLAY_AREA_OFFSET.x * GRIDCELL_SIZE - ELEMENT.sizeX - math.floor(GRIDCELL_SIZE/2),
  304.      --computer y
  305.     y = computer.y,
  306.      --computer z + play area offset plus width (cells + 2)
  307.     z = utils.closestGridCoord(computer.z, GRIDCELL_SIZE, computer.z + SPAWNZONE_SIZE/2) + PLAY_AREA_OFFSET.z * GRIDCELL_SIZE + math.floor(GRIDCELL_SIZE/2) + 1
  308. }
  309.  
  310. CATALOG_AREA = {
  311.     x = computer.x - (PLAY_AREA_OFFSET.x - CATALOGUE_SLOT_OFFSET) * GRIDCELL_SIZE - 1 ,
  312.     y = computer.y - 1,
  313.     z = utils.closestGridCoord(computer.z, GRIDCELL_SIZE, computer.z + SPAWNZONE_SIZE/2) + (PLAY_AREA_OFFSET.z - CATALOGUE_SLOT_OFFSET )* GRIDCELL_SIZE + 1,
  314.     dx = - 2 * CATALOGUE_SLOTCOUNT.x * GRIDCELL_SIZE * ( CATALOGUE_SLOTSIZE.x + 1 ) - CATALOGUE_SLOT_OFFSET * GRIDCELL_SIZE * (CATALOGUE_SLOTCOUNT.x+1) +1 ,
  315.     dz = CATALOGUE_SLOTCOUNT.z * GRIDCELL_SIZE * ( CATALOGUE_SLOTSIZE.z + 1 ) + CATALOGUE_SLOT_OFFSET * GRIDCELL_SIZE * (CATALOGUE_SLOTCOUNT.z+1) -1
  316. }
  317. ---
  318. ---
  319. --- PLAY AREA RELATED
  320. --
  321.  
  322. NUMBER_OF_BUILDZONES = GAME_FIELD.countX*GAME_FIELD.countZ -- the number of games that can be active simultaneously
  323.  
  324. --a platfrom encompassing all play areas (number of play areas is defined in GAME_FIELD)
  325. PLAY_AREAS = {
  326.     x= computer.x + (PLAY_AREA_OFFSET.x - CATALOGUE_SLOT_OFFSET) * GRIDCELL_SIZE + 1 ,
  327.     y=computer.y - 1,
  328.     z = utils.closestGridCoord(computer.z, GRIDCELL_SIZE, computer.z + SPAWNZONE_SIZE/2)  + (PLAY_AREA_OFFSET.z - CATALOGUE_SLOT_OFFSET ) * GRIDCELL_SIZE + 1,
  329.     dx = 2 * CATALOGUE_SLOT_OFFSET * GRIDCELL_SIZE + (GRIDCELL_SIZE-1) +  BUILDZONE_WIDTH * GAME_FIELD.countX + (BUILDZONE_OFFSET * GRIDCELL_SIZE)*(GAME_FIELD.countX-1),
  330.     dz = 2 * CATALOGUE_SLOT_OFFSET * GRIDCELL_SIZE + (GRIDCELL_SIZE-1) +  BUILDZONE_WIDTH * GAME_FIELD.countZ + (BUILDZONE_OFFSET * GRIDCELL_SIZE)*(GAME_FIELD.countZ-1)
  331. }
  332.  
  333. FIRST_ZONE = {
  334.     x=computer.x + PLAY_AREA_OFFSET.x * GRIDCELL_SIZE + 1 + math.floor(GRIDCELL_SIZE/2),
  335.     y=computer.y - 1,
  336.     z=utils.closestGridCoord(computer.z, GRIDCELL_SIZE, computer.z + SPAWNZONE_SIZE/2)  + PLAY_AREA_OFFSET.z * GRIDCELL_SIZE + 1 + math.floor(GRIDCELL_SIZE/2),
  337. }
  338.  
  339. -- OLDER STUFF
  340.  
  341.  
  342. SPAWN = {
  343.     x=computer.x-5,
  344.     y=computer.y,
  345.     z=computer.z-5,
  346.     a1=90,
  347.     a2=0
  348.     }
  349.  
  350. DEBUG_ZONE= {
  351.     x=computer.x+2,
  352.     y=computer.y,
  353.     z=computer.z+2
  354.     }
  355.    
  356.    
  357. WAITZONE = {
  358.     x=12093,
  359.     y=56,
  360.     z=-1779,
  361.     w=5,
  362.     l=5
  363. }
  364.  
  365.  
  366.  
  367.  
  368.  
  369. houseNBT = '{Item:{id:minecraft:wool,Damage:0s,tag:{display:{Name:"House Construction Block",Lore:[Place this against a Diamond to build a house]},CanPlaceOn:["'..BLOCKS.BUILDING_HOUSE.block..'","'..BLOCKS.PLUG.block..'","'..BLOCKS.DETECT.block..'"]}}}'
  370. -- {Item:{id:minecraft:wool,Damage:13s,tag:{display:{Name:"Resource 3",Lore:[20000 BLOCKS Resource Item]},CanPlaceOn:["minecraft:sandstone","minecraft:lapis_ore","minecraft:red_sandstone","wool"]}}}
  371. --gardenNBT = '{Item:{id:minecraft:wool,Damage:13s,tag:{display:{Name:"Garden Construction Block",Lore:[Place this against a Diamond to build a pond or pool]},CanPlaceOn:["'..BLOCKS.BUILDING_HOUSE.block..'","'..BLOCKS.PLUG.block..'","'..BLOCKS.DETECT.block..'"]}}}'
  372.  
  373.  
  374. --[[
  375. --call these to return a proper minecraft item string including adventure mode properties
  376. function houseBlock(quant)
  377.     local text =
  378.     BLOCKS.BUILDING_HOUSE.block..' '..quant..' '..BLOCKS.BUILDING_HOUSE.variant..' {display:{Name:"Urban Resource",Lore:[Place this against a Detector to build denser, more urban buildings]},CanPlaceOn:["'..BLOCKS.BUILDING_HOUSE.block..'","'..BLOCKS.PLUG.block..'","'..BLOCKS.DETECT.block..'"]}'
  379.     return text
  380. end
  381.  
  382.  
  383. function gardenBlock(quant)
  384.     local text = BLOCKS.BUILDING_GARDEN.block..' '..quant..' '..BLOCKS.BUILDING_GARDEN.variant..' {display:{Name:"Nature Resource",Lore:[Place this against a Detector to build greener, more open buildings]},CanPlaceOn:["'..BLOCKS.BUILDING_HOUSE.block..'","'..BLOCKS.PLUG.block..'","'..BLOCKS.DETECT.block..'"]}'
  385.     return text
  386. end
  387. --]]
  388.  
  389. --STARTING_ITEMS = {}
  390. --  houseBlock(30), gardenBlock(30),pickaxe
  391. --}
  392. --if the file starting_items doesnt exist then
  393. -- create it with the default ones
  394.  
  395. local default_starting_items = {
  396.     {
  397.         block = "wool",
  398.         variant = 0,
  399.         amount = 16
  400.     },
  401.     {
  402.         block = "wool",
  403.         variant = 13,
  404.         amount = 16
  405.     }
  406. }
  407.  
  408. local default_rewards = {
  409.     {
  410.         block = "wool",
  411.         variant = 13,
  412.         amount = 4
  413.     }
  414. }
  415.  
  416. local CanPlaceOnBlocks = {}
  417. BLOCKS_TO_SWAP = {}
  418.  
  419. function getItems(filename, defaults_table)
  420.     --local filename = "starting_items"
  421.     local result = {}
  422.     local items
  423.     if not utils.file_exists(filename) then
  424.         local file = fs.open(filename,"w")
  425.         file.write(json.encodePretty(defaults_table))
  426.         file.close()
  427.         items = defaults_table
  428.     else
  429.         items = json.decodeFromFile(filename)
  430.     end
  431.     --local startingItemsTable = {}
  432.     for i, item in ipairs(items) do
  433.         if item.block and item.variant and item.amount then
  434.             CanPlaceOnBlocks[item.block] = true
  435.            
  436.             table.insert(result,item)
  437.         end
  438.     end
  439.     return result
  440. end
  441. local resource_counter = 1
  442. function createItemStrings(items)
  443.     local result = {}
  444.     -- convert the starting items table to minecraft strings with the correct PlaceOn tags
  445.     -- all items can be placed on the white grid, the plug, the detector and on themselves
  446.     local blocksList = ''  
  447.     for block in pairs(CanPlaceOnBlocks) do
  448.         blocksList = blocksList..',"'..block..'"'
  449.     end
  450.     for i,item in ipairs(items) do
  451.         --print(item.block)
  452.         --print(item.amount)
  453.         --print(item.variant)
  454.         --print(BLOCKS.WHITE_GRID.block)
  455.         --print(BLOCKS.PLUG.block)
  456.         --print(BLOCKS.DETECT.block)
  457.         --print(blocksList)
  458.         local resource_name = 'Resource_'..resource_counter
  459.         resource_counter = resource_counter + 1
  460.         local _tag = '{display:{Name:"'..resource_name..'",Lore:[20000 BLOCKS Resource Item]},CanPlaceOn:["'..BLOCKS.WHITE_GRID.block..'","'..BLOCKS.PLUG.block..'","'..BLOCKS.DETECT.block..'"'..blocksList..']}'
  461.         local swaptag = '{Item:{id:minecraft:'..item.block..',Damage:'..item.variant..'s,tag:'.._tag..'}}'
  462.         local item_as_string = item.block..' '..item.amount..' '..item.variant..' '.._tag
  463.         table.insert(BLOCKS_TO_SWAP, { block=item.block, variant=item.variant, name=resource_name, minecraft_tag = swaptag } )
  464.         table.insert(result,item_as_string)
  465.     end
  466.     return result
  467. end
  468.  
  469. local _starting_items = getItems("starting_items", default_starting_items)
  470. local _rewards =  getItems("rewards", default_rewards)
  471. STARTING_ITEMS = createItemStrings(_starting_items)
  472. local blocksList = ''  
  473. for block in pairs(CanPlaceOnBlocks) do
  474.     blocksList = blocksList..',"'..block..'"'
  475. end
  476. local pickaxe = 'stone_pickaxe 1 '..131-PICKAXE_USES..' {CanDestroy:['..blocksList:sub(2)..'],display:{Name:"Resource Remover",Lore:[Use the pickaxe to remove up to '..PICKAXE_USES..' resource blocks]}}'
  477. table.insert(STARTING_ITEMS,pickaxe)
  478.  
  479. DEFAULT_REWARDS = createItemStrings(_rewards)
  480.  
  481. --[[
  482. for i, item in ipairs(STARTING_ITEMS) do
  483. table.insert(BLOCKS_TO_SWAP,item)
  484. end
  485. for i, item in ipairs(DEFAULT_REWARDS) do
  486. table.insert(BLOCKS_TO_SWAP,item)
  487. end
  488. --table.insert(BLOCKS_TO_SWAP, unpack(DEFAULT_REWARDS))
  489. --]]
  490. --print(json.encodePretty(BLOCKS_TO_SWAP))
  491.  
  492. for k, v in ipairs(BLOCKS_TO_SWAP) do
  493.     commands.scoreboard("objectives","add","bad_"..v.name,"dummy")
  494. --commands.scoreboard("objectives","add","bad_garden","dummy")
  495. end
  496.  
  497.  
  498. DEFAULT_ELEMENTS_SETTINGS = {
  499.     {element_id=1, element_name="element",reward_emeralds=0,reward_blocks={{block = "minecraft:wool", variant = 0, amount=1},{block = "minecraft:wool", variant = 10, amount=10}}, metric_1=0, metric_2=0, metric_3=0, metric_4=0},
  500.     {element_id=2, element_name="element",reward_emeralds=1,reward_blocks={}, metric_1=0, metric_2=0, metric_3=0, metric_4=0},
  501.     {element_id=3, element_name="element",reward_emeralds=0,reward_blocks={{block = "minecraft:wool", variant = 0, amount=1}}, metric_1=0, metric_2=0, metric_3=0, metric_4=0}
  502. }
  503.  
  504. --- TODO a function to collect the blocks listed in element_settings and starting_items and return them as a list to use for the PlaceOn Tags on all of them
  505.    
  506. ----------------------------------------------------------------------------------------------------------------   
  507. -- the data structure below represents the catalogue of vocabularies as built in minecraft
  508. -- id - is unique for each vocab, starting from 1 going to 40 currently
  509. -- column and row - represent the "physical" location of the vocab model in the catalogue in the minecraft world   
  510. -- nameEN and nameDE - are names for english and german. for now english names must not have spaces, use dashes (-) instead
  511. -- typeEN and typeDE - are the type names, also in english and german such as tech&science spaces
  512. -- height - is how many blocks is this structure tall
  513. -- slots - is how many potential detector stones is this structure occupying as a building, ex. 2 for houses, 3 for corner extenstions, 0 for plazas
  514. -- green - is true or false and is used for easier calculation of the GREENEST GOAL - we dont use this field now and can be removed
  515. -- greenSlots - is how many slots are green and is used for easier calculation of the GREENEST GOAL
  516. VOCABS_DATA = {
  517.     -- urban houses
  518.     {id=1, column=1, row=1,nameEN="SINGLE-FAMILY-HOUSE",nameDE="EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=false, greenSlots=0, rewardUrban=false, rewardCount=4},
  519.     {id=2, column=1, row=2,nameEN="SINGLE-FAMILY-HOUSE",nameDE="EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=false, greenSlots=0, rewardUrban=false, rewardCount=4},
  520.     {id=3, column=1, row=3,nameEN="SINGLE-FAMILY-HOUSE",nameDE="EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=false, greenSlots=0, rewardUrban=false, rewardCount=4},
  521.     {id=4, column=1, row=4,nameEN="SINGLE-FAMILY-HOUSE",nameDE="EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=false, greenSlots=0, rewardUrban=false, rewardCount=4},
  522.     -- urban businesses
  523.     {id=5, column=2, row=1,nameEN="GYM",nameDE="FITNESSSTUDIO", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=false, greenSlots=0, rewardUrban=false, rewardCount=8},
  524.     {id=6, column=2, row=2,nameEN="OFFICE-BUILDING",nameDE="BÜROGEBÄUDE", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=false, greenSlots=0, rewardUrban=false, rewardCount=8},
  525.     {id=7, column=2, row=3,nameEN="HOTEL",nameDE="HOTEL", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=false, greenSlots=0, rewardUrban=false, rewardCount=8},
  526.     {id=8, column=2, row=4 ,nameEN="BANK",nameDE="BANK", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=false, greenSlots=0, rewardUrban=false, rewardCount=8},
  527.     -- urban tech&science spaces
  528.     {id=9, column=3, row=1,nameEN="LIBRARY",nameDE="BIBLIOTHEK", typeEN="TECH & SCIENCE SPACES",typeDE="WISSENSCHAFTSGEBÄUDE",height=16, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=10},
  529.     {id=10, column=3, row=2,nameEN="FABLAB",nameDE="INNOVATIONSZENTRUM", typeEN="TECH & SCIENCE SPACES",typeDE="WISSENSCHAFTSGEBÄUDE",height=16, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=10},
  530.     -- green tech&science spaces
  531.     {id=11, column=3, row=3,nameEN="AQUAPONIC-GREENHOUSE",nameDE="AQUAPONIK-GEWÄCHSHAUS", typeEN="TECH & SCIENCE SPACES",typeDE="WISSENSCHAFTSGEBÄUDE",height=16, slots=1, green=true, greenSlots=1, rewardUrban=true, rewardCount=10},
  532.     {id=12, column=3, row=4,nameEN="SCIENCE-BRIDGE",nameDE="WISSENSCHAFTSBRÜCKE", typeEN="TECH & SCIENCE SPACES",typeDE="WISSENSCHAFTSGEBÄUDE",height=16, slots=1, green=true, greenSlots=1, rewardUrban=true, rewardCount=10},
  533.     -- urban house extensions
  534.     {id=13, column=4, row=1,nameEN="HOUSE-EXTENSION",nameDE="HAUSERWEITERUNG", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=10, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=6},
  535.     {id=14, column=4, row=2,nameEN="HOUSE-EXTENSION",nameDE="HAUSERWEITERUNG", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=10, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=6},
  536.     {id=15, column=4, row=3,nameEN="HOUSE-EXTENSION",nameDE="HAUSERWEITERUNG", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=10, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=6},
  537.     {id=16, column=4, row=4,nameEN="HOUSE-EXTENSION",nameDE="HAUSERWEITERUNG", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=10, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=6},
  538.     --risers
  539.     {id=17, column=5, row=1,nameEN="DOUBLE-FLOOR-RISER",nameDE="VERSCHIEBUNG-ZWEI-HOCH", typeEN="RISERS",typeDE="VERTIKALE VERSCHIEBUNGEN",height=0, slots=0, green=false, greenSlots=0, rewardUrban=true, rewardCount=8},
  540.     {id=18, column=5, row=2,nameEN="SINGLE-FLOOR-RISER",nameDE="VERSCHIEBUNG-EINEN-HOCH", typeEN="RISERS",typeDE="VERTIKALE VERSCHIEBUNGEN",height=0, slots=0, green=false, greenSlots=0, rewardUrban=true, rewardCount=6},
  541.     --plazas
  542.     {id=19, column=5, row=3,nameEN="CITY-PLAZA",nameDE="STÄDTISCHER PLATZ", typeEN="PLAZAS",typeDE="PLÄTZE",height=0, slots=0, green=false, greenSlots=0, rewardUrban=false, rewardCount=2},
  543.     {id=20, column=5, row=4,nameEN="PARK-PLAZA",nameDE="GRÜNER PLATZ", typeEN="PLAZAS",typeDE="PLÄTZE",height=0, slots=0, green=true, greenSlots=1, rewardUrban=true, rewardCount=2},
  544.     --green businesses
  545.     {id=21, column=6, row=1,nameEN="GREEN-GYM",nameDE="GRÜNES FITNESSSTUDIO", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=true, greenSlots=5, rewardUrban=true, rewardCount=8},
  546.     {id=22, column=6, row=2,nameEN="GREEN-OFFICE-BUILDING",nameDE="GRÜNES BÜROGEBÄUDE", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=true, greenSlots=5, rewardUrban=true, rewardCount=8},
  547.     {id=23, column=6, row=3,nameEN="GREEN-HOTEL",nameDE="GRÜNES HOTEL", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=true, greenSlots=5, rewardUrban=true, rewardCount=8},
  548.     {id=24, column=6, row=4,nameEN="GREEN-BANK",nameDE="GRÜNES BANK", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=true, greenSlots=5, rewardUrban=true, rewardCount=8},
  549.     ---green private garden extensions
  550.     {id=25, column=7, row=1,nameEN="HOUSE-GARDEN",nameDE="PRIVATGARTEN", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=0, slots=0, green=true, greenSlots=1, rewardUrban=true, rewardCount=6},
  551.     {id=26, column=7, row=2,nameEN="HOUSE-GARDEN",nameDE="PRIVATGARTEN", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=0, slots=0, green=true, greenSlots=1, rewardUrban=true, rewardCount=6},
  552.     {id=27, column=7, row=3,nameEN="HOUSE-GARDEN",nameDE="PRIVATGARTEN", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=0, slots=0, green=true, greenSlots=1, rewardUrban=true, rewardCount=6},
  553.     {id=28, column=7, row=4,nameEN="HOUSE-GARDEN",nameDE="PRIVATGARTEN", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=0, slots=0, green=true, greenSlots=1, rewardUrban=true, rewardCount=6},
  554.     ---green gathering spaces
  555.     {id=29, column=8, row=1,nameEN="OPEN-AIR-CINEMA",nameDE="FREILUFTKINO", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=true, greenSlots=3, rewardUrban=true, rewardCount=9},
  556.     {id=30, column=8, row=2,nameEN="OPEN-AIR-SWIMMING-POOL",nameDE="FREIBAD", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=true, greenSlots=3, rewardUrban=true, rewardCount=9},
  557.     {id=31, column=8, row=3,nameEN="GREEN-CAFE",nameDE="GRÜNES CAFÉ", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=true, greenSlots=3, rewardUrban=true, rewardCount=9},
  558.     {id=32, column=8, row=4,nameEN="PALM-TREE-HOUSE",nameDE="PALMENGARTEN", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=true, greenSlots=3, rewardUrban=true, rewardCount=9},
  559.     ----urban gathering spaces
  560.     {id=33, column=9, row=1,nameEN="CINEMA",nameDE="KINO", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=false, greenSlots=0, rewardUrban=false, rewardCount=9},
  561.     {id=34, column=9, row=2,nameEN="CONFERENCE-HALL",nameDE="KONFERENZHALLE", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=false, greenSlots=0, rewardUrban=false, rewardCount=9},
  562.     {id=35, column=9, row=3,nameEN="CAFÉ",nameDE="CAFÉ", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=false, greenSlots=0, rewardUrban=false, rewardCount=9},
  563.     {id=36, column=9, row=4,nameEN="ART-GALLERY",nameDE="KUNSTGALERIE", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=false, greenSlots=0, rewardUrban=false, rewardCount=9},
  564.     ---green-roof houses
  565.     {id=37, column=10, row=1,nameEN="GREEN-ROOF-HOUSE",nameDE="GRÜNES EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=true, greenSlots=2, rewardUrban=true, rewardCount=4},
  566.     {id=38, column=10, row=2,nameEN="GREEN-ROOF-HOUSE",nameDE="GRÜNES EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=true, greenSlots=2, rewardUrban=true, rewardCount=4},
  567.     {id=39, column=10, row=3,nameEN="GREEN-ROOF-HOUSE",nameDE="GRÜNES EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=true, greenSlots=2, rewardUrban=true, rewardCount=4},
  568.     {id=40, column=10, row=4,nameEN="GREEN-ROOF-HOUSE",nameDE="GRÜNES EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=true, greenSlots=2, rewardUrban=true, rewardCount=4},
  569. }
  570.    
  571.  
  572. --DEFAULT_REWARD = houseBlock(4)
  573.  
  574. --REWARDS = {}
  575.  
  576. --[[if DEBUG_MODE then
  577.     PHASE_LENGTH_GAME = 12000
  578.     NUMBER_OF_BUILDZONES = 1
  579.     FIRSTZONE = DEBUG_ZONE
  580. end]]
  581.  
  582. function checkRegistryIntegrity()
  583.     print("checking registry...")
  584.     local result = true
  585.     --check the gridcell size = MUST BE ODD NUMBER minimum is 3 maximum is 15
  586.     if GRIDCELL_SIZE < 3 or GRIDCELL_SIZE > 15 or GRIDCELL_SIZE % 2 == 0 then
  587.         -- abort setup and print a message
  588.         term.setTextColor(colors.red)  
  589.        
  590.         print("The grid cell size is:"..GRIDCELL_SIZE )
  591.         print ("The grid cell size must be an odd number between 3 and 15")
  592.         print("allowed settings are: 3, 5, 7, 9, 11, 13 or 15")
  593.         print("change gridcell size in 'settings' and run 'play' again")
  594.  
  595.         term.setTextColor(colors.white)
  596.         result = false
  597.     end
  598.    
  599.     --check the GRIDCELL_COUNT = MUST BE between 5 and 10
  600.     if GRIDCELL_COUNT < 5 or GRIDCELL_COUNT > 20 then
  601.         -- abort setup and print a message
  602.         term.setTextColor(colors.red)  
  603.        
  604.         print("The grid cell count is:"..GRIDCELL_COUNT )
  605.         print ("The grid cell count must be between 5 and 20")
  606.         print("change gridcell count in 'settings' and run 'play' again")
  607.  
  608.         term.setTextColor(colors.white)
  609.         result = false
  610.     end
  611.    
  612.     --check the SPAWNZONE_SIZE = MUST BE 39
  613.     if not SPAWNZONE_SIZE == 39 then
  614.         -- abort setup and print a message
  615.         term.setTextColor(colors.red)  
  616.        
  617.         print("The spawn zone size is:"..SPAWNZONE_SIZE )
  618.         print ("The spawn zone size must be 39")
  619.         print("change spawn zone size in 'registry' and run 'play' again")
  620.  
  621.         term.setTextColor(colors.white)
  622.         result = false
  623.     end
  624.    
  625.    
  626.     --check the PLAY_AREA_OFFSET.z is bigger than the CATALOGUE_SLOT_OFFSET to avoid destrying the computer from the world
  627.     if  PLAY_AREA_OFFSET.z - CATALOGUE_SLOT_OFFSET < 1 or PLAY_AREA_OFFSET.x - CATALOGUE_SLOT_OFFSET < 1 then
  628.         term.setTextColor(colors.red)
  629.         print ("PLAY_AREA_OFFSET.z is:", PLAY_AREA_OFFSET.z)
  630.         print ("PLAY_AREA_OFFSET.x is:", PLAY_AREA_OFFSET.x)
  631.         print ("CATALOGUE_SLOT_OFFSET is:", CATALOGUE_SLOT_OFFSET)
  632.         print("PLAY_AREA_OFFSET.x and PLAY_AREA_OFFSET.z must be bigger with at least 1 than the CATALOGUE_SLOT_OFFSET otherwise the main computer it will be destroyed")
  633.         print("change accordingly in registry and run 'play' again")
  634.         term.setTextColor(colors.white)
  635.         result = false
  636.     end
  637.    
  638.    
  639.     --check the CATALOGUE_SLOTSIZE.x = MUST BE ODD NUMBER minimum is 1 maximum is 3
  640.     if CATALOGUE_SLOTSIZE.x < 1 or CATALOGUE_SLOTSIZE.x > 3 or CATALOGUE_SLOTSIZE.x % 2 == 0 then
  641.         -- abort setup and print a message
  642.         term.setTextColor(colors.red)  
  643.        
  644.         print("The CATALOGUE_SLOTSIZE.x is:"..CATALOGUE_SLOTSIZE.x )
  645.         --print ("The CATALOGUE_SLOTSIZE.x must be an odd number between 1 and 3")
  646.         print("allowed settings are: 1 or 3")
  647.         print("change CATALOGUE_SLOTSIZE.x in registry and run 'play' again")
  648.  
  649.         term.setTextColor(colors.white)
  650.         result = false
  651.     end
  652.     --check the CATALOGUE_SLOTSIZE.z = MUST BE ODD NUMBER minimum is 1 maximum is 3
  653.     if CATALOGUE_SLOTSIZE.z < 1 or CATALOGUE_SLOTSIZE.z > 3 or CATALOGUE_SLOTSIZE.z % 2 == 0 then
  654.         -- abort setup and print a message
  655.         term.setTextColor(colors.red)  
  656.        
  657.         print("The CATALOGUE_SLOTSIZE.z is:"..CATALOGUE_SLOTSIZE.z )
  658.         --print ("The CATALOGUE_SLOTSIZE.z must be an odd number between 1 and 3")
  659.         print("allowed settings are: 1 or 3")
  660.         print("change CATALOGUE_SLOTSIZE.z in registry and run 'play' again")
  661.  
  662.         term.setTextColor(colors.white)
  663.         result = false
  664.     end
  665.    
  666.     --check the CATALOGUE_SLOTSIZE.z = MUST BE ODD NUMBER minimum is 1 maximum is 3
  667.     if GAME_FIELD.countX>3 or GAME_FIELD.countZ>3 or GAME_FIELD.countX<1 or GAME_FIELD.countZ<1 then
  668.         -- abort setup and print a message
  669.         term.setTextColor(colors.red)  
  670.        
  671.         print("The GAME_FIELD is: "..GAME_FIELD.countX.." by "..GAME_FIELD.countZ.." play areas" )
  672.         --print("one game is "..BUILDZONE_WIDTH.." blocks wide/long")
  673.         --print("The total play area is: "..GAME_FIELD.countX*BUILDZONE_WIDTH.." by "..GAME_FIELD.countZ*BUILDZONE_WIDTH )
  674.         print("GAME_FIELD.CountX and GAME_FIELD.CountZ can have the values of 1, 2 or 3")
  675.         print("change in settings and registry and run 'play' again")
  676.  
  677.         term.setTextColor(colors.white)
  678.         result = false
  679.     end
  680.     return result
  681. end
Add Comment
Please, Sign In to add comment