diff --git a/sc2reader/data/attributes.json b/sc2reader/data/attributes.json index 53563b8e..7922c1cc 100644 --- a/sc2reader/data/attributes.json +++ b/sc2reader/data/attributes.json @@ -292,6 +292,8 @@ "Team", { "T1": "Team 1", + "T10": "Team 10", + "T11": "Team 11", "T2": "Team 2", "T3": "Team 3", "T4": "Team 4", @@ -299,9 +301,7 @@ "T6": "Team 6", "T7": "Team 7", "T8": "Team 8", - "T9": "Team 9", - "T10": "Team 10", - "T11": "Team 11" + "T9": "Team 9" } ], "3000": [ @@ -317,8 +317,12 @@ "3001": [ "Race", { + "InfT": "Infested Terran", + "PZrg": "Primal Zerg", "Prot": "Protoss", "RAND": "Random", + "TerH": "Terran Horner", + "TerT": "Terran Tychus", "Terr": "Terran", "Zerg": "Zerg" } @@ -705,7 +709,7 @@ "Arta": "Artanis", "Deha": "Dehaka", "Feni": "Fenix", - "Horn": "Horner", + "Horn": "Han & Horner", "Kara": "Karax", "Kerr": "Kerrigan", "Meng": "Mengsk", @@ -759,6 +763,142 @@ "90": "90 Minutes" } ], + "3016": [ + "Commander Mastery Level", + { + "0": "0", + "1": "1", + "10": "10", + "100": "100", + "11": "11", + "12": "12", + "13": "13", + "14": "14", + "15": "15", + "16": "16", + "17": "17", + "18": "18", + "19": "19", + "2": "2", + "20": "20", + "21": "21", + "22": "22", + "23": "23", + "24": "24", + "25": "25", + "26": "26", + "27": "27", + "28": "28", + "29": "29", + "3": "3", + "30": "30", + "31": "31", + "32": "32", + "33": "33", + "34": "34", + "35": "35", + "36": "36", + "37": "37", + "38": "38", + "39": "39", + "4": "4", + "40": "40", + "41": "41", + "42": "42", + "43": "43", + "44": "44", + "45": "45", + "46": "46", + "47": "47", + "48": "48", + "49": "49", + "5": "5", + "50": "50", + "51": "51", + "52": "52", + "53": "53", + "54": "54", + "55": "55", + "56": "56", + "57": "57", + "58": "58", + "59": "59", + "6": "6", + "60": "60", + "61": "61", + "62": "62", + "63": "63", + "64": "64", + "65": "65", + "66": "66", + "67": "67", + "68": "68", + "69": "69", + "7": "7", + "70": "70", + "71": "71", + "72": "72", + "73": "73", + "74": "74", + "75": "75", + "76": "76", + "77": "77", + "78": "78", + "79": "79", + "8": "8", + "80": "80", + "81": "81", + "82": "82", + "83": "83", + "84": "84", + "85": "85", + "86": "86", + "87": "87", + "88": "88", + "89": "89", + "9": "9", + "90": "90", + "91": "91", + "92": "92", + "93": "93", + "94": "94", + "95": "95", + "96": "96", + "97": "97", + "98": "98", + "99": "99" + } + ], + "3017": [ + "Commander Mastery Tier", + { + "0": "0", + "1": "1", + "10": "10", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + ], + "3019": [ + "Random Commander", + { + "no": "Not Random", + "yes": "Random" + } + ], + "3020": [ + "Commander Is Trial", + { + "no": "Not Trial", + "yes": "Trial" + } + ], "3102": [ "AI Build", { @@ -1570,7 +1710,251 @@ "no": "Not Ready", "yes": "Ready" } + ], + "5000": [ + "Commander Mastery Talent", + { + "0": "0", + "1": "1", + "10": "10", + "11": "11", + "12": "12", + "13": "13", + "14": "14", + "15": "15", + "16": "16", + "17": "17", + "18": "18", + "19": "19", + "2": "2", + "20": "20", + "21": "21", + "22": "22", + "23": "23", + "24": "24", + "25": "25", + "26": "26", + "27": "27", + "28": "28", + "29": "29", + "3": "3", + "30": "30", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + ], + "5001": [ + "Commander Mastery Talent", + { + "0": "0", + "1": "1", + "10": "10", + "11": "11", + "12": "12", + "13": "13", + "14": "14", + "15": "15", + "16": "16", + "17": "17", + "18": "18", + "19": "19", + "2": "2", + "20": "20", + "21": "21", + "22": "22", + "23": "23", + "24": "24", + "25": "25", + "26": "26", + "27": "27", + "28": "28", + "29": "29", + "3": "3", + "30": "30", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + ], + "5002": [ + "Commander Mastery Talent", + { + "0": "0", + "1": "1", + "10": "10", + "11": "11", + "12": "12", + "13": "13", + "14": "14", + "15": "15", + "16": "16", + "17": "17", + "18": "18", + "19": "19", + "2": "2", + "20": "20", + "21": "21", + "22": "22", + "23": "23", + "24": "24", + "25": "25", + "26": "26", + "27": "27", + "28": "28", + "29": "29", + "3": "3", + "30": "30", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + ], + "5003": [ + "Commander Mastery Talent", + { + "0": "0", + "1": "1", + "10": "10", + "11": "11", + "12": "12", + "13": "13", + "14": "14", + "15": "15", + "16": "16", + "17": "17", + "18": "18", + "19": "19", + "2": "2", + "20": "20", + "21": "21", + "22": "22", + "23": "23", + "24": "24", + "25": "25", + "26": "26", + "27": "27", + "28": "28", + "29": "29", + "3": "3", + "30": "30", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + ], + "5004": [ + "Commander Mastery Talent", + { + "0": "0", + "1": "1", + "10": "10", + "11": "11", + "12": "12", + "13": "13", + "14": "14", + "15": "15", + "16": "16", + "17": "17", + "18": "18", + "19": "19", + "2": "2", + "20": "20", + "21": "21", + "22": "22", + "23": "23", + "24": "24", + "25": "25", + "26": "26", + "27": "27", + "28": "28", + "29": "29", + "3": "3", + "30": "30", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + ], + "5005": [ + "Commander Mastery Talent", + { + "0": "0", + "1": "1", + "10": "10", + "11": "11", + "12": "12", + "13": "13", + "14": "14", + "15": "15", + "16": "16", + "17": "17", + "18": "18", + "19": "19", + "2": "2", + "20": "20", + "21": "21", + "22": "22", + "23": "23", + "24": "24", + "25": "25", + "26": "26", + "27": "27", + "28": "28", + "29": "29", + "3": "3", + "30": "30", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + ], + "5100": [ + "Brutal Plus Level", + { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6" + } + ], + "5200": [ + "Brutal Plus Is Retry", + { + "no": "No", + "yes": "Yes" + } + ], + "5300": [ + "Commander Prestige Level", + { + "0": "0", + "1": "1", + "2": "2", + "3": "3" + } ] }, - "decisions": "(dp0\nc__builtin__\nfrozenset\np1\n((lp2\nS'Hard'\np3\naVHarder\np4\na(I3004\nS'Hard'\np5\ntp6\natp7\nRp8\ng4\nsg1\n((lp9\n(I2001\nS'1v1'\np10\ntp11\naS'1 v 1'\np12\naV1v1\np13\natp14\nRp15\ng13\nsg1\n((lp16\n(I3104\nS'AB04'\np17\ntp18\naS'Agressive Push'\np19\naVAggressive Push\np20\natp21\nRp22\ng20\nsg1\n((lp23\nS'Agressive Push'\np24\naVAggressive Push\np25\na(I3199\nS'AB04'\np26\ntp27\natp28\nRp29\ng25\nsg1\n((lp30\nV6v6\np31\naS'6 v 6'\np32\na(I2001\nS'6v6'\np33\ntp34\natp35\nRp36\ng31\nsg1\n((lp37\nS'Agressive Push'\np38\na(I3102\nS'AB04'\np39\ntp40\naVAggressive Push\np41\natp42\nRp43\ng41\nsg1\n((lp44\nI2003\naVTeams2v2\np45\naS'Team'\np46\natp47\nRp48\ng45\nsg1\n((lp49\nVLadder\np50\naS'Automated Match Making'\np51\na(I3009\nS'Amm'\np52\ntp53\natp54\nRp55\ng50\nsg1\n((lp56\n(I2001\nS'5v5'\np57\ntp58\naS'5 v 5'\np59\naV5v5\np60\natp61\nRp62\ng60\nsg1\n((lp63\nVFree For All Teams\np64\naS'Free For All Archon'\np65\na(I2000\nVFFAT\np66\ntp67\natp68\nRp69\ng65\nsg1\n((lp70\nI3141\naVAI Build (Terran)\np71\naS'AI Build'\np72\natp73\nRp74\ng71\nsg1\n((lp75\n(I2001\nS'3v3'\np76\ntp77\naS'3 v 3'\np78\naV3v3\np79\natp80\nRp81\ng79\nsg1\n((lp82\n(I3168\nS'AB04'\np83\ntp84\naS'Agressive Push'\np85\naVAggressive Push\np86\natp87\nRp88\ng86\nsg1\n((lp89\n(I3200\nS'AB04'\np90\ntp91\naS'Agressive Push'\np92\naVAggressive Push\np93\natp94\nRp95\ng93\nsg1\n((lp96\nVAI Build (Protoss)\np97\naI3174\naS'AI Build'\np98\natp99\nRp100\ng97\nsg1\n((lp101\nS'Very Hard'\np102\naVElite\np103\na(I3004\nS'VyHd'\np104\ntp105\natp106\nRp107\ng103\nsg1\n((lp108\nS'Agressive Push'\np109\naVAggressive Push\np110\na(I3167\nS'AB04'\np111\ntp112\natp113\nRp114\ng110\nsg1\n((lp115\nI3204\naS'AI Build'\np116\naVAI Build (Zerg)\np117\natp118\nRp119\ng117\nsg1\n((lp120\nVInsane\np121\naS'Cheater 3 (Insane)'\np122\na(I3004\nS'Insa'\np123\ntp124\natp125\nRp126\ng121\nsg1\n((lp127\n(I3007\nS'Watc'\np128\ntp129\naS'Observer'\np130\naS'Watcher'\np131\natp132\nRp133\ng130\nsg1\n((lp134\nI3205\naVAI Build (Zerg)\np135\naS'AI Build'\np136\natp137\nRp138\ng135\nsg1\n((lp139\nVTeams5v5\np140\naS'Team'\np141\naI2007\natp142\nRp143\ng140\nsg1\n((lp144\nI3171\naVAI Build (Protoss)\np145\naS'AI Build'\np146\natp147\nRp148\ng145\nsg1\n((lp149\nS'Unknown'\np150\naI2012\naS'Team'\np151\natp152\nRp153\ng151\nsg1\n((lp154\nI3173\naS'AI Build'\np155\naVAI Build (Protoss)\np156\natp157\nRp158\ng156\nsg1\n((lp159\nVAI Build (Terran)\np160\naI3142\naS'AI Build'\np161\natp162\nRp163\ng160\nsg1\n((lp164\nI3172\naVAI Build (Protoss)\np165\naS'AI Build'\np166\natp167\nRp168\ng165\nsg1\n((lp169\nS'Level 1 (Very Easy)'\np170\na(I3004\nS'VyEy'\np171\ntp172\naVVery Easy\np173\natp174\nRp175\ng173\nsg1\n((lp176\nS'Agressive Push'\np177\naVAggressive Push\np178\na(I3135\nS'AB04'\np179\ntp180\natp181\nRp182\ng178\nsg1\n((lp183\nV2v2\np184\naS'2 v 2'\np185\na(I2001\nS'2v2'\np186\ntp187\natp188\nRp189\ng184\nsg1\n((lp190\nS'Agressive Push'\np191\na(I3166\nS'AB04'\np192\ntp193\naVAggressive Push\np194\natp195\nRp196\ng194\nsg1\n((lp197\nVTeamsFFA\np198\naI2006\naS'Team'\np199\natp200\nRp201\ng198\nsg1\n((lp202\nS'AI Build'\np203\naVAI Build (Terran)\np204\naI3143\natp205\nRp206\ng204\nsg1\n((lp207\nVTeams7v7\np208\naI2011\naS'Team'\np209\natp210\nRp211\ng208\nsg1\n((lp212\nVMedium\np213\naS'Level 3 (Medium)'\np214\na(I3004\nS'Medi'\np215\ntp216\natp217\nRp218\ng213\nsg1\n((lp219\nI3140\naS'AI Build'\np220\naVAI Build (Terran)\np221\natp222\nRp223\ng221\nsg1\n((lp224\nVTeams4v4\np225\naI2005\naS'Team'\np226\natp227\nRp228\ng225\nsg1\n((lp229\nS'Agressive Push'\np230\na(I3198\nS'AB04'\np231\ntp232\naVAggressive Push\np233\natp234\nRp235\ng233\nsg1\n((lp236\n(I3136\nS'AB04'\np237\ntp238\naS'Agressive Push'\np239\naVAggressive Push\np240\natp241\nRp242\ng240\nsg1\n((lp243\nI2008\naVTeams6v6\np244\naS'Team'\np245\natp246\nRp247\ng244\nsg1\n((lp248\nS'Agressive Push'\np249\naVAggressive Push\np250\na(I3103\nS'AB04'\np251\ntp252\natp253\nRp254\ng250\nsg1\n((lp255\nV4v4\np256\naS'4 v 4'\np257\na(I2001\nS'4v4'\np258\ntp259\natp260\nRp261\ng256\nsg1\n((lp262\nS'Agressive Push'\np263\na(I3134\nS'AB04'\np264\ntp265\naVAggressive Push\np266\natp267\nRp268\ng266\nsg1\n((lp269\nVTeams1v1\np270\naI2002\naS'Team'\np271\natp272\nRp273\ng270\nsg1\n((lp274\nI3139\naS'AI Build'\np275\naVAI Build (Terran)\np276\natp277\nRp278\ng276\nsg1\n((lp279\nS'AI Build'\np280\naVAI Build (Zerg)\np281\naI3207\natp282\nRp283\ng281\nsg1\n((lp284\n(I2001\nS'FFA'\np285\ntp286\naS'Free For All'\np287\naVFFA\np288\natp289\nRp290\ng288\nsg1\n((lp291\nVAI Build (Zerg)\np292\naI3206\naS'AI Build'\np293\natp294\nRp295\ng292\nsg1\n((lp296\nVTeams3v3\np297\naI2004\naS'Team'\np298\natp299\nRp300\ng297\nsg1\n((lp301\nVAI Build (Protoss)\np302\naS'AI Build'\np303\naI3175\natp304\nRp305\ng302\nsg1\n((lp306\nS'Level 2 (Easy)'\np307\na(I3004\nS'Easy'\np308\ntp309\naVEasy\np310\natp311\nRp312\ng310\nsg1\n((lp313\nI3203\naS'AI Build'\np314\naVAI Build (Zerg)\np315\natp316\nRp317\ng315\ns." + "decisions": "(dp0\nc__builtin__\nfrozenset\np1\n((lp2\nS'Hard'\np3\naVHarder\np4\na(I3004\nS'Hard'\np5\ntp6\natp7\nRp8\ng4\nsg1\n((lp9\n(I2001\nS'1v1'\np10\ntp11\naS'1 v 1'\np12\naV1v1\np13\natp14\nRp15\ng13\nsg1\n((lp16\nVUnknown\np17\naI2003\naVTeams2v2\np18\natp19\nRp20\ng18\nsg1\n((lp21\nI3009\naVGame Mode\np22\nag17\natp23\nRp24\ng22\nsg1\n((lp25\n(I3104\nS'AB04'\np26\ntp27\naS'Agressive Push'\np28\naVAggressive Push\np29\natp30\nRp31\ng29\nsg1\n((lp32\nI2001\nag17\naVTeams\np33\natp34\nRp35\ng33\nsg1\n((lp36\ng17\naVTeams4v4\np37\naI2005\natp38\nRp39\ng37\nsg1\n((lp40\nS'Agressive Push'\np41\naVAggressive Push\np42\na(I3199\nS'AB04'\np43\ntp44\natp45\nRp46\ng42\nsg1\n((lp47\nV6v6\np48\naS'6 v 6'\np49\na(I2001\nS'6v6'\np50\ntp51\natp52\nRp53\ng48\nsg1\n((lp54\nS'Agressive Push'\np55\na(I3102\nS'AB04'\np56\ntp57\naVAggressive Push\np58\natp59\nRp60\ng58\nsg1\n((lp61\nI4001\nag17\naVUsing Custom Observer UI\np62\natp63\nRp64\ng62\nsg1\n((lp65\nI2003\naVTeams2v2\np66\naS'Team'\np67\natp68\nRp69\ng66\nsg1\n((lp70\nVLadder\np71\naS'Automated Match Making'\np72\na(I3009\nS'Amm'\np73\ntp74\natp75\nRp76\ng71\nsg1\n((lp77\n(I2001\nS'5v5'\np78\ntp79\naS'5 v 5'\np80\naV5v5\np81\natp82\nRp83\ng81\nsg1\n((lp84\nVFree For All Teams\np85\naS'Free For All Archon'\np86\na(I2000\nVFFAT\np87\ntp88\natp89\nRp90\ng86\nsg1\n((lp91\ng17\naVGame Duration\np92\naI3015\natp93\nRp94\ng92\nsg1\n((lp95\nI2008\nag17\naVTeams6v6\np96\natp97\nRp98\ng96\nsg1\n((lp99\nVHorner\np100\na(I3013\nVHorn\np101\ntp102\naS'Han & Horner'\np103\natp104\nRp105\ng103\nsg1\n((lp106\nI3141\naVAI Build (Terran)\np107\naS'AI Build'\np108\natp109\nRp110\ng107\nsg1\n((lp111\nI3008\nag17\naVObserver Type\np112\natp113\nRp114\ng112\nsg1\n((lp115\n(I2001\nS'3v3'\np116\ntp117\naS'3 v 3'\np118\naV3v3\np119\natp120\nRp121\ng119\nsg1\n((lp122\n(I3168\nS'AB04'\np123\ntp124\naS'Agressive Push'\np125\naVAggressive Push\np126\natp127\nRp128\ng126\nsg1\n((lp129\n(I3200\nS'AB04'\np130\ntp131\naS'Agressive Push'\np132\naVAggressive Push\np133\natp134\nRp135\ng133\nsg1\n((lp136\nVAI Build (Protoss)\np137\naI3174\naS'AI Build'\np138\natp139\nRp140\ng137\nsg1\n((lp141\nS'Very Hard'\np142\naVElite\np143\na(I3004\nS'VyHd'\np144\ntp145\natp146\nRp147\ng143\nsg1\n((lp148\nS'Agressive Push'\np149\naVAggressive Push\np150\na(I3167\nS'AB04'\np151\ntp152\natp153\nRp154\ng150\nsg1\n((lp155\nVTeams5v5\np156\nag17\naI2007\natp157\nRp158\ng156\nsg1\n((lp159\nI3204\naS'AI Build'\np160\naVAI Build (Zerg)\np161\natp162\nRp163\ng161\nsg1\n((lp164\nVInsane\np165\naS'Cheater 3 (Insane)'\np166\na(I3004\nS'Insa'\np167\ntp168\natp169\nRp170\ng165\nsg1\n((lp171\n(I3007\nS'Watc'\np172\ntp173\naS'Observer'\np174\naS'Watcher'\np175\natp176\nRp177\ng174\nsg1\n((lp178\nI3205\naVAI Build (Zerg)\np179\naS'AI Build'\np180\natp181\nRp182\ng179\nsg1\n((lp183\nVTeams5v5\np184\naS'Team'\np185\naI2007\natp186\nRp187\ng184\nsg1\n((lp188\nI3171\naVAI Build (Protoss)\np189\naS'AI Build'\np190\natp191\nRp192\ng189\nsg1\n((lp193\nI1000\naVRules\np194\nag17\natp195\nRp196\ng194\nsg1\n((lp197\nS'Unknown'\np198\naI2012\naS'Team'\np199\natp200\nRp201\ng199\nsg1\n((lp202\ng17\naVTandem Leader Slot\np203\naI3012\natp204\nRp205\ng203\nsg1\n((lp206\ng17\naI3011\naVPlayer Logo Index\np207\natp208\nRp209\ng207\nsg1\n((lp210\nI1001\naVPremade Game\np211\nag17\natp212\nRp213\ng211\nsg1\n((lp214\nI3173\naS'AI Build'\np215\naVAI Build (Protoss)\np216\natp217\nRp218\ng216\nsg1\n((lp219\nVAI Build (Terran)\np220\naI3142\naS'AI Build'\np221\natp222\nRp223\ng220\nsg1\n((lp224\nI3172\naVAI Build (Protoss)\np225\naS'AI Build'\np226\natp227\nRp228\ng225\nsg1\n((lp229\nS'Level 1 (Very Easy)'\np230\na(I3004\nS'VyEy'\np231\ntp232\naVVery Easy\np233\natp234\nRp235\ng233\nsg1\n((lp236\nS'Agressive Push'\np237\naVAggressive Push\np238\na(I3135\nS'AB04'\np239\ntp240\natp241\nRp242\ng238\nsg1\n((lp243\nV2v2\np244\naS'2 v 2'\np245\na(I2001\nS'2v2'\np246\ntp247\natp248\nRp249\ng244\nsg1\n((lp250\nS'Agressive Push'\np251\na(I3166\nS'AB04'\np252\ntp253\naVAggressive Push\np254\natp255\nRp256\ng254\nsg1\n((lp257\nVTeamsFFA\np258\naI2006\naS'Team'\np259\natp260\nRp261\ng258\nsg1\n((lp262\nS'AI Build'\np263\naVAI Build (Terran)\np264\naI3143\natp265\nRp266\ng264\nsg1\n((lp267\nVTeams7v7\np268\naI2011\naS'Team'\np269\natp270\nRp271\ng268\nsg1\n((lp272\nVTeams3v3\np273\nag17\naI2004\natp274\nRp275\ng273\nsg1\n((lp276\nI3000\naVGame Speed\np277\nag17\natp278\nRp279\ng277\nsg1\n((lp280\nVMedium\np281\naS'Level 3 (Medium)'\np282\na(I3004\nS'Medi'\np283\ntp284\natp285\nRp286\ng281\nsg1\n((lp287\nI3140\naS'AI Build'\np288\naVAI Build (Terran)\np289\natp290\nRp291\ng289\nsg1\n((lp292\nVTeams4v4\np293\naI2005\naS'Team'\np294\natp295\nRp296\ng293\nsg1\n((lp297\nS'Agressive Push'\np298\na(I3198\nS'AB04'\np299\ntp300\naVAggressive Push\np301\natp302\nRp303\ng301\nsg1\n((lp304\nVLocked Alliances\np305\nag17\naI3010\natp306\nRp307\ng305\nsg1\n((lp308\nVReady\np309\nag17\naI4005\natp310\nRp311\ng309\nsg1\n((lp312\ng17\naVLobby Delay\np313\naI3006\natp314\nRp315\ng313\nsg1\n((lp316\n(I3136\nS'AB04'\np317\ntp318\naS'Agressive Push'\np319\naVAggressive Push\np320\natp321\nRp322\ng320\nsg1\n((lp323\nI2008\naVTeams6v6\np324\naS'Team'\np325\natp326\nRp327\ng324\nsg1\n((lp328\nS'Agressive Push'\np329\naVAggressive Push\np330\na(I3103\nS'AB04'\np331\ntp332\natp333\nRp334\ng330\nsg1\n((lp335\nV4v4\np336\naS'4 v 4'\np337\na(I2001\nS'4v4'\np338\ntp339\natp340\nRp341\ng336\nsg1\n((lp342\nS'Agressive Push'\np343\na(I3134\nS'AB04'\np344\ntp345\naVAggressive Push\np346\natp347\nRp348\ng346\nsg1\n((lp349\nVTeams1v1\np350\naI2002\naS'Team'\np351\natp352\nRp353\ng350\nsg1\n((lp354\nVParticipant Role\np355\nag17\naI3007\natp356\nRp357\ng355\nsg1\n((lp358\nI3139\naS'AI Build'\np359\naVAI Build (Terran)\np360\natp361\nRp362\ng360\nsg1\n((lp363\nI4000\nag17\naVGame Privacy\np364\natp365\nRp366\ng364\nsg1\n((lp367\nS'AI Build'\np368\naVAI Build (Zerg)\np369\naI3207\natp370\nRp371\ng369\nsg1\n((lp372\n(I2001\nS'FFA'\np373\ntp374\naS'Free For All'\np375\naVFFA\np376\natp377\nRp378\ng376\nsg1\n((lp379\nVAI Build (Zerg)\np380\naI3206\naS'AI Build'\np381\natp382\nRp383\ng380\nsg1\n((lp384\nVTeams3v3\np385\naI2004\naS'Team'\np386\natp387\nRp388\ng385\nsg1\n((lp389\nVAI Build (Protoss)\np390\naS'AI Build'\np391\naI3175\natp392\nRp393\ng390\nsg1\n((lp394\nS'Level 2 (Easy)'\np395\na(I3004\nS'Easy'\np396\ntp397\naVEasy\np398\natp399\nRp400\ng398\nsg1\n((lp401\nVTeams1v1\np402\nag17\naI2002\natp403\nRp404\ng402\nsg1\n((lp405\nI3203\naS'AI Build'\np406\naVAI Build (Zerg)\np407\natp408\nRp409\ng407\ns." } diff --git a/sc2reader/objects.py b/sc2reader/objects.py index d9e53035..3867896d 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -77,7 +77,11 @@ def __init__(self, header, attr_id, player, value): self.value = None else: self.name, lookup = LOBBY_PROPERTIES[self.id] - self.value = lookup[value.strip("\x00 ")[::-1]] + try: + self.value = lookup[value.strip("\x00 ")[::-1]] + except KeyError: + self.logger.info("Missing attribute value: {0}".format(value)) + self.value = None def __repr__(self): return str(self) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 8d64fa9c..ad80695e 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -1014,6 +1014,12 @@ def __init__(self, s2ml_file, **options): class GameSummary(Resource): + """ + Data extracted from the post-game Game Summary with units killed, + etc. This code does not work as reliably for Co-op games, which + have a completely different format for the report, which means + that the data is not necessarily in the places we expect. + """ url_template = "http://{0}.depot.battle.net:1119/{1}.s2gs" @@ -1110,7 +1116,9 @@ def __init__(self, summary_file, filename=None, lang="enUS", **options): self.load_player_stats() self.load_players() - self.game_type = self.settings["Teams"].replace(" ", "") + # the game type is probably co-op because it uses a different + # game summary format than other games + self.game_type = self.settings.get("Teams", "Unknown").replace(" ", "") self.real_type = utils.get_real_type(self.teams) # The s2gs file also keeps reference to a series of s2mv files @@ -1149,8 +1157,8 @@ def load_translations(self): self.id_map[uid] = (sheet, entry) for value in item[1]: - sheet = value[1][0][1] - entry = value[1][0][2] + sheet = value[1][0][1] if value[1][0] else None + entry = value[1][0][2] if value[1][0] else None self.id_map[(uid, value[0])] = (sheet, entry) # Each localization is a pairing of a language id, e.g. enUS @@ -1188,7 +1196,7 @@ def load_translations(self): translation = dict() for uid, (sheet, item) in self.id_map.items(): - if sheet < len(sheets) and item in sheets[sheet]: + if sheet is not None and sheet < len(sheets) and item in sheets[sheet]: translation[uid] = sheets[sheet][item] elif self.opt["debug"]: msg = "No {0} translation for sheet {1}, item {2}"