Skip to content

Commit df2c7c0

Browse files
committed
Use MaxEvenPlayers and QueueOrder. Fixes #772.
1 parent 04c5d10 commit df2c7c0

3 files changed

Lines changed: 27 additions & 3 deletions

File tree

LuaMenu/widgets/gui_battle_room_window.lua

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -628,9 +628,9 @@ end
628628
local function SortPlayers(a, b)
629629
local sA = battleLobby:GetUserBattleStatus(a.name)
630630
local sB = battleLobby:GetUserBattleStatus(b.name)
631-
--Spring.Echo("battleLobbybattleLobby", sA, (sA and sA.joinTime), (sB and sB.joinTime))
632-
local joinA = (sA and sA.joinTime) or ""
633-
local joinB = (sB and sB.joinTime) or ""
631+
--Spring.Echo("battleLobbybattleLobby", sA, (sA and sA.queueOrder), (sB and sB.queueOrder))
632+
local joinA = (sA and sA.queueOrder) or 0
633+
local joinB = (sB and sB.queueOrder) or 0
634634
return joinA < joinB
635635
end
636636

@@ -825,7 +825,11 @@ local function SetupPlayerPanel(playerParent, spectatorParent, battle, battleID)
825825

826826
local function UpdatePlayerPositions()
827827
local maxPlayers = (battleLobby:GetBattle(battleID) and battleLobby:GetBattle(battleID).maxPlayers) or 300
828+
local maxEvenPlayers = (battleLobby:GetBattle(battleID) and battleLobby:GetBattle(battleID).maxEvenPlayers) or 0
828829
table.sort(teamStack.children, SortPlayers)
830+
if (#teamStack.children)%2 == 1 and #teamStack.children < maxEvenPlayers then
831+
maxPlayers = #teamStack.children - 1
832+
end
829833
local position = 0
830834
local waitingListPosition = false
831835
for i = 1, #teamStack.children do
@@ -1006,6 +1010,10 @@ local function SetupPlayerPanel(playerParent, spectatorParent, battle, battleID)
10061010
PositionChildren(parentStack, parentScroll.height)
10071011
end
10081012

1013+
function teamData.UpdateMaxPlayers()
1014+
UpdatePlayerPositions()
1015+
end
1016+
10091017
team[teamIndex] = teamData
10101018
end
10111019
return team[teamIndex]
@@ -1088,6 +1096,12 @@ local function SetupPlayerPanel(playerParent, spectatorParent, battle, battleID)
10881096
RemovePlayerFromTeam(botName)
10891097
end
10901098

1099+
function externalFunctions.UpdateMaxPlayers()
1100+
for teamIndex, teamData in pairs(team) do
1101+
teamData.UpdateMaxPlayers()
1102+
end
1103+
end
1104+
10911105
return externalFunctions
10921106
end
10931107

@@ -1947,6 +1961,9 @@ local function InitializeControls(battleID, oldLobby, topPoportion, setupData)
19471961
end
19481962

19491963
infoHandler.UpdateBattleInfo(updatedBattleID, newInfo)
1964+
if newInfo.maxPlayers or newInfo.maxEvenPlayers then
1965+
playerHandler.UpdateMaxPlayers()
1966+
end
19501967
end
19511968

19521969
local function OnLeftBattle(listener, leftBattleID, userName)

libs/liblobby/lobby/interface_zerok.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -990,6 +990,7 @@ function Interface:_BattleAdded(data)
990990
port = header.Port,
991991

992992
maxPlayers = header.MaxPlayers,
993+
maxEvenPlayers = header.MaxEvenPlayers,
993994
passworded = (header.Password and header.Password ~= "" and true) or false,
994995

995996
engineName = "Spring " .. header.Engine,
@@ -1086,6 +1087,7 @@ function Interface:_BattleUpdate(data)
10861087

10871088
local battleInfo = {
10881089
maxPlayers = header.MaxPlayers,
1090+
maxEvenPlayers = header.MaxEvenPlayers,
10891091
passworded = password,
10901092

10911093
engineName = header.Engine,
@@ -1120,6 +1122,7 @@ function Interface:_UpdateUserBattleStatus(data)
11201122
teamNumber = data.TeamNumber,
11211123
sync = data.Sync,
11221124
joinTime = data.JoinTime,
1125+
queueOrder = data.QueueOrder,
11231126
}
11241127
if not data.Name then
11251128
Spring.Log(LOG_SECTION, LOG.ERROR, "_UpdateUserBattleStatus missing data.Name field")

libs/liblobby/lobby/lobby.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,7 @@ function Lobby:_OnBattleOpened(battleID, battle)
694694
port = battle.port,
695695

696696
maxPlayers = battle.maxPlayers,
697+
maxEvenPlayers = battle.maxEvenPlayers,
697698
passworded = battle.passworded,
698699

699700
engineName = battle.engineName,
@@ -807,6 +808,7 @@ function Lobby:_OnUpdateBattleInfo(battleID, battleInfo)
807808
end
808809

809810
battle.maxPlayers = battleInfo.maxPlayers or battle.maxPlayers
811+
battle.maxEvenPlayers = battleInfo.maxEvenPlayers or battle.maxEvenPlayers
810812
if battleInfo.passworded ~= nil then
811813
battle.passworded = battleInfo.passworded
812814
end
@@ -865,6 +867,7 @@ function Lobby:_OnUpdateUserBattleStatus(userName, status)
865867
userData.owner = status.owner or userData.owner
866868
userData.teamColor = status.teamColor or userData.teamColor
867869
userData.joinTime = status.joinTime or userData.JoinTime
870+
userData.queueOrder = status.queueOrder or userData.queueOrder
868871

869872
status.allyNumber = userData.allyNumber
870873
status.teamNumber = userData.teamNumber
@@ -875,6 +878,7 @@ function Lobby:_OnUpdateUserBattleStatus(userName, status)
875878
status.owner = userData.owner
876879
status.teamColor = userData.teamColor
877880
status.joinTime = userData.joinTime
881+
status.queueOrder = userData.queueOrder
878882
self:_CallListeners("OnUpdateUserBattleStatus", userName, status)
879883

880884
if changedSpectator or changedAllyTeam then

0 commit comments

Comments
 (0)