… | |
… | |
84 | print $fh "$ts ", @a, "\n"; |
84 | print $fh "$ts ", @a, "\n"; |
85 | $fh->flush; |
85 | $fh->flush; |
86 | } |
86 | } |
87 | |
87 | |
88 | sub _stat_numdiff { |
88 | sub _stat_numdiff { |
89 | my ($old, $new) = @_; |
89 | my ($self, $old, $new) = @_; |
90 | |
90 | |
91 | my $diff = $new - $old; |
91 | my $diff = $new - $old; |
92 | $diff > 0 ? "+$diff" : $diff |
92 | $diff > 0 ? "+$diff" : $diff |
93 | } |
93 | } |
94 | |
94 | |
95 | sub _stat_skillmaskdiff { |
95 | sub _stat_skillmaskdiff { |
96 | my ($old, $new) = @_; |
96 | my ($self, $old, $new) = @_; |
97 | |
97 | |
98 | my @diff; |
|
|
99 | |
|
|
100 | my $changed = $old ^ $new; |
98 | my $diff = $old ^ $new; |
101 | |
99 | |
102 | my @diff = map { |
100 | my @diff = map |
103 | $changed & (1<<$_) |
101 | { |
|
|
102 | $diff & $_ |
104 | ? (($new & (1<<$_) ? "+" : "-") . "skill$_") |
103 | ? (($new & $_ ? "+" : "-") . $self->{spell_paths}{$_}) |
105 | : () |
104 | : () |
106 | } |
105 | } |
107 | 0 .. 31; # TODO |
106 | sort { $a <=> $b } keys %{$self->{spell_paths}}; |
108 | |
107 | |
109 | join "", @diff |
108 | join "", @diff |
110 | } |
109 | } |
111 | |
110 | |
112 | # all stats that are chacked against changes |
111 | # all stats that are chacked against changes |
… | |
… | |
159 | } |
158 | } |
160 | |
159 | |
161 | if ( |
160 | if ( |
162 | my @diffs = map { |
161 | my @diffs = map { |
163 | $stats->{$_->[0]} != $prev->{$_->[0]} |
162 | $stats->{$_->[0]} != $prev->{$_->[0]} |
164 | ? $_->[2] . $_->[1]->($prev->{$_->[0]}, $stats->{$_->[0]}) : (); |
163 | ? $_->[2] . $_->[1]->($self, $prev->{$_->[0]}, $stats->{$_->[0]}) : (); |
165 | } |
164 | } |
166 | @statchange |
165 | @statchange |
167 | ) { |
166 | ) { |
168 | my $msg = "<b>stat change</b>: " . (join " ", @diffs); |
167 | my $msg = "<b>stat change</b>: " . (join " ", @diffs); |
169 | $self->{statusbox}->add ($msg, group => $msg, fg => [0.8, 1, 0.2, 1], timeout => 10); |
168 | $self->{statusbox}->add ($msg, group => $msg, fg => [0.8, 1, 0.2, 1], timeout => 10); |