You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

角色选择后加载黑屏+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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 08:09:34