Skip to content

Commit c176c53

Browse files
committed
Try for more exclusivity with playermodel selection in unique mode
Also fix subrole model enforcement
1 parent 3916fbe commit c176c53

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

gamemodes/terrortown/gamemode/server/sv_player_custom.lua

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,27 @@ function GM:TTTPlayerColor(model)
119119
end
120120

121121
local plySelectedModels
122+
local plyUsedModels
123+
124+
local function RandomUniqueModel()
125+
plyUsedModels = plyUsedModels or {}
126+
local pm = nil
127+
128+
-- select a playermodel which hasn't been used before
129+
local i = #playermodels.GetSelectedModels() -- i means we only attempt at #playermodels times, before figuring there are no remaining options
130+
while i > 0 and (not pm or plyUsedModels[pm]) do
131+
pm = playermodels.GetRandomPlayerModel()
132+
i = i - 1
133+
end
134+
135+
if not pm or i == 0 then
136+
-- we reached the iteration limit; likely all models are used, so start reusing
137+
plyUsedModels = {}
138+
return RandomUniqueModel()
139+
end
140+
141+
return pm
142+
end
122143

123144
---
124145
-- Called to get the default player display information (model/color) for this map.
@@ -159,7 +180,7 @@ function GM:TTT2GetDefaultPlayerDisplayForRound()
159180
continue
160181
end
161182

162-
plySelectedModels[plys[i]] = playermodels.GetRandomPlayerModel()
183+
plySelectedModels[plys[i]] = RandomUniqueModel()
163184
end
164185
end
165186
end
@@ -192,6 +213,9 @@ function GM:PlayerSetModel(ply)
192213
return
193214
end
194215

216+
-- We need to clear subrole models at some point; we'll do it here
217+
ply:SetSubRoleModel(nil)
218+
195219
local pm = plySelectedModels and plySelectedModels[ply]
196220

197221
if
@@ -201,7 +225,7 @@ function GM:PlayerSetModel(ply)
201225
then
202226
-- plySelectedModels doesn't have this player's model, but a unique one was requested for
203227
-- each round. Compute it now.
204-
pm = playermodels.GetRandomPlayerModel()
228+
pm = RandomUniqueModel()
205229
plySelectedModels = plySelectedModels or {}
206230
plySelectedModels[ply] = pm
207231
end

gamemodes/terrortown/gamemode/shared/sh_player_ext.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1082,7 +1082,7 @@ function plymeta:SetModel(mdlName)
10821082
local mdl = mdlName or self:GetModel()
10831083

10841084
if not checkModel(mdl) then
1085-
-- TODO: should this be a fallback model hook?
1085+
hook.Run("PlayerSetModel", self)
10861086
mdl = self:GetModel()
10871087

10881088
if not checkModel(mdl) then

0 commit comments

Comments
 (0)