Tweaked and tidied code, added mob tamed notice

master
TenPlus1 2016-01-06 11:42:52 +00:00
parent c51b8150fd
commit fb6867429d
9 changed files with 117 additions and 74 deletions

23
api.lua
View File

@ -1,4 +1,4 @@
-- Mobs Api (5th January 2016) -- Mobs Api (6th January 2016)
mobs = {} mobs = {}
mobs.mod = "redo" mobs.mod = "redo"
@ -2223,25 +2223,24 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
clicker:set_wielded_item(item) clicker:set_wielded_item(item)
end end
-- heal health -- increase health
local hp = self.object:get_hp() + 4 self.health = self.health + 4
if hp >= self.hp_max then if self.health >= self.hp_max then
hp = self.hp_max self.health = self.hp_max
if self.htimer < 1 then if self.htimer < 1 then
minetest.chat_send_player(clicker:get_player_name(), minetest.chat_send_player(clicker:get_player_name(),
self.name:split(":")[2] self.name:split(":")[2]
.. " at full health (" .. tostring(hp) .. ")") .. " at full health (" .. tostring(self.health) .. ")")
self.htimer = 5 self.htimer = 5
end end
end end
self.object:set_hp(hp) self.object:set_hp(self.health)
self.health = hp
update_tag(self) update_tag(self)
@ -2255,7 +2254,7 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
-- feed and tame -- feed and tame
self.food = (self.food or 0) + 1 self.food = (self.food or 0) + 1
if self.food == feed_count then if self.food >= feed_count then
self.food = 0 self.food = 0
@ -2267,6 +2266,12 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
if tame then if tame then
if self.tamed == false then
minetest.chat_send_player(clicker:get_player_name(),
self.name:split(":")[2]
.. " has been tamed!")
end
self.tamed = true self.tamed = true
if not self.owner or self.owner == "" then if not self.owner or self.owner == "" then

View File

@ -103,4 +103,4 @@ minetest.register_craft({
recipe = { recipe = {
{"mobs:honey_block"}, {"mobs:honey_block"},
} }
}) })

View File

@ -45,29 +45,39 @@ mobs:register_mob("mobs:bunny", {
replace_what = {"farming:carrot_7", "farming:carrot_8", "farming_plus:carrot"}, replace_what = {"farming:carrot_7", "farming:carrot_8", "farming_plus:carrot"},
replace_with = "air", replace_with = "air",
on_rightclick = function(self, clicker) on_rightclick = function(self, clicker)
if not mobs:feed_tame(self, clicker, 4, true, true) then
-- Monty Python tribute -- feed or tame
local item = clicker:get_wielded_item() if mobs:feed_tame(self, clicker, 4, true, true) then
if item:get_name() == "mobs:lava_orb" then return
if not minetest.setting_getbool("creative_mode") then end
item:take_item()
clicker:set_wielded_item(item) -- Monty Python tribute
end local item = clicker:get_wielded_item()
self.object:set_properties({
textures = {"mobs_bunny_evil.png"}, if item:get_name() == "mobs:lava_orb" then
})
self.type = "monster" if not minetest.setting_getbool("creative_mode") then
self.object:set_hp(20) item:take_item()
return clicker:set_wielded_item(item)
end end
self.object:set_properties({
textures = {"mobs_bunny_evil.png"},
})
self.type = "monster"
self.object:set_hp(20)
return
end end
mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) mobs:capture_mob(self, clicker, 30, 50, 80, false, nil)
end, end,
attack_type = "dogfight", attack_type = "dogfight",
damage = 5, damage = 5,
}) })
mobs:register_spawn("mobs:bunny", {"default:dirt_with_grass", "ethereal:prairie_dirt"}, 20, 10, 15000, 2, 31000) mobs:register_spawn("mobs:bunny", {"default:dirt_with_grass", "ethereal:prairie_dirt"}, 20, 10, 15000, 2, 31000)
mobs:register_egg("mobs:bunny", "Bunny", "mobs_bunny_inv.png", 0) mobs:register_egg("mobs:bunny", "Bunny", "mobs_bunny_inv.png", 0)

View File

@ -48,7 +48,9 @@ mobs:register_mob("mobs:chicken", {
view_range = 5, view_range = 5,
on_rightclick = function(self, clicker) on_rightclick = function(self, clicker)
mobs:feed_tame(self, clicker, 8, true, true) if mobs:feed_tame(self, clicker, 8, true, true) then
return
end
mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) mobs:capture_mob(self, clicker, 30, 50, 80, false, nil)
end, end,
@ -127,12 +129,12 @@ mobs:register_arrow("mobs:egg_entity", {
end end
}) })
-- snowball throwing item -- egg throwing item
local egg_GRAVITY = 9 local egg_GRAVITY = 9
local egg_VELOCITY = 19 local egg_VELOCITY = 19
-- shoot snowball -- shoot egg
local mobs_shoot_egg = function (item, player, pointed_thing) local mobs_shoot_egg = function (item, player, pointed_thing)
local playerpos = player:getpos() local playerpos = player:getpos()
minetest.sound_play("default_place_node_hard", { minetest.sound_play("default_place_node_hard", {

49
cow.lua
View File

@ -51,28 +51,39 @@ mobs:register_mob("mobs:cow", {
replace_with = "air", replace_with = "air",
fear_height = 2, fear_height = 2,
on_rightclick = function(self, clicker) on_rightclick = function(self, clicker)
if not mobs:feed_tame(self, clicker, 8, true, true) then
local tool = clicker:get_wielded_item()
-- milk cow with empty bucket -- feed or tame
if tool:get_name() == "bucket:bucket_empty" then if mobs:feed_tame(self, clicker, 8, true, true) then
if self.gotten == true return
or self.child == true then end
return
end local tool = clicker:get_wielded_item()
local inv = clicker:get_inventory()
inv:remove_item("main", "bucket:bucket_empty") -- milk cow with empty bucket
if inv:room_for_item("main", {name = "mobs:bucket_milk"}) then if tool:get_name() == "bucket:bucket_empty" then
clicker:get_inventory():add_item("main", "mobs:bucket_milk")
else if self.gotten == true
local pos = self.object:getpos() or self.child == true then
pos.y = pos.y + 0.5
minetest.add_item(pos, {name = "mobs:bucket_milk"})
end
self.gotten = true -- milked
return return
end end
end
local inv = clicker:get_inventory()
inv:remove_item("main", "bucket:bucket_empty")
if inv:room_for_item("main", {name = "mobs:bucket_milk"}) then
clicker:get_inventory():add_item("main", "mobs:bucket_milk")
else
local pos = self.object:getpos()
pos.y = pos.y + 0.5
minetest.add_item(pos, {name = "mobs:bucket_milk"})
end
self.gotten = true -- milked
return
end
mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) mobs:capture_mob(self, clicker, 0, 5, 60, false, nil)
end, end,
}) })

View File

@ -40,7 +40,9 @@ mobs:register_mob("mobs:kitten", {
follow = {"mobs:rat", "ethereal:fish_raw"}, follow = {"mobs:rat", "ethereal:fish_raw"},
view_range = 8, view_range = 8,
on_rightclick = function(self, clicker) on_rightclick = function(self, clicker)
mobs:feed_tame(self, clicker, 4, true, true) if mobs:feed_tame(self, clicker, 4, true, true) then
return
end
mobs:capture_mob(self, clicker, 50, 50, 90, false, nil) mobs:capture_mob(self, clicker, 50, 50, 90, false, nil)
end end
}) })

56
npc.lua
View File

@ -62,35 +62,43 @@ mobs:register_mob("mobs:npc", {
on_rightclick = function(self, clicker) on_rightclick = function(self, clicker)
-- feed to heal npc -- feed to heal npc
if not mobs:feed_tame(self, clicker, 8, true, true) then if mobs:feed_tame(self, clicker, 8, true, true) then
local item = clicker:get_wielded_item() return
local name = clicker:get_player_name() end
-- right clicking with gold lump drops random item from mobs.npc_drops local item = clicker:get_wielded_item()
if item:get_name() == "default:gold_lump" then
if not minetest.setting_getbool("creative_mode") then -- right clicking with gold lump drops random item from mobs.npc_drops
item:take_item() if item:get_name() == "default:gold_lump" then
clicker:set_wielded_item(item)
end if not minetest.setting_getbool("creative_mode") then
local pos = self.object:getpos() item:take_item()
pos.y = pos.y + 0.5 clicker:set_wielded_item(item)
minetest.add_item(pos, { end
name = mobs.npc_drops[math.random(1, #mobs.npc_drops)]
}) local pos = self.object:getpos()
return
pos.y = pos.y + 0.5
minetest.add_item(pos, {
name = mobs.npc_drops[math.random(1, #mobs.npc_drops)]
})
return
end
-- capture npc with net or lasso
mobs:capture_mob(self, clicker, 0, 5, 80, false, nil)
-- by right-clicking owner can switch npc between follow and stand
if self.owner and self.owner == clicker:get_player_name() then
if self.order == "follow" then
self.order = "stand"
else else
-- if owner switch between follow and stand self.order = "follow"
if self.owner and self.owner == clicker:get_player_name() then
if self.order == "follow" then
self.order = "stand"
else
self.order = "follow"
end
end
end end
end end
mobs:capture_mob(self, clicker, 0, 5, 80, false, nil)
end, end,
}) })

View File

@ -104,7 +104,10 @@ for _, col in ipairs(all_colours) do
--are we coloring? --are we coloring?
if itemname:find("dye:") then if itemname:find("dye:") then
if self.gotten == false and self.child == false and self.tamed == true and name == self.owner then if self.gotten == false
and self.child == false
and self.tamed == true
and name == self.owner then
local col = string.split(itemname,":")[2] local col = string.split(itemname,":")[2]
for _,c in pairs(all_colours) do for _,c in pairs(all_colours) do
if c == col then if c == col then

View File

@ -45,7 +45,9 @@ mobs:register_mob("mobs:pumba", {
punch_end = 100, punch_end = 100,
}, },
on_rightclick = function(self, clicker) on_rightclick = function(self, clicker)
mobs:feed_tame(self, clicker, 8, true, true) if mobs:feed_tame(self, clicker, 8, true, true) then
return
end
mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
end, end,
}) })