diff --git a/mods/boats/init.lua b/mods/boats/init.lua index f1589c8d..52360be4 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.lua @@ -56,19 +56,21 @@ function boat.on_rightclick(self, clicker) -- Cleanup happens in boat.on_detach_child clicker:set_detach() - player_api.set_animation(clicker, "stand" , 30) + player_api.set_animation(clicker, "stand", 30) local pos = clicker:get_pos() pos = {x = pos.x, y = pos.y + 0.2, z = pos.z} minetest.after(0.1, function() clicker:set_pos(pos) end) elseif not self.driver then - self.driver = name clicker:set_attach(self.object, "", {x = 0.5, y = 1, z = -3}, {x = 0, y = 0, z = 0}) + + self.driver = name player_api.player_attached[name] = true + minetest.after(0.2, function() - player_api.set_animation(clicker, "sit" , 30) + player_api.set_animation(clicker, "sit", 30) end) clicker:set_look_horizontal(self.object:get_yaw()) end @@ -79,9 +81,10 @@ end function boat.on_detach_child(self, child) if child and child:get_player_name() == self.driver then player_api.player_attached[child:get_player_name()] = false + + self.driver = nil + self.auto = false end - self.driver = nil - self.auto = false end diff --git a/mods/carts/cart_entity.lua b/mods/carts/cart_entity.lua index bd567a50..c10b44e5 100644 --- a/mods/carts/cart_entity.lua +++ b/mods/carts/cart_entity.lua @@ -29,15 +29,10 @@ function cart_entity:on_rightclick(clicker) end local player_name = clicker:get_player_name() if self.driver and player_name == self.driver then - self.driver = nil carts:manage_attachment(clicker, nil) elseif not self.driver then - self.driver = player_name carts:manage_attachment(clicker, self.object) - - -- player_api does not update the animation - -- when the player is attached, reset to default animation - player_api.set_animation(clicker, "stand") + self.driver = player_name end end @@ -66,9 +61,10 @@ end -- 0.5.x and later: When the driver leaves function cart_entity:on_detach_child(child) if child and child:get_player_name() == self.driver then + -- Clean up eye height carts:manage_attachment(child, nil) + self.driver = nil end - self.driver = nil end function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) diff --git a/mods/carts/functions.lua b/mods/carts/functions.lua index af2153b6..36b7e129 100644 --- a/mods/carts/functions.lua +++ b/mods/carts/functions.lua @@ -12,7 +12,7 @@ function carts:manage_attachment(player, obj) end local status = obj ~= nil local player_name = player:get_player_name() - if player:get_attach() == obj then + if obj and player:get_attach() == obj then return end player_api.player_attached[player_name] = status @@ -20,6 +20,10 @@ function carts:manage_attachment(player, obj) if status then player:set_attach(obj, "", {x=0, y=-4.5, z=0}, {x=0, y=0, z=0}) player:set_eye_offset({x=0, y=-4, z=0},{x=0, y=-4, z=0}) + + -- player_api does not update the animation + -- when the player is attached, reset to default animation + player_api.set_animation(player, "stand") else player:set_detach() player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0})