CD Code Digest Hub /GTA V

剧情任务与抢劫编排

7 分钟阅读 7 个章节 1 张图

返回总览。本篇选取 Franklin1.sc 和 jewelry_heist.sc 做深入案例;它们分别展示大型手工关卡和人员/方案影响玩法的抢劫任务。文件内部编号不应直接当成玩家看到的任务顺序或名称。

1. 任务是多个协作状态机#

Franklin1.sc 定义任务阶段、失败原因、中途检查点、角色状态、战斗事件,并建立 PED、ENEMY、VEH、TRAIN、OBJECT、COVERPOINT、DEFENSIVEAREA、SPAWNPOINT 等结构。[S1] 其核心并不是一个状态枚举包办一切,而是主阶段控制关卡节奏、局部状态控制各演员和机关。

例如该脚本有开场、开车前往交易、交易过场、Grove Street 战斗、奔向水上载具、追逐、甩掉警察、送回角色等阶段函数。演员在同一个阶段内又各自推进动作和对白。所谓“并行演出”主要是多组局部进度每帧协作,不必为每个演员启动一个脚本线程。

2. 实体结构把内容参数与运行句柄放在一起管理#

创建助手如 HAS_MISSION_PED_BEEN_CREATED、HAS_MISSION_VEHICLE_BEEN_CREATED 与 CREATE_ENEMY_PED,把模型、位置、关系组、属性设置等集中起来。每个波次和角色不必重复完整 Native 初始化代码。[S1]

需要同时区分三类字段:静态配置(位置、模型、角色身份)、运行状态(句柄、局部阶段、计时器)、任务结果(已死亡、已通过、检查点标记)。即使实际结构没有物理拆成三张表,阅读时这样划分可以迅速判断哪些数据需在重试时重建、哪些需保留。

3. 填充战斗内容的技巧#

Franklin1 的波次函数与 SPAWNPOINT_STRUCT 展示一种有节奏的战斗导演法:按玩家进度、上一波状态、仍存活敌人数等条件增援,配合预设掩体、防御区域、车辆入口和撤离路线。源码存在 MANAGE_6TH_ENEMY_WAVE(...iAliveEnemiesCountToTriggerWave),说明“多久刷一批”只是可选控制维度,战场压力也可由剩余人数控制。[S1]

这种方法把确定性放在空间和戏剧节点上,把具体交火交给原生 AI:脚本决定敌人在哪里出现、何时转入战斗、何时允许推进;AI 负责移动、掩体、瞄准、事件反应。它不是把全部交火轨迹预录下来。

追逐段又可混用载具录制路径和自主 AI。预录确保镜头节奏与关键交会点可重复,自主任务负责玩家偏离设计路线后的反应。不同任务采用不同组合,不能从一个案例推断所有追逐完全脚本化。

4. 检查点必须恢复“前提”,不只恢复阶段编号#

任务入口检查 IS_REPLAY_IN_PROGRESS,读取中途阶段,恢复失败时的武器信息;如果接受跳过,还计算下一阶段。普通开始与 repeat play 另有分支。[S1,L27618 起]

这意味着检查点包含一套重建协议:正确演员、玩家角色、车辆、武器、场景资源和局部进度应与阶段匹配。只改 eMissionStage 会留下不存在的前置实体,或者重复执行本来只应发生一次的奖励/对白。

任务入口通过 force-cleanup 返回点应对死亡等情况,调用 Mission_Flow_Mission_Force_Cleanup 和 MISSION_CLEANUP。正常成功通过 MISSION_FLOW_MISSION_PASSED 回报。任务局部结果与整个故事进度之间仍有明确的公共接口。

5. 抢劫把长期选择映射为可感知差异#

Flow_Heist_Data_GTA5.sch 管理方案、规划地点、成员基础模型和初始技能数据;实际任务读取这些选择,而不是现场凭空决定队员能力。[S2]

jewelry_heist.sc 的 SETUP_CREW_CHOICE_CONSEQUENCES 是特别直接的例子:[S3,L7940]

输入选择源码中的变化设计目的
黑客技能选择行动时间上限,低技能分支为 55000 毫秒规划阶段选择影响现场压力
破柜成员技能收益倍率 1.0 / 0.9 / 0.8能力影响实际收获
方案路径决定取哪一成员槽位的技能同一人员数据适配不同任务分工
枪手技能设置 bWorstGunDies 等后果标志用后续演出和风险体现选择

这些数值只描述本地文件中的具体分支,不代表所有抢劫或所有发行版本的通用数值。

任务还分离抢劫总阶段、商店经理状态、珠宝柜与赃物结构、群众控制和警察 set-piece。抢劫并非单纯“杀光敌人”:时间压力、可破坏目标、路人反应、队员动作、逃亡流程共同形成可重复的关卡。

6. 手工编排的价值与代价#

手工任务能够精准安排地点、台词、角色切换、车辆相遇和失败反馈;代价是大量局部状态与异常分支。Franklin1 和珠宝店抢劫分别有约 2.8 万和 2.6 万物理行,这里仅用来说明内容体量,不等同于有效逻辑量或质量评分。

可借鉴的内容制作方法是:先建立阶段骨架和清理,再填角色、波次、对白与镜头;每加一种变体,补齐首次进入、重试进入和强制退出三条路径。把不可中断演出压缩到必要范围,其余时间允许 NPC 原生行为处理玩家干扰。

源码证据#

编号重点位置
[S1]Franklin1.sc L96–377 数据类型;L2102 创建助手;L19052 起波次;L27618 入口;L27892 成功回报
[S2]Flow_Heist_Data_GTA5.sch L23、L88、L115、L145、L170
[S3]jewelry_heist.sc L237 阶段;L416 目标结构;L7940 队员后果;L8871 检查点映射

[S1]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/missions/Franklin/Franklin1.sc> [S2]: <../../../GTAV Source/script/dev_ng/singleplayer/include/private/Mission_Flow/Flow_Heist_Data_GTA5.sch> [S3]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/heists/heistJewelry/jewelry_heist.sc>