--- deliantra/Deliantra-Client/DC/Protocol.pm 2006/06/12 13:26:14 1.32
+++ deliantra/Deliantra-Client/DC/Protocol.pm 2006/06/19 06:50:45 1.39
@@ -10,6 +10,8 @@
use base 'Crossfire::Protocol::Base';
+our %open_logs;
+
sub new {
my $class = shift;
@@ -61,6 +63,28 @@
$self
}
+sub logprint {
+ my ($self, @a) = @_;
+ my $filename = "$Crossfire::VARDIR/log.$self->{host}";
+
+ my $fh = $open_logs{$filename};
+ unless ($fh) {
+ # FIXME: handle this more gracefully?
+ open $fh, ">>", $filename
+ or die "Couldn't open logfile: log.$self->{host}: $!";
+
+ $open_logs{$filename} = $fh;
+ }
+
+ my ($sec, $min, $hour, $mday, $mon, $year) = localtime (time);
+
+ my $ts = sprintf "%04d-%02d-%02d %02d:%02d:%02d",
+ $year + 1900, $mon + 1, $mday, $hour, $min, $sec;
+
+ print $fh "$ts ", @a, "\n";
+ $fh->flush;
+}
+
sub stats_update {
my ($self, $stats) = @_;
@@ -81,6 +105,7 @@
push @{$self->{record}}, $command;
}
+ $self->logprint ("send: ", $command);
$self->send_command ($command);
::status $command;
}
@@ -109,6 +134,12 @@
$self->{map_widget}->update;
}
+sub magicmap {
+ my ($self, $w, $h, $x, $y, $data) = @_;
+
+ $self->{map_widget}->set_magicmap ($w, $h, $x, $y, $data);
+}
+
sub flush_map {
my ($self) = @_;
@@ -129,6 +160,7 @@
delete $self->{neigh_map};
$self->{map}->clear;
+ delete $self->{map_widget}{magicmap};
}
@@ -281,7 +313,7 @@
my $txn = $CFClient::DB_ENV->txn_begin;
my $status = $self->{facemap}->db_get (id => $id);
if ($status == 0 || $status == BerkeleyDB::DB_NOTFOUND) {
- $id = ($id || 16) + 1;
+ $id = ($id || 64) + 1;
if ($self->{facemap}->put (id => $id) == 0
&& $self->{facemap}->put ($hash => $id) == 0) {
$txn->txn_commit;
@@ -371,6 +403,8 @@
[0.74, 0.65, 0.41],
);
+ $self->logprint ("info: ", $text);
+
my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0];
# try to create single paragraphs of multiple lines sent by the server
@@ -503,7 +537,7 @@
} else {
$::FLOORBOX->add (1, $row, new CFClient::UI::Button
text => "More...",
- on_activate => sub { $::INV_WINDOW->toggle_visibility },
+ on_activate => sub { $::INV_WINDOW->toggle_visibility; 0 },
);
last;
}
@@ -528,6 +562,7 @@
$::CONN->send ("apply $tag") # $::CONN->{open_container}")
if $tag != 0;
#if $CONN->{open_container} != 0;
+ 0
},
);
}
@@ -729,15 +764,17 @@
$entry->set_text ("");
$this->send ($text);
+
+ 0
},
);
$vbox->add ($self->{options} = new CFClient::UI::VBox);
- $self->{close_button} = new CFClient::UI::Button
+ $self->{bye_button} = new CFClient::UI::Button
text => "Bye (close)",
tooltip => "Use this button to end talking to the NPC. This also closes the dialog window.",
- on_activate => sub { $this->destroy },
+ on_activate => sub { $this->destroy; 0 },
;
$self->update_options;
@@ -746,7 +783,7 @@
$self->{conn}->connect_ext ($self->{token} => sub { $this->feed (@_) });
$self->{conn}->send ("ext npc_dialog_begin $self->{token} $self->{dx} $self->{dy}");
- $self->{entry}->focus_in;
+ $self->{entry}->grab_focus;
$self->{textview}->add_paragraph ([1, 1, 0, 1], "[starting conversation with $self->{title}]\n\n");
@@ -760,13 +797,14 @@
Scalar::Util::weaken $self;
$self->{options}->clear;
- $self->{options}->add ($self->{close_button});
+ $self->{options}->add ($self->{bye_button});
for my $kw (sort keys %{ $self->{kw} }) {
$self->{options}->add (new CFClient::UI::Button
text => $kw,
on_activate => sub {
$self->send ($kw);
+ 0
},
);
}
@@ -781,8 +819,6 @@
my ($msg, @kw) = split /\x00/, $msg;
$self->{kw}{$_} = 1 for @kw;
- warn "<<<<@kw>>>>\n";#d#
-
$msg = CFClient::UI::Label::escape $msg;
my $match = join "|", map "\\b\Q$_\E\\b", sort { (length $b) <=> (length $a) } keys %{ $self->{kw} };
$msg =~ s/($match)/$1<\/span>/gi; # underline when http-ready, huh.
@@ -806,7 +842,7 @@
sub destroy {
my ($self) = @_;
- #Carp::cluck "debug\n";#d# #todo# enable: destroyx gets called twice because scalar keys {} is 1
+ #Carp::cluck "debug\n";#d# #todo# enable: destroy gets called twice because scalar keys {} is 1
delete $self->{conn}{npc_dialog};
$self->{conn}->disconnect_ext ($self->{token});