forked from VoxeLibre/VoxeLibre
Disable mob capture
This commit is contained in:
parent
300b0545b4
commit
6c1a4ec911
|
@ -3365,124 +3365,7 @@ end
|
|||
|
||||
-- capture critter (thanks to blert2112 for idea)
|
||||
function mobs:capture_mob(self, clicker, chance_hand, chance_net, chance_lasso, force_take, replacewith)
|
||||
|
||||
if self.child
|
||||
or not clicker:is_player()
|
||||
or not clicker:get_inventory() then
|
||||
return false
|
||||
end
|
||||
|
||||
-- get name of clicked mob
|
||||
local mobname = self.name
|
||||
|
||||
-- if not nil change what will be added to inventory
|
||||
if replacewith then
|
||||
mobname = replacewith
|
||||
end
|
||||
|
||||
local name = clicker:get_player_name()
|
||||
local tool = clicker:get_wielded_item()
|
||||
|
||||
-- are we using hand, net or lasso to pick up mob?
|
||||
if tool:get_name() ~= ""
|
||||
and tool:get_name() ~= "mobs:net"
|
||||
and tool:get_name() ~= "mobs:lasso" then
|
||||
return false
|
||||
end
|
||||
|
||||
-- is mob tamed?
|
||||
if self.tamed == false
|
||||
and force_take == false then
|
||||
|
||||
minetest.chat_send_player(name, S("Not tamed!"))
|
||||
|
||||
return true -- false
|
||||
end
|
||||
|
||||
-- cannot pick up if not owner
|
||||
if self.owner ~= name
|
||||
and force_take == false then
|
||||
|
||||
minetest.chat_send_player(name, S("@1 is owner!", self.owner))
|
||||
|
||||
return true -- false
|
||||
end
|
||||
|
||||
if clicker:get_inventory():room_for_item("main", mobname) then
|
||||
|
||||
-- was mob clicked with hand, net, or lasso?
|
||||
local chance = 0
|
||||
|
||||
if tool:get_name() == "" then
|
||||
chance = chance_hand
|
||||
|
||||
elseif tool:get_name() == "mobs:net" then
|
||||
|
||||
chance = chance_net
|
||||
|
||||
tool:add_wear(4000) -- 17 uses
|
||||
|
||||
clicker:set_wielded_item(tool)
|
||||
|
||||
elseif tool:get_name() == "mobs:lasso" then
|
||||
|
||||
chance = chance_lasso
|
||||
|
||||
tool:add_wear(650) -- 100 uses
|
||||
|
||||
clicker:set_wielded_item(tool)
|
||||
|
||||
end
|
||||
|
||||
-- calculate chance.. add to inventory if successful?
|
||||
if chance > 0 and random(1, 100) <= chance then
|
||||
|
||||
-- default mob egg
|
||||
local new_stack = ItemStack(mobname)
|
||||
|
||||
-- add special mob egg with all mob information
|
||||
-- unless 'replacewith' contains new item to use
|
||||
if not replacewith then
|
||||
|
||||
new_stack = ItemStack(mobname .. "_set")
|
||||
|
||||
local tmp = {}
|
||||
|
||||
for _,stat in pairs(self) do
|
||||
local t = type(stat)
|
||||
if t ~= "function"
|
||||
and t ~= "nil"
|
||||
and t ~= "userdata" then
|
||||
tmp[_] = self[_]
|
||||
end
|
||||
end
|
||||
|
||||
local data_str = minetest.serialize(tmp)
|
||||
|
||||
new_stack:set_metadata(data_str)
|
||||
end
|
||||
|
||||
local inv = clicker:get_inventory()
|
||||
|
||||
if inv:room_for_item("main", new_stack) then
|
||||
inv:add_item("main", new_stack)
|
||||
else
|
||||
minetest.add_item(clicker:get_pos(), new_stack)
|
||||
end
|
||||
|
||||
self.object:remove()
|
||||
|
||||
mob_sound(self, "default_place_node_hard")
|
||||
|
||||
|
||||
else
|
||||
minetest.chat_send_player(name, S("Missed!"))
|
||||
|
||||
mob_sound(self, "mobs_swing")
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue