1- from tf2_data import EFFECTS , KILLSTREAKS , QUALITIES , SchemaItems
1+ from tf2_data import SchemaItems
22from tf2_sku import to_sku
33
4+ from .item_name import (
5+ get_effect_in_name ,
6+ get_quality_from_name ,
7+ has_australium_in_name ,
8+ has_basic_killstreak_in_name ,
9+ has_festivized_in_name ,
10+ has_professional_killstreak_in_name ,
11+ has_specialized_killstreak_in_name ,
12+ has_strange_in_name ,
13+ is_craftable ,
14+ )
415from .sku import (
5- get_sku_effect ,
6- get_sku_killstreak ,
16+ australium_in_sku ,
17+ festive_in_sku ,
18+ get_effect_name_from_sku ,
19+ get_killstreak_name_from_sku ,
720 sku_is_uncraftable ,
821 sku_to_defindex ,
922 sku_to_quality_name ,
@@ -32,7 +45,7 @@ def defindex_to_full_name(self, defindex: int) -> str:
3245
3346 return self .defindex_full_names .get (str (defindex ), "" )
3447
35- def name_to_defindex (self , name : str ) -> int :
48+ def name_to_defindex (self , name : str , index : int = 0 ) -> int :
3649 if name == "Random Craft Weapon" :
3750 return - 50
3851
@@ -57,9 +70,11 @@ def name_to_defindex(self, name: str) -> int:
5770 if name == "Name Tag" :
5871 return defindexes [last_index ]
5972
60- return defindexes [0 ]
73+ print (index )
74+ print (defindexes )
75+ return defindexes [index ]
6176
62- def defindex_to_image_url (self , defindex : int , large : bool = False ) -> str :
77+ def defindex_to_image_url (self , defindex : int , large_image : bool = False ) -> str :
6378 # random craft weapon => shotgun
6479 if defindex == - 50 :
6580 defindex = 9
@@ -72,42 +87,28 @@ def defindex_to_image_url(self, defindex: int, large: bool = False) -> str:
7287 if item ["defindex" ] != defindex :
7388 continue
7489
75- return item ["image_url " ] if not large else item ["image_url_large " ]
90+ return item ["image_url_large " ] if large_image else item ["image_url " ]
7691
7792 return ""
7893
79- def sku_to_image_url (self , sku : str , large : bool = False ) -> str :
94+ def sku_to_image_url (self , sku : str , large_image : bool = False ) -> str :
8095 defindex = sku_to_defindex (sku )
81- return self .defindex_to_image_url (defindex , large )
82-
83- def name_to_sku (self , name : str ) -> str :
84- """This is not accurate, be careful when using this."""
85- parts = name .split (" " )
86-
87- defindex = - 1
88- craftable = True
89- quality = 6
96+ return self .defindex_to_image_url (defindex , large_image )
9097
91- for part in parts :
92- if part in ["Uncraftable" , "Non-Craftable" ]:
93- craftable = False
94-
95- if part in QUALITIES :
96- quality = QUALITIES [part ]
98+ def get_defindex_from_name (self , name : str , entry_index : int = 0 ) -> int :
99+ # try whole name, then remove everything till the
100+ # first space for each iteration if defindex
101+ # for that name doesnt exist
97102
103+ # example:
104+ # Uncraftable Strange Team Captain => -1
105+ # Strange Team Captain => -1
106+ # Team Captain => 378 != -1, so break
98107 defindex_name = name
108+ defindex = - 1
99109
100110 while True :
101- # try whole name, then remove everything till the
102- # first space for each iteration if defindex
103- # for that name doesnt exist
104-
105- # example:
106- # Uncraftable Strange Team Captain => -1
107- # Strange Team Captain => -1
108- # Team Captain => 378 != -1, so break
109-
110- defindex = self .name_to_defindex (defindex_name )
111+ defindex = self .name_to_defindex (defindex_name , entry_index )
111112
112113 if defindex != - 1 :
113114 break
@@ -119,10 +120,46 @@ def name_to_sku(self, name: str) -> str:
119120
120121 defindex_name = defindex_name [index + 1 :]
121122
123+ return defindex
124+
125+ def name_to_sku (self , name : str ) -> str :
126+ quality = get_quality_from_name (name )
127+ defindex = self .get_defindex_from_name (name )
128+ effect = get_effect_in_name (name )
129+ is_australium = False
130+ killstreak_tier = - 1
131+
132+ if effect != - 1 :
133+ quality = 5
134+
135+ if has_professional_killstreak_in_name (name ):
136+ killstreak_tier = 3
137+
138+ if has_specialized_killstreak_in_name (name ):
139+ killstreak_tier = 2
140+
141+ if has_basic_killstreak_in_name (name ):
142+ killstreak_tier = 1
143+
144+ # must be strange to be australium
145+ if "Australium Gold" not in name and has_australium_in_name (name ):
146+ quality = 11
147+ is_australium = True
148+
149+ # australium weapons are the second entry in the defindex list, need to
150+ # get the defindex again
151+ if is_australium :
152+ defindex = self .get_defindex_from_name (name , 1 )
153+
122154 sku_properties = {
123155 "defindex" : defindex ,
124156 "quality" : quality ,
125- "craftable" : craftable ,
157+ "effect" : effect ,
158+ "strange" : has_strange_in_name (name ) and quality != 11 ,
159+ "festivized" : has_festivized_in_name (name ),
160+ "craftable" : is_craftable (name ),
161+ "killstreak_tier" : killstreak_tier ,
162+ "australium" : is_australium ,
126163 }
127164
128165 return to_sku (sku_properties )
@@ -135,49 +172,54 @@ def sku_to_full_name(self, sku: str) -> str:
135172 defindex = sku_to_defindex (sku )
136173 return self .defindex_to_full_name (defindex )
137174
138- def sku_to_name (self , sku : str , use_uncraftable : bool = True ) -> str :
175+ def format_name (
176+ self ,
177+ item_name : str ,
178+ quality : str = "" ,
179+ craftable : str = "" ,
180+ effect : str = "" ,
181+ killstreak : str = "" ,
182+ strange : str = "" ,
183+ festivized : str = "" ,
184+ ) -> str :
185+ return "" .join (
186+ [killstreak , strange , effect , craftable , quality , festivized , item_name ]
187+ )
188+
189+ def sku_to_name (self , sku : str , as_uncraftable : bool = True ) -> str :
139190 name = self .sku_to_base_name (sku )
140- craftable = ""
141191 quality = sku_to_quality_name (sku )
142- effect = get_sku_effect (sku )
143- killstreak = get_sku_killstreak (sku )
144- strange = strange_in_sku (sku )
192+ craftable = ""
193+ festivized = "Festivized " if festive_in_sku (sku ) else ""
194+ effect = get_effect_name_from_sku (sku )
195+ killstreak = get_killstreak_name_from_sku (sku )
196+ is_australium = australium_in_sku (sku )
197+ strange = ""
198+
199+ if strange_in_sku (sku ):
200+ strange = "Strange "
145201
146202 if quality not in ["Unusual" , "Unique" ]:
147203 quality += " "
148204 else :
149205 quality = ""
150206
151- if effect != - 1 :
152- effect = EFFECTS [str (effect )] + " "
153- else :
154- effect = ""
155-
156- if killstreak != - 1 :
157- killstreak = KILLSTREAKS [str (killstreak )] + " "
158- else :
159- killstreak = ""
160-
161- if strange :
162- strange = "Strange "
163- else :
164- strange = ""
207+ if is_australium :
208+ quality = ""
209+ name = "Australium " + name
165210
166211 if sku_is_uncraftable (sku ):
167- if use_uncraftable :
212+ if as_uncraftable :
168213 craftable = "Uncraftable "
169214 else :
170215 craftable = "Non-Craftable "
171216
172- festive = ""
173- festivized = ""
174- wear = ""
175-
176- # TODO: add killstreaks and other properties (strange unusual etc.)
177- # festive
178- # festivzed
179- # wear
180-
181- return "" .join (
182- [killstreak , strange , festive , festivized , craftable , quality , name , wear ]
217+ return self .format_name (
218+ name ,
219+ quality = quality ,
220+ craftable = craftable ,
221+ effect = effect ,
222+ killstreak = killstreak ,
223+ strange = strange ,
224+ festivized = festivized ,
183225 )
0 commit comments