CS:GO 玩法总览(cstrike15)
CS:GO 的玩法代码分布在三个目录:game/shared/cstrike15(双端共享的规则、移动、武器)、game/server/cstrike15(服务端权威:玩家、Bot、人质、地图实体)、game/client/cstrike15(客户端表现:HUD、菜单、特效)。本页给出它们的类图与阅读入口。
子页面:
1. 目录规模#
| 目录 | 跟踪文件 | 主要子目录 |
|---|---|---|
game/shared/cstrike15 | 131 | 根目录 116、bot 15 |
game/server/cstrike15 | 110 | 根目录 64、bot 40、Effects 4、hostage 2 |
game/client/cstrike15 | 300 | gameui 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_target | CBombTarget | game/server/cstrike15/func_bomb_target.cpp:14 |
func_buyzone | CBuyZone | game/server/cstrike15/func_buy_zone.cpp:43 |
func_hostage_rescue | CHostageRescueZone | game/server/cstrike15/func_hostage_rescue.cpp:11 |
func_no_defuse | CNoDefuseArea | game/server/cstrike15/func_no_defuse.cpp:11 |
hostage_entity / info_hostage_spawn | CHostage | game/server/cstrike15/hostage/cs_simple_hostage.cpp:106-107 |
inferno | CInferno(燃烧弹火焰) | game/server/cstrike15/Effects/inferno.cpp:42 |
chicken | CChicken | game/server/cstrike15/Effects/chicken.cpp:27 |
cs_bot | CCSBot | game/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. 一回合中各模块的协作#
- 规则对象在每个
GameFrame的Think中推进热身、冻结时间、回合计时与比赛阶段(规则与回合)。 - 冻结时间内玩家在购买区购买武器(玩家)。
- 玩家命令驱动移动与武器(移动、武器与射击),伤害与死亡触发
CheckWinConditions。 - C4、人质、全灭或超时决定回合胜负,
TerminateRound记录结果并设定重启时间;时间到后RestartRound清理地图、发放金钱、重生玩家。 - Bot 管理器在每帧末尾驱动 Bot 生成命令(Bot)。
- 客户端通过网络变量与用户消息更新 HUD(HUD)。
约束与边界#
cs_gamerules.cpp超过 1.8 万行、cs_player.cpp超过 1.6 万行;本节各子页面只追踪主路径,未覆盖所有模式特例(训练、合作任务、守护者等)。game/client/cstrike15/gameui的 143 个文件(主菜单等 Scaleform 界面)只在 HUD 中概述。