--- deliantra/Deliantra-Client/DC/Protocol.pm 2006/06/05 21:10:04 1.21 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2006/06/11 18:41:30 1.30 @@ -349,64 +349,7 @@ $prompt = $LAST_QUERY unless length $prompt; $LAST_QUERY = $prompt; - my $dialog = new CFClient::UI::FancyFrame - x => "center", - y => "center", - title => "Query", - child => my $vbox = new CFClient::UI::VBox, - ; - - $vbox->add (new CFClient::UI::Label - max_w => $::WIDTH * 0.4, - ellipsise => 0, - text => $prompt); - - if ($flags & CS_QUERY_YESNO) { - $vbox->add (my $hbox = new CFClient::UI::HBox); - $hbox->add (new CFClient::UI::Button - text => "No", - on_activate => sub { - $self->send ("reply n"); - $dialog->destroy; - $self->{map_widget}->focus_in; - } - ); - $hbox->add (new CFClient::UI::Button - text => "Yes", - on_activate => sub { - $self->send ("reply y"); - $dialog->destroy; - }, - ); - - $dialog->focus_in; - - } elsif ($flags & CS_QUERY_SINGLECHAR) { - $dialog->{tooltip} = "Press a key (click on the entry to make sure it has keyboard focus)"; - $vbox->add (my $entry = new CFClient::UI::Entry - on_changed => sub { - $self->send ("reply $_[1]"); - $dialog->destroy; - }, - ); - - $entry->focus_in; - - } else { - $dialog->{tooltip} = "Enter the reply and press return (click on the entry to make sure it has keyboard focus)"; - - $vbox->add (my $entry = new CFClient::UI::Entry - $flags & CS_QUERY_HIDEINPUT ? (hiddenchar => "*") : (), - on_activate => sub { - $self->send ("reply $_[1]"); - $dialog->destroy; - }, - ); - - $entry->focus_in; - } - - $dialog->show; + $self->{query}-> ($self, $flags, $prompt); } sub drawinfo { @@ -430,6 +373,9 @@ my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0]; + # try to create single paragraphs of multiple lines sent by the server + $text =~ s/(?<=\S)\n(?=\w)/ /g; + $text = CFClient::UI::Label::escape $text; $text =~ s/\[b\](.*?)\[\/b\]/\1<\/b>/g; $text =~ s/\[color=(.*?)\](.*?)\[\/color\]/\2<\/span>/g; @@ -454,8 +400,11 @@ sub spell_add { my ($self, $spell) = @_; - # TODO - # create a widget dynamically, using spell face (CF::Protocol downloads them) + # try to create single paragraphs of multiple lines sent by the server + $spell->{message} =~ s/(?<=\S)\n(?=\w)/ /g; + $spell->{message} =~ s/\n+$//; + $spell->{message} ||= "Server did not provide a description for this spell."; + $::SETUP_SPELLS->add_spell ($spell); $self->{map_widget}->add_command ("invoke $spell->{name}", CFClient::UI::Label::escape $spell->{message}); @@ -542,7 +491,7 @@ my $row; for (@{ $::CONN->{container}{0} }) { - if ($row < 7) { + if ($row < 6) { local $_->{face_widget}; # hack to force recreation of widget local $_->{desc_widget}; # hack to force recreation of widget CFClient::Item::update_widgets $_; @@ -552,7 +501,10 @@ $row++; } else { - $::FLOORBOX->add (1, $row, new CFClient::UI::Label text => "More..."); + $::FLOORBOX->add (1, $row, new CFClient::UI::Button + text => "More...", + on_activate => sub { $::INV_WINDOW->toggle_visibility }, + ); last; } } @@ -671,11 +623,31 @@ sub player_update { my ($self, $player) = @_; + $::STATWIDS->{weight}->set_text (sprintf "Weight: %.1fkg", $player->{weight} / 1000); +} + +sub logged_in { + my ($self) = @_; + + $self->send_ext_req (cfplus => "version", "1", sub { + $self->{cfplus_ext} = $_[0]; + }); - # do it here because it is ignored earlier, and there is no "login" event $self->send_command ("output-sync $::CFG->{output_sync}"); $self->send_command ("output-count $::CFG->{output_count}"); + $self->send_command ("pickup $::CFG->{pickup}"); + + my @yesno = ("no", "yes"); + + $::SERVER_INFO->set_markup ( + "server $self->{host}:$self->{port}\n" + . "protocol version $self->{version}\n" + . "minimap support $yesno[$self->{setup}{mapinfocmd} > 0]\n" + . "extended command support $yesno[$self->{setup}{extcmd} > 0]\n" + . "cfplus support $yesno[$self->{cfplus_ext} > 0]\n" + . "map size $self->{mapw}×$self->{maph}\n" + ); } 1;