返回博客
Article1 分钟阅读

FiveM 电话与平板:哪个设备脚本适合您的服务器

FiveM服务器上使用电话还是平板?比较屏幕尺寸、应用、性能和角色扮演深度,选择适合你社区的设备。

Agency Scripts

Agency Scripts 创始人兼首席开发者

实时演示

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

打开演示

实时演示

在浏览器中试用Agency Pad,完整互动平板演示。

打开演示

为什么要用两个设备而不是一个?

当我们首次发布 Agency Phone 时,它迅速成为数百个 FiveM 服务器的首选游戏内电话。但随着服务器所有者构建更复杂的角色扮演生态,玩家反复提出需求:希望有更大屏幕以便浏览 MDT、管理业务或在角色扮演中查看文档。这正是我们开发 Agency Pad 的原因。我们没有将所有功能挤压在单一手机界面,而是将体验拆分为两个专用设备。手机处理快速、随时的交互,如通话、短信和通知,平板则提供完整的平板体验,适合数据密集型任务。本文详细说明何时使用各设备及它们如何在服务器上互补。

屏幕空间与界面布局

Agency Phone和Agency Pad最明显的区别是屏幕尺寸。Agency Phone使用大约360x640像素的紧凑移动视口,设计为位于玩家屏幕角落,不阻碍游戏操作。Agency Pad则打开约800x600像素的平板视口,占据更多屏幕空间,但提供显著更多的可用空间。这在构建显示表格、表单或地图的应用时很重要。手机尺寸的联系人应用运行良好,但试图在360像素宽的屏幕上放置完整的警察MDT,包括嫌疑人记录、逮捕令和证据照片时,空间很快变得拥挤。以下是如何检测应用运行设备并相应调整布局的方法:

-- client.lua: Detecting active device
local activeDevice = nil

RegisterNetEvent('agency:phone:opened', function()
    activeDevice = 'phone'
    SendNUIMessage({ action = 'setDevice', device = 'phone' })
end)

RegisterNetEvent('agency:pad:opened', function()
    activeDevice = 'pad'
    SendNUIMessage({ action = 'setDevice', device = 'pad' })
end)

-- In your NUI JavaScript
window.addEventListener('message', (e) => {
    if (e.data.action === 'setDevice') {
        document.body.classList.toggle('device-phone', e.data.device === 'phone')
        document.body.classList.toggle('device-pad', e.data.device === 'pad')
    }
})

功能一览对比

两款设备共享通用应用框架,这意味着您开发的任何应用理论上都能在任一设备上运行。但某些功能针对特定设备进行了优化。Agency Phone 擅长于 调用和语音聊天集成, 短信和消息, 快速通知, 摄像头和照片库, 联系人管理,和 GPS 导航. Agency Pad以其出色表现闪耀。 MDT 和警察记录, 业务管理仪表盘, 文档查看和编辑, 带有多个标记的地图覆盖层, 库存管理网格,和 管理面板. 关键区别在于交互频率与信息密度。如果玩家需要在游戏中快速查看某些内容,应放在电话上;如果需要坐下来处理数据,平板是正确选择。

性能考虑因素

同时运行两个 NUI 设备是服务器所有者常见的性能担忧。好消息是 Agency Phone 和 Agency Pad 都基于相同的优化渲染引擎。设备关闭时,其 NUI 框架会被完全销毁而非仅隐藏,从而释放内存和 GPU 资源。平均来看,打开任一设备大约消耗 0.01ms 客户端帧时间,可忽略不计。关键是避免同时打开两个设备。我们内置的设备管理器会自动处理此问题:打开 Pad 时关闭电话,反之亦然。如果您在构建自定义集成,请务必遵守此模式:

-- Ensure only one device is active at a time
local function openPad()
    if GetResourceState('agency-phone') == 'started' then
        TriggerEvent('agency:phone:close')
    end
    Wait(100) -- Allow phone NUI to clean up
    SetNuiFocus(true, true)
    SendNUIMessage({ action = 'openPad' })
end

local function openPhone()
    if GetResourceState('agency-pad') == 'started' then
        TriggerEvent('agency:pad:close')
    end
    Wait(100)
    SetNuiFocus(true, true)
    SendNUIMessage({ action = 'openPhone' })
end

使用场景:警察与急救服务器

执法和紧急服务角色扮演是phone-plus-pad组合真正发挥作用的地方。巡逻警员使用Agency Phone进行无线电通信,通过简单命令快速查询车牌,并接收调度通知。当他们到达警局或需要进行详细工作时,会拿出Agency Pad访问完整的MDT,包括嫌疑人档案、案件文件、逮捕令管理和证据追踪。EMS玩家使用电话接听紧急呼叫,使用平板管理病人记录和医院管理。这种分工反映了现实世界中第一响应者的操作方式:无线电和电话用于现场通信,笔记本或平板用于详细数据录入。工作流程自然流畅,保持角色扮演的沉浸感,因为玩家根据当前任务在设备间切换。

使用场景:商业与经济服务器

对于拥有深度经济系统的服务器,pad成为必不可少的商业管理工具。餐厅老板使用Agency Phone通过快速短信接单并接收送货通知,Agency Pad作为销售点系统、库存跟踪器和财务仪表盘。汽车经销商在pad的大型网格视图中浏览车辆库存,附带照片、价格和库存水平,然后切换到电话联系潜在买家。房地产代理通过pad的地图界面查看房产列表,并通过电话日历安排看房。模式一致:电话处理通信和快速查询,pad处理需要更大视口和复杂UI元素的内容。

构建可在两种设备上运行的应用程序

如果您正在开发自定义应用,最佳方法是响应式设计,适应加载它的任何设备。使用CSS容器查询或简单的基于类的样式根据活动设备调整布局。将核心逻辑保存在共享JavaScript模块中,仅分支UI层。这里是一个实用的响应式应用组件示例,根据设备上下文调整网格布局:

/* styles.css - Responsive app layout */
.app-grid {
    display: grid;
    gap: 0.75rem;
    padding: 1rem;
}

.device-phone .app-grid {
    grid-template-columns: 1fr;
    font-size: 0.875rem;
}

.device-pad .app-grid {
    grid-template-columns: repeat(3, 1fr);
    font-size: 1rem;
}

.device-phone .detail-panel {
    display: none; /* Hide detail panel on phone */
}

.device-pad .detail-panel {
    display: block;
    border-left: 1px solid rgba(255,255,255,0.1);
    padding-left: 1rem;
}

/* Phone: stack navigation vertically */
.device-phone .app-nav {
    display: flex;
    overflow-x: auto;
    white-space: nowrap;
}

/* Pad: sidebar navigation */
.device-pad .app-nav {
    display: flex;
    flex-direction: column;
    width: 200px;
}

你应该为你的服务器购买哪个?

如果您运营通用角色扮演服务器且只能选择一个,建议从Agency Phone开始。它涵盖最常见的玩家交互,每个服务器都需要一个稳定的电话系统。服务器发展到更复杂系统如MDT、业务管理或管理工具时,再添加Agency Pad。如果您从一开始就构建严肃的执法或经济服务器,建议两者都用。组合体验比强行将所有功能塞入单一设备更具沉浸感。两款产品均定期更新并共享相同插件API,您在自定义应用开发上的投资可无缝在两设备间传承。若决定同时购买,请查看我们的捆绑价格。

准备好开始了吗?

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