silkworm!
|
@ -10,7 +10,7 @@ petz = {}
|
|||
|
||||
petz.petz_list = {"kitty", "puppy", "ducky", "lamb", "lion", "calf", "panda", --A table with all the petz names
|
||||
"grizzly", "pony", "parrot", "chicken", "piggy", "wolf", "elephant",
|
||||
"elephant_female", "pigeon", "moth", "camel", "clownfish", "bat"}
|
||||
"elephant_female", "pigeon", "moth", "camel", "clownfish", "bat", "silkworn"}
|
||||
|
||||
petz.petz_list_by_owner = {} --a list of tamed petz with owner
|
||||
|
||||
|
@ -47,3 +47,4 @@ assert(loadfile(modpath .. "/api_dam_beaver.lua"))(modpath, S)
|
|||
assert(loadfile(modpath .. "/api_sound.lua"))(modpath, S)
|
||||
assert(loadfile(modpath .. "/api_particles.lua"))(modpath, S)
|
||||
assert(loadfile(modpath .. "/api_whistle.lua"))(modpath, S)
|
||||
assert(loadfile(modpath .. "/api_silk.lua"))(modpath, S)
|
||||
|
|
|
@ -106,6 +106,9 @@ petz.capture = function(self, clicker, put_in_inventory)
|
|||
stack_meta:set_string("pregnant_count", tostring(self.pregnant_count))
|
||||
stack_meta:set_string("genes", minetest.serialize(self.genes))
|
||||
end
|
||||
if self.lay_eggs == true then
|
||||
stack_meta:set_string("eggs_count", tostring(self.eggs_count))
|
||||
end
|
||||
if put_in_inventory == true then
|
||||
local inv = clicker:get_inventory()
|
||||
if inv:room_for_item("main", new_stack) then
|
||||
|
|
|
@ -3,18 +3,22 @@ local modpath, S = ...
|
|||
--Lay Egg
|
||||
petz.lay_egg = function(self)
|
||||
local pos = self.object:get_pos()
|
||||
if math.random(1, petz.settings.lay_egg_chance) == 1 then
|
||||
minetest.add_item(self.object:get_pos(), "petz:"..self.type.."_egg") --chicken egg!
|
||||
end
|
||||
local lay_range = 1
|
||||
local nearby_nodes = minetest.find_nodes_in_area(
|
||||
{x = pos.x - lay_range, y = pos.y - 1, z = pos.z - lay_range},
|
||||
{x = pos.x + lay_range, y = pos.y + 1, z = pos.z + lay_range},
|
||||
"petz:ducky_nest")
|
||||
if #nearby_nodes > 1 then
|
||||
local nest_to_lay = nearby_nodes[math.random(1, #nearby_nodes)]
|
||||
minetest.set_node(nest_to_lay, {name= "petz:"..self.type.."_nest_egg"})
|
||||
end
|
||||
if self.type_of_egg == "item" then
|
||||
if math.random(1, petz.settings.lay_egg_chance) == 1 then
|
||||
minetest.add_item(pos, "petz:"..self.type.."_egg") --chicken/duck egg!
|
||||
end
|
||||
end
|
||||
if self.lay_eggs_in_nest == true then
|
||||
local lay_range = 1
|
||||
local nearby_nodes = minetest.find_nodes_in_area(
|
||||
{x = pos.x - lay_range, y = pos.y - 1, z = pos.z - lay_range},
|
||||
{x = pos.x + lay_range, y = pos.y + 1, z = pos.z + lay_range},
|
||||
"petz:ducky_nest")
|
||||
if #nearby_nodes > 1 then
|
||||
local nest_to_lay = nearby_nodes[math.random(1, #nearby_nodes)]
|
||||
minetest.set_node(nest_to_lay, {name= "petz:"..self.type.."_nest_egg"})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--Extract Egg from a Nest
|
||||
|
|
|
@ -168,12 +168,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
mobkit.clear_queue_low(pet)
|
||||
petz.ownthing(pet)
|
||||
elseif fields.btn_alight then
|
||||
mobkit.clear_queue_low(pet)
|
||||
mobkit.clear_queue_high(pet)
|
||||
if not(mobkit.node_name_in(pet, "below") == "air") then
|
||||
mobkit.animate(pet, "fly")
|
||||
end
|
||||
mobkit.hq_alight(pet, 0)
|
||||
petz.alight(pet)
|
||||
elseif fields.btn_fly then
|
||||
mobkit.clear_queue_low(pet)
|
||||
mobkit.clear_queue_high(pet)
|
||||
|
|
|
@ -69,6 +69,9 @@ petz.load_vars = function(self)
|
|||
if self.milkable == true then
|
||||
self.milked = mobkit.recall(self, "milked") or false
|
||||
end
|
||||
if self.lay_eggs == true then
|
||||
self.eggs_count = mobkit.recall(self, "eggs_count") or 0
|
||||
end
|
||||
--Mobs that can have babies
|
||||
if self.breed == true then
|
||||
self.is_male = mobkit.recall(self, "is_male") or false
|
||||
|
@ -190,7 +193,10 @@ function petz.set_initial_properties(self, staticdata, dtime_s)
|
|||
end
|
||||
end
|
||||
mobkit.remember(self, "genes", self.genes)
|
||||
end
|
||||
end
|
||||
if self.lay_eggs == true then
|
||||
self.eggs_count = mobkit.remember(self, "eggs_count", 0)
|
||||
end
|
||||
--ALL the mobs
|
||||
if not(self.texture_no) then --for piggy, moth... petz with only one texture
|
||||
self.texture_no = 1
|
||||
|
@ -245,6 +251,9 @@ function petz.set_initial_properties(self, staticdata, dtime_s)
|
|||
self.pregnant_count = mobkit.remember(self, "pregnant_count", tonumber(static_data_table["fields"]["pregnant_count"]))
|
||||
self.genes = mobkit.remember(self, "genes", minetest.deserialize(static_data_table["fields"]["genes"]))
|
||||
end
|
||||
if self.lay_eggs == true then
|
||||
self.eggs_count = tonumber(static_data_table["fields"]["eggs_count"])
|
||||
end
|
||||
--ALL the mobs
|
||||
self.texture_no = tonumber(static_data_table["fields"]["texture_no"])
|
||||
self.set_vars = mobkit.remember(self, "set_vars", true)
|
||||
|
|
|
@ -37,3 +37,12 @@ petz.guard = function(self)
|
|||
mobkit.clear_queue_high(self)
|
||||
petz.stand(self)
|
||||
end
|
||||
|
||||
petz.alight = function(self)
|
||||
mobkit.clear_queue_low(self)
|
||||
mobkit.clear_queue_high(self)
|
||||
if not(mobkit.node_name_in(self, "below") == "air") then
|
||||
mobkit.animate(self, "fly")
|
||||
end
|
||||
mobkit.hq_alight(self, 0)
|
||||
end
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
local modpath, S = ...
|
||||
|
||||
petz.init_convert_to_chrysalis = function(self)
|
||||
minetest.after(math.random(1200, 1500), function(self)
|
||||
if not(mobkit.is_alive(self)) then
|
||||
return
|
||||
end
|
||||
local pos = self.object:get_pos()
|
||||
if minetest.get_node(pos) and minetest.get_node(pos).name ~= "air" then
|
||||
return
|
||||
end
|
||||
minetest.set_node(pos, {name= "petz:cocoon"})
|
||||
self.object:remove()
|
||||
end, self)
|
||||
end
|
||||
|
||||
petz.init_lay_eggs = function(self)
|
||||
minetest.after(math.random(150, 240), function(self)
|
||||
if not(mobkit.is_alive(self)) then
|
||||
return
|
||||
end
|
||||
if self.eggs_count > 0 then
|
||||
return
|
||||
end
|
||||
petz.alight(self)
|
||||
minetest.after(10.0, function(self)
|
||||
if not(mobkit.is_alive(self)) then
|
||||
return
|
||||
end
|
||||
local pos = self.object:get_pos()
|
||||
--minetest.chat_send_player("singleplayer", "go")
|
||||
if minetest.get_node(pos) and minetest.get_node(pos).name ~= "air" then
|
||||
return
|
||||
end
|
||||
local node_name = mobkit.node_name_in(self, "below")
|
||||
--minetest.chat_send_player("singleplayer", "node name=".. node_name)
|
||||
local spawn_egg = false
|
||||
--minetest.chat_send_player("singleplayer", string.sub(petz.settings.silkworn_lay_egg_on_node, 1, 5))
|
||||
if string.sub(petz.settings.silkworn_lay_egg_on_node, 1, 5) == "group" then
|
||||
--minetest.chat_send_player("singleplayer", string.sub(petz.settings.silkworn_lay_egg_on_node, 7))
|
||||
local node_group = minetest.get_item_group(node_name, string.sub(petz.settings.silkworn_lay_egg_on_node, 7))
|
||||
if node_group > 0 then
|
||||
spawn_egg = true
|
||||
end
|
||||
else
|
||||
if node_name == petz.settings.silkworn_lay_egg_on_node then
|
||||
spawn_egg = true
|
||||
end
|
||||
end
|
||||
if spawn_egg == true then
|
||||
minetest.set_node(pos, {name= "petz:silkworn_egg"})
|
||||
self.eggs_count = mobkit.remember(self, "eggs_count", (self.eggs_count+1)) --increase the count of eggs
|
||||
end
|
||||
petz.init_lay_eggs(self) --reinit the timer
|
||||
petz.ownthing(self)
|
||||
end, self)
|
||||
end, self)
|
||||
end
|
|
@ -20,6 +20,8 @@ minetest.register_entity("petz:"..pet_name,{
|
|||
can_be_brushed = false,
|
||||
capture_item = "net",
|
||||
lay_eggs = true,
|
||||
lay_eggs_in_nest = true,
|
||||
type_of_egg = "item",
|
||||
follow = petz.settings.chicken_follow,
|
||||
drops = {
|
||||
{name = "petz:raw_chicken", chance = 3, min = 1, max = 1,},
|
||||
|
|
|
@ -20,6 +20,8 @@ minetest.register_entity("petz:"..pet_name,{
|
|||
can_be_brushed = false,
|
||||
capture_item = "net",
|
||||
lay_eggs = true,
|
||||
lay_eggs_in_nest = true,
|
||||
type_of_egg = "item",
|
||||
follow = petz.settings.ducky_follow,
|
||||
drops = {
|
||||
{name = "petz:raw_ducky", chance = 3, min = 1, max = 1,},
|
||||
|
|
|
@ -413,3 +413,20 @@ if minetest.get_modpath("bonemeal") ~= nil then
|
|||
recipe = {"petz:bone"},
|
||||
})
|
||||
end
|
||||
|
||||
--Silk
|
||||
|
||||
minetest.register_craftitem("petz:silk_bobbin", {
|
||||
description = S("Silk Bobbin"),
|
||||
inventory_image = "petz_silk_bobbin.png",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shaped",
|
||||
output = 'petz:silk_bobbin',
|
||||
recipe = {
|
||||
{'petz:cocoon', 'default:stick', 'petz:cocoon'},
|
||||
{'petz:cocoon', 'default:stick', 'petz:cocoon'},
|
||||
{'petz:cocoon', 'default:stick', 'petz:cocoon'},
|
||||
}
|
||||
})
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
mtllib petz_cocoon.mtl
|
||||
o converted_out
|
||||
v 0.0625 -0.5 -0.3125
|
||||
v 0.0625 -0.5 0.375
|
||||
v 0.0625 -0.25 0.375
|
||||
v 0.0625 -0.25 -0.3125
|
||||
v -0.125 -0.5 -0.3125
|
||||
v -0.125 -0.5 0.375
|
||||
v -0.125 -0.25 0.375
|
||||
v -0.125 -0.25 -0.3125
|
||||
usemtl none
|
||||
s off
|
||||
g cocoon
|
||||
f 1 2 3 4
|
||||
f 5 6 7 8
|
||||
f 1 4 8 5
|
||||
f 2 3 7 6
|
||||
f 1 2 6 5
|
||||
f 4 3 7 8
|
|
@ -0,0 +1,49 @@
|
|||
mtllib petz_silkworm_egg.mtl
|
||||
o converted_out
|
||||
v -0 -0.5 0
|
||||
v -0 -0.5 0.0625
|
||||
v -0 -0.4375 0.0625
|
||||
v -0 -0.4375 0
|
||||
v -0.0625 -0.5 0
|
||||
v -0.0625 -0.5 0.0625
|
||||
v -0.0625 -0.4375 0.0625
|
||||
v -0.0625 -0.4375 0
|
||||
v 0.1875 -0.5 -0.0625
|
||||
v 0.1875 -0.5 -3.72529e-08
|
||||
v 0.1875 -0.4375 -3.72529e-08
|
||||
v 0.1875 -0.4375 -0.0625
|
||||
v 0.125 -0.5 -0.0625
|
||||
v 0.125 -0.5 -3.72529e-08
|
||||
v 0.125 -0.4375 -3.72529e-08
|
||||
v 0.125 -0.4375 -0.0625
|
||||
v -0.1875 -0.5 -0.1875
|
||||
v -0.1875 -0.5 -0.125
|
||||
v -0.1875 -0.4375 -0.125
|
||||
v -0.1875 -0.4375 -0.1875
|
||||
v -0.25 -0.5 -0.1875
|
||||
v -0.25 -0.5 -0.125
|
||||
v -0.25 -0.4375 -0.125
|
||||
v -0.25 -0.4375 -0.1875
|
||||
usemtl none
|
||||
s off
|
||||
g egg1
|
||||
f 1 2 3 4
|
||||
f 5 6 7 8
|
||||
f 1 4 8 5
|
||||
f 2 3 7 6
|
||||
f 1 2 6 5
|
||||
f 4 3 7 8
|
||||
g egg2
|
||||
f 9 10 11 12
|
||||
f 13 14 15 16
|
||||
f 9 12 16 13
|
||||
f 10 11 15 14
|
||||
f 9 10 14 13
|
||||
f 12 11 15 16
|
||||
g egg3
|
||||
f 17 18 19 20
|
||||
f 21 22 23 24
|
||||
f 17 20 24 21
|
||||
f 18 19 23 22
|
||||
f 17 18 22 21
|
||||
f 20 19 23 24
|
|
@ -0,0 +1,19 @@
|
|||
mtllib petz_silkworn.mtl
|
||||
o converted_out
|
||||
v 0.0625 -0.5 0
|
||||
v 0.0625 -0.5 0.0625
|
||||
v 0.0625 -0.4375 0.0625
|
||||
v 0.0625 -0.4375 0
|
||||
v -0 -0.5 0
|
||||
v -0 -0.5 0.0625
|
||||
v -0 -0.4375 0.0625
|
||||
v -0 -0.4375 0
|
||||
usemtl none
|
||||
s off
|
||||
g nodebox20
|
||||
f 1 2 3 4
|
||||
f 5 6 7 8
|
||||
f 1 4 8 5
|
||||
f 2 3 7 6
|
||||
f 1 2 6 5
|
||||
f 4 3 7 8
|
|
@ -0,0 +1,289 @@
|
|||
mtllib petz_spinning_wheel.mtl
|
||||
o converted_out
|
||||
v 0.5 -0.3125 -0.1875
|
||||
v 0.5 -0.3125 0.25
|
||||
v 0.5 -0.25 0.25
|
||||
v 0.5 -0.25 -0.1875
|
||||
v -0.5 -0.3125 -0.1875
|
||||
v -0.5 -0.3125 0.25
|
||||
v -0.5 -0.25 0.25
|
||||
v -0.5 -0.25 -0.1875
|
||||
v 0.4375 -0.5 -0.125
|
||||
v 0.4375 -0.5 -0.0625
|
||||
v 0.4375 -0.3125 -0.0625
|
||||
v 0.4375 -0.3125 -0.125
|
||||
v 0.375 -0.5 -0.125
|
||||
v 0.375 -0.5 -0.0625
|
||||
v 0.375 -0.3125 -0.0625
|
||||
v 0.375 -0.3125 -0.125
|
||||
v 0.5 0 0
|
||||
v 0.5 0 0.0625
|
||||
v 0.5 0.4375 0.0625
|
||||
v 0.5 0.4375 0
|
||||
v 0.4375 0 0
|
||||
v 0.4375 0 0.0625
|
||||
v 0.4375 0.4375 0.0625
|
||||
v 0.4375 0.4375 0
|
||||
v 0.5 0.4375 0
|
||||
v 0.5 0.4375 0.0625
|
||||
v 0.5 0.5 0.0625
|
||||
v 0.5 0.5 0
|
||||
v -0.0625002 0.4375 0
|
||||
v -0.0625002 0.4375 0.0625
|
||||
v -0.0625002 0.5 0.0625
|
||||
v -0.0625002 0.5 0
|
||||
v -0 0 0
|
||||
v -0 0 0.0625
|
||||
v -0 0.4375 0.0625
|
||||
v -0 0.4375 0
|
||||
v -0.0625 0 0
|
||||
v -0.0625 0 0.0625
|
||||
v -0.0625 0.4375 0.0625
|
||||
v -0.0625 0.4375 0
|
||||
v 0.5 -0.0625 0
|
||||
v 0.5 -0.0625 0.0625
|
||||
v 0.5 1.49012e-08 0.0625
|
||||
v 0.5 1.49012e-08 0
|
||||
v -0.0625 -0.0625 0
|
||||
v -0.0625 -0.0625 0.0625
|
||||
v -0.0625 1.49012e-08 0.0625
|
||||
v -0.0625 1.49012e-08 0
|
||||
v 0.4375 0.1875 0
|
||||
v 0.4375 0.1875 0.0625
|
||||
v 0.4375 0.25 0.0625
|
||||
v 0.4375 0.25 0
|
||||
v -0 0.1875 0
|
||||
v -0 0.1875 0.0625
|
||||
v -0 0.25 0.0625
|
||||
v -0 0.25 0
|
||||
v 0.25 -0.25 -0.125
|
||||
v 0.25 -0.25 -0.0625
|
||||
v 0.25 0.3125 -0.0625
|
||||
v 0.25 0.3125 -0.125
|
||||
v 0.1875 -0.25 -0.125
|
||||
v 0.1875 -0.25 -0.0625
|
||||
v 0.1875 0.3125 -0.0625
|
||||
v 0.1875 0.3125 -0.125
|
||||
v 0.25 -0.25 0.125
|
||||
v 0.25 -0.25 0.1875
|
||||
v 0.25 0.3125 0.1875
|
||||
v 0.25 0.3125 0.125
|
||||
v 0.1875 -0.25 0.125
|
||||
v 0.1875 -0.25 0.1875
|
||||
v 0.1875 0.3125 0.1875
|
||||
v 0.1875 0.3125 0.125
|
||||
v 0.25 0.1875 -0.0625
|
||||
v 0.25 0.1875 5.58794e-09
|
||||
v 0.25 0.25 5.58794e-09
|
||||
v 0.25 0.25 -0.0625
|
||||
v 0.1875 0.1875 -0.0625
|
||||
v 0.1875 0.1875 5.58794e-09
|
||||
v 0.1875 0.25 5.58794e-09
|
||||
v 0.1875 0.25 -0.0625
|
||||
v 0.25 0.1875 0.0625
|
||||
v 0.25 0.1875 0.125
|
||||
v 0.25 0.25 0.125
|
||||
v 0.25 0.25 0.0625
|
||||
v 0.1875 0.1875 0.0625
|
||||
v 0.1875 0.1875 0.125
|
||||
v 0.1875 0.25 0.125
|
||||
v 0.1875 0.25 0.0625
|
||||
v -0.3125 -0.25 0
|
||||
v -0.3125 -0.25 0.0625
|
||||
v -0.3125 -0.125 0.0625
|
||||
v -0.3125 -0.125 0
|
||||
v -0.375 -0.25 0
|
||||
v -0.375 -0.25 0.0625
|
||||
v -0.375 -0.125 0.0625
|
||||
v -0.375 -0.125 0
|
||||
v -0.25 -0.125 -0.0625
|
||||
v -0.25 -0.125 0.125
|
||||
v -0.25 0.125 0.125
|
||||
v -0.25 0.125 -0.0625
|
||||
v -0.4375 -0.125 -0.0625
|
||||
v -0.4375 -0.125 0.125
|
||||
v -0.4375 0.125 0.125
|
||||
v -0.4375 0.125 -0.0625
|
||||
v -0.3125 0.125 0
|
||||
v -0.3125 0.125 0.0625
|
||||
v -0.3125 0.1875 0.0625
|
||||
v -0.3125 0.1875 0
|
||||
v -0.375 0.125 0
|
||||
v -0.375 0.125 0.0625
|
||||
v -0.375 0.1875 0.0625
|
||||
v -0.375 0.1875 0
|
||||
v 0.25 0.25 0
|
||||
v 0.25 0.25 0.0624999
|
||||
v 0.25 0.4375 0.0624999
|
||||
v 0.25 0.4375 0
|
||||
v 0.1875 0.25 0
|
||||
v 0.1875 0.25 0.0624999
|
||||
v 0.1875 0.4375 0.0624999
|
||||
v 0.1875 0.4375 0
|
||||
v 0.25 0 0
|
||||
v 0.25 0 0.0625
|
||||
v 0.25 0.1875 0.0625
|
||||
v 0.25 0.1875 0
|
||||
v 0.1875 0 0
|
||||
v 0.1875 0 0.0625
|
||||
v 0.1875 0.1875 0.0625
|
||||
v 0.1875 0.1875 0
|
||||
v 0.4375 -0.5 0.125
|
||||
v 0.4375 -0.5 0.1875
|
||||
v 0.4375 -0.3125 0.1875
|
||||
v 0.4375 -0.3125 0.125
|
||||
v 0.375 -0.5 0.125
|
||||
v 0.375 -0.5 0.1875
|
||||
v 0.375 -0.3125 0.1875
|
||||
v 0.375 -0.3125 0.125
|
||||
v -0.375 -0.5 0.125
|
||||
v -0.375 -0.5 0.1875
|
||||
v -0.375 -0.3125 0.1875
|
||||
v -0.375 -0.3125 0.125
|
||||
v -0.4375 -0.5 0.125
|
||||
v -0.4375 -0.5 0.1875
|
||||
v -0.4375 -0.3125 0.1875
|
||||
v -0.4375 -0.3125 0.125
|
||||
v -0.375 -0.5 -0.125
|
||||
v -0.375 -0.5 -0.0625001
|
||||
v -0.375 -0.3125 -0.0625001
|
||||
v -0.375 -0.3125 -0.125
|
||||
v -0.4375 -0.5 -0.125
|
||||
v -0.4375 -0.5 -0.0625001
|
||||
v -0.4375 -0.3125 -0.0625001
|
||||
v -0.4375 -0.3125 -0.125
|
||||
usemtl none
|
||||
s off
|
||||
g nodebox1
|
||||
f 1 2 3 4
|
||||
f 5 6 7 8
|
||||
f 1 4 8 5
|
||||
f 2 3 7 6
|
||||
f 1 2 6 5
|
||||
f 4 3 7 8
|
||||
g nodebox2
|
||||
f 9 10 11 12
|
||||
f 13 14 15 16
|
||||
f 9 12 16 13
|
||||
f 10 11 15 14
|
||||
f 9 10 14 13
|
||||
f 12 11 15 16
|
||||
g nodebox3
|
||||
f 17 18 19 20
|
||||
f 21 22 23 24
|
||||
f 17 20 24 21
|
||||
f 18 19 23 22
|
||||
f 17 18 22 21
|
||||
f 20 19 23 24
|
||||
g nodebox4
|
||||
f 25 26 27 28
|
||||
f 29 30 31 32
|
||||
f 25 28 32 29
|
||||
f 26 27 31 30
|
||||
f 25 26 30 29
|
||||
f 28 27 31 32
|
||||
g nodebox5
|
||||
f 33 34 35 36
|
||||
f 37 38 39 40
|
||||
f 33 36 40 37
|
||||
f 34 35 39 38
|
||||
f 33 34 38 37
|
||||
f 36 35 39 40
|
||||
g nodebox6
|
||||
f 41 42 43 44
|
||||
f 45 46 47 48
|
||||
f 41 44 48 45
|
||||
f 42 43 47 46
|
||||
f 41 42 46 45
|
||||
f 44 43 47 48
|
||||
g nodebox7
|
||||
f 49 50 51 52
|
||||
f 53 54 55 56
|
||||
f 49 52 56 53
|
||||
f 50 51 55 54
|
||||
f 49 50 54 53
|
||||
f 52 51 55 56
|
||||
g nodebox8
|
||||
f 57 58 59 60
|
||||
f 61 62 63 64
|
||||
f 57 60 64 61
|
||||
f 58 59 63 62
|
||||
f 57 58 62 61
|
||||
f 60 59 63 64
|
||||
g nodebox9
|
||||
f 65 66 67 68
|
||||
f 69 70 71 72
|
||||
f 65 68 72 69
|
||||
f 66 67 71 70
|
||||
f 65 66 70 69
|
||||
f 68 67 71 72
|
||||
g nodebox10
|
||||
f 73 74 75 76
|
||||
f 77 78 79 80
|
||||
f 73 76 80 77
|
||||
f 74 75 79 78
|
||||
f 73 74 78 77
|
||||
f 76 75 79 80
|
||||
g nodebox11
|
||||
f 81 82 83 84
|
||||
f 85 86 87 88
|
||||
f 81 84 88 85
|
||||
f 82 83 87 86
|
||||
f 81 82 86 85
|
||||
f 84 83 87 88
|
||||
g nodebox12
|
||||
f 89 90 91 92
|
||||
f 93 94 95 96
|
||||
f 89 92 96 93
|
||||
f 90 91 95 94
|
||||
f 89 90 94 93
|
||||
f 92 91 95 96
|
||||
g nodebox13
|
||||
f 97 98 99 100
|
||||
f 101 102 103 104
|
||||
f 97 100 104 101
|
||||
f 98 99 103 102
|
||||
f 97 98 102 101
|
||||
f 100 99 103 104
|
||||
g nodebox14
|
||||
f 105 106 107 108
|
||||
f 109 110 111 112
|
||||
f 105 108 112 109
|
||||
f 106 107 111 110
|
||||
f 105 106 110 109
|
||||
f 108 107 111 112
|
||||
g nodebox15
|
||||
f 113 114 115 116
|
||||
f 117 118 119 120
|
||||
f 113 116 120 117
|
||||
f 114 115 119 118
|
||||
f 113 114 118 117
|
||||
f 116 115 119 120
|
||||
g nodebox16
|
||||
f 121 122 123 124
|
||||
f 125 126 127 128
|
||||
f 121 124 128 125
|
||||
f 122 123 127 126
|
||||
f 121 122 126 125
|
||||
f 124 123 127 128
|
||||
g nodebox17
|
||||
f 129 130 131 132
|
||||
f 133 134 135 136
|
||||
f 129 132 136 133
|
||||
f 130 131 135 134
|
||||
f 129 130 134 133
|
||||
f 132 131 135 136
|
||||
g nodebox18
|
||||
f 137 138 139 140
|
||||
f 141 142 143 144
|
||||
f 137 140 144 141
|
||||
f 138 139 143 142
|
||||
f 137 138 142 141
|
||||
f 140 139 143 144
|
||||
g nodebox19
|
||||
f 145 146 147 148
|
||||
f 149 150 151 152
|
||||
f 145 148 152 149
|
||||
f 146 147 151 150
|
||||
f 145 146 150 149
|
||||
f 148 147 151 152
|
|
@ -12,6 +12,9 @@ minetest.register_entity("petz:"..pet_name,{
|
|||
init_timer = false,
|
||||
is_pet = false,
|
||||
can_fly = true,
|
||||
lay_eggs = true,
|
||||
lay_eggs_in_nest = false,
|
||||
type_of_egg = "node",
|
||||
max_height = 3,
|
||||
spawn_at_night = true,
|
||||
die_at_daylight = true,
|
||||
|
@ -66,6 +69,7 @@ minetest.register_entity("petz:"..pet_name,{
|
|||
on_activate = function(self, staticdata, dtime_s) --on_activate, required
|
||||
mobkit.actfunc(self, staticdata, dtime_s)
|
||||
petz.set_initial_properties(self, staticdata, dtime_s)
|
||||
petz.init_lay_eggs(self)
|
||||
end,
|
||||
|
||||
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir)
|
||||
|
|
|
@ -154,7 +154,6 @@ minetest.register_node("petz:chicken_nest_egg", {
|
|||
description = S("Chicken Nest with Egg"),
|
||||
inventory_image = "petz_chicken_nest_egg_inv.png",
|
||||
wield_image = "petz_chicken_nest_egg_inv.png",
|
||||
tiles = {"petz_chicken_nest_egg.png"},
|
||||
groups = {snappy=1, bendy=2, cracky=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
paramtype = "light",
|
||||
|
@ -238,8 +237,7 @@ minetest.register_alias("wool:vanilla", "petz:wool_vanilla")
|
|||
--Parrot Stand
|
||||
|
||||
minetest.register_node("petz:bird_stand", {
|
||||
description = S("Bird Stand"),
|
||||
--wield_image = "petz_parrot_stand_inv.png",
|
||||
description = S("Bird Stand"),
|
||||
groups = {snappy=1, bendy=2, cracky=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
paramtype = "light",
|
||||
|
@ -298,3 +296,98 @@ minetest.register_craft({
|
|||
{'', 'default:stick', ''},
|
||||
}
|
||||
})
|
||||
|
||||
--Coocon
|
||||
minetest.register_node("petz:cocoon", {
|
||||
description = S("Silkworn Cocoon"),
|
||||
inventory_image = "petz_cocoon_inv.png",
|
||||
groups = {snappy=1, bendy=2, cracky=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
paramtype = "light",
|
||||
drawtype = "mesh",
|
||||
mesh = 'petz_cocoon.b3d',
|
||||
visual_scale = {x = 0.5, y = 0.5},
|
||||
tiles = {"petz_cocoon.png"},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.125, -0.5, -0.375, 0.0625, -0.25, 0.3125},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.125, -0.5, -0.375, 0.0625, -0.25, 0.3125},
|
||||
},
|
||||
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
||||
|
||||
end,
|
||||
})
|
||||
|
||||
--Silkworn Egg
|
||||
minetest.register_node("petz:silkworn_eggs", {
|
||||
description = S("Silkworn Eggs"),
|
||||
groups = {snappy=1, bendy=2, cracky=1, falling_node = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
paramtype = "light",
|
||||
drawtype = "mesh",
|
||||
mesh = 'petz_silkworn_eggs.b3d',
|
||||
visual_scale = {x = 0.5, y = 0.5},
|
||||
tiles = {"petz_silkworn_eggs.png"},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.25, -0.5, -0.062500, 0.1875, -0.4375, 0.1875},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.25, -0.5, -0.062500, 0.1875, -0.4375, 0.1875},
|
||||
},
|
||||
})
|
||||
|
||||
-- Chance to hatch an egg into a silkworn
|
||||
minetest.register_abm({
|
||||
nodenames = {"petz:silkworn_eggs"},
|
||||
neighbors = {},
|
||||
interval = 300.0, -- Run every 5 minuts
|
||||
chance = 3, -- Select every 1 in 5 nodes
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
if not minetest.registered_entities["petz:silkworn"] then
|
||||
return
|
||||
end
|
||||
if pos then
|
||||
minetest.set_node(pos, {name= "air"})
|
||||
minetest.add_entity(pos, "petz:silkworn")
|
||||
local pos2 = {
|
||||
x = pos.x + 1,
|
||||
y = pos.y,
|
||||
z = pos.z + 1,
|
||||
}
|
||||
if minetest.get_node(pos2) and minetest.get_node(pos2).name == "air" then
|
||||
minetest.add_entity(pos2, "petz:silkworn")
|
||||
end
|
||||
local pos3 = {
|
||||
x = pos.x - 1,
|
||||
y = pos.y,
|
||||
z = pos.z -1,
|
||||
}
|
||||
if minetest.get_node(pos3) and minetest.get_node(pos3).name == "air" then
|
||||
minetest.add_entity(pos3, "petz:silkworn")
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
-- Chance to convert a cocoon into a moth
|
||||
minetest.register_abm({
|
||||
nodenames = {"petz:cocoon"},
|
||||
neighbors = {},
|
||||
interval = 600.0, -- Run every 10 minuts
|
||||
chance = 3, -- Select every 1 in 5 nodes
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
if not minetest.registered_entities["petz:moth"] then
|
||||
return
|
||||
end
|
||||
if pos and petz.is_night() == true then --only spawn at night, to it does not die
|
||||
local mob = minetest.add_entity(pos, "petz:moth")
|
||||
local ent = mob:get_luaentity()
|
||||
minetest.set_node(pos, {name= "air"})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
local modpath, S = ...
|
||||
|
||||
--
|
||||
--Sound System
|
||||
--
|
||||
|
||||
petz.random_mob_sound = function(self)
|
||||
local random_number = math.random(1, petz.settings.misc_sound_chance)
|
||||
if random_number == 1 then
|
||||
if self.sounds and self.sounds['misc'] then
|
||||
petz.mob_sound(self, self.sounds['misc'], 1.0, 10)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- play sound
|
||||
petz.mob_sound = function(self, sound, _gain, _max_hear_distance)
|
||||
if sound then
|
||||
minetest.sound_play(sound, {object = self.object, gain = _gain, max_hear_distance = _max_hear_distance})
|
||||
end
|
||||
end
|
||||
|
||||
petz.do_sound_effect = function(dest, dest_name, soundfile)
|
||||
minetest.sound_play(soundfile, {dest = dest_name, gain = 0.4})
|
||||
end
|
||||
|
||||
petz.set_properties = function(self, properties)
|
||||
self.object:set_properties(properties)
|
||||
end
|
|
@ -68,6 +68,7 @@ elephant_female_spawn = true
|
|||
moth_spawn = true
|
||||
camel_spawn = true
|
||||
bat_spawn = true
|
||||
silkworn_spawn = true
|
||||
|
||||
##Air Damage
|
||||
air_damage = 1
|
||||
|
@ -234,3 +235,10 @@ clownfish_follow = default:coral_orange
|
|||
clownfish_spawn_chance = 1.0
|
||||
clownfish_spawn_nodes = default:water_source
|
||||
clownfish_spawn_biome = default
|
||||
|
||||
##Silkworn Specific
|
||||
silkworn_follow = default:pine_needles
|
||||
silkworn_spawn_chance = 1.0
|
||||
silkworn_spawn_nodes = default:pine_needles
|
||||
silkworn_spawn_biome = default
|
||||
silkworn_lay_egg_on_node = group:leaves
|
||||
|
|
|
@ -175,6 +175,11 @@ petz.settings.bat_spawn = settings:get_bool("bat_spawn", true)
|
|||
petz.settings.bat_spawn_chance = tonumber(settings:get("bat_spawn_chance"))
|
||||
petz.settings.bat_spawn_nodes = settings:get("bat_spawn_nodes", "")
|
||||
petz.settings.bat_spawn_biome = settings:get("bat_spawn_biome", "default")
|
||||
petz.settings.silkworn_spawn = settings:get_bool("silkworn_spawn", true)
|
||||
petz.settings.silkworn_spawn_chance = tonumber(settings:get("silkworn_spawn_chance"))
|
||||
petz.settings.silkworn_spawn_nodes = settings:get("silkworn_spawn_nodes", "")
|
||||
petz.settings.silkworn_spawn_biome = settings:get("silkworn_spawn_biome", "default")
|
||||
petz.settings.silkworn_lay_egg_on_node = settings:get("silkworn_lay_egg_on_node", "")
|
||||
|
||||
if petz.settings.type_model == "mesh" then
|
||||
petz.settings.visual = "mesh"
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
--
|
||||
--SILKWORN
|
||||
--
|
||||
local S = ...
|
||||
|
||||
local pet_name = "silkworn"
|
||||
local scale_model = 0.5
|
||||
local mesh = 'petz_silkworn.b3d'
|
||||
local textures= {"petz_silkworn.png"}
|
||||
local collisionbox = {-0.125, -0.75*scale_model, -0.375, 0.0625, -0.25, 0.3125}
|
||||
|
||||
minetest.register_entity("petz:"..pet_name,{
|
||||
--Petz specifics
|
||||
type = "silkworn",
|
||||
init_timer = false,
|
||||
is_pet = false,
|
||||
has_affinity = false,
|
||||
is_wild = false,
|
||||
give_orders = false,
|
||||
can_be_brushed = false,
|
||||
capture_item = "net",
|
||||
follow = petz.settings.silkworn_follow,
|
||||
drops = {
|
||||
},
|
||||
replace_rate = 10,
|
||||
replace_offset = 0,
|
||||
replace_what = {
|
||||
{"group:leaves", "air", -1},
|
||||
},
|
||||
rotate = petz.settings.rotate,
|
||||
physical = true,
|
||||
stepheight = 0.1, --EVIL!
|
||||
collide_with_objects = true,
|
||||
collisionbox = collisionbox,
|
||||
visual = petz.settings.visual,
|
||||
mesh = mesh,
|
||||
textures = textures,
|
||||
visual_size = {x=petz.settings.visual_size.x*scale_model, y=petz.settings.visual_size.y*scale_model},
|
||||
static_save = true,
|
||||
on_step = mobkit.stepfunc, -- required
|
||||
get_staticdata = mobkit.statfunc,
|
||||
-- api props
|
||||
springiness= 0,
|
||||
buoyancy = 0.5, -- portion of hitbox submerged
|
||||
max_speed = 0.25,
|
||||
jump_height = 1.0,
|
||||
view_range = 10,
|
||||
lung_capacity = 10, -- seconds
|
||||
max_hp = 8,
|
||||
|
||||
attack={range=0.5, damage_groups={fleshy=3}},
|
||||
animation = {
|
||||
walk={range={x=0, y=12}, speed=10, loop=true},
|
||||
run={range={x=0, y=12}, speed=10, loop=true},
|
||||
stand={
|
||||
{range={x=12, y=24}, speed=5, loop=true},
|
||||
{range={x=24, y=31}, speed=5, loop=true},
|
||||
},
|
||||
},
|
||||
sounds = {
|
||||
},
|
||||
|
||||
brainfunc = petz.herbivore_brain,
|
||||
|
||||
on_activate = function(self, staticdata, dtime_s) --on_activate, required
|
||||
mobkit.actfunc(self, staticdata, dtime_s)
|
||||
petz.set_initial_properties(self, staticdata, dtime_s)
|
||||
petz.init_convert_to_chrysalis(self)
|
||||
end,
|
||||
|
||||
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir)
|
||||
petz.on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir)
|
||||
end,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
petz.on_rightclick(self, clicker)
|
||||
end,
|
||||
})
|
||||
|
||||
petz:register_egg("petz:silkworn", S("Silkworn"), "petz_spawnegg_silkworn.png", 0)
|
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 445 B |
After Width: | Height: | Size: 230 B |
After Width: | Height: | Size: 279 B |
After Width: | Height: | Size: 734 B |
After Width: | Height: | Size: 244 B |
After Width: | Height: | Size: 240 B |
After Width: | Height: | Size: 239 B |
After Width: | Height: | Size: 321 B |
After Width: | Height: | Size: 231 B |