forked from mtcontrib/mobs_redo
update api's ride horse example
This commit is contained in:
parent
ef1240d537
commit
3fb24110bc
109
api.txt
109
api.txt
@ -314,10 +314,14 @@ mobs:register_mob("mob_horse:horse", {
|
|||||||
mesh = "mobs_horse.x",
|
mesh = "mobs_horse.x",
|
||||||
collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.25, 0.4},
|
collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.25, 0.4},
|
||||||
animation = {
|
animation = {
|
||||||
speed_normal = 15, speed_run = 30,
|
speed_normal = 15,
|
||||||
stand_start = 25, stand_end = 75,
|
speed_run = 30,
|
||||||
walk_start = 75, walk_end = 100,
|
stand_start = 25,
|
||||||
run_start = 75, run_end = 100,
|
stand_end = 75,
|
||||||
|
walk_start = 75,
|
||||||
|
walk_end = 100,
|
||||||
|
run_start = 75,
|
||||||
|
run_end = 100,
|
||||||
},
|
},
|
||||||
textures = {
|
textures = {
|
||||||
{"mobs_horse.png"},
|
{"mobs_horse.png"},
|
||||||
@ -342,9 +346,9 @@ mobs:register_mob("mob_horse:horse", {
|
|||||||
{name = "mobs:meat_raw", chance = 1, min = 2, max = 3}
|
{name = "mobs:meat_raw", chance = 1, min = 2, max = 3}
|
||||||
},
|
},
|
||||||
|
|
||||||
-- custom function uses self.v2 toggle to set ride variables
|
|
||||||
do_custom = function(self, dtime)
|
do_custom = function(self, dtime)
|
||||||
|
|
||||||
|
-- set needed values if not already present
|
||||||
if not self.v2 then
|
if not self.v2 then
|
||||||
self.v2 = 0
|
self.v2 = 0
|
||||||
self.max_speed_forward = 6
|
self.max_speed_forward = 6
|
||||||
@ -355,55 +359,70 @@ mobs:register_mob("mob_horse:horse", {
|
|||||||
self.driver_eye_offset = {x = 0, y = 3, z = 0}
|
self.driver_eye_offset = {x = 0, y = 3, z = 0}
|
||||||
end
|
end
|
||||||
|
|
||||||
-- when riding mob call drive function to control
|
-- if driver present allow control of horse
|
||||||
if self.driver then
|
if self.driver then
|
||||||
|
|
||||||
mobs.drive(self, "walk", "stand", false, dtime)
|
mobs.drive(self, "walk", "stand", false, dtime)
|
||||||
|
|
||||||
return false -- skip rest of mob functions
|
return false -- skip rest of mob functions
|
||||||
end
|
end
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
on_die = function(self, pos)
|
||||||
|
|
||||||
|
-- drop saddle when horse is killed while riding
|
||||||
|
-- also detach from horse properly
|
||||||
|
if self.driver then
|
||||||
|
minetest.add_item(pos, "mobs:saddle")
|
||||||
|
mobs.detach(self.driver, {x = 1, y = 0, z = 1})
|
||||||
|
end
|
||||||
|
|
||||||
|
end,
|
||||||
|
|
||||||
on_rightclick = function(self, clicker)
|
on_rightclick = function(self, clicker)
|
||||||
|
|
||||||
-- check for actual player
|
-- make sure player is clicking
|
||||||
if not clicker or not clicker:is_player() then
|
if not clicker or not clicker:is_player() then
|
||||||
return
|
return
|
||||||
end
|
|
||||||
|
|
||||||
-- used to feed, tame and heal mob
|
|
||||||
if mobs:feed_tame(self, clicker, 10, true, true) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- check if mob has been tamed and player is owner
|
|
||||||
if self.tamed and self.owner == clicker:get_player_name() then
|
|
||||||
|
|
||||||
local inv = clicker:get_inventory()
|
|
||||||
|
|
||||||
-- detach player when riding mob (add saddle to inventory)
|
|
||||||
if self.driver and clicker == self.driver then
|
|
||||||
|
|
||||||
mobs.detach(clicker, {x = 1, y = 0, z = 1})
|
|
||||||
|
|
||||||
if inv:room_for_item("main", "mobs:saddle") then
|
|
||||||
inv:add_item("main", "mobs:saddle")
|
|
||||||
else
|
|
||||||
minetest.add_item(clicker.getpos(), "mobs:saddle")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- attach player to mob if not riding (take saddle from inventory)
|
|
||||||
elseif not self.driver then
|
|
||||||
|
|
||||||
if clicker:get_wielded_item():get_name() == "mobs:saddle" then
|
|
||||||
|
|
||||||
self.object:set_properties({stepheight = 1.1})
|
|
||||||
mobs.attach(self, clicker)
|
|
||||||
inv:remove_item("main", "mobs:saddle")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
mobs:capture_mob(self, clicker, 0, 0, 80, false, nil)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- feed, tame or heal horse
|
||||||
|
if mobs:feed_tame(self, clicker, 10, true, true) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- make sure tamed horse is being clicked by owner only
|
||||||
|
if self.tamed and self.owner == clicker:get_player_name() then
|
||||||
|
|
||||||
|
local inv = clicker:get_inventory()
|
||||||
|
|
||||||
|
-- detatch player already riding horse
|
||||||
|
if self.driver and clicker == self.driver then
|
||||||
|
|
||||||
|
mobs.detach(clicker, {x = 1, y = 0, z = 1})
|
||||||
|
|
||||||
|
-- add saddle back to inventory
|
||||||
|
if inv:room_for_item("main", "mobs:saddle") then
|
||||||
|
inv:add_item("main", "mobs:saddle")
|
||||||
|
else
|
||||||
|
minetest.add_item(clicker.getpos(), "mobs:saddle")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- attach player to horse
|
||||||
|
elseif not self.driver
|
||||||
|
and clicker:get_wielded_item():get_name() == "mobs:saddle" then
|
||||||
|
|
||||||
|
self.object:set_properties({stepheight = 1.1})
|
||||||
|
mobs.attach(self, clicker)
|
||||||
|
|
||||||
|
-- take saddle from inventory
|
||||||
|
inv:remove_item("main", "mobs:saddle")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- used to capture horse with magic lasso
|
||||||
|
mobs:capture_mob(self, clicker, 0, 0, 80, false, nil)
|
||||||
|
end
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user