Автоматическая загрузка и установка hero grid'ов из Dota2ProTracker прямо в Steam.
Скрипт работает автономно — не требует Minify или других фреймворков. Просто Python + requests.
- Python 3.8 или новее
- Windows (Steam должен быть установлен в стандартном пути или указан вручную)
- Аккаунт Steam с Dota 2
git clone https://github.com/ТВОЙ_НИК/d2pt-grid.git
cd d2pt-gridpip install -r requirements.txtЕсли
requestsуже установлен — этот шаг можно пропустить.
Скопируй пример конфига:
copy config.example.json config.jsonОткрой config.json и замени "steam_id": "123456789" на свой настоящий Steam ID.
💡 Где взять Steam ID? Открой Steam → свой профиль → скопируй число из URL (
steamcommunity.com/profiles/XXXXXXXXX) или используй сайт steamid.io.
python script.pyПри первом запуске скрипт:
- Скачает актуальные гриды с Dota2ProTracker
- Сделает бэкап текущего
hero_grid_config.json - Установит новые гриды в папку Steam
Все настройки задаются в файле config.json (создаётся из config.example.json).
| Параметр | Тип | Описание |
|---|---|---|
steam_id |
string |
Твой Steam ID. Если пусто — скрипт применит гриды ко всем аккаунтам на ПК. |
grid_sources |
list |
Источники данных: "matches_wr" (винрейт по матчам), "d2ptrating" (рейтинг D2PT). |
patch |
string |
Патч Dota 2. "latest" — актуальный. |
max_per_role |
int / null |
Максимум героев в одной роли (например, 7). null — без ограничений. |
all_heroes_width |
int / null |
Ширина блока «All Heroes». null — по умолчанию. |
role_width |
int |
Ширина колонки роли (Carry, Mid и т.д.). |
all_heroes_height |
int |
Высота блока «All Heroes». |
all_heroes_x |
int |
Позиция X блока «All Heroes». |
synergy_col_width |
int |
Ширина колонки синергии/контрпика. |
synergy_gap |
int |
Отступ между колонками синергии. |
synergy_start_x |
int |
Начальная позиция X для синергий. |
max_screen_width |
int |
Максимальная ширина экрана для авто-подстройки. |
backup_limit |
int |
Сколько бэкапов хранить (старые удаляются автоматически). |
cache_ttl_hours |
int |
Время жизни кэша в часах. |
dry_run |
bool |
true — тестовый запуск без записи в Steam. Полезно для проверки. |
install_configs |
list |
Какие гриды ставить: ["All Roles", "Carry", "Mid", "Offlane", "Support", "Hard Support"]. |
short_labels |
dict |
Короткие метки источников (отображаются в названии грида). |
combined_label |
string |
Метка для объединённого грида (когда несколько источников). |
{
"steam_id": "123456789",
"grid_sources": ["matches_wr", "d2ptrating"],
"patch": "latest",
"max_per_role": 7,
"all_heroes_width": 760,
"role_width": 500,
"all_heroes_height": 450,
"all_heroes_x": 520,
"synergy_col_width": 220,
"synergy_gap": 10,
"synergy_start_x": 75,
"max_screen_width": 1080,
"backup_limit": 10,
"cache_ttl_hours": 1,
"dry_run": false,
"install_configs": ["All Roles", "Carry", "Mid", "Offlane", "Support", "Hard Support"],
"short_labels": {
"matches_wr": "WR",
"d2ptrating": "RT"
},
"combined_label": "CMB"
}- Файл
config.jsonдобавлен в.gitignore— он никогда не попадёт в репозиторий и на GitHub. - В репозитории лежит только
config.example.jsonс фейковымsteam_id. - Никогда не коммить
config.jsonс реальнымsteam_id. - Если хочешь максимальную безопасность — убери
steam_idизconfig.jsonи передай через переменную окружения:$env:D2PT_STEAM_ID="123456789" python script.py
d2pt-grid/
├── script.py # Основной скрипт
├── config.example.json # Пример конфигурации (без реальных данных)
├── config.json # Твой личный конфиг (игнорируется git'ом)
├── requirements.txt # Зависимости Python
├── .gitignore # Что не пушить на GitHub
├── README.md # Этот файл
├── cache_*.json # Кэш ответов API (создаётся автоматически)
└── backup/ # Бэкапы hero_grid_config.json (создаётся автоматически)
- Загрузка — скрипт параллельно скачивает гриды с Dota2ProTracker по выбранным источникам.
- Кэширование — ответы API сохраняются локально на 1 час (настраивается), чтобы не дудосить сервер.
- Объединение — если выбрано несколько источников, скрипт объединяет их в один "combined" грид.
- Фильтрация — оставляет только те гриды, которые указаны в
install_configs. - Разметка — подгоняет ширину/высоту/координаты под твой экран.
- Бэкап — копирует текущий
hero_grid_config.jsonв папкуbackup/. - Установка — записывает новые гриды в
Steam/userdata/<id>/570/remote/cfg/hero_grid_config.json.
| Проблема | Решение |
|---|---|
No accounts found in ...\userdata |
Проверь путь к Steam. Если Steam установлен не в C:\Program Files (x86)\Steam, укажи правильный путь в config.json (или через STEAM_ROOT в коде). |
Failed 'matches_wr' |
Проверь интернет-соединение. Сайт Dota2ProTracker может быть недоступен. Попробуй увеличить cache_ttl_hours и подождать. |
| Гриды не появились в Dota | Перезапусти Dota 2. Убедись, что steam_id указан верно. |
| Старые гриды пропали | Нет, они не пропали — скрипт делает бэкап в папку backup/. Если что-то пошло не так — скопируй бэкап обратно. |
MIT — делай что хочешь, но автор не несёт ответственности за бан аккаунта или сломанные гриды. Всё используешь на свой страх и риск.
- Добавить GUI (tkinter или PyQt)
- Поддержку Linux/Proton (Steam на Linux хранит cfg по другому пути)
- Автозапуск по расписанию (Windows Task Scheduler)
- Интеграцию с другими источниками (Dotabuff, OpenDota)
Автор: zebr3nt