返回博客
Scripts1 分钟阅读

Agency-Phone:专为 FiveM 打造的智能手机

从应用架构到高负载表现,了解 Agency-Phone 如何带来 FiveM 中最身临其境的游戏内智能手机体验。

Agency Scripts

Agency Scripts 创始人兼首席开发者

实时演示

在浏览器中试用Agency Phone,无需下载。

打开演示

为什么要打造又一个 FiveM 手机?

我们开发 Agency-Phone 是因为我们在自己的服务器上尝试的每款手机要么外观精美但性能差,要么性能好但外观过时。市场充满妥协。我们想要的是一打开就感觉像现代智能手机的产品,并且在放入口袋时资源占用达到0.00ms。

一个不像 FiveM 的用户界面

大多数 FiveM 手机打开两秒内就暴露出业余痕迹。字体稍显不对,动画卡顿,主屏布局像占位符。Agency-Phone 由每天使用真实智能手机的人设计。每个元素,从锁屏时钟到应用抽屉弹簧物理,都经过迭代,直到不再像脚本而更像手机。

应用架构

在底层,Agency Phone 使用懒加载应用系统。应用仅在实际打开时初始化界面,保持内存使用稳定,即使我们发布更多应用。客户端 Lua 与 NUI 层之间的事件总线经过防抖处理,避免快速用户操作导致游戏资源监控峰值。这种工程工作虽不显眼,但当服务器承载128名玩家时,人人受益。

默认框架无关

Agency-Phone 随附 QBCore 和 ESX 适配器,但核心部分与框架无关。如果你运行的是 standalone 服务器,并使用自己的玩家数据层,只需实现四个查询函数,就能在一个下午内完成接入。我们拒绝发布会将你锁定在某个框架中的脚本,因为框架不断更迭。在我们参与社区的这些年里,至少经历过三轮“这才是现在的标准”的潮流兴起又退去。

RP中电话的意义

FiveM 手机本质上是一种社交工具。玩家用它来协调聚会、进行毒品交易、给老板的角色发消息、在收音机应用上听音乐。我们对 Agency-Phone 添加或删除的所有功能,都会以是否让社交互动更简单或更有趣为标准。这就是为什么我们先发布了图库应用,再发布日历提醒,以及为什么默认消息应用先有丰富的输入指示器,再有定时发送功能。角色扮演优先,功能清单其次。

安装与设置

Agency-Phone 需要 oxmysql 来持久化联系人、消息和通话记录。请导入 phone.sql 进入您的数据库,从Tebex下载资源,放入您的资源目录,并添加 ensure agency-phone 到 server.cfg. 框架检测对 QBCore 和 ESX 是自动的。对于独立(standalone)设置,请在 config.lua 中实现四个适配器函数,通常根据你的自定义玩家数据层,工作量为一到两小时。

玩家通过按可配置快捷键(默认:M)或库存中的物品打开电话。两种方式同时支持,一些服务器使用快捷键,另一些则偏好沉浸式物品方式,电话可以被丢弃或被盗。

配置选项

该 config.lua 涵盖技术和游戏玩法设置:

  • 电话快捷键,打开/关闭电话的按键。默认:M。
  • 电话作为物品,切换是否需要背包中有手机物品。默认:禁用(仅按键)。
  • 号码格式,电话号码的显示方式及新角色的自动生成规则。
  • 通话范围,近距离通话与远距离(语音信箱)通话的最大物理距离。默认:角色内通话无限制。
  • Twitter/LifeInvader 集成,如果安装了Agency-LifeInvader,连接社交应用。
  • 无线电应用集成,配置音乐播放器应用的可用电台流。
  • 银行应用,连接QBCore银行、ESX账户或自定义银行处理程序。
  • GPS 应用,为服务器特定位置(医院、警察局、商家)提供自定义航点类别。
  • 通知路由,哪些外部脚本可以向手机推送通知及其显示方式。

框架兼容性

Agency-Phone 随附 QBCore 和 ESX 适配器。适配器涵盖金钱显示、背包物品(启用手机作为物品时)、用于控制特定职业应用可见性的职业数据,以及角色名称显示。对于 standalone,采用相同的四函数模式。为一个 Agency 脚本编写适配器后,后续脚本可以共用这些函数。

为什么这对角色扮演很重要

手机是角色携带的最个人化道具。玩家每次游戏都会与之互动,拨打电话、发送短信、查看银行余额、查看地图。当这种互动感觉像真实手机时,涉及手机使用的 RP 场景也更真实。通过 Agency-Phone 的短信应用协调的毒品交易,带有已读回执和输入指示,比通过聊天命令协调的同一交易场景有着明显不同(更好)的体验。

社交协调功能是手机最关键的RP角色。大多数重要RP事件始于沟通:有人联系、安排会面、提供坐标、确认时间。通过角色内频道而非Discord或OOC聊天进行的沟通更具沉浸感。Agency-Phone的通话和短信应用原生覆盖了95%的社交协调需求。

0.00ms的空闲资源使用不仅是技术注释,它使手机成为可始终开启的资源。一个128人服务器上空闲消耗0.02ms的脚本,累计会产生2.56ms的空闲负载。Agency Phone的空闲成本贡献为零。这对服务器性能的重要性与任何共享资源一样:与玩家数量成比例。

v2 中的图库应用和游戏内截图功能创造了一个意想不到的 RP 用例:角色内证据摄影。警察角色使用手机相机拍摄犯罪现场截图,并在其部门内部聊天中分享。记者拍摄事件照片并发布在 LifeInvader 上。相机将手机从通信工具转变为具有真实 RP 应用的文档工具。

常见问题

电话号码可以在服务器重置后保持吗?

电话号码存储在oxmysql中,关联角色标识符。只要角色标识符在清档后保持不变,号码就会保留。大多数服务器清档会清除角色进度但保留标识符,因此号码通常存活。对于包括标识符重置的完全清档,提供号码保留导出功能,可单独保存/恢复角色号码,独立于主清档。

警察可以实时追踪通话和消息吗?

是的。在config.lua中启用追踪系统。拥有所需权限标志的警察可以打开追踪面板并按号码搜索。活动呼叫来源显示在地图上。消息元数据(时间、号码对)存储在日志表中,可通过Agency-Admin访问。默认禁用完整消息内容追踪,作为隐私设计选择,如服务器RP规则支持,请明确启用。

玩家死亡或被拘留时,电话如何处理通话?

在 config.lua 中配置死亡状态和手铐状态。死亡玩家可以设置为直接进入语音信箱、禁用手机或仅允许紧急呼叫。被手铐玩家可以完全禁止使用手机或限制为仅 GPS 视图(以便警方看到他们没有呼叫支援)。这些状态通过您死亡屏幕和手铐脚本导出的函数检测。

音乐应用中有哪些电台?

默认电台列表包含八个社区广播流 URL,涵盖常见类型。通过添加流 URL 来添加你自己的,地址为 Config.RadioStations. 服务器通常会添加自己的服务器广播电台,工作人员在其中以角色身份播报新闻。没有 DRM 或流媒体服务集成,任何公开可访问的音频流 URL 都可用。

需求

  • FiveM 服务器(QBCore、ESX 或独立)
  • oxmysql
  • 拥有有效 Agency-Phone 许可证的 cfx.re 账户
  • 可选:Agency-LifeInvader(社交应用集成)
  • 可选:Agency-Pad(跨设备数据同步)

匹配的脚本

为你的服务器准备就绪,包含更新。

准备好开始了吗?

在我们的商店获取脚本,或加入 Discord 获取支持、更新以及新功能预告。