Pulse Phone 文档

故障排查

适用于 Pulse Phone 1.4.2阅读约 19 分钟更新于

11. 故障排查

从这里开始:阅读服务器控制台中的启动检查。它以 PULSE PHONE v1.x.x 和构建版本开头,然后每个方面一行(Server、Database、Framework、Connected scripts、Items...)。每一行 FIX 或 NOTE 下方都有问题及其修复方法(-> ...)。输入 phone:health 查看逐行的完整报告,输入 phone:diag 查看详细信息。

手机打不开

你看到的现象 原因 修复
F1 没反应,/phone 可以用 其他脚本占用了 F1 在 Settings > Key Bindings > FiveM 中重新绑定,或修改 Config.Keys.open。新的默认值只对从未绑定过该按键的玩家生效。
完全打不开 玩家没有手机物品、电池没电、有脚本禁用了手机,或玩家处于死亡、被铐或其他被阻止的状态 检查 Config.Item.required、电量和 Config.Block 状态。
在背包或菜单打开时打不开 这是有意为之(Config.Open.blockWhenNuiFocused) 先关闭另一个菜单。
“No phone item”:谁都打不开 Config.Item.required = true,但你的背包中缺少 phone 物品,或玩家没有携带它 添加 phone 物品(第 4 节)并发给玩家,或设置 Config.Item.required = false。
新手机黑屏并显示 "Hold to turn on" 手机到手时是关机状态:Config.Device.arrivesOn = false。自 1.4.0 起新手机默认到手即开机;沿用旧版本的 config.lua 会保留其原有值 拿出手机时,按住 End 或 O(Config.Keys.power)约两秒,或用鼠标按住手机自己的侧键。在欢迎界面上滑即可开始设置。
盒子消失了,但没有出现 phone 物品 Config.Item.required = false 和 unique = false 时使用归角色所有的手机,没有背包物品 正常打开手机即可。如果你的服务器应该要求携带物品,请在出售手机之前启用 Config.Item.required,然后重启 Pulse。
屏幕空白或白屏 服务端没有运行。F8 显示 the server never answered bootstrap - is the resource running server-side? 在服务器控制台中查找红色的 [phone] 行或加密(escrow)错误(见下文)。
屏幕空白,控制台显示 ui/index.html missing ui/ 文件夹被删除或没有上传 重新上传完整的 phone 文件夹。不要删除 ui/。
手中显示了手机,但屏幕一直不出现;启动检查显示 [FAIL] Interface,并点名 ui/assets/ 中的某个文件 你的副本中缺少该文件:上传不完整,或被杀毒软件删除 从 Keymaster 重新下载手机并上传整个文件夹。如果文件再次消失,请把服务器文件夹加入杀毒软件的排除列表。
鼠标光标卡在屏幕中间 GTA 的原始输入(raw input)已关闭 让玩家在 GTA 设置中开启原始输入。

框架、金钱和职业

你看到的现象 原因 修复
FRAMEWORK NOT SELECTED: more than one framework is started 同时运行了两个核心,例如 es_extended 和 qb-core 把 Config.Framework(位于 config/config.lua)设为你使用的那个,或把 setr phone_framework <name> 加入 server.cfg(第 3 节)。在此之前,金钱功能保持关闭。
控制台出现 framework not ready: ...,手机一直停留在“未就绪”界面 手机找到的或被指定的框架尚未运行:仍在启动、正在重启、已停止,或(自定义框架)其桥接从未注册。在它启动之前,金钱操作会被拒绝。 在框架之后启动手机。重启核心后稍等片刻,或同时重启手机。自定义框架:注册桥接,并在核心重启后调用 exports.phone:FrameworkRestarted()。完全没有框架的服务器:设置 Config.Framework = 'standalone'(位于 config/config.lua),或把 setr phone_framework standalone 加入 server.cfg(它优先于 config)。
识别到了错误的框架:启动信息显示的是你没在用的框架 ox_core 与 ESX、QBCore 或 Qbox 同时启动(此时手机会使用另一个),或者你的核心资源被改了名 停止你不用的核心,或用 setr phone_framework <name>(写在 server.cfg 中)强制指定你的框架(第 3 节)。改了名的核心:请使用其原始名称,或把它作为自定义框架接入。
Config.Framework = "esx" but es_extended is not started 设置中指定的框架没有运行 修正该设置,或改回 'auto'。
在有框架的服务器上,启动信息显示 Framework: standalone 核心的资源名称不同,或在手机之后启动 在框架之后启动手机。改了名的核心无法被识别:请使用其原始名称,或把它作为自定义框架接入(第 3 节)。
银行余额为 0 或不正确 手机以 standalone 模式运行(使用自己的银行),或没有找到框架 检查启动信息中的 Framework: 和 Banking: 部分。
Services 中没有公司账户 没有运行公司账户脚本,或玩家不是老板 运行第 7 节中的某个脚本。老板等级:boss(ESX)、isboss(QBCore / Qbox)或 bossGrade。ox_core 和 vRP 上没有公司管理。
警察或 EMS 收不到 911 呼叫 他们的职业名称不在列表中,或他们不在岗 把你的职业名称加入 Config.Services 和 Config.Emergency,位于 config/apps.lua。
<script> found but not connected 该脚本的版本导出函数不同 手机会使用下一个选项。更新该脚本,或用 Config.Providers 选择另一个。
ND Core 服务器,但启动信息显示的是其他框架或 standalone ND_Core 在手机之后启动,或同时启动了另一个核心 在 ND_Core 之后启动手机,停止你不用的核心,或把 setr phone_framework nd 加入 server.cfg。

数据库

你看到的现象 原因 修复
手机一直加载不完;F8 显示 request "bootstrap" timed out 其他手机的数据表挡住了路,且无法被移开 阅读启动检查(phone:health)。[FAIL] Database ... belong to another script 一行会点名这些表;见第 2 节“其他手机的数据表”。
启动检查:[WARN] Database N table(s) of another script were moved aside: phone_x -> old_phone_x 其他脚本以手机表名留下的一张表在启动时被重命名,以便手机创建自己的表。没有删除任何数据 手机这边无需任何操作。如果那张表属于你的某个脚本,请给它换一个表名:它在旧表名下找不到自己的数据。phoneimport 会从那里读取旧手机的数据(导入数据,“与 Pulse Phone 同名的表”)。
启动检查:[WARN] Database <table> is missing columns the phone writes (...) 这张表与手机的表同名,但缺少手机要写入的某一列,又不能明确判断属于其他脚本。它被有意保持不动:错误的重命名比一条警告更糟 如果是其他脚本创建的,请在数据库工具中把它重命名为 old_<table> 并重启。如果不是,请把那一行发给支持(第 12 节)。规则见导入数据。
db: could not create table ... check that the database user may CREATE TABLE 数据库用户无法建表 给该用户授予 CREATE 和 ALTER 权限,或手动导入 phone.sql。
db: could not add column ... 该用户无法 ALTER 表 同上。
is running but the database did not answer oxmysql 在运行但连不上数据库 修正 mysql_connection_string。手机会自动重试。
no SQL resource running - storing data in the resource key/value store oxmysql 没有启动,或在手机之后启动 在手机之前启动 oxmysql。
oxmysql 日志中出现 auth_gssapi_client 数据库用户被设置为 Windows 登录 把该用户改为密码登录:ALTER USER 'fivem'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('your-password');
phone_db_fallback is "kvp", so the key/value store takes over 数据库没有响应,且已开启回退 数据正在写入键值存储,不会进入数据库。请修复连接。
db: no answer within 10 s, answered as failed: <query> 该查询一直没有返回(数据库缓慢或被锁) 发起请求的应用已被告知失败。请检查 SQL 资源的日志。

通话、照片和手机

你看到的现象 原因 修复
通话能接通但没有声音,no voice resource 没有运行语音脚本 在手机之前启动 pma-voice(或第 5 节中的其他语音资源)。
没有声音,2 voice resources running 两个语音脚本在争抢相同的频道 只运行一个。
视频通话只显示发起方的画面 两名玩家无法直接连接 按照第 5 节中链接的进阶指南配置视频中继。
合并后的通话有声音但没有画面 多人视频已禁用,或配置的视频位已满。语音参与者可以在没有视频位的情况下继续留在会议中。 在 config/config.lua 中检查 Config.Calls.groupVideo 和 Config.Calls.groupVideoMax。多人视频默认开启,有四个视频位。正式环境的连接请按照第 5 节中链接的视频中继设置操作。
相机录的视频没有声音,仅某一名玩家如此 该玩家曾经拒绝过游戏的麦克风请求。FiveM 会把这个回答记在 %AppData%\CitizenFX\media_access.json 中,之后不再询问。 让玩家关闭 FiveM,删除 %AppData%\CitizenFX\media_access.json,重新启动游戏,并在询问时允许使用麦克风。
照片无法保存,screenshot-basic not started screenshot-basic 没有运行 在手机之前启动它。
照片能保存但显示为损坏 phone_media_origin 是普通的 http:// 使用 https:// 地址,或删除该设置,或使用 Fivemanage(第 6 节)。
refused a media link on "<host>" 链接来自不在允许列表中的主机 把该主机加入 Config.Media.allow(第 6 节),或继续拒绝它。
Radio 应用提示对讲不可用 没有运行语音脚本,或使用的是 YACA 见第 5 节,Radio。
Radio:"You need a radio to tune in" 设置了 Config.Radio.item,而玩家没有携带该物品 给他们这个物品,或设置 item = false(位于 config/apps.lua)。
公用电话因钱不够拒绝通话 Config.Payphone.pay 指定的账户余额不足,或自定义桥接没有金钱函数 在 standalone 服务器上谁都没有现金:保持 pay = 'either' 或使用 'bank'。
无法在文本框中输入 手机打开时,其他脚本调用了 SetNuiFocus(false, false) 找出那个脚本(NUI devtools 会显示)。
启动检查:phone_media_origin not set 服务器没有公开的 Cfx.re 地址(本地或局域网测试服务器) 同一台电脑或同一网络上的玩家没有问题。对于公开服务器,请确认它已在列表中显示,或设置 setr phone_media_origin "https://..."(第 6 节)。
手机不可见、显示为原版手机,或手中是一个灰色方块 手机模型没有流式加载。F8 显示 the handset model "pulse_titanium" did not load.(或 pulse_ultra、pulse_clear、pulse_flip,取决于那部手机的机型) 把 sv_enforceGameBuild 设为 2699 或更新。重新上传未经修改的 stream/,并保留每一行 data_file(位于 fxmanifest.lua)。

商店和物品

你看到的现象 原因 修复
没有商店店员 店员只在约 60 m 内出现。商店可能已关闭,或你的地图覆盖了 Legion Square 检查 Config.Store.enabled。在 Config.Store.locations 中移动柜台。
store: the item "pulse_phone_box" ... is not registered in your inventory 缺少手机盒物品 添加它(第 4 节)。在此之前,手机会不带盒子直接交付。
商店提示“背包已满”,但玩家还有空位;控制台显示 store: the inventory would not take <item> 该物品不在你背包的物品列表中,所以背包拒绝了它 添加控制台点名的物品(第 4 节,以及 config/items/),或设置 Config.Store.box = false 不带盒子交付手机。该次购买已退款。
商店里没有 Reserve 或数据线,或出现 store: the item "pulse_cable" ... 你的背包中缺少充电物品 添加 pulse_magpack、pulse_magpack_max 和 pulse_cable(第 4 节)及其图片。
商店里没有 Pulse Home Wi-Fi,或出现 store: the item "pulse_router" ... 你的背包中缺少路由器物品,或 Config.Wifi.enabled 为 false 添加 pulse_router(第 4 节)及其图片。
F8 中出现 Home Wi-Fi: the model "pulse_router" is not streamed stream/ 没有完整上传 重新上传未经修改的 stream/。Wi-Fi 仍然可用;只是路由器不会被绘制出来。
商店里没有 Pulse Burner,或出现 store: the item "pulse_burner" ... 你的背包中缺少一次性手机物品,或 Config.Burner.enabled 为 false 添加 pulse_burner(第 4 节)及其图片。
F8 中出现 Pulse Burner: the model "pulse_burner" is not streamed stream/ 没有完整上传 重新上传未经修改的 stream/。一次性手机仍然可用;手中显示的是 Pulse 手机。
警员没有 Intercept 应用,或提示他们不在岗 他们的职业不在 Config.Taps.jobs 中,等级低于 minGrade,或框架显示他们不在岗 检查 config/apps.lua 和他们的职业。
"A router can only go inside a home you own or have a key to" placement 为 'housing'(或在有房产脚本时为 'auto') 把它放在你的住宅内,或修改 placement(位于 config/apps.lua)。
路由器放不下:光圈一直是红色,或有消息说明原因 该位置违反了某条规则。必须是距离玩家约 3 m 以内的平面(不能是墙或斜坡),与其他路由器相距至少 minSpacing(8 m),并且玩家已放置的数量必须少于 maxPerPlayer(2)。设置 placement = 'interior' 时必须在室内("A router has to go indoors")。设置 'housing' 时必须在其拥有或持有钥匙的住宅内。 站近一点,对准地板或桌子。先收起一台旧的路由器。或修改 placement(位于 config/apps.lua)(第 8 节,Home Wi-Fi)。
"Routers go in homes, and this server has no housing script the phone can read" placement = 'housing',但第 7 节中的房产脚本一个都没有运行 把 placement 设为 'auto' 或 'interior',或运行一个受支持的房产脚本。
物品显示时没有图片 图片没有复制 把 config/items/images/ 复制到你背包的图片文件夹。启动检查的 Item pictures 一行会点名缺失的图片和文件夹。
启动检查:[FAIL] Items ... missing in ox_inventory ox_inventory 只读取它自己的物品文件 把提示框下方打印的条目粘贴到 ox_inventory/data/items.lua 中,然后重启 ox_inventory 和手机。
启动检查:Phone item ... opens <another script> ox_inventory 的 phone 条目指向其他脚本的导出函数 用提示框下方打印的条目(Settings > Server > Health Check 中也有,带 Copy 按钮)替换该条目,然后重启 ox_inventory。原版自带的条目保持原样即可。
启动检查:[INFO] Items TMC keeps no item list the phone can read TMC 没有办法列出它的物品,所以手机无法判断有哪些。这是提示信息,不是错误 确保提示框下方打印的每个物品都在 TMC 的物品列表中。商店会点名 TMC 拒绝的任何物品。
启动检查:[WARN] Items ... restart the server once so ESX loads them 物品已添加到 ESX 的 items 表中,但这个版本的 ESX 无法在运行时重新加载它们 重启一次服务器。
启动检查:[WARN] Items ... could not add the items itself 手机无法写入 ESX 的 items 表或 QBCore 的物品(原因写在那一行上) 手动添加:运行 config/items/esx.sql(ESX),或把 config/items/qb-core.lua 粘贴到 qb-core/shared/items.lua 中(QBCore),然后重启。
Unique phones are waiting for their inventory. 已开启唯一手机,但它所需的背包一个都没有运行 在手机之前启动所选的受支持背包,并检查 Config.Providers.inventory。Pulse 会保留唯一手机设置,并在该背包可用时恢复;不要只为了绕过这条警告去修改归属模式。
账单无法支付:没有收款方 账单所属公司在公司账户脚本中没有账户,或找不到账单发送者 设置 Config.Bills.payToCity = true,把这类账单作为城市罚款收取。

其他脚本、语言和服务

你看到的现象 原因 修复
某个脚本针对其他手机报错 No such export 它调用了其他手机的导出函数,例如 exports['<old phone>']:SendMail。Pulse Phone 不会复制其他手机的导出函数。 把该调用改为 Pulse Phone 自己的导出函数(导出函数),或请脚本作者提供 Pulse Phone 选项。使用事件的脚本无需任何改动。
No such export,针对 phone 手机的文件夹被改了名 把它改回 phone(见下文)。
语言不对 Config.Locale 设置成了其他语言,或玩家自己选了别的语言 设置 Config.Locale。每位玩家可以在 Settings > General > Language 中选择自己的语言。
文字显示为类似 key.answer 的键名 旧的 config/locales/ 文件夹覆盖了新的 使用新的语言文件。手动重新应用你自己的措辞。
App Hub 下载提示 No Connection 手机在这里没有蜂窝信号(信号盲区,或开启 Carrier 后没有信号),也没有连接 Wi-Fi。下载需要 Wi-Fi 或移动数据。 移动到有信号的地方,或连接 Wi-Fi(Pulse Home Wi-Fi 路由器)。
App Hub 下载提示 No Cellular Plan、Data Limit Reached 或 Cellular Data Is Off Carrier 已开启,而手机没有套餐或流量已用完,或玩家关闭了蜂窝数据 在 Carrier 应用中购买或升级套餐(Carrier 开启时每部手机都会安装),重新开启蜂窝数据,或连接 Wi-Fi。
所有人都显示 "No Service" Carrier 已开启(Config.Carrier.enabled = true 或 setr phone_carrier 1),所以每部手机都需要套餐 玩家在 Carrier 应用中购买套餐。或者关闭它:设置 enabled = false,并删除 setr phone_carrier 这一行。
只有某些地方没有信号 信号盲区已开启(Config.Coverage.enabled) 在游戏内用 phone:zone show 检查你的区域。紧急呼叫始终可用。

Settings > Server、紧急警报和更新

你看到的现象 原因 修复
Settings 中没有 Server 一行 玩家没有 ace phone.admin,或设置了 Config.OwnerTools.enabled = false add_ace group.admin phone.admin allow,并把该玩家加入 group.admin,然后重新打开 Settings。
phone:setup 没有反应 在服务器控制台中输入的,或玩家不是管理员 以管理员身份在游戏内(F8)输入。在控制台中,phone:health 会打印同样的检查。
在游戏内做的修改没有生效 它被标记为 Restart needed 重启手机(ensure phone)或服务器。启动检查的 Restart 一行会列出待生效的项目。
编辑 config/ 文件没有任何变化 该设置曾在游戏内修改过,游戏内的值优先 在 Settings > Server 中对它按 Reset to Default,或在控制台中运行 phone:reset <key>。
Settings > Server 中所有内容都是只读的 Config.OwnerTools.enabled = false(位于 config/apps.lua) 把它设为 true 并重启手机。
某个设置下方显示 Not saved: ... 该值不是这个设置能接受的(超出范围、格式不对、职业名称带空格) 使用消息中描述的值。
没有人收到紧急警报 设置了 Config.Broadcast.enabled = false,或玩家在你画的圆圈范围之外 检查 config/apps.lua。测试时发送给全城。
玩家收到严重或提示级警报时没有声音,或根本收不到 每位玩家都可以关闭这些级别,严重警报遵循静音模式 这是玩家自己的选择。极端警报总会响铃。
警员没有 New Alert 按钮 他们的职业不在 Config.Broadcast.senders 中,等级低于所列等级,或他们不在岗 把 'police:3'(职业:最低等级)加入 senders,或设置 requireDuty = false。
Wait ... before sending another alert 发送者的冷却时间(cooldownSeconds)或每小时上限(perHour) 等一等,或在 config/apps.lua 中提高上限。
启动检查中没有 Update 一行 手机无法访问更新文件(没有网络、防火墙),或设置了 Config.UpdateCheck.enabled = false 无需修复:没有它手机也照常运行。设置 Config.Debug = true 时,控制台会说明原因。

较新的功能

你看到的现象 原因 修复
没有 Shade 应用 Shade 默认关闭,并且需要 pulse_vpn 物品、列出的职业或 access.everyone 设置 Config.DarkMarket.enabled = true(位于 config/apps.lua),并检查其 access 配置块。
商店里没有 SIM 卡,或 Settings 中没有话费余额 SIM 卡默认关闭(Config.Sim.enabled),预付费话费是另一个开关(prepaid) 在 config/apps.lua 中开启它们,并把 pulse_sim 和 pulse_topup 加入你的背包(第 4 节)。
Pulse Beacon 无法贴到车上 玩家离车辆太远(attachRange,4 m),或已拥有 maxPerPlayer(8)个 站到车旁边。检查 config/apps.lua。
"An unknown Pulse Beacon is moving with you" 这是安全警告:别人的信标与该玩家一起移动了 alertAfter 秒 这是预期行为。只有当你的规则允许秘密追踪时,才设置 alert.enabled = false。
Pulse Buds、Ring Light 或 Card Wallet 无法从背包中使用 缺少它们的物品,或已被关闭 添加 pulse_buds、pulse_ringlight 和 pulse_wallet(第 4 节),并检查 config/apps.lua。
Slipstream 不让玩家创建或加入比赛 他们离起点线超过 joinRadius(60 m),比赛已满(maxRacers),或报名费不在 minFee 到 maxFee 之间 开到起点线。检查 config/apps.lua。
Hail:司机一直接不到单 他们的车辆类别或车型不被允许,职业不在 driver.jobs 中,缺少 driver.licenceItem,或不在 serviceArea 范围内 检查 driver 配置块(位于 config/apps.lua)。
Eats 订单从来没有玩家配送 没有在岗的、职业在 couriers.jobs 中的配送员;开启 cityCourier.enabled 时会改由城市配送 把你的配送职业加入 config/apps.lua(或在 Settings > Server > Jobs 中添加)。
Realty 不显示任何房屋 你的房产脚本无法列出在售房屋,且 Config.Homes.listings 为空 在 config/apps.lua 中添加房源,或运行第 7 节中的某个房产脚本。
Realty 中没有中介收到看房请求 没有在岗玩家的职业在 realtor.jobs 中 在 config/apps.lua 中添加你的职业名称(或在 Settings > Server > Jobs 中添加)。
实时游戏:收不到邀请 该游戏在 config/apps.lua 中被关闭,或邀请等待时间超过了 inviteSeconds 检查 config/apps.lua,然后重新发送邀请。
公司热线没人接,或来电者一直在等待 没有人以调度员身份登录该热线,或没有成员在岗 见 config/apps.lua:调度员在 Services 应用中登录。
Groups:"the group is full" maxMembers(6 人,含队长) 在 config/apps.lua 中调高。
突发新闻没有通知任何人 breaking.enabled 已关闭,或冷却时间(cooldownSeconds、perAuthorSeconds)未过 检查 config/apps.lua,或 Settings > Server > News。

安装和版本问题

你看到的现象 原因 修复
启动时出现 You lack the required entitlement 或加密(escrow)错误 服务器密钥所属的 Cfx.re 账户与购买 Pulse Phone 的账户不同 资源必须由同一个 Cfx.re 账户拥有,即你的服务器密钥(sv_licenseKey)所属的账户。请在该账户的 Keymaster(Granted Assets)中下载手机。别人给的副本永远无法运行。
启动时出现 Failed to verify protected resource phone,控制台或 F8 中对加密文件夹里的文件显示 syntax error near '<\1>' 上传改动了加密文件:FTP 客户端以文本(Auto/ASCII)模式发送了它们,或上传被中断。授权没有问题(账户不对时显示的是 You lack the required entitlement) 删除服务器上的 phone 文件夹,从 Keymaster 重新下载,并用 Binary 模式上传(FileZilla:Transfer > Transfer Type > Binary),或上传 zip 后在服务器上解压。把文件夹与 INSTALL.md 中的文件表比对。
启动检查:[FAIL] Package ... file(s) missing or the wrong size,点名 ui/、data/ 或 stream/ 中的文件 这些文件没有按构建时的样子到达:上传不完整、FTP 以文本模式传输,或被杀毒软件删除了其中一个 修复方法相同:重新下载,然后用 Binary 模式上传或在服务器上解压 zip。如果文件再次消失,请在杀毒软件中排除服务器文件夹。stream 文件只检查是否存在(escrow 会改变它们的大小),加密代码由服务器自己检查。
启动检查:[FAIL] Package the file list is from build ... files from two downloads are mixed ui/ 和文件夹的其余部分来自不同的下载 删除文件夹,完整解压同一次下载。stream/ 和 ui/ 务必来自同一个版本。
启动检查:[WARN] Package data/package.json is missing or unreadable 每个版本附带的文件清单没有到达 重新上传整个文件夹(Binary 模式),包括 data/。
重命名文件夹后,其他脚本或物品失效 其他脚本和物品条目都以 phone 这个名称访问手机(exports.phone、phone.useItem) 保持文件夹名为 phone。
更新后行为异常,your config has no Config.Charging section 旧的 config.lua 被复制覆盖了 它缺少的部分会使用默认值。从新的 config/config.lua 中复制缺失的部分,或直接从新文件开始。
更新后,旧的适配器导致脚本无法连接 旧的 bridge/ 文件(来自本版本或更旧版本)被复制回来了 使用新文件(第 10 节)。
启动了两部手机 旧的 phone 文件夹仍在 resources 下的某处 把它移出 resources。

译自英文。如有任何内容与英文页面不一致,以英文页面为准。 English