真正的PVE是一个损害控制插件,最初旨在为希望真正成为PVE的服务器改进默认服务器pve模式 (server.PVE = true)。此插件还可用于微调PVP行为,从而实现一系列损害控制配置,以自定义PVP,PVE以及介于两者之间的任何内容。
注:TruePVE旨在与server.pve false(PVP模式开启)!运行TruePVEserver.pve true可能会产生意想不到的影响。
在下载此插件的任何新版本之前,请阅读更新备注看看有什么变化!重要的更新信息通常包含在这些说明中,并会让您知道是否需要执行任何操作,以及您可以在新版本中看到哪些更改。
"default": "default",
"66499587": "killall",
"62819081": "exclude"
},
跟踪文本标识:
======================
== 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命令提供)-这些字段区分大小写,并且通常类型是骆驼大小写,而预制是小写。此外,通常,一个类型可以包含许多预设,但预设始终是相同的类型,因此您可以将类型定义为成员,并通过在排除中定义它们来排除不需要的单个预设。
// Example entity group
{
"name": "players",
"members": "BasePlayer",
"exclusions": ""
}
的姓名当计划规则集更改或特定于区域的配置时,将用作参考。
的违约损失选项定义规则集的标准行为是什么-也就是说,它是允许还是阻止整体损坏。这应该总是设置false对于PVE规则集。
的旗帜选项允许您定义一些内置规则 (需要在幕后进行更专业编码的规则)。只有定义的标志被启用,而任何未定义的标志自然被禁用。下面是可用标志的列表和说明。
的规则部分是准语义准确规则的列表 (没有更多链接!)。它们定义一个规则集及其对另一个规则集的行为。格式为:[RuleSet 1] [behavior] [RuleSet 2],但是目前规则集被拉离规则的两端,只有少数行为对规则有任何影响,所以你几乎可以说规则集1和2之间的任何东西,它将被假定为意味着 “允许损害”。例外情况是,如果行为中出现 “不能” 或 “不能”,则该规则将被否定并假定为 “防止损害”。
此外,还有一些通用的规则集名称可用于定义更广泛的应用程序-单词“任何东西", "没什么", "一切", "全部", "任何"和"无“” 可以用于规则集1或规则集2。但是,再次考虑了语义,因此 “无” 或 “无” 将再次有效地反转规则含义。因此,使用像 “玩家不能伤害任何东西” 这样的双重否定将转化为 “玩家可以伤害一切”,并可能阻止您加入任何游艇俱乐部。
"*.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,TurretsIgnoreScientist,StaticSamSitesIgnorePlayers和PlayerSamSitesIgnorePlayers
忽略所有规则:-需要NoHeliDamage,NoHeliDamagePlayer,NoHeliDamageQuarry来处理Heli伤害。默认情况下不使用heli标志允许损坏。无论哪种方式,规则永远不会被评估。
// 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");
CanEntityTakeDamage: 返回真/false将允许/不允许损坏并跳过正常的TruePVE损坏评估。
object CanEntityTakeDamage(BaseCombatEntity entity, HitInfo hitinfo)
我们在处理CanBeTargeted() 时调用以下钩子;
CanEntityBeTargeted: 返回真/false将允许/不允许定位并跳过正常的TruePVE目标评估。这适用于炮塔,samsites等。
object CanEntityBeTargeted(BasePlayer player, BaseEntity entity)
我们在处理OnTrapTrigger() 时调用以下钩子;
CanEntityTrapTrigger: 返回真/false将允许/禁止陷阱触发事件并跳过正常的TruePVE触发评估。
object CanEntityTrapTrigger(BaseTrap trap, BasePlayer player)
CanMlrsTargetLocation: 返回真/false将允许/禁止MLRS实体发射MLRS火箭并跳过正常的TruePVE触发评估。
object CanMlrsTargetLocation(MLRS mlrs, BasePlayer player)
"default": "default",
"66499587": "killall",
"62819081": "exclude"
},
注:TruePVE旨在与server.pve false(PVP模式开启)!运行TruePVEserver.pve true可能会产生意想不到的影响。
在下载此插件的任何新版本之前,请阅读更新备注看看有什么变化!重要的更新信息通常包含在这些说明中,并会让您知道是否需要执行任何操作,以及您可以在新版本中看到哪些更改。
命令
此插件使用相同的语法提供聊天和控制台命令。在聊天中使用命令时,请在其前面加上正斜杠: “/”。控制台命令
- tpve.def-擦除并创建默认配置/数据
- tpve.sched [enable|disable]-启用/禁用计划
- tpve.trace-切换跟踪; 5米 (硬编码) 后自动禁用,以防止意外的日志溢出。有关跟踪的更多详细信息,请参见下文。
- tpve.usage-Show命令用法信息
聊天命令
- /tpve_prod-打印出正在查看的实体的类型和预设名称 (对于实体组)
- /tpve map [name] <target>-创建/更新/删除映射。[名称] 是映射的名称或要映射的区域ID。<target>是一个可选参数,用于定义要映射到的规则集名称或 “排除” 以跳过处理。离开<target>empty将删除 [name] 的映射
配置
设置和选项可以在TruePVE文件下的config目录。建议使用编辑器和验证程序,以避免格式问题和语法错误。- 配置版本-不要改变
- 默认规则集-要使用的默认规则集的名称
- 配置选项-全局配置选项
- 车把损坏-启用TruePVE损坏处理
- 使用区域-允许使用特定于区域的损坏配置 (需要ZoneManager)
- 映射-将区域名称 (LiteZones) 或名称/ID (ZoneManager) 映射到规则集名称,或仅将规则集名称映射到自身。可用于将多个区域映射到同一规则集。也可用于通过映射到 “排除” 来创建排除区域 (具有默认Rust行为的区域)。示例:
"default": "default",
"66499587": "killall",
"62819081": "exclude"
},
- 时间表-计划规则集更改
- 已启用-启用计划使用
- useRealtime-启用使用实时 (服务器时间)
- 广播-允许在计划的规则集更改时发送广播消息 (但如果没有为计划条目设置消息,则不广播任何消息)
- 条目定义的损坏配置-详情见下文实体组-规则中使用的已定义实体组-详情见下文
调试
跟踪打开基本调试日志记录,以帮助调试和识别RuleSet、rule和EntityGroup配置的问题。追踪应该在捕获损坏日志记录后手动关闭,但将在5分钟后自动禁用 (硬编码)-这是为了防止日志溢出,如果意外离开。跟踪结果将输出到。/oxide/logs/TruePVE/truepve_ruletrace-[date].txt。跟踪文本标识:
- 启动器类型和预制名称
- 目标类型和预制名称
- 是否命中排除组
- 哪些特殊逻辑块被击中
- 使用哪个规则集
- 选择了哪些EntityGroups
- 评估哪些规则以及最终结果 (true: 允许损坏,false: 阻止损坏,null: 生锈默认损坏处理)
======================
== 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命令提供)-这些字段区分大小写,并且通常类型是骆驼大小写,而预制是小写。此外,通常,一个类型可以包含许多预设,但预设始终是相同的类型,因此您可以将类型定义为成员,并通过在排除中定义它们来排除不需要的单个预设。
// Example entity group
{
"name": "players",
"members": "BasePlayer",
"exclusions": ""
}
规则集
规则集也是一组规则,这并不奇怪。的姓名当计划规则集更改或特定于区域的配置时,将用作参考。
的违约损失选项定义规则集的标准行为是什么-也就是说,它是允许还是阻止整体损坏。这应该总是设置false对于PVE规则集。
的旗帜选项允许您定义一些内置规则 (需要在幕后进行更专业编码的规则)。只有定义的标志被启用,而任何未定义的标志自然被禁用。下面是可用标志的列表和说明。
的规则部分是准语义准确规则的列表 (没有更多链接!)。它们定义一个规则集及其对另一个规则集的行为。格式为:[RuleSet 1] [behavior] [RuleSet 2],但是目前规则集被拉离规则的两端,只有少数行为对规则有任何影响,所以你几乎可以说规则集1和2之间的任何东西,它将被假定为意味着 “允许损害”。例外情况是,如果行为中出现 “不能” 或 “不能”,则该规则将被否定并假定为 “防止损害”。
此外,还有一些通用的规则集名称可用于定义更广泛的应用程序-单词“任何东西", "没什么", "一切", "全部", "任何"和"无“” 可以用于规则集1或规则集2。但是,再次考虑了语义,因此 “无” 或 “无” 将再次有效地反转规则含义。因此,使用像 “玩家不能伤害任何东西” 这样的双重否定将转化为 “玩家可以伤害一切”,并可能阻止您加入任何游艇俱乐部。
规则优先级
在编写规则时必须考虑一定的优先级。通常,更具体的规则会覆盖广泛的规则 (带有 “任何” 或 “无” 等的规则)。如果您有两个规则: “任何事情都可以伤害玩家” 和 “路障不能伤害玩家”,那么路障规则将始终覆盖 “任何事情” 规则。计划条目
计划条目定义计划的全局规则集更改,并已滚动到一行中,其中三 (3) 个部分用空格分隔:- 时间-预定条目生效的时间。对于游戏时间,格式为“hh:mm“其中hh是小时 (24小时格式),mm是分钟。但是,实时计划条目应输入为“d.hh:mm”,其中d是星期几,为0-6 (星期日-星期六)。一周中的一天现在也接受*(星号) 作为表示每日的通配符,因此实时条目 “*.08:00” 将在每日0800 (上午8:00) 触发。请注意,对于实时,如果您不提供一周中的某一天,则假定为0 (星期日),并且您的日程安排条目仅在星期日触发!
- 规则集-要在指定时间全局设置的规则集名称
- 信息-规则集名称之后的所有文本都将用作广播消息,以便在规则集更改时发送给所有玩家。此消息还将发送给在进度表输入期间登录的任何玩家。令人震惊的是,如果消息为空,则不会广播任何消息。
"*.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,TurretsIgnoreScientist,StaticSamSitesIgnorePlayers和PlayerSamSitesIgnorePlayers
忽略所有规则:-需要NoHeliDamage,NoHeliDamagePlayer,NoHeliDamageQuarry来处理Heli伤害。默认情况下不使用heli标志允许损坏。无论哪种方式,规则永远不会被评估。
- 衰变伤害-TruePVE不能处理衰变伤害
- 抢劫-TruePVE不处理抢劫。使用防止掠夺插件
- 动物伤害-不评估规则-允许对该物体造成所有伤害
- AdvancedChristmasLights-不评估规则-您必须能够构建以损坏此对象
- GrowableEntity-不评估规则-您必须能够构建或成为所有者才能损坏此对象
- 授权损坏是一个非常利基的标志,被严重误解。当未与CupboardOwnership、authorizeddamerequiresownership或AuthorizedDamageCheckPrivilege配对时,将评估以下内容:
- 如果实体是mount或samsite,则将检查规则以查看是否有任何规则可以阻止损坏。如果不是,那么当实体不属于任何玩家时,或者如果它属于玩家或他们的盟友,则允许伤害。否则,将最后评估规则。
- 当授权损坏与配对CupboardOwnership当没有工具柜保护实体时,或者当有一个柜子并且您被授权时,它将允许损坏。否则,损坏将被阻止 (意味着不评估规则。)
- 当授权损坏与配对授权损害所有权它将首先评估车辆的规则,并在所述规则不允许的情况下阻止损坏。否则,当实体不属于玩家 (minicopters除外),或者当玩家拥有实体,或者玩家是所有者的盟友时,允许损坏。如果在这一点上没有任何东西允许损坏,那么它就会被阻止 (意味着规则不会被评估)。
- 当授权损坏与配对授权damagecheckprivilege它将通过橱柜授权保护衰变实体,玩家直升机和拖船。如果它是不同的实体,或者如果未授权损坏,则将检查授权损坏,授权损坏的所有权和/或cupboardownship。如果到这一点仍然没有授权损坏,那么最后将评估规则。
- 授权农场损坏是一个独立的/独立的标志,所有者和盟友可以伤害孵化的鸡
- HopperCannotTargetEnemyLoot将防止敌人的跳跃者抢劫掉落的物品和尸体
- 动物信号员-防止动物瞄准睡觉的玩家
- 自杀性阻断-块自杀-不使用规则
- FriendlyFire-使队友,氏族伴侣和朋友之间的友好火
- 自伤-允许玩家 (通常) 伤害自己,例如使用C4或BeanCans等。
- CupboardOwnership-当启用授权损坏将橱柜范围外的实体视为无主,橱柜范围内的实体将需要授权。
- 扭曲伤害-允许玩家破坏任何树枝积木不管授权 (鼓励声音建筑实践)
- TwigDamageRequiresOwnership-块损坏树枝,除了从所有者,所有者的盟友,或者当你有TC auth
- WoodenDamage-与TwigDamage标志相同,但用于木材
- WoodenDamageRequiresOwnership-与TwigDamageRequiresOwnership标志相同,但对于木材 (它需要WoodenDamage标志)
- NoHeliDamage-禁用以下列出的现有heli标志未涵盖的所有其他实体的heli损坏
- NoHeliDamagePlayer-防止heli伤害玩家
- NoHeliDamageQuarry-防止heli损坏采石场
- NoHeliDamageSleepers-防止heli损坏卧铺 (这不检查玩家是否在线!)
- 可转换的马匹-防止伤害骑马
- NoHeliDamageBuildings-防止损坏建筑物,车辆和可部署在TC范围内时
- 直升机锁定-允许heli损坏锁定的盒子/门 (需要LockedBoxesImmortal或LockedDoorsImmortal)
- NoPlayerDamageToCar-防止玩家损坏模块化汽车
- NoPlayerDamageToMini-防止玩家损坏Minicopter
- NoPlayerDamageToScrap-防止玩家损坏ScrapTransportHelicopter
- NoMLRSDamage-防止使用MLRS瞄准任何东西,并防止不使用MLRS发射的MLRS火箭造成的伤害
- 人类损伤-使任何类型的npc都能损坏玩家 (插件覆盖此行为非常常见!)
- NpcsCanHurtAnything-允许npc损坏任何东西 (LockedBoxesImmortal和LockedDoorsImmortal覆盖此标志)-任何npc插件都覆盖此标志并给出意外结果是很常见的。请咨询该开发人员。
- LockedBoxesImmortal-锁定的盒子是不朽的 (_HeliDamageLocked_覆盖此)
- LockedDoorsImmortal-锁着的门是不朽的 (_HeliDamageLocked_覆盖此)
- ExcludeTugboatFromImmortalFlags-防止LockedBoxesImmortal和LockedDoorsImmortal标志保护拖船上的实体
- AdminsHurtSleepers-管理员可以伤害睡眠者
- 管理员玩家-管理员可以伤害清醒或睡着的球员
- 保护轨枕-枕木免受NPC损坏
- TrapsIgnorePlayers-玩家不触发陷阱 (不工作的熊/捕捉陷阱)
- 陷阱科学家-防止npc触发陷阱
- TurretsIgnorePlayers-玩家不触发炮塔 (不工作的火焰炮塔)
- TurretsIgnoreScientist-防止npc被玩家拥有的炮塔作为目标 (“ent who” 控制台命令显示有效的steam id)
- StaticTurretsIgnorePlayers-防止炮塔 (没有所有者,例如在纪念碑上) 瞄准玩家
- SafeZoneTurretsIgnorePlayers-防止安全区域内的炮塔瞄准玩家 (这些是绿色哨兵炮塔)
- 静态samsitesignoreplayers-静态sam站点忽略所有玩家,例如从Launch Site或已将SamSite.staticRespawn设置为true的插件。
- PlayerSamSitesIgnorePlayers-玩家sam站点忽略所有玩家,例如从部署的sam站点。如果另一个插件将SamSite.staticRespawn设置为true,则此标志将不适用于该sam站点。
- SamSitesIgnoreMLRS-防止SAM站点瞄准MLRS火箭
- 车辆碰撞损坏无驱动程序-车辆将采取碰撞,如果没有球员坐在司机座位
- TurretsIgnoreBradley-防止插件炮塔射击布拉德利APC
- LockedVehiclesImmortal-模块化汽车在受密码锁保护时不会受到损害
- 静态turretsignorescientist-防止非拥有的炮塔和npc炮塔射击npc
对于开发人员
钩子可用于外部插件,用于添加,更新和删除映射:// 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)
CanEntityTakeDamage: 返回真/false将允许/不允许损坏并跳过正常的TruePVE损坏评估。
object CanEntityTakeDamage(BaseCombatEntity entity, HitInfo hitinfo)
我们在处理CanBeTargeted() 时调用以下钩子;
CanEntityBeTargeted: 返回真/false将允许/不允许定位并跳过正常的TruePVE目标评估。这适用于炮塔,samsites等。
object CanEntityBeTargeted(BasePlayer player, BaseEntity entity)
我们在处理OnTrapTrigger() 时调用以下钩子;
CanEntityTrapTrigger: 返回真/false将允许/禁止陷阱触发事件并跳过正常的TruePVE触发评估。
object CanEntityTrapTrigger(BaseTrap trap, BasePlayer player)
CanMlrsTargetLocation: 返回真/false将允许/禁止MLRS实体发射MLRS火箭并跳过正常的TruePVE触发评估。
object CanMlrsTargetLocation(MLRS mlrs, BasePlayer player)
区域集成
在 “映射” 或 “使用排除” 下添加区域ID和规则集。使用上面解释的映射。- 映射-将区域名称 (LiteZones) 或名称/ID (ZoneManager) 映射到规则集名称,或仅将规则集名称映射到自身。可用于将多个区域映射到同一规则集。也可用于通过映射到 “排除” 来创建排除区域 (具有默认Rust行为的区域)。示例:
"default": "default",
"66499587": "killall",
"62819081": "exclude"
},
学分
- ignignokt84,这个插件的原作者
- rfc1920,用于帮助维护插件
- nivex,用于帮助维护插件