ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/Protocol.pm
(Generate patch)

Comparing deliantra/Deliantra-Client/DC/Protocol.pm (file contents):
Revision 1.183 by root, Wed Dec 26 21:03:21 2007 UTC vs.
Revision 1.192 by root, Thu Mar 27 20:42:23 2008 UTC

19 19
20 my $self = $class->SUPER::new (%arg, 20 my $self = $class->SUPER::new (%arg,
21 setup_req => { 21 setup_req => {
22 extmap => 1, 22 extmap => 1,
23 excmd => 1, 23 excmd => 1,
24 widget => 1, 24 widget => 2,
25 %{$arg{setup_req} || {}}, 25 %{$arg{setup_req} || {}},
26 }, 26 },
27 ); 27 );
28 28
29 $self->{map_widget}->clr_commands; 29 $self->{map_widget}->clr_commands;
30 30
31 my @cmd_help = map { 31 my @cmd_help = map {
32 $_->{kw}[0] =~ /^(\S+) (?:\s+ \( ([^\)]*) \) )?/x 32 $_->[DC::Pod::N_KW][0] =~ /^(\S+) (?:\s+ \( ([^\)]*) \) )?/x
33 or die "unparseable command help: $_->{kw}[0]"; 33 or die "unparseable command help: $_->[DC::Pod::N_KW][0]";
34 34
35 my $cmd = $1; 35 my $cmd = $1;
36 my @args = split /\|/, $2; 36 my @args = split /\|/, $2;
37 @args = (".*") unless @args; 37 @args = (".*") unless @args;
38 38
43 for @args; 43 for @args;
44 44
45 map ["$cmd$_", $text], 45 map ["$cmd$_", $text],
46 sort { (length $a) <=> (length $b) } 46 sort { (length $a) <=> (length $b) }
47 @args 47 @args
48 } sort { $a->{par} <=> $b->{par} } 48 } sort { $a->[DC::Pod::N_PAR] <=> $b->[DC::Pod::N_PAR] }
49 DC::Pod::find command => "*"; 49 DC::Pod::find command => "*";
50 50
51 $self->{json_coder} 51 $self->{json_coder}
52 ->convert_blessed 52 ->convert_blessed
53 ->filter_json_single_key_object ("\fw" => sub { 53 ->filter_json_single_key_object ("\fw" => sub {
102} 102}
103 103
104sub ext_capabilities { 104sub ext_capabilities {
105 my ($self, %cap) = @_; 105 my ($self, %cap) = @_;
106 106
107 #$self->send ("setup sound 0"); # we use a different protocol
108 $self->update_fx_want; 107 $self->update_fx_want;
109 108
110 $self->send_exti_req (resource => "exp_table", sub { 109 $self->send_exti_req (resource => "exp_table", sub {
111 my ($exp_table) = @_; 110 my ($exp_table) = @_;
112 111
191 $ws, $id => scalar eval { 190 $ws, $id => scalar eval {
192 local $SIG{__DIE__}; 191 local $SIG{__DIE__};
193 "DC::UI::$class"->new (%$args) 192 "DC::UI::$class"->new (%$args)
194 } 193 }
195 ); 194 );
195}
196
197# widgetset create template
198sub ext_ws_ct {
199 my ($self, $ws, $type, $template, $done_cb, $cfg) = @_;
200
201 $done_cb ||= sub { };
202
203 my $parse_list; $parse_list = sub {
204 my ($list) = @_;
205 my @w;
206
207 while (@$list) {
208 my ($class, $args) = splice @$list, 0, 2;
209 my $name = delete $args->{s_id};
210 my $cl = delete $args->{s_cl};
211 my $cfg = delete $cfg->{$name};
212 my $id = delete $cfg->{id};
213 my $w = eval { "DC::UI::$class"->new (%$args, %{ $cfg || {} }) }
214 or next;
215
216 $self->widget_associate ($ws, $id, $w)
217 if $id;
218
219 $w->add ($parse_list->($cl))
220 if $cl;
221
222 push @w, $w;
223 }
224
225 @w
226 };
227
228 # either array reference, or face #
229 if ($type eq "inline") {
230 $done_cb->();
231 $parse_list->($template);
232 } elsif ($type eq "face") {
233 my $handler; $handler = $self->register_face_handler ($template, sub {
234 my ($face) = @_;
235
236 undef $handler;
237 $done_cb->();
238 $parse_list->($self->{json_coder}->decode ($face->{data}));
239 });
240 } else {
241 $done_cb->(0);
242 }
196} 243}
197 244
198# widgetset associate 245# widgetset associate
199sub ext_ws_a { 246sub ext_ws_a {
200 my ($self, %ass) = @_; 247 my ($self, %ass) = @_;
228 spell_list => $::SPELL_LIST, 275 spell_list => $::SPELL_LIST,
229 276
230 floorbox => $::FLOORBOX, 277 floorbox => $::FLOORBOX,
231 help_window => $::HELP_WINDOW, 278 help_window => $::HELP_WINDOW,
232 message_window => $::MESSAGE_WINDOW, 279 message_window => $::MESSAGE_WINDOW,
280 message_dist => $::MESSAGE_DIST,
233 statusbox => $::SDTATUSBOX, 281 statusbox => $::SDTATUSBOX,
234 282
235 inv => $::INV, 283 inv => $::INV,
236 invr => $::INVR, 284 invr => $::INVR,
237 invr_hb => $::INVR_HB, 285 invr_hb => $::INVR_HB,
286 334
287# message window 335# message window
288sub ext_channel_info { 336sub ext_channel_info {
289 my ($self, $info) = @_; 337 my ($self, $info) = @_;
290 $self->{channels}->{$info->{id}} = $info; 338 $self->{channels}->{$info->{id}} = $info;
291 $::MESSAGE_WINDOW->add_channel ($info); 339 $::MESSAGE_DIST->add_channel ($info);
292} 340}
293 341
294############################################################################# 342#############################################################################
295 343
296sub logprint { 344sub logprint {
478 $sktbl->clear; 526 $sktbl->clear;
479 527
480 my $sw = $self->{skillwid}{""} ||= [ 528 my $sw = $self->{skillwid}{""} ||= [
481 0, 0, (new DC::UI::Label text => "Experience", align => 1), 529 0, 0, (new DC::UI::Label text => "Experience", align => 1),
482 1, 0, (new DC::UI::Label text => "Lvl.", align => 1), 530 1, 0, (new DC::UI::Label text => "Lvl.", align => 1),
483 2, 0, (new DC::UI::Label text => "Progress", align => 0), 531 2, 0, (new DC::UI::Label text => "Progress"),
484 3, 0, (new DC::UI::Label text => "Skill", expand => 1), 532 3, 0, (new DC::UI::Label text => "Skill", expand => 1, align => 0),
485 4, 0, (new DC::UI::Label text => "Experience", align => 1), 533 4, 0, (new DC::UI::Label text => "Experience", align => 1),
486 5, 0, (new DC::UI::Label text => "Lvl.", align => 1), 534 5, 0, (new DC::UI::Label text => "Lvl.", align => 1),
487 6, 0, (new DC::UI::Label text => "Progress", align => 0), 535 6, 0, (new DC::UI::Label text => "Progress"),
488 7, 0, (new DC::UI::Label text => "Skill", expand => 1), 536 7, 0, (new DC::UI::Label text => "Skill", expand => 1, align => 0),
489 ]; 537 ];
490 538
491 my @add = @$sw; 539 my @add = @$sw;
492 540
493 my $TOOLTIP_ALL = "\n\n<small>Left click - ready skill\nMiddle click - use spell\nRight click - further options</small>"; 541 my $TOOLTIP_ALL = "\n\n<small>Left click - ready skill\nMiddle click - use spell\nRight click - further options</small>";
532 580
533 # progress 581 # progress
534 (new DC::UI::ExperienceProgress), 582 (new DC::UI::ExperienceProgress),
535 583
536 # label 584 # label
537 (new DC::UI::Label text => $name, on_button_down => $spell_cb, 585 (new DC::UI::Label text => $name, on_button_down => $spell_cb, align => 0,
538 can_events => 1, can_hover => 1, tooltip => (DC::Pod::section_label skill_description => $name) . $TOOLTIP_ALL), 586 can_events => 1, can_hover => 1, tooltip => (DC::Pod::section_label skill_description => $name) . $TOOLTIP_ALL),
539 ]; 587 ];
540 588
541 push @add, 589 push @add,
542 $x * 4 + 0, $y, $sw->[0], 590 $x * 4 + 0, $y, $sw->[0],
1092 1140
1093 my %skill_help; 1141 my %skill_help;
1094 1142
1095 for my $node (DC::Pod::find skill_description => "*") { 1143 for my $node (DC::Pod::find skill_description => "*") {
1096 my (undef, @par) = DC::Pod::section_of $node; 1144 my (undef, @par) = DC::Pod::section_of $node;
1097 $skill_help{$node->{kw}[0]} = DC::Pod::as_label @par; 1145 $skill_help{$node->[DC::Pod::N_KW][0]} = DC::Pod::as_label @par;
1098 }; 1146 };
1099 1147
1100 for my $skill (values %{$self->{skill_info}}) { 1148 for my $skill (values %{$self->{skill_info}}) {
1101 $self->{map_widget}->add_command ("ready_skill $skill", 1149 $self->{map_widget}->add_command ("ready_skill $skill",
1102 (DC::asxml "Ready the skill '$skill'\n\n") 1150 (DC::asxml "Ready the skill '$skill'\n\n")
1160 my ($conn, $tag, $name) = @_; 1208 my ($conn, $tag, $name) = @_;
1161 $conn->{open_container} = $tag; 1209 $conn->{open_container} = $tag;
1162 update_floorbox; 1210 update_floorbox;
1163 1211
1164 $::INVR_HB->clear (); 1212 $::INVR_HB->clear ();
1165 $::INVR_HB->add (new DC::UI::Label align => 0, expand => 1, text => $name); 1213 $::INVR_HB->add (new DC::UI::Label expand => 1, text => $name);
1166 1214
1167 if ($tag != 0) { # Floor isn't closable, is it? 1215 if ($tag != 0) { # Floor isn't closable, is it?
1168 $::INVR_HB->add (new DC::UI::Button 1216 $::INVR_HB->add (new DC::UI::Button
1169 text => "Close container", 1217 text => "Close container",
1170 tooltip => "Close the currently open container (if one is open)", 1218 tooltip => "Close the currently open container (if one is open)",
1254 1302
1255 my $weight = .001 * $self->{player}{weight}; 1303 my $weight = .001 * $self->{player}{weight};
1256 my $limit = .001 * $self->{stat}{+CS_STAT_WEIGHT_LIM}; 1304 my $limit = .001 * $self->{stat}{+CS_STAT_WEIGHT_LIM};
1257 1305
1258 $::STATWIDS->{weight}->set_text (sprintf "Weight: %.1fkg", $weight); 1306 $::STATWIDS->{weight}->set_text (sprintf "Weight: %.1fkg", $weight);
1259 $::STATWIDS->{m_weight}->set_text (sprintf "%.1fkg", $limit); 1307 $::STATWIDS->{m_weight}->set_text (sprintf "Max Weight: %.1fkg", $limit);
1260 $::STATWIDS->{i_weight}->set_text (sprintf "%.1f/%.1fkg", $weight, $limit); 1308 $::STATWIDS->{i_weight}->set_text (sprintf "%.1f/%.1fkg", $weight, $limit);
1261} 1309}
1262 1310
1263sub update_server_info { 1311sub update_server_info {
1264 my ($self) = @_; 1312 my ($self) = @_;
1272 . "extended command support $yesno[$self->{setup}{extcmd} > 0]\n" 1320 . "extended command support $yesno[$self->{setup}{extcmd} > 0]\n"
1273 . "examine command support $yesno[$self->{setup}{excmd} > 0]\n" 1321 . "examine command support $yesno[$self->{setup}{excmd} > 0]\n"
1274 . "editing support $yesno[!!$self->{editor_support}]\n" 1322 . "editing support $yesno[!!$self->{editor_support}]\n"
1275 . "map attributes $yesno[$self->{setup}{extmap} > 0]\n" 1323 . "map attributes $yesno[$self->{setup}{extmap} > 0]\n"
1276 . "big image protocol support $yesno[$self->{setup}{fxix} > 0]\n" 1324 . "big image protocol support $yesno[$self->{setup}{fxix} > 0]\n"
1277 . "cfplus support $yesno[$self->{cfplus_ext} > 0]" 1325 . "client support $yesno[$self->{cfplus_ext} > 0]"
1278 . ($self->{cfplus_ext} > 0 ? ", version $self->{cfplus_ext}" : "") ."\n" 1326 . ($self->{cfplus_ext} > 0 ? ", version $self->{cfplus_ext}" : "") ."\n"
1279 . "map size $self->{mapw}×$self->{maph}\n" 1327 . "map size $self->{mapw}×$self->{maph}\n"
1280 ); 1328 );
1281 1329
1282} 1330}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines