Update the deck conversion toolchain to the latest version. (#3128)

* - Fix the name of the swamp tribal town.

* - Update deck conversion toolchain to the one that was used for the May 2023 MTGDecks.net archive update.
This commit is contained in:
Agetian
2023-05-17 17:07:33 +03:00
committed by GitHub
parent b397be8cea
commit d5bdf2c2ae
3 changed files with 26 additions and 34 deletions

View File

@@ -9,7 +9,7 @@ OUT_DECKFOLDER = "./ForgeDecks"
import argparse, os, re import argparse, os, re
print("Agetian's MtgDecks.net DEC to MTG Forge Deck Converter v4.0\n") print("Agetian's MtgDecks.net DEC to MTG Forge Deck Converter v4.1\n")
parser = argparse.ArgumentParser(description="Convert MtgDecks.net DEC to Forge DCK.") parser = argparse.ArgumentParser(description="Convert MtgDecks.net DEC to Forge DCK.")
@@ -50,27 +50,27 @@ for root, dirs, files in os.walk(CARDSFOLDER):
for line in cardname_lines: for line in cardname_lines:
if line.strip().lower().startswith("name:"): if line.strip().lower().startswith("name:"):
if line.count(':') == 1: if line.count(':') == 1:
cardname = line.split(':')[1].strip() cardname = line.split(':')[1].strip().lower()
break break
if cardname == "": if cardname == "":
cardname_literal = cardtext.replace('\r','').split('\n')[0].split(':') cardname_literal = cardtext.replace('\r','').split('\n')[0].split(':')
cardname = ":".join(cardname_literal[1:]).strip() cardname = ":".join(cardname_literal[1:]).strip().lower()
if (cardtext_lower.find("alternatemode:split") != -1) or (cardtext_lower.find("alternatemode: split") != -1): if (cardtext_lower.find("alternatemode:split") != -1) or (cardtext_lower.find("alternatemode: split") != -1):
# split card, special handling needed # split card, special handling needed
cardsplittext = cardtext.replace('\r','').split('\n') cardsplittext = cardtext.replace('\r','').split('\n')
cardnames = [] cardnames = []
for line in cardsplittext: for line in cardsplittext:
if line.lower().find("name:") != -1: if line.lower().find("name:") != -1:
cardnames.extend([line.split('\n')[0].split(':')[1]]) cardnames.extend([line.split('\n')[0].split(':')[1].lower()])
cardname = " // ".join(cardnames) cardname = " // ".join(cardnames).lower()
if (cardtext_lower.find("alternatemode:modal") != -1) or (cardtext_lower.find("alternatemode: modal") != -1): if (cardtext_lower.find("alternatemode:modal") != -1) or (cardtext_lower.find("alternatemode: modal") != -1):
# ZNR modal card, special handling needed # ZNR modal card, special handling needed
cardsplittext = cardtext.replace('\r','').split('\n') cardsplittext = cardtext.replace('\r','').split('\n')
cardnames = [] cardnames = []
for line in cardsplittext: for line in cardsplittext:
if line.lower().find("name:") != -1: if line.lower().find("name:") != -1:
cardnames.extend([line.split('\n')[0].split(':')[1]]) cardnames.extend([line.split('\n')[0].split(':')[1].lower()])
cardname = cardnames[0].strip() cardname = cardnames[0].strip().lower()
if cardtext.lower().find("remaideck") != -1: if cardtext.lower().find("remaideck") != -1:
cardlist[cardname] = 0 cardlist[cardname] = 0
else: else:
@@ -174,7 +174,7 @@ for root, dirs, files in os.walk(DECKFOLDER):
if cardName == "": if cardName == "":
continue continue
altModalKey = cardName.split(" // ")[0].strip() altModalKey = cardName.split(" // ")[0].strip()
if not cardName in cardlist.keys() and not cardName.replace("Aether", "AEther") in cardlist.keys() and not cardName.replace("AEther", "Aether") in cardlist.keys() and not altModalKey in cardlist.keys(): if not cardName.lower() in cardlist.keys() and not cardName.replace("Aether", "AEther").lower() in cardlist.keys() and not cardName.replace("AEther", "Aether").lower() in cardlist.keys() and not altModalKey.lower() in cardlist.keys():
print("Unsupported card (MAIN): " + cardName) print("Unsupported card (MAIN): " + cardName)
if args.f: if args.f:
supported = False supported = False
@@ -183,14 +183,10 @@ for root, dirs, files in os.walk(DECKFOLDER):
deckHasUnsupportedCards = True deckHasUnsupportedCards = True
if not cardName in unsupportedList: if not cardName in unsupportedList:
unsupportedList.extend([cardName]) unsupportedList.extend([cardName])
if altModalKey in cardlist.keys(): if altModalKey.lower() in cardlist.keys():
mdline = cardAmount + " " + altModalKey # ZNR modal cards with // mdline = cardAmount + " " + altModalKey # ZNR modal cards with //
elif cardName in cardlist.keys(): elif cardName.lower() in cardlist.keys():
mdline = cardAmount + " " + cardName mdline = cardAmount + " " + cardName
elif cardName.replace("Aether", "AEther") in cardlist.keys():
mdline = cardAmount + " " + cardName.replace("Aether", "AEther")
elif cardName.replace("AEther", "Aether") in cardlist.keys():
mdline = cardAmount + " " + cardName.replace("AEther", "Aether")
else: else:
mdline = cardAmount + " " + cardName # for the purposes of unsupported cards mdline = cardAmount + " " + cardName # for the purposes of unsupported cards
if isCardSupported: if isCardSupported:
@@ -206,7 +202,7 @@ for root, dirs, files in os.walk(DECKFOLDER):
if cardName == "": if cardName == "":
continue continue
altModalKey = cardName.split(" // ")[0].strip() altModalKey = cardName.split(" // ")[0].strip()
if not cardName in cardlist.keys() and not cardName.replace("Aether", "AEther") in cardlist.keys() and not cardName.replace("AEther", "Aether") in cardlist.keys() and not altModalKey in cardlist.keys(): if not cardName.lower() in cardlist.keys() and not cardName.replace("Aether", "AEther").lower() in cardlist.keys() and not cardName.replace("AEther", "Aether").lower() in cardlist.keys() and not altModalKey.lower() in cardlist.keys():
print("Unsupported card (SIDE): " + cardName) print("Unsupported card (SIDE): " + cardName)
if args.f: if args.f:
supported = False supported = False
@@ -215,14 +211,10 @@ for root, dirs, files in os.walk(DECKFOLDER):
deckHasUnsupportedCards = True deckHasUnsupportedCards = True
if not cardName in unsupportedList: if not cardName in unsupportedList:
unsupportedList.extend([cardName]) unsupportedList.extend([cardName])
if altModalKey in cardlist.keys(): if altModalKey.lower() in cardlist.keys():
sdline = cardAmount + " " + altModalKey # ZNR modal cards with // sdline = cardAmount + " " + altModalKey # ZNR modal cards with //
elif cardName in cardlist.keys(): elif cardName.lower() in cardlist.keys():
sdline = cardAmount + " " + cardName sdline = cardAmount + " " + cardName
elif cardName.replace("Aether", "AEther") in cardlist.keys():
sdline = cardAmount + " " + cardName.replace("Aether", "AEther")
elif cardName.replace("AEther", "Aether") in cardlist.keys():
sdline = cardAmount + " " + cardName.replace("AEther", "Aether")
else: else:
sdline = cardAmount + " " + cardName # for the purposes of unsupported cards sdline = cardAmount + " " + cardName # for the purposes of unsupported cards
if isCardSupported: if isCardSupported:

View File

@@ -5,7 +5,7 @@ DECKFOLDER = "."
import argparse, os, re import argparse, os, re
print("Agetian's MTG Forge Deck AI Compatibility Analyzer v4.0\n") print("Agetian's MTG Forge Deck AI Compatibility Analyzer v5.0\n")
parser = argparse.ArgumentParser(description="Analyze MTG Forge decks for AI compatibility.") parser = argparse.ArgumentParser(description="Analyze MTG Forge decks for AI compatibility.")
parser.add_argument("-p", action="store_true", help="print only AI-playable decks") parser.add_argument("-p", action="store_true", help="print only AI-playable decks")
@@ -45,18 +45,18 @@ for root, dirs, files in os.walk(CARDSFOLDER):
for line in cardname_lines: for line in cardname_lines:
if line.strip().lower().startswith("name:"): if line.strip().lower().startswith("name:"):
if line.count(':') == 1: if line.count(':') == 1:
cardname = line.split(':')[1].strip() cardname = line.split(':')[1].strip().lower()
break break
if cardname == "": if cardname == "":
cardname_literal = cardtext.replace('\r','').split('\n')[0].split(':') cardname_literal = cardtext.replace('\r','').split('\n')[0].split(':')
cardname = ":".join(cardname_literal[1:]).strip() cardname = ":".join(cardname_literal[1:]).strip().lower()
if (cardtext_lower.find("alternatemode:split") != -1) or (cardtext_lower.find("alternatemode: split") != -1): if (cardtext_lower.find("alternatemode:split") != -1) or (cardtext_lower.find("alternatemode: split") != -1):
# split card, special handling needed # split card, special handling needed
cardsplittext = cardtext.replace('\r','').split('\n') cardsplittext = cardtext.replace('\r','').split('\n')
cardnames = [] cardnames = []
for line in cardsplittext: for line in cardsplittext:
if line.lower().find("name:") != -1: if line.lower().find("name:") != -1:
cardnames.extend([line.split('\n')[0].split(':')[1]]) cardnames.extend([line.split('\n')[0].split(':')[1].lower()])
cardname = " // ".join(cardnames) cardname = " // ".join(cardnames)
if (cardtext_lower.find("alternatemode:modal") != -1) or (cardtext_lower.find("alternatemode: modal") != -1): if (cardtext_lower.find("alternatemode:modal") != -1) or (cardtext_lower.find("alternatemode: modal") != -1):
# ZNR modal card, special handling needed # ZNR modal card, special handling needed
@@ -64,7 +64,7 @@ for root, dirs, files in os.walk(CARDSFOLDER):
cardnames = [] cardnames = []
for line in cardsplittext: for line in cardsplittext:
if line.lower().find("name:") != -1: if line.lower().find("name:") != -1:
cardnames.extend([line.split('\n')[0].split(':')[1]]) cardnames.extend([line.split('\n')[0].split(':')[1].lower()])
cardname = cardnames[0].strip() cardname = cardnames[0].strip()
if cardtext.lower().find("remaideck") != -1 or cardtext.lower().find("ai:removedeck:all") != -1: if cardtext.lower().find("remaideck") != -1 or cardtext.lower().find("ai:removedeck:all") != -1:
cardlist[cardname] = 0 cardlist[cardname] = 0
@@ -93,7 +93,7 @@ for root, dirs, files in os.walk(DECKFOLDER):
regexobj = re.search('^([0-9]+) +([^|]+)', line) regexobj = re.search('^([0-9]+) +([^|]+)', line)
if regexobj: if regexobj:
cardname = regexobj.groups()[1].replace('\n','').replace('\r','').strip() cardname = regexobj.groups()[1].replace('\n','').replace('\r','').strip()
cardname = cardname.replace('\xC6', 'AE') cardname = cardname.replace('\xC6', 'AE').lower()
if cardlist[cardname] == 0: if cardlist[cardname] == 0:
cardnames.extend([cardname]) cardnames.extend([cardname])
nonplayable_in_deck += 1 nonplayable_in_deck += 1

View File

@@ -5,7 +5,7 @@ DECKFOLDER = "."
import argparse, os, re import argparse, os, re
print("Agetian's MTG Forge Deck AI Compatibility Analyzer v4.0\n") print("Agetian's MTG Forge Deck AI Compatibility Analyzer v5.0\n")
parser = argparse.ArgumentParser(description="Analyze MTG Forge decks for AI compatibility.") parser = argparse.ArgumentParser(description="Analyze MTG Forge decks for AI compatibility.")
parser.add_argument("-p", action="store_true", help="print only AI-playable decks") parser.add_argument("-p", action="store_true", help="print only AI-playable decks")
@@ -40,7 +40,7 @@ limited_playable_cards = []
if args.x: if args.x:
ff = open("ai_limitedplayable.lst").readlines() ff = open("ai_limitedplayable.lst").readlines()
for line in ff: for line in ff:
limited_playable_cards.extend([line.replace("\n","")]) limited_playable_cards.extend([line.replace("\n","").lower()])
# main algorithm # main algorithm
print("Loading cards...") print("Loading cards...")
@@ -56,18 +56,18 @@ for root, dirs, files in os.walk(CARDSFOLDER):
for line in cardname_lines: for line in cardname_lines:
if line.strip().lower().startswith("name:"): if line.strip().lower().startswith("name:"):
if line.count(':') == 1: if line.count(':') == 1:
cardname = line.split(':')[1].strip() cardname = line.split(':')[1].strip().lower()
break break
if cardname == "": if cardname == "":
cardname_literal = cardtext.replace('\r','').split('\n')[0].split(':') cardname_literal = cardtext.replace('\r','').split('\n')[0].split(':')
cardname = ":".join(cardname_literal[1:]).strip() cardname = ":".join(cardname_literal[1:]).strip().lower()
if (cardtext_lower.find("alternatemode:split") != -1) or (cardtext_lower.find("alternatemode: split") != -1): if (cardtext_lower.find("alternatemode:split") != -1) or (cardtext_lower.find("alternatemode: split") != -1):
# split card, special handling needed # split card, special handling needed
cardsplittext = cardtext.replace('\r','').split('\n') cardsplittext = cardtext.replace('\r','').split('\n')
cardnames = [] cardnames = []
for line in cardsplittext: for line in cardsplittext:
if line.lower().find("name:") != -1: if line.lower().find("name:") != -1:
cardnames.extend([line.split('\n')[0].split(':')[1]]) cardnames.extend([line.split('\n')[0].split(':')[1].lower()])
cardname = " // ".join(cardnames) cardname = " // ".join(cardnames)
if (cardtext_lower.find("alternatemode:modal") != -1) or (cardtext_lower.find("alternatemode: modal") != -1): if (cardtext_lower.find("alternatemode:modal") != -1) or (cardtext_lower.find("alternatemode: modal") != -1):
# ZNR modal card, special handling needed # ZNR modal card, special handling needed
@@ -75,7 +75,7 @@ for root, dirs, files in os.walk(CARDSFOLDER):
cardnames = [] cardnames = []
for line in cardsplittext: for line in cardsplittext:
if line.lower().find("name:") != -1: if line.lower().find("name:") != -1:
cardnames.extend([line.split('\n')[0].split(':')[1]]) cardnames.extend([line.split('\n')[0].split(':')[1].lower()])
cardname = cardnames[0].strip() cardname = cardnames[0].strip()
if cardtext.lower().find("remaideck") != -1 or cardtext.lower().find("ai:removedeck:all") != -1: if cardtext.lower().find("remaideck") != -1 or cardtext.lower().find("ai:removedeck:all") != -1:
cardlist[cardname] = 0 cardlist[cardname] = 0
@@ -107,7 +107,7 @@ for root, dirs, files in os.walk(DECKFOLDER):
cardname = regexobj.groups()[1].replace('\n','').replace('\r','').strip() cardname = regexobj.groups()[1].replace('\n','').replace('\r','').strip()
cardname = cardname.replace('\xC6', 'AE') cardname = cardname.replace('\xC6', 'AE')
cardname = cardname.replace("AEther Mutation", "Aether Mutation") cardname = cardname.replace("AEther Mutation", "Aether Mutation")
cardname = cardname.replace("AEther Membrane", "Aether Membrane") cardname = cardname.replace("AEther Membrane", "Aether Membrane").lower()
if cardlist[cardname] == 0: if cardlist[cardname] == 0:
if limited_playable_cards.count(cardname) > 0: if limited_playable_cards.count(cardname) > 0:
print("Found limited playable: " + cardname) print("Found limited playable: " + cardname)