mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
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:
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user