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'
Exemple #4
0
			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())