1
1
local pi = math.pi
2
- local player_in_bed = 0
3
2
local is_sp = minetest .is_singleplayer ()
4
3
local enable_respawn = minetest .settings :get_bool (" enable_bed_respawn" )
5
4
if enable_respawn == nil then
@@ -59,11 +58,7 @@ local function lay_down(player, pos, bed_pos, state, skip)
59
58
-- stand up
60
59
if state ~= nil and not state then
61
60
local p = beds .pos [name ] or nil
62
- if beds .player [name ] ~= nil then
63
- beds .player [name ] = nil
64
- beds .bed_position [name ] = nil
65
- player_in_bed = player_in_bed - 1
66
- end
61
+ beds .player [name ] = nil
67
62
-- skip here to prevent sending player specific changes (used for leaving players)
68
63
if skip then
69
64
return
@@ -82,10 +77,9 @@ local function lay_down(player, pos, bed_pos, state, skip)
82
77
83
78
-- lay down
84
79
else
85
- beds .player [name ] = 1
86
80
beds .pos [name ] = pos
87
81
beds .bed_position [name ] = bed_pos
88
- player_in_bed = player_in_bed + 1
82
+ beds . player [ name ] = 1
89
83
90
84
-- physics, eye_offset, etc
91
85
player :set_eye_offset ({x = 0 , y = - 13 , z = 0 }, {x = 0 , y = 0 , z = 0 })
@@ -103,9 +97,18 @@ local function lay_down(player, pos, bed_pos, state, skip)
103
97
player :hud_set_flags (hud_flags )
104
98
end
105
99
100
+ local function get_player_in_bed_count ()
101
+ local c = 0
102
+ for _ , _ in pairs (beds .player ) do
103
+ c = c + 1
104
+ end
105
+ return c
106
+ end
107
+
106
108
local function update_formspecs (finished )
107
109
local ges = # minetest .get_connected_players ()
108
110
local form_n
111
+ local player_in_bed = get_player_in_bed_count ()
109
112
local is_majority = (ges / 2 ) < player_in_bed
110
113
111
114
if finished then
@@ -223,7 +226,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
223
226
-- Because "Force night skip" button is a button_exit, it will set fields.quit
224
227
-- and lay_down call will change value of player_in_bed, so it must be taken
225
228
-- earlier.
226
- local last_player_in_bed = player_in_bed
229
+ local last_player_in_bed = get_player_in_bed_count ()
227
230
228
231
if fields .quit or fields .leave then
229
232
lay_down (player , nil , nil , false )
0 commit comments