真正的
PVE

真正的 PVE

真正的
PVE-PCI1
真正的 PVE
此内容为免费资源,请登录后查看
0
免费资源

True PVE 是一个伤害控制插件,最初旨在为希望真正成为 PVE 的服务器改进默认服务器 PVE 模式 (server.pve = true)。该插件还可用于微调PVP行为,从而实现一系列伤害控制配置,以自定义PVP、PVE以及介于两者之间的任何内容。

注意:TruePVE 旨在与(PVP 模式开启)一起使用!运行 TruePVE 可能会产生意想不到的效果。server.pve falseserver.pve true

在下载此插件的任何新版本之前,请阅读更新说明以了解更改内容!重要的更新信息通常包含在这些说明中,并且会让您知道是否需要执行任何作,以及您可以在新版本中看到哪些更改。

命令

此插件使用相同的语法提供聊天和控制台命令。在聊天中使用命令时,请以正斜杠为前缀:“/”。

控制台命令

  • tpve.def– 擦除并创建默认配置/数据
  • tpve.sched [enable|disable]– 启用/禁用计划
  • tpve.trace– 切换跟踪;5m 后自动禁用(硬编码),以防止意外的原木溢出。有关跟踪的更多详细信息,请参阅下文。
  • tpve.usage– 显示命令使用信息

聊天命令

  • /tpve_prod– 打印出正在查看的实体的类型和预制件名称(对于实体组)
  • /tpve map [name] <target>– 创建/更新/删除映射。[name] 是映射的名称或要映射的区域 ID。 是一个可选参数,用于定义要映射到的规则集名称或“排除”以跳过处理。留空将删除 [name] 的映射<target><target>

配置

可以在目录下的文件中配置设置和选项。建议使用编辑器和验证器以避免格式问题和语法错误。TruePVEconfig
  • 配置版本 – 不更改
  • 默认规则集 – 要使用的默认规则集的名称
  • 配置选项 – 全局配置选项
    • handleDamage – 启用TruePVE伤害处理
    • useZones – 启用特定于区域的损坏配置(需要 ZoneManager)
  • 映射 – 将区域名称 (LiteZones) 或名称/ID (ZoneManager) 映射到 RuleSet 名称,或者只是将 RuleSet 名称映射到自身。可用于将多个区域映射到同一个规则集。也可用于通过映射到“exclude”来创建排除区域(具有默认 Rust 行为的区域)。例:
"Mappings": {
   "default": "default",
   "66499587": "killall",
   "62819081": "exclude"
},
  • 计划 – 计划规则集更改
    • enabled – 启用计划使用
    • useRealtime – 启用使用实时(服务器时间)
    • broadcast – 允许在计划的规则集更改时发送广播消息(但如果没有为调度条目设置消息,则不会广播任何消息)
    • 条目 – 计划条目 – 有关详细信息,请参阅下文规则集 – 定义的损坏配置 – 有关详细信息,请参阅下文实体组 – 规则中使用的已定义实体分组 – 有关详细信息,请参阅下文

调试

跟踪打开基本调试日志记录,以帮助调试和识别 RuleSet、规则和 EntityGroup 配置的问题。捕获损坏日志记录后,应手动关闭跟踪,但将在 5 分钟后自动禁用(硬编码) – 这是为了防止日志在意外打开时溢出。跟踪结果输出到 ./oxide/logs/TruePVE/truepve_ruletrace-[date].txt

跟踪文本标识:

  • 启动器类型和预制件名称
  • 目标类型和预制件名称
  • 是否命中排除组
  • 命中了哪些特殊逻辑块
  • 使用哪个规则集
  • 选择了哪些实体组
  • 评估了哪些规则,以及最终结果(true:允许伤害,false:块伤害,null:Rust 默认伤害处理)

示例输出:

======================
==  STARTING TRACE  ==
==  15:09:18.38210  ==
======================
From: BasePlayer, player
To: Workbench, workbench3.deployed
   No shared locations (empty location) - no exclusions
No exclusion found - lookup RuleSet
Using RuleSet "default"
No match in pre-checks; evaluating RuleSet rules...
  Initator EntityGroup matches: players
  Target EntityGroup matches: none
   Evaluating Rules...
    Checking direct initiator->target rules...
    No direct match rules found; continuing...
     Evaluating "players->any"...
      No match found
    No matching initiator->any rules found; continuing...
    No matching any->target rules found; returning default value: False
======================
==  STARTING TRACE  ==
==  15:09:18.69712  ==
======================
From: BasePlayer, player
To: VendingMachine, vendingmachine.deployed
   No shared locations (empty location) - no exclusions
No exclusion found - lookup RuleSet
Using RuleSet "default"
Door/StorageContainer detected with immortal flag; lock check results: null; continue checks
Initiator is player with authorization over non-player target; allow and return

实体组

实体组是定义一组实体的容器,这并不奇怪。

名称在规则中用作引用,成员排除项定义组内的实体。实体组在所有规则集之间共享,因此无需为不同的规则集创建同一组的多个版本。

组的成员排除项可以包含类型和预制件名称(通过 /tpve_prod 命令提供)——这些字段区分大小写,通常类型是驼峰式的,而预制件是小写的。此外,通常,一个 Type 可以包含许多预制件,但预制件始终是相同的 Type,因此您可以将 Type 定义为成员,并通过在排除项中定义不需要的单个预制件来排除它们。

// Example entity group
{
  "name": "players",
  "members": "BasePlayer",
  "exclusions": ""
}

规则集

规则集也是一组规则,这并不奇怪。

在计划规则集更改或特定于区域的配置时,规则集的名称用作参考。

defaultAllowDamage 选项定义了 RuleSet 的标准行为,即它是允许还是阻止整体损坏。对于PVE规则集,应始终将其设置为false

flags 选项允许您定义一些内置规则(需要在后台进行更专业编码的规则)。仅启用定义的标志,而任何未定义的标志自然禁用。可用标志的列表和描述如下。

规则部分是准语义准确规则的列表(没有更多链接!它们定义规则集及其对另一个规则集的行为。格式为:[规则集 1] [行为] [规则集 2],但是目前规则集从规则的末端拉下来,只有少数行为对规则有任何影响,因此您几乎可以说规则集 1 和 2 之间的任何内容,并且它将被假定为“允许损坏”。例外情况是,如果行为中出现“不能”或“不能”这两个词,则该规则将被否定并假定为“防止损害”的意思。

此外,还有通用的规则集名称可用于定义更广泛的应用程序 – “anything”、“nothing”、“everything”、“all”、“any”和“none”等词语可用于规则集 1 或规则集 2。不过,同样,语义被考虑在内,因此“nothing”或“none”将有效地再次颠倒规则含义。因此,使用诸如“玩家不能伤害任何东西”之类的双重否定词将转化为“玩家可以伤害一切”,并且可能会阻止您加入任何游艇俱乐部。

规则优先级

在编写规则时必须考虑一定的优先级。通常,更具体的规则会覆盖广泛的规则(“任何”或“无”等规则)。如果你有两条规则:“任何东西都可以伤害玩家”和“路障不能伤害玩家”,那么路障规则将始终覆盖“任何东西”规则。

计划条目

计划条目定义计划的全局规则集更改,并已汇总成一行,其中包含三 (3) 个部分,由空格分隔:

  1. 时间 – 计划条目生效的时间。对于游戏内时间,格式为“hh:mm”,其中 hh 是小时(24 小时格式),mm 是分钟。但是,实时计划条目应输入为“d.hh:mm”,其中 d 是星期几,为 0-6(周日至周六)。星期几现在也接受(星号)作为通配符来指示每日,因此实时条目“*.08:00”将在每天 0800(上午 8:00)触发。请注意,对于实时,如果您没有提供星期几,它将假定为 0(星期日),并且您的计划条目只会在周日触发!*
  2. RuleSet – 在指定时间全局设置的 RuleSet 名称
  3. 消息 – 规则集名称后面的所有文本都用作广播消息,以便在规则集更改时发送给所有玩家。此消息也会发送给在计划条目期间登录的任何玩家。令人震惊的是,如果消息为空,则不会广播任何消息。
// Example schedule entries using realtime
"*.12:00 default PVE enabled!" // at 12:00 daily, set RuleSet "default" and broadcast "PVE enabled!"
"*.18:00 pvp PVP time!" // at 18:00 (6pm) daily, set RuleSet "pvp" and broadcast "PVP time!"

规则集标志

注意 – 这些标志中的大多数是从以前的配置选项中继承而来的,但有些标志的功能略有变化。

覆盖规则:– 所有标志都会忽略规则的评估(如果正在使用),但 TrapsIgnorePlayers、TurretsIgnorePlayers、TurretsIgnoreScientist、StaticSamSitesIgnorePlayers 和 PlayerSamSitesIgnorePlayers 除外,它们只允许实体组中的例外

忽略所有规则:– 需要 NoHeliDamage、NoHeliDamagePlayer、NoHeliDamageQuarry 来处理直升机伤害。默认情况下,不使用直升机旗帜允许造成伤害。无论哪种方式,规则都不会被评估。

  • 衰减伤害 – TruePVE不处理衰减伤害

  • 抢劫 – TruePVE 不处理抢劫。使用防止掠夺插件

  • 动物伤害 – 不评估规则 – 允许进出此对象的所有伤害

  • AdvancedChristmasLights – 规则不计算 – 你必须能够建造来损坏这个对象

  • GrowableEntity – 规则不计算 – 您必须能够构建或成为所有者才能损坏此对象

  • AuthorizedDamage 是一个非常小众的标志,被严重误解。当未与 CupboardOwnership、AuthorizedDamageRequiresOwnership 或 AuthorizedDamageCheckPrivilege 配对时,将评估以下内容:

  • 如果实体是坐骑或参工,则将检查规则以查看是否有任何可以阻止损坏。如果不是,那么当该实体不属于任何玩家,或者该实体归玩家或其盟友所有时,将允许造成伤害。否则,规则将最后评估。

  • 当 AuthorizedDamage 与 CupboardOwnership 配对时,当没有工具柜保护实体时,或者当有橱柜并且您获得授权时,它将允许损坏。否则,损坏将被阻止(这意味着不评估规则。

  • 当 AuthorizedDamage 与 AuthorizedDamageRequiresOwnership 配对时,它将首先评估车辆的规则,并在该规则不允许时阻止损坏。否则,当实体不属于玩家所有(小型直升机除外),或者当玩家拥有实体,或者玩家是所有者的盟友时,则允许造成伤害。如果此时没有任何东西允许损坏,则它被阻止(这意味着不评估规则)。

  • 当 AuthorizedDamage 与 AuthorizedDamageCheckPrivilege 配对时,它将仅通过橱柜授权保护腐烂实体、玩家直升机和拖船。如果它是不同的实体,或者如果损坏未经授权,则将检查 AuthorizedDamage、AuthorizedDamageRequiresOwnership 和/或 CupboardOwnership。如果此时仍未授权损坏,则最后将评估规则。

  • AuthorizedFarmableDamage 是一个独立/独立的标志,主人和盟友可以在其中伤害孵化的鸡

  • HopperCannotTargetEnemyLoot 将阻止敌方跳跃者掠夺掉落的物品和尸体

  • AnimalsIgnoreSleepers – 防止动物瞄准熟睡的玩家

  • SuicideBlocked – 阻止自杀 – 不使用规则

  • FriendlyFire – 启用队友、氏族成员和朋友之间的友军火力

  • SelfDamage – 允许玩家(通常)伤害自己,例如使用 C4 或 BeanCans 等。

  • CupboardOwnership – 启用 AuthorizedDamage 后,会将 Cupboard 范围之外的实体视为无主实体,而 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 – 防止用多管火箭炮瞄准任何东西,并防止不使用多管火箭炮发射的多管火箭弹造成伤害

  • HumanNPCDamage – 允许任何类型的 NPC 对玩家造成伤害(插件覆盖此行为是很常见的!

  • NpcsCanHurtAnything – 允许 npc 损坏任何东西(LockedBoxesImmortal 和 LockedDoorsImmortal 覆盖此标志) – 任何 npc 插件覆盖此标志并给出意外结果是很常见的。请改为咨询该开发人员。

  • LockedBoxesImmortal – 上锁的盒子是不朽的(_HeliDamageLocked _overrides这个)

  • LockedDoorsImmortal – 上锁的门是不朽的(_HeliDamageLocked _overrides这个)

  • ExcludeTugboatFromImmortalFlags – 防止LockedBoxesImmortal和LockedDoorsImmortal旗帜保护拖船上的实体

  • AdminsHurtSleepers – 管理员可以伤害沉睡者

  • AdminsHurtPlayers – 管理员可以伤害醒着或睡着的玩家

  • ProtectedSleepers – 保护沉睡者免受 NPC 伤害

  • TrapsIgnorePlayers – 玩家不会触发陷阱(不适用于熊/捕捉陷阱)

  • TrapsIgnoreScientist – 防止 npc 触发陷阱

  • TurretsIgnorePlayers – Players don’t trigger turrets (not working for flame turret)

  • TurretsIgnoreScientist – Prevents npc from being targetted by turrets owned by a player (‘ent who’ console command shows a valid steam id)

  • StaticTurretsIgnorePlayers — Prevent turrets (with no owner, such as at monuments) from targetting players

  • SafeZoneTurretsIgnorePlayers — Prevent turrets within safe zones from targetting players (these are green sentry turrets)

  • StaticSamSitesIgnorePlayers – Static sam sites ignore all players, such as from Launch Site or a plugin that has set SamSite.staticRespawn to true.

  • PlayerSamSitesIgnorePlayers – Player sam sites ignore all players, such as from deployed sam sites. If another plugin sets SamSite.staticRespawn to true then this flag will not work for that sam site.

  • SamSitesIgnoreMLRS – Prevent SAM sites from targetting MLRS rockets

  • VehiclesTakeCollisionDamageWithoutDriver – Vehicles will take collision if there is no player seated in the drivers seat

  • TurretsIgnoreBradley – Prevent plugin turrets from shooting bradley APC

  • LockedVehiclesImmortal – Modular cars will be immune to damage when protected with a code lock

  • StaticTurretsIgnoreScientist – Prevent non-owned turrets and npc turrets from shooting npcs

For Developers

Hooks are available to external plugins for adding, updating and removing mappings:

// add or update a mapping - returns true if successful
bool AddOrUpdateMapping(string key, string ruleset);

// remove a mapping - returns true if successful
bool RemoveMapping(string key);
//Get the current ruleset name
TruePVE.Call<string>("CurrentRuleSetName");

外部 API 调用

接受集合参数的非分配 API 方法:

  • bool RemoveMappings(List<string> keys, List<string> results = null)
  • void GetMappingsDictionaryNoAlloc(Dictionary<string, string> dict)
  • void GetMappingsListNoAlloc(List<string> list)

我们在处理 OnEntityTakeDamage() 时调用以下钩子;

可以实体承受伤害:返回 true/false 将允许/禁止伤害并跳过正常的 TruePVE 伤害评估。

object CanEntityTakeDamage(BaseCombatEntity entity, HitInfo hitinfo)

我们在处理 CanBeTargeted() 时调用以下钩子;

CanEntityBeTargeted:返回 true/false 将允许/禁止定位并跳过正常的 TruePVE 目标评估。这适用于炮塔、参入体等。

object CanEntityBeTargeted(BasePlayer player, BaseEntity entity)

我们在处理 OnTrapTrigger() 时调用以下钩子;

CanEntityTrapTrigger:返回 true/false 将允许/禁止陷阱触发事件并跳过正常的 TruePVE 触发器评估。

object CanEntityTrapTrigger(BaseTrap trap, BasePlayer player)

CanMlrsTargetLocation:返回 true/false 将允许/禁止 MLRS 实体发射 MLRS 火箭并跳过正常的 TruePVE 触发器评估。

object CanMlrsTargetLocation(MLRS mlrs, BasePlayer player)

区域集成

在映射下添加区域 ID 和规则集,或使用排除。使用上面解释的映射。

  • 映射 – 将区域名称 (LiteZones) 或名称/ID (ZoneManager) 映射到 RuleSet 名称,或者只是将 RuleSet 名称映射到自身。可用于将多个区域映射到同一个规则集。也可用于通过映射到“exclude”来创建排除区域(具有默认 Rust 行为的区域)。例:
"Mappings": {
   "default": "default",
   "66499587": "killall",
   "62819081": "exclude"
},

学分

  • ignignokt84,该插件的原作者
  • rfc1920,用于帮助维护插件
  • nivex,帮助维护插件
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容