角色选择后加载黑屏+qb-core服务器脚本报错求助
角色选择后加载黑屏+qb-core服务器脚本报错求助
兄弟,我太懂你这种卡黑屏又找不到头绪的崩溃感了——装完ox-lib之后选完角色直接卡加载黑屏,揪着这段qb-core的代码排查,重启服务器也没用,网上搜不到相关解决方案是吧?我帮你拆解下这段代码的问题,再给你几个可行的修复思路:
问题根源分析
你贴的代码第一行就是核心隐患:
if PlayerData.job and PlayerData.job.name and not QBCore.Shared.Jobs[PlayerData.job.name] then PlayerData.job = nil end
如果PlayerData.job.name存在,但QBCore.Shared.Jobs里没有对应的job名称(大概率是ox-lib修改了job数据结构,或者引入了qb-core不识别的job),这段代码会直接把PlayerData.job设为nil。但后面的代码又直接给PlayerData.job.name、PlayerData.job.label这些属性赋值——nil是不能被索引的,这会直接触发脚本报错,导致游戏卡在加载界面。
具体修复方案
方案1:避免清空整个job对象,直接重置为默认值
把第一行代码替换成下面的逻辑,不要把PlayerData.job设为nil,而是直接把它重置为unemployed的默认属性:
if PlayerData.job and PlayerData.job.name and not QBCore.Shared.Jobs[PlayerData.job.name] then PlayerData.job.name = 'unemployed' PlayerData.job.label = 'Civilian' PlayerData.job.payment = 10 PlayerData.job.type = 'none' PlayerData.job.onduty = nil -- 让后面的代码自动处理默认值班状态 end -- 保留后面的兜底逻辑 PlayerData.job = PlayerData.job or {} PlayerData.job.name = PlayerData.job.name or 'unemployed' PlayerData.job.label = PlayerData.job.label or 'Civilian' PlayerData.job.payment = PlayerData.job.payment or 10 PlayerData.job.type = PlayerData.job.type or 'none' if QBCore.Shared.ForceJobDefaultDutyAtLogin or PlayerData.job.onduty == nil then PlayerData.job.onduty = QBCore.Shared.Jobs[PlayerData.job.name].defaultDuty end
方案2:提前兜底PlayerData.job对象
把PlayerData.job = PlayerData.job or {}移到第一行之前,确保无论第一行怎么判断,PlayerData.job都不会是nil:
-- 先确保PlayerData.job是一个空对象,防止后续赋值报错 PlayerData.job = PlayerData.job or {} if PlayerData.job.name and not QBCore.Shared.Jobs[PlayerData.job.name] then PlayerData.job.name = 'unemployed' PlayerData.job.label = 'Civilian' PlayerData.job.payment = 10 PlayerData.job.type = 'none' end -- 保留后面的兜底逻辑 PlayerData.job.name = PlayerData.job.name or 'unemployed' PlayerData.job.label = PlayerData.job.label or 'Civilian' PlayerData.job.payment = PlayerData.job.payment or 10 PlayerData.job.type = PlayerData.job.type or 'none' if QBCore.Shared.ForceJobDefaultDutyAtLogin or PlayerData.job.onduty == nil then PlayerData.job.onduty = QBCore.Shared.Jobs[PlayerData.job.name].defaultDuty end
额外排查步骤
- 去服务器控制台/日志里找具体的错误信息,比如是不是显示
attempt to index nil with 'name',这能帮你100%确认问题点 - 暂时禁用ox-lib,看看能不能正常进入游戏——如果能,那就是ox-lib和你的qb-core版本不兼容,或者某个依赖ox-lib的第三方资源修改了job数据
- 检查你的qb-core是不是最新版本,旧版本的qb-core和新ox-lib经常会有数据结构冲突的问题
备注:内容来源于stack exchange,提问作者SmokeyTheStoner0 YT
相关产品推荐
相关产品推荐

