True PVE 是一个损害控制插件,最初旨在为希望真正成为 PVE 的服务器改进默认服务器 PVE 模式 (server.pve = true)。此插件也可用于微调 PVP 行为,从而实现一系列损害控制配置以自定义 PVP、PVE 以及介于两者之间的任何内容。
注意:TruePVE 旨在与(PVP 模式开启)一起使用!使用 运行 TruePVE 可能会产生意想不到的效果。server.pve falseserver.pve true
在下载此插件的任何新版本之前,请阅读更新说明以了解发生了什么变化!重要的更新信息通常包含在这些说明中,并会让您知道是否需要执行任何操作,以及您可以在新版本中看到哪些更改。
跟踪文本标识:
组名称在 Rules 中用作引用,成员和排除项定义组内的实体。实体组在所有 RuleSet 之间共享,因此您无需为不同的 RuleSet 创建同一组的多个版本。
组的成员和排除项可以同时包含 Types 和 Prefab 名称(通过 /tpve_prod 命令提供)- 这些字段区分大小写,通常 Type 是驼峰式大小写,而 Prefab 是小写的。此外,通常,一个 Type 可以包含许多预制件,但一个预制件始终是相同的 Type,因此您可以将 Type 定义为成员,并通过在排除项中定义不需要的单个预制件来排除它们。
在计划 RuleSet 更改或特定于区域的配置时,RuleSet 的名称用作参考。
defaultAllowDamage 选项定义 RuleSet 的标准行为 - 即,它是允许还是阻止整体损害。对于 PVE 规则集,应始终将其设置为 false。
的 flags 选项允许您定义一些内置规则(需要在后台进行更专业编码的规则)。仅启用已定义的标志,而未定义的任何标志都会自然禁用。可用标志的列表和描述如下。
rules 部分是准语义准确的规则列表(没有更多链接!它们定义一个规则集及其对另一个规则集的行为。格式为:[RuleSet 1] [behavior] [RuleSet 2],但是目前 RuleSet 是从规则的末端拉出的,只有少数行为对规则有任何影响,因此您几乎可以说介于 RuleSet 1 和 2 之间的任何内容,并且它将被假定为“允许伤害”。例外情况是,如果行为中出现 “cannot” 或 “can't” 字样,则该规则将被否定并假定为 “防止损坏”。
此外,还有通用的 RuleSet 名称可用于定义更广泛的应用程序 - 单词“anything”、“nothing”、“everything”、“all”、“any”和“none”可用于 RuleSet 1 或 RuleSet 2。不过,同样,语义也被考虑在内,因此 “nothing” 或 “none” 将有效地再次颠倒规则的含义。因此,使用像 “players can't hurt nothing” 这样的双重否定词会转化为 “players can hurt everything”,并且可能会阻止你加入任何游艇俱乐部。
覆盖规则: - 所有标志(如果使用)都会忽略规则的评估,但 TrapsIgnorePlayers、TurretsIgnorePlayers、TurretsIgnoreScientist、StaticSamSitesIgnorePlayers 和 PlayerSamSitesIgnorePlayers 除外,它们只允许实体组中的异常
忽略所有规则: - 需要 NoHeliDamage、NoHeliDamagePlayer、NoHeliDamageQuarry 来处理 Heli 伤害。不使用直升机旗帜默认允许伤害。无论哪种方式,都不会评估规则。
CanEntityTakeDamage:返回 true/false 将允许/禁止伤害并跳过正常的 TruePVE 伤害评估。
CanEntityBeTargeted:返回 true/false 将允许/禁止定位并跳过正常的 TruePVE 目标评估。
CanEntityTrapTrigger:返回 true/false 将允许/禁止触发器事件并跳过正常的 TruePVE 触发器评估。
注意:TruePVE 旨在与(PVP 模式开启)一起使用!使用 运行 TruePVE 可能会产生意想不到的效果。server.pve falseserver.pve true
在下载此插件的任何新版本之前,请阅读更新说明以了解发生了什么变化!重要的更新信息通常包含在这些说明中,并会让您知道是否需要执行任何操作,以及您可以在新版本中看到哪些更改。
命令
控制台命令
- tpve.def- 擦除并创建默认配置/数据
- tpve.sched [enable|disable]- 启用/禁用计划
- tpve.trace- 切换跟踪;5 米后自动禁用(硬编码),以防止意外的日志溢出。有关跟踪的更多详细信息,请参阅下文。
- tpve.usage- 显示命令使用信息
聊天命令
- /tpve_prod- 打印出正在查看的实体的 Type 和 Prefab name(对于实体组)
- /tpve map [name] <target>- 创建/更新/删除映射。[name] 是映射的名称或您正在映射的区域 ID。 是一个可选参数,用于定义要映射到的 RuleSet 名称,或定义“exclude”以跳过处理。留空将删除 [name] 的映射<target><target>
配置
- 配置版本 - 不更改
- Default RuleSet — 要使用的默认 RuleSet 的名称
- 配置选项- 全局配置选项
- handleDamage - 启用 TruePVE 损坏处理
- useZones - 允许使用特定于区域的伤害配置(需要 ZoneManager)
- 映射 - 将区域名称 (LiteZones) 或名称/ID (ZoneManager) 映射到 RuleSet 名称,或者简单地将 RuleSet 名称映射到自身。可用于将多个区域映射到同一个 RuleSet。也可以用于通过映射到 “exclude” 来创建排除区域(具有默认 Rust 行为的区域)。例:
- Schedule- Schedule RuleSet 更改
- enabled - 启用计划使用
- useRealtime - 启用实时(服务器时间)
- broadcast - 允许在计划的 RuleSet 更改时发送广播消息(但如果没有为计划条目设置消息,则不会广播任何消息)
- entries - 计划条目 - 详情见下文规则集 - 定义的损伤配置 - 详情见下文实体组 - 规则中使用的已定义实体分组 - 详情见下文
调试
跟踪会启用基本的调试日志记录,以帮助调试和识别 RuleSet、rule 和 EntityGroup 配置的问题。捕获损坏日志记录后,应手动关闭跟踪,但会在 5 分钟后自动禁用(硬编码)- 这是为了防止日志在意外打开时溢出。跟踪结果输出到 ./oxide/logs/TruePVE/truepve_ruletrace-[date].txt。跟踪文本标识:
- 启动器类型和预制件名称
- 目标类型和预制件名称
- 是否命中排除组
- 命中哪些特殊逻辑块
- 使用哪个 RuleSet
- 选择了哪些 EntityGroup
- 评估哪些规则,以及最终结果(true:允许伤害,false:阻止伤害,null:Rust 默认伤害处理)
实体组
实体组是定义一组实体的容器,这并不奇怪。组名称在 Rules 中用作引用,成员和排除项定义组内的实体。实体组在所有 RuleSet 之间共享,因此您无需为不同的 RuleSet 创建同一组的多个版本。
组的成员和排除项可以同时包含 Types 和 Prefab 名称(通过 /tpve_prod 命令提供)- 这些字段区分大小写,通常 Type 是驼峰式大小写,而 Prefab 是小写的。此外,通常,一个 Type 可以包含许多预制件,但一个预制件始终是相同的 Type,因此您可以将 Type 定义为成员,并通过在排除项中定义不需要的单个预制件来排除它们。
规则集
RuleSet 是一组规则也就不足为奇了。在计划 RuleSet 更改或特定于区域的配置时,RuleSet 的名称用作参考。
defaultAllowDamage 选项定义 RuleSet 的标准行为 - 即,它是允许还是阻止整体损害。对于 PVE 规则集,应始终将其设置为 false。
的 flags 选项允许您定义一些内置规则(需要在后台进行更专业编码的规则)。仅启用已定义的标志,而未定义的任何标志都会自然禁用。可用标志的列表和描述如下。
rules 部分是准语义准确的规则列表(没有更多链接!它们定义一个规则集及其对另一个规则集的行为。格式为:[RuleSet 1] [behavior] [RuleSet 2],但是目前 RuleSet 是从规则的末端拉出的,只有少数行为对规则有任何影响,因此您几乎可以说介于 RuleSet 1 和 2 之间的任何内容,并且它将被假定为“允许伤害”。例外情况是,如果行为中出现 “cannot” 或 “can't” 字样,则该规则将被否定并假定为 “防止损坏”。
此外,还有通用的 RuleSet 名称可用于定义更广泛的应用程序 - 单词“anything”、“nothing”、“everything”、“all”、“any”和“none”可用于 RuleSet 1 或 RuleSet 2。不过,同样,语义也被考虑在内,因此 “nothing” 或 “none” 将有效地再次颠倒规则的含义。因此,使用像 “players can't hurt nothing” 这样的双重否定词会转化为 “players can hurt everything”,并且可能会阻止你加入任何游艇俱乐部。
规则优先级
在编写规则时,必须考虑一定的优先级。通常,更具体的规则会覆盖宽泛的规则(带有 “anything” 或 “nothing” 的规则,等等)。如果你有两条规则:“anything can hurt players”和“barricades cannot hurt players”,那么 barricades 规则将始终覆盖 “anything” 规则。Schedule 条目
计划条目定义计划的全局 RuleSet 更改,并已滚动为一行,其中三 (3) 个部分用空格分隔:- 时间 - 计划条目的生效时间。对于游戏内时间,格式为“hh:mm”,其中 hh 是小时(24 小时格式),mm 是分钟。但是,实时计划条目应输入为 “d.hh:mm”,其中 d 是星期几 0-6(星期日至星期六)。星期几现在也接受(星号)作为通配符来表示每天,因此实时条目“*.08:00”将在每天 0800(上午 8:00)触发。请注意,对于实时,如果您不提供星期几,则假定为 0(星期日),并且您的计划条目将仅在星期日触发!*
- RuleSet - 要在指定时间全局设置的 RuleSet 名称
- Message - RuleSet 名称后的所有文本都用作广播消息,当 RuleSet 更改时,要发送给所有玩家。此消息也会发送给在计划条目期间登录的任何玩家。令人震惊的是,如果消息为空,则不会广播任何消息。
RuleSet 标志
注 - 这些标志中的大多数是从以前的配置选项中继承而来的,但有些标志的功能略有变化。覆盖规则: - 所有标志(如果使用)都会忽略规则的评估,但 TrapsIgnorePlayers、TurretsIgnorePlayers、TurretsIgnoreScientist、StaticSamSitesIgnorePlayers 和 PlayerSamSitesIgnorePlayers 除外,它们只允许实体组中的异常
忽略所有规则: - 需要 NoHeliDamage、NoHeliDamagePlayer、NoHeliDamageQuarry 来处理 Heli 伤害。不使用直升机旗帜默认允许伤害。无论哪种方式,都不会评估规则。
- 衰变损伤 - TruePVE 不处理衰变损伤
- 抢劫 - TruePVE 不处理抢劫。使用 Prevent Looting 插件
- 动物损伤 - 不评估规则 - 允许此对象受到所有伤害
- AdvancedChristmasLights - 不评估规则 - 您必须能够构建才能损坏此对象
- GrowableEntity - 不评估规则 - 您必须能够构建或成为所有者才能损坏此对象
- AuthorizedDamage 是一个非常小众的标志,并且被严重误解。它允许玩家损坏他们拥有的实体,或拥有橱柜授权的实体。当与 CupboardOwnership 配对时,当没有 tool cupboard 保护实体时,它将允许损坏。AuthorizedDamageRequiresOwnership 允许在玩家拥有实体、成为盟友或攻击不受工具柜保护的实体时进行伤害,从而帮助完善它。
- AuthorizeDamage 将覆盖规则,除非规则应用于挂载或 samsite。AuthorizedDamageRequiresOwnership 会覆盖规则,除非玩家是盟友,并且这些规则适用于坐骑。如果伤害没有被格挡,在这种情况下的规则将继续评估。如果玩家不是盟友,则除了坐骑之外,规则还可以覆盖 samsites。
- AuthorizedDamageCheckPrivilege - 允许对受建筑权限保护的实体(仅限衰变实体、玩家直升机和拖船)造成伤害
- AnimalsIgnoreSleepers - 防止 NPC 以睡眠玩家为目标(报告有错误)
- SuicideBlocked - 阻止自杀 - 不使用规则
- FriendlyFire - 在队友、部落伙伴和朋友之间启用友好射击
- SelfDamage - 允许玩家(通常)对自己造成伤害,例如使用 C4 或 BeanCan 等。
- CupboardOwnership - 启用后,AuthorizedDamage 会将 cupboard 范围之外的实体视为 unowned,而 cupboard 范围内的实体将需要授权。
- TwigDamage - 允许玩家破坏任何树枝构建块,而不管是否授权(以鼓励合理的构建实践)
- TwigDamageRequiresOwnership - 阻止对树枝的伤害,除非来自所有者、所有者的盟友或您拥有 TC 身份验证
- WoodenDamage - 与 TwigDamage 标志相同,但是用于木头
- WoodenDamageRequiresOwnership - 与 TwigDamageRequiresOwnership 标志相同,但用于木材(它需要 WoodenDamage 标志)
- NoHeliDamage - 禁用下面列出的现有直升机标志未覆盖的所有其他实体的直升机伤害
- NoHeliDamagePlayer - 防止直升机伤害玩家
- NoHeliDamageQuarry - 防止直升机损坏采石场
- NoHeliDamageSleepers - 防止直升机对睡眠者造成伤害(这不会检查玩家是否在线!
- NoHeliDamageRidableHorses - 防止对可骑乘的马造成伤害
- NoHeliDamageBuildings - 防止在 TC 范围内对建筑物、车辆和部署物造成伤害
- HeliDamageLocked - 允许直升机损坏上锁的箱子/门(需要 LockedBoxesImmortal 或 LockedDoorsImmortal)
- NoPlayerDamageToCar - 防止玩家对模块化汽车造成伤害
- NoPlayerDamageToMini - 防止玩家对 Minicopter 造成伤害
- NoPlayerDamageToScrap - 防止玩家对 ScrapTransportHelicopter 造成伤害
- NoMLRSDamage - 防止使用 MLRS 瞄准任何东西,并防止不使用 MLRS 发射的 MLRS 火箭弹造成伤害
- HumanNPCDamage - 允许任何类型的 NPC 对玩家造成伤害(插件覆盖此行为是很常见的!
- NpcsCanHurtAnything - 允许 npc 损坏任何东西(LockedBoxesImmortal 和 LockedDoorsImmortal 覆盖此标志) - 任何 npc 插件覆盖此标志并给出意外结果是很常见的。请改为咨询该开发人员。
- LockedBoxesImmortal - 上锁的盒子是不朽的(_HeliDamageLocked _overrides这个)
- LockedDoorsImmortal - 锁着的门是不朽的(_HeliDamageLocked _overrides这个)
- ExcludeTugboatFromImmortalFlags - 防止 LockedBoxesImmortal 和 LockedDoorsImmortal 标志保护拖船上的实体
- AdminsHurtSleepers - 管理员可以伤害睡眠者
- ProtectedSleepers - 保护睡眠者免受 NPC 伤害
- TrapsIgnorePlayers - 玩家不触发陷阱(不适用于熊/捕捉陷阱)
- TrapsIgnoreScientist - 防止 npc 触发陷阱
- TurretsIgnorePlayers - 玩家不触发炮塔(不适用于火焰炮塔)
- TurretsIgnoreScientist - 防止 NPC 成为玩家拥有的炮塔的目标(“ent who”控制台命令显示有效的 Steam ID)
- StaticTurretsIgnorePlayers -- 防止炮塔(没有所有者,比如在纪念碑处)以玩家为目标
- SafeZoneTurretsIgnorePlayers -- 防止安全区域内的炮塔以玩家为目标(这些是绿色的哨兵炮塔)
- StaticSamSitesIgnorePlayers - 静态 sam 站点会忽略所有玩家,例如来自 Launch Site 或已将 SamSite.staticRespawn 设置为 true 的插件的玩家。
- PlayerSamSitesIgnorePlayers - 玩家 SAM 站点会忽略所有玩家,例如来自已部署的 SAM 站点的玩家。如果另一个插件将 SamSite.staticRespawn 设置为 true,则此标志将不适用于该 sam 站点。
- SamSitesIgnoreMLRS - 阻止 SAM 站点以 MLRS 火箭为目标
- VehiclesTakeCollisionDamageWithoutDriver - 如果驾驶员座位上没有玩家,那么车辆将会发生碰撞
对于开发人员
外部插件可以使用 Hook 来添加、更新和删除映射:外部 API 调用
我们在处理 OnEntityTakeDamage() 时调用以下钩子;CanEntityTakeDamage:返回 true/false 将允许/禁止伤害并跳过正常的 TruePVE 伤害评估。
我们在处理 CanBeTargeted() 时调用以下钩子;
CanEntityBeTargeted:返回 true/false 将允许/禁止定位并跳过正常的 TruePVE 目标评估。
我们在处理 OnTrapTrigger() 时调用以下钩子;
CanEntityTrapTrigger:返回 true/false 将允许/禁止触发器事件并跳过正常的 TruePVE 触发器评估。