tf2-data 0.2.0__tar.gz → 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. tf2_data-1.0.0/.gitignore +174 -0
  2. tf2_data-1.0.0/.vscode/settings.json +9 -0
  3. {tf2_data-0.2.0 → tf2_data-1.0.0}/PKG-INFO +8 -6
  4. {tf2_data-0.2.0 → tf2_data-1.0.0}/README.md +6 -4
  5. tf2_data-1.0.0/example.env +1 -0
  6. tf2_data-1.0.0/src/tf2_data/__init__.py +11 -0
  7. tf2_data-0.2.0/src/tf2_data/static.py → tf2_data-1.0.0/src/tf2_data/constants.py +9 -0
  8. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/files.py +8 -0
  9. tf2_data-1.0.0/src/tf2_data/iecon_items.py +67 -0
  10. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/json/defindex_full_names.json +216 -8
  11. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/json/defindex_names.json +240 -34
  12. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/json/effects.json +45 -12
  13. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/json/schema_items.json +3134 -702
  14. tf2_data-1.0.0/src/tf2_data/schema.py +52 -0
  15. tf2_data-1.0.0/src/tf2_data/schema_items.py +82 -0
  16. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/utils.py +4 -3
  17. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data.egg-info/PKG-INFO +8 -6
  18. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data.egg-info/SOURCES.txt +8 -2
  19. tf2_data-1.0.0/tests/test_constants.py +16 -0
  20. tf2_data-1.0.0/tests/test_files.py +19 -0
  21. tf2_data-1.0.0/update_items.py +21 -0
  22. tf2_data-0.2.0/.gitignore +0 -3
  23. tf2_data-0.2.0/src/tf2_data/__init__.py +0 -16
  24. tf2_data-0.2.0/src/tf2_data/schema.py +0 -202
  25. tf2_data-0.2.0/tests/test_static.py +0 -19
  26. {tf2_data-0.2.0 → tf2_data-1.0.0}/.flake8 +0 -0
  27. {tf2_data-0.2.0 → tf2_data-1.0.0}/.github/workflows/publish.yml +0 -0
  28. {tf2_data-0.2.0 → tf2_data-1.0.0}/LICENSE +0 -0
  29. {tf2_data-0.2.0 → tf2_data-1.0.0}/pyproject.toml +0 -0
  30. {tf2_data-0.2.0 → tf2_data-1.0.0}/setup.cfg +0 -0
  31. {tf2_data-0.2.0 → tf2_data-1.0.0}/setup.py +0 -0
  32. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/json/colors.json +0 -0
  33. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/json/item_nameids.json +0 -0
  34. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/json/killstreaks.json +0 -0
  35. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/json/qualities.json +0 -0
  36. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/json/schema_overview.json +0 -0
  37. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data/json/wears.json +0 -0
  38. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data.egg-info/dependency_links.txt +0 -0
  39. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data.egg-info/requires.txt +0 -0
  40. {tf2_data-0.2.0 → tf2_data-1.0.0}/src/tf2_data.egg-info/top_level.txt +0 -0
  41. {tf2_data-0.2.0 → tf2_data-1.0.0}/tests/__init__.py +0 -0
@@ -0,0 +1,174 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ #uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ #poetry.lock
109
+
110
+ # pdm
111
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
112
+ #pdm.lock
113
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
114
+ # in version control.
115
+ # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
116
+ .pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
121
+ __pypackages__/
122
+
123
+ # Celery stuff
124
+ celerybeat-schedule
125
+ celerybeat.pid
126
+
127
+ # SageMath parsed files
128
+ *.sage.py
129
+
130
+ # Environments
131
+ .env
132
+ .venv
133
+ env/
134
+ venv/
135
+ ENV/
136
+ env.bak/
137
+ venv.bak/
138
+
139
+ # Spyder project settings
140
+ .spyderproject
141
+ .spyproject
142
+
143
+ # Rope project settings
144
+ .ropeproject
145
+
146
+ # mkdocs documentation
147
+ /site
148
+
149
+ # mypy
150
+ .mypy_cache/
151
+ .dmypy.json
152
+ dmypy.json
153
+
154
+ # Pyre type checker
155
+ .pyre/
156
+
157
+ # pytype static type analyzer
158
+ .pytype/
159
+
160
+ # Cython debug symbols
161
+ cython_debug/
162
+
163
+ # PyCharm
164
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
165
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
166
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
167
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
168
+ #.idea/
169
+
170
+ # Ruff stuff:
171
+ .ruff_cache/
172
+
173
+ # PyPI configuration file
174
+ .pypirc
@@ -0,0 +1,9 @@
1
+ {
2
+ "editor.formatOnSave": true,
3
+ "editor.defaultFormatter": "charliermarsh.ruff",
4
+ "[python]": {
5
+ "editor.codeActionsOnSave": {
6
+ "source.organizeImports": "explicit"
7
+ }
8
+ }
9
+ }
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: tf2-data
3
- Version: 0.2.0
3
+ Version: 1.0.0
4
4
  Summary: Item schemas, unusual effects, SKUs and more useful data for TF2 trading
5
5
  Author-email: offish <overutilization@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/offish/tf2-data
@@ -15,12 +15,14 @@ License-File: LICENSE
15
15
  Requires-Dist: requests
16
16
 
17
17
  # tf2-data
18
- [![License](https://img.shields.io/github/license/offish/tf2-data.svg)](https://github.com/offish/tf2-data/blob/master/LICENSE)
19
18
  [![Stars](https://img.shields.io/github/stars/offish/tf2-data.svg)](https://github.com/offish/tf2-data/stargazers)
20
19
  [![Issues](https://img.shields.io/github/issues/offish/tf2-data.svg)](https://github.com/offish/tf2-data/issues)
21
20
  [![Size](https://img.shields.io/github/repo-size/offish/tf2-data.svg)](https://github.com/offish/tf2-data)
22
21
  [![Discord](https://img.shields.io/discord/467040686982692865?color=7289da&label=Discord&logo=discord)](https://discord.gg/t8nHSvA)
22
+ [![Downloads](https://img.shields.io/pypi/dm/tf2-data)](https://pypi.org/project/tf2-data/)
23
23
  [![Code style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
24
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
25
+
24
26
 
25
27
  Item schemas, unusual effects, SKUs and more which can be useful for TF2 trading. Implemented by [tf2-utils](https://github.com/offish/tf2-utils).
26
28
 
@@ -46,14 +48,14 @@ python -m pip install --upgrade tf2-data
46
48
  ## Testing
47
49
  ```bash
48
50
  # tf2-data/
49
- python -m unittest
51
+ pytest
50
52
  ```
51
53
 
52
54
  ## Update files after new update
53
- To update the local files after a TF2 update run this snippet.
55
+ If the package is not up-to-date, run this snippet to update your local files.
54
56
 
55
57
  ```python
56
- from tf2_data.schema import Schema, SchemaItems, IEconItems
58
+ from tf2_data import Schema, SchemaItems, IEconItems
57
59
 
58
60
  api_key = "STEAM_API_KEY"
59
61
  schema = Schema(api_key=api_key)
@@ -1,10 +1,12 @@
1
1
  # tf2-data
2
- [![License](https://img.shields.io/github/license/offish/tf2-data.svg)](https://github.com/offish/tf2-data/blob/master/LICENSE)
3
2
  [![Stars](https://img.shields.io/github/stars/offish/tf2-data.svg)](https://github.com/offish/tf2-data/stargazers)
4
3
  [![Issues](https://img.shields.io/github/issues/offish/tf2-data.svg)](https://github.com/offish/tf2-data/issues)
5
4
  [![Size](https://img.shields.io/github/repo-size/offish/tf2-data.svg)](https://github.com/offish/tf2-data)
6
5
  [![Discord](https://img.shields.io/discord/467040686982692865?color=7289da&label=Discord&logo=discord)](https://discord.gg/t8nHSvA)
6
+ [![Downloads](https://img.shields.io/pypi/dm/tf2-data)](https://pypi.org/project/tf2-data/)
7
7
  [![Code style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
8
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
9
+
8
10
 
9
11
  Item schemas, unusual effects, SKUs and more which can be useful for TF2 trading. Implemented by [tf2-utils](https://github.com/offish/tf2-utils).
10
12
 
@@ -30,14 +32,14 @@ python -m pip install --upgrade tf2-data
30
32
  ## Testing
31
33
  ```bash
32
34
  # tf2-data/
33
- python -m unittest
35
+ pytest
34
36
  ```
35
37
 
36
38
  ## Update files after new update
37
- To update the local files after a TF2 update run this snippet.
39
+ If the package is not up-to-date, run this snippet to update your local files.
38
40
 
39
41
  ```python
40
- from tf2_data.schema import Schema, SchemaItems, IEconItems
42
+ from tf2_data import Schema, SchemaItems, IEconItems
41
43
 
42
44
  api_key = "STEAM_API_KEY"
43
45
  schema = Schema(api_key=api_key)
@@ -0,0 +1 @@
1
+ STEAM_API_KEY=YOUR_STEAM_API_KEY
@@ -0,0 +1,11 @@
1
+ # flake8: noqa
2
+ __title__ = "tf2-data"
3
+ __author__ = "offish"
4
+ __version__ = "1.0.0"
5
+ __license__ = "MIT"
6
+
7
+ from .constants import COLORS, EXTERIORS, KILLSTREAKS, QUALITIES, QUALITY_COLORS, WEARS
8
+ from .files import *
9
+ from .iecon_items import IEconItems
10
+ from .schema import Schema
11
+ from .schema_items import SchemaItems
@@ -1,3 +1,12 @@
1
+ from .utils import get_json_path
2
+
3
+ DEFINDEX_FULL_NAMES_PATH = get_json_path("defindex_full_names")
4
+ SCHEMA_OVERVIEW_PATH = get_json_path("schema_overview")
5
+ DEFINDEX_NAMES_PATH = get_json_path("defindex_names")
6
+ SCHEMA_ITEMS_PATH = get_json_path("schema_items")
7
+ QUALITIES_PATH = get_json_path("qualities")
8
+ EFFECTS_PATH = get_json_path("effects")
9
+
1
10
  QUALITIES = {
2
11
  "Normal": 0,
3
12
  "0": "Normal",
@@ -1,5 +1,13 @@
1
1
  from .utils import read_lib_json_file
2
2
 
3
+ __all__ = [
4
+ "EFFECTS",
5
+ "SCHEMA_ITEMS",
6
+ "ITEM_NAME_IDS",
7
+ "DEFINDEX_NAMES",
8
+ "DEFINDEX_FULL_NAMES",
9
+ ]
10
+
3
11
  EFFECTS = read_lib_json_file("effects")
4
12
  SCHEMA_ITEMS = read_lib_json_file("schema_items")
5
13
  ITEM_NAME_IDS = read_lib_json_file("item_nameids")
@@ -0,0 +1,67 @@
1
+ import time
2
+
3
+ import requests
4
+
5
+ from .constants import SCHEMA_ITEMS_PATH, SCHEMA_OVERVIEW_PATH
6
+ from .utils import write_json_file
7
+
8
+
9
+ class IEconItems:
10
+ API_URL = "https://api.steampowered.com/IEconItems_440"
11
+ SCHEMA_OVERVIEW = API_URL + "/GetSchemaOverview/v0001"
12
+ PLAYER_ITEMS = API_URL + "/GetPlayerItems/v0001"
13
+ SCHEMA_ITEMS = API_URL + "/GetSchemaItems/v1"
14
+ STORE_DATA = API_URL + "/GetStoreMetaData/v1"
15
+ SCHEMA_URL = API_URL + "/GetSchemaURL/v1"
16
+
17
+ def __init__(self, api_key: str) -> None:
18
+ self.__api_key = api_key
19
+
20
+ def _get(self, url: str, params: dict = {}) -> dict:
21
+ params["key"] = self.__api_key
22
+
23
+ res = requests.get(url, params=params)
24
+
25
+ try:
26
+ return res.json()
27
+ except Exception:
28
+ return {}
29
+
30
+ def get_player_items(self, steamid: str) -> dict:
31
+ return self._get(self.PLAYER_ITEMS, {"steamid": steamid})
32
+
33
+ def get_schema_items(self, start: int = 0, language: str = "en") -> dict:
34
+ return self._get(
35
+ self.SCHEMA_ITEMS, {"language": language.lower(), "start": start}
36
+ )
37
+
38
+ def get_all_schema_items(self, language: str = "en", sleep: float = 5.0) -> list:
39
+ items = []
40
+ start = 0
41
+
42
+ while start is not None:
43
+ response = self.get_schema_items(start, language=language)["result"]
44
+ items += response.get("items", [])
45
+ start = response.get("next") # None if not found
46
+ time.sleep(sleep)
47
+
48
+ return items
49
+
50
+ def get_schema_overview(self, language: str = "en") -> dict:
51
+ return self._get(self.SCHEMA_OVERVIEW, {"language": language.lower()})
52
+
53
+ def get_schema_url(self) -> dict:
54
+ return self._get(self.SCHEMA_URL, {})
55
+
56
+ def get_store_meta_data(self, language: str = "en") -> dict:
57
+ return self._get(self.STORE_DATA, {"language": language.lower()})
58
+
59
+ def set_schema_overview(self, language: str = "en") -> dict:
60
+ schema = self.get_schema_overview(language)
61
+ write_json_file(SCHEMA_OVERVIEW_PATH, schema)
62
+ return schema
63
+
64
+ def set_all_schema_items(self, language: str = "en", sleep: float = 5.0) -> list:
65
+ items = self.get_all_schema_items(language, sleep)
66
+ write_json_file(SCHEMA_ITEMS_PATH, items)
67
+ return items
@@ -5299,6 +5299,10 @@
5299
5299
  "Map Token Bundle 26": [
5300
5300
  2175
5301
5301
  ],
5302
+ "2176": "Map Token Bundle 27",
5303
+ "Map Token Bundle 27": [
5304
+ 2176
5305
+ ],
5302
5306
  "2500": "Map Token Perks",
5303
5307
  "Map Token Perks": [
5304
5308
  2500
@@ -5455,6 +5459,30 @@
5455
5459
  "Map Token Blazehattan": [
5456
5460
  2538
5457
5461
  ],
5462
+ "2539": "Map Token Overcast",
5463
+ "Map Token Overcast": [
5464
+ 2539
5465
+ ],
5466
+ "2540": "Map Token Fortezza",
5467
+ "Map Token Fortezza": [
5468
+ 2540
5469
+ ],
5470
+ "2541": "Map Token Penguin Peak",
5471
+ "Map Token Penguin Peak": [
5472
+ 2541
5473
+ ],
5474
+ "2542": "Map Token Patagonia",
5475
+ "Map Token Patagonia": [
5476
+ 2542
5477
+ ],
5478
+ "2543": "Map Token Cutter",
5479
+ "Map Token Cutter": [
5480
+ 2543
5481
+ ],
5482
+ "2544": "Map Token Maul",
5483
+ "Map Token Maul": [
5484
+ 2544
5485
+ ],
5458
5486
  "5000": "Craft Bar Level 1",
5459
5487
  "Craft Bar Level 1": [
5460
5488
  5000
@@ -7043,6 +7071,18 @@
7043
7071
  "Scream Fortress 2024 War Paint Dummy": [
7044
7072
  5965
7045
7073
  ],
7074
+ "5966": "Self Gift - Stocking Stuffer 2024",
7075
+ "Self Gift - Stocking Stuffer 2024": [
7076
+ 5966
7077
+ ],
7078
+ "5967": "Winter 2024 Cosmetic Key",
7079
+ "Winter 2024 Cosmetic Key": [
7080
+ 5967
7081
+ ],
7082
+ "5968": "Winter 2024 Cosmetic Case",
7083
+ "Winter 2024 Cosmetic Case": [
7084
+ 5968
7085
+ ],
7046
7086
  "5999": "Strange Part (Armory)",
7047
7087
  "Strange Part (Armory)": [
7048
7088
  5999
@@ -7871,6 +7911,30 @@
7871
7911
  "Strange Filter: Blazehattan (Community)": [
7872
7912
  6655
7873
7913
  ],
7914
+ "6656": "Strange Filter: Overcast (Community)",
7915
+ "Strange Filter: Overcast (Community)": [
7916
+ 6656
7917
+ ],
7918
+ "6657": "Strange Filter: Fortezza (Community)",
7919
+ "Strange Filter: Fortezza (Community)": [
7920
+ 6657
7921
+ ],
7922
+ "6658": "Strange Filter: Penguin Peak (Community)",
7923
+ "Strange Filter: Penguin Peak (Community)": [
7924
+ 6658
7925
+ ],
7926
+ "6659": "Strange Filter: Patagonia (Community)",
7927
+ "Strange Filter: Patagonia (Community)": [
7928
+ 6659
7929
+ ],
7930
+ "6660": "Strange Filter: Cutter (Community)",
7931
+ "Strange Filter: Cutter (Community)": [
7932
+ 6660
7933
+ ],
7934
+ "6661": "Strange Filter: Maul (Community)",
7935
+ "Strange Filter: Maul (Community)": [
7936
+ 6661
7937
+ ],
7874
7938
  "8000": "UGC Highlander 1st Place North American Platinum Season 6",
7875
7939
  "UGC Highlander 1st Place North American Platinum Season 6": [
7876
7940
  8000
@@ -30531,20 +30595,20 @@
30531
30595
  "RGLgg 6v6 Advanced Participant Season 13": [
30532
30596
  13723
30533
30597
  ],
30534
- "13724": "RGLgg 6v6 Main Champions Season 13",
30535
- "RGLgg 6v6 Main Champions Season 13": [
30598
+ "13724": "RGLgg 6v6 Division 1 Champions Season 13",
30599
+ "RGLgg 6v6 Division 1 Champions Season 13": [
30536
30600
  13724
30537
30601
  ],
30538
- "13725": "RGLgg 6v6 Main 2nd Place Season 13",
30539
- "RGLgg 6v6 Main 2nd Place Season 13": [
30602
+ "13725": "RGLgg 6v6 Division 1 2nd Place Season 13",
30603
+ "RGLgg 6v6 Division 1 2nd Place Season 13": [
30540
30604
  13725
30541
30605
  ],
30542
- "13726": "RGLgg 6v6 Main 3rd Place Season 13",
30543
- "RGLgg 6v6 Main 3rd Place Season 13": [
30606
+ "13726": "RGLgg 6v6 Division 1 3rd Place Season 13",
30607
+ "RGLgg 6v6 Division 1 3rd Place Season 13": [
30544
30608
  13726
30545
30609
  ],
30546
- "13727": "RGLgg 6v6 Main Participant Season 13",
30547
- "RGLgg 6v6 Main Participant Season 13": [
30610
+ "13727": "RGLgg 6v6 Division 1 Participant Season 13",
30611
+ "RGLgg 6v6 Division 1 Participant Season 13": [
30548
30612
  13727
30549
30613
  ],
30550
30614
  "13728": "RGLgg 6v6 Intermediate Champions Season 13",
@@ -32675,6 +32739,46 @@
32675
32739
  "ozfortress Highlander Main Participant Season 8": [
32676
32740
  14260
32677
32741
  ],
32742
+ "14261": "Ghoulish Gambit Corrupted Crystal 2024",
32743
+ "Ghoulish Gambit Corrupted Crystal 2024": [
32744
+ 14261
32745
+ ],
32746
+ "14262": "Ghoulish Gambit Uncorrupted Crystal 2024",
32747
+ "Ghoulish Gambit Uncorrupted Crystal 2024": [
32748
+ 14262
32749
+ ],
32750
+ "14263": "Ghoulish Gambit Mostly-Corrupted Crystal 2024",
32751
+ "Ghoulish Gambit Mostly-Corrupted Crystal 2024": [
32752
+ 14263
32753
+ ],
32754
+ "14264": "Ghoulish Gambit Haunted Tank 2024",
32755
+ "Ghoulish Gambit Haunted Tank 2024": [
32756
+ 14264
32757
+ ],
32758
+ "14265": "Ghoulish Gambit Poisonous Potato 2024",
32759
+ "Ghoulish Gambit Poisonous Potato 2024": [
32760
+ 14265
32761
+ ],
32762
+ "14266": "AsiaFortress Liquid.tf Newbie Cup 9 1st Place",
32763
+ "AsiaFortress Liquid.tf Newbie Cup 9 1st Place": [
32764
+ 14266
32765
+ ],
32766
+ "14267": "AsiaFortress Liquid.tf Newbie Cup 9 2nd Place",
32767
+ "AsiaFortress Liquid.tf Newbie Cup 9 2nd Place": [
32768
+ 14267
32769
+ ],
32770
+ "14268": "AsiaFortress Liquid.tf Newbie Cup 9 3rd Place",
32771
+ "AsiaFortress Liquid.tf Newbie Cup 9 3rd Place": [
32772
+ 14268
32773
+ ],
32774
+ "14269": "AsiaFortress Liquid.tf Newbie Cup 9 Participant",
32775
+ "AsiaFortress Liquid.tf Newbie Cup 9 Participant": [
32776
+ 14269
32777
+ ],
32778
+ "14270": "AsiaFortress Liquid.tf Newbie Cup 9 Coach",
32779
+ "AsiaFortress Liquid.tf Newbie Cup 9 Coach": [
32780
+ 14270
32781
+ ],
32678
32782
  "15000": "concealedkiller_sniperrifle_nightowl",
32679
32783
  "concealedkiller_sniperrifle_nightowl": [
32680
32784
  15000
@@ -39334,5 +39438,109 @@
39334
39438
  "31489": "Defaced Detonator",
39335
39439
  "Defaced Detonator": [
39336
39440
  31489
39441
+ ],
39442
+ "31491": "Taunt: Curtain Call",
39443
+ "Taunt: Curtain Call": [
39444
+ 31491
39445
+ ],
39446
+ "31492": "Taunt: Peace!",
39447
+ "Taunt: Peace!": [
39448
+ 31492
39449
+ ],
39450
+ "31493": "Taunt: Fore-Head Slice",
39451
+ "Taunt: Fore-Head Slice": [
39452
+ 31493
39453
+ ],
39454
+ "31494": "Dapper Noel",
39455
+ "Dapper Noel": [
39456
+ 31494
39457
+ ],
39458
+ "31495": "The Necroprancer",
39459
+ "The Necroprancer": [
39460
+ 31495
39461
+ ],
39462
+ "31496": "The Battle Music",
39463
+ "The Battle Music": [
39464
+ 31496
39465
+ ],
39466
+ "31497": "Hot Spaniel",
39467
+ "Hot Spaniel": [
39468
+ 31497
39469
+ ],
39470
+ "31498": "Frostbite Fit",
39471
+ "Frostbite Fit": [
39472
+ 31498
39473
+ ],
39474
+ "31499": "L'aire Filteure",
39475
+ "L'aire Filteure": [
39476
+ 31499
39477
+ ],
39478
+ "31500": "Poleur Voyeur",
39479
+ "Poleur Voyeur": [
39480
+ 31500
39481
+ ],
39482
+ "31501": "Le Frosteaux",
39483
+ "Le Frosteaux": [
39484
+ 31501
39485
+ ],
39486
+ "31502": "Scrooge McDoc",
39487
+ "Scrooge McDoc": [
39488
+ 31502
39489
+ ],
39490
+ "31503": "The Checkered Past",
39491
+ "The Checkered Past": [
39492
+ 31503
39493
+ ],
39494
+ "31504": "Consigliere's Coverup",
39495
+ "Consigliere's Coverup": [
39496
+ 31504
39497
+ ],
39498
+ "31505": "The Crimbo Cap",
39499
+ "The Crimbo Cap": [
39500
+ 31505
39501
+ ],
39502
+ "31506": "The Triple Jumper",
39503
+ "The Triple Jumper": [
39504
+ 31506
39505
+ ],
39506
+ "31507": "Polar Charger",
39507
+ "Polar Charger": [
39508
+ 31507
39509
+ ],
39510
+ "31508": "Field Fatigues",
39511
+ "Field Fatigues": [
39512
+ 31508
39513
+ ],
39514
+ "31509": "Cossack Camo",
39515
+ "Cossack Camo": [
39516
+ 31509
39517
+ ],
39518
+ "31510": "Battle Balaclava",
39519
+ "Battle Balaclava": [
39520
+ 31510
39521
+ ],
39522
+ "31511": "The Top Brass",
39523
+ "The Top Brass": [
39524
+ 31511
39525
+ ],
39526
+ "31512": "Commanding Presence",
39527
+ "Commanding Presence": [
39528
+ 31512
39529
+ ],
39530
+ "31513": "Mine Sweepers",
39531
+ "Mine Sweepers": [
39532
+ 31513
39533
+ ],
39534
+ "31514": "Buck's Brim",
39535
+ "Buck's Brim": [
39536
+ 31514
39537
+ ],
39538
+ "31515": "The Westcoat",
39539
+ "The Westcoat": [
39540
+ 31515
39541
+ ],
39542
+ "31516": "Snug Sharpshooter",
39543
+ "Snug Sharpshooter": [
39544
+ 31516
39337
39545
  ]
39338
39546
  }