手机通讯与社交
返回总览。手机是世界内的交互入口,同时也是任务与内容调度渠道。电话、短信、邮件、朋友活动和在线工作邀请由不同层合作,不能只看手机画面脚本。
1. 三层架构#
comms_controller 决定何时适合发通信,dialogue_handler 构造并播放对话,cellphone_controller 管理拿出/收起、画面和相机等设备状态。appContacts、appTextMessage、appEmail、appInternet、在线 job list 等应用负责具体页面行为。[S1][S2][S3]
2. 通信本身就是内容调度#
comms_controller 分别处理发给玩家和玩家拨出的排队电话、已发送短信/邮件的清理、通信相关特殊代码、任务触发来电保护、通话结束及短信响应。还有 Pause_Timers,说明通信延迟不能一律理解为不受游戏状态影响的墙上时间。[S1]
高优先级电话会阻止单机随机事件启动,任务引导也会与通信竞争玩家注意力。因此通信系统承担一部分体验节奏控制:避免两个事件同时要求玩家听不同对白或接受不同任务。
“已登记”“已送达”“已读/已接听”“已触发后续”是不同状态。任务作者不能在登记短信的同一帧假定玩家已经看见内容。
3. dialogue_handler 把对话与设备动作连接起来#
它包含通话前状态、接听等待、分段会话构建、手机对话、面对面对话和在线工作邀请对话。[S2] 相同文本/语音资源可以通过不同播放上下文使用,但手机动画、说话者/听者、字幕和玩家接受/拒绝行为仍需独立维护。
角色在车内、第一人称、正在拍照或处于电影镜头时,手机表现会变化。cellphone_controller 单独处理高/低质量照片、快门延迟、拍照后的状态、手机/相机/网页每帧禁止项和 cinematic camera。[S3] 这解释了手机为何是常驻控制器,而不是打开一个 Scaleform 窗口即可完成。
4. 朋友与邮件建立跨任务反馈#
friends_controller 维护朋友连接状态,组织呼叫结果、是否答录、是否前来找玩家等流程;friendActivity 再承接具体活动。[S4] 玩家关系由长期数据描述,当前陪同行为由实体和活动脚本执行。
邮件数据不是全部手工硬编码:EmailStar 的 DataSetIO.cs 导出 email_generated_globals.sch 和 email_generated_functions.sch,并写出文本资源。[S5] 这把内容编辑、稳定 ID 和脚本调用分开,能让任务通过枚举/接口登记邮件,而不在每个任务内复制整个邮箱 UI。
随机自行车事件的特定完成分支会登记延后奖励邮件,体现“短活动 → 延迟通信 → 后续回报”的内容连锁。通信队列是这种连锁的可靠连接点,但仍需处理任务重玩和重复完成时的去重语义。
5. 网页与在线服务不是通用浏览器#
appInternet.sc 使用游戏网页 ID、Scaleform 返回值、具体购买/失败页面及等级、会话、任务、座位、资金等购买条件。[S6] 它主要是游戏内网站与业务前端,不能理解成现代浏览器直接访问任意 HTML。
appSecuroServ、产业应用与在线手机任务列表承接工作选择、购买和任务请求,但权威的任务启动、经济交易和保存由对应公共模块负责。UI 上点击购买与服务确认完成之间存在异步过程,见经济交易。
6. 扩展要点#
新增联系人或活动通知,应同时定义通信优先级、可发送条件、存储状态、过期/取消、接听/拒绝后果和重复触发保护。不要让局部任务直接抢占手机、音频和字幕而绕过仲裁,否则它会与切换、过场和在线邀请竞争同一资源。
源码证据#
[S1] comms_controller.sc L103、L200、L266、L1115、L1132、L1190。 [S2] dialogue_handler.sc L3481、L3870、L5730、L6160、L6362、L7930。 [S3] cellphone_controller.sc L783–1003、L4195、L4911–5054。 [S4] friends_controller.sc L272、L466。 [S5] DataSetIO.cs L182–226。 [S6] appInternet.sc L525、L5308、L9455、L28119–28200。
[S1]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/commscontrol/comms_controller.sc> [S2]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/cellphone/dialogue_handler.sc> [S3]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/cellphone/cellphone_controller.sc> [S4]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/friends/friends_controller.sc> [S5]: <../../../GTAV Source/script/dev_ng/Tools/EmailStar/EmailStar/DataSetIO.cs> [S6]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/web/appInternet.sc>