silkworm!

master
runs 2019-08-14 22:19:00 +02:00
parent 0a486452ab
commit 0e0bd188fa
43 changed files with 689 additions and 52 deletions

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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

58
petz/api_silk.lua Normal file
View File

@ -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

View File

@ -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,},

View File

@ -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,},

View File

@ -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'},
}
})

BIN
petz/models/petz_cocoon.b3d Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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
})

View File

@ -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

View File

@ -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

View File

@ -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"

80
petz/silkworn_mobkit.lua Normal file
View File

@ -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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B