Tweaked and tidied code, added mob tamed notice
parent
c51b8150fd
commit
fb6867429d
23
api.lua
23
api.lua
|
@ -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
|
||||||
|
|
2
bee.lua
2
bee.lua
|
@ -103,4 +103,4 @@ minetest.register_craft({
|
||||||
recipe = {
|
recipe = {
|
||||||
{"mobs:honey_block"},
|
{"mobs:honey_block"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
40
bunny.lua
40
bunny.lua
|
@ -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)
|
||||||
|
|
|
@ -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
49
cow.lua
|
@ -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,
|
||||||
})
|
})
|
||||||
|
|
|
@ -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
56
npc.lua
|
@ -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,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue