diff --git a/mods/esmobs/crossfire.lua b/mods/esmobs/crossfire.lua index b241700b..8213c5b5 100644 --- a/mods/esmobs/crossfire.lua +++ b/mods/esmobs/crossfire.lua @@ -9,6 +9,13 @@ --function (mod_name_here):spawn_specific(name, nodes, neighbors, min_light, max_light, interval, chance, active_object_count, min_height, max_height) --dofile(minetest.get_modpath("crossfiremob").."/api.lua") + +bp.npc_drops = { "default:pick_steel", "esmobs:meat", "default:sword_steel", "default:shovel_steel", "farming:bread", "default:wood" }--Added 20151121 + +bp:register_spawn("esmobs:badnpc", {"default:dirt_with_grass","default:desert_sand","default:sand","default:stonebrick","default:cobble"}, 14, -1, 2000, 3, 31000) +bp:register_spawn("esmobs:goodnpc", {"default:dirt_with_grass", "ethereal:green_dirt","default:grass","default:stonebrick","default:cobble"}, 14, -1, 2000, 3, 31000) +bp:register_spawn("esmobs:normnpc", {"default:dirt_with_grass","default:desert_sand","default:sand","default:stonebrick","default:cobble"}, 14, -1, 1000, 8, 31000) + bp:register_mob("esmobs:goodnpc", { type = "npc", hp_min = 35, @@ -50,6 +57,7 @@ bp:register_mob("esmobs:goodnpc", { sounds = { attack = "default_punch1", }, + --[[ --Maikerumine added hackish follow code on_rightclick = function (self, clicker) bp:face_pos(self,clicker:getpos()) @@ -61,7 +69,74 @@ bp:register_mob("esmobs:goodnpc", { self.follow = true end end - end, + end,]] + + on_rightclick = function(self, clicker) + local item = clicker:get_wielded_item() + if item:get_name() == "esmobs:meat" or item:get_name() == "farming:bread" then + local hp = self.object:get_hp() + if hp + 4 > self.hp_max then return end + if not minetest.setting_getbool("creative_mode") then + item:take_item() + clicker:set_wielded_item(item) + end + self.object:set_hp(hp+4) + + + -- right clicking with gold lump drops random item from mobs.npc_drops + elseif item:get_name() == "default:gold_lump" then + if not minetest.setting_getbool("creative_mode") then + item:take_item() + clicker:set_wielded_item(item) + end + local pos = self.object:getpos() + pos.y = pos.y + 0.5 + minetest.add_item(pos, {name = bp.npc_drops[math.random(1,#bp.npc_drops)]}) + else + if self.owner == "" then + self.owner = clicker:get_player_name() + else + local formspec = "size[8,4]" + formspec = formspec .. "textlist[2.85,0;2.1,0.5;dialog;What can I do for you?]" + formspec = formspec .. "button_exit[1,1;2,2;gfollow;follow]" + formspec = formspec .. "button_exit[5,1;2,2;gstand;stand]" + formspec = formspec .. "button_exit[0,2;4,4;gfandp;follow and protect]" + formspec = formspec .. "button_exit[4,2;4,4;gsandp;stand and protect]" + formspec = formspec .. "button_exit[1,2;2,2;ggohome; go home]" + formspec = formspec .. "button_exit[5,2;2,2;gsethome; sethome]" + minetest.show_formspec(clicker:get_player_name(), "order", formspec) + minetest.register_on_player_receive_fields(function(clicker, formname, fields) + if fields.gfollow then + self.order = "follow" + self.attacks_monsters = false + end + if fields.gstand then + self.order = "stand" + self.attacks_monsters = false + end + if fields.gfandp then + self.order = "follow" + self.attacks_monsters = true + end + if fields.gsandp then + self.order = "stand" + self.attacks_monsters = true + end + if fields.gsethome then + self.floats = self.object:getpos() + end + if fields.ggohome then + if self.floats then + self.order = "stand" + self.object:setpos(self.floats) + end + end + end) + + end + end + end, + attack_type = "dogfight", animation = { @@ -119,7 +194,7 @@ bp:register_mob("esmobs:badnpc", { sounds = { attack = "default_punch3", }, - +--[[ on_rightclick = function (self, clicker) bp:face_pos(self,clicker:getpos()) bp:team_player(self,clicker:getpos()) @@ -130,7 +205,280 @@ bp:register_mob("esmobs:badnpc", { self.follow = true end end + end,]] + on_rightclick = function(self, clicker) + local item = clicker:get_wielded_item() + if item:get_name() == "esmobs:meat" or item:get_name() == "farming:bread" then + local hp = self.object:get_hp() + if hp + 4 > self.hp_max then return end + if not minetest.setting_getbool("creative_mode") then + item:take_item() + clicker:set_wielded_item(item) + end + self.object:set_hp(hp+4) + + + -- right clicking with gold lump drops random item from mobs.npc_drops + elseif item:get_name() == "default:gold_lump" then + if not minetest.setting_getbool("creative_mode") then + item:take_item() + clicker:set_wielded_item(item) + end + local pos = self.object:getpos() + pos.y = pos.y + 0.5 + minetest.add_item(pos, {name = bp.npc_drops[math.random(1,#bp.npc_drops)]}) + else + if self.owner == "" then + self.owner = clicker:get_player_name() + else + local formspec = "size[8,4]" + formspec = formspec .. "textlist[2.85,0;2.1,0.5;dialog;What can I do for you?]" + formspec = formspec .. "button_exit[1,1;2,2;gfollow;follow]" + formspec = formspec .. "button_exit[5,1;2,2;gstand;stand]" + formspec = formspec .. "button_exit[0,2;4,4;gfandp;follow and protect]" + formspec = formspec .. "button_exit[4,2;4,4;gsandp;stand and protect]" + formspec = formspec .. "button_exit[1,2;2,2;ggohome; go home]" + formspec = formspec .. "button_exit[5,2;2,2;gsethome; sethome]" + minetest.show_formspec(clicker:get_player_name(), "order", formspec) + minetest.register_on_player_receive_fields(function(clicker, formname, fields) + if fields.gfollow then + self.order = "follow" + self.attacks_monsters = false + end + if fields.gstand then + self.order = "stand" + self.attacks_monsters = false + end + if fields.gfandp then + self.order = "follow" + self.attacks_monsters = true + end + if fields.gsandp then + self.order = "stand" + self.attacks_monsters = true + end + if fields.gsethome then + self.floats = self.object:getpos() + end + if fields.ggohome then + if self.floats then + self.order = "stand" + self.object:setpos(self.floats) + end + end + end) + + end + end + end, + + animation = { + speed_normal = 30, speed_run = 30, + stand_start = 0, stand_end = 79, + walk_start = 168, walk_end = 187, + run_start = 168, run_end = 187, + punch_start = 200, punch_end = 219, + }, + attacks_monsters = true, + peaceful = true, + group_attack = true, + step = 1, +}) + +--REF CODE FROM PMOBS by CProgrammerRU --https://github.com/CProgrammerRU/progress +--[[ + -- right clicking with cooked meat will give npc more health + on_rightclick = function(self, clicker) + local item = clicker:get_wielded_item() + if item:get_name() == "mobs:meat" or item:get_name() == "farming:bread" then + local hp = self.object:get_hp() + if hp + 4 > self.hp_max then return end + if not minetest.setting_getbool("creative_mode") then + item:take_item() + clicker:set_wielded_item(item) + end + self.object:set_hp(hp+4) + + + -- right clicking with gold lump drops random item from mobs.npc_drops + elseif item:get_name() == "default:gold_lump" then + if not minetest.setting_getbool("creative_mode") then + item:take_item() + clicker:set_wielded_item(item) + end + local pos = self.object:getpos() + pos.y = pos.y + 0.5 + minetest.add_item(pos, {name = mobs.npc_drops[math.random(1,#mobs.npc_drops)]}) + else + if self.owner == "" then + self.owner = clicker:get_player_name() + else + local formspec = "size[8,4]" + formspec = formspec .. "textlist[2.85,0;2.1,0.5;dialog;What can I do for you?]" + formspec = formspec .. "button_exit[1,1;2,2;gfollow;follow]" + formspec = formspec .. "button_exit[5,1;2,2;gstand;stand]" + formspec = formspec .. "button_exit[0,2;4,4;gfandp;follow and protect]" + formspec = formspec .. "button_exit[4,2;4,4;gsandp;stand and protect]" + formspec = formspec .. "button_exit[1,2;2,2;ggohome; go home]" + formspec = formspec .. "button_exit[5,2;2,2;gsethome; sethome]" + minetest.show_formspec(clicker:get_player_name(), "order", formspec) + minetest.register_on_player_receive_fields(function(clicker, formname, fields) + if fields.gfollow then + self.order = "follow" + self.attacks_monsters = false + end + if fields.gstand then + self.order = "stand" + self.attacks_monsters = false + end + if fields.gfandp then + self.order = "follow" + self.attacks_monsters = true + end + if fields.gsandp then + self.order = "stand" + self.attacks_monsters = true + end + if fields.gsethome then + self.floats = self.object:getpos() + end + if fields.ggohome then + if self.floats then + self.order = "stand" + self.object:setpos(self.floats) + end + end + end) + + end + end end, +}) +]] +bp:register_mob("esmobs:normnpc", { + type = "npc", + hp_min = 35, + hp_max = 65, + collisionbox = {-0.3, -1.0, -0.3, 0.3, 0.8, 0.3}, + visual = "mesh", + mesh = "3d_armor_character.x", + textures = {"pink.png", + "3d_armor_trans.png", + minetest.registered_items["default:sword_stone"].inventory_image, + }, + visual_size = {x=1, y=1}, + makes_footstep_sound = true, + view_range = 55, + walk_velocity = 1, + run_velocity = 3, + damage = 2, + sounds = { + war_cry = "mobs_barbarian_yell1", + death = "mobs_barbarian_death", + attack = "default_punch1", + }, + drops = { + {name = "default:apple", + chance = 1, + min = 1, + max = 2,}, + {name = "default:sword_steel", + chance = 2, + min = 0, + max = 1,}, + + }, + armor = 75, + drawtype = "front", + water_damage = 70, + lava_damage = 50, + light_damage = 0, + attack_type = "dogfight", + sounds = { + attack = "default_punch3", + }, +--[[ +--MAIKERUMINE CRAP CODE + on_rightclick = function (self, clicker) + bp:face_pos(self,clicker:getpos()) + bp:team_player(self,clicker:getpos()) + if self.state ~= "path" and self.state ~= "following" then + local_chat(clicker:getpos(),"Mr. Black: Grrrrrrrrrrrr!",3) + if not self.tamed then + self.tamed = true + self.follow = true + end + end + end,]] + +--TENPLUS1 and CProgrammerRU AWESOME CODES. + -- right clicking with cooked meat will give npc more health + on_rightclick = function(self, clicker) + local item = clicker:get_wielded_item() + if item:get_name() == "esmobs:meat" or item:get_name() == "farming:bread" then + local hp = self.object:get_hp() + if hp + 4 > self.hp_max then return end + if not minetest.setting_getbool("creative_mode") then + item:take_item() + clicker:set_wielded_item(item) + end + self.object:set_hp(hp+4) + + + -- right clicking with gold lump drops random item from mobs.npc_drops + elseif item:get_name() == "default:gold_lump" then + if not minetest.setting_getbool("creative_mode") then + item:take_item() + clicker:set_wielded_item(item) + end + local pos = self.object:getpos() + pos.y = pos.y + 0.5 + minetest.add_item(pos, {name = bp.npc_drops[math.random(1,#bp.npc_drops)]}) + else + if self.owner == "" then + self.owner = clicker:get_player_name() + else + local formspec = "size[8,4]" + formspec = formspec .. "textlist[2.85,0;2.1,0.5;dialog;What can I do for you?]" + formspec = formspec .. "button_exit[1,1;2,2;gfollow;follow]" + formspec = formspec .. "button_exit[5,1;2,2;gstand;stand]" + formspec = formspec .. "button_exit[0,2;4,4;gfandp;follow and protect]" + formspec = formspec .. "button_exit[4,2;4,4;gsandp;stand and protect]" + formspec = formspec .. "button_exit[1,2;2,2;ggohome; go home]" + formspec = formspec .. "button_exit[5,2;2,2;gsethome; sethome]" + minetest.show_formspec(clicker:get_player_name(), "order", formspec) + minetest.register_on_player_receive_fields(function(clicker, formname, fields) + if fields.gfollow then + self.order = "follow" + self.attacks_monsters = false + end + if fields.gstand then + self.order = "stand" + self.attacks_monsters = false + end + if fields.gfandp then + self.order = "follow" + self.attacks_monsters = true + end + if fields.gsandp then + self.order = "stand" + self.attacks_monsters = true + end + if fields.gsethome then + self.floats = self.object:getpos() + end + if fields.ggohome then + if self.floats then + self.order = "stand" + self.object:setpos(self.floats) + end + end + end) + + end + end + end, + animation = { speed_normal = 30, speed_run = 30, @@ -146,11 +494,6 @@ bp:register_mob("esmobs:badnpc", { }) - -bp:register_spawn("esmobs:badnpc", {"default:dirt_with_grass","default:desert_sand","default:sand","default:stonebrick","default:cobble"}, 14, -1, 2000, 3, 31000) -bp:register_spawn("esmobs:goodnpc", {"default:dirt_with_grass", "ethereal:green_dirt","default:grass","default:stonebrick","default:cobble"}, 14, -1, 2000, 3, 31000) - - if minetest.setting_get("log_mods") then minetest.log("action", "crossfiremob loaded") -end +end \ No newline at end of file diff --git a/mods/item_drop/README.txt b/mods/item_drop/README.txt new file mode 100644 index 00000000..fe43054d --- /dev/null +++ b/mods/item_drop/README.txt @@ -0,0 +1,42 @@ +===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. + +For developers: +You dont have to use get_drops() anymore because of changes in the +builtin files of minetest. + +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/mods/item_drop/init.lua b/mods/item_drop/init.lua new file mode 100644 index 00000000..e43d9232 --- /dev/null +++ b/mods/item_drop/init.lua @@ -0,0 +1,72 @@ +minetest.register_globalstep(function(dtime) + for _,player in ipairs(minetest.get_connected_players()) do + if player:get_hp() > 0 or not minetest.setting_getbool("enable_damage") then + local pos = player:getpos() + pos.y = pos.y+0.5 + local inv = player:get_inventory() + + for _,object in ipairs(minetest.get_objects_inside_radius(pos, 1)) do + if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then + -- only pick up resting objects, so "q" can be used to drop without immediately picking an item up again + local vel = object:getvelocity() + if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) and math.abs(vel.x) < .2 and math.abs(vel.z) < .2 then + inv:add_item("main", ItemStack(object:get_luaentity().itemstring)) + if object:get_luaentity().itemstring ~= "" then + minetest.sound_play("item_drop_pickup", { + to_player = player:get_player_name(), + gain = 0.4, + }) + end + object:get_luaentity().itemstring = "" + object:remove() + end + end + end + end + end +end) + +function minetest.handle_node_drops(pos, drops, digger) + local inv + if minetest.setting_getbool("creative_mode") and digger and digger:is_player() then + inv = digger:get_inventory() + end + for _,item in ipairs(drops) do + local count, name + if type(item) == "string" then + count = 1 + name = item + else + count = item:get_count() + name = item:get_name() + end + if not inv or not inv:contains_item("main", ItemStack(name)) then + for i=1,count do + local obj = minetest.add_item(pos, name) + if obj ~= nil then + obj: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 + obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z}) + + -- FIXME this doesnt work for deactiveted objects + if minetest.setting_get("remove_items") and tonumber(minetest.setting_get("remove_items")) then + minetest.after(tonumber(minetest.setting_get("remove_items")), function(obj) + obj:remove() + end, obj) + end + end + end + end + end +end + +if minetest.setting_get("log_mods") then + minetest.log("action", "item_drop loaded") +end diff --git a/mods/item_drop/sounds/item_drop_pickup.1.ogg b/mods/item_drop/sounds/item_drop_pickup.1.ogg new file mode 100644 index 00000000..2ae432d5 Binary files /dev/null and b/mods/item_drop/sounds/item_drop_pickup.1.ogg differ diff --git a/mods/item_drop/sounds/item_drop_pickup.2.ogg b/mods/item_drop/sounds/item_drop_pickup.2.ogg new file mode 100644 index 00000000..f58bf08e Binary files /dev/null and b/mods/item_drop/sounds/item_drop_pickup.2.ogg differ diff --git a/mods/item_drop/sounds/item_drop_pickup.3.ogg b/mods/item_drop/sounds/item_drop_pickup.3.ogg new file mode 100644 index 00000000..cf57c94c Binary files /dev/null and b/mods/item_drop/sounds/item_drop_pickup.3.ogg differ diff --git a/mods/item_drop/sounds/item_drop_pickup.4.ogg b/mods/item_drop/sounds/item_drop_pickup.4.ogg new file mode 100644 index 00000000..bfe99d9a Binary files /dev/null and b/mods/item_drop/sounds/item_drop_pickup.4.ogg differ