配置逆向分析报告  ·  WeGame #2001829  ·  UE4  ·  PPO + 多头 GAE  ·  TCNN + LSTM  ·  模型版本 2025-08-07

本文档对《王者荣耀世界》PvE Boss 战 AI 队友(Bot)系统进行逆向分析。该系统使用强化学习训练 AI 操控英雄角色,在线上 PvE 副本中与人类玩家协同挑战 Boss,而非控制 Boss 本身 推断。文档包含技术架构Boss 战实战指南两部分:前者从配置文件还原 RL 训练框架与工程决策;后者从 AI 队友的奖惩信号反推出面向玩家的通关策略——AI 被奖励的行为 = 官方认可的最优操作

124 万
动作组合数
~1200 维
特征维度
7
奖励头数
360
并发 Bot 数
证据等级说明: 无标记 = 直接来自配置文件的事实  ·  推断 基于配置证据的合理推断  ·  推测 缺乏直接证据的猜测

一、系统概览

该系统为《王者荣耀世界》训练 PvE Boss 战 AI 队友(Bot)。AI Bot 操控英雄角色,在线上 PvE 副本中与人类玩家协同挑战 Boss。AI 控制英雄执行移动、技能释放、目标锁定、视角控制等操作。Boss 本身不使用强化学习——在训练系统中仅作为观测输入,无策略输出头。推断 Boss 可能由引擎脚本/行为树驱动,具体机制在 RL 配置之外,未确认。

模型不使用图像 CNN 处理画面像素,而是从游戏引擎直接提取结构化状态向量 + 射线检测作为观察空间,通过 TCNN 推断(时序卷积网络,配置仅标注 backend: "tcnn")和 LSTM 进行时序推理,使用 PPO 算法配合多头奖励函数进行训练。当前部署模式为 online(线上服务),由游戏服务器(DS)在线下发难度等级控制 AI 队友的表现水平。

指标数值
动作组合数124 万(10×11×10×15×15×5)
特征维度~1200 维
奖励头数7
并发 Bot 数360

二、系统架构

Go 推理服务连接 UE4 游戏引擎和 Python 训练后端,形成完整的在线强化学习闭环。

UE4 Game Server (DS) 游戏服务器 · 产生战斗帧 Game State (Protobuf) Go AIsvr · :15010 pprof :6060 · 7.5GB 内存上限 · Pipeline 并行 特征提取 XML 驱动 批量推理 batch=64 · 5ms TCNN (CGO) C++ 推理后端 奖励计算 动作解码 6 维离散 样本 (MCP++) 样本池 MemPool 经验缓冲 样本流 Python 训练端 PPO + 多头 GAE · λ=0.97 7 头价值函数 · LSTM 展开 模型权重 模型池 ModelPool 30 秒同步 · 保留 20 个历史版本 模型热更新
图 1 · Go 推理服务承载在线推理,Python 异步消费样本池并训练,新权重经模型池回写 AIsvr

数据流水线

游戏帧数据(UE4 Protobuf) → 特征提取(XML 驱动) → 批量推理(最大 64,5ms) → TCNN + LSTM(512 维隐状态) → 动作解码(6 维离散) → 游戏指令(移动/技能/视角)

三、模型架构

模型采用 TCNN + LSTM 架构,而非图像 CNN。推断 TCNN 可能为时序卷积网络,配置中仅标注 backend: "tcnn",具体架构未公开。所有视觉信息通过射线检测(Raycast)编码为结构化向量,不处理像素。

输入特征层 · ~1200 维 角色状态 · 技能 · Buff · 射线视野 · Boss · 弹道 · 合法动作掩码 StateVector · SkillVector × 13 · BuffVector × 20 · RayCast × 21 · BulletVector × 15 TCNN 网络 后端: tcnn · 时序卷积(推断)· 具体架构未公开 LSTM 循环层 hidden dim = 512 · 轨迹展开 T = 64 帧 策略头 × 6 Multi-Discrete Logits move · skill · target turn-up · turn-right · nav-fwd [10, 11, 10, 15, 15, 5] 价值头 × 7 Multi-γ GAE γ = [0.99, 0.999, 0.98, 0.99, 0.99, 0.99, 0.99] total_vf [7] Actor-Critic · PPO clip · LSTM 跨帧时序记忆
图 2 · 从结构化特征出发,经 TCNN + LSTM 输出策略分布与多头价值函数

输出张量

输出键形状说明
logits[10, 11, 10, 15, 15, 5]6 个策略头的原始输出
actions[6]从策略分布中采样的动作
neglogps[6]动作的负对数概率(PPO 重要性采样比)
lstm_state_result[2, 512]LSTM 隐藏状态 (h, c)
total_vf[7]多头价值函数估计

四、动作空间

6 维多离散动作空间,各维度独立采样,总组合数约 124 万。

6 维多离散动作空间 · 联合组合数 ≈ 124 万 每个维度独立 Categorical 分布 · 联合训练但独立采样 move 移动方向 10 8 方向 + 停 + 空 × skill 技能 11 普攻·跳·闪 Q·E·R·T·... × target 目标选择 10 可见实体 0 – 9 × turn-up 俯仰角 15 −30° ~ +30° 非对称 × turn-right 偏航角 15 −60° ~ +60° 非对称 × nav-fwd 导航前进 5 10 × 11 × 10 × 15 × 15 × 5 = 联合动作数 1,237,500 ≈ 124 万 DQN 类方法需为所有 124 万组合估计 Q 值 → 不可行 · PPO 将 6 维分解为 6 个独立 softmax 头,参数量 10+11+10+15+15+5=66
图 3 · 6 个独立 Categorical 头 · 联合训练但独立采样是 PPO 能处理 124 万动作的关键
维度大小取值说明
move 移动100° 45° 90° 135° 180° 225° 270° 315° 停止 空8 方向移动 + 停止 + 空操作
skill 技能11普攻、跳跃、闪避、蓄力攻击、Q、E、R、T、切换流派、无、F技能释放
target 目标10目标 0–9在最多 10 个可见实体中选择锁定目标
turn-up 俯仰15−30° … 0 … +30°相机俯仰角调整
turn-right 偏航15−60° … 0 … +60°相机偏航角调整
nav-fwd 导航50, 1, 2, 3, 停止导航前进方向选择

五、特征空间

XML 驱动的特征提取框架。每个特征通过 func 属性绑定 Go 侧提取函数,通过 type 定义归一化方式。

特征空间构成 · 每帧约 1200 维观察向量 AI 看到的不是像素,而是结构化向量——按实体类型拆解 战斗模型输入 ≈ 1210 维 主角色 × 1 ~552 维 其他玩家 × 6 ~301 / 位 Boss × 3 ~309 / 位 弹道 ×15 导航 Agent(独立模型 · 不在战斗向量内) NavRaycast 252 + NavLegal 49 + NavState 27 + NavArea 9 ≈ 337 维 每个实体内部组成 主角色 552 State 55 Skill×13 = 78 PlayerBuff × 20 = 260(Buff 追踪是主要维度占用) RayCast 134 Leg 其他玩家 / 位 301 S10 State15 PlayerBuff × 20 = 260(同样 Buff 占主要维度) Int16 Boss / 位 309 B13 State20 PlayerBuff × 20 = 260(Boss Buff 追踪) Int16 弹道 / 条(×15 同屏) 48 距离 × 4 档 类型 × 7 类 时间 × 3 档 前摇 / 阵营 旋转 / 尺寸 HitBox 内 核心观察 Buff 追踪(PlayerBuffVector × 20 = 260 维)在每个实体中都占大头——AI 对状态效果极度敏感 → 这意味着 Boss 战中 Buff 管理(增益保持、减益清除)是 AI 行为的重要决策维度
图 4 · 每帧约 1200 维观察向量按实体类型分组,Buff 追踪在各组中均占主要维度

主角色 × 1

特征内容维度
GameVector剩余游戏时间1 维
StateVector英雄 ID、血量、体力、位置、朝向、速度、连击数、角色专属标志~55 维
SkillVector × 13技能等级、可用性、封印状态、所属流派、最大/剩余 CD78 维
PlayerBuffVector × 20Buff 类型(7)、层数、剩余时间(3 档)、持续时间(3 档)260 维
RayCastVector21 条射线 × 3 距离档 (2m/10m/50m) + 区域可见性134 维
LegalActionVector合法动作掩码24 维

其他玩家 × 6

特征内容维度
SoldierVector士兵类型(10)10 维
StateSoldierVector血量、体力、法力、位置(3)、朝向(3)、相机(3)、速度(3)15 维
PlayerBuffVector × 20同主角色260 维
PlayerInteractVector距离(4 尺度)、位置差(5)、相对角度、技能 R 位置16 维

Boss × 3

特征内容维度
BossVectorBoss 类型(10)、相对位置(3)13 维
StateBossVector血量、活力、体力、法力、位置(3)、朝向(3)、相机(3)、速度(3)、破防/红光标志20 维
PlayerBuffVector × 20Boss Buff 追踪260 维
PlayerInteractVector同其他玩家16 维

弹道 × 15

特征内容维度
BulletVector距离(4 档)、位置差(5)、ID(10)、类型(7 one-hot)、时间(9)、前摇标志、阵营(3)、数量、旋转(3)、尺寸(3)、是否在打击范围内~48 维

导航 Agent(独立模型)

特征内容维度
NavStateVector位置(3)、前向(1)、移动状态(23 多热编码)27 维
NavRaycastVector环境射线检测编码252 维
NavLegalActionVector扩展合法动作掩码49 维
NavAreaVector目标角度、下一路径点偏差、距离9 维

六、奖励结构

采用多头奖励设计,每个奖励头对应独立的价值函数和折扣因子 γ,避免不同维度的奖励信号相互干扰。

方案 B · 7 头独立奖励结构(角色专属 mnwj / zhuzhan) 每个头独立 γ、独立 GAE、独立价值函数 · total_vf [7] 奖励头 · γ 奖励项(绿 = 正向 / 红 = 负向) 设计意图 H0 伤害 γ = 0.99 +10 造成伤害 −2 承受伤害 主伤害信号 伤害 vs 承伤 5:1 H1 击杀 γ = 0.999 ★ +0.1 击杀 −0.5 被击杀 远期规划 最高 γ · 鼓励长远 H2 技能 γ = 0.98 −0.0001 用技能 +0.0008 保流派 抑制滥用 鼓励流派稳定 H3 操作 γ = 0.99 +0.07 完美闪避 ★ 单次最高 高技巧鼓励 单次操作回报王 H4 空战 γ = 0.99 +0.0003 空中攻击 −0.0005 乱跳 东方曜专属 空战流权衡 H5 环境 γ = 0.99 +0.004 安全区域 位置控制 场地机制规避 H6 状态 γ=0.99 +0.004 Buff 状态管理 状态效果管理
图 5 · 7 头奖励并行训练,每个头独立 γ——击杀头 γ=0.999 看远期,伤害头 γ=0.99 看中期,技能头 γ=0.98 看短期

方案 A:标准战斗(3 头)

头 2:伤害(主奖励头)γ = 0.98

奖励项权重状态
伤害输出 (damage)+0.0004启用
击杀 (kill)+0.3启用
承受伤害 (damageTaken)−0.0001启用
远程英雄奖励 (yuanCheng)+1.0启用
跳跃惩罚 (new_jumpPern)−0.0015启用
时间惩罚 (timePern)−0.002启用
Boss 远程惩罚 (bossYuanCheng)+0.001启用
Boss 近战奖励 (bossJinZhan)+0.001启用
Z 轴远离惩罚 (zDistance)−0.001启用
攀爬奖励 (climbPern)+0.0002启用

方案 B:角色专属 — 主战/梦王(7 头)推测

「主战」「梦王」为拼音缩写 zhuzhan / mnwj 的猜测翻译,配置中无中文原文。

奖励头γ奖励项设计意图
H0 伤害0.99造成伤害 +10,承受伤害 −2主伤害信号,高权重
H1 击杀0.999击杀 +0.1,被击杀 −0.5长期击杀目标,高 γ 鼓励远期规划
H2 技能0.98技能使用 −0.0001,保持流派 +0.0008抑制技能滥用,鼓励保持流派
H3 操作0.99完美闪避 +0.07鼓励完美闪避(高技巧操作)
H4 空战0.99空中攻击 +0.0003,乱跳 −0.0005空中攻击奖励 vs 乱跳惩罚的权衡
H5 环境0.99区域惩罚 +0.004位置区域控制
H6 状态0.99Buff 惩罚 +0.004状态效果管理

七、训练配置

参数说明
算法PPO(近端策略优化)On-policy,基于 clip 的策略梯度
LSTM 隐藏维度512跨帧时序记忆
GAE λ0.97优势估计平滑系数
轨迹长度64LSTM 展开长度
折扣因子 γ[0.99, 0.999, 0.98, 0.99, 0.99, 0.99, 0.99]每个奖励头独立设置
每 Bot 批大小16 条样本MemPool 批量发送
推理批大小最大 64,超时 5ms流水线并行
模型同步30 秒,保留 20 个历史版本ModelPool 热更新
最大并发 Bot360并行环境数
帧跳过1每帧都响应
蒸馏Teacher-Student(可选)基于 logits 的 KL 散度蒸馏

八、动态难度系统

10 级渐进难度,从"笨拙 AI"平滑过渡到"完美反应"。DS 可在线下发难度等级(diffi: 2 表示在线模式)。

10 级难度枷锁 · L1 笨拙 → L10 完美 DS 在线下发等级(diffi = 2)· 相邻级别插值未公开 Level 1(笨拙) 10 级递进 Level 10(完美) 感知延迟 看到攻击后反应时间 4.0 s 0 s 闪避失误率 触发闪避但失败 90 % 0 % 策略抑制率 不执行最优动作概率 40 % 0 % 普攻失误率 普攻打偏概率 14.2 % 0 % 技能额外 CD 冷却时间倍率 ×1.82 ×0 Normal 模式 L1 有独立覆盖值(感知延迟 2.0s / 普攻失误 50% / 伤害倍率 0.8)· 详见附录 G
图 6 · Level 1 到 Level 10 的 5 项核心枷锁 · 中间 8 级灰点仅为 10 步递进的示意,实际插值曲线在配置中以 range 形式给出
参数最低难度(笨拙)最高难度(完美)
感知延迟4.0s0s
闪避失误率90%0%
普攻冷却0.352s0s
技能额外冷却×1.82×0
策略抑制率40%0%
普攻失误率14.2%0%

九、多 Actor 配置

三套独立的 Actor 配置,对应不同场景和角色,各自使用独立模型和奖励函数。

三套 Actor 并行部署 · 独立模型 · 独立奖励 multiActorConfig.yaml · 按 map_id 分发到对应 Actor 实例 Actor 0 · ngr_pvp map = 0 标准 PvE 模型 models/default/ TCNN + LSTM · hidden=512 奖励 config_battle.json 3 头 用途 通用双流派 Boss 战 ● 已激活 Actor 1 · ngr_pvp_nav map = 1 导航专项 模型 models/nav/ 独立特征提取器(252 维射线) 奖励 config_battle.json 共享 用途 导航寻路(非战斗) ● 已激活 Actor 2 · ngr_pvp_mnwj map = 2 角色专属 模型 models/fight_mnwj/ 专属 TCNN(梦王 推测) 奖励 config_battle_mnwj.json 7 头 用途 角色专属战斗模型 ● 已激活
图 7 · 三套 Actor 共享 Go 推理服务但各自独立模型 + 独立奖励配置 · fight_zhuzhan 存在但未激活
地图 ID名称模型路径奖励配置用途
0ngr_pvpmodels/default/config_battle.json(3 头)标准 PvE Boss 战,双流派
1ngr_pvp_navmodels/nav/config_battle.json导航专项模型,独立特征提取器
2ngr_pvp_mnwjmodels/fight_mnwj/config_battle_mnwj.json(7 头)角色专属战斗模型 推测 mnwj = 梦王?

十、为什么选择 PPO?推断

从配置中的 neglogpsgae_lengthtdlamda 可确认使用 PPO。以下算法对比和优势分析为基于系统架构的推断,非来自官方文档。

算法对比

算法结论原因
DQN / Rainbow❌ 不可行需要对每个动作估计 Q 值,124 万种组合不可行。只能输出确定性策略,易被针对
SAC❌ 不适配擅长连续动作空间,本系统为离散动作。需要经验回放 + off-policy,与 MemPool 管线不兼容
IMPALA / V-trace❌ 稳定性风险理论吞吐更高,但在多头奖励 + LSTM 场景下稳定性不如 PPO 的 clip 机制
PPO✅ 最终选择多离散动作天然分解;LSTM 需要 on-policy 轨迹;clip 保证训练稳定;logits 输出支持蒸馏

PPO 的 5 个核心优势

  1. 多离散动作分解 — 6 个维度独立输出 Categorical 分布,联合训练但独立采样
  2. 多头价值 + 多 γ — Actor-Critic 框架天然支持多头价值函数,每个头独立 GAE 计算
  3. LSTM + On-Policy 兼容 — 轨迹由当前策略生成,避免 off-policy 的隐状态过期问题
  4. 蒸馏友好 — logits 概率分布输出天然支持 KL 散度蒸馏到 Student 模型
  5. 工业级稳定性 — Clip ratio 限制更新幅度,360 Bot 并发 + 30 秒同步下不会突然崩溃

十一、技术栈

层次技术职责
游戏引擎UE4游戏环境,PvE Boss 战场景
推理服务GoAIsvr 推理服务,特征提取,动作解码,样本收集
模型后端C++ / TCNNTCNN 推理引擎(CGO 调用),模型加载 & 批量推理
训练端PythonPPO 训练循环,多头 GAE,模型优化
通信层MCP++ / Protobuf样本传输(MemPool),游戏状态通信
模型管理ModelPool版本管理,30 秒热更新,保留 20 个历史版本

十二、反推代码结构 推测

从配置中引用的模块名、函数名和数据路径反推的代码组织。以下文件名和目录结构均为推测,实际源码不可见。仅确认存在的是配置中引用的函数名(如 StateVectorSkillVectorfunc 属性)和模型路径(如 models/fight_zhuzhan/)。

aisvr/                                # Go 推理服务端
├── main.go                           # 入口,加载 globalConfig.yaml
├── server/
│   ├── server.go                     # TCP :15010,pprof :6060
│   ├── pipeline.go                   # 流水线并行(预处理 + 全局凑 batch)
│   └── batch_predictor.go            # 最大 batch=64,超时 5ms
├── actor/
│   ├── multi_actor.go                # 3 个 Actor: pvp / nav / mnwj
│   └── actor.go                      # 特征提取 → 推理 → 解码 → 发样本
├── feature/
│   ├── extractor.go                  # XML 驱动的特征提取框架
│   ├── state_vector.go               # func="StateVector"
│   ├── skill_vector.go               # func="SkillVector" × 13
│   ├── buff_vector.go                # func="PlayerBuffVector" × 20
│   ├── raycast_vector.go             # func="RayCastVector" (126+8)
│   ├── boss_vector.go                # func="BossVector"
│   ├── bullet_vector.go              # func="BulletVector" × 15
│   ├── soldier_vector.go             # func="SoldierVector"
│   ├── interact_vector.go            # func="PlayerInteractVector"
│   ├── nav_state_vector.go           # func="NavStateVector"
│   ├── nav_raycast_vector.go         # func="NavRaycastVector" (252)
│   ├── nav_area_vector.go            # func="NavAreaVector"
│   └── legal_action_vector.go        # func="LegalActionVector" (24 / 49)
├── reward/
│   ├── calculator.go                 # 多头奖励分发计算
│   └── heads.go                      # 伤害、击杀、技能、闪避、空战、环境、Buff
├── action/
│   ├── decoder.go                    # Logits → 游戏指令
│   └── difficulty.go                 # 10 级动态难度
├── model/
│   ├── tcnn_predictor.go             # CGO → C++ TCNN 推理后端
│   ├── model_pool.go                 # 30 秒同步,20 个历史版本
│   └── lstm_state.go                 # h/c 隐状态管理(512 维)
├── sample/
│   └── mempool_sender.go             # MCP++ → 样本池
└── distill/
    ├── teacher.go                    # 教师模型服务
    └── student.go                    # 学生模型 + KL 损失

trainer/                              # Python 训练端
├── learner.py                        # PPO 训练主循环
├── model/
│   ├── tcnn_model.py                 # 时序一维卷积网络
│   ├── lstm.py                       # LSTM(hidden=512)
│   ├── policy_heads.py               # 6 个 Categorical 策略头
│   └── value_heads.py                # 7 头价值函数
├── gae.py                            # 多头 GAE(λ=0.97, T=64)
└── utils/
    ├── mempool_reader.py             # 从样本池消费数据
    └── model_saver.py                # 发布到模型池

十三、核心设计洞察 推断

「设计原因」列为基于配置的推断分析。

决策具体做法设计原因
不用图像 CNN关闭 use_mapperc_featureuse_dmap_featureuse_benchmark_depth结构化特征足以描述战斗状态,避免 CNN 计算开销和样本效率损失
射线检测替代视觉180° 视野,21 条射线,3 个距离档(2m/10m/50m)轻量替代图像输入,提供空间感知
多尺度距离编码弹道用 4 个尺度(500/1000/2000/5000cm)不同尺度归一化提供粗/细粒度距离感知,避免远近信号被压缩
多头奖励3–7 个独立头,各自设定 γ解耦奖励信号,让伤害和闪避等不同目标独立优化
角色专属配置mnwj / zhuzhan / 通用各自独立奖励 + 模型不同角色操作范式差异大,统一模型难以收敛
导航与战斗分离导航和战斗使用独立模型任务分解:导航只需环境感知,战斗需要敌方状态
PART II

Boss 灼绒 — 实战指南

从 AI 队友的训练配置中提炼,翻译为面向玩家的实战建议。
核心逻辑:AI 被奖励的行为 = 开发者认可的最优操作

识别出的可玩角色(10 位)

从特征配置 state.xml、奖励配置和技能 XML 中提取。

代号角色名专属机制AI 配置中的特殊处理
DFY东方曜能量系统、上一技能记忆、空中攻击专属奖励头 H4(空中攻击 +0.0003),流派切换增益追踪
LengChun冷春R1/R2 二段大招、Q 技能专属冷却限制 Q=2s;R 血量惩罚机制
JL嘉洛独立资源系统R 技能冷却 10–18 秒(最长 CD 角色)
KAI大招充能、强化普攻大招状态 + 强普状态追踪,强普间隔 750ms
XS西施发球机制、Q 能量、球数量、E 能量三套独立能量系统并行追踪
MY萌芽子弹数量、热量管理弹药 + 过热双资源管控
SB孙膑炸弹系统、Q 叠层(最多 2 层)炸弹存在标志 + 持续时间追踪
WZJ王昭君冰系技能冰冻状态标志追踪
YCZL元初追击技能、破命技能、Z 轴能量追击标志 + 破命技时间窗口监控
MoCha墨茶标记机制标记状态标志追踪

Boss 战信息

配置项说明
Boss 名称灼绒(ZhuoRong)从资源包逆向提取,关联 FireLeopard(火豹)形象
Boss 配置 ID201101PvE 地图 10001 的固定 Boss
关卡名称NGR_EastWorld / bigworld_redboss大世界红色 Boss 关卡
Boss 额外血条1064Boss 有多段血条(ext HP),需要多次击破
大招最大能量10000大招需要积攒大量能量才能释放
Boss 可检测数量最多 3战斗中可能有多阶段或多 Boss 同时存在
弹道监控数量最多 15Boss 攻击弹幕密度高,同屏最多 15 个弹道
怪物等级 / 玩家等级30 / 30公平等级,无等级压制
流派模式bot_mode: 1(双流派)AI 队友需掌握两套流派并适时切换
注意:Boss 灼绒不由强化学习控制——在训练系统中 Boss 仅作为观测输入(BossVector / StateBossVector),无策略输出头。推断 Boss 行为可能由引擎脚本或行为树驱动,但具体机制不在本 RL 系统范围内,未确认。强化学习训练的是与人类玩家协同作战的 AI 队友(Bot),由游戏服务器在线下发难度等级(10 级)控制 Bot 表现水平。

从 AI 奖惩信号推导的通关策略

以下策略从 4 套奖励配置中提取。 = 被强化的行为, = 被抑制的行为。

Boss 战信号地图 · AI 被奖励的 = 开发者认可的最优操作 卡片按权重绝对值排序 · 左列正奖励 · 右列负惩罚 🟢 要做的事(正奖励) 🔴 别做的事(负惩罚) 造成伤害 +10 伤害是第一优先级 · 所有配置权重最高 头 H0 · γ=0.99 远程英雄保持距离 +1.0 王昭君/西施类远程要拉开安全距离输出 yuanCheng · config_battle.json 击杀(打完一段血条) +0.3 集中火力打段位 · 头 H1 · γ=0.999 最远 kill · 远期规划头 完美闪避 ★ 单次最高回报 +0.07 掌握 Boss 出招节奏 · 预判闪避比反应闪避更重要 perfectDash · 头 H3 待在安全区域 +0.004 注意场地机制 · 避开危险区域 保持流派 +0.0008/帧 找到合适流派后尽量保持 · 频繁切换丢加成 近战英雄贴近 Boss +0.001 铠 / 东方曜等近战要贴脸输出 空中攻击(东方曜专属) +0.0003 空中连招 · 东方曜核心优势 承受伤害 −2 受伤惩罚低于输出奖励 → 进攻优先但别白送 damageTaken · 头 H0 被击杀 ★ 死亡代价 −0.5 死亡 = 击杀奖励 × 5 · 不要贪刀,活着最重要 headKill · 头 H1 乱跳 / 跳跃代闪避 −0.0015 跳跃会持续扣分 · 不要用跳跃替代闪避 new_jumpPern · 4 套配置都惩罚 拖延时间 −0.002/帧 速战速决 · 每帧都扣分,别磨血 timePern Z 轴飘太高 −0.001 别在 Boss 上方飘太高 · 保持攻击距离 滥用技能 −0.0001 技能要精准命中 · 不要乱放 空战流的乱跳 −0.0005 空战流权衡:奖励空中攻击但惩罚无意义跳跃 承受伤害(轻微) −0.0001 标准配置下的轻度受伤惩罚(config_battle.json)
图 8 · 信号卡片按奖励/惩罚分栏 · 注意:完美闪避 +0.07 是单次操作回报之王,而被击杀 −0.5 是击杀奖励的 5 倍

核心输出

信号权重建议
造成伤害+0.0004 ~ +10伤害是第一优先级,权重在所有角色配置中都最高
击杀(打完一段血条)+0.1 ~ +0.3单次击破奖励极高,要集中火力打段位

生存优先

信号权重建议
承受伤害−0.0001 ~ −2受伤惩罚远低于输出奖励 → 进攻优先,但别白送
被击杀−0.5死亡惩罚是击杀奖励的 5 倍,不要贪刀,活着最重要

闪避与跳跃

信号权重建议
完美闪避+0.07完美闪避奖励极高,是所有单次操作中回报最大的行为。掌握 Boss 出招节奏,精准闪避
乱跳 / 无意义跳跃−0.0005 ~ −0.0015不要用跳跃当闪避用,跳跃会持续扣分

位置控制

信号权重建议
近战英雄贴近 Boss+0.001近战角色(铠、东方曜等)要贴脸输出
远程英雄保持距离+0.001 ~ +1.0远程角色(王昭君、西施等)要拉开安全距离输出
Z 轴距离过远−0.001不要在 Boss 上方飘太高,保持攻击距离

技能管理

信号权重建议
滥用技能−0.0001 / 次每次放技能都有微惩罚,技能要精准命中而非乱放
保持流派+0.0008 / 帧频繁切换流派会丢失加成,找到合适流派后尽量保持

其他

信号权重建议
空中攻击(东方曜)+0.0003东方曜要利用空中连招,这是他的核心优势
待在安全区域+0.004注意场地机制,避开危险区域
拖延时间−0.002 / 帧每帧都有时间惩罚 → 速战速决,不要磨血
利用攀爬+0.0002攀爬有微弱正奖励,场景中有可利用的垂直地形

角色专属 Boss 战节奏 推断

以下节奏建议从奖励信号和特征配置推导,非官方攻略。

8 角色 Boss 战节奏时序条 · 推断 从奖励信号 + 特征配置推导 · 相对时长非实测 · 仅示意阶段顺序 准备 / 蓄能 持续输出 爆发窗口 防御 / 闪避 循环 / 冷却 东方曜 DFY · 空战流 地面起手 空中连段 ★ 核心 完美闪避 循环 KAI · 强普爆发 大招蓄能 大招开启 强普连续输出(750 ms 间隔) 闪避 蓄能 冷春 LengChun · R 二段 Q 起手 普攻填充 R1 爆发 R2 追击 闪避重置 嘉洛 JL · 资源管理 普攻 / 小技能攒资源(长铺垫) R 爆发窗口 长 CD 期安全输出 西施 XS · 三能量 发球蓄能 Q / E 能量输出 保持距离 循环 萌芽 MY · 热量控制 持续射击(热量上升) 停火冷却 重启射击 孙膑 SB · 炸弹消耗 Q 叠层(最多 2) 炸弹布置 引爆配合硬直 闪避 元初 YCZL · 追击连段 消耗蓄能 追击突进 破命技爆发窗口 脱离 条带宽度仅反映相对时长示意 · 所有节奏均为从奖励+特征配置推导的建议模式
图 9 · 8 个已配置角色的 Boss 战节奏时序 · 共同模式:准备 → 输出 → 爆发 → 防御 → 循环

东方曜 (DFY) — 空战流

利用空中攻击(+0.0003)打出连招,掌握流派切换时机。能量系统需要规划释放窗口,记住上一技能衔接。

节奏:地面起手 → 空中连段 → 完美闪避 Boss 反击 → 循环

铠 (KAI) — 强普爆发

强化普攻间隔 750ms,大招充能后爆发。近战贴脸(+0.001)是核心收益来源。

节奏:蓄能 → 大招开启 → 强普连续输出 → 闪避 → 蓄能

冷春 (LengChun) — R 技能二段

Q 技能 CD 2 秒,需要高频使用。R 有两段释放(R1/R2),存在血量惩罚机制。

节奏:Q 起手 → 普攻填充 → R1 爆发 → R2 追击 → 闪避重置

嘉洛 (JL) — 资源管理

R 技能冷却最长(10–18 秒),有独立资源系统。核心是资源积累和大招窗口把握。

节奏:普攻/小技能攒资源 → 资源满后 R 爆发 → 长 CD 期间安全输出

西施 (XS) — 三能量体系

Q 能量 + 球数量 + E 能量三套系统联动。发球机制需要精确管理。

节奏:发球蓄能 → Q/E 消耗能量输出 → 保持安全距离 → 循环

萌芽 (MY) — 热量控制

子弹 + 热量双资源。过热会导致无法攻击。

节奏:持续射击 → 热量接近上限时停火/换技能 → 冷却后继续

孙膑 (SB) — 炸弹消耗

炸弹有存在时间和状态追踪,Q 可叠 2 层。

节奏:Q 叠层 → 炸弹布置 → 引爆时机配合 Boss 硬直 → 闪避

元初 (YCZL) — 追击连段

追击技能 + 破命技时间窗口 + Z 轴能量系统。

节奏:消耗蓄能 → 追击突进 → 破命技窗口内爆发 → 脱离

Boss 弹道分析(AI 视角的 15 弹道追踪)

AI 对每个弹道追踪 ~48 维特征。从特征设计可以反推攻击模式的复杂度(注意:弹道追踪覆盖所有实体,不仅限于 Boss)。

追踪维度特征对玩家的启示 推断
距离感知(4 档)50m / 20m / 10m / 5mBoss 攻击有远、中、近、贴身四档威胁判定,不同距离需要不同应对
类型识别(7 类)one-hot 编码 7 种弹道类型战场中至少有 7 种不同类型的弹道,需要分别识别和躲避
时间窗口(3 档)持续/剩余/爆炸时间各 3 个精度Boss 攻击有延迟爆炸机制,不要在弹道消失前掉以轻心
前摇检测is_startup 标志AI 会检测 Boss 攻击前摇,说明预判闪避比反应闪避更重要
范围判定is_inside 是否在 HitBox 内Boss 有 AOE 范围攻击,需要判断自己是否在打击范围内
旋转 + 尺寸rotation(3) + size(3)Boss 弹道有旋转和大小变化,不是简单直线,要注意形变

难度系统揭秘:AI 队友如何变笨/变强

动态难度分 10 级,由游戏服务器(DS)在线下发。以下是 AI 队友在不同难度下被施加的"枷锁"——当你觉得 AI 队友反应迟钝或闪避不精准时,可能是低难度在起作用。

枷锁最低难度(笨拙)最高难度(完美)意味着什么
感知延迟4 秒0 秒低难度下 AI 看到攻击后 4 秒才反应,高难度即时反应
闪避失误率90%0%低难度几乎不会闪避,高难度闪避精准
策略抑制40%0%低难度有 40% 概率不执行最优策略
普攻失误14.2%0%低难度普攻会打偏
技能额外 CD×1.82×0低难度技能冷却接近翻倍

附录 A:服务运维配置详解

以下从 globalConfig.yamlprivateConfig.yaml 中提取的完整运维参数。

服务端口与进程管理

配置项来源说明
推理服务端口:15010globalConfig.yamlGo AIsvr 主端口
pprof 性能分析:6060(已启用)globalConfig.yamlGo pprof 在线 profiling
Whiteboard 监控9.219.248.171:50000privateConfig.yaml数据上报/白板服务
GPU 服务127.0.0.1privateConfig.yaml本机 GPU 推理
ModelPool 地址127.0.0.1:10016globalConfig.yaml模型权重同步服务
进程 PID 文件../pid/aisvr.pidglobalConfig.yaml启动完成信号

内存与性能

配置项说明
Go 内存上限8,053,063,680 字节(7.5 GB)set_memory_limit,Go 1.19+ GOMEMLIMIT
日志单文件上限500 MB,保留 20 份,28 天滚动日志策略
性能采样分位P98percentile: 0.98
ELK 日志采样率0.01%elk_log_prob: 0.0001

超时配置

链路超时 (ms)说明
GameD → Connector200游戏帧到连接层
Connector → Actor1连接层到 Actor
Actor → Agent120Actor 到推理 Agent
预测帧超时30单帧推理最大时间
样本发送超时120,000(2 分钟)MemPool 样本丢弃阈值
批推理超时5batch 凑齐等待上限

模型加载策略

配置项说明
强制加载方式blobs直接加载二进制 blob
模型同步间隔30 秒ModelPool 拉取周期
历史版本保留20 个可回滚的版本数
历史快照间隔3,600 秒(1 小时)长期存档频率
战斗中刷新模型false战斗期间不热更新
模型帧加载频率每 256 帧load_model_frame_freq
最大保存模型数50model_save_num
联赛模式false未启用 league 模式

流水线并行

配置项说明
最大全局预测器30max_global_predictor
预处理并行true特征提取并行化
全局 Batchfalse使用 Actor 级别 Batch
Pipeline 缓存帧数3缓冲帧数
请求合并策略none不合并请求
响应合并策略pipeline回包时合并所有玩家

附录 B:蒸馏(Distillation)系统配置

系统内置 Teacher-Student 蒸馏框架,当前部署为 is_distill: false(未启用)。

配置项说明
蒸馏模式student / teacher 可选当前设为 student
样本类型student蒸馏样本归属
Student 接收地址127.0.0.1:7070学生端样本接收
Teacher 地址127.0.0.1:15001教师模型服务
Teacher 多节点teacher_1teacher_2 各 ratio=1多教师负载均衡
动作同步true127.0.0.1:7080蒸馏时动作对齐
状态同步true127.0.0.1:9090蒸馏时隐状态对齐

附录 C:战斗对抗(Battle)系统配置

系统内置 Master-Slave 对抗框架,当前部署为 is_battle: false(未启用)。

配置项说明
对抗类型master / slave 可选当前设为 master
Master 接收地址127.0.0.1:7071主节点接收
Slave 多节点slave_1slave_2 各 ratio=1多从节点配置

附录 D:游戏参数详解

基础参数

参数来源说明
引擎UE4privateConfig.yaml游戏引擎
队伍数2num_team双队伍制
最大 HP500max_hp角色血量上限
坐标范围 X[−9000, 9000] cmx_range相对坐标范围
坐标范围 Z[−9000, 9000] cmz_range相对坐标范围
默认视野角90°fov.default相机视野
局部视野truelocal_vision_flag非全透视,有视野迷雾
帧跳过1frame_skip_num每帧都响应
事件类型battleevent战斗事件

地图坐标(离线导航)

范围说明
X[176,400, 730,800] cm导航可达区域 X 范围
Y[−730,800, −176,400] cmY 轴反向
Z[−2,000, 500,000] cm高度范围极大(含空战高度)

地图中心坐标:[18734, 90018, 41387](三套地图配置均相同)

角色专属冷却限制

角色参数标准/梦王模式导航模式说明
冷春Q 技能 CD2,000 ms2,000 ms三个模式一致
嘉洛R 技能 CD10,000 ms18,000 ms导航模式大幅增加冷却
通用闪避 CD2,000 ms2,000 msdash_cd_ms
通用蓄力攻击 CD2,000 ms2,000 mscharge_atk_cd_ms
通用蓄力释放时间100 ms100 mscharge_atk_release_ms
通用移动频率300 ms300 msmove_freq_ms
强普间隔750 ms750 msqiangpu_atk_ms
通用目标切换 CD1 ms1 ms几乎无限制
通用视角转动频率500 ms500 msrot_freq_ms
通用观察期10 秒10 秒ob_seconds

疲劳系统(未启用)

参数说明
启用falsefatigue_flag
最大疲劳值180max_fatigue
恢复间隔每 1 帧fatigue_rec_gap_frame
每帧恢复量60fatigue_rec_per_frame

附录 E:动作空间精确配置

general_action_config.json 中提取的精确动作值。

移动方向(10 选 1)

[0°, 45°, 90°, 135°, 180°, 225°, 270°, 315°, −1(停止), 9999(空)]

技能(11 选 1)

["normal_atk", "jump", "dash", "charge_atk", "q", "e", "r", "t", "switch", "none", "f"]

目标选择(10 选 1)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

俯仰角 turn-up(15 选 1)— 非对称分布

[−30, −25, −20, −15, −10, −5, −3, 3, 5, 10, 15, 20, 25, 30, 0]

注意:0° 在最后而非中间,且正负侧不对称(负侧有 −3°,正侧有 3°)。

偏航角 turn-right(15 选 1)— 非对称分布

[−60, −50, −40, −30, −20, −10, −5, 5, 10, 20, 30, 40, 50, 60, 0]

同样 0° 在末尾,正负不完全对称。

导航前进 Nav-f-slct(5 选 1)

[0, 1, 2, 3, −1(停止)]

未启用:turn-down(13 选 1)

[−21, −15, −10, −6, −3, −1, 1, 3, 6, 10, 15, 21, 9999]

used_by_model: false

附录 F:射线与视觉感知详细配置

feature_extractor/config.json 中提取。

射线感知俯视图 · 180° 前方扇形 · 21 条射线 × 3 距离档 不处理像素 · 用射线检测构建空间感知 · 距离档非等比例示意 背后 180° = 盲区(必须转动相机才能看到) 2 m(近身) 10 m(中距) 50 m(远程) −90° +90° 前方 0° AI 关键参数 21 条射线 · 180° / 20 = 9° 角分辨率 · 3 档距离 = 2m / 10m / 50m 高度层 & 记忆 发射高度 180 cm · 层 60/150 cm · 目标消失后保持 5 帧可见
图 10 · AI 不看像素,而是靠 21 条前向射线 × 3 档距离 = 每帧 63 次命中检测来构建空间感知
参数说明
射线范围180°前方半圆扇形
射线数量21 条均匀分布
英雄高度180 cm射线发射高度
距离档位200 / 1,000 / 5,000 cm即 2m / 10m / 50m
高度变体[60, 150] cm两个高度层的射线
可见持续帧5 帧目标消失后保持可见的帧数

Face Screen(面部屏幕)感知

参数说明
通道数44 类信息通道
垂直分辨率30 格垂直方向 30 个网格
水平分辨率30 格水平方向 30 个网格
射线长度5,000 cm(50m)最大感知距离
垂直角度30°上下各 15°
水平角度60°左右各 30°
终端距离[60, 30, 10] cm三级精度

俯视图感知

参数说明
全局俯视格数30×30top_view_grid_num
全局格间距300 cm覆盖 90m×90m
高度范围−1,000 ~ 5,000 cm俯视高度切片
最大视距20,000 cm(200m)俯视最大感知距离
局部俯视格数30×30local_top_view
局部格间距30 cm覆盖 9m×9m 近身范围
局部射线长度600 cm6m 局部射线

移动状态半高

[90, 60, 40] cm — 站立 / 蹲下 / 匍匐三种姿态的碰撞半高。

附录 G:难度系统详细参数

difficulty_confs/config.json 中提取。当前部署 enable: false(由 DS 在线下发,不使用本地配置)。

等级范围(Level 1 → Level 10)

参数最弱(Level 1)最强(Level 10)说明
感知延迟4.0 秒0 秒看到攻击后反应时间
闪避失误率90%0%触发闪避但失败的概率
闪避延迟率20%0%闪避动作延迟执行
起身失误率20%0%被击倒后起身失误
闪避 CD5 秒0 秒闪避冷却时间
技能额外 CD 倍率×1.82×0技能冷却额外加成
普攻失误率14.2%0%普攻打偏概率
普攻 CD0.352 秒0 秒普攻间隔
闪避攻击失误率×1.820闪避后反击失误
策略抑制率40%0%不执行最优动作概率
空间误差范围0.250.05位置判断偏差

Normal 模式 Level 1 覆盖值

当使用 normal 模式第 1 级时,部分参数有独立覆盖值:

参数覆盖值与 range 的差异
感知延迟2.0 秒range 是 4.0 秒
闪避失误率40%range 是 90%
普攻失误率50%range 是 14.2%
普攻 CD1.2 秒range 是 0.352 秒
伤害倍率0.8range 中无此参数
策略抑制率20%range 是 40%

注意:damage_ratio: 0.8 仅出现在 normal level 1 中,意味着低难度下 AI 只造成 80% 伤害。

难度模式说明(diffi 字段)

含义
0无难度配置
1离线难度配置(使用本地 config.json)
2DS 在线难度配置(当前部署)

附录 H:第四套奖励配置 — config_battle2.json

除了 config_battle.json(3 头标准)和 config_battle_mnwj.json(7 头梦王)外,还存在两套未在主配置中激活的奖励变体。

config_battle2.json(3 头 — 防御导向变体)

名称奖励项权重状态描述
H0navHeadDensedodgeDamage 避免伤害−0.0001启用主标准版无此项
H1navHeadArrivecircleRange 圆形区域远离−0.001启用距离圆形安全区域太远的惩罚
bossRange Boss 距离+0.001禁用距 Boss 一定距离内的奖励
jumpPern 跳跃−0.01启用跳跃惩罚(权重比标准版高 10 倍)
H2damageHeaddamage 伤害+0.001禁用伤害奖励已禁用
damageTaken 受伤−0.01启用受伤惩罚(标准版的 100 倍)
bossRange Boss 距离+0.01启用启用,权重高
jumpPern 跳跃−0.01启用跳跃惩罚
关键差异:这是一个防御/站位导向的训练配置——伤害奖励被禁用,受伤惩罚提高 100 倍,强调保持 Boss 距离和避免乱跳。

config_battle_zhuzhan.json(7 头 — 主战变体)

config_battle_mnwj.json 对比:

mnwj 版zhuzhan 版差异
H0 伤害伤害 +10,受伤 −2相同无差异
H1 击杀击杀 +0.1,被杀 −0.5相同无差异
H2 技能skillPern −0.0001,genreStay +0.0008rangeHead:bossYuanCheng +0.0005(❌),bossJinZhan +0.0005(❌)完全不同的头!
H3 操作perfectDash +0.07相同无差异
H4 空战airAttack +0.0003,jumpPern −0.0005相同无差异
H5 环境areaPern +0.004相同无差异
H6 状态buffPern +0.004相同无差异
关键差异:zhuzhan 版的 H2 头用距离控制(远程/近战奖惩)替代了 mnwj 版的技能管理(滥用惩罚 + 流派保持),但这两项都被设为 use: false(禁用)。同时 models/fight_zhuzhan/ 目录存在 tcnn.structtcnn.weights 模型文件,但未在 multiActorConfig.yaml 中激活

四套奖励配置总览

配置文件头数定位激活状态
config_battle.json3标准战斗(通用)Actor 0 (ngr_pvp)
config_battle_mnwj.json7角色专属(mnwj)Actor 2 (ngr_pvp_mnwj)
config_battle_zhuzhan.json7角色专属(zhuzhan)未激活(模型存在)
config_battle2.json3防御/站位导向未激活

附录 I:数据可视化系统

common/datavis.json 中提取(当前 disabled: false,已启用)。

数据通道可视化类型说明
height_mapheatmap高度图热力图
depth_mapheatmap深度图热力图
raycastraycast射线可视化
featuremultilines特征向量多线图
actionmultilines动作分布多线图
rewardmultilines奖励信号多线图
valuemultilines价值函数多线图

可视化服务端口::8080

附录 J:分析方法与数据来源

本报告为 静态配置逆向分析——未运行任何训练/推理代码,未反编译任何二进制,未抓取游戏运行时数据。所有结论均从 AILab/pve/ 目录下的配置文件、模型元数据以及 NGR/Content/Paks/ QTSF 包的明文片段中推导而来。

J.0 分析步骤

  1. 配置提取 — 逐文件解析 YAML/JSON/XML,抽取全部字段及其取值,形成原始事实集合
  2. 交叉引用对齐 — 将 feature_config.xml 的特征名与 reward/*.json 的引用字段、action/config.json 的输出维度进行关联;将 multiActorConfig.yaml 的 actor 名称与 map_confs/*.yaml 对齐
  3. 语义反推 — 从奖励函数的正负号与权重推断 AI 被鼓励/惩罚的具体行为;从特征选择反推引擎暴露给 AI 的状态信号
  4. 规模核算 — 对动作空间(10×11×10×15×15×5 = 124 万)、特征维度、并发 Bot 数等关键指标做算术核验
  5. Pak 资源二进制扫描 — 由于 Boss 名称等元数据不在 AI 配置中,针对 NGR/Content/Paks/ 下的 QTSF 二进制包(.db 分片)编写 Python 脚本做字符串扫描(详见 J.0.1)
  6. 证据分级 — 对任何无法从上述文件直接读出的结论,标注 推断推测
  7. 玩法映射 — 将奖励信号反向投影到玩家视角,得到「AI 被奖励 = 官方认可的最优行为」的实战指南

J.0.1 Pak 资源二进制扫描细节

背景: AI 训练配置(map_confs/*.yaml)只引用了数字 Boss ID 201101,不包含人类可读名称。Boss 名称、模型资产、关卡数据均打包进 UE4 的 QTSF 虚拟文件系统(NGR/Content/Paks/),不是标准 UE4 .pak 格式,无法用 UnrealPak/FModel 直接提取。

扫描方法:

  • 编写一次性 Python 脚本,对 NGR/Content/Paks/*/ 下约 169 个子目录中的所有 .db 分片做字节级字符串搜索(ASCII + UTF-16LE)
  • 搜索关键字:201101(Boss ID 的 ASCII 与 int32 形式)、monsterbossdt_datatable
  • Paks/main/Globalindex/GlobalIndexOverride.dataPaks/Watchdog/StorageStatus.db 做同样扫描
  • 所有一次性脚本在完成扫描后删除,未留存在工作目录中

扫描局限:

  • QTSF 包内数据部分为压缩/加密格式,字节级搜索只能命中明文片段,真实的资源清单、蓝图、行为树均无法读取
  • 未反编译 .uasset / 未解包 QTSF 压缩段,Boss 的技能脚本、行为树仍然不可见
  • 扫描结果仅用于交叉验证 AI 配置中的 ID 映射,不用于分析 Boss 实际逻辑

J.0.2 证据分级规则

标记含义示例
无标记配置文件中直接可见的事实动作头维度 = 6,并发 Bot = 360,模型同步间隔 = 30 秒
推断基于多项配置证据的合理推断TCNN 是时序卷积网络(仅凭 backend: "tcnn" 字面)
推测缺乏直接证据的猜测,列出以供参考Boss 由行为树驱动;Go 源码目录结构

J.0.3 分析局限性

  • 无源码 — 未查阅 Go 推理服务、Python 训练器、UE4 引擎的任何源代码,代码层面的结论均为推测
  • 无运行时数据 — 未实际启动服务、未抓包、未观察训练过程或推理输出
  • 模型权重未解析tcnn.weights 未做反序列化,网络结构与层数从 tcnn.struct 元数据和训练配置推断
  • Boss 行为不在范围 — Boss 技能脚本、AI 逻辑由 RL 系统之外的模块控制,本报告不涉及
  • 客户端逻辑不在范围 — UE4 客户端的表现层、特效、伤害计算等不在分析目标内
  • 版本差异未验证 — 本目录配置与线上生产环境的差异(若有)未做比对

以下 J.1–J.5 列出本报告全部一手证据文件。AI 配置路径相对于 AILab/pve/,游戏资源路径相对于 NGR(2001829)/

J.1 AI 训练与部署配置

类别文件用途
服务部署configs/globalConfig.yaml全局服务参数(端口 / 并发 / 内存上限 / 同步间隔)
服务部署configs/multiActorConfig.yaml多 Actor 实例配置(3 套:ngr_pvp / ngr_pvp_nav / ngr_pvp_mnwj
服务部署configs/privateConfig.yaml私有部署参数(含 model_version: "20250807"ds_version: "CL6040877"
地图/场景configs/map_confs/ngr_pvp.yaml 等 3 个副本与 Boss 参数
动作空间configs/action/config.json6 维 multi-discrete 动作头定义
动作空间configs/action/general_action_config.json通用动作语义
特征空间configs/feature_extractor/config.json特征管线入口
特征空间configs/feature_extractor/feature_config.xml战斗特征定义(~1200 维)
特征空间configs/feature_extractor/nav_feature_config.xml导航特征定义
特征空间configs/feature_extractor/feature/{game,nav,player,unit}/分组特征模板
特征空间configs/feature_extractor/feature/transfer.py特征变换脚本
奖励函数configs/reward/config_battle.json主战斗奖励(3 头)
奖励函数configs/reward/config_battle_mnwj.jsonmnwj 版奖励(7 头,实际激活)
奖励函数configs/reward/config_battle_zhuzhan.jsonzhuzhan 版奖励(7 头,未激活)
奖励函数configs/reward/config_battle2.json第二套奖励(见附录 H)
难度系统configs/difficulty_confs/config.json10 档难度曲线
数据可视化configs/common/datavis.json运维可视化面板配置

J.2 模型文件

文件大小用途
models/fight_zhuzhan/tcnn.struct19 KB网络结构元信息
models/fight_zhuzhan/tcnn.weights5.15 MB权重(未解析,仅用于佐证模型规模)
models/nav/导航子模型

J.3 游戏资源(Pak 二进制扫描)

文件用途
NGR/Config/Level/LevelStreamingConfig.json关卡流配置,含 Boss 副本关卡名 NGR_EastWorld / 别名 bigworld_redboss / 地图 ID 10001 / 障碍物图 nishiki
NGR/Content/Paks/qtsvfspackage.txtQTSF 虚拟文件系统包清单(165 个包,515 行)
NGR/Content/Paks/*/约 169 个 QTSF 包目录下的 .db 二进制分片
NGR/Content/Paks/main/Globalindex/GlobalIndexOverride.data资源索引覆盖文件
NGR/Content/Paks/Watchdog/StorageStatus.db存储状态数据库(扫描目标之一)

J.4 扫描产出(从 Pak 二进制中提取的关键字符串)

来源偏移提取内容
Paks/1020/1020_0.db @ offset 57103760ZhuoRong_201101 — Boss 内部代号
Paks/1/1_0.db, 1/1_1.db, 1018/1018_2.db, 1020/1020_2.db, 1023/1023_0.db, 1043/1043_2.db, 1052/1052_0.db, 1054/1054_2.db, 1054/1054_3.db, 1160/1160_1.db, 1160/1160_3.db, 1164/1164_6.db201101 字节序列的其他引用(索引/引用)
LevelStreamingConfig.json:32NGR_EastWorld / bigworld_redboss / 10001 / nishiki

J.5 未使用的来源

以下文件位于相关目录但未纳入本次分析

  • configs/multiActorConfig.yaml.bak — 旧版备份
  • NGR/Content/Gamelet/ — Gamelet 子包
  • 所有 .uasset / .umap 二进制(需专用 UE4 工具解包)

声明:本文档通过逆向分析部署配置文件和资源包二进制数据生成,不包含实际源代码。所有架构推断基于 configs/ 目录下的 YAML / JSON / XML 配置文件和 models/ 目录下的模型权重文件结构。Boss 名称"灼绒"从 QTSF 资源包(1020/1020_0.db)中二进制逆向提取,对应资源引用 ZhuoRong_201101 / BP_NPC_DFY_10100000023

游戏:王者荣耀世界(WeGame #2001829) · 模型版本 20250807 · DS 版本 CL6040877