Potential fix for Spawn cap on maps - Lucas - 05-02-2020
I have noticed that there was issues on some maps that cause upon spawning of players to cause overlap and crushing that kills x amount of players over spawn limit. I have a pretty simple fix to suggest. Delay the spawning of hunters by 4 seconds. Since hunters are blinded they do not lose out on any gameplay opportunities and this will free up spawn locations on smaller maps (i.e. Gas Station) which would allow for a larger pool of popular maps to be added while keeping the server slots high.
I can always help with the fixing of the issue if there is a way I can get the LUA prophunt file that you use to look over the code and edit it on my side and see if you like the change.
RE: Potential fix for Spawn cap on maps - VolfVoss - 05-02-2020
The blinding coding would need to be modified too so that hunters couldn't see the props moving about.
RE: Potential fix for Spawn cap on maps - RussEfarmer - 05-02-2020
This is the code that is called on the start of every round, pulled from the latest version of Enhanced Prophunt in "prop_hunt\gamemode\init.lua":
Code: function GM:OnPreRoundStart(num)
game.CleanUpMap()
if GetGlobalInt("RoundNumber") != 1 && (GetConVar("ph_swap_teams_every_round"):GetInt() == 1 || ((team.GetScore(TEAM_PROPS) + team.GetScore(TEAM_HUNTERS)) > 0)) then
for _, pl in pairs(player.GetAll()) do
if pl:Team() == TEAM_PROPS || pl:Team() == TEAM_HUNTERS then
if pl:Team() == TEAM_PROPS then
pl:SetTeam(TEAM_HUNTERS)
else
pl:SetTeam(TEAM_PROPS)
if GetConVar("ph_notice_prop_rotation"):GetBool() then
timer.Simple(0.5, function() pl:SendLua( [[notification.AddLegacy("You are in Prop Team with Rotate support! You can rotate the prop around by moving your mouse.", NOTIFY_UNDO, 20 )]] ) end)
pl:SendLua( [[notification.AddLegacy("Additionally you can toggle lock rotation by pressing R key!", NOTIFY_GENERIC, 18 )]] )
pl:SendLua( [[surface.PlaySound("garrysmod/content_downloaded.wav")]] )
end
end
pl:ChatPrint(PHE.LANG.CHAT.SWAP)
end
end
-- Props will gain a Bonus Armor points Hunter teams has more than 4 players in it. The more player, the more armor they get.
timer.Simple(1, function()
local NumHunter = table.Count(team.GetPlayers(TEAM_HUNTERS))
if NumHunter >= 4 && NumHunter <= 8 then
for _,prop in pairs(team.GetPlayers(TEAM_PROPS)) do
if IsValid(prop) then prop:SetArmor(math.random(1,3) * 15) end
end
elseif NumHunter > 8 then
for _,prop in pairs(team.GetPlayers(TEAM_PROPS)) do
if IsValid(prop) then prop:SetArmor(math.random(3,7) * 15) end
end
end
end)
hook.Call("PH_OnPreRoundStart", nil, GetConVar("ph_swap_teams_every_round"):GetInt())
end
-- Balance teams?
if GetConVar("ph_autoteambalance"):GetBool() then
GAMEMODE:CheckTeamBalance()
end
UTIL_StripAllPlayers()
UTIL_SpawnAllPlayers()
UTIL_FreezeAllPlayers()
end
The function we're looking for is UTIL_SpawnAllPlayers(), which is declared in "fretta\gamemode\utility.lua":
Code: function UTIL_SpawnAllPlayers()
for k,v in pairs( player.GetAll() ) do
if ( v:CanRespawn() && v:Team() != TEAM_SPECTATOR && v:Team() != TEAM_CONNECTING ) then
v:Spawn()
end
end
end
Theoretically all you would have to do is modify this routine in init.lua where hunters have a delay. I don't think the blinding would be affected, since a separate routine places hunter cameras out into the void at the start of every round anyway. I don't actually know how to code this in myself, nor do I really want to fire up a test server and go through the trouble knowing that most likely nothing will come of it, but here's the crust to the pie I suppose.
Edit: it's not even a guarantee that delaying hunter spawns would even solve this "crushing". After reading your post a bit more closely, it sounds like you're talking about player dying after the game spawns players above the hard limit of spawnpoints on the map. If that's the case, this problem is only solvable by increasing the number of spawnpoints , which requires rebuilding the map.
RE: Potential fix for Spawn cap on maps - Lucas - 05-02-2020
(05-02-2020, 08:34 PM)RussEfarmer Wrote: This is the code that is called on the start of every round, pulled from the latest version of Enhanced Prophunt in "prop_hunt\gamemode\init.lua":
Code: function GM:OnPreRoundStart(num)
game.CleanUpMap()
if GetGlobalInt("RoundNumber") != 1 && (GetConVar("ph_swap_teams_every_round"):GetInt() == 1 || ((team.GetScore(TEAM_PROPS) + team.GetScore(TEAM_HUNTERS)) > 0)) then
for _, pl in pairs(player.GetAll()) do
if pl:Team() == TEAM_PROPS || pl:Team() == TEAM_HUNTERS then
if pl:Team() == TEAM_PROPS then
pl:SetTeam(TEAM_HUNTERS)
else
pl:SetTeam(TEAM_PROPS)
if GetConVar("ph_notice_prop_rotation"):GetBool() then
timer.Simple(0.5, function() pl:SendLua( [[notification.AddLegacy("You are in Prop Team with Rotate support! You can rotate the prop around by moving your mouse.", NOTIFY_UNDO, 20 )]] ) end)
pl:SendLua( [[notification.AddLegacy("Additionally you can toggle lock rotation by pressing R key!", NOTIFY_GENERIC, 18 )]] )
pl:SendLua( [[surface.PlaySound("garrysmod/content_downloaded.wav")]] )
end
end
pl:ChatPrint(PHE.LANG.CHAT.SWAP)
end
end
-- Props will gain a Bonus Armor points Hunter teams has more than 4 players in it. The more player, the more armor they get.
timer.Simple(1, function()
local NumHunter = table.Count(team.GetPlayers(TEAM_HUNTERS))
if NumHunter >= 4 && NumHunter <= 8 then
for _,prop in pairs(team.GetPlayers(TEAM_PROPS)) do
if IsValid(prop) then prop:SetArmor(math.random(1,3) * 15) end
end
elseif NumHunter > 8 then
for _,prop in pairs(team.GetPlayers(TEAM_PROPS)) do
if IsValid(prop) then prop:SetArmor(math.random(3,7) * 15) end
end
end
end)
hook.Call("PH_OnPreRoundStart", nil, GetConVar("ph_swap_teams_every_round"):GetInt())
end
-- Balance teams?
if GetConVar("ph_autoteambalance"):GetBool() then
GAMEMODE:CheckTeamBalance()
end
UTIL_StripAllPlayers()
UTIL_SpawnAllPlayers()
UTIL_FreezeAllPlayers()
end
The function we're looking for is UTIL_SpawnAllPlayers(), which is declared in "fretta\gamemode\utility.lua":
Code: function UTIL_SpawnAllPlayers()
for k,v in pairs( player.GetAll() ) do
if ( v:CanRespawn() && v:Team() != TEAM_SPECTATOR && v:Team() != TEAM_CONNECTING ) then
v:Spawn()
end
end
end
Theoretically all you would have to do is modify this routine in init.lua where hunters have a delay. I don't think the blinding would be affected, since a separate routine places hunter cameras out into the void at the start of every round anyway. I don't actually know how to code this in myself, nor do I really want to fire up a test server and go through the trouble knowing that most likely nothing will come of it, but here's the crust to the pie I suppose.
Edit: it's not even a guarantee that delaying hunter spawns would even solve this "crushing". After reading your post a bit more closely, it sounds like you're talking about player dying after the game spawns players above the hard limit of spawnpoints on the map. If that's the case, this problem is only solvable by increasing the number of spawnpoints , which requires rebuilding the map.
I came from a server where they had delayed hunter spawns and that seemed to work to expand the spawn limits without adding spawn points. Idk if he also added a way to clear up available spawn points within that code, but from my experience its just when two player entities spawn on each other, one has to give way.
|