PalACE_AntiCheat

PalACE_AntiCheat

PalServer 专业服务器端反作弊

PalServer 版本为 v1.0.2.101103

PalACE 英文定制版 - 反作弊与服务器功能

概述

PalACE 在专用服务器上验证重要的游戏请求,而不是仅仅信任客户端提供的值。当有可用证据时,其保护机制使用服务器持有的玩家、物品栏、武器、帕鲁、目标、位置和进度状态。检测、拒绝、警告、踢出和广播行为均由 Config.json 控制。

本文档介绍了当前的英文定制版。当匹配的游戏绑定未通过版本验证时,某项保护功能可能会暂时不可用;游戏更新后,请务必查看启动时的功能验证报告。

战斗保护

  • 修正针对 NPC 和帕鲁目标的倍增玩家伤害。
  • 拒绝修改后的玩家基础攻击和全屏伤害请求。
  • 根据服务器已知的武器和攻击数据验证武器攻击。
  • 检测伪造或未初始化的武器使用。
  • 在权威射击事件周围验证实际弹药消耗。
  • 当服务器拥有完整证据链时,阻止碰撞穿透无敌和可疑的生命恢复。
  • 支持单独的玩家对玩家倍增伤害修正。
  • 应用可配置的权威 PVP 伤害倍率,而不改变玩家对 NPC 的伤害。
  • 当服务器无法证明滥用时,保留合法的环境、状态、治疗和初始化路径。

捕获保护

  • 拒绝伪造的捕获球身份和无效的球状态。
  • 拒绝强制捕获等级和强制成功操纵。
  • 阻止捕获服务器标记为不可捕获的目标。
  • 保护塔主首领、玩家部署的帕鲁和基地分配的帕鲁免受无效捕获请求。
  • 根据服务器持有的目标和球证据验证捕获请求。
  • 定制/VIP 捕获等级策略可以拒绝高于配置限制的帕鲁。将限制设置为 0 将使用玩家原生游戏等级;虚拟等级不会提高此捕获上限。

移动和远程交互保护

  • 验证旅行点、坐标传送和重生传送请求。
  • 使用有界的服务器端移动证据检测不支持的短距离位置跳跃和碰撞穿越。
  • 阻止超出允许服务器距离的远程拾取请求。
  • 涵盖远程触发的世界拾取物,如蛋、笔记、补给物体、塔资源和其他受支持的可拾取地图对象。
  • 通过远距离拾取策略阻止远程箱子交互。
  • 通过比较服务器持有的矿物位置与提交的命中位置来检测吸矿攻击。
  • 中和针对已被识别为通过吸矿移动的矿物的伤害,包括武器和徒手伤害,而不是惩罚正常的附近拾取。

帕鲁完整性保护

  • 拒绝在玩家拥有的帕鲁上未经授权的主动技能注入。
  • 拒绝未经授权的被动特质注入,同时保留受支持的 NPC 手术和其他合法的服务器工作流程。
  • 验证帕鲁魂强化所有权、等级转换和所需材料消耗。
  • 防止跳过材料或超过支持等级的强化请求。
  • 验证骑乘请求,以便不支持的坐骑使用不会绕过鞍座和游戏要求。

物品栏、建筑和经济保护

  • 验证由物品和建筑请求使用的服务器持有的物品栏更改。
  • 阻止用于复制材料的高频建筑请求模式。
  • 抑制基地边界内最后十米的拆除退款,封堵终端边界材料利用漏洞。
  • 保护受支持的商人 and 物品栏转移路径免受伪造物品状态的影响。
  • 使用有界请求状态和事件驱动检查,而不是重复的世界扫描。

稳定性与滥用控制

  • 启用 worldTreeOptimization 时,通过将树木生命值和掉落数量设置为 1 来限制大规模树木破坏。
  • 可以阻止重命名已创建的角色。
  • ACEBanList.json 中维护 PalACE 用户和 IP 封禁。
  • 可以根据配置和证据,静默拒绝无效操作、警告玩家、踢出玩家,并可选择广播踢出通知。
  • 反作弊白名单将明确配置的 Steam ID 从 PalACE 检测中排除,应仅限于受信任的测试账户。

审计日志

可选的 RPC 审计日志记录详细的证据,用于故障排除和规则调整。根据事件的不同,日志可能包括:

  • 攻击者和目标身份;
  • 玩家、帕鲁、武器、技能和地图对象标识符;
  • 伤害前后的服务器持有目标生命值或护盾;
  • 提交的伤害字段和服务器验证结果;
  • 射击前后的弹药量;
  • 捕获球、目标、强化、物品栏、建筑和移动证据;
  • 请求是被允许、纠正、拒绝还是因缺乏权威证据而保持不变。

仅在调查问题时启用 logRPC,因为详细的 RPC 日志可能会产生大量输出。

可配置的核心保护

  • infiniteAmmoProtection:验证服务器端弹药消耗。
  • multipleAttackFix:修正对非玩家目标的倍增伤害。
  • preventModifiedPlayerAttackAndFullScreenKill:阻止伪造的基础攻击和全屏伤害。
  • pvpMultipleAttackFix:修正玩家对玩家的倍增伤害。
  • pvpDamageMultiplier:缩放权威 PVP 伤害,范围从 0 到 100。
  • invincibilityProtection:阻止碰撞穿透和异常治疗滥用。
  • preventLongDistancePickup:阻止远程拾取和受支持的远程交互。
  • preventOreSuction:阻止对通过吸矿滥用移动的矿物造成伤害。
  • preventFakePalSphere:验证球、捕获等级和捕获目标。
  • preventPalActiveSkillInjection:保护主动技能。
  • preventPalPassiveSkillInjection:保护被动特质。
  • preventPalEnhancementCheat:验证帕鲁魂强化。
  • preventBuildingMaterialExploit:阻止建筑材料复制模式。
  • preventTerminalBoundaryMaterialExploit:抑制边界拆除退款。
  • preventPlayerRenaming:锁定已建立的玩家名称。
  • PlayerKick:启用使用惩罚路径的检测踢出功能。
  • playerKickBroadcast:广播受支持的踢出事件。
  • steamFilterWhitelist:将受信任的 Steam ID 从 PalACE 检查中豁免。

服务器管理增强

  • craftExpRate:将制作经验从正常值的 0 倍更改为 99 倍。
  • disableBurnDamage:禁用灼烧、营火和熔岩的持续伤害。
  • disablePoisonDamage:禁用中毒的持续伤害。
  • disableFallDamage:禁用坠落伤害。
  • enhancePalAI:改进受支持的帕鲁 AI 行为并减少技能冷却时间。
  • WorldPalCDNull:移除野生帕鲁的技能冷却时间,而不改变玩家拥有的帕鲁;启用时取代 enhancePalAI
  • hideRestConsoleLogs:隐藏游戏控制台中的 REST 端点访问消息。
  • BannedMessage:控制被封禁客户端在登录时显示的消息。
  • rconPrivateMessagesEnabled:禁用自动授予/删除私信,同时保持 sendsendalertsendmsg 操作可用。

VIP 和定制版功能

  • 用于重要加入、战斗事件、捕获、建筑升级、拾取、掉落和其他受支持服务器事件的公告系统。
  • 玩家头衔映射,在公告中为已配置的 Steam 用户添加前缀。
  • 超越原生等级上限的虚拟进度,最高可达受支持的 PalACE 进度范围,并具有持久经验和所需经验显示。
  • 可配置的等级护盾效果和基于等级的伤害减免层级。
  • 全局玩家和玩家拥有的帕鲁等级上限,范围从 2 级到 99 级。
  • 个人进度门槛,要求按顺序清除塔主首领;跳过较早的塔不会解锁更高级别范围。
  • 捕获等级策略从 0 到 99。值为 0 时遵循玩家原生等级并忽略虚拟等级。
  • 通过 hamsterOwnerBindings 进行自定义的绑定所有者的授予。物品和帕鲁规则将内部 ID 绑定到 Steam 所有者,并拒绝其他玩家的转移或拾取。
  • JSON 帕鲁导出、基于模板的帕鲁授予和生成、NPC 生成、物品导出、带备份的过滤帕鲁删除,以及扩展的 RCON 管理。

配置与操作

  1. 保持 DLL 和 Config.json 来自同一版本。
  2. 更改仅启动时生效的钩子或进度初始化后,必须重启服务器。
  3. 使用 reloadcfg 重新加载支持运行时刷新的设置。
  4. 在 Palworld 更新后,在评估反作弊行为之前,确认所有必需模块都通过启动功能验证。
  5. 如果怀疑是误报,请保留确切的 RPC 日志窗口、服务器时间、玩家 ID、执行的操作、加载的 DLL 哈希和游戏服务器版本。

PalACE 是证据驱动的:配置的开关启用规则,但服务器仍然需要匹配的权威事件和运行时绑定,然后才能做出可靠的决策。

PalACE 3.3.1 英文定制版 - 命令参考

通用规则

  • 这些是管理员命令,需要经过身份验证的 RCON 会话。
  • 命令名称不区分大小写。可选的斜杠 / 前缀。
  • 玩家 ID 格式为 steam_ 后跟 17 位数字。
  • 参数由空格分隔。不支持带引号的多词参数解析。
  • sendsendalertsendmsgacebanaceipban 会连接剩余的参数,因此它们的消息或原因可以包含空格。
  • 访问玩家对象的命令通常要求该玩家在线并完全初始化。
  • 物品 ID、帕鲁 ID、NPC ID、模板名称和 GUID 是内部游戏值,不是显示名称。
  • getpos 报告的坐标使用地图 X/Y 加上世界高度 Z。下面的命令会明确说明它们接受哪种坐标形式。

封禁管理

aceban <UserId> [reason]

将 Steam 用户添加到 ACEBanList.json,如果玩家当前在线,则静默断开连接。可选英文原因可以包含空格。

示例:

aceban steam_76500000000000000 Repeated anti-cheat violations

aceunban <UserId>

ACEBanList.json 中移除 Steam 用户封禁。

示例:

aceunban steam_76500000000000000

aceipban <IP> [reason]

将 IP 地址添加到 ACEBanList.json。可选原因可以包含空格。

示例:

aceipban 203.0.113.10 Repeated connection abuse

aceipunban <IP>

ACEBanList.json 中移除 IP 封禁。

示例:

aceipunban 203.0.113.10

物品与经验

give <UserId> <ItemId> [Count=1]

向在线玩家授予一件物品。计数必须是正整数,默认为 1。该命令在报告成功之前会验证物品操作。

示例:

give steam_76500000000000000 Wood 100

getitem <UserId>

列出玩家受支持的物品容器中的非空槽位:CommonDropSlotEssentialWeaponLoadoutPlayerEquipArmorFoodEquip。结果包括槽位、物品名称、ItemID 和数量。

示例:

getitem steam_76500000000000000

exportitem <UserId>

将相同的受支持容器导出到:

DATA\Item\<UserId>.json

JSON 包含 SteamID、玩家名称、UTC ExportedAt 时间戳、物品槽位数、容器元数据、槽位、ItemID、显示名称、数量和 DynamicID。

示例:

exportitem steam_76500000000000000

give_exp <UserId> <Experience>

向在线玩家授予正数经验值。虚拟进度(如果启用)遵循服务器的配置进度规则。

示例:

give_exp steam_76500000000000000 100000

delitem <UserId> <ItemId> [Count|all]

移除一定数量的物品。省略 Count 将使用命令的默认数量。关键字 all 将移除该 ItemID 的所有匹配堆叠。

示例:

delitem steam_76500000000000000 Wood 10
delitem steam_76500000000000000 Wood all

delitem <UserId> <ItemId> <Count>,<ItemId> <Count> [...]

作为一个经过验证的批次移除多种物品类型。最多接受 64 种物品类型。在任何物品被移除之前,必须所有请求的数量都可用。物品 ID 不区分大小写匹配。

示例:

delitem steam_76500000000000000 Wood 10,Stone 20

delitem <UserId> all

清除所有受支持的玩家物品容器。此操作具有破坏性,不接受数量参数。

示例:

delitem steam_76500000000000000 all

玩家消息

send <Message>

向所有连接的玩家发送可见的系统聊天消息。

示例:

send The server will restart in ten minutes.

sendalert <Message>

使用游戏的通知呈现方式发送服务器范围的通知。

示例:

sendalert The server will restart in ten minutes.

sendmsg <UserId> <Message>

向一位在线玩家发送私人聊天/客户端通知。

示例:

sendmsg steam_76500000000000000 Your items have been delivered.

rconPrivateMessagesEnabled 设置控制授予和删除命令的自动私人通知。它永不禁用 sendsendalertsendmsg

玩家、坐标与基地

getpos [UserId]

如果不带 UserId,列出所有已初始化在线玩家及其坐标。如果带 UserId,仅返回该玩家的地图 X/Y 和世界高度 Z。

示例:

getpos
getpos steam_76500000000000000

tp <UserId> <TargetUserId>

将一个在线玩家传送到另一个在线玩家。

示例:

tp steam_76500000000000000 steam_76500000000000001

tp <UserId> <X> <Y> [Z]

将玩家传送到引擎/世界坐标。如果省略 Z,命令使用 Z=0;不会保留玩家当前高度。

示例:

tp steam_76500000000000000 246 -504 7200

killnearestbase <MapX> <MapY>

使用 getpos 风格的地图 X/Y,在命令的 3000 米搜索边界内找到最近的基地,然后拆除该基地的建筑和终端。执行前请验证坐标,因为效果具有破坏性。

示例:

killnearestbase 246 -504

帕鲁与 NPC

givepal <UserId> <PalId> [Level=1]

向在线玩家授予一只服务器已知的帕鲁物种。等级默认为 1,必须在 1 到 255 之间。未知的帕鲁 ID 将被拒绝。

示例:

givepal steam_76500000000000000 Anubis 50

getpal <UserId>

读取玩家的活跃队伍和帕鲁盒,移除重复的 GUID 条目,并返回帕鲁名称、等级和 GUID,而不写入 JSON 文件。

示例:

getpal steam_76500000000000000

exportpals <UserId>

导出玩家的队伍和帕鲁盒。每只帕鲁作为一个单独的 JSON 文件写入:

DATA\Pals\Exported\<UserId>\<PalId>_<GUID>.json

导出的模板包括身份、等级、Rank、属性、被动特质、主动技能,以及当前模式支持的可用/精通技能数据。

示例:

exportpals steam_76500000000000000

givepal_j <UserId> <PalTemplate>

DATA\Pals\Templates 加载一个 JSON 模板,并将该帕鲁授予在线玩家。可以省略 .json 扩展名。

示例:

givepal_j steam_76500000000000000 Penguin_GUID

spawnpal_j <PalTemplate> <X> <Y> <Z>

DATA\Pals\Templates 加载一个 JSON 模板,并在世界中生成配置的帕鲁、受支持的人类敌人或特殊战斗单位。X/Y 使用 getpos 地图坐标,Z 是世界高度。模板字段控制受支持的 AI、攻击性、技能和捕获率行为。

示例:

spawnpal_j Penguin_GUID 246 -504 7200

spawnnpc_j <NpcId> <X> <Y> <Z>

直接使用 NPC ID 生成一个独特 NPC,无需 JSON 模板。PalACE 初始化受支持的对话流程、商店、手术或 NPC 战斗行为。结果仍取决于该 NPC 可用的数据和流程定义。

示例:

spawnnpc_j Arena_PalPassive_Doctor 246 -504 7200

deletepals <UserId> all

备份并删除玩家拥有的所有帕鲁。

deletepals <UserId> <PalGUID>

备份并删除具有指定 GUID 的一只帕鲁。

deletepals <UserId> <Field> <Value> [conditions...]

使用导出的 JSON 字段名称选择帕鲁,写入备份,然后删除匹配的集合。多个条件用 AND 组合。

示例:

deletepals steam_76500000000000000 ID Anubis Rank>=3
deletepals steam_76500000000000000 Passives CraftSpeed_up1,CraftSpeed_up2
deletepals steam_76500000000000000 Lucky=true Level>=50 Limit=10

支持的字段包括: ID/PalIDNick/NicknameGenderLevelRankLucky/ShinyPassivesHPPalSouls.HealthPalSouls.AttackPalSouls.DefensePalSouls.CraftSpeedPalSouls.TotalCraftSpeedCondensedPalsFriendshipPointsUnusedStatusPointsExpLimit

数字字段支持 ===!=<<=>>=Passives 要求帕鲁包含列出的所有被动特质。备份写入:

DATA\Pals\Deleted\<UserId>\

配置

reloadcfg

重新加载并规范化 PalACE\Config.json。运行时设置(如日志记录、反作弊策略、伤害规则、AI 选项、公告、自定义绑定所有者的授予和 RCON 私人通知)在受支持的地方更新。已安装的启动钩子和进度初始化仍然需要服务器重启。

示例:

reloadcfg

操作说明

  • 在使用 delitem alldeletepalskillnearestbase 之前,请务必进行备份。
  • 在执行破坏性命令前,使用 getitemgetpalgetpos 验证目标。
  • JSON 导出命令写入服务器端文件;它们不会通过 RCON 发送文件。
  • 命令成功确认服务器端命令执行,而非客户端渲染。
  • 当命令报告玩家状态不可用或游戏数据不受支持时,请查看 PalACE 日志。

PalACE 英文定制版 - 安装指南

要求

  • Windows Palworld 专用服务器安装。
  • 与当前支持的 Palworld 服务器版本匹配的 PalACE 构建。
  • 替换 DLL 前必须停止服务器。

安装

  1. 停止 Palworld 专用服务器。
  2. winmm.dll 复制到包含 PalServer-Win64-Shipping.exe 的目录:
    PalServer\Pal\Binaries\Win64\
    
  3. 正常启动服务器。
  4. 检查服务器控制台,查看 PalACE 版本横幅、游戏版本验证、功能验证和许可证状态。

首次启动

PalACE 会在以下位置创建其运行时文件:

PalServer\Pal\Binaries\Win64\PalACE\

主配置文件是:

PalACE\Config.json

仅在服务器停止时编辑 Config.json,或在编辑支持运行时重载的设置后使用 reloadcfg RCON 命令。启动钩子和某些进度初始化仍然需要完全重启服务器。

数据与日志

  • PalACE\DATA\Item:存储物品导出。
  • PalACE\DATA\Pals\Templates:存储帕鲁 JSON 模板。
  • PalACE\DATA\Pals\Exported:存储帕鲁导出。
  • PalACE\DATA\Pals\Deleted:存储删除帕鲁前创建的备份。
  • PalACE\Logs:存储操作和 RPC 审计日志。
  • PalACE\ACEBanList.json:存储 PalACE 用户和 IP 封禁。

更新

  1. 停止服务器。
  2. 备份 PalACE\Config.jsonPalACE\DATAACEBanList.json
  3. 用新的英文定制版替换 winmm.dll
  4. 启动服务器并验证版本、功能和许可证消息。

故障排除

  • 无 PalACE 横幅:确认 winmm.dllPalServer-Win64-Shipping.exe 在同一目录。
  • 版本不匹配:安装为当前 Palworld 服务器制作的 PalACE 构建。
  • 许可证失败:保留确切的控制台消息并联系经销商。
  • 功能不可用:在更改配置之前,阅读控制台中的功能验证列表。
  • 不要混合使用不同版本的 DLL、Config.json 文件或受保护的构建。