master
runs 2019-07-26 04:56:53 +02:00
parent 46fa216356
commit 5f404be9b8
28 changed files with 620 additions and 69 deletions

View File

@ -10,7 +10,7 @@ local creative_mode = minetest.settings:get_bool("creative_mode")
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"}
"elephant_female", "pigeon", "moth", "camel"}
--
--Settings
@ -21,6 +21,7 @@ petz.settings.visual_size = {}
petz.settings.rotate = 0
petz.settings.tamagochi_safe_nodes = {} --Table with safe nodes for tamagochi mode
--
--Form Dialog
--
@ -108,7 +109,7 @@ petz.create_form = function(player_name)
local pregnant_text_y
local infertile_text_x
local infertile_text_y
if pet.type == "pony" then
if pet.is_mountable == true then
pregnant_icon_x = 3
pregnant_icon_y = 5
pregnant_text_x = 4
@ -139,10 +140,14 @@ petz.create_form = function(player_name)
"button_exit[0,6;1,1;btn_alight;"..S("Alight").."]" ..
"button_exit[1,6;1,1;btn_fly;"..S("Fly").."]"..
"button_exit[2,6;2,1;btn_perch_shoulder;"..S("Perch on shoulder").."]"
elseif pet.type == "pony" then
elseif pet.is_mountable == true then
more_form_orders = more_form_orders..
"image[3,4;1,1;petz_pony_velocity_icon.png]"..
"image[3,4;1,1;petz_"..pet.type.."_velocity_icon.png]"..
"label[4,4;".. tostring(pet.max_speed_forward).."/"..tostring(pet.max_speed_reverse)..'/'..tostring(pet.accel).."]"
if pet.has_saddlebag == true and pet.saddlebag == true then
more_form_orders = more_form_orders..
"image_button[5,0;1,1;petz_saddlebag.png;btn_saddlebag;]"
end
end
if pet.give_orders == true then
form_size.h= form_size.h + 4
@ -173,9 +178,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if (formname ~= "petz:form_orders") then
return false
end
local pet = petz.pet[player:get_player_name()]
local player_name = player:get_player_name()
local pet = petz.pet[player_name]
if pet and pet.object then
--brewing.magic_sound("to_player", player, "brewing_select")
if fields.btn_followme then
if not(pet.can_fly) then
mobkit.clear_queue_low(pet)
@ -223,6 +228,22 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
mobkit.remember(pet, "show_tag", pet.show_tag)
elseif fields.btn_dreamcatcher then
petz.drop_dreamcatcher(pet)
elseif fields.btn_saddlebag then
--Load the inventory from the petz
local inv = minetest.get_inventory({ type="detached", name="saddlebag_inventory" })
inv:set_list("saddlebag", {})
if pet.saddlebag_inventory then
for key, value in pairs(pet.saddlebag_inventory) do
inv:set_stack("saddlebag", key, value)
end
end
--Show the inventory:
local formspec = "size[8,8;]"..
"image[3,0;1,1;petz_saddle.png]"..
"label[4,0;"..S("Saddlebag").."]"..
"list[detached:saddlebag_inventory;saddlebag;0,1;8,2;]"..
"list[current_player;main;0,4;8,4;]"
minetest.show_formspec(player_name, "petz:saddlebag_inventory", formspec)
end
if fields.ipt_name then
pet.tag = minetest.formspec_escape(string.sub(fields.ipt_name, 1 , 12))
@ -235,6 +256,52 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end
end)
--On receive fields
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "petz:saddlebag_inventory" then
return false
end
--Save the saddlebag content
local player_name = player:get_player_name()
local ent = petz.pet[player_name]
if ent and ent.object then
local inv = minetest.get_inventory({ type="detached", name="saddlebag_inventory" })
local itemstacks_table = {}
for i = 1, inv:get_size("saddlebag") do
itemstacks_table[i] = inv:get_stack("saddlebag", i):to_table()
end
ent.saddlebag_inventory = itemstacks_table
mobkit.remember(ent, "saddlebag_inventory", itemstacks_table)
end
return true
end)
--Saddlebag detached inventory
local function allow_put(pos, listname, index, stack, player)
return stack:get_count()
end
petz.create_detached_saddlebag_inventory = function(name)
local saddlebag_inventory = minetest.create_detached_inventory(name, {
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
local stack = inv:get_stack(from_list, from_index)
return allow_put(pos, to_list, to_index, stack, player)
end,
allow_put = function(inv, listname, index, stack, player)
return stack:get_count()
end,
allow_take = function(inv, listname, index, stack, player)
return stack:get_count()
end,
})
-- Size and width of saddlebag inventory
saddlebag_inventory:set_size("saddlebag", 16)
saddlebag_inventory:set_width("saddlebag", 8)
end
petz.create_detached_saddlebag_inventory("saddlebag_inventory")
petz.ownthing = function(self)
self.mov_status = "free"
mobkit.hq_roam(self, 0)
@ -452,6 +519,14 @@ petz.genetics_texture = function(self)
else
return 2 --white mutation
end
elseif self.type == "camel" then
if self.genes["gen1"] == 1 or self.genes["gen2"] == 1 then
return 1 --camel
elseif self.genes["gen1"] == 2 or self.genes["gen2"] == 2 then
return 2 --camel dark
else
return 3 --white mutation
end
end
end
@ -462,12 +537,17 @@ petz.load_vars = function(self)
self.food_count_wool = mobkit.recall(self, "food_count_wool") or 0
elseif self.type == "calf" then
self.milked = mobkit.recall(self, "milked") or false
elseif self.type == "pony" then
elseif self.is_mountable == true then
self.saddle = mobkit.recall(self, "saddle") or false
self.saddlebag = mobkit.recall(self, "saddlebag") or false
self.driver = mobkit.recall(self, "driver") or false
self.max_speed_forward = mobkit.recall(self, "max_speed_forward") or 1
self.max_speed_reverse = mobkit.recall(self, "max_speed_reverse") or 1
self.accel = mobkit.recall(self, "accel") or 1
if self.has_saddlebag == true then
--minetest.chat_send_player("singleplayer", "prueba")
self.saddlebag_inventory = mobkit.recall(self, "saddlebag_inventory") or {}
end
elseif self.type == "puppy" then
self.square_ball_attached = false --cos the square ball is detached when die/leave server...
elseif self.type == "wolf" then
@ -536,7 +616,7 @@ function petz.set_initial_properties(self, staticdata, dtime_s)
elseif self.type == "wolf" then
self.wolf_to_puppy_count = petz.settings.wolf_to_puppy_count
mobkit.remember(self, "wolf_to_puppy_count", self.wolf_to_puppy_count)
elseif self.type == "pony" then
elseif self.is_mountable == true then
if baby_born == false then
self.max_speed_forward= math.random(2, 4) --set a random velocity for walk and run
mobkit.remember(self, "max_speed_forward", self.max_speed_forward)
@ -548,6 +628,12 @@ function petz.set_initial_properties(self, staticdata, dtime_s)
self.texture_no = math.random(1, #self.skin_colors) --set a random texture
self.driver = false
mobkit.remember(self, "driver", self.driver)
--Saddlebag
if self.has_saddlebag == true then
self.saddlebag_ref = nil
self.saddlebag_inventory = {}
mobkit.remember(self, "saddlebag_inventory", self.saddlebag_inventory)
end
end
--Mobs that can have babies
if self.breed == true then
@ -588,12 +674,7 @@ function petz.set_initial_properties(self, staticdata, dtime_s)
self.texture_no = petz.genetics_texture(self)
end
else -- mutation
local mutation_gen
if self.type == "lamb" then
mutation_gen= 5 --vanilla
elseif self.type == "elephant" then
mutation_gen = 2 --white
end
local mutation_gen = #self.skin_colors --the last skin is always the mutation
self.genes["gen1"] = mutation_gen --white
self.genes["gen2"] = mutation_gen --white
self.texture_no = mutation_gen -- white
@ -649,7 +730,10 @@ function petz.set_initial_properties(self, staticdata, dtime_s)
elseif self.type == "wolf" then
self.wolf_to_puppy_count = tonumber(static_data_table["fields"]["wolf_to_puppy_count"])
mobkit.remember(self, "wolf_to_puppy_count", self.wolf_to_puppy_count)
elseif self.type == "pony" then
elseif self.is_mountable == true then
self.saddle = petz.to_boolean(static_data_table["fields"]["saddle"])
self.saddlebag = petz.to_boolean(static_data_table["fields"]["saddlebag"])
self.saddlebag_inventory = minetest.deserialize(static_data_table["fields"]["saddlebag_inventory"])
self.max_speed_forward = tonumber(static_data_table["fields"]["max_speed_forward"] )
mobkit.remember(self, "max_speed_forward", self.max_speed_forward)
self.max_speed_reverse = tonumber(static_data_table["fields"]["max_speed_reverse"])
@ -723,11 +807,14 @@ function petz.set_initial_properties(self, staticdata, dtime_s)
shaved_string = "_shaved"
end
texture = "petz_lamb".. shaved_string .."_"..self.skin_colors[self.texture_no]..".png"
elseif self.type == "pony" then
elseif self.is_mountable == true then
if self.saddle then
texture = "petz_pony_"..self.skin_colors[self.texture_no]..".png" .. "^petz_pony_saddle.png"
texture = "petz_"..self.type.."_"..self.skin_colors[self.texture_no]..".png" .. "^petz_"..self.type.."_saddle.png"
else
texture = "petz_pony_"..self.skin_colors[self.texture_no]..".png"
texture = "petz_"..self.type.."_"..self.skin_colors[self.texture_no]..".png"
end
if self.saddlebag then
texture = texture .. "^petz_"..self.type.."_saddlebag.png"
end
else
texture = self.textures[self.texture_no]
@ -737,8 +824,8 @@ function petz.set_initial_properties(self, staticdata, dtime_s)
end
if self.breed == true then
if self.is_pregnant == true then
if self.type == "pony" then
petz.init_pony_pregnancy(self, self.max_speed_forward, self.max_speed_reverse, self.accel)
if self.is_mountable == true then
petz.init_mountable_pregnancy(self, self.max_speed_forward, self.max_speed_reverse, self.accel)
else
petz.init_pregnancy(self)
end
@ -970,7 +1057,10 @@ petz.capture = function(self, clicker, put_in_inventory)
stack_meta:set_string("dreamcatcher", tostring(self.dreamcatcher))
if self.type == 'lamb' then
stack_meta:set_string("shaved", tostring(self.shaved)) --Save if shaved
elseif self.type == 'pony' then
elseif self.is_mountable == true then
stack_meta:set_string("saddle", tostring(self.saddle))
stack_meta:set_string("saddlebag", tostring(self.saddlebag))
stack_meta:set_string("saddlebag_inventory", minetest.serialize(self.saddlebag_inventory))
stack_meta:set_string("max_speed_forward", tostring(self.max_speed_forward))
stack_meta:set_string("max_speed_reverse", tostring(self.max_speed_reverse))
stack_meta:set_string("accel", tostring(self.accel))
@ -1161,6 +1251,79 @@ petz.wolf_to_puppy= function(self, player_name)
end
end
--
-- Mount Engine
--
petz.mount = function(self, clicker)
local wielded_item_name = clicker:get_wielded_item():get_name()
if self.tamed and self.owner == clicker:get_player_name() then
if self.driver and clicker == self.driver then -- detatch player already riding horse
petz.detach(clicker, {x = 1, y = 0, z = 1})
mobkit.clear_queue_low(self)
return false
elseif (self.saddle or self.saddlebag) and wielded_item_name == "petz:shears" then
if self.saddle then
minetest.add_item(self.object:get_pos(), "petz:saddle")
self.saddle = false
mobkit.remember(self, "saddle", self.saddle)
end
if self.saddlebag then
minetest.add_item(self.object:get_pos(), "petz:saddlebag")
self.saddlebag = false
mobkit.remember(self, "saddlebag", self.saddlebag)
end
petz.set_properties(self, {textures = {"petz_"..self.type.."_"..self.skin_colors[self.texture_no]..".png"}})
return false
elseif (not(self.driver) and not(self.is_baby)) and ((wielded_item_name == "petz:saddle") or (wielded_item_name == "petz:saddlebag")) then -- Put on saddle if tamed
local put_saddle = false
if wielded_item_name == "petz:saddle" and not(self.saddle) then
put_saddle = true
elseif wielded_item_name == "petz:saddlebag" and not(self.saddlebag) and not(self.type == "pony") then
put_saddle = true
end
if put_saddle == true then
petz.put_saddle(self, clicker, wielded_item_name)
return false
end
elseif not self.driver and self.saddle then -- Mount petz
petz.set_properties(self, {stepheight = 1.1})
petz.attach(self, clicker)
return false
else
return true
end
else
return true
end
end
petz.put_saddle = function(self, clicker, wielded_item_name)
local saddle_type = ""
local another_saddle = ""
if wielded_item_name == "petz:saddle" then
saddle_type = "saddle"
self.saddle = true
mobkit.remember(self, "saddle", self.saddle)
if self.saddlebag == true then
another_saddle = "^petz_"..self.type.."_saddlebag.png"
end
else
saddle_type = "saddlebag"
self.saddlebag = true
mobkit.remember(self, "saddlebag", self.saddlebag)
if self.saddle == true then
another_saddle = "^petz_"..self.type.."_saddle.png"
end
end
local texture = "petz_"..self.type.."_"..self.skin_colors[self.texture_no]..".png" .. "^petz_"..self.type.."_"..saddle_type..".png"..another_saddle
petz.set_properties(self, {textures = {texture}})
if not minetest.settings:get_bool("creative_mode") then
w:take_item()
clicker:set_wielded_item(w)
end
end
--
--on_rightclick event for all the Mobs
--
@ -1229,7 +1392,7 @@ petz.on_rightclick = function(self, clicker)
elseif self.breed and wielded_item_name == petz.settings[self.type.."_breed"] and not(self.is_baby) and self.type ~= "pony" then
petz.breed(self, clicker, wielded_item, wielded_item_name)
elseif (wielded_item_name == "petz:dreamcatcher") and (self.tamed == true) and (self.is_pet == true) and (self.owner == player_name) then
petz.put_dreamcatcher(self, clicker, wielded_item, wielded_item_name)
petz.put_dreamcatcher(self, clicker, wielded_item, wielded_item_name)
--
--Pet Specifics
--below here
@ -1260,13 +1423,17 @@ petz.on_rightclick = function(self, clicker)
else
minetest.add_item(clicker:get_pos(), new_stack)
end
elseif self.is_mountable == true then
show_form = petz.mount(self, clicker)
--Else open the Form
elseif (self.tamed == true) and (self.is_pet == true) and (self.owner == player_name) then
else
show_form = true
end
if show_form == true then
petz.pet[player_name]= self
minetest.show_formspec(player_name, "petz:form_orders", petz.create_form(player_name))
if (self.tamed == true) and (self.is_pet == true) and (self.owner == player_name) then
petz.pet[player_name]= self
minetest.show_formspec(player_name, "petz:form_orders", petz.create_form(player_name))
end
end
end
@ -1339,7 +1506,7 @@ petz.pony_breed = function(self, clicker, wielded_item, wielded_item_name)
local max_speed_forward = meta:get_int("max_speed_forward")
local max_speed_reverse = meta:get_int("max_speed_reverse")
local accel = meta:get_int("accel")
petz.init_pony_pregnancy(self, max_speed_forward, max_speed_reverse, accel)
petz.init_mountable_pregnancy(self, max_speed_forward, max_speed_reverse, accel)
petz.do_particles_effect(self.object, self.object:get_pos(), "pregnant".."_"..self.type)
end
clicker:set_wielded_item("petz:glass_syringe")
@ -1393,7 +1560,7 @@ petz.init_pregnancy = function(self, father)
end, self, father)
end
petz.init_pony_pregnancy = function(self, max_speed_forward, max_speed_reverse, accel)
petz.init_mountable_pregnancy = function(self, max_speed_forward, max_speed_reverse, accel)
minetest.after(petz.settings.pregnancy_time, function(self, max_speed_forward, max_speed_reverse, accel)
if not(self.object:get_pos() == nil) then
local baby_entity = petz.childbirth(self)
@ -1448,10 +1615,27 @@ end
petz.on_die = function(self)
--Specific of each mob
if self.type == "pony" then
if self.saddle then -- drop saddle when horse is killed while riding
if self.is_mountable == true then
if self.saddle then -- drop saddle when petz is killed while riding
minetest.add_item(self.object:get_pos(), "petz:saddle")
end
if self.saddlebag then -- drop saddlebag
minetest.add_item(self.object:get_pos(), "petz:saddlebag")
end
-- Drop the items from petz inventory
local inv = minetest.get_inventory({ type="detached", name="saddlebag_inventory" })
inv:set_list("saddlebag", {})
if self.saddlebag_inventory then
for key, value in pairs(self.saddlebag_inventory) do
inv:set_stack("saddlebag", key, value)
end
for i = 1, inv:get_size("saddlebag") do
local stack = inv:get_stack("saddlebag", i)
if stack:get_count() > 0 then
minetest.item_drop(stack, self.object, self.object:get_pos())
end
end
end
elseif self.type == "puppy" then
if self.square_ball_attached == true and self.attached_squared_ball then
self.attached_squared_ball.object:set_detach()
@ -1525,6 +1709,11 @@ petz.do_particles_effect = function(obj, pos, particle_type)
elseif particle_type == "pregnant_lamb" then
texture_name = "petz_lamb_pregnant_icon.png"
particles_amount = 10
min_size = 5.0
max_size = 6.0
elseif particle_type == "pregnant_camel" then
texture_name = "petz_camel_pregnant_icon.png"
particles_amount = 10
min_size = 5.0
max_size = 6.0
elseif particle_type == "dreamcatcher" then
@ -1861,3 +2050,6 @@ minetest.register_entity("petz:ent_square_ball", {
self.old_pos = pos
end,
})

View File

@ -108,7 +108,8 @@ function petz.herbivore_brain(self)
couple = couple_obj:get_luaentity()
if couple and couple.is_rut == true and couple.is_pregnant == false and couple.is_male == false then --if couple and female and is not pregnant and is rut
local couple_pos = couple.object:get_pos() --get couple pos
if vector.distance(pos, couple_pos) <= petz.settings[self.type.."_copulation_distance"] then --if close
local copulation_distance = petz.settings[self.type.."_copulation_distance"] or 1
if vector.distance(pos, couple_pos) <= copulation_distance then --if close
--Changue some vars
self.is_rut = false
mobkit.remember(self, "is_rut", self.is_rut)

112
petz/camel_mobkit.lua Normal file
View File

@ -0,0 +1,112 @@
--
--CAMEL
--
local S = ...
local pet_name = "camel"
local scale_model = 1.8
local visual_size = {x=petz.settings.visual_size.x*scale_model, y=petz.settings.visual_size.y*scale_model}
local scale_baby = 0.5
local visual_size_baby = {x=petz.settings.visual_size.x*scale_model*scale_baby, y=petz.settings.visual_size.y*scale_model*scale_baby}
petz.camel = {}
local mesh = 'petz_camel.b3d'
local skin_colors = {"camel", "dark_camel", "white"}
local textures = {}
for n = 1, #skin_colors do
textures[n] = "petz_"..pet_name.."_"..skin_colors[n]..".png"
end
local textures_baby = {"petz_camel_baby.png"}
local collisionbox = {-0.75, -0.75*scale_model, -0.75, 0.5, 0.30, 0.5}
local collisionbox_baby = {-0.5*scale_baby, -0.75*scale_model*scale_baby, -0.25, 0.375, -0.375, 0.375}
minetest.register_entity("petz:"..pet_name, {
--Petz specifics
type = pet_name,
is_mountable = true,
has_saddlebag = true,
init_timer = true,
is_pet = true,
has_affinity = true,
breed = true,
is_wild = false,
give_orders = true,
can_be_brushed = true,
capture_item = "lasso",
--Camel specific
terrain_type = 3,
scale_model = scale_model,
scale_baby =scale_baby,
driver_scale = {x = 1/visual_size.x, y = 1/visual_size.y},
driver_attach_at = {x = 0.0625, y = 0.25, z = -0.3},
driver_eye_offset = {x = 0, y = 0, z = 0},
pregnant_count = 5,
follow = petz.settings.camel_follow,
drops = {
{name = "petz:bone", chance = 6, min = 1, max = 1,},
},
rotate = petz.settings.rotate,
physical = true,
stepheight = 0.1, --EVIL!
collide_with_objects = true,
collisionbox = collisionbox,
collisionbox_baby = collisionbox_baby,
visual = petz.settings.visual,
mesh = mesh,
textures = textures,
skin_colors = skin_colors,
skin_color_mutation = {"vanilla"},
visual_size = visual_size,
visual_size_baby = visual_size_baby,
static_save = true,
get_staticdata = mobkit.statfunc,
-- api props
springiness= 0,
buoyancy = 0.5, -- portion of hitbox submerged
max_speed = 2,
jump_height = 2.0,
view_range = 10,
lung_capacity = 10, -- seconds
max_hp = 15,
makes_footstep_sound = false,
attack={range=0.5, damage_groups={fleshy=3}},
animation = {
walk={range={x=1, y=12}, speed=20, loop=true},
run={range={x=13, y=25}, speed=20, loop=true},
stand={
{range={x=26, y=46}, speed=5, loop=true},
{range={x=47, y=59}, speed=5, loop=true},
},
},
sounds = {
misc = "petz_camel_neigh",
moaning = "petz_camel_moaning",
},
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)
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,
on_step = function(self, dtime)
petz.init_timer(self)
if self.driver then
petz.drive(self, "walk", "stand", false, dtime) -- if driver present allow control of camel
else
mobkit.stepfunc(self, dtime) -- required
end
end,
})
petz:register_egg("petz:camel", S("Camel"), "petz_spawnegg_camel.png", 0)

View File

@ -317,6 +317,22 @@ minetest.register_craft({
}
})
minetest.register_craftitem("petz:saddlebag", {
description = S("Saddlebag"),
inventory_image = "petz_saddlebag.png",
groups = {flammable = 2},
})
minetest.register_craft({
type = "shaped",
output = "petz:saddlebag",
recipe = {
{"petz:leather", "petz:leather", "petz:leather"},
{"petz:leather", "", "petz:leather"},
{"petz:leather", "petz:leather", "petz:leather"},
}
})
--Bone
minetest.register_craftitem("petz:bone", {
description = S("Bone"),

BIN
petz/models/petz_camel.b3d Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

244
petz/models/petz_camel.obj Normal file
View File

@ -0,0 +1,244 @@
mtllib petz_camel.mtl
o converted_out
v 0.1875 0.1875 -0.375
v 0.1875 0.1875 -0.1875
v 0.1875 0.375 -0.1875
v 0.1875 0.375 -0.375
v -0.0625 0.1875 -0.375
v -0.0625 0.1875 -0.1875
v -0.0625 0.375 -0.1875
v -0.0625 0.375 -0.375
v 0.25 -0.5 -0.0625
v 0.25 -0.5 0.0625
v 0.25 -0.125 0.0625
v 0.25 -0.125 -0.0625
v 0.125 -0.5 -0.0625
v 0.125 -0.5 0.0625
v 0.125 -0.125 0.0625
v 0.125 -0.125 -0.0625
v 0.125 -0.0625 -0.3125
v 0.125 -0.0625 -0.1875
v 0.125 0.1875 -0.1875
v 0.125 0.1875 -0.3125
v -1.49012e-08 -0.0625 -0.3125
v -1.49012e-08 -0.0625 -0.1875
v -1.49012e-08 0.1875 -0.1875
v -1.49012e-08 0.1875 -0.3125
v 0.125 -0.0625 -0.1875
v 0.125 -0.0625 -0.0625
v 0.125 0.0625 -0.0625
v 0.125 0.0625 -0.1875
v -0 -0.0625 -0.1875
v -0 -0.0625 -0.0625
v -0 0.0625 -0.0625
v -0 0.0625 -0.1875
v 0.25 -0.125 -0.0625
v 0.25 -0.125 0.4375
v 0.25 0.125 0.4375
v 0.25 0.125 -0.0625
v -0.125 -0.125 -0.0625
v -0.125 -0.125 0.4375
v -0.125 0.125 0.4375
v -0.125 0.125 -0.0625
v -0 -0.5 0.3125
v -0 -0.5 0.4375
v -0 -0.125 0.4375
v -0 -0.125 0.3125
v -0.125 -0.5 0.3125
v -0.125 -0.5 0.4375
v -0.125 -0.125 0.4375
v -0.125 -0.125 0.3125
v 0.25 -0.5 0.3125
v 0.25 -0.5 0.4375
v 0.25 -0.125 0.4375
v 0.25 -0.125 0.3125
v 0.125 -0.5 0.3125
v 0.125 -0.5 0.4375
v 0.125 -0.125 0.4375
v 0.125 -0.125 0.3125
v -0 -0.5 -0.0625
v -0 -0.5 0.0625
v -0 -0.125 0.0625
v -0 -0.125 -0.0625
v -0.125 -0.5 -0.0625
v -0.125 -0.5 0.0625
v -0.125 -0.125 0.0625
v -0.125 -0.125 -0.0625
v 0.1875 0.125 0.0625
v 0.1875 0.125 0.3125
v 0.1875 0.25 0.3125
v 0.1875 0.25 0.0625
v -0.0625 0.125 0.0625
v -0.0625 0.125 0.3125
v -0.0625 0.25 0.3125
v -0.0625 0.25 0.0625
v 0.125 0.25 0.125
v 0.125 0.25 0.25
v 0.125 0.3125 0.25
v 0.125 0.3125 0.125
v 4.47035e-08 0.25 0.125
v 4.47035e-08 0.25 0.25
v 4.47035e-08 0.3125 0.25
v 4.47035e-08 0.3125 0.125
v 0.125 0.1875 -0.5
v 0.125 0.1875 -0.375
v 0.125 0.3125 -0.375
v 0.125 0.3125 -0.5
v -0 0.1875 -0.5
v -0 0.1875 -0.375
v -0 0.3125 -0.375
v -0 0.3125 -0.5
v 0.0625 0 0.4375
v 0.0625 0 0.5
v 0.0625 0.0625 0.5
v 0.0625 0.0625 0.4375
v -0 0 0.4375
v -0 0 0.5
v -0 0.0625 0.5
v -0 0.0625 0.4375
v -0 0.375 -0.25
v -0 0.375 -0.1875
v -0 0.4375 -0.1875
v -0 0.4375 -0.25
v -0.0625 0.375 -0.25
v -0.0625 0.375 -0.1875
v -0.0625 0.4375 -0.1875
v -0.0625 0.4375 -0.25
v 0.1875 0.375 -0.25
v 0.1875 0.375 -0.1875
v 0.1875 0.4375 -0.1875
v 0.1875 0.4375 -0.25
v 0.125 0.375 -0.25
v 0.125 0.375 -0.1875
v 0.125 0.4375 -0.1875
v 0.125 0.4375 -0.25
v 0.0625 -0.0625 0.4375
v 0.0625 -0.0625 0.5
v 0.0625 2.6077e-08 0.5
v 0.0625 2.6077e-08 0.4375
v 3.35276e-08 -0.0625 0.4375
v 3.35276e-08 -0.0625 0.5
v 3.35276e-08 2.6077e-08 0.5
v 3.35276e-08 2.6077e-08 0.4375
v 0.125 -0.125 0.4375
v 0.125 -0.125 0.5
v 0.125 -0.0625 0.5
v 0.125 -0.0625 0.4375
v 0.0625 -0.125 0.4375
v 0.0625 -0.125 0.5
v 0.0625 -0.0625 0.5
v 0.0625 -0.0625 0.4375
usemtl none
s off
g head
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 front_right_leg
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 top_neck
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 bottom_neck
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 body
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 back_left_leg
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 back_right_leg
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 front_left_leg
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 botom_hump
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 top_hump
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 snout
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 top_tail
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 right_ear
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 left_ear
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 middle_tail
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 bottom_tail
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

Binary file not shown.

View File

@ -26,9 +26,9 @@ max_mobs = 30
lashing_tame_count = 3
##Breed System
pregnant_count = 5
pregnant_count = 1200
pregnancy_time = 1200
growth_time = 1200
growth_time = 5
##Lay Eggs
#Default = 90000
@ -61,6 +61,7 @@ wolf_spawn = true
elephant_spawn = true
elephant_female_spawn = true
moth_spawn = true
camel_spawn = true
##Air Damage
air_damage = 1
@ -105,7 +106,7 @@ lamb_copulation_distance = 2
lion_follow = petz:beef
lion_spawn_chance = 1.0
lion_spawn_nodes = default:dirt_with_dry_grass
lion_preys = petz:lamb, petz:calf, petz:pony, petz:piggy
lion_preys = petz:lamb, petz:calf, petz:pony, petz:piggy, petz:camel
lion_spawn_biome = default
##Wolf Specific
@ -206,3 +207,12 @@ moth_follow = default:torch
moth_spawn_chance = 0.8
moth_spawn_nodes = default:dirt_with_coniferous_litter
moth_spawn_biome = default
##Camel Specific
camel_follow = default:dry_shrub
camel_spawn_chance = 0.6
camel_spawn_nodes = default:desert_sand
camel_predators = petz:lion
camel_spawn_biome = default
camel_breed = default:blueberries
camel_copulation_distance = 2

View File

@ -96,40 +96,8 @@ minetest.register_entity("petz:"..pet_name, {
end,
on_rightclick = function(self, clicker)
if self.tamed and self.owner == clicker:get_player_name() then
if self.driver and clicker == self.driver then -- detatch player already riding horse
petz.detach(clicker, {x = 1, y = 0, z = 1})
mobkit.clear_queue_low(self)
elseif self.saddle and clicker:get_wielded_item():get_name() == "petz:shears" then
minetest.add_item(self.object:get_pos(), "petz:saddle")
petz.set_properties(self, {textures = {"petz_pony_"..self.skin_colors[self.texture_no]..".png"}})
self.saddle = false
mobkit.remember(self, "saddle", self.saddle)
elseif not(self.driver) and not(self.saddle) and not(self.is_baby) and clicker:get_wielded_item():get_name() == "petz:saddle" then -- Put on saddle if tamed
local w = clicker:get_wielded_item() -- Put on saddle and take saddle from player's inventory
if petz.settings.type_model == "mesh" then
petz.set_properties(self, {textures =
{"petz_pony_"..self.skin_colors[self.texture_no]..".png" .. "^petz_pony_saddle.png"}
})
else
self.object:set_properties({tiles = petz.pony.tiles_saddle})
end
self.saddle = true
mobkit.remember(self, "saddle", self.saddle)
if not minetest.settings:get_bool("creative_mode") then
w:take_item()
clicker:set_wielded_item(w)
end
elseif not self.driver and self.saddle then -- Mount horse
petz.set_properties(self, {stepheight = 1.1})
petz.attach(self, clicker)
else
petz.on_rightclick(self, clicker)
end
else
petz.on_rightclick(self, clicker)
end
end,
petz.on_rightclick(self, clicker)
end,
on_step = function(self, dtime)
petz.init_timer(self)

View File

@ -119,7 +119,7 @@ petz.settings.piggy_spawn_chance = tonumber(settings:get("piggy_spawn_chance"))
petz.settings.piggy_spawn_nodes = settings:get("piggy_spawn_nodes", "")
petz.settings.piggy_spawn_biome = settings:get("piggy_spawn_biome", "default")
petz.settings.piggy_follow = settings:get("piggy_follow", "")
petz.settings.pony_predators = settings:get("pony_predators", "")
petz.settings.piggy_predators = settings:get("piggy_predators", "")
petz.settings.pigeon_spawn = settings:get_bool("pigeon_spawn", true)
petz.settings.pigeon_spawn_chance = tonumber(settings:get("pigeon_spawn_chance"))
petz.settings.pigeon_spawn_nodes = settings:get("pigeon_spawn_nodes", "")
@ -159,6 +159,14 @@ petz.settings.moth_spawn_chance = tonumber(settings:get("moth_spawn_chance"))
petz.settings.moth_spawn_nodes = settings:get("moth_spawn_nodes", "")
petz.settings.moth_spawn_biome = settings:get("moth_spawn_biome", "default")
petz.settings.moth_follow = settings:get("moth_follow", "")
petz.settings.camel_spawn = settings:get_bool("camel_spawn", true)
petz.settings.camel_spawn_chance = tonumber(settings:get("camel_spawn_chance"))
petz.settings.camel_spawn_nodes = settings:get("camel_spawn_nodes", "")
petz.settings.camel_spawn_biome = settings:get("camel_spawn_biome", "default")
petz.settings.camel_follow = settings:get("camel_follow", "")
petz.settings.camel_predators = settings:get("camel_predators", "")
petz.settings.camel_breed = settings:get("camel_breed", "")
petz.settings.camel_copulation_distance = tonumber(settings:get("camel_copulation_distance"))
if petz.settings.type_model == "mesh" then
petz.settings.visual = "mesh"

View File

@ -98,6 +98,6 @@ petz.pos_to_spawn = function(pet_name, pos)
y = y + 1
end
end
spawn_pos = { x = x, y = y, z = z}
local spawn_pos = { x = x, y = y, z = z}
return spawn_pos
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B