特征
- 允许其他插件调整实体大小
- 允许特权玩家使用命令调整实体大小
- 调整大小后隐藏球体实体的可选功能(性能密集型)
- 支持父级实体
工作原理
rust 原生支持调整大小的唯一实体是球体实体。要调整任何其他实体的大小,此插件将实体父级设置为球体并调整球体大小,从而同时调整子项的大小。每次客户端进入调整大小的实体的网络范围内时,客户端都会在几秒钟内观察实体大小调整。
使用案例
用例 #1:调整实体大小以获得乐趣
可以向玩家授予允许他们使用该命令的权限。建议仅供您信任的玩家(例如管理员)使用,因为这可能会被滥用,并且不适用于所有类型的实体。entityscalemanager.unrestricted
scale <size>
用例 #2:调整纪念碑插件生成的实体大小
纪念碑插件与实体缩放管理器集成,以检测何时使用 调整实体大小,以便以后记住该比例,以便在纪念碑插件重生实体或在重复纪念碑上生成实体副本时重新应用该比例。scale <size>
用例#3:其他插件可以依赖此插件来扩展实体
强烈建议这样做,而不是每个插件实现自己的调整大小逻辑。调整实体大小有几个问题,此插件为开发人员解决了这些问题,将在后面的部分中描述。
示例:巨型无人机依赖于实体缩放管理器和无人机缩放管理器来创建大型无人机。
用例#4:其他插件可以在调整大小后注册其缩放实体以隐藏黑色球体
如果您的插件已经实现了自己的调整大小逻辑,您仍然可以提供与此插件的可选集成,以便在调整大小后隐藏黑色球体,如果此插件已配置为执行此操作(它是性能密集型的,因此默认情况下处于禁用状态)。有关详细信息,请参阅文档后面的方法。API_RegisterScaledEntity
示例:无人机炮塔使用自己的逻辑调整炮塔大小(因为它早于实体缩放管理器),但它集成以允许在调整大小后隐藏球体。
权限
oxide.grant <user or group> <name or steam id> <permission>
oxide.revoke <user or group> <name or steam id> <permission>
entityscalemanager.unrestricted
— 允许不受限制地使用命令。将来可能会实施更多受限制的规则集。scale
命令
scale <size>
— 调整您正在查看的实体的大小。- 实体必须具有碰撞体,此命令才能找到它。
- 如果实体已调整大小,则会直观地将其重置为默认比例 (1.0),然后将其调整为所需的比例。这是有意为之的,因为它避免了各种边缘情况,否则此插件需要非常复杂的时间来缓解,特别是当启用配置选项以在调整大小后隐藏球体时。
- 当调整大小回到比例时,球体将被移除。
1.0
- 建议的最大比例为 。如果你走得更高,你可能会注意到碰撞体没有实体那么大。
7.0
getscale
— 打印您正在查看的实体的比例。
配置
EntityScaleManager
config
默认配置:
{
"Hide spheres after resize (performance intensive)": false
}
Hide spheres after resize (performance intensive)
(true
或 ) — 而 ,用于调整实体大小的透明黑色球体将在调整大小完成后隐藏。此效果是针对每个客户端的。false
true
- 警告:这是通过订阅 Oxide 非常频繁调用的钩子来实现的(有时在单个帧中超过 10k 次,具体取决于服务器)。调用插件的 Oxide 开销,加上每个钩子调用中插件的逻辑,乘以钩子调用的绝对数量,可能会导致人口多、实体数量多的服务器性能显著下降,特别是当玩家频繁生成或传送到具有许多实体的区域时。如果您的服务器已经存在性能问题,请不要启用此功能。
- 您可以通过在启用此选项的情况下重新加载插件来测试此功能的性能成本,同时在之前和之后监控服务器 FPS。您还可以从运行时 Oxide 在插件旁边报告的总挂机时间(以秒为单位)中了解。注意:当插件加载时,插件的总钩子时间预计从 0 开始,并且随着插件逐渐使用钩子,它随着时间的推移而增加。如果该数字快速攀升(例如,每分钟 1 秒),则意味着该插件可能占用了您整体性能预算的很大一部分。
o.plugins
地方化
EntityScaleManager
lang/en
de
{
"Error.NoPermission": "You don't have permission to do that.",
"Error.Syntax": "Syntax: {0} <size>",
"Error.NoEntityFound": "Error: No entity found.",
"Error.NotTracked": "Error: That entity is not tracked by Entity Scale Manager.",
"Error.NotScaled": "Error: That entity is not scaled.",
"Error.ScaleBlocked": "Error: Another plugin prevented you from scaling that entity to size {0}.",
"Error.CannotMoveWithHiddenSpheres": "You may not move resized entities while spheres are configured to be hidden.",
"GetScale.Success": "Entity scale is: {0}",
"Scale.Success": "Entity was scaled to: {0}"
}
已知限制
某些类型的实体在调整大小方面没有问题。其他实体类型可能存在许多问题。以下是一些需要注意的问题。
- 调整玩家或 NPC 的大小不起作用 – 不要这样做。无法修复。
- 调整车辆大小会破坏它们的物理特性 – 不要这样做。可以修复,但暂时超出了此插件的范围。
- 插件插件可以处理这个问题。例如,无人机缩放管理器通过利用实体缩放管理器,然后为无人机应用其他逻辑,为无人机处理此问题。
- 调整自动炮塔的大小可以调整其目标范围,但不会调整其射击范围。如果放大炮塔,如果它选择超出正常范围的目标,它可能会卡住无法射击。
- 调整炮塔大小的插件可以单独解决此问题。例如,无人机炮塔在调整炮塔大小后会调整炮塔的目标范围。
- 由于具有父实体的客户端呈现错误,各种实体可能看起来不可见(在调整它们大小时不一定正确)。
- 这可以通过父实体渲染修复插件来缓解,但这会产生很大的性能成本,因此您可能只想避免调整具有此错误的实体大小。
可以在实体规模管理器之上构建更具体的插件,以解决需要特殊处理的实体。有关您可以使用的方法,请参阅 API 部分,这样您就不必重新实现所有内容。
推荐的兼容插件
- 父级实体呈现修复 — 缓解客户端 bug,其中某些类型的实体在父级到另一个实体时通常不可见。
- 这是实体缩放管理器的重要对应项,因为只能通过将实体父级设置为透明黑色球体来调整实体大小,这可能会导致呈现错误。
- 该插件具有显着的性能成本。如果您负担不起安装费用,请避免调整具有此呈现问题的实体的大小,因为它们在调整大小时通常不可见。
- 注意:要确定实体是否受到渲染错误的影响,请调整其大小,然后离开该区域并返回,这将在客户端上销毁并重新创建实体。
开发者接口
为什么要使用此 API?
如果您正在开发需要调整实体大小的插件,使用此插件的 API 执行调整大小将为您解决下面列出的几个问题。
- 的实例默认未启用保存。这会导致启用了保存的孩子在服务器重新启动和垃圾邮件控制台错误时成为孤立项。还必须在每次服务器重新启动时重新启用保存,因为属性本身不会保存。
SphereEntity
enableSaving
- 此插件通过启用保存来为您处理此问题,如果调整大小的实体已启用保存。
SphereEntity
- 此插件通过启用保存来为您处理此问题,如果调整大小的实体已启用保存。
- 的实例默认启用全局广播。如果不需要,则必须在每次服务器重新启动时重新禁用它,因为属性本身不会保存。此外,在实体上禁用全局广播不会将其从全局网络组(Rust bug)中删除,因此即使您在位置网络组中生成它,您也必须做一些黑客操作才能在服务器重新启动时将其从全局网络组中删除。
SphereEntity
enableGlobalBroadcast
- 此插件通过禁用全局广播来为您处理此问题,如果调整大小的实体禁用了全局广播。
SphereEntity
- 此插件通过禁用全局广播来为您处理此问题,如果调整大小的实体禁用了全局广播。
- 在杀死缩放的实体后需要销毁。
SphereEntity
- 此插件通过检测何时杀死调整大小的实体来自动终止 .
SphereEntity
- 此插件通过检测何时杀死调整大小的实体来自动终止 .
API_ScaleEntity
插件可以调用此 API 来调整实体大小。这将创建一个透明的黑色球体,将实体父级设置为该球体的父级,并调整球体大小以在客户端上产生调整大小效果。这还将调整实体碰撞体的大小以匹配。有关调整大小如何工作的其他详细信息,请参阅该命令的文档。scale
bool API_ScaleEntity(BaseEntity entity, float scale)
API_RegisterScaledEntity
插件可以调用此 API 向实体缩放管理器注册已缩放的实体。这对于想要自行管理缩放实体的插件非常有用,仅采用对实体缩放管理器的可选依赖项,允许此插件在调整大小后隐藏球体(如果配置为这样做)。
void API_RegisterScaledEntity(BaseEntity entity)
API_GetScale
插件可以调用此 API 来获取实体缩放管理器跟踪的实体的当前缩放。
float API_GetScale(BaseEntity entity)
如果满足以下任一条件,则返回值将为。1
- 实体无效
- 实体缩放管理器未跟踪实体
- 该实体不是球体的父级(出于某种原因,尽管被此插件跟踪)
开发者钩子
OnEntityScale
- 当命令或方法即将调整实体大小时调用
scale
API_ScaleEntity
- 返回将阻止调整实体大小
false
- 返回将导致默认行为
null
bool? OnEntityScale(BaseEntity entity, float scale)
OnEntityScaled
- 成功使用命令或方法后调用
scale
API_ScaleEntity
- 无返回行为
void OnEntityScaled(BaseEntity entity, float scale)