🐹 Steam Guides
May 19, 2025

Тихая охота за кейсами TF2: как зарабатывать на кейсах, пока Valve делает вид, что игра жива

For #FixTF2 moral guardians:
This article focuses on "silent" TF2 crate farms, where bots humbly sit in the main menu without ever touching actual game servers. Item farming and other methods are not discussed here. Valve may frown upon this practice, but technically... it works.

НАВИГАЦИЯ

  1. Вступление
  2. Практическая часть: методы фарма
  3. Дополнительная информация
  4. Важные нюансы и ресурсы
  5. Заключение

Вступление

Создание ферм в TF2 сродни искусству — тонкая настройка ботов, баланс рисков и прибыли, эстетика автоматизации. Можно бесконечно восхищаться изяществом этих схем, но стоит помнить: шедевры здесь живут ровно до тех пор, пока какой-нибудь сотрудник Valve не решит устроить санитарный день в цифровом зоопарке, и тогда ваша трёхлетняя ферма, выдержанная как дорогое вино, в одно мгновение превратится в лужу банов — благодаря паре тысяч подписей «борцов за справедливость» движения #FixTF2. Ведь свято место пусто не бывает... особенно в банлисте.


В этой статье пойдет речь исключительно о фермах кейсов TF2, которые не вредят игровому комьюнити TF2, тк ни один бот не подключается к игровым серверам. В этой статье не будет линков и информации о полноценной фармилке предметов, исключительно фарм кейсов!

Кто такие эти ваши фермы TF2?

Фермы TF2 существуют с момента появления в игре первых скинов. Valve регулярно проводила зачистки ботов, но с каждой волной их становилось только больше. Вспомните золотую эру форума mipped, где народ массово обсуждал фарм через SIDI — а потом дружно плакал, когда все аккаунты летели в бан, а фарм пофикисили.

Сейчас ситуация парадоксальна: стоит лишь заикнуться о фермах TF2 в приличном обществе — как сразу появляется местная "крыша" с криками "тише, не пали контору!". А Valve, похоже, окончательно махнула на TF2 рукой, и фермеры почувствовали себя хозяевами положения: боты оккупировали сервера, превратив игру в полигон для испытания человеческого терпения.

Пиком стал бунт комьюнити под лозунгом #FixTF2 — тысячи подписей, петиции, требования. Valve слегка шевельнулась, забанила самых наглых... а остальные просто переехали на комьюнити-сервера и множатся, как грибы после дождя.

источник: https://x.com/Thewhat89/status/1832533634068213999

Фермы кейсов: цифровая копейка рубль бережет

Получить кейс в TF2 проще простого: 5-10 минут в главном меню — и дроп твой. Никаких серверов, никакого мощного железа — только онлайн или его имитация в игре id 440 и терпеливое ожидание. Правда, есть нюанс: чтобы передать или продать кейс, нужен премиум-статус, который вы получаете после любой покупки в игре. Но кто мешает сначала накопить кейсы, а потом уже "фиксировать прибыль"?

пример пустышки без према TF2

Сколько же приносят такие фермы? Возьмем мой скромный эксперимент: аккаунт, заходивший в игру 3 раза в неделю в течение 3 лет. Итог: 130 кейсов общей стоимостью ~0.75$. Смешно? Но теперь представим масштаб:

  • 100 000 аккаунтов = 75 000$ или 40 000$ с учетом затрат
  • Затраты:
    • Аккаунты
    • Дешевый дедик (3$/месяц)
    • 5-10 прокси на ротацию (10-15$)
    • Покупка Tour of Duty Ticket для получения према (потеря около 0.35$/аккаунт)
⚠️ Внимание: Все расчёты условные и приведены для иллюстрации масштаба, а не как гарантированный доход. Реальные цифры зависят от множества факторов: банов, лимитов, багов, изменений от Valve и т.д.

Особенности и проблемы фарма TF2

  1. Нестабильность серверов
    Сервера TF2 работают по принципу "когда повезет" — регулярные лаги, отвалы подключения, для автоматизированного фарма это постоянная головная боль
  2. Непредсказуемый дроп
    Базовый сценарий: 1 кейс в неделю гарантированно
    Оптимистичный сценарий: +1-2 дополнительных кейса
    На практике разброс от 1 до 3 кейсов на аккаунт еженедельно
  3. Кошмар с трейдами, в отличие от CS2/Dota2:
    • трейды очень долго принимаются,
    • регулярная отмена трейдов, что усложняет лут аккаунтов,
    • во время выхода нового кейса сервера умирают, падают и инвентари, и трейды
  4. Ограниченный инвентарь • Базовый лимит 50 слотов без према
    • 300 слотов с премом
    • Максимум 4000 слотов (с покупкой расширителей)
    При 100+ кейсах лут аккаунтов растянется на несколько недель
  5. Критические периоды торговли при выходе новых кейсов:
    • Цена падает со 100 до 1 рубля за 4-6 часов
    • Выставление лотов занимает 5-10 минут каждый
    • Загрузка инвентаря перестает работать
    • Ближайшие часов 5 трейды лежат и надо ловить окно, когда они заработают

Выводы:

  • Требуются дополнительные вложения в расширители инвентаря
  • Необходимо учитывать задержки, отмены трейдов и лаги инвентаря


Преимущества фарма кейсов в TF2

  1. Золотой час после выхода кейса
    При своевременном заходе в первые часы после релиза нового кейса можно сорвать хороший куш. Даже при нестабильной работе серверов в этот период, те, кто успевает выставить кейсы на продажу в первые 3–4 часа, получают максимальную прибыль.
  2. Стабильный доход с сезонных кейсов
    Летние и хэллоуинские кейсы, несмотря на низкую цену (1–2 рубля), при масштабировании на сотни аккаунтов обеспечивают ощутимый доход. Их главное преимущество — предсказуемые даты выхода и стабильный спрос на рынке.
  3. Новогодний бонус
    Зимний подарочный кейс — особый случай. Он:
    • Доступен только премиум-аккаунтам
    • Требует просто входа в игру до Нового Года
    • Стабильно держит цену выше 5 рублей
    • Является своеобразной "традиционным новогодним подарком" для фермеров

Как фармить TF2 — полный гайд

Я прекрасно понимаю, что в фермерском сообществе полно скамеров, и как анонимному автору мне никто не доверяет. Поэтому я разделил материал на две части: для тех, кто хочет готовое решение - по ссылке [перейти] есть полностью открытый софт с детальным руководством и доступом в чат, где можете задавать вопросы автору. Все остальное ниже - чистая техническая информация о двух реально работающих методах фарма кейсов в TF2.

Поэтому, если вам нужно просто готовое решение — переходите по ссылке [перейти], а если хотите всё настроить и понять сами — ниже подробный гайд.
Если вы обычный фермер без навыков программирования — не переживайте. Этот гайд написан специально для вас. Мы будем использовать ChatGPT (обязательно платную версию, так как бесплатная всегда обрезает код).

Термины, которые нужно знать перед началом:

  • appId — уникальный идентификатор игры в Steam. Например, 440 — это Team Fortress 2, 730 — CS:GO, 570 — Dota 2. Используется для запуска игры, подключения к Game Coordinator и отправки сообщений.
  • DefIndex — внутренний идентификатор типа предмета в игре. Например, у всех Mann Co. кейсов один def_index, у ключей — другой. Используется для определения, что именно выпало (ящик, шляпа, хлам и т. д.).
  • itemId — уникальный идентификатор конкретного предмета в вашем инвентаре. Даже два одинаковых кейса будут иметь разные itemId. Применяется при обмене, продаже, крафте предметов и т. д.
  • GC (Game Coordinator) — серверный компонент Steam, через который игра обменивается данными с клиентом (подключаемся к нему для фарма).
  • .proto / protobuf — формат описания и сериализации бинарных сообщений. Используется Steam и играми для общения между клиентом и сервером. .proto-файлы описывают структуру этих сообщений.
  • protobufjs — JavaScript-библиотека, позволяющая работать с .proto-файлами и сериализованными сообщениями в Node.js. Используется для общения с GC и декодирования ответов.
  • Библиотеки DoctorMcKay — это набор удобных инструментов для Node.js, которые позволяют работать со Steam. С их помощью можно входить в аккаунт, запускать игры, обмениваться предметами, использовать торговую площадку и общаться с игровыми серверами (GC). Эти библиотеки часто используют для создания Steam-ботов и автоматизации действий в Steam:
    steam-user - позволяет взаимодействовать с сетью Steam на уровне клиента: вход в аккаунт, управление друзьями, запуск игр и многое другое.
    steam-totp - генерация кодов двухфакторной аутентификации (TOTP) для Steam. И другие...

База для работы:

  • Node.js (придется смириться, если не нравится)
  • Аккаунты в формате login:password + maFile
    • Из maFile нам нужен только shared_secret для генерации 2FA кодов авторизации

Мы будем использовать Библиотеки DoctorMcKay для работы со Steam (ChatGPT отлично с ними знаком).
Если у вас возникнут вопросы по установке Node.js или запуску скриптов — обращайтесь к ChatGPT. Он легко поможет с этими задачами.

Существует два основных способа фарма кейсов TF2:

  1. Через эмуляцию MacOS: Если вы "запустите" TF2 (appId 440) с флагами MacOS-системы, вам будут падать кейсы. Фишка в том, что официального клиента TF2 для Mac не существует, поэтому сервер не может полноценно проверить валидность подключения. Это можно проверить, например, через ASF (Archi Steam Farm) или его модификации, запустив их на компьютере с MacOS.
    ⚠️ В данном методе недостаточно указать только clientOS: -77 — также требуется эмуляция machineId в формате macOS.
  2. Через работу с .proto-сообщениями (или "протобафы"). Это нативное общение между клиентом и GC (Game Coordinator) в TF2. Ваш скрипт имитирует официальный клиент: обменивается бинарными сообщениями в том же формате, что и настоящая игра.
    Этот способ сложнее, но тот, кто овладеет этой техникой, сможет зарабатывать целые состояния во время крупных обновлений в CS2. Пора начинать учиться!

Подготовка

1. Установите Node.js, если он ещё не установлен. Проверьте, что в терминале работают команды:

node --version
npm --version

2. Создайте папку под проект (если ещё не создали) и перейдите в неё в терминале:

cd путь/к/папке где будут наши скрипты

3. Инициализируйте проект и установите зависимости:

npm init -y
npm install steam-user steam-totp protobufjs google-protobuf

Эмуляция Mac OS: пошаговая реализация

шаг 1.1 - Создаем базовый скрипт для авторизации в Steam

Отправляем в ChatGPT следующий запрос:

"Напиши Node.js скрипт для входа в Steam аккаунт используя, login и password, с автоматическим вводом 2FA кода из shared_secret.
Используй библиотеки DoctorMcKay.
После успешного входа выведи SteamID аккаунта в лог консоли."

Получаем готовый код [script 1.1 в боте] [кликабельная ссылка на пример],
который

  • Использует библиотеки steam-user и steam-totp от DoctorMcKay
  • Принимает логин и пароль для входа
  • Автоматически генерирует 2FA код из shared_secret
  • Выводит SteamID после успешной авторизации
Небольшое пояснения для новичков: библиотеки steam-user и steam-totp (те самые, от DoctorMcKay) в начале скрипта — это основа для работы со Steam API. Если скрипт не запускается или выдает ошибки — просто скопируйте текст ошибки из консоли и спросите ChatGPT. Он подскажет, как исправить проблему.

шаг 1.2 - Добавляем запуск TF2 (appId 440) и проверяем игровой статус:

Дорабатываем скрипт, запросив у ChatGPT:

"Дополни предыдущий скрипт для запуска TF2 (AppID 440) после авторизации с видимым статусом в Steam"

Получаем код [script 1.2 в боте] [кликабельная ссылка на пример],
теперь скрипт:

  • Автоматически запускает TF2 после успешного входа
  • Отображает статус "В игре" (Play TF2) в профиле Steam

шаг 1.3 - Добавляем MacOS-эмуляцию и автоотключение

Дорабатываем скрипт запросом:

"Модифицируй скрипт для эмуляции MacOS при подключении к Steam:
1. Установи clientOS: -77
2. Добавь machineName: 'MacBook-Pro-M1'
3. Реализуй генерацию machineId в Mac-стиле
и добавь автоотключение от Game Coordinator через 10 минут"

Финальная версия [script 1.3 в боте] [кликабельная ссылка на пример]:

  • Подключается как Mac-клиент (clientOS: -77)
  • Через 10 минут отключается от GC

В Steam API используются специальные числовые значения для идентификации операционной системы. В библиотеке steam-user значение -77 означает macOS. При указании clientOS: -77, библиотека автоматически преобразует его во внутренний формат, ожидаемый Steam-сервером — таким образом Steam будет "видеть" клиента как macOS. Однако одного clientOS: -77 может быть недостаточно — для полной эмуляции следует также задать Machine ID в стиле macOS.

Проверяем результат: после выполнения проверяем инвентарь на наличие новых кейсов.

Если вам не выпал кейс, попробуйте повторно запустить скрипт или использовать другой аккаунт. У данного метода фарма есть свои особенности: кейс может выпасть только по завершении работы скрипта, а также не выпасть, если вы сначала запускали скрипт без эмуляции macOS, а затем — с ней.

Ты только что собрал рабочий Steam-скрипт с нуля — не нашел кривой исходник и не купил кривой кликер у школьника на BAS. Так держать! Теперь включаем хард мод и переходим ко второму методу:

Протобафы (.proto)

Мы уже знаем, что .proto-сообщение (протобаф) это сообщение, которое шлет клиент серверу и сервер клиенту, но как он выглядит? Для этого надо воспользоваться NetHook2 из библиотеки SteamKit чтобы разобрать его, это требует отдельно гайда, поэтому я просто скажу, что сейчас важно понять базовый принцип: есть сообщение "Hello" (клиент -> сервер) и ответное "Welcome" (сервер -> клиент), эти сообщения прописаны в файле base_gcmessages.proto и выглядят так:

k_EMsgGCClientHello = 4006; // Клиент -> Сервер
k_EMsgGCClientWelcome = 4004; // Сервер -> Клиент
message CMsgClientHello {
	optional uint32 version = 1;
}
message CMsgClientWelcome {
	optional uint32 version = 1;
	optional bytes game_data = 2;
	optional string txn_country_code = 3;
}

где 4006 и 4004 — это ID сообщений, а message — их содержимое (optional значит можно не заполнять)


Сырые .proto-сообщения нельзя просто взять и отправить — их нужно адаптировать для Node.js. Самый простой способ разобраться с этим — спросить у ChatGPT, как правильно скомпилировать proto-файлы под Node.js. Но для упрощения я уже дам готовое решение:

Подготовка: работа с протобафами в Node.js

1. Скачиваем протобафы архивом с GitHub или командой:
git clone https://github.com/SteamDatabase/Protobufs.git
Берём все .proto-файлы (протобафы) — лишними они точно не будут, а без каких-нибудь из них шарманка может и не завестись.
2. В скачанной папке Protobufs нас интересует только подпапка tf2 с сырыми .proto-файлами
3. В папке нашего проекта выполняем команды и закидываем .proto-файлы:
npm init -y
npm install --save-dev protobufjs protobufjs-cli google-protobuf
Все файлы из папки tf2 переместите в папку проекта/proto
4. Сортируем файлы по такой структуре:

папка вашего проекта
├── proto/                         # Все .proto-файлы из папка tf2 сюда
│   └── base_gcmessages.proto
├── gen_proto.js                   # Скрипт генерации .pb.js файлов
├── package.json                   # появился после команды npm init -y
└── node_modules/                  # папка с модулями protobufjs и другими

5. Компилируем протобафы с помощью скрипта gen_proto.js (ссылка на скрипт) :
запускаем командой node gen_proto.js

На выходе получаем готовые _pb.js-файлы в той же папке.

Если не хочется тратить время на настройку или возникли сложности — в моем боте (@SteamFX_bot) в разделе SOFT -> Tool 1 -> примеры из статьи уже есть готовые, скомпилированные файлы.

Делаем отправку .proto-файлов (протобафов)

шаг 2.1 - Дополняем наш проект готовым скриптом:

папка вашего проекта
├── proto/                         # Все .proto-файлы из папка tf2 сюда
│   └── base_gcmessages_pb.js <- обрати внимание на изменение 
├── gen_proto.js                   # Скрипт генерации .pb.js файлов
├── скрипт.js                  <-   # наш готовый скрипт (пример 1, шаг 2)
├── package.json                   # появился после команды npm init -y
└── node_modules/                  # папка с модулями protobufjs и другими

Берем за основу скрипт который у нас уже есть (пример 1, шаг 2), который:

  • Авторизуется в Steam
  • Запускает TF2 (AppID 440)
  • Подключается к Game Coordinator

Но просто подключения недостаточно. Чтобы получить кейс нужно выполнить два условия:

  1. Установить соединение с GC с эмуляцией macOS (clientOS: -77)
  2. Отправить хотя бы одно валидное .proto-сообщение

Что делаем:
Дорабатываем скрипт, чтобы он отправлял базовое .proto-сообщение CMsgClientHello (ID 4006) и ждал ответ CMsgClientWelcome (ID 4004).

Просим chatGPT сделать это:

У меня есть скрипт на node-steam, который логинится в Steam, запускает Team Fortress 2 (appid 440), и я хочу отправить protobuf-сообщение игровому координатору (GC):

[наш текущий скрипт]

Использую protobufjs, уже скомпилировал base_gcmessages.proto, путь к файлу: ./proto/base_gcmessages_pb.js.

Мне нужно, чтобы скрипт:
1. Логинился в Steam с эмуляцией macOS (clientOS: -77);
2. После запуска TF2 (с небольшой задержкой 3 секунды) отправил GC сообщение CMsgClientHello с version = 1 (msgType 4006):
(msgType 4006):
message CMsgClientHello {
optional uint32 version = 1;
}

3. Обработал ответ CMsgClientWelcome (msgType 4004):
message CMsgClientWelcome {
optional uint32 version = 1;
optional bytes game_data = 2;
optional string txn_country_code = 3;
}
4. Вывел его содержимое в консоль.
5. Выводил в консоль любые другие сообщения от GC (appid 440), показывая msgType и HEX-содержимое.
6. Используй client.sendToGC и client.on('receivedFromGC').

Стартовую часть скрипта с авторизацией через SteamUser у меня уже есть. Просто дополни её нужной логикой общения с GC.

Получаем код [script 2.1 в боте] [кликабельная ссылка на пример],
теперь скрипт:

  • отправляет протобаф Hello (4006) и получает ответ Welcome (4004)
  • показывает номера и HEX других протобафов, которые пришли от GC
  • Показывает ESOMsg_Create (21), когда падает предмет — это сигнал, что дроп получен.

⚠️ Важно:

  • Сообщение ESOMsg_Create (21) приходит не сразу — обычно спустя 5–10 минут, как и дроп в первом примере.
  • Если вам не выпал кейс, возможно, аккаунт был "зашкварен" из-за использования предыдущих версий скрипта. В таких случаях после запуска на Windows дроп может не выпадать. Если вы тестируете финальную версию — рекомендуется использовать чистый (новый или ранее не использовавшийся) аккаунт.
  • Параметр clientOS: -77 обязателен при запуске на Windows. Без него кейсы могут не выпадать. На macOS он не нужен. Поведение на Linux не проверялось.
  • Также важно делать паузу между подключением к GC и отправкой CMsgClientHello. Если соединение с GC не установлено корректно, дроп не выпадет, даже если вы получили CMsgClientWelcome. В моем примере задержка составляет 3 секунды.

Разбираем дроп от GC: ESOMsg_Create (21)

Отлично, скрипт отправляет Hello (4006) и получает Welcome (4004), после CMsgServerHello Game Coordinator шлёт и другие протобафы с данными о профиле, рейтингах, состоянии серверов и т.п. Главный, который нам нужен:
ESOMsg_Create (21) — Это сообщение о полученном дропе от сервера
EMsg = 21 → ESOMsg_Create → message CMsgSOSingleObject

  • EMsg = 21 — уникальный числовой код для сообщения ESOMsg_Create.
  • ESOMsg_Create — название типа сообщения, которое сигнализирует о создании (появлении) нового объекта / предмета / кейса.
  • message CMsgSOSingleObject — конкретное тело сообщения, содержащее данные об объекте / предмете / кейсе.

оно может содержать как кейс, так и мусорную шмотку типо шумелки / перделки / тарахтелки и прочего мусора.
в gcsdk_gcmessages.proto содержится нужный нам:

message CMsgSOSingleObject {
	optional fixed64 owner = 1;              // SteamID владельца предмета
	optional int32 type_id = 2;              // Тип объекта (например, 1 = CSOEconItem)
	optional bytes object_data = 3;          // Сырые данные объекта (байты), декодируем через .proto
	optional fixed64 version = 4;            // Версия объекта (для отслеживания изменений)
	optional .CMsgSOIDOwner owner_soid = 5;  // Альтернативный ID владельца (для внутренней логики)
	optional uint32 service_id = 6;          // ID сервиса, которому принадлежит объект (например, TF2 = 440)
}

В поле object_data содержится сериализованный объект CSOEconItem — это и есть подробности предмета:

message CSOEconItem {
	optional uint64 id = 1;                      // Уникальный ID предмета
	optional uint32 account_id = 2;              // ID аккаунта владельца
	optional uint32 inventory = 3;               // Номер слота в инвентаре
	optional uint32 def_index = 4;               // Внутренний ID типа предмета
	optional uint32 quantity = 5;                 // Количество предметов в стэке (обычно 1)
	optional uint32 level = 6;                    // Уровень предмета (если применимо)
	optional uint32 quality = 7;                  // Качество предмета
	optional uint32 flags = 8 [default = 0];     // Флаги (например, отмечает особые свойства)
	optional uint32 origin = 9;                   // Откуда предмет (например, дроп, покупка)
	optional string custom_name = 10;             // Пользовательское имя предмета (если есть)
	optional string custom_desc = 11;             // Пользовательское описание
	repeated .CSOEconItemAttribute attribute = 12;  // Дополнительные атрибуты предмета
	optional .CSOEconItem interior_item = 13;    // Вложенный предмет (например, скины внутри кейса)
	optional bool in_use = 14 [default = false]; // Используется ли предмет в игре
	optional uint32 style = 15 [default = 0];    // Стиль предмета (например, разные вариации)
	optional uint64 original_id = 16 [default = 0]; // ID оригинального предмета (если был создан копией)
	optional bool contains_equipped_state = 17;  // Есть ли информация о состоянии экипировки
	repeated .CSOEconItemEquipped equipped_state = 18;  // Состояния экипировки предмета
	optional bool contains_equipped_state_v2 = 19;      // Новая версия состояния экипировки
}

шаг 2.2 - Разберём, как можно расшифровать полученный HEX сообщения EMsg = 21 из логов предыдущего скрипта, с помощью ChatGPT:

Напиши Node.js скрипт, который расшифровывает GC-сообщение от Team Fortress 2 с типом EMsg = 21 (ESOMsg_Create).
Сообщение содержит CMsgSOSingleObject, в котором поле object_data — это бинарный protobuf объекта CSOEconItem.
Я уже скомпилировал .proto файлы с помощью protobufjs, и они находятся в ./proto/base_gcmessages_pb.js и ./proto/gcsdk_gcmessages_pb.js.
Скрипт должен:
1. Принимать HEX-строку (например, вставленную напрямую в код).
2. Декодировать её как CMsgSOSingleObject.
3. Проверять type_id, и если он равен 1, декодировать object_data как CSOEconItem.
Выводить в консоль: ID предмета, def_index, quality, level, quantity, origin

Получаем код [script 2.2 в боте] [кликабельная ссылка на пример],
лог консоли:

В полученных данных мы видим SteamID владельца, а также два ключевых параметра: ID/itemID (уникальный номер предмета) и DefIndex (тип предмета).

DefIndex помогает определить, что за предмет перед нами — кейс, скин или мусор. А itemID нужен, чтобы точно знать, какой конкретно предмет из инвентаря мы хотим залутать нашим лутером.

Проще говоря: По DefIndex можно понять какой предмет нам выпал — одинаковые предметы имеют одинаковый DefIndex. Рекомендуется заранее узнать DefIndex ненужных предметов (мусора), чтобы автоматически отсеивать их и не тратить ресурсы на них.

ИТОГИ

Мы разобрали, как самостоятельно создать фармилку кейсов TF2. Это лишь базовые примеры, с которых стоит начинать. В дальнейшем, при масштабировании на большое количество аккаунтов, могут возникнуть сложности — например, с Rate Limit при входе в аккаунты. Поэтому крупные фермы уже давно используют сессии (steamsession):

Что такое SteamSession и зачем она нужна:

.steamsession — это файл с сохранённой сессией авторизации Steam. Он создаётся, когда вы входите в аккаунт с разных устройств, чтобы не вводить логин и пароль каждый раз. Сессии бывают трёх типов:

  • Мобильная — создаётся через мобильное приложение Steam.
  • Веб-сессия — используется в браузере.
  • Десктоп-сессия — создаётся при входе через клиент Steam.

Сессия обычно действительна около 180 дней. Это означает, что в течение этого времени вы можете авторизоваться в аккаунте без повторного ввода логина, пароля и кода подтверждения.

В моём скрипте [перейти] реализована переработанная версия SSC от автора Sadzurami, в котором:

  • Удалено создание мобильных сессий.
  • Добавлена возможность отключать создание веб-сессий.
Это сделано для ускорения создания сессий, так как для фарма TF2 требуется только десктоп-сессия.

Вы можете:

Лут (сбор) предметов, с чего начать:

На рынке уже существует множество готовых решений для автоматического лутинга, но если вы хотите сделать своё — начните с основ:

Базой для таких скриптов являются библиотеки DoctorMcKay (в частности, steam-user, steam-tradeoffer-manager, steamcommunity и другие). Обязательно ознакомьтесь с их документацией — всё, что реализуется через эти библиотеки, вы сможете воссоздать с помощью ChatGPT.

Важно при работе с ChatGPT:

Помните, что при длительном взаимодействии ChatGPT может “забывать” часть вашего предыдущего кода, особенно если он не упоминается напрямую в последующих запросах. Из-за этого могут исчезать рабочие фрагменты или ломаться логика. Чтобы этого избежать: время от времени вставляйте в запрос текущий рабочий код с пометкой: "Вот текущая версия кода, продолжи/дополни/исправь:"

Моменты опущенные в этой статье:

1. Полноценный фарм предметов на игровых серверах TF2

2. Как пользоваться NetHook и SteamKit

Эти инструменты позволяют вести низкоуровневый анализ трафика Steam (включая Game Coordinator), перехватывать и расшифровывать сообщения.

  • NetHook помогает логировать сетевые сообщения Steam-клиента.
  • SteamKit — .NET-библиотека, аналог steam-user на C#, предоставляющая полный доступ к Steam API, GC и protobuf-сообщениям.
    Подходит для продвинутой разработки и реверса протокола.
Когда в играх Valve выходят крупные обновления, вместе с ними часто появляются новые лазейки и возможности для абузов через протобафы. Обычно Valve быстро закрывает такие дыры, но некоторые уязвимости могут существовать годами.

3. Полный разбор .proto файлов Steam / TF2
В статье не разбираются все сообщения из .proto-файлов (base_gcmessages.proto, tf_gcmessages.proto, econ_gcmessages.proto и другие), хотя они лежат в основе всех взаимодействий с Game Coordinator. Полный разбор требует знания структуры Protocol Buffers и принципов Steam-сетевого протокола.

Честно говоря, на текущий момент у меня нет желания расписывать простыню текста на эти темы, вся информация собрана на GitHub, при желании вы сами найдете всю полезную информацию, я лишь дал базовые знания и понимание с чего вам стоит начинать.

Ссылки на ресурсы, используемые в этой статье

🔧 Библиотеки и инструменты:

  • protobufjs — парсинг и сериализация .proto-файлов в JavaScript.

🧰 Отладка и анализ:

  • NetHook2 — утилита для перехвата и расшифровки сетевых сообщений Steam.
  • SteamKit2 — .NET SDK для работы с протоколом Steam, включая GC и protobuf.

📚 Документация и справка:

  • TF2 Schema API — API для получения данных о предметах TF2 (по def_index и др.).
  • TF2 Protobufs by xPaw — актуальные .proto-файлы TF2 от сообщества

🧩 Прочее:

  • ArchiSteamFarm — популярная кроссплатформенная система фарма карточек и управления Steam-ботами.
  • Steam Sessions Creator (SSC) от Sadzurami — инструмент для генерации .steamsession файлов, полезен для автоматизации логина без пароля.

Ответы на вопросы

Лимит инвентаря TF2 без према — 50 предметов, а у твоих ботов по 130?
Лимит инвентаря не влияет на дроп предметов. Если вам выпал предмет — он появится в инвентаре, даже если уже превышает лимит. Тоже самое касается и покупок во внутриигровом магазине — вы получите купленный предмет и прем, даже если инвентарь переполнен.

Какой предмет лучше покупать в магазине для получения према TF2?
Рекомендую купить Tour of Duty Ticket за $0.99. Если хочется сэкономить — советую почитать мою статью и использовать моего бота @SteamFX_bot, чтобы узнать, в каком регионе этот предмет дешевле всего.
Также советую глянуть статью про подарочные карты Steam
[1$ = 2 x по 8000 IDR] — это поможет пополнить баланс выгодно

Стоит ли фармить TF2 на своей основной ферме, например, с CS2?
Категорически НЕТ! Valve часто устраивает рандомные зачистки ботов — и вы можете попасть под раздачу. Ферму для TF2 нельзя совмещать с основной, иначе рискуете потерять всё в один момент.

Как обезопасить свою ферму TF2?
Главное правило — не наглеть. Серверы TF2 и так работают на пределе, особенно трейд-сервера. За массовый дуддос можно попасть на проверку со стороны Valve.

Я выставил миллион кейсов на торговую площадку, но их никто не покупает или продажи идут очень медленно — схема умерла?
Экономика TF2 давно в коме, но всё ещё подаёт признаки жизни. Кейсы обычно сливают по автобаям, либо обменивают на металл, а металл уже меняют на ликвидные ключи.

Все примеры скриптов, а также папку proto с .proto-файлами и полностью готовую фармилку, работающую через сессии, можно скачать в telegram-боте — @SteamFX_bot по ссылке [перейти]

Автор статьи: @Noil7
Не стесняйтесь оставлять отзывы в комментариях, задавать вопросы, если вам интересны новые статьи, следите за обновлениями на @NaN_info

Если вы создаёте собственный контент на основе материалов из этой статьи — будь то видео, посты или гайды — пожалуйста, не забывайте указывать ссылку на источник и автора. Уважение к первоисточнику помогает сохранять качество и мотивирует делиться новой информацией!