CD Code Digest Hub /CS:GO

CS:GO 玩法总览(cstrike15)

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

CS:GO 的玩法代码分布在三个目录:game/shared/cstrike15(双端共享的规则、移动、武器)、game/server/cstrike15(服务端权威:玩家、Bot、人质、地图实体)、game/client/cstrike15(客户端表现:HUD、菜单、特效)。本页给出它们的类图与阅读入口。

子页面:

相关页面:游戏 DLL 契约 · 匹配与 GC

1. 目录规模#

目录跟踪文件主要子目录
game/shared/cstrike15131根目录 116、bot 15
game/server/cstrike15110根目录 64、bot 40、Effects 4、hostage 2
game/client/cstrike15300gameui 143、Scaleform 84、根目录 58、buy_presets 6、Effects 4、VGUI 3

(本次 git ls-files 统计,见 审计。)

2. 核心类与职责#

证据:

  • 规则对象由 InstallGameRules 以类名 "CCSGameRules" 创建:game/server/cstrike15/cs_client.cpp:207-210、game/shared/cstrike15/cs_gamerules.cpp:591;规则数据通过代理实体 cs_gamerules(CCSGameRulesProxy)的数据表 DT_CSGameRules 网络化:game/shared/cstrike15/cs_gamerules.cpp:593-640、game/shared/cstrike15/cs_gamerules.cpp:779-780。
  • 玩家:player → CCSPlayer,客户端 C_CSPlayer 通过 DT_CSPlayer 配对:game/server/cstrike15/cs_player.cpp:410、game/client/cstrike15/c_cs_player.cpp:1480。
  • 移动:CCSGameMovement::ProcessMovement:game/shared/cstrike15/cs_gamemovement.cpp:421-429。
  • 武器:CWeaponCSBaseGun::PrimaryAttack、CBaseCSGrenade、CC4:game/shared/cstrike15/weapon_csbasegun.cpp:305、game/shared/cstrike15/weapon_basecsgrenade.cpp:196、game/shared/cstrike15/weapon_c4.cpp:1535、game/shared/cstrike15/weapon_c4.cpp:351。
  • Bot:class CCSBot : public CBot< CCSPlayer >,CBot<T> 继承自模板参数:game/server/cstrike15/bot/cs_bot.h:462、game/shared/cstrike15/bot/bot.h:138-139。

3. CS:GO 专有的地图实体(节选)#

类名实现证据
func_bomb_targetCBombTargetgame/server/cstrike15/func_bomb_target.cpp:14
func_buyzoneCBuyZonegame/server/cstrike15/func_buy_zone.cpp:43
func_hostage_rescueCHostageRescueZonegame/server/cstrike15/func_hostage_rescue.cpp:11
func_no_defuseCNoDefuseAreagame/server/cstrike15/func_no_defuse.cpp:11
hostage_entity / info_hostage_spawnCHostagegame/server/cstrike15/hostage/cs_simple_hostage.cpp:106-107
infernoCInferno(燃烧弹火焰)game/server/cstrike15/Effects/inferno.cpp:42
chickenCChickengame/server/cstrike15/Effects/chicken.cpp:27
cs_botCCSBotgame/server/cstrike15/bot/cs_bot.cpp:21
item_kevlar / item_assaultsuit / item_defuser护甲与拆弹器game/server/cstrike15/item_kevlar.cpp:65、game/server/cstrike15/item_assaultsuit.cpp:63、game/server/cstrike15/item_defuser.cpp:29

4. 一回合中各模块的协作#

  1. 规则对象在每个 GameFrame 的 Think 中推进热身、冻结时间、回合计时与比赛阶段(规则与回合)。
  2. 冻结时间内玩家在购买区购买武器(玩家)。
  3. 玩家命令驱动移动与武器(移动、武器与射击),伤害与死亡触发 CheckWinConditions。
  4. C4、人质、全灭或超时决定回合胜负,TerminateRound 记录结果并设定重启时间;时间到后 RestartRound 清理地图、发放金钱、重生玩家。
  5. Bot 管理器在每帧末尾驱动 Bot 生成命令(Bot)。
  6. 客户端通过网络变量与用户消息更新 HUD(HUD)。

约束与边界#

  • cs_gamerules.cpp 超过 1.8 万行、cs_player.cpp 超过 1.6 万行;本节各子页面只追踪主路径,未覆盖所有模式特例(训练、合作任务、守护者等)。
  • game/client/cstrike15/gameui 的 143 个文件(主菜单等 Scaleform 界面)只在 HUD 中概述。