Вызывается из PLAYER:SetJob до смены профессии. Реализация по умолчанию сначала спрашивает job:CanJoin(ply) (метод самой профессии, объявляется в файле jobs/*.lua); если тот вернул nil, проверяет свободные места по JOB.MaxPlayers, считая игроков той же профессии напрямую (не через team.NumPlayers, так как несколько профессий могут делить одну команду):
function GM:OnPlayerBecomeJob(ply, job, oldJob)
local allow = job:CanJoin(ply)
if allow != nil then return allow end
if (job.MaxPlayers >= 0) then
local count = 0
for _, other in ipairs(player.GetAll()) do
if (player_manager.GetPlayerClass(other) == job.ID) then
count = count + 1
end
end
if (count >= job.MaxPlayers) then return false end
end
return true
end
Аргументы
1 Player plyИгрок, меняющий профессию.
2 table jobПрофессия, на которую переходит игрок.
3 table oldJobТекущая профессия игрока.
Возвращает
1 booleanРазрешить ли смену. false: отмена.