diff --git a/loot_chests.lua b/loot_chests.lua index 3ef07a3..dc95729 100644 --- a/loot_chests.lua +++ b/loot_chests.lua @@ -28,7 +28,6 @@ Everness:register_lbm({ 'everness:cursed_lands_deep_ocean_skull_marker', 'everness:frosted_icesheet_igloo_marker', 'everness:crystal_forest_deep_ocean_ruins_marker', - 'everness:mineral_waters_marker', 'everness:mineral_waters_tower_marker' }, run_at_every_load = true, @@ -55,7 +54,7 @@ Everness:register_lbm({ if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', index, stack) @@ -76,7 +75,7 @@ Everness:register_lbm({ if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', index, stack) @@ -97,7 +96,7 @@ Everness:register_lbm({ if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', index, stack) @@ -118,7 +117,7 @@ Everness:register_lbm({ if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', index, stack) @@ -139,7 +138,7 @@ Everness:register_lbm({ if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', index, stack) @@ -160,7 +159,7 @@ Everness:register_lbm({ if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', index, stack) @@ -181,7 +180,7 @@ Everness:register_lbm({ if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', index, stack) @@ -202,7 +201,7 @@ Everness:register_lbm({ if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', index, stack) @@ -223,7 +222,7 @@ Everness:register_lbm({ if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', index, stack) @@ -244,28 +243,7 @@ Everness:register_lbm({ if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) - end - - inv:set_stack('main', index, stack) - end - elseif node.name == 'everness:mineral_waters_marker' then - -- - -- Mineral Waters - -- - local item_def = Everness.loot_chest.default[rand:next(1, #Everness.loot_chest.default)] - - if not minetest.registered_items[item_def.name] then - return - end - - if rand:next(0, 100) <= item_def.chance then - local stack = ItemStack(item_def.name) - - if minetest.registered_tools[item_def.name] then - stack:set_wear(rand:next(1, 65535)) - else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', index, stack) @@ -286,7 +264,7 @@ Everness:register_lbm({ if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', index, stack) diff --git a/mapgen_mineral_waters.lua b/mapgen_mineral_waters.lua index 2bca417..01324d6 100644 --- a/mapgen_mineral_waters.lua +++ b/mapgen_mineral_waters.lua @@ -181,7 +181,7 @@ local c_everness_mineral_stone_brick_with_flower_growth = minetest.get_content_i local c_everness_mineral_sand = minetest.get_content_id('everness:mineral_sand') local c_everness_mineral_sandstone = minetest.get_content_id('everness:mineral_sandstone') local c_everness_mineral_sandstone_block = minetest.get_content_id('everness:mineral_sandstone_block') -local c_everness_mineral_waters_marker = minetest.get_content_id('everness:mineral_waters_marker') +local c_everness_chest = minetest.get_content_id('everness:chest') local c_everness_mineral_stone_with_coal = minetest.get_content_id('everness:mineral_stone_with_coal') local c_everness_mineral_stone_with_ceramic_sherds = minetest.get_content_id('everness:mineral_stone_with_ceramic_sherds') local c_everness_lotus_flower_white = minetest.get_content_id('everness:lotus_flower_white') @@ -312,6 +312,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed) -- local t0 = os.clock() -- Returns an array containing the biome IDs of nodes in the most recently generated chunk by the current mapgen local biomemap = minetest.get_mapgen_object('biomemap') + local chest_positions = {} -- Above sea level if maxp.y >= y_min and table.indexof(biomemap, biome_id_everness_mineral_waters) ~= -1 then @@ -430,7 +431,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed) data[ai_cub] = c_everness_mineral_water_source end - -- place loot chest marker in the middle of the pool floor + -- place loot chest in the middle of the pool floor if hi == 2 and height > 4 and math.ceil(length / 2) == li @@ -438,7 +439,8 @@ minetest.register_on_generated(function(minp, maxp, blockseed) and data[ai_cub - area.ystride] ~= c_everness_mineral_water_source and rand:next(0, 100) < 3 then - data[ai_cub] = c_everness_mineral_waters_marker + data[ai_cub] = c_everness_chest + table.insert(chest_positions, vector.new(area:position(ai_cub))) end end end @@ -783,7 +785,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed) if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', 1, stack) @@ -812,7 +814,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed) if minetest.registered_tools[item_def.name] then stack:set_wear(rand:next(1, 65535)) else - stack:set_count(rand:next(1, item_def.max_count)) + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) end inv:set_stack('main', 1, stack) @@ -827,6 +829,44 @@ minetest.register_on_generated(function(minp, maxp, blockseed) vm:update_liquids() -- Write what has been created to the world. vm:write_to_map() + + -- Populate loot chest inventory + local chest_def = minetest.registered_nodes['everness:chest'] + + if chest_def then + for i, p in ipairs(chest_positions) do + chest_def.on_construct(p) + + local inv = minetest.get_inventory({ type = 'node', pos = p }) + + if not inv then + minetest.log('action', '[Everness] FAILED to populate loot chests inventory at ' .. p:to_string()) + return + end + + for index, value in ipairs(inv:get_list('main')) do + local item_def = Everness.loot_chest.default[rand:next(1, #Everness.loot_chest.default)] + + if not minetest.registered_items[item_def.name] then + return + end + + if rand:next(0, 100) <= item_def.chance then + local stack = ItemStack(item_def.name) + + if minetest.registered_tools[item_def.name] then + stack:set_wear(rand:next(1, 65535)) + else + stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max()))) + end + + inv:set_stack('main', index, stack) + end + end + + minetest.log('action', '[Everness] Loot chests inventory populated at ' .. p:to_string()) + end + end end -- Print generation time of this mapchunk. diff --git a/nodes.lua b/nodes.lua index 04e342b..89331e7 100644 --- a/nodes.lua +++ b/nodes.lua @@ -2744,16 +2744,6 @@ Everness:register_node('everness:crystal_forest_deep_ocean_ruins_marker', { drop = '' }) -Everness:register_node('everness:mineral_waters_marker', { - drawtype = 'airlike', - description = 'Mineral Waters Marker', - tiles = { 'everness_lootchest_marker_top.png', 'everness_lootchest_marker_side.png' }, - groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, - _mcl_hardness = 0.2, - paramtype2 = 'facedir', - drop = '' -}) - Everness:register_node('everness:mineral_waters_tower_marker', { drawtype = 'airlike', description = 'Mineral Waters Tower Marker',