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.mod = "redo"
@ -2223,25 +2223,24 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
clicker:set_wielded_item(item)
end
-- heal health
local hp = self.object:get_hp() + 4
-- increase health
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
minetest.chat_send_player(clicker:get_player_name(),
self.name:split(":")[2]
.. " at full health (" .. tostring(hp) .. ")")
.. " at full health (" .. tostring(self.health) .. ")")
self.htimer = 5
end
end
self.object:set_hp(hp)
self.health = hp
self.object:set_hp(self.health)
update_tag(self)
@ -2255,7 +2254,7 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
-- feed and tame
self.food = (self.food or 0) + 1
if self.food == feed_count then
if self.food >= feed_count then
self.food = 0
@ -2267,6 +2266,12 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
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
if not self.owner or self.owner == "" then

View File

@ -103,4 +103,4 @@ minetest.register_craft({
recipe = {
{"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_with = "air",
on_rightclick = function(self, clicker)
if not mobs:feed_tame(self, clicker, 4, true, true) then
-- Monty Python tribute
local item = clicker:get_wielded_item()
if item:get_name() == "mobs:lava_orb" then
if not minetest.setting_getbool("creative_mode") then
item:take_item()
clicker:set_wielded_item(item)
end
self.object:set_properties({
textures = {"mobs_bunny_evil.png"},
})
self.type = "monster"
self.object:set_hp(20)
return
-- feed or tame
if mobs:feed_tame(self, clicker, 4, true, true) then
return
end
-- Monty Python tribute
local item = clicker:get_wielded_item()
if item:get_name() == "mobs:lava_orb" then
if not minetest.setting_getbool("creative_mode") then
item:take_item()
clicker:set_wielded_item(item)
end
self.object:set_properties({
textures = {"mobs_bunny_evil.png"},
})
self.type = "monster"
self.object:set_hp(20)
return
end
mobs:capture_mob(self, clicker, 30, 50, 80, false, nil)
end,
attack_type = "dogfight",
damage = 5,
})
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,
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)
end,
@ -127,12 +129,12 @@ mobs:register_arrow("mobs:egg_entity", {
end
})
-- snowball throwing item
-- egg throwing item
local egg_GRAVITY = 9
local egg_VELOCITY = 19
-- shoot snowball
-- shoot egg
local mobs_shoot_egg = function (item, player, pointed_thing)
local playerpos = player:getpos()
minetest.sound_play("default_place_node_hard", {

49
cow.lua
View File

@ -51,28 +51,39 @@ mobs:register_mob("mobs:cow", {
replace_with = "air",
fear_height = 2,
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
if tool:get_name() == "bucket:bucket_empty" then
if self.gotten == true
or self.child == true then
return
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
-- feed or tame
if mobs:feed_tame(self, clicker, 8, true, true) then
return
end
local tool = clicker:get_wielded_item()
-- milk cow with empty bucket
if tool:get_name() == "bucket:bucket_empty" then
if self.gotten == true
or self.child == true then
return
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)
end,
})

View File

@ -40,7 +40,9 @@ mobs:register_mob("mobs:kitten", {
follow = {"mobs:rat", "ethereal:fish_raw"},
view_range = 8,
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)
end
})

56
npc.lua
View File

@ -62,35 +62,43 @@ mobs:register_mob("mobs:npc", {
on_rightclick = function(self, clicker)
-- feed to heal npc
if not mobs:feed_tame(self, clicker, 8, true, true) then
local item = clicker:get_wielded_item()
local name = clicker:get_player_name()
if mobs:feed_tame(self, clicker, 8, true, true) then
return
end
-- right clicking with gold lump drops random item from mobs.npc_drops
if 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)]
})
return
local item = clicker:get_wielded_item()
-- right clicking with gold lump drops random item from mobs.npc_drops
if 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)]
})
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
-- if owner switch between follow and stand
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
self.order = "follow"
end
end
mobs:capture_mob(self, clicker, 0, 5, 80, false, nil)
end,
})

View File

@ -104,7 +104,10 @@ for _, col in ipairs(all_colours) do
--are we coloring?
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]
for _,c in pairs(all_colours) do
if c == col then

View File

@ -45,7 +45,9 @@ mobs:register_mob("mobs:pumba", {
punch_end = 100,
},
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)
end,
})