Mercurial > hg > batmud > misc
comparison nun/tasks/findreqs.pl @ 356:102ac4f0bd22 misc
Make findreqs.pl more forgiving to inaccuracies in log data.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 27 Jun 2018 14:57:20 +0300 |
parents | 6f4baa8abf82 |
children | b5959a81c3f5 |
comparison
equal
deleted
inserted
replaced
355:6f4baa8abf82 | 356:102ac4f0bd22 |
---|---|
1 #!/usr/bin/perl -w | 1 #!/usr/bin/perl -w |
2 use strict; | 2 use strict; |
3 use warnings; | 3 use warnings; |
4 my %taskList = (); | 4 my %taskList = (); |
5 my %taskNames = (); | |
5 my @tmpList = (); | 6 my @tmpList = (); |
6 my $wasFound = 0; | 7 my $wasFound = 0; |
7 my $n; | 8 my $n; |
8 my $nline = 0; | 9 my $nline = 0; |
10 | |
9 | 11 |
10 ### Process and parse input logfile | 12 ### Process and parse input logfile |
11 while (defined(my $line = <STDIN>)) | 13 while (defined(my $line = <STDIN>)) |
12 { | 14 { |
13 $nline++; | 15 $nline++; |
19 $wasFound = 1; | 21 $wasFound = 1; |
20 $n = 0; | 22 $n = 0; |
21 } | 23 } |
22 elsif ($line =~ /^You now have '(.+)' at ([0-9]+)\% without special bonuses\.$/ && $wasFound) | 24 elsif ($line =~ /^You now have '(.+)' at ([0-9]+)\% without special bonuses\.$/ && $wasFound) |
23 { | 25 { |
24 my $tmpName = $1; | 26 my $tmpName = lc($1); |
25 my $tmpPercentage = $2; | 27 my $tmpPercentage = $2; |
26 $n = 10; | 28 $n = 10; |
27 | 29 |
28 for my $taskName (@tmpList) | 30 for my $taskName (@tmpList) |
29 { | 31 { |
30 if (defined($taskList{$taskName}{$tmpName})) | 32 my $lcName = lc($taskName); |
33 if (defined($taskList{$lcName}{$tmpName})) | |
31 { | 34 { |
32 if ($tmpPercentage < $taskList{$taskName}{$tmpName}) | 35 if ($tmpPercentage < $taskList{$lcName}{$tmpName}) |
33 { | 36 { |
34 $taskList{$taskName}{$tmpName} = $tmpPercentage; | 37 $taskList{$lcName}{$tmpName} = $tmpPercentage; |
35 } | 38 } |
36 } | 39 } |
37 else | 40 else |
38 { | 41 { |
39 $taskList{$taskName}{$tmpName} = $tmpPercentage; | 42 $taskList{$lcName}{$tmpName} = $tmpPercentage; |
43 $taskNames{$lcName} = $taskName; | |
40 } | 44 } |
41 } | 45 } |
42 } | 46 } |
43 | 47 |
44 if ($n++ >= 6) | 48 if ($n++ >= 6) |
45 { | 49 { |
46 $wasFound = 0; | 50 $wasFound = 0; |
47 for my $taskName (@tmpList) | 51 for my $taskName (@tmpList) |
48 { | 52 { |
49 if (!defined($taskList{$taskName})) | 53 my $lcName = lc($taskName); |
54 if (!defined($taskList{$lcName})) | |
50 { | 55 { |
51 $taskList{$taskName} = (); | 56 $taskList{$lcName} = {}; |
57 $taskNames{$lcName} = $taskName; | |
52 } | 58 } |
53 } | 59 } |
54 @tmpList = (); | 60 @tmpList = (); |
55 } | 61 } |
56 } | 62 } |
60 { | 66 { |
61 print "|------------------------------------------------------------------------|\n"; | 67 print "|------------------------------------------------------------------------|\n"; |
62 } | 68 } |
63 | 69 |
64 | 70 |
71 sub print_line($$$) | |
72 { | |
73 my ($task, $skill, $perc) = @_; | |
74 printf "| %-36s | %-25s | %3d |\n", $task, $skill, $perc; | |
75 } | |
76 | |
77 | |
65 ### Print out the results | 78 ### Print out the results |
66 $n = 0; | 79 $n = 0; |
67 if ($#ARGV >= 0) { | 80 if ($#ARGV >= 0) { |
68 if ($ARGV[0] eq "-tasks") | 81 if ($ARGV[0] eq "-tasks") |
69 { | 82 { |
70 for my $taskName (sort keys %taskList) | 83 for my $taskName (sort keys %taskList) |
71 { | 84 { |
72 print $taskName."\n"; | 85 print $taskNames{$taskName}."\n"; |
73 } | 86 } |
74 } | 87 } |
75 elsif ($ARGV[0] eq "-dump") | 88 elsif ($ARGV[0] eq "-dump") |
76 { | 89 { |
77 for my $taskName (sort keys %taskList) | 90 for my $taskName (sort keys %taskList) |
85 } | 98 } |
86 } | 99 } |
87 } | 100 } |
88 else | 101 else |
89 { | 102 { |
90 my $sepLine = 0; | 103 my $separator = 0; |
91 print ",------------------------------------------------------------------------.\n"; | 104 print ",------------------------------------------------------------------------.\n"; |
92 print "| Task name | Skill/spell | Min |\n"; | 105 print "| Task name | Skill/spell | Min |\n"; |
93 print "+--------------------------------------+---------------------------+-----+\n"; | 106 print "+--------------------------------------+---------------------------+-----+\n"; |
94 for my $taskName (sort keys %taskList) | 107 for my $taskName (sort keys %taskList) |
95 { | 108 { |
96 my $nreqs = scalar keys(%{$taskList{$taskName}}); | 109 my $nreqs = scalar keys(%{$taskList{$taskName}}); |
97 | 110 |
98 if ($nreqs == 0) | 111 if ($nreqs == 0) |
99 { | 112 { |
100 # No requirement data for task | 113 # No requirement data for task |
101 print_separator() if ($sepLine); | 114 print_separator() if ($separator); |
102 printf "| %-36s | %-31s |\n", $taskName, "UNKNOWN or no requirements"; | 115 printf "| %-36s | %-31s |\n", $taskName, "UNKNOWN or no requirements"; |
103 print_separator(); | 116 print_separator(); |
104 $sepLine = 1; | 117 $separator = 1; |
105 } | 118 } |
106 elsif ($nreqs == 1) | 119 elsif ($nreqs == 1) |
107 { | 120 { |
108 for my $skillName (sort keys %{$taskList{$taskName}}) | 121 for my $skillName (sort keys %{$taskList{$taskName}}) |
109 { | 122 { |
110 printf "| %-36s | %-25s | %3d |\n", $taskName, $skillName, $taskList{$taskName}{$skillName}; | 123 print_line($taskNames{$taskName}, $skillName, $taskList{$taskName}{$skillName}); |
111 } | 124 } |
112 $sepLine = 1; | 125 $separator = 1; |
113 } | 126 } |
114 else | 127 else |
115 { | 128 { |
116 print_separator() if ($sepLine); | 129 print_separator() if ($separator); |
117 printf "| %-70s |\n", $taskName; | 130 printf "| %-70s |\n", $taskNames{$taskName}; |
118 for my $skillName (sort keys %{$taskList{$taskName}}) | 131 for my $skillName (sort keys %{$taskList{$taskName}}) |
119 { | 132 { |
120 printf "| %-36s | %-25s | %3d |\n", "", $skillName, $taskList{$taskName}{$skillName}; | 133 print_line("", $skillName, $taskList{$taskName}{$skillName}); |
121 } | 134 } |
122 print_separator(); | 135 print_separator(); |
123 $sepLine = 0; | 136 $separator = 0; |
124 } | 137 } |
125 | 138 |
126 $n++; | 139 $n++; |
127 } | 140 } |
128 print "|-----------------+--------------------+---------------------------+-----'\n"; | 141 print "|-----------------+--------------------+---------------------------+-----'\n"; |