fix bug on check attach

This commit is contained in:
Alexsandro Percy 2024-02-04 08:49:33 -03:00
parent 9772e7270d
commit e9547307d2
1 changed files with 36 additions and 31 deletions

View File

@ -522,14 +522,47 @@ function airutils.testImpact(self, velocity, position)
end
end
--this method checks for a disconected player who comes back
function airutils.rescueConnectionFailedPassengers(self)
if self._disconnection_check_time == nil then self._disconnection_check_time = 1 end
self._disconnection_check_time = self._disconnection_check_time + self.dtime
if not self._passengers_base then return end
local max_seats = table.getn(self._passengers_base)
if self._disconnection_check_time > 1 then
--minetest.chat_send_all(dump(self._passengers))
self._disconnection_check_time = 0
for i = max_seats,1,-1
do
if self._passengers[i] then
local player = minetest.get_player_by_name(self._passengers[i])
if player then --we have a player!
if player:get_attach() == nil then
--if player_api.player_attached[self._passengers[i]] == nil then --but isn't attached?
--minetest.chat_send_all("okay")
if player:get_hp() > 0 then
self._passengers[i] = nil --clear the slot first
do_attach(self, player, i) --attach
end
end
end
end
end
end
end
function airutils.checkattachBug(self)
-- for some engine error the player can be detached from the submarine, so lets set him attached again
if self.owner and self.driver_name then
local have_driver = (self.driver_name ~= nil)
if have_driver then
-- attach the driver again
local player = minetest.get_player_by_name(self.owner)
local player = minetest.get_player_by_name(self.driver_name)
if player then
if player:get_hp() > 0 then
airutils.attach(self, player, self._instruction_mode)
if player:get_attach() == nil then
airutils.attach(self, player, self._instruction_mode)
else
self.driver_name = nil
end
else
airutils.dettachPlayer(self, player)
end
@ -1076,34 +1109,6 @@ local function do_attach(self, player, slot)
end
end
--this method checks for a disconected player who comes back
function airutils.rescueConnectionFailedPassengers(self)
if self._disconnection_check_time == nil then self._disconnection_check_time = 1 end
self._disconnection_check_time = self._disconnection_check_time + self.dtime
if not self._passengers_base then return end
local max_seats = table.getn(self._passengers_base)
if self._disconnection_check_time > 1 then
--minetest.chat_send_all(dump(self._passengers))
self._disconnection_check_time = 0
for i = max_seats,1,-1
do
if self._passengers[i] then
local player = minetest.get_player_by_name(self._passengers[i])
if player then --we have a player!
if player:get_attach() == nil then
--if player_api.player_attached[self._passengers[i]] == nil then --but isn't attached?
--minetest.chat_send_all("okay")
if player:get_hp() > 0 then
self._passengers[i] = nil --clear the slot first
do_attach(self, player, i) --attach
end
end
end
end
end
end
end
function airutils.landing_lights_operate(self)
if self._last_light_move == nil then self._last_light_move = 0.15 end
self._last_light_move = self._last_light_move + self.dtime