Skip to content

Commit b853c8a

Browse files
sofarparamat
authored andcommittedMar 10, 2019
Beds: Properly count players in beds
This is a rebased and slightly rewritten version of #2125.
1 parent 891f00e commit b853c8a

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed
 

Diff for: ‎mods/beds/functions.lua

+12-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
local pi = math.pi
2-
local player_in_bed = 0
32
local is_sp = minetest.is_singleplayer()
43
local enable_respawn = minetest.settings:get_bool("enable_bed_respawn")
54
if enable_respawn == nil then
@@ -59,11 +58,7 @@ local function lay_down(player, pos, bed_pos, state, skip)
5958
-- stand up
6059
if state ~= nil and not state then
6160
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
6762
-- skip here to prevent sending player specific changes (used for leaving players)
6863
if skip then
6964
return
@@ -82,10 +77,9 @@ local function lay_down(player, pos, bed_pos, state, skip)
8277

8378
-- lay down
8479
else
85-
beds.player[name] = 1
8680
beds.pos[name] = pos
8781
beds.bed_position[name] = bed_pos
88-
player_in_bed = player_in_bed + 1
82+
beds.player[name] = 1
8983

9084
-- physics, eye_offset, etc
9185
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)
10397
player:hud_set_flags(hud_flags)
10498
end
10599

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+
106108
local function update_formspecs(finished)
107109
local ges = #minetest.get_connected_players()
108110
local form_n
111+
local player_in_bed = get_player_in_bed_count()
109112
local is_majority = (ges / 2) < player_in_bed
110113

111114
if finished then
@@ -223,7 +226,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
223226
-- Because "Force night skip" button is a button_exit, it will set fields.quit
224227
-- and lay_down call will change value of player_in_bed, so it must be taken
225228
-- earlier.
226-
local last_player_in_bed = player_in_bed
229+
local last_player_in_bed = get_player_in_bed_count()
227230

228231
if fields.quit or fields.leave then
229232
lay_down(player, nil, nil, false)

0 commit comments

Comments
 (0)
Please sign in to comment.