“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
Valve 开源《团队要塞2》完整SDK:一个经典游戏的代码遗产与社区重生
Valve 将《团队要塞2》完整客户端与服务器代码以SDK形式开源,为模组社区和游戏历史研究提供了珍贵的技术遗产。
事件背景
2025年4月,Valve 在 GitHub 上向 source-sdk-2013 仓库推送了一个重大提交(0759e2e),将《团队要塞2》(Team Fortress 2, TF2)的完整客户端和服务端源代码加入其中。这次提交在 Hacker News 上引发了热烈讨论,获得了 1863 分和 387 条评论。这是继 2024 年《半条命2》开源之后,Valve 对经典作品源代码开放的又一重要举措。
代码内容概览
提交引入了以下关键目录和文件:
src/:完整的游戏源代码,分为game/client、game/server和game/shared三大模块。src/game/client/:客户端逻辑,包括渲染、HUD、输入处理、粒子效果、音效合成等。src/game/server/:服务端逻辑,包括实体系统、武器平衡、玩家库存、匹配系统等。src/game/shared/:共享代码,如游戏规则、武器参数、共享数据表等。src/public/:引擎与游戏共用的头文件,定义了实体 handle、API 接口等。src/engine/audio/public/:音频引擎接口。src/devtools/:Valve 内部使用的 Perl/Python 脚本和构建辅助工具,如vpc.exe(版本化项目配置工具)、shadercompile2.exe等。mod_tf/:游戏模式的资源目录,包含玩家图标、本地化字符串(如mod_tf_english.txt)、UI 布局文件(.res)、游戏内提示和武器脚本。src/thirdpartylegalnotices.txt:第三方库致谢。
需要澄清的是,这次开源并非直接发布《团队要塞2》的原始仓库,而是提供了一套“干净的”SDK,供模组制作者基于 2013 年的 Source 引擎分支(即 Source 2013)进行二次开发。SDK 中包含了 TF2 专有的游戏代码,但引擎核心(如 src/public/)与 Source 2013 SDK 的其他部分共享。
技术亮点与内容深入
1. 实体与网络系统
TF2 的代码遵循 Source 引擎的实体-组件模型。每一个游戏对象(如玩家、武器、投掷物)都是一个 CBaseEntity 派生类,并通过 DATADESC 或 NETWORK_TABLE 声明可复制的属性和可序列化的字段。例如,client_tf 下的 c_tf_player.cpp 定义了 C_TFPlayer 类,它管理玩家状态、装备、动画和输入。server_tf 下的 tf_player.cpp 则实现服务端逻辑,包括玩家生命值、护甲、职业能力和语音聊天。
代码中还包含大量 C_TFWeaponBase 的派生类,每个武器都实现了自己的攻击逻辑。例如,weapon_rocketlauncher.txt(在 scripts/ 中)定义了火箭发射器的伤害、弹速和爆炸半径,而 weapon_flamethrower 的代码则处理火焰粒子和余烬效果。
2. 客户端-服务端架构
客户端代码(c_ 前缀类)和服务端代码(无前缀)严格分离,通过消息系统和 SendProp 进行交互。c_tf_player.cpp 中的 C_TFPlayer 和服务端的 CTFPlayer 通过 RecvTable 同步状态。例如,服务端计算玩家生命值变化,并将其复制到所有客户端,客户端仅做插值渲染。
clientmode_shared.cpp 实现了共享的客户端模式逻辑,处理视图模型、HUD 和菜单。而 hud_pdump.cpp 中的管道调试器允许开发者实时查看数据通道的值——这对于模组开发调试非常重要。
3. 经济与库存系统
TF2 的一个特色是饰品和交易系统。代码中包含 econ 模块(econ/),处理物品定义、合成、交易和市场。econ_item_schema.cpp 加载物品定义(items_game.txt,并未包含在 SDK 中,但可通过社区提取),而 backpack_panel.cpp 提供了玩家背包 UI。econ_trading.cpp 实现了玩家间交易;tool_items/ 内实现了喷漆、名称标签等工具。
由于 TF2 的物品服务已经集成 Steam 后端,SDK 中的经济代码是完整的客户端-服务端实现,但需要 Steamworks API 才能运行。模组创作者可以借鉴这套设计,为自己的游戏实现类似的经济系统。
4. AI 与机器人
src/game/shared/NextBot 目录包含了 NextBot 框架,这是 TF2 机器人 AI 的基础。NextBot 是一种行为树驱动的实体 AI 系统,支持路径搜索、感知(视觉和听觉)、策略决策和反应式行为。TFBot 类(在 server_tf 中)利用这个框架实现了机器人玩家的行为,包括近战、远程攻击和占领控制点。
5. 资源文件和脚本
mod_tf/resource/ 下是 Valve 标准的文本资源,如 game.ico 和 mod_tf_english.txt。game.ico 是 Windows 游戏图标,而 mod_tf_english.txt 包含所有 UI 字符串的英文翻译,注释中给出了 UTF-8 编码提示。scripts/ 目录下有大量 .txt 文件,它们定义了游戏武器参数、音效事件和弹药类型。例如,weapon_357.txt 控制左轮手枪的属性,weapon_ar2.txt 控制脉冲步枪,这些脚本可以直接修改以调整平衡。
6. 构建系统
Valve 使用 VPC(Visual Project Configuration)系统生成 Visual Studio 和 Makefile 项目。SDK 的 src/ 根目录下包含 createallprojects.bat(Windows)和 creategameprojects.bat,它们调用 vpc.exe 根据 .vpc 文件生成项目文件。开发者可以编辑 .vpc 文件添加新源文件或模块。
devtools/ 包含 vpc 的 Linux 和 macOS 版本,以及一系列 Perl 脚本用于处理着色器、粒子定义和构建步骤。注意,开源 SDK 少了很多资产(如模型、纹理),因此你需要从原版 TF2 或社区获取这些资源才能编译运行一个完整的游戏。
开源的意义与技术启示
历史档案:TF2 代码是 Source 引擎 2013 分支的一个成熟样例。它展示了如何在一个多人射击游戏中整合复杂的经济系统、动态粒子特效和 AI 驱动。对于游戏开发学习者,阅读这些代码可以深入理解实体网络同步、服务器权威性和客户预测等概念。
社区工具:模组制作者现在可以在 TF2 的框架基础上构建新玩法,而无需从零开始。例如,他们可以修改武器脚本,创建新职业,甚至设计新的游戏模式,因为地图逻辑和资源管理代码已经就绪。
学习价值:VTune 的反射系统、动态属性系统、以及复杂的 UI 脚本框架(.res + 面板)都是专业级工程代码。其中尤其值得学习的是
Random.cpp/h、cvarslider.cpp等实用工具的实现,以及如何将 C++ 对象暴露给脚本系统(vscript_utils.h)。许可与限制:这次开源遵循 Source 1 SDK 许可协议,允许商业用途但禁止在无 Valve 许可下使用 TF2 的商标和内容。这是 Valve 继《泰坦陨落》和《半条命》之后,支持社区创作惯用做法。
深入探讨关键文件
src/game/client/tf/c_te_effect_dispatch.cpp:处理客户端效果消息(如爆炸和火花),它通过IEffectData接口与粒子系统交互,展示了如何通过引擎的DispatchEffect机制解耦视觉反馈。src/game/shared/econ/tool_items/paint_can_tool.cpp:实现涂装工具,可以改变物品外观。代码中包含了颜色选择逻辑和设备存储,展示了如何创建一个可复用工具并集成到物品经济中。src/game/client/hud_vote.cpp:处理投票 UI,包括发起投票和显示结果。这展示了如何将系统消息广播到所有客户端并保持 UI 响应。src/game/server/tf/ai/tf_bot.cpp:TF2 机器人的主要 AI,涉及 NextBot 的路径规划、战斗策略和团队意识。代码注释中甚至包含了职业选择的启发式规则,是 AI 入门的好例。
结语
Valve 这次开源不是简单地把代码扔到 GitHub 上,而是精心整理了一个可构建的 SDK。对于游戏技术爱好者,这是一个极佳的“活代码”资源,你可以在其中看到 Source 引擎的成熟实践:如何设计模块化架构、如何优化网络同步,以及如何处理游戏经济。更社区性的意义在于,它让 TF2 的 mod 生态有望迎来新的爆发,因为开发者不再受限于模糊的逆向后工程。
当然,我们也应谨慎:SDK 包含 2013 年的代码库,与现代 Source 2 或 Unity/Unreal 的结构不同,但它仍然为学习资源提供了坚固的基础。无论你是想玩 mod,还是研读代码,这次开源都值得关注。