From e0febced46569239dff051c58c62701896d36091 Mon Sep 17 00:00:00 2001 From: LeMagnesium Date: Wed, 22 Apr 2015 14:14:35 +0200 Subject: [PATCH] Changed random selecting to simple 'all dropped' behavior - '?' nodes now drop eveything they have --- mods/eventobjects/init.lua | 76 +++++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 26 deletions(-) diff --git a/mods/eventobjects/init.lua b/mods/eventobjects/init.lua index 3af6cbfb..1bb75b24 100644 --- a/mods/eventobjects/init.lua +++ b/mods/eventobjects/init.lua @@ -18,31 +18,55 @@ minetest.register_node("eventobjects:surprise_node", { tiles = {"eventobjects_surprise_node.png"}, inventory_image = "eventobjects_surprise_node.png", wield_image = "eventobjects_surprise_node.png", -}) - -minetest.after(1,function() - minetest.override_item("eventobjects:surprise_node", { - on_punch = function(pos, node, puncher, pointed_things) - -- Spawn betweek 5 and 20 random nodes - for cnt = 1,math.random(5,20) do - local item = "" - local random_num = math.random(1,#minetest.registered_items)+math.random(-cnt,cnt) - if random_num <= 0 then random_num = 1 end - local random_count = 1 - for key, value in pairs(minetest.registered_items) do - if random_count == random_num then - item = key - break - end - random_count = random_count + 1 + groups = {oddly_breakable_by_hand = 2}, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + meta:set_string("infotext","?") + meta:set_string("formspec", + "size[11,12]" .. + "list[current_name;main;0.45,0.45;10,7;]" .. + "list[current_player;main;1.45,8;8,4;]" + ) + inv:set_size("main",70) + end, + allow_metadata_inventory_put = function(pos, to_list, to_index, stack, player) + if player and minetest.check_player_privs(player:get_player_name(),{server=true}) then + return stack:get_count() + else + return 0 + end + end, + allow_metadata_inventory_take = function(pos, from_list, from_index, stack, player) + print(from_list) + print(from_index) + if player and minetest.check_player_privs(player:get_player_name(),{server=true}) then + return stack:get_count() + else + return 0 + end + end, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + + end, + on_punch = function(pos, node, puncher, pointed_things) + -- Spawn betweek 5 and 20 random nodes + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if inv:is_empty("main") then + minetest.chat_send_player(puncher:get_player_name(),"Cannot spread items, inventory empty") + return + end + for cnt = 1,70 do + local stack = inv:get_stack("main",cnt) + if stack:get_name() ~= "" then + local obj = minetest.spawn_item({x=pos.x, y = pos.y + 1,z=pos.z},stack) + inv:remove_item("main",stack) + if obj then + obj:setvelocity({x = math.random(-0.4,0.4), y = math.random(2,9), z = math.random(-0.4,0.4)}) end - print(table.getn(minetest.registered_items)) - local s_count = math.random(1,minetest.registered_items[item].max_count or 99) - local obj = minetest.spawn_item({x=pos.x, y = pos.y + 1,z=pos.z},{name = item, count = s_count}) - if not obj then return end - obj:setvelocity({x = 0, y = math.random(2,9), z = 0}) end - minetest.remove_node(pos) - end, - }) -end) + end + minetest.remove_node(pos) + end, +})