python-sc2 数据管道揭秘:如何从 data.json 自动生成上万 ID 常量与单位属性字典

发布时间:2026/8/22 15:11:46

python-sc2 数据管道揭秘:如何从 data.json 自动生成上万 ID 常量与单位属性字典
python-sc2 数据管道揭秘如何从 data.json 自动生成上万 ID 常量与单位属性字典【免费下载链接】python-sc2A StarCraft II bot api client library for Python 3项目地址: https://gitcode.com/gh_mirrors/pyt/python-sc2python-sc2 是面向 StarCraft II星际争霸 II的 Python 3 Bot 开发库让数十行代码就能写出一个完整的机器人。它内置了一套巧妙的数据管道只需一份游戏提供的stableid.json和一份社区维护的data/data.json科技树文件就能自动生成上万个 ID 常量枚举如UnitTypeId、AbilityId和 8 个单位属性字典如TRAIN_INFO把游戏原始数据直接变成 Bot 开发者友好的 Python API 为什么要自动生成手写常量有多痛星际争霸 2 的世界由大量数字 ID 构成每个单位有唯一 ID如UnitTypeId.MARINE 65每个技能Ability、升级Upgrade、光环Buff、特效Effect也都有 ID游戏每次版本更新ID 都可能变化如果手写这些常量维护成本极高且极易出错。python-sc2 的解法是把 ID 数据源交给生成脚本代码永远保持DO NOT EDIT状态每次游戏更新只需重新跑一遍生成器即可。整条管道分为两条支线数据源生成脚本生成产物游戏安装目录的stableid.jsonsc2/generate_ids.pysc2/ids/下 5 个 ID 枚举文件社区科技树data/data.jsongenerate_dicts_from_data_json.pysc2/dicts/下 8 个属性字典文件支线一从 stableid.json 生成 ID 枚举游戏安装后会在用户目录下如 Windows 的Documents/StarCraft II/stableid.json留下一个stableid.json里面按Units / Abilities / Upgrades / Buffs / Effects五类列出了所有实体的名字与 ID。核心生成逻辑在 sc2/generate_ids.py 的IdGenerator类中解析parse_data()把原始 JSON 解析为五组名称 → ID字典。其中 Ability 的命名最复杂——优先取friendlyname其次buttonname拼上所属单位名例如GATEWAY_TRAIN_ZEALOT还额外注入了一个SMART 1通用指令。命名规范化make_key()把名称转成大写下划线格式处理数字开头加前缀_、5.0 版本后出现的符号等问题重名键会自动追加_2、_3后缀避免冲突。输出 Python 代码generate_python_code()按 ID 升序写出sc2/ids/下的unit_typeid.py、ability_id.py、upgrade_id.py、buff_id.py、effect_id.py每个文件都是一个enum.Enum子类并追加了一个__repr__方法让调试输出显示为UnitTypeId.MARINE这样的友好形式。当前版本生成的规模见sc2/ids/目录unit_typeid.py约 2000 行ability_id.py约 1400 行upgrade_id.py/buff_id.py各约 320 行合计数千个枚举成员每个成员还通过globals()注入模块顶层支持UnitTypeId.MARINE和裸名两种访问方式。一个很贴心的细节生成的BuffId和AbilityId都覆写了_missing_()方法遇到游戏中出现的新 ID 时返回NULL兜底避免 Bot 因未知 ID 直接崩溃️版本变了怎么办自动热更新sc2/ids/id_version.py里保存着生成时的游戏版本号当前为4.11.4.78285。Bot 启动时bot_ai.py会对比实际游戏版本若不一致就自动调用update_ids_from_stableid_json()重新读取stableid.json并重写全部 ID 文件随后用reimport_ids()热加载新模块——整个过程对开发者完全透明。支线二从 data.json 生成单位属性字典ID 只解决了叫什么写 Bot 还需要回答谁能造谁、谁研究什么升级、需要什么前置建筑。这些关系数据来自社区维护的科技树项目落盘为仓库中的data/data.json约 283 KB包含683 个 Ability、204 个 Unit、124 个 Upgrade条目。生成脚本 generate_dicts_from_data_json.py 对它做四轮遍历训练/建造关系扫描所有 Ability识别Train、Build、Morph、Research等目标类型判断哪些技能产出单位、是否需要在地图上下点如造兵营再反向关联到拥有该技能的单位产出TRAIN_INFO单位 → 可生产单位 → 所需科技/建筑/电力。升级研究关系把每个 Research 能力与对应 Upgrade 绑定再归属到能研究它的建筑上如武器二级需要军械库前置产出RESEARCH_INFO。反向索引由前两张表翻转生成UNIT_TRAINED_FROM某单位能从哪些建筑产出和UPGRADE_RESEARCHED_FROM某升级由哪个建筑研究。别名与重定向这一步会加载一份pickled 的游戏运行时数据test/pickle_data/DeathAuraLE.xz从中读取原生的unit_alias/tech_alias生成UNIT_UNIT_ALIAS、UNIT_TECH_ALIAS另外根据remaps_to_ability_id生成GENERIC_REDIRECT_ABILITIES用于把具体技能重定向到通用指令。最终 8 个字典文件全部写入sc2/dicts/目录TRAIN_INFO # 单位训练/建造信息 RESEARCH_INFO # 升级研究信息 UNIT_TRAINED_FROM # 单位产出来源 UPGRADE_RESEARCHED_FROM # 升级研究建筑 UNIT_ABILITIES # 单位拥有的技能集合 UNIT_UNIT_ALIAS # 单位别名映射 UNIT_TECH_ALIAS # 技术别名映射 GENERIC_REDIRECT_ABILITIES # 技能重定向输出稳定性的关键设计生成脚本用了一个精巧的技巧自定义了OrderedDict2/OrderedSet2的repr()始终按枚举名排序输出。这意味着只要科技树数据没变生成文件的字节内容就完全一致——代码库里不会产生无意义的 diffGit 提交历史保持干净。每个生成文件头部都写着THIS FILE WAS AUTOMATICALLY GENERATED ... DO NOT CHANGE MANUALLY!从源头上杜绝手工修改。这些生成物在 Bot 里如何被使用sc2/bot_ai.py直接导入这些字典支撑起高层 API。例如can_train()方法内部查询UNIT_TRAINED_FROM找到能生产该单位的建筑再查TRAIN_INFO判断是否需要实验室或下点位置can_research()则查RESEARCH_INFO获取前置建筑要求。开发者因此只需写await self.can_train(UnitTypeId.MARINE)而无需关心任何 ID 映射细节 ✨总结一条教科书级的数据管道设计回顾 python-sc2 的数据管道有三个值得借鉴的设计点数据与代码分离游戏数据放 JSON生成物进版本库脚本负责两者之间的单向流动。幂等与确定性排序输出保证重复生成零 diff版本校验保证只在需要时重新生成。防御性兜底_missing_方法让未知 ID 不致崩溃自动版本同步让库自愈。如果你想亲手跑一遍只需安装游戏后执行两个入口脚本python sc2/generate_ids.py和python generate_dicts_from_data_json.py即可看到数千个 ID 常量与完整科技树字典在几秒内长出来 更多细节可参考源码sc2/generate_ids.py、generate_dicts_from_data_json.py、sc2/dicts/init.py、data/data.json【免费下载链接】python-sc2A StarCraft II bot api client library for Python 3项目地址: https://gitcode.com/gh_mirrors/pyt/python-sc2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

formik-antd性能优化秘诀:何时该用fast属性开启FastField加速

formik-antd性能优化秘诀:何时该用fast属性开启FastField加速

2026/8/22 15:11:46

formik-antd性能优化秘诀:何时该用fast属性开启FastField加速 【免费下载链接】formik-antd Simple declarative bindings for Ant Design and Formik. 项目地址: https://gitcode.com/gh_mirrors/fo/formik-antd 如果你在用 formik-antd 为 Ant Design 表单…

图像处理、识别与检测:从像素操作到深度学习的技术演进与实战指南

图像处理、识别与检测:从像素操作到深度学习的技术演进与实战指南

2026/8/22 15:11:46

1. 从像素到智能:图像技术的演进脉络与核心分野 当你拿起手机拍照、用软件美化图片,或者看到自动驾驶汽车识别路标时,你已经在与图像技术打交道了。这背后是一套庞大而精密的技术体系,从最基础的像素操作,到让机器“看…

5 分钟快速上手 D-Zone:从零部署 Discord 活动模拟器的新手入门教程

5 分钟快速上手 D-Zone:从零部署 Discord 活动模拟器的新手入门教程

2026/8/22 15:01:46

5 分钟快速上手 D-Zone:从零部署 Discord 活动模拟器的新手入门教程 【免费下载链接】d-zone An ambient life simulation driven by user activity within a Discord server 项目地址: https://gitcode.com/gh_mirrors/dz/d-zone D-Zone 是一个由 Discord 服…

如何用 vue-circle-progress 绘制带动画的圆形进度条

如何用 vue-circle-progress 绘制带动画的圆形进度条

2026/8/22 20:52:02

如何用 vue-circle-progress 绘制带动画的圆形进度条 【免费下载链接】vue-circle-progress A Vue.js component to draw animated circular progress bars 项目地址: https://gitcode.com/gh_mirrors/vu/vue-circle-progress 做仪表盘、展示上传进度时,你需…

学术翻译实战:从术语查证到逻辑重构的高质量技术文档本地化

学术翻译实战:从术语查证到逻辑重构的高质量技术文档本地化

2026/8/22 20:52:02

1. 项目概述:一次深度翻译实践的价值与挑战最近在整理过往的竞赛资料时,翻到了2020年美国大学生数学建模竞赛(MCM/ICM)E题的翻译稿。这不仅仅是一份简单的语言转换记录,它背后涉及的是如何跨越语言和文化的鸿沟&#x…

Django协同过滤推荐系统实战:招聘平台优化案例

Django协同过滤推荐系统实战:招聘平台优化案例

2026/8/22 20:52:02

1. 项目概述:当Django遇上协同过滤最近在帮某招聘平台做技术升级时,我实现了一套基于用户行为的智能推荐系统。核心思路是用Django搭建Web平台,通过爬虫获取招聘数据,再使用协同过滤算法实现个性化推荐。这个方案上线后&#xff0…

PCL参数化模型投影滤波:从点云中精准提取几何结构

PCL参数化模型投影滤波:从点云中精准提取几何结构

2026/8/22 20:52:02

1. 项目概述:从点云“毛坯房”到“精装模型”在三维视觉和机器人感知领域,我们通过激光雷达或深度相机获取的点云数据,常常被戏称为三维世界的“毛坯房”。它包含了目标物体最原始、最丰富的几何信息,但也充斥着大量的“建筑垃圾”…

基于ReAct框架与LLM的智能数据查询Agent设计与实践

基于ReAct框架与LLM的智能数据查询Agent设计与实践

2026/8/22 20:52:01

1. 项目缘起:当数据查询遇上即时通讯最近在做一个内部数据中台项目时,遇到了一个挺典型的痛点:业务部门的同事,尤其是非技术背景的运营、产品同学,经常需要查询一些业务数据。他们要么得在复杂的BI系统里自己拖拽报表&…

AI多智能体协同设计:PPA感知的RTL代码生成系统实践

AI多智能体协同设计:PPA感知的RTL代码生成系统实践

2026/8/22 20:42:01

1. 项目概述:当AI智能体开始“写”芯片最近在芯片设计圈子里,一个话题的热度正在悄然攀升:用AI来生成RTL(寄存器传输级)代码。这听起来像是天方夜谭,毕竟RTL设计是芯片的“骨架”,关乎性能、功耗…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/21 21:41:19

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/22 11:09:22

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/22 11:09:22

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

多尺度智能体控制:从宏观密度场到微观决策的架构与实践

多尺度智能体控制:从宏观密度场到微观决策的架构与实践

2026/8/22 0:00:52

1. 从宏观到微观:多尺度智能体控制的核心挑战在智能体(Agent)技术日益普及的今天,我们面临着一个越来越普遍的难题:如何同时管理成千上万个,甚至百万级别的智能体?无论是城市交通中的自动驾驶车…

CUBE标准:统一AI智能体评测的度量衡与架构解析

CUBE标准:统一AI智能体评测的度量衡与架构解析

2026/8/22 0:00:52

1. 项目概述:为什么我们需要一个统一的智能体评测标准?最近在折腾各种AI智能体项目,从简单的自动化脚本到复杂的多模态交互系统,我发现了一个让人头疼的共性问题:评测。每次开发完一个智能体,想看看它到底行…

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

2026/8/22 0:00:52

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…