--- deliantra/Deliantra-Client/DC/Protocol.pm 2006/06/12 13:26:14 1.32
+++ deliantra/Deliantra-Client/DC/Protocol.pm 2006/06/18 17:13:11 1.38
@@ -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,6 +764,8 @@
$entry->set_text ("");
$this->send ($text);
+
+ 0
},
);
@@ -737,7 +774,7 @@
$self->{close_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");
@@ -767,6 +804,7 @@
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.