From b5d48c50c2da27fdeeab03db50cc94c158022c37 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Sat, 1 Sep 2012 00:52:41 +0200 Subject: [PATCH] First commit --- README.txt | 38 ++++++++++ init.lua | 146 ++++++++++++++++++++++++++++++++++++ sounds/item_drop_pickup.ogg | Bin 0 -> 4867 bytes 3 files changed, 184 insertions(+) create mode 100644 README.txt create mode 100644 init.lua create mode 100644 sounds/item_drop_pickup.ogg diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..7788bdc --- /dev/null +++ b/README.txt @@ -0,0 +1,38 @@ +===ITEM_DROP MOD for MINETEST-C55=== +by PilzAdam + +Introduction: +This mod adds Minecraft like drop/pick up of items to Minetest. + +How to install: +Unzip the archive an place it in minetest-base-directory/mods/minetest/ +if you have a windows client or a linux run-in-place client. If you have +a linux system-wide instalation place it in ~/.minetest/mods/minetest/. +If you want to install this mod only in one world create the folder +worldmods/ in your worlddirectory. +For further information or help see: +http://wiki.minetest.com/wiki/Installing_Mods + +How to use the mod: +Just install it an everything works. + +License: +Sourcecode: WTFPL (see below) +Sound: WTFPL (see below) + +See also: +http://minetest.net/ + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..c5163c1 --- /dev/null +++ b/init.lua @@ -0,0 +1,146 @@ +function item_drop(pos, oldnode, digger) + local anzahl = 1 + if oldnode.name.items ~= nil then + local drops = {} + local max_items = oldnode.name.max_items + for i,item in ipairs(oldnode.name.items) do + local rarity + if item.rarity == nil then + rarity = 1 + else + rarity = item.rarity + end + if math.random(1, rarity) == 1 then + table.insert(drops, item.items[1]) + end + if #drops == max_items then + for j,it in ipairs(drops) do + item_drop(pos, {name=it}, digger) + end + return + end + end + return + else + if string.find(oldnode.name, " ") ~= nil then + oldnode.name = oldnode.name:gsub('"',""):gsub("craft ",""):gsub("item ",""):gsub("node ","") + anzahl = string.sub(oldnode.name, string.find(oldnode.name, " ")+1, string.len(oldnode.name)) + oldnode.name = string.sub(oldnode.name, 1, string.find(oldnode.name, " ")-1) + end + end + + if oldnode.name == "" then + return + end + + for i=1,anzahl do + if digger:get_inventory():room_for_item("main", ItemStack(oldnode.name)) then + digger:get_inventory():remove_item("main", ItemStack(oldnode.name)) + end + local item = minetest.env:add_item(pos, oldnode) + if item ~= nil then + item:get_luaentity().collect = true + local x = math.random(1, 5) + if math.random(1,2) == 1 then + x = -x + end + local z = math.random(1, 5) + if math.random(1,2) == 1 then + z = -z + end + item:setvelocity({x=1/x, y=item:getvelocity().y, z=1/z}) + end + end +end + +local item_timer = {} + +minetest.register_globalstep(function(dtime) + for i,player in ipairs(minetest.get_connected_players()) do + local pos = player:getpos() + pos.y = pos.y+0.5 + local items = minetest.env:get_objects_inside_radius(pos,1) + for j,item in ipairs(items) do + if not item:is_player() and item:get_luaentity().itemstring ~= nil then + if item:get_luaentity().itemstring ~= "" and player:get_inventory():room_for_item("main", ItemStack(item:get_luaentity().itemstring)) and item:get_luaentity().collect then + player:get_inventory():add_item("main", ItemStack(item:get_luaentity().itemstring)) + minetest.sound_play("item_drop_pickup", { + to_player = player, + }) + item:remove() + item:get_luaentity().itemstring = "" + end + end + end + + items = minetest.env:get_objects_inside_radius(pos, 2) + for j,item in ipairs(items) do + if not item:is_player() and item:get_luaentity().itemstring ~= nil then + if player:get_inventory():room_for_item("main", ItemStack(item:get_luaentity().itemstring)) and item:get_luaentity().collect then + local p = player:getpos() + p.y = p.y+0.5 + local i = item:getpos() + local move = {x=(p.x-i.x)*15, y=(p.y-i.y)*15, z=(p.z-i.z)*15} + item:setacceleration(move) + end + + if item:get_luaentity().collect == nil and item:get_luaentity().itemstring ~= "" then + if item:get_luaentity().timer == nil then + item:get_luaentity().timer = 0 + table.insert(item_timer, item) + end + end + end + end + end + + for i,item in ipairs(item_timer) do + if item:get_luaentity() == nil then + table.remove(item_timer, i) + else + item:get_luaentity().timer = item:get_luaentity().timer + dtime + if item:get_luaentity().timer > 1 then + item:get_luaentity().collect = true + table.remove(item_timer, i) + end + end + end +end) + +minetest.after(0, function() + for name,node in pairs(minetest.registered_nodes) do + local func + if node.drop == nil then + if node.after_dig_node == nil then + func = function(pos, oldnode, oldmetadata, digger) + item_drop(pos, oldnode, digger) + end + else + func = function(pos, oldnode, oldmetadata, digger) + item_drop(pos, oldnode, digger) + end + end + else + if node.after_dig_node == nil then + func = function(pos, oldnode, oldmetadata, digger) + oldnode.name = node.drop + item_drop(pos, oldnode, digger) + end + else + func = function(pos, oldnode, oldmetadata, digger) + oldnode.name = node.drop + item_drop(pos, oldnode, digger) + end + end + end + + local new_node = { + after_dig_node = func, + } + for str,val in pairs(node) do + new_node[str] = val + end + minetest.register_node(":"..new_node.name, new_node) + end +end) + diff --git a/sounds/item_drop_pickup.ogg b/sounds/item_drop_pickup.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f93659bf7106f231c03d339bff8f320c66b3e1c8 GIT binary patch literal 4867 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