世界规则、通缉、犯罪与环境状态
范围:game/,以及 control/ 的 game logic、restart、人口和区域规则。总入口:Summary。
1. 规则层与内容层#
这里的 game/ 是原生游戏目录下的一个子目录,聚合时钟、天气、风、区域、犯罪、证人、通缉与调度等规则。它提供持久运行的世界机制;具体任务条件、活动流程和叙事则大量位于外部 SanScript 内容。
规则层既消费事件,也产生环境和 AI 约束。天气为视觉和物理提供参数,区域影响人口与活动,犯罪改变通缉状态,dispatch 请求资源并组织响应单位。因此它不是仅供 UI 显示的一组全局数值。
2. 犯罪、证人、通缉与调度分工#
这是职责连接图,不表示每条犯罪都必须经过证人阶段。源码支持不同 report method 和立即登记接口,部分调用可以改变正常报告路径。
CCrime::ReportCrime 接受 crime type、victim、committer 和时间。实现检查报告模式、多人重生相关限制、wanted multiplier、当帧犯罪抑制与最大通缉等级等条件。世界里发生了破坏行为,并不意味着无条件提高通缉等级。
CWanted 负责登记犯罪、调整等级、更新搜索与逃脱状态,并维护警察 blip。RegisterCrime 与 RegisterCrime_Immediately 是不同接口;queued crime 保存位置、类型、证人与 victim 身份。victim ID 的注释明确说明可能已删除、不可安全解引用,体现“身份用于去重/追踪”与“可访问的活实体指针”必须区分。
3. 数据兼容与状态覆盖#
Crime.h 的枚举注释要求同步修改 Crime.cpp 字符串表和 crimeinformation.meta;警察 scanner 与 crime information hash 表也要求与枚举一致。添加犯罪类型需要同时修改数据和音频/信息映射,不能只加一个 enum 值。
CWanted::Overrides 提供多人隐藏逃脱时间、难度等覆盖。SetWantedLevel 还记录设置来源以及网络玩家相关参数。这说明调试和分析时应区分自然犯罪累积、脚本强制修改、难度覆盖和网络影响,否则同样星级下不同追捕表现可能被错误解释为随机故障。
通缉的核心并非只有星级:玩家位置、车辆是否已被识别、警察是否搜索以及重新聚焦搜索等信息参与更新。隐藏/失去视线和降低等级属于不同状态变化。
4. Dispatch 是响应资源的协调层#
CDispatchManager 持有按 DispatchType 索引的服务,提供 Update、服务访问、network reservations 与 streaming request 释放控制。服务类型包含警用车辆等,具体服务负责响应事件和组织单位。
设计上,Wanted 决定威胁/追捕状态,Dispatch 将它转为可执行的响应,角色和车辆 AI 执行任务。分层允许根据资源、人口和网络预约限制控制增援,而不是在通缉更新函数里立即创建任意数量单位。
ms_fUpdateTimeStep 保存自上次更新以来的时间,说明 dispatch 也需要正确处理非逐帧更新语义。释放资源请求的标志用于刷新车辆集合,进一步显示响应单位选择与 streaming 耦合。
5. 时钟、天气与视觉参数#
Clock 管理世界时间;weather 描述天气类型、周期、过渡、湿度及 override。CWeather 提供 ForceWeatherTypeOverTime、UpdateOverTimeTransition、UpdateVisualDataSettings,并有网络初始化/过渡和 SetFromReplay 接口。
天气是具有历史和过渡状态的过程:前后天气类型、插值、随机值、云、wetness 以及剩余过渡时间可能同时存在。简单写入一个“当前天气枚举”不足以恢复完全相同画面;回放接口携带多项状态就是直接证据。
天气的世界语义与 VFX/TimeCycle 的视觉求值分离。雨天可以影响湿度和效果选择,TimeCycle 还要结合时刻、区域和修饰器形成最终参数。网络天气也有自己的过渡路径,不能把所有客户端本地随机更新当作独立世界状态。
6. 区域、人口与控制辅助#
MapZones、zones、PopMultiplierAreas 描述区域与人口修饰;GameSituation 汇总世界情境,BackgroundScripts 连接环境脚本。control/ 的 restart、gamelogic、stuntjump、garages 等则跨越重生、玩法辅助与车辆状态。
这些系统的共同特点是给基础实体添加上下文约束。例如相同地点在不同时间、天气、任务和区域覆盖下,可以选择不同人口或活动。设计取舍是规则可复用,但最终决策分散在多个管理器和脚本中,调查问题需收集完整上下文。
cheat、riots 和 debug 配置属于规则覆盖入口;是否在某个平台或发行配置生效需检查宏与调用点。目录存在不等于用户正常流程一定会执行。
7. 维护与验证方向#
新增规则应明确:数据源与枚举映射、是否允许脚本覆盖、是否需要联网、是否需要存档/回放、暂停时是否推进。优先检查犯罪发生后受害者被删除、证人状态变化、通缉切换与重生、天气强制过渡与回放恢复等边界。
本报告没有执行游戏,未确认任何规则缺陷;上述内容是基于接口和调用条件的设计分析。
8. 源码依据#
| 源码 | 重点 |
|---|---|
| Crime.h | crime 枚举同步要求、报告接口 |
| Crime.cpp | ReportCrime 的过滤和报告模式 |
| Wanted.h | 队列犯罪、引用语义、Overrides |
| Wanted.cpp | Update、搜索、登记与等级设置 |
| DispatchManager.h | 服务、网络预约与资源释放 |
| weather.h | 天气周期、过渡、网络和回放 |