From 960f73ad6d55d3d940669492dbc5972cf1063298 Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Fri, 24 Oct 2025 14:25:17 +0100 Subject: [PATCH] Actual working checks for `hasJob()` `goto skip` is weird. --- shared/metaHandlers.lua | 2 +- shared/playerfunctions.lua | 72 +++++++++++++++++++++----------------- 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/shared/metaHandlers.lua b/shared/metaHandlers.lua index c870d16..c2b65d7 100644 --- a/shared/metaHandlers.lua +++ b/shared/metaHandlers.lua @@ -122,7 +122,7 @@ function GetPlayer(source) return framework.GetPlayer(source) end end - return nil + return {} end ------------------------------------------------------------- diff --git a/shared/playerfunctions.lua b/shared/playerfunctions.lua index 85bfb4f..ea8937b 100644 --- a/shared/playerfunctions.lua +++ b/shared/playerfunctions.lua @@ -439,27 +439,30 @@ local hasGroupFunc = { function(group, grade, src) local hasJobFlag, duty = false, true local playerInfo = GetPlayer(src) - if not playerInfo then - goto skip + local jobInfo, gangInfo = nil, nil + if next(playerInfo) then + jobInfo = playerInfo.job + gangInfo = playerInfo.gang + if playerInfo.PlayerData then + jobInfo = playerInfo.PlayerData.job + gangInfo = playerInfo.PlayerData.gang + end end - local jobinfo = playerInfo and playerInfo.job or playerInfo.PlayerData.job - if jobinfo and jobinfo.name == group then + if jobInfo and jobInfo.name == group then hasJobFlag = true - duty = jobinfo.onduty - if grade and not (grade <= jobinfo.grade.level) then + duty = jobInfo.onduty + if grade and not (grade <= jobInfo.grade.level) then hasJobFlag = false end return hasJobFlag, duty end - local ganginfo = playerInfo and playerInfo.gang or playerInfo.PlayerData.gang - if ganginfo and ganginfo.name == group then + if gangInfo and gangInfo.name == group then hasJobFlag = true - if grade and not (grade <= ganginfo.grade.level) then + if grade and not (grade <= gangInfo.grade.level) then hasJobFlag = false end return hasJobFlag, duty end - ::skip:: return hasJobFlag, duty end, }, @@ -469,21 +472,25 @@ local hasGroupFunc = { function(group, grade, src) local hasJobFlag, duty = false, true local playerInfo = GetPlayer(src) - if not playerInfo then - goto skip + local jobInfo, gangInfo = nil, nil + if next(playerInfo) then + jobInfo = playerInfo.job + gangInfo = playerInfo.gang + if playerInfo.PlayerData then + jobInfo = playerInfo.PlayerData.job + gangInfo = playerInfo.PlayerData.gang + end end - local jobinfo = playerInfo and playerInfo.job or playerInfo.PlayerData.job - if jobinfo and jobinfo.name == group then + if jobInfo and jobInfo.name == group then hasJobFlag = true - duty = jobinfo.onduty - if grade and not (grade <= jobinfo.grade.level) then + duty = jobInfo.onduty + if grade and not (grade <= jobInfo.grade.level) then hasJobFlag = false end end - local ganginfo = playerInfo and playerInfo.gang or playerInfo.PlayerData.gang - if ganginfo and ganginfo.name == group then + if gangInfo and gangInfo.name == group then hasJobFlag = true - if grade and not (grade <= ganginfo.grade.level) then + if grade and not (grade <= gangInfo.grade.level) then hasJobFlag = false end end @@ -517,9 +524,6 @@ local hasGroupFunc = { function(group, grade, src) local hasJobFlag, duty = false, true local playerInfo = GetPlayer(src) - if not playerInfo then - goto skip - end local info = playerInfo and playerInfo.job while not info do info = GetPlayer(src).job @@ -528,7 +532,6 @@ local hasGroupFunc = { if info.name == group then hasJobFlag = true end - ::skip:: return hasJobFlag, duty end, }, @@ -538,25 +541,28 @@ local hasGroupFunc = { function(group, grade, src) local hasJobFlag, duty = false, true local playerInfo = GetPlayer(src) - if not playerInfo then - goto skip + local jobInfo, gangInfo = nil, nil + if next(playerInfo) then + jobInfo = playerInfo.job + gangInfo = playerInfo.gang + if playerInfo.PlayerData then + jobInfo = playerInfo.PlayerData.job + gangInfo = playerInfo.PlayerData.gang + end end - local jobinfo = playerInfo and playerInfo.job or playerInfo.PlayerData.job - if jobinfo and jobinfo.name == group then + if jobInfo and jobInfo.name == group then hasJobFlag = true - duty = jobinfo.onduty - if grade and not (grade <= jobinfo.grade.level) then + duty = jobInfo.onduty + if grade and not (grade <= jobInfo.grade.level) then hasJobFlag = false end end - local ganginfo = playerInfo and playerInfo.gang or playerInfo.PlayerData.gang - if ganginfo and ganginfo.name == group then + if gangInfo and gangInfo.name == group then hasJobFlag = true - if grade and not (grade <= ganginfo.grade.level) then + if grade and not (grade <= gangInfo.grade.level) then hasJobFlag = false end end - ::skip:: return hasJobFlag, duty end, },