… | |
… | |
27 | my ($class, %arg) = @_; |
27 | my ($class, %arg) = @_; |
28 | |
28 | |
29 | my $self = $class->SUPER::new (%arg, |
29 | my $self = $class->SUPER::new (%arg, |
30 | setup_req => { |
30 | setup_req => { |
31 | extmap => 1, |
31 | extmap => 1, |
32 | excmd => 1, |
|
|
33 | widget => 2, |
32 | widget => 2, |
34 | %{$arg{setup_req} || {}}, |
33 | %{$arg{setup_req} || {}}, |
35 | }, |
34 | }, |
36 | ); |
35 | ); |
|
|
36 | |
|
|
37 | $self->update_fx_want; |
|
|
38 | |
|
|
39 | my $guard = $self->addme_guard; |
|
|
40 | $self->send_exti_req (resource => "exp_table", sub { |
|
|
41 | my ($idx) = @_; |
|
|
42 | |
|
|
43 | $self->register_face_handler ($idx, sub { |
|
|
44 | my ($face) = @_; |
|
|
45 | |
|
|
46 | undef $guard; |
|
|
47 | $self->{exp_table} = $self->{json_coder}->decode (delete $face->{data}); |
|
|
48 | $_->() for values %{ $self->{on_exp_update} }; |
|
|
49 | }); |
|
|
50 | |
|
|
51 | () |
|
|
52 | }); |
|
|
53 | |
|
|
54 | my $guard = $self->addme_guard; |
|
|
55 | $self->send_exti_req (resource => "skill_info", sub { |
|
|
56 | my ($idx) = @_; |
|
|
57 | |
|
|
58 | $self->register_face_handler ($idx, sub { |
|
|
59 | my ($face) = @_; |
|
|
60 | |
|
|
61 | undef $guard; |
|
|
62 | my $info = $self->{json_coder}->decode (delete $face->{data}); |
|
|
63 | $self->{skill_info} = { map { CS_STAT_SKILLINFO + $_ => $info->[$_][0] } 0 .. $#$info }; |
|
|
64 | }); |
|
|
65 | |
|
|
66 | () |
|
|
67 | }); |
|
|
68 | |
|
|
69 | my $guard = $self->addme_guard; |
|
|
70 | $self->send_exti_req (resource => "spell_paths", sub { |
|
|
71 | my ($idx) = @_; |
|
|
72 | |
|
|
73 | $self->register_face_handler ($idx, sub { |
|
|
74 | my ($face) = @_; |
|
|
75 | |
|
|
76 | undef $guard; |
|
|
77 | my $info = $self->{json_coder}->decode (delete $face->{data}); |
|
|
78 | $self->{spell_paths} = { map { (1 << $_) => $info->[$_][0] } 0 .. $#$info }; |
|
|
79 | }); |
|
|
80 | |
|
|
81 | () |
|
|
82 | }); |
37 | |
83 | |
38 | $self->{map_widget}->clr_commands; |
84 | $self->{map_widget}->clr_commands; |
39 | |
85 | |
40 | my @cmd_help = map { |
86 | my @cmd_help = map { |
41 | $_->[DC::Pod::N_KW][0] =~ /^(\S+) (?:\s+ \( ([^\)]*) \) )?/x |
87 | $_->[DC::Pod::N_KW][0] =~ /^(\S+) (?:\s+ \( ([^\)]*) \) )?/x |
… | |
… | |
129 | }); |
175 | }); |
130 | } |
176 | } |
131 | |
177 | |
132 | sub ext_capabilities { |
178 | sub ext_capabilities { |
133 | my ($self, %cap) = @_; |
179 | my ($self, %cap) = @_; |
134 | |
|
|
135 | $self->update_fx_want; |
|
|
136 | |
|
|
137 | $self->send_exti_req (resource => "exp_table", sub { |
|
|
138 | my ($exp_table) = @_; |
|
|
139 | |
|
|
140 | $self->register_face_handler ($exp_table, sub { |
|
|
141 | my ($face) = @_; |
|
|
142 | |
|
|
143 | $self->{exp_table} = $self->{json_coder}->decode (delete $face->{data}); |
|
|
144 | $_->() for values %{ $self->{on_exp_update} || {} }; |
|
|
145 | }); |
|
|
146 | |
|
|
147 | () |
|
|
148 | }); |
|
|
149 | |
180 | |
150 | if (my $ts = $cap{tileset}) { |
181 | if (my $ts = $cap{tileset}) { |
151 | if (my ($default) = grep $_->[2] & 1, @$ts) { |
182 | if (my ($default) = grep $_->[2] & 1, @$ts) { |
152 | $self->{tileset} = $default; |
183 | $self->{tileset} = $default; |
153 | $self->{tilesize} = $default->[3]; |
184 | $self->{tilesize} = $default->[3]; |
… | |
… | |
454 | |
485 | |
455 | if (my @diffs = |
486 | if (my @diffs = |
456 | ( |
487 | ( |
457 | ($stats->{+CS_STAT_EXP64} > $prev->{+CS_STAT_EXP64} ? ($stats->{+CS_STAT_EXP64} - $prev->{+CS_STAT_EXP64}) . " experience gained" : ()), |
488 | ($stats->{+CS_STAT_EXP64} > $prev->{+CS_STAT_EXP64} ? ($stats->{+CS_STAT_EXP64} - $prev->{+CS_STAT_EXP64}) . " experience gained" : ()), |
458 | map { |
489 | map { |
459 | $stats->{$_} && $prev->{$_} |
490 | $stats->{$_} && $prev->{$_} |
460 | && $stats->{$_}[1] > $prev->{$_}[1] ? "($self->{skill_info}{$_}+" . ($stats->{$_}[1] - $prev->{$_}[1]) . ")" : () |
491 | && $stats->{$_}[1] > $prev->{$_}[1] ? "($self->{skill_info}{$_}+" . ($stats->{$_}[1] - $prev->{$_}[1]) . ")" : () |
461 | } sort { $a <=> $b } keys %{$self->{skill_info}} |
492 | } sort { $a <=> $b } keys %{$self->{skill_info}} |
462 | ) |
493 | ) |
463 | ) { |
494 | ) { |
464 | my $msg = join " ", @diffs; |
495 | my $msg = join " ", @diffs; |
… | |
… | |
669 | } |
700 | } |
670 | |
701 | |
671 | sub feed_map1a { |
702 | sub feed_map1a { |
672 | my ($self, $data) = @_; |
703 | my ($self, $data) = @_; |
673 | |
704 | |
674 | my $missing = $self->{map}->map1a_update ($data, $self->{setup}{extmap}); |
705 | my $missing = $self->{map}->map1a_update ($data); |
675 | my $delay; |
706 | my $delay; |
676 | |
707 | |
677 | for my $tile (@$missing) { |
708 | for my $tile (@$missing) { |
678 | next if $self->{delay}{$tile}; |
709 | next if $self->{delay}{$tile}; |
679 | |
710 | |
… | |
… | |
1348 | my $version = JSON::XS->new->encode ($self->{s_version}); |
1379 | my $version = JSON::XS->new->encode ($self->{s_version}); |
1349 | |
1380 | |
1350 | $::SERVER_INFO->set_markup ( |
1381 | $::SERVER_INFO->set_markup ( |
1351 | "server <tt>$self->{host}:$self->{port}</tt>\n" |
1382 | "server <tt>$self->{host}:$self->{port}</tt>\n" |
1352 | . "protocol version <tt>$version</tt>\n" |
1383 | . "protocol version <tt>$version</tt>\n" |
1353 | . "minimap support $yesno[$self->{setup}{mapinfocmd} > 0]\n" |
|
|
1354 | . "extended command support $yesno[$self->{setup}{extcmd} > 0]\n" |
|
|
1355 | . "examine command support $yesno[$self->{setup}{excmd} > 0]\n" |
|
|
1356 | . "editing support $yesno[!!$self->{editor_support}]\n" |
1384 | . "editing support $yesno[!!$self->{editor_support}]\n" |
1357 | . "map attributes $yesno[$self->{setup}{extmap} > 0]\n" |
|
|
1358 | . "big image protocol support $yesno[$self->{setup}{fxix} > 0]\n" |
|
|
1359 | . "client support $yesno[$self->{cfplus_ext} > 0]" |
1385 | . "client support $yesno[$self->{cfplus_ext} > 0]" |
1360 | . ($self->{cfplus_ext} > 0 ? ", version $self->{cfplus_ext}" : "") ."\n" |
1386 | . ($self->{cfplus_ext} > 0 ? ", version $self->{cfplus_ext}" : "") ."\n" |
1361 | . "map size $self->{mapw}×$self->{maph}\n" |
1387 | . "map size $self->{mapw}×$self->{maph}\n" |
1362 | ); |
1388 | ); |
1363 | |
1389 | |