Pulse Phone 文档
背包
4. 物品和背包
只有使用框架的服务器才需要物品。文件在 config/items/ 中,图片在 config/items/images/ 中。
手机会自己做什么。启动时,它会算出你已开启的功能需要哪些物品(见下表),然后:
| 你的背包 | 会发生什么 |
|---|---|
| ESX 及其默认背包 | 缺失的物品会被添加到 ESX 的 items 表中。现有行绝不会被修改。控制台会打印一行说明添加了什么。在无法重新加载物品的旧版 ESX 上,请重启一次服务器。config/items/esx.sql 只用于手动添加。 |
| QBCore 搭配 qb-inventory(ps-、lj-inventory 也一样) | 缺失的物品会在服务器运行时添加到 QBCore 的共享物品中。qb-core 已有的物品,比如它自己的 phone,保持不变。控制台会打印一行说明添加了什么。 |
| ox_inventory(ESX、Qbox、ox_core) | ox_inventory 只从它自己的文件读取物品。启动检查只列出缺失的物品,并在提示框下方打印它们的条目,可直接粘贴到 ox_inventory/data/items.lua 中。 |
| 其他任何背包 | 启动检查会列出缺失的物品。按照该背包添加物品的方式添加它们(见“你的背包需要做什么”下的表格)。 |
重要
图片永远不会自动替你复制。启动检查会指出每张缺失的图片及其应放入的文件夹,例如 copy pulse_magpack.png, pulse_router.png from config/items/images/ into qb-inventory/html/images。
启动检查中有一行 Items:所有物品都在时显示 [OK],否则显示 [FAIL],并在下方列出缺失的名称和修复方法。修复后运行 phone:health 可再次打印。
| 物品 | 何时需要 |
|---|---|
phone |
仅在 Config.Item.required = true(玩家必须携带手机)或开启唯一手机时。 |
pulse_phone_box |
商店以密封盒出售手机。默认开启(Config.Store.box)。 |
pulse_magpack, pulse_magpack_max, pulse_cable |
充电配件。默认开启(Config.Charging)。 |
pulse_router |
Pulse Home Wi-Fi,玩家放在家里的路由器。默认开启(config/apps.lua)。 |
pulse_burner |
Pulse Burner,一部有独立号码的预付费手机。默认开启(config/apps.lua)。 |
pulse_case, pulse_case_clear, pulse_pouch, pulse_protector |
手机保护:手机壳、防水袋和屏幕保护膜。默认开启(config/apps.lua)。 |
pulse_buds, pulse_ringlight, pulse_wallet |
Pulse Buds、Pulse Ring Light 和 Pulse Card Wallet。默认开启(config/apps.lua)。 |
powerbank |
可选。旧的充电宝物品;它的作用与 Reserve 相同。 |
pulse_phone_box_<finish> |
仅在 Config.Store.boxPerFinish = true 时。 |
radio(或任意名称) |
仅当你设置了 Config.Radio.item 时(第 5 节,Radio)。ox_inventory 和 qb-core 已经有 radio 物品。 |
缺少某个物品时,手机仍会启动。商店会关闭盒子或下架该物品,控制台会点名需要添加的物品。
Reserve 可以堆叠。满电的充电包不带元数据,所以最多 20 个共用一个格子。用过一部分后取下的充电包会成为独立物品,电量保存在元数据中(在 ox_inventory、qb-inventory 和 qs-inventory 上),所以需要一个空格子。没有物品元数据时(standalone、ESX 默认背包),只追踪正在使用的那个充电包,每个角色每种尺寸一个。
当 Config.Item.required = true 时(或开启唯一手机),服务器会通过你的背包检查手机物品,并拒绝没有手机物品的玩家的手机请求。失去该物品会结束该玩家的通话(包括紧急呼叫),并关闭手机。
把密封盒送给别人。在 ox_inventory、qb-inventory 和 qs-inventory 上,盒子物品本身带有所购买的机型和外观,所以谁打开就得到那部手机。在其他所有背包上,盒子是普通物品,机型和外观保存在买家自己的购买记录中:送出的盒子会按新主人自己的下一次购买打开,或者打开为默认机型和外观。设置 Config.Store.boxPerFinish = true 时,盒子物品名称会保留外观,但不保留机型。
适用于你背包的、可直接粘贴的文本
你永远不需要自己琢磨物品条目。缺少物品时,启动检查会在提示框下方打印适用于你的背包的确切文本,Settings > Server > Health Check 也会显示同样的文本,并带有 Copy 按钮。粘贴后重启背包和手机,再运行一次 phone:health。
| 你的背包 | 打印的内容 | 放到哪里 |
|---|---|---|
| ox_inventory(ESX、Qbox、ox_core、ND Core) | ox_inventory 条目 | ox_inventory/data/items.lua,放在其表内 |
| QBCore(qb-、ps-、lj-inventory) | QBCore 条目(仅当手机无法自己添加时) | qb-core/shared/items.lua |
| qs-inventory | QBCore 格式的条目 | qs-inventory 的物品列表 |
| ESX 默认背包 | 一行 SQL(仅当手机无法自己添加时) | 你的数据库工具,然后重启 |
| TMC | 手机需要的每个物品的 TMC 条目(无法向 TMC 查询它已有哪些) | TMC 的物品列表(包含 sim_card 的那个文件),保留你已有的条目 |
| 其他任何背包 | QBCore 格式的条目,大多数背包都能读取这种格式 | 该背包的物品列表 |
以 Reserve 为例,每种格式的样子:
-- ox_inventory/data/items.lua
['pulse_magpack'] = { label = "Pulse Reserve", weight = 110, stack = true, close = true, consume = 0, description = "Magnetic battery pack. Fills 70% of a phone.", client = { export = "phone.usePack", image = "pulse_magpack.png" } },
-- qb-core/shared/items.lua, qs-inventory and similar
['pulse_magpack'] = { name = "pulse_magpack", label = "Pulse Reserve", weight = 110, type = 'item', image = "pulse_magpack.png", unique = false, useable = true, shouldClose = true, description = "Magnetic battery pack. Fills 70% of a phone." },
-- TMC
['pulse_magpack'] = { ['label'] = "Pulse Reserve", ['weight'] = 110, ['type'] = 'item', ['image'] = "pulse_magpack.png", ['unique'] = false, ['stackable'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = "Magnetic battery pack. Fills 70% of a phone." },-- ESX default inventory
INSERT IGNORE INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES
('pulse_magpack', 'Pulse Reserve', 1, 0, 1);ox_inventory 自带的 phone 物品。ox_inventory 自带一个为其他手机脚本制作的 phone 条目。你不需要修改它:使用它会打开 Pulse Phone。启动检查中有一行 Phone item,说明你的条目是如何对接的。只有当它指向其他脚本的导出函数时([WARN],或在要求携带手机或开启唯一手机时为 [FAIL]),才会打印替换用的条目。如果该条目所对应的手机脚本仍在运行,物品会改为打开那个脚本:Phone item 一行会点名它;请把它从 server.cfg 中移除。
你的背包需要做什么
| 背包 | 物品放到哪里 | 图片放到哪里 |
|---|---|---|
| ox_inventory(ESX、Qbox、ox_core) | 把启动检查打印的条目(或整个 ox_inventory.lua)粘贴到 ox_inventory/data/items.lua 的表内。保留 ox_inventory 自带的 ['phone'] 条目(它会打开 Pulse Phone);只有当 Phone item 一行显示它打开的是其他脚本时,才用打印的条目替换它 |
ox_inventory/web/images/ |
| qb-inventory | 无需操作:启动时自动添加。如果想手动添加,请把 qb-core.lua 粘贴到 qb-core/shared/items.lua 中 |
qb-inventory/html/images/ |
| ps-inventory、lj-inventory | 无需操作:启动时自动添加,与 qb-inventory 相同 | 你背包的图片文件夹 |
| qs-inventory | 把 qb-core.lua 粘贴到 qb-core/shared/items.lua 中,或粘贴到 qs-inventory 自己的物品列表中 |
你背包的图片文件夹 |
| codem-inventory、core_inventory、tgiann-inventory、origen_inventory | 像添加任何物品一样,把物品加入它的物品列表,使用 qb-core.lua 中的名称、标签和重量(phone、powerbank、pulse_magpack、pulse_magpack_max、pulse_cable、pulse_router、pulse_burner、pulse_buds、pulse_ringlight、pulse_wallet、pulse_phone_box)。pulse_magpack.png 也同样用于 powerbank 和 pulse_magpack_max |
你背包的图片文件夹 |
| ak47_inventory | 添加物品,再加上下方的 onUse 行 |
你背包的图片文件夹 |
| ESX 默认背包 | 无需操作:启动时自动添加。esx.sql 用于手动添加 |
不需要 |
| vRP 2 | 见上方 vRP 部分 | |
| Standalone | 无需操作 |
对于本表中的其他背包,手机会自己让物品可用。ox_inventory 使用其文件中已有的 client = { export = 'phone....' } 行。
ox_inventory:如果你之前用过其他手机,还要移除它的 Item('phone', ...) 钩子,位于 ox_inventory/modules/items/client.lua。
ak47_inventory 把物品的使用逻辑写在每个物品自己的条目中。添加以下内容:
-- powerbank
server = { onUse = function(source) exports.phone:UsePowerbank(source) end },
-- pulse_magpack and pulse_magpack_max
server = { onUse = function(source, item) exports.phone:UseMagPack(source, item and item.slot, item and item.name) end },
-- pulse_cable
server = { onUse = function(source) exports.phone:UseChargingCable(source) end },
-- pulse_phone_box
server = { onUse = function(source, item) exports.phone:UseBox(source, item and item.slot) end },
-- pulse_router
server = { onUse = function(source) exports.phone:UseRouter(source) end },
-- pulse_burner
server = { onUse = function(source, item) exports.phone:UseBurner(source, item and item.slot) end },
-- pulse_case, pulse_case_clear, pulse_pouch, pulse_protector
server = { onUse = function(source, item) exports.phone:FitPhoneProtection(source, item and item.name) end },
-- pulse_buds
server = { onUse = function(source) exports.phone:UseBuds(source) end },
-- pulse_ringlight
server = { onUse = function(source) exports.phone:UseRingLight(source) end },
-- pulse_wallet
server = { onUse = function(source) exports.phone:UseCardWallet(source) end },唯一手机(Config.Item.unique = true)会把电话号码保存在物品上,所以交出物品就等于交出手机。需要 ox_inventory、qb-inventory、qs-inventory、core_inventory 或 codem-inventory。