camels!
250
petz/api.lua
|
@ -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,
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
|
@ -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"),
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
After Width: | Height: | Size: 248 B |
After Width: | Height: | Size: 343 B |
After Width: | Height: | Size: 728 B |
After Width: | Height: | Size: 856 B |
After Width: | Height: | Size: 272 B |
After Width: | Height: | Size: 346 B |
After Width: | Height: | Size: 799 B |
After Width: | Height: | Size: 343 B |
After Width: | Height: | Size: 261 B |
After Width: | Height: | Size: 480 B |
After Width: | Height: | Size: 331 B |
After Width: | Height: | Size: 522 B |
After Width: | Height: | Size: 801 B |
After Width: | Height: | Size: 309 B |
After Width: | Height: | Size: 372 B |