diff --git a/Utils/gen-existing-cards-by-set-author.pl b/Utils/gen-existing-cards-by-set-author.pl new file mode 100644 index 00000000000..dc590cb21ca --- /dev/null +++ b/Utils/gen-existing-cards-by-set-author.pl @@ -0,0 +1,215 @@ +#!/usr/bin/perl -w + +#author: North + +use Text::Template; +use strict; + + +my $dataFile = "mtg-cards-data.txt"; +my $setsFile = "mtg-sets-data.txt"; +my $knownSetsFile = "known-sets.txt"; + + +my %cards; +my %sets; +my %knownSets; + +my @setCards; + +# gets the set name +my $setName = $ARGV[0]; +if(!$setName) { + print 'Enter a set name: '; + $setName = ; + chomp $setName; +} + +sub toCamelCase { + my $string = $_[0]; + $string =~ s/\b([\w']+)\b/ucfirst($1)/ge; + $string =~ s/[-,\s\']//g; + $string =~ s/[\/]//g; + $string; +} + +my $cardsFound = 0; +my %all_sets; + +print ("Opening $dataFile\n"); +open (DATA, $dataFile) || die "can't open $dataFile"; +while(my $line = ) { + my @data = split('\\|', $line); + $cards{$data[0]}{$data[1]} = \@data; + + if ($data[1] eq $setName) { + my $cardInfo = "$data[0],,,$data[2]"; + + push(@setCards, $cardInfo); + } else { + $all_sets {$data[1]} = 1; + } +} + +# Fix up split cards +my $potentialSideA; +my @tempSetCards; + +foreach $potentialSideA (sort @setCards) { + #print (">>$potentialSideA\n"); + if ($potentialSideA =~ m/.*,,,(\d+)(a)$/) { + my $cardNumSideB = $1 . "b"; + my $val; + foreach $val (sort @setCards) { + if ($val =~ m/$cardNumSideB$/) { + $potentialSideA =~ s/,,,.*//; + $val =~ s/,,,.*//; + + # Add 'SideaSideb' to %cards + my $ds = $cards{$val}{$setName}; + #print ("$potentialSideA$val,,,$cardNumSideB\n"); + my @newCard; + push (@newCard, "$potentialSideA$val"); + push (@newCard, "$setName"); + push (@newCard, "SPLIT"); + push (@newCard, @$ds[3]); + push (@newCard, "$potentialSideA // $val"); + $cards{$newCard[0]}{$newCard[1]} = \@newCard; + + $cardNumSideB =~ s/.$//; + push (@tempSetCards, "$potentialSideA$val,,,$cardNumSideB"); + + #print ("Adding in: $potentialSideA \/\/ $val,,,$cardNumSideB\n"); + $cardsFound = $cardsFound - 1; + } + } + } + elsif ($potentialSideA =~ m/.*,,,(\d+)(b)$/) { + next; + } + else { + $cardsFound = $cardsFound + 1; + push (@tempSetCards, $potentialSideA); + } +} +@setCards = @tempSetCards; + +close(DATA); +print "Number of cards found for set " . $setName . ": " . $cardsFound . "\n"; + + +if ($cardsFound == 0) { + $setName =~ s/^(...).*/$1/; + my $poss; + my $foundPossibleSet = 0; + my $numPossibleSets = 0; + foreach $poss (sort keys (%all_sets)) { + $numPossibleSets++; + if ($poss =~ m/^$setName/i) { + print ("Did you possibly mean: $poss ?\n"); + $foundPossibleSet = 1; + } + } + if (!$foundPossibleSet) { + print ("Couldn't find any matching set for '$setName'. \n"); + } + + print "(Note: Looked at $numPossibleSets sets in total).\nPress the enter key to exit."; + $setName = ; + exit; +} + +open (DATA, $setsFile) || die "can't open $setsFile"; + +while(my $line = ) { + my @data = split('\\|', $line); + $sets{$data[0]}= $data[1]; +} +close(DATA); + +open (DATA, $knownSetsFile) || die "can't open $knownSetsFile"; +while(my $line = ) { + my @data = split('\\|', $line); + $knownSets{$data[0]}= $data[1]; +} +close(DATA); + +print ("Reading in existing cards in set\n"); +open (SET_FILE, "../../mage/Mage.Sets/src/mage/sets/$knownSets{$setName}.java") || die "can't open $dataFile"; +my %alreadyIn; +while () { + my $line = $_; + if ($line =~ m/SetCardInfo.*\("(.*)", (\d+).*/) + { + $alreadyIn {$2} = $1; + } +} +close SET_FILE; + +my $name_collectorid; + + +my %authors; +my %author_counts; + +foreach $name_collectorid (sort @setCards) +{ + my $cardName; + my $cardNr; + $name_collectorid =~ m/^(.*),,,(.*)$/; + $cardName = $1; + $cardNr = $2; + { + my $ds; + $ds = $cards{$cardName}{$setName}; + my $className = toCamelCase($cardName); + my $setId = lc($cardName); + $setId =~ s/^(.).*/$1/; + my $fn = "..\\Mage.Sets\\src\\mage\\cards\\$setId\\$className.java"; + + if (@$ds[2] eq "SPLIT") { + my $oldCardName = $cardName; + $cardName = @$ds[4]; + } + + my $plus_cardName = $cardName; + $plus_cardName =~ s/ /+/img; + $plus_cardName =~ s/,/+/img; + $plus_cardName = "intext:\"$plus_cardName\""; + my $cmd = "find /I \"\@author\" $fn"; + + if (!exists ($alreadyIn{$cardNr})) { + if (-e $fn) { + my $output = `$cmd`; + chomp $output; + $output =~ s/^----.*\n//img; + $output =~ s/^.*author\s*//img; + $authors {$fn} = $output; + $author_counts {$output} ++; + + } + } else { + if (-e $fn) { + my $output = `$cmd`; + chomp $output; + $output =~ s/^----.*\n//img; + $output =~ s/^.*.author\s*//img; + $authors {$fn} = $output; + $author_counts {$output} ++; + + } + } + } +} + +print "\n\n\nAuthor Counts:\n"; +my $author; +foreach $author (sort (keys %author_counts)) { + if ($author !~ m/---/img) { + print ("$author --> $author_counts{$author}"); + } +} + +print ("\nData from reading: ../../mage/Mage.Sets/src/mage/sets/$knownSets{$setName}.java\n"); +print "\n\nYou are done. Press the enter key to exit."; +$setName = ;