canon: COLLECTIONS_TIMELINE + CS2_TRANSITION + DATA_PIPELINE
All checks were successful
Godot CI / Import + smoke test (push) Successful in 30s

3 новых файла отвечают на 'полный каталог рынка':

I. COLLECTIONS_TIMELINE.md - лимитизация ~50 коллекций по статусам:
- Active/Legacy/Rare/Retired/Contraband/Event-only
- 50+ кейсов 2013-2026 с релиз-датами и ценами 2020/2026 (древние Bravo/Hydra → CapyFarm → кампания Fracture/Broken Fang → эпилог Anubis/Kilowatt/Harlequin 2026)
- 15 non-case коллекций (Cobblestone retired, Train вернулся CS2 2025)
- 4 экспоната лимитизации: M4A4 Howl Contraband (изъят 23.06.2014 за 7 нед), Dragon Lore (Cobble retired 2018), Hydra Case 6 мес дроп, EMS Katowice 2014 Holo $100k+
- Триггеры: drop pool removal/map removed/operation ends/plagiarism/CS2 transition/Care Package rotation янв 2026

II. CS2_TRANSITION.md - точно 27.09.2023:
- Source 2 движок, новые viewmodels, smoke physics
- Map pool: Train убран 2017, вернулся апр 2025 CS2
- Premier mode заменил Wingman+Competitive, CS Rating numerical
- Trust Factor 2.0 + Prime интегрированы → multi-HWID = плохие матчи
- Перенос инвентаря: 100% автомат, float теперь виден в Inspect сразу
- Влияние на рынок: первые 2 недели ±30-50% паника, AWP Dragon Lore $3500→$5000 за день
- Влияние на панели: FSM/DM обновили 1-2 мес, CapyFarm закрылась
- Влияние на тиры фермеров: тир 4 (industrial) пострадал больше всех (Care Package требует play на каждом акке)
- Канон-сцена: 27.09.2023 в TG чате 'Свои' паника, octofarm пост 'не паникуем'

III. DATA_PIPELINE.md - техническое решение НЕ делать 10к ручных записей:
- 3-слойная архитектура: 150 якорей (из HISTORICAL_STEAM_ITEMS.md) + процедурный генератор (15-25к записей) + опц реалтайм Steam Market API скрейпинг
- JSON-структуры skins.json/cases.json/collections_timeline.json
- Скрипт skins_generator.gd в Godot (формула base × wear × status × time × jitter)
- MVP для пролога: 15-20 скинов в skins_prolog.json вручную
- Полный каталог — для эпохи 1 (9 класс)
- Build через godot --headless --script build_catalog.gd, в Forgejo CI
- Размер dataset: 25k записей ~10-15МБ JSON, приемлемо для Steam-инди
This commit is contained in:
Dmitrii Bykov 2026-05-24 16:51:37 +03:00
parent 1703003d9b
commit 15260532b6
3 changed files with 639 additions and 0 deletions

View file

@ -0,0 +1,195 @@
# COLLECTIONS_TIMELINE.md — Лимитизация коллекций CS:GO/CS2 2013-2026
> **Зачем:** в каноне у каждого скина есть **статус доступности на конкретную дату**. От этого зависит цена.
>
> **Статусы:**
> - **🟢 Active** — активно дропает (из кейса или матча)
> - **🟡 Legacy** — дропает редко, цены растут
> - **🟠 Rare drop** — выведен из активного пула, осталось мало копий
> - **🔴 Retired** — снят с дропа окончательно. Только через рынок.
> - **⚫ Contraband** — запрещён (Howl) — рост экспоненциальный
> - **🎪 Event-only** — выпадал только в Operation, потом — навсегда без дропа
---
## I. CASE COLLECTIONS (~50 кейсов)
### Древние (2013-2015) — большинство в Retired
| Кейс | Релиз | Статус 2020 | Статус 2026 | Цена 2020 (FT, медиана) | Цена 2026 |
|---|---|---|---|---|---|
| CS:GO Weapon Case | 13.08.2013 | 🟠 Rare | 🔴 Retired | $20 / 1500₽ | $40 / 4000₽ |
| eSports 2013 | 14.08.2013 | 🔴 Retired | 🔴 Retired | $30 / 2200₽ | $80 / 8000₽ |
| Operation Bravo Case | 17.09.2013 | 🔴 Retired | 🔴 Retired | $100 / 7500₽ | $200 / 20000₽ |
| CS:GO Weapon Case 2 | 09.11.2013 | 🟠 Rare | 🔴 Retired | $10 / 750₽ | $25 / 2500₽ |
| eSports 2013 Winter | 18.12.2013 | 🔴 Retired | 🔴 Retired | $40 / 3000₽ | $100 / 10000₽ |
| Winter Offensive | 18.12.2013 | 🔴 Retired | 🔴 Retired | $40 / 3000₽ | $90 / 9000₽ |
| CS:GO Weapon Case 3 | 12.02.2014 | 🟠 Rare | 🔴 Retired | $25 / 1900₽ | $60 / 6000₽ |
| Operation Phoenix | 20.02.2014 | 🔴 Retired | 🔴 Retired | $30 / 2200₽ | $70 / 7000₽ |
| Huntsman Weapon Case | 01.05.2014 | 🟠 Rare | 🔴 Retired | $15 / 1100₽ | $35 / 3500₽ |
| Operation Breakout | 01.07.2014 | 🔴 Retired | 🔴 Retired | $30 / 2200₽ | $80 / 8000₽ |
| eSports 2014 Summer | 10.07.2014 | 🔴 Retired | 🔴 Retired | $30 / 2200₽ | $80 / 8000₽ |
| Operation Vanguard | 11.11.2014 | 🔴 Retired | 🔴 Retired | $35 / 2600₽ | $90 / 9000₽ |
| Chroma | 08.01.2015 | 🟡 Legacy | 🟠 Rare | $0.50 / 35₽ | $4 / 400₽ |
| Chroma 2 | 15.04.2015 | 🟡 Legacy | 🟠 Rare | $1.50 / 110₽ | $5 / 500₽ |
| Falchion | 26.05.2015 | 🟡 Legacy | 🟠 Rare | $0.40 / 30₽ | $3 / 300₽ |
| Shadow Case | 17.09.2015 | 🟡 Legacy | 🟠 Rare | $0.25 / 18₽ | $2 / 200₽ |
| Revolver Case | 08.12.2015 | 🟡 Legacy | 🟠 Rare | $0.25 / 18₽ | $2 / 200₽ |
### Хромо/Wildfire эра (2016)
| Кейс | Релиз | Статус 2020 | Статус 2026 | Цена 2020 | Цена 2026 |
|---|---|---|---|---|---|
| Operation Wildfire | 17.02.2016 | 🔴 Retired | 🔴 Retired | $20 / 1500₽ | $50 / 5000₽ |
| Chroma 3 | 02.05.2016 | 🟡 Legacy | 🟠 Rare | $0.30 / 22₽ | $2 / 200₽ |
| Gamma | 16.06.2016 | 🟡 Legacy | 🟠 Rare | $0.25 / 18₽ | $2 / 200₽ |
| Gamma 2 | 18.08.2016 | 🟡 Legacy | 🟠 Rare | $0.40 / 30₽ | $3 / 300₽ |
| Glove Case | 28.11.2016 | 🟢 Active | 🟡 Legacy | $1.50 / 110₽ | $4 / 400₽ |
### Glove/Hydra эра (2017)
| Кейс | Релиз | Статус 2020 | Статус 2026 | Цена 2020 | Цена 2026 |
|---|---|---|---|---|---|
| Spectrum | 15.03.2017 | 🟡 Legacy | 🟠 Rare | $0.80 / 60₽ | $3 / 300₽ |
| **Operation Hydra Case** | 23.05.2017 | 🎪 Event-only | 🎪 Event-only Rare | **$25 / 1900₽** | **$70 / 7000₽** |
| Spectrum 2 | 14.09.2017 | 🟡 Legacy | 🟠 Rare | $0.20 / 15₽ | $1.50 / 150₽ |
### Совр-эра (2018-2019)
| Кейс | Релиз | Статус 2020 | Статус 2026 | Цена 2020 | Цена 2026 |
|---|---|---|---|---|---|
| Clutch Case | 15.02.2018 | 🟢 Active | 🟡 Legacy | $0.15 / 11₽ | $1 / 100₽ |
| Horizon Case | 02.08.2018 | 🟢 Active | 🟡 Legacy | $0.15 / 11₽ | $1 / 100₽ |
| Danger Zone Case | 06.12.2018 | 🟢 Active | 🟡 Legacy | $0.20 / 15₽ | $1.50 / 150₽ |
| Prisma | 13.03.2019 | 🟢 Active | 🟡 Legacy | $0.15 / 11₽ | $1.20 / 120₽ |
| CS20 Case | 18.10.2019 | 🟢 Active | 🟡 Legacy | $0.20 / 15₽ | $1.50 / 150₽ |
| Shattered Web Case | 18.11.2019 | 🟢 Active | 🟡 Legacy | $0.20 / 15₽ | $1.20 / 120₽ |
### Кампания (2020-2022) — наш канон
| Кейс | Релиз | Статус на 21.08.2020 | Цена 21.08.2020 | Статус 2026 | Цена 2026 |
|---|---|---|---|---|---|
| Prisma 2 | 31.03.2020 | 🟢 Active (свежий) | $0.10 / 8₽ | 🟡 Legacy | $1 / 100₽ |
| **Fracture Case** | 06.08.2020 | 🟢 Active (НОВЕЙШИЙ на старте кампании!) | $0.30 / 25₽ пик → $0.18 / 15₽ через мес | 🟡 Legacy | $1 / 100₽ |
| **Operation Broken Fang Case** | 03.12.2020 | _ещё не вышел_ | — | 🟠 Rare (Operation-locked) | $4 / 400₽ |
| **Snakebite Case** | 03.05.2021 | _ещё не вышел_ | — | 🟡 Legacy | $1 / 100₽ |
| **Operation Riptide Case** | 21.09.2021 | _ещё не вышел_ | — | 🟠 Rare | $3 / 300₽ |
| **Dreams & Nightmares Case** | 20.01.2022 | _ещё не вышел_ | — | 🟡 Legacy | $1.50 / 150₽ |
| Recoil Case | 01.07.2022 | _после кампании_ | — | 🟡 Legacy | $1 / 100₽ |
### Эпилог (CS2-эра 2023-2026)
| Кейс | Релиз | Статус 2026 | Цена 2026 |
|---|---|---|---|
| Anubis Collection Case | 09.02.2023 | 🟢 Active | $0.80 / 80₽ |
| Revolution Case | 09.02.2023 | 🟢 Active | $0.60 / 60₽ |
| **Kilowatt Case** | 14.02.2024 | 🟢 Active (с **Charm**-механикой) | $1.20 / 120₽ |
| Gallery Case | 22.08.2024 | 🟢 Active | $0.90 / 90₽ |
| Fever Case | 17.12.2024 | 🟢 Active | $1 / 100₽ |
| Train 2025 Case | 04.04.2025 | 🟢 Active | $0.80 / 80₽ |
| Harlequin Case | 21.01.2026 | 🟢 Active (новейший на момент эпилога) | $1.50 / 150₽ |
| Achroma Case | 21.01.2026 | 🟢 Active | $1.20 / 120₽ |
---
## II. NON-CASE COLLECTIONS (Souvenir + матч-дропы)
> Эти коллекции — для **match drops** в режимах. Дропают раз в неделю. **Souvenir-версии** — только из Souvenir-Packages турниров.
| Коллекция | Релиз | Статус 2020 | Знаменитые скины | Канон-роль |
|---|---|---|---|---|
| **The Dust 2 Collection** | 13.08.2013 | 🟡 Legacy match drop | стандарт | Дроп в любом матче на dust2 |
| **The Cobblestone Collection** | 13.08.2013 | 🔴 Retired (Cobble убран из map pool) | **Howl** ⚫, **Dragon Lore** 🔴 | Источник Dragon Lore и Howl |
| **The Mirage Collection** | 13.08.2013 | 🟡 Legacy | стандарт | |
| **The Inferno Collection** | 13.08.2013 | 🟡 Legacy | стандарт | |
| **The Train Collection** | 13.08.2013 | 🔴 Retired (Train убран из active pool 2017, вернулся CS2 2025) | классики | |
| **The Vertigo Collection** | 13.08.2013 | 🟡 Legacy | стандарт | |
| **The 2018 Inferno Collection** | 04.05.2018 | 🟢 Active match drop | обновлённые | |
| **The 2018 Nuke Collection** | 04.05.2018 | 🟢 Active match drop | обновлённые | (убрана из Care Package 01.2026) |
| **The Anubis Collection** | 09.02.2023 | 🟢 Active CS2 | новые | |
| **The Ancient Collection** | 13.10.2021 | 🟢 Active | новые | |
| **The Mirage 2021 Collection** | 21.09.2021 (Riptide) | 🟢 Active | обновл. | |
| **The Dust 2 2021 Collection** | 21.09.2021 (Riptide) | 🟢 Active | обновл. | |
| **The Train 2025 Collection** | 04.04.2025 | 🟢 Active | новые (CS2 Train return) | |
| **The Harlequin Collection** | 21.01.2026 | 🟢 Active (только в Weekly Care Package) | новые (только в эпилоге) | |
| **The Achroma Collection** | 21.01.2026 | 🟢 Active | новые | |
---
## III. КЛЮЧЕВЫЕ ЭКСПОНАТЫ ЛИМИТИЗАЦИИ
### M4A4 | Howl — Contraband
- **Введён:** 01.05.2014 (Huntsman Weapon Case)
- **Removed → Contraband:** 23.06.2014 (плагиат, **Valve буквально удалила скин с дропа за 7 недель**)
- **Цены:** FN 2020 = ~200k₽ → 2024 = ~700k+₽ → 2026 = ~1.2M+₽
- Это **единственный Contraband-скин** в CS:GO/CS2
### AWP | Dragon Lore — Limited drop
- **Из Cobblestone Collection** (доступен только если играл на Cobble)
- **Cobble убран из active map pool в 2018** → коллекция стала Retired-для-дропа
- Только через Souvenir-Packages с турниров (очень редко)
- **Цены:** FN 2020 = ~200k → 2024 = ~1.5M → 2026 = ~2-3M₽
### Operation Hydra Case
- **Вышел 23.05.2017**, **закончился 13.11.2017** (только 6 мес дропал)
- После — **никогда не дропал в матчах**
- Только из старых инвентарей или маркета
- **Цены:** $25 / 1900₽ в 2020 → $70 / 7000₽ в 2026 (рост х2.8 за 6 лет)
### "EMS Katowice 2014 Holo" стикер
- Турнирный стикер 2014 года
- **Никогда не переиздавался**
- Самый дорогой стикер в истории
- **Цена 2024:** ~$100k+ за штуку
- На скин с этим стикером — цена увеличивается в десятки раз
### Souvenir AWP | Dragon Lore с подписью KennyS
- Реальная продажа **17.02.2018 за $61k**
- Из Boston Major 2018 Souvenir Package
- В каноне — пасхалка для эпизода 2024+ если игрок ищет "легендарный лот"
---
## IV. ОСНОВНЫЕ ТРИГГЕРЫ ЛИМИТИЗАЦИИ
| Триггер | Эффект | Пример |
|---|---|---|
| **Removal from drop pool** | Кейс становится Rare → Retired | Bravo Case, Hydra Case |
| **Map removed from active pool** | Коллекция мап-дропа становится Legacy | Cobblestone (2018), Train (2017-2025) |
| **Operation ends** | Operation Case переходит в Active → Legacy → Rare за годы | Broken Fang, Riptide |
| **Plagiarism / legal removal** | Contraband | M4A4 Howl |
| **CS:GO → CS2 transition (27.09.2023)** | Legacy collections становятся менее доступными | Старые карты Source-эпохи |
| **CS2 Weekly Care Package rotation** | Коллекции добавляются/убираются с дропа раз в полгода | Янв 2026: убраны Safehouse/Dust2/2018 Nuke/Inferno; добавлены Harlequin/Achroma |
| **Sticker capsules end** | Капсулы перестают продавать → stickers Limited | Каждый Major имеет свои капсулы, дропают только во время |
---
## V. КАК ИСПОЛЬЗОВАТЬ В КОДЕ
Каждая коллекция/кейс в JSON-дате имеет:
```json
{
"name": "Operation Hydra Case",
"released": "2017-05-23",
"drop_status_timeline": [
{"from": "2017-05-23", "status": "active"},
{"from": "2017-11-13", "status": "event-ended"},
{"from": "2018-01-01", "status": "rare"}
],
"parent_collections": ["Hydra"],
"knife_pool": ["Bayonet", "Karambit", ...],
"key_cost_rub_2020": 190
}
```
Для запроса "статус кейса на дату X" — линейный поиск по `drop_status_timeline`.
---
## TBD
- Полные списки скинов внутри каждой коллекции (тысячи позиций — пойдут процедурно)
- Точные даты map pool changes по годам
- Sticker capsules timeline (60+ Major + tier-2 events)
- Charm collection (CS2 2024+)
- Patch capsules (Broken Fang 2020+)

169
canon/CS2_TRANSITION.md Normal file
View file

@ -0,0 +1,169 @@
# CS2_TRANSITION.md — Переход CS:GO → CS2 (27 сентября 2023)
> **Канон-роль:** В нашей кампании (21.08.2020 — 29.05.2022) CS2 ещё нет. Но **в эпилоге** 27 сен 2023 — переход. Это **большой драм-момент** для фермерского комьюнити.
---
## ТОЧНАЯ ДАТА И ОБЪЯВЛЕНИЕ
- **27 сентября 2023** — Valve официально запустила Counter-Strike 2
- **CS:GO стала "Legacy version"** — доступна через bbeta-ветку Steam (`csgo_legacy`)
- Большинство игроков **автоматически переведены на CS2** при следующем запуске
- Mac/Linux поддержка прекращена в CS2 (CS:GO работал на этих платформах, CS2 — только Windows)
---
## ЧТО ИЗМЕНИЛОСЬ — ПЕРЕЧЕНЬ
### Графика и движок
- **Source 2 движок** (CS:GO был на Source 1, с 2012)
- Новые viewmodels, лучшая физика дыма, smoke grenades теперь объёмные
- Lighting переработан, текстуры повышены
- **Реалистичная анимация воды, ткани**
### UI и интерфейс
- Полностью переработан UI магазина, инвентаря, меню
- **Inspect-окно для скинов** — улучшено, видны float значения **сразу**
- Inventory: новые фильтры по wear/rarity/StatTrak/Souvenir
- Music kit теперь играет в матче через новый интерфейс
### Карты
- **Map pool сокращён** — часть удалена, часть переработана
- Удалены: Train, Cache, Cobblestone (давно)
- Добавлены / переработаны: Anubis, Ancient, Inferno 2.0, Mirage 2.0, Nuke 2.0, Vertigo 2.0, Overpass 2.0, Office 2.0
- **Train вернётся в апреле 2025** в CS2 (после 2-летнего перерыва)
### Игровые механики
- **Sub-tick netcode** — реакции игрока учитываются с миллисекундной точностью
- Smoke grenades: можно вырубить смог гранатой или стрелять сквозь
- Грейды rebalanced
- Скорости движения, тайминги — чуть изменены
### Trust Factor 2.0
- Старая система Trust Factor + Prime теперь работает интегрированнее
- Влияет на матчмейкинг, шанс получить читера в матче
- Multi-аккаунты с одного HWID = низкий Trust Factor → плохие матчи
### Premier mode (новый рейтинговый)
- Заменил **Wingman + Competitive** для рейтинга
- **CS Rating** (numerical, не звания) — точная цифра
- Major-qualifications идут через Premier
---
## ПЕРЕНОС СКИНОВ И ИНВЕНТАРЯ
### Точно (по реалу)
- **ВСЕ скины CS:GO автоматически перенесены в CS2** — без действий игрока
- StatTrak, Souvenir, stickers — переносятся
- Float значения сохранены
- Stickers применены на оружии — остаются
### Что ВЫЯВИЛОСЬ при переходе
- **Некоторые скины выглядят иначе** в Source 2 (новое освещение)
- **Часть стикеров плохо отрисовалась** — Valve фиксила в первые 2 недели
- **Float-значения скинов** — теперь видны прямо в Inspect (раньше только через сторонние сайты)
### Что ПРОПАЛО
- **Все Music Kits** — работают, но через новый интерфейс
- **Music Box** (старая фича) — удалена
- **Графитти-применение** — переработано, скорость нанесения меньше
- **Hand-cam в Inspect** — изменён угол обзора
---
## ВЛИЯНИЕ НА РЫНОК (для канона)
### Первые 2 недели (27.09.2023 — 11.10.2023)
- **Цены прыгают ±30-50%** на популярные скины
- Часть игроков **продаёт всё в панике**, рынок завален
- Дешевые/средние скины (Mil-Spec, Restricted) — обвал -20-40%
- Топ-скины (Covert, knives, gloves) — рост +10-30% (коллекционеры покупают)
- **AWP Dragon Lore FN** скакнул с ~$3500 до ~$5000 за день
### 2 недели — 2 месяца
- Стабилизация
- Mass-фермеры пересматривают стратегию (Care Package замена weekly drop)
- Часть мелких ферм закрывается — невыгодно
- FSM Panel / DM Panel — обновляют софт под CS2 (релиз патчей в окт-нояб 2023)
### 2-6 месяцев
- Новые типы скинов: **Charm** (с Kilowatt Case фев 2024)
- Trade-Up Contract пересчитан
- Stickers — больше возможностей для craft
### 6+ месяцев
- Стабильный рост на легаси-скины (Dragon Lore, Howl, ножи) +20-50% к концу 2024
- Mass-фарма ушло половины игроков
- Те кто остался — на новых панелях с Care Package-логикой
---
## ВЛИЯНИЕ НА ФАРМ-ПАНЕЛИ (для канона)
| Панель | Что случилось |
|---|---|
| **FSM Panel** | Обновили под CS2 в окт 2023. FSM-режим остался. Цены лицензий те же. |
| **DM Panel** | Обновили в нояб 2023. Deathmatch остался. Mass-update пользователей. |
| **SkyNet** | Обновили в дек 2023. Стабильная. |
| **QFARM (open-source)** | Сообщество обновило в дек 2023, но с лагом. |
| **CapyFarm** | Закрылась (не выдержала переход). |
| **TC Panel** (давно мёртвая) | Не воскресли. |
---
## ВЛИЯНИЕ НА ФЕРМЕРОВ (по тирам, для канона)
| Тир | Эффект перехода |
|---|---|
| **Тир 1 (школьник 5-10 акков)** | Меньше всего. Care Package требует Prime — кто имел, продолжил. Без Prime — мало что было раньше, мало стало. |
| **Тир 2 (полу-профи 10-50)** | Слабо. FSM/DM обновились — рабочий процесс восстановлен через 2-3 недели. |
| **Тир 3 (профи 50-200)** | Средне. Care Package требует **активного play на каждом акке** — массовый фарм через FSM режим затратнее по времени на акк. Часть стратегий пересмотрена. |
| **Тир 4 (industrial 200+)** | Сильно. Care Package сделал mass-фарм сложнее. Часть индустриальных закрылись или перешли на TF2-фарм / PUBG. |
---
## КАНОН-СЦЕНА В ЭПИЛОГЕ
### 27.09.2023 (среда) — день перехода
**Tegelram-чат "Свои":**
- Утром: *"пацаны кс2 вышла кто запустил?"*
- К обеду: *"щас половина скинов выглядит иначе"*
- К вечеру: *"FSM ещё не обновили, фарм встал"*
- К ночи: *"продал dragon lore за +25% паника-цене, не жалею"*
**TG-канал `@octofarm` пост:**
> *"Пацаны, кс2 вышла. Не паникуем. FSM команда обещает обновление к 5 октября. Пока — переключаемся на TF2 фарм или ждём. Кто продаёт скины сейчас — теряет деньги. Сидим на жопе, ждём стабилизации."*
**В новостях TG-канала "Будни Региона":**
> *"Valve выпустила обновление популярного шутера. Поклонники переходят на новую версию."*
### Реакция героя (если в эпилоге)
- Видит свой первый защищённый аккаунт (с пролога 2020) — Australium Wrench нетронут, цена даже выросла (+15% за неделю)
- Если у героя был Dragon Lore (low chance) — может продать на пике паники
- Андрюха пишет: *"кс2 хороша. но фарма меньше. возможно завязываем?"*
---
## ИГРОВАЯ МЕХАНИКА В КОДЕ
### State-машина "CS-era"
- **CSGO_era**: до 27.09.2023 — стандартная weekly drop логика
- **CS2_era**: с 27.09.2023 — Care Package логика (выбор из 4)
### Сцена дроп-открытия меняется
- **До 27.09.2023:** карусель CS:GO стиль (мини-игра MG-003 сапёр)
- **С 27.09.2023:** окно с 4 предметами, выбор 2 (новая мини-игра)
### Скины в инвентаре
- **До 27.09.2023:** UI CS:GO стиля
- **С 27.09.2023:** UI CS2 стиля (более чистый, новые иконки)
- Float значения видны **сразу** (раньше — клик в Inspect)
---
## TBD
- Точная мини-игра Care Package (выбор 2 из 4) — для эпилог-сцен
- Дизайн UI CS2 vs CS:GO в коде (2 версии Inventory-окна)
- Что именно "выглядит иначе" — какие скины Source 2 рендерит особенно красиво/уродливо

275
canon/DATA_PIPELINE.md Normal file
View file

@ -0,0 +1,275 @@
# DATA_PIPELINE.md — Техническое решение каталога предметов
> **Проблема:** ~10 000 скинов CS:GO × 5 wear × 10+ лет = миллионы записей цен. Вручную невозможно.
>
> **Решение:** 3-слойная архитектура. Якоря вручную + процедурка + опц. скрейпинг.
---
## I. АРХИТЕКТУРА — 3 СЛОЯ
### Слой 1: ЯКОРЯ (вручную, 100-150 шт)
**Источник:** `canon/HISTORICAL_STEAM_ITEMS.md` от research-агента (4800 слов).
**Что покрыто:**
- 30 iconic скинов с реальными ценами по wear/year (Dragon Lore, Howl, Fire Serpent, etc.)
- 50 кейсов с датами выхода и ценами по кварталам
- 13 Australium weapons с ценами 2020-2024
- 15+ Unusual TF2 effects с типовыми ценами
- PUBG sezony S7-S25 с pass-ценами
- Все CS:GO Operations с pass-ценами и дроп-листами
**Используется как:** **ground truth** для калибровки процедурного слоя.
### Слой 2: ПРОЦЕДУРНЫЙ ГЕНЕРАТОР (формула, генерирует тысячи)
**Источник:** `canon/STEAM_ITEMS.md` секция VII (формула ценообразования) + `canon/COLLECTIONS_TIMELINE.md` (статус коллекций по датам).
**Алгоритм:**
```
для каждого скина в каталоге:
base = base_price[rarity_tier] # из COLLECTIONS_TIMELINE
status = collection_status_on_date # active/legacy/retired/contraband
для каждого wear FN/MW/FT/WW/BS:
price = base
× wear_multiplier[wear] # 0.3-4.0 по STEAM_ITEMS.md
× status_multiplier[status] # 1.0-30.0 (retired = expensive)
× time_curve(date, release) # 0.2-5.0
× stattrak_or_souvenir # 1.0-3.0
× pattern_jitter() # 0.85-1.15
если skin in ANCHORS (якорь из слоя 1):
скорректировать формулу чтобы совпадало с якорем ±10%
```
**Что генерируется:** 3000-5000 уникальных скинов × 5 wear = 15-25 тыс записей.
**Хранится как:** `assets/data/skins.json` — генерируется один раз при build-е.
### Слой 3: РЕАЛТАЙМ-СКРЕЙПИНГ (опционально, для энтузиастов)
**Источник:** Steam Market public API.
**Endpoint:** `https://steamcommunity.com/market/priceoverview/?currency=5&appid=730&market_hash_name=<skin>` (currency=5 = RUB)
**Что даёт:** реальная цена на сегодня для любого скина.
**Использование в игре:**
- В пред-альфа: НЕ используется (offline-only)
- В будущей версии: опциональная "live-pricing" механика для игроков с интернетом
**Скорость:** Steam ограничивает ~20 req/sec → 30к скинов = 25 минут на полный апдейт.
---
## II. JSON-СТРУКТУРА
### Файл `assets/data/skins.json`
```json
{
"version": "1.0.0",
"generated_at": "2026-05-24T15:00:00Z",
"base_date": "2020-08-21",
"skins": [
{
"id": "awp_dragon_lore",
"weapon": "AWP",
"name": "Dragon Lore",
"collection": "The Cobblestone Collection",
"rarity": "covert",
"category": "rifle_sniper",
"released": "2014-07-01",
"collection_status_timeline": [
{"from": "2014-07-01", "status": "active"},
{"from": "2018-04-01", "status": "rare"},
{"from": "2023-09-27", "status": "legacy_cs2"}
],
"base_price_rub_2020": 90000,
"wear_multipliers": {
"FN": 2.5,
"MW": 1.7,
"FT": 1.0,
"WW": 0.7,
"BS": 0.5
},
"stattrak_available": true,
"souvenir_available": true,
"souvenir_multiplier": 3.0,
"low_float_supported": true,
"is_anchor": true
}
]
}
```
### Файл `assets/data/cases.json`
```json
{
"cases": [
{
"id": "fracture_case",
"name": "Fracture Case",
"released": "2020-08-06",
"collection_status_timeline": [
{"from": "2020-08-06", "status": "active"},
{"from": "2023-09-27", "status": "legacy_cs2"}
],
"key_cost_rub_2020": 190,
"drop_weights": {
"mil_spec": 0.7992,
"restricted": 0.1598,
"classified": 0.0320,
"covert": 0.0064,
"knife": 0.0026
},
"knife_pool": ["bayonet", "karambit", "m9_bayonet", "..."]
}
]
}
```
### Файл `assets/data/collections_timeline.json`
Структурированный экспорт `canon/COLLECTIONS_TIMELINE.md` в JSON.
### Файл `assets/data/cs2_transition.json`
События 27.09.2023: смена UI, market shock, panel updates.
---
## III. ГЕНЕРАТОР В GODOT
### Скрипт `scripts/data/skins_generator.gd`
```gdscript
extends Node
const ANCHORS_JSON = "res://assets/data/anchors.json" # из HISTORICAL_STEAM_ITEMS.md
const COLLECTIONS_JSON = "res://assets/data/collections_timeline.json"
func generate_full_catalog(seed_value: int) -> Array:
var rng = RandomNumberGenerator.new()
rng.seed = seed_value
var anchors = _load_anchors()
var collections = _load_collections()
var catalog = []
for collection in collections:
for skin_template in _generate_skins_for_collection(collection, rng):
for wear in ["FN", "MW", "FT", "WW", "BS"]:
var entry = _build_entry(skin_template, wear, collection, rng)
catalog.append(entry)
return catalog
func get_price(skin_id: String, wear: String, on_date: String) -> int:
# Расчёт цены любого скина на любую дату
var skin = _find_skin(skin_id)
var collection_status = _status_on_date(skin.collection, on_date)
var time_curve = _time_curve(skin.released, on_date)
return skin.base_price \
* skin.wear_multipliers[wear] \
* _status_multiplier(collection_status) \
* time_curve \
* _daily_jitter(on_date, skin_id)
```
### Скрипт `scripts/data/market_simulator.gd`
- Симулирует ежедневные флуктуации ±5-15%
- Среда -10% (канон-механика)
- 5.12.2023 крах -10-20%
- 24.02.2022 курс-скачок +30-50% в RUB
- CS2 transition 27.09.2023 спайк ±30-50%
---
## IV. УПРОЩЁННАЯ ВЕРСИЯ ДЛЯ MVP (пролога)
### Что нужно в Акте 1-13 пролога
- **Australium Wrench** (1 скин) — захардкоден в коде
- **Кейс кесе го Prime** (после покупки игры) — выпадает что-то от Fracture Case (свежий на 21.08.2020). 5-7 возможных скинов рандомно.
- **Кейс Пабаджи** — Survivor Crate, 5-7 косметик из реала
**ИТОГО для пролога:** ~15-20 скинов в JSON, не тысячи. Полный генератор — для основной игры.
### Файл `assets/data/skins_prolog.json` (минимум)
```json
{
"australium_wrench": { ... },
"fracture_case_skins": [
"ak47_legion_of_anubis",
"m4a4_tooth_fairy",
"ump45_gold_bismuth",
"..."
],
"pubg_survivor_crate_items": [
"trench_coat",
"leather_jacket",
"..."
]
}
```
---
## V. PIPELINE BUILD
### CLI команда (Forgejo Actions может запускать)
```bash
# Из корня проекта
godot --headless --script scripts/data/build_catalog.gd --seed 42
# → генерирует assets/data/skins.json (15k записей)
# → проверяет соответствие якорям ±10%
# → выходит с кодом 0 если ок, 1 если рассогласование
```
### В `.forgejo/workflows/build.yml` (когда дойдём)
Добавить step:
```yaml
- name: Build catalog
run: godot --headless --script scripts/data/build_catalog.gd --seed 42
```
---
## VI. КОГДА ЧТО ДЕЛАТЬ
| Этап | Что |
|---|---|
| **Сейчас (Акт 1 пролога)** | Не нужен полный каталог. 15-20 скинов руками в `skins_prolog.json`. |
| **Акт 12-13 пролога (3 фарм-акка)** | Добавить 10-20 базовых скинов кесе го/Пабаджи |
| **Эпоха 1 (9 класс)** | Полный каталог: ~3000 скинов через генератор. Реализация `skins_generator.gd`. |
| **Эпоха 3 (10 класс, окт 2021)** | Добавить Riptide коллекции |
| **Эпилог (CS2 transition)** | State-machine "era": до/после 27.09.2023 |
| **Финальный релиз** | Опц. реалтайм-скрейпинг для энтузиастов |
---
## VII. РАЗМЕР DATASET
| Слой | Записей | Размер JSON |
|---|---|---|
| Anchors (вручную) | 150 | ~50 КБ |
| Процедурный CS:GO/CS2 | 15 000 | ~5-8 МБ |
| TF2 (Mannco + Australium + Unusual) | 8 000 | ~3-5 МБ |
| PUBG | 2 000 | ~1 МБ |
| **ИТОГО** | **25 000** | **~10-15 МБ** |
**Размер билда:** +15МБ — приемлемо (Godot project = 50 МБ базы, итого ~65МБ — без проблем для Steam $5 игры).
---
## VIII. ТРЕНИНГ-СЛОЙ (опционально, для будущего)
ML-модель которая обучается на anchors + Steam Market API данных за месяц → может предсказывать цены любого скина с точностью ±10-15%. Запускается в фоне игры, обновляет dataset.
**Не нужно для пролога.** Опция для долгосрочного развития.
---
## TBD
- Конкретный JSON-формат якорей (выкатим при первой генерации)
- Карта rarity → base_price (5-7 уровней)
- Какие именно 30 iconic скинов кодируем как якоря (взять из HISTORICAL_STEAM_ITEMS.md)
- Логика state-machine "CS-era" (до/после 27.09.2023)