def gen_modelmap(allitems): modelmap = {} schema = VDF() for key in allitems: item = allitems[key] # Get model name. if 'model_world' in item: modelmap[item['model_world']] = [key] if 'model_player' in item: modelmap[item['model_player']] = [key] if 'model_player_per_class' in item: for model in item['model_player_per_class'].values(): modelmap[model] = [key] if 'visuals' in item and 'styles' in item['visuals']: for style in item['visuals']['styles'].values(): if 'model_player' in style: if 'name' not in style: pass # modelmap[modelname] = [key, { # 'coin_summer2015_gravel': 'Gun Mettle Campaign Coin (Gravel)', # 'coin_summer2015_bronze': 'Gun Mettle Campaign Coin (Bronze)', # 'coin_summer2015_silver': 'Gun Mettle Campaign Coin (Silver)', # 'coin_summer2015_gold': 'Gun Mettle Campaign Coin (Gold)', # 'stamp_winter2016': 'Tough Break Stamp', # }[modelname]] else: modelmap[style['model_player']] = [key, style['name']] if 'model_player_per_class' in style: for model in item['model_player_per_class'].values(): modelmap[model] = [key, style['name']] # Convert the model name to a readable string. This is using .keys() and .values() because we change the dict during iteration. for (key, value) in zip(modelmap.keys(), modelmap.values()): del modelmap[key] propername = schema.get_localized_item_name(allitems[value[0]]['item_name']) if propername == 'The Essential Accessories': propername = 'Essential Accessories' if propername == 'The Superfan': propername = 'Superfan' if propername == 'The Athletic Supporter': propername = 'Athletic Supporter' elif propername == 'Teleporter': propername = 'Teleporters' if len(value) == 2: # Styles add-in style = schema.get_localized_item_name(value[1]) if style: propername += '|style='+style if 'level' in allitems[value[0]]: # Hack for engineer buildings propername += '|level='+allitems[value[0]]['level'] if 'vision_filter_flags' in allitems[value[0]]: # Romevision bot armor continue modelname = re.search('/([a-zA-Z0-9_]*)\.mdl', key) if modelname: modelmap[modelname.group(1)] = [value[0], propername] return modelmap
def add_items(): schema = VDF() prefabs = schema.get_prefabs() allitems = dict(schema.get_items(), **prefabs) global regionsDict for item in allitems: item = allitems[item] if 'item_name' in item: TF_classlist = {} if 'used_by_classes' in item: TF_classlist = item['used_by_classes'] itemname = schema.get_localized_item_name(item['item_name']) if verbose: print 'Processing', itemname if 'equip_region' in item: if isinstance(item['equip_region'], dict): # Valve are silly and on rare occasions put multiple regions in this field for region in item['equip_region']: if region != 'hat': add_region(itemname, TF_classlist, region.lower()) else: if item['equip_region'] != 'hat': add_region(itemname, TF_classlist, item['equip_region'].lower()) elif 'equip_regions' in item: regions = item['equip_regions'] if isinstance(regions, basestring): # Valve are also silly because sometimes they put a single region string here if regions != 'hat': add_region(itemname, TF_classlist, regions.lower()) else: for region in regions: if region != 'hat': add_region(itemname, TF_classlist, region.lower()) elif 'prefab' in item: if isinstance(item['prefab'], list): # Valve are even sillier because sometimes they put their own name in the prefabs list item['prefab'] = item['prefab'][1] if item['prefab'] in prefabs: prefab = prefabs[item['prefab']] if 'used_by_classes' in prefab: TF_classlist.update(prefab['used_by_classes']) if 'equip_region' in prefab and prefab['equip_region'] != 'hat': region = prefab['equip_region'] add_region(itemname, TF_classlist, region) if item['prefab'] in ['misc', 'valve misc', 'base_misc', 'base_hat', 'ash_remains base_misc']: if verbose: print 'Item', itemname, 'has no equip region. Prefab is:', item['prefab'] add_region(itemname, TF_classlist, 'none')
def upload_item_icons(wikiUsername, wikiPassword, folder, wikiAddress = r'http://wiki.tf2.com/w/', wikiApi = r'http://wiki.tf2.com/w/api.php'): """ Crops and uploads item icons to wiki. """ uploader = wikiUpload.wikiUploader(wikiUsername, wikiPassword, wikiAddress) wiki = wikitools.wiki.Wiki(wikiApi) wiki.login(wikiUsername, wikiPassword) schema = VDF() fails = False allitems = schema.get_items() for file in get_file_list(folder): imgname = re.sub(r'_large\.png', '', file) print imgname item = get_item_from_inventory(allitems, imgname) if item is None: f = open('faileditemiconuploads.txt', 'ab').write(file + '\n') fails = True continue itemname = schema.get_localized_item_name(item['item_name']).encode('utf8') newfilename = r'Item icon {0}.png'.format(itemname) crop_image(file, folder, newfilename) if pngcrush: process = Popen(['pngcrush', '-rem', 'gAMA', '-rem', 'cHRM', '-rem', 'iCCP', '-rem', 'sRGB', '-brute', folder + os.sep + newfilename, folder + os.sep + newfilename + 'temp'], stdout = subprocess.PIPE).communicate()[0] os.remove(folder + os.sep + newfilename) os.rename(folder + os.sep + newfilename + 'temp', folder + os.sep + newfilename) success = False n = 0 while n < 5 and not success: try: uploader.upload(folder + os.sep + newfilename, 'File:' + newfilename, 'Uploaded new TF2B icon', '', overwrite=True) success = True except: n += 1 if not success: print 'Could not upload', newfilename if fails: print 'Some files could not be uploaded. Please see faileditemiconuploads.txt'
if len(parts) > 5 and parts[5][:5] == 'shell': # Exception for a badly named file continue modelname = parts[0] for p in range(1,len(parts)): if parts[p] == parts[0]: for q in range(1, p): modelname += '_'+parts[q] break if p == len(parts)-1: modelname = file if modelname not in modelmap: continue name = modelmap[modelname] if 'vision_filter_flags' in allitems[name[0]]: # Romevision bot armor continue propername = schema.get_localized_item_name(allitems[name[0]]['item_name']) if propername == 'The Essential Accessories': propername = 'Essential Accessories' elif propername == 'Teleporter': propername = 'Teleporters' if len(name) == 2: # Styles add-in propername += '|style='+schema.get_localized_item_name(name[1]) if 'level' in allitems[name[0]]: # Hack for engineer buildings propername += '|level='+allitems[name[0]]['level'] lines = f.split('\r\n') count = 0 for i in range(len(lines)): if lines[i] == 'triangles': count = (len(lines) - i - 3)/4 break
for TF_class in TF_classes: regionsDict[region][TF_class] = [] if verbose: print 'Added region', region for TF_class in TF_classlist: if itemname not in regionsDict[region][TF_class]: regionsDict[region][TF_class].append(itemname) print 'Adding items...' for item in allitems: item = allitems[item] if 'item_name' in item: TF_classlist = {} if 'used_by_classes' in item: TF_classlist = item['used_by_classes'] itemname = schema.get_localized_item_name(item['item_name']) if verbose: print 'Processing', itemname if 'equip_region' in item: if isinstance(item['equip_region'], dict): # Valve are silly and on rare occasions put multiple regions in this field for region in item['equip_region']: if region != 'hat': add_region(itemname, TF_classlist, region.lower()) else: if item['equip_region'] != 'hat': add_region(itemname, TF_classlist, item['equip_region'].lower()) elif 'equip_regions' in item: regions = item['equip_regions'] if isinstance(regions, basestring): # Valve are also silly because sometimes they put a single region string here if regions != 'hat': add_region(itemname, TF_classlist, regions.lower())