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'
import os from vdfparser import VDF schema = VDF() items = schema.get_items() prefabs = schema.get_prefabs() allitems = dict(items, **prefabs) max = [0]*14 modelmap = {} allitems.update({ # Extra data for engineer buildings 'Sentry Gun Level 1': { 'model_world': 'models/buildings/sentry1.mdl', 'item_name': '#TF_Object_Sentry', 'level': '1', 'used_by_classes': { 'engineer': '1' }, 'item_slot': 'building2' }, 'Sentry Gun Level 2': { 'model_world': 'models/buildings/sentry2_optimized.mdl', 'item_name': '#TF_Object_Sentry', 'level': '2', 'used_by_classes': { 'engineer': '1' }, 'item_slot': 'building2' }, 'Sentry Gun Level 3': { 'model_world': 'models/buildings/sentry3_optimized.mdl', 'item_name': '#TF_Object_Sentry', 'level': '3',
def gen_allitems(): schema = VDF() items = schema.get_items() prefabs = schema.get_prefabs() allitems = dict(items, **prefabs) # Fix for some broken weapons for key in allitems: item = allitems[key] if 'prefab' in item and 'extra_wearable' not in item: prefab = item['prefab'] if isinstance(prefab, list) and prefab[0] == 'valve': # Valve are silly and occasionally put their name into the prefabs prefab = prefab[1] if prefab[-11:] == ' marketable': prefab = prefab[:-11] prefab = prefab.rpartition(' ')[2] if prefab == 'weapon_melee_allclass' or prefab == 'weapon_shotgun': # Malformed & duplicate prefabs continue if prefab[:7] == 'weapon_' or prefab in ['holy_mackerel', 'axtinguisher', 'buff_banner', 'sandvich', 'ubersaw', 'frontier_justice', 'huntsman', 'ambassador']: item['item_slot'] = prefabs[prefab]['item_slot'] item['used_by_classes'] = prefabs[prefab]['used_by_classes'] # Some hard-coded additions. This _vaguely_ mimics the schema's true format. buildings = { 'Sentry Gun Level 1': { 'model_world': 'models/buildables/sentry1.mdl', 'item_name': '#TF_Object_Sentry', 'level': '1', }, 'Sentry Gun Level 2': { 'model_world': 'models/buildables/sentry2_optimized.mdl', 'item_name': '#TF_Object_Sentry', 'level': '2', }, 'Sentry Gun Level 3': { 'model_world': 'models/buildables/sentry3_optimized.mdl', 'item_name': '#TF_Object_Sentry', 'level': '3', }, 'Dispenser Level 1': { 'model_world': 'models/buildables/dispenser_toolbox.mdl', 'item_name': '#TF_Object_Dispenser', 'level': '1', }, 'Dispenser Level 2': { 'model_world': 'models/buildables/dispenser_lvl2.mdl', 'item_name': '#TF_Object_Dispenser', 'level': '2', }, 'Dispenser Level 3': { 'model_world': 'models/buildables/dispenser_lvl3.mdl', 'item_name': '#TF_Object_Dispenser', 'level': '3', }, 'Teleporter': { 'model_world': 'models/buildables/teleporter.mdl', 'item_name': '#TF_Object_Tele', }, } for building in buildings: buildings[building]['used_by_classes'] = {'engineer': '1'} buildings[building]['item_slot'] = 'building2' allitems.update(buildings) for TF_class in TF_classes: allitems[TF_class.title()] = { 'model_world': 'models/player/%s.mdl' % TF_class, 'model_player': 'models/player/%s_morphs_high.mdl' % TF_class, 'item_name': '#TF_class_Name_%s' % TF_class, 'used_by_classes': {TF_class: '1'}, 'item_slot': 'class' } # Exceptions to exceptions allitems['Demoman']['model_player'] = 'models/player/demo.mdl' allitems['Demoman']['model_world'] = 'models/player/demo_morphs_high.mdl' allitems['Heavy']['item_name'] = '#TF_class_Name_HWGuy' return allitems