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.8 by root, Sun May 28 19:25:55 2006 UTC vs.
Revision 1.15 by root, Thu Jun 1 18:56:05 2006 UTC

66} 66}
67 67
68sub user_send { 68sub user_send {
69 my ($self, $command) = @_; 69 my ($self, $command) = @_;
70 70
71 if ($self->{record}) {
72 push @{$self->{record}}, $command;
73 }
74
71 $self->send_command ($command); 75 $self->send_command ($command);
72 ::status $command; 76 ::status $command;
77}
78
79sub start_record {
80 my ($self) = @_;
81
82 $self->{record} = [];
83}
84
85sub stop_record {
86 my ($self) = @_;
87 return delete $self->{record};
73} 88}
74 89
75sub map_scroll { 90sub map_scroll {
76 my ($self, $dx, $dy) = @_; 91 my ($self, $dx, $dy) = @_;
77 92
253 unless ($id) { 268 unless ($id) {
254 # create new id for face 269 # create new id for face
255 # I love transactions 270 # I love transactions
256 for (1..100) { 271 for (1..100) {
257 my $txn = $CFClient::DB_ENV->txn_begin; 272 my $txn = $CFClient::DB_ENV->txn_begin;
258 my $status = $self->{facemap}->db_get (id => $id, BerkeleyDB::DB_RMW); 273 my $status = $self->{facemap}->db_get (id => $id);
259 if ($status == 0 || $status == BerkeleyDB::DB_NOTFOUND) { 274 if ($status == 0 || $status == BerkeleyDB::DB_NOTFOUND) {
260 $id = ($id || 16) + 1; 275 $id = ($id || 16) + 1;
261 if ($self->{facemap}->put (id => $id) == 0 276 if ($self->{facemap}->put (id => $id) == 0
262 && $self->{facemap}->put ($hash => $id) == 0) { 277 && $self->{facemap}->put ($hash => $id) == 0) {
263 $txn->txn_commit; 278 $txn->txn_commit;
264 279
265 goto gotid; 280 goto gotid;
266 } 281 }
267 } 282 }
268 $txn->abort; 283 $txn->txn_abort;
269 } 284 }
270 285
271 CFClient::fatal "maximum number of transaction retries reached - database problems?"; 286 CFClient::fatal "maximum number of transaction retries reached - database problems?";
272 } 287 }
273 288
324 339
325 $prompt = $LAST_QUERY unless length $prompt; 340 $prompt = $LAST_QUERY unless length $prompt;
326 $LAST_QUERY = $prompt; 341 $LAST_QUERY = $prompt;
327 342
328 my $dialog = new CFClient::UI::FancyFrame 343 my $dialog = new CFClient::UI::FancyFrame
344 x => "center",
345 y => "center",
329 title => "Query", 346 title => "Query",
330 child => my $vbox = new CFClient::UI::VBox, 347 child => my $vbox = new CFClient::UI::VBox,
331 on_visibility_change => sub {
332 my ($self, $visible) = @_;
333 $self->center if $visible;
334 },
335 ; 348 ;
336 349
337 $vbox->add (new CFClient::UI::Label 350 $vbox->add (new CFClient::UI::Label
338 max_w => $::WIDTH * 0.4, 351 max_w => $::WIDTH * 0.4,
339 ellipsise => 0, 352 ellipsise => 0,
432sub spell_add { 445sub spell_add {
433 my ($self, $spell) = @_; 446 my ($self, $spell) = @_;
434 447
435 # TODO 448 # TODO
436 # create a widget dynamically, using spell face (CF::Protocol downloads them) 449 # create a widget dynamically, using spell face (CF::Protocol downloads them)
450 $::SPELL_LIST->add_spell ($spell);
451
437 $self->{map_widget}->add_command ("invoke $spell->{name}", CFClient::UI::Label::escape $spell->{message}); 452 $self->{map_widget}->add_command ("invoke $spell->{name}", CFClient::UI::Label::escape $spell->{message});
438 $self->{map_widget}->add_command ("cast $spell->{name}", CFClient::UI::Label::escape $spell->{message}); 453 $self->{map_widget}->add_command ("cast $spell->{name}", CFClient::UI::Label::escape $spell->{message});
439} 454}
440 455
441sub spell_delete { 456sub spell_delete {
442 my ($self, $spell) = @_; 457 my ($self, $spell) = @_;
458 $::SPELL_LIST->remove_spell ($spell);
443} 459}
444 460
445sub addme_success { 461sub addme_success {
446 my ($self) = @_; 462 my ($self) = @_;
447
448 $self->send ("command output-sync $::CFG->{output_sync}");
449 $self->send ("command output-count $::CFG->{output_count}");
450 463
451 my $parser = new Pod::POM; 464 my $parser = new Pod::POM;
452 my $pod = $parser->parse_file (CFClient::find_rcfile "pod/skill_help.pod"); 465 my $pod = $parser->parse_file (CFClient::find_rcfile "pod/skill_help.pod");
453 466
454 my %skill_tooltip; 467 my %skill_tooltip;
537} 550}
538 551
539sub set_opencont { 552sub set_opencont {
540 my ($conn, $tag, $name) = @_; 553 my ($conn, $tag, $name) = @_;
541 $conn->{open_container} = $tag; 554 $conn->{open_container} = $tag;
542 $::INVR_LBL->set_text ($name); 555
556 $::INV_RIGHT_HB->clear ();
557 $::INV_RIGHT_HB->add (new CFClient::UI::Label align => 0, expand => 1, text => $name);
558
559 if ($tag != 0) { # Floor isn't closable, is it?
560 $::INV_RIGHT_HB->add (new CFClient::UI::Button
561 text => "Close container",
562 tooltip => "Close the currently open container (if one is open)",
563 on_activate => sub {
564 $::CONN->send ("apply $tag") # $::CONN->{open_container}")
565 if $tag != 0;
566 #if $CONN->{open_container} != 0;
567 },
568 );
569 }
570
543 $::INVR->set_items ($conn->{container}{$tag}); 571 $::INVR->set_items ($conn->{container}{$tag});
544} 572}
545 573
546sub update_container { 574sub update_container {
547 my ($tag) = @_; 575 my ($tag) = @_;
576 if ($tag == 0) { 604 if ($tag == 0) {
577 update_floorbox; 605 update_floorbox;
578 update_container (0); 606 update_container (0);
579 } elsif ($tag == $self->{player}{tag}) { 607 } elsif ($tag == $self->{player}{tag}) {
580 $::INV->set_items ($self->{container}{$tag}) 608 $::INV->set_items ($self->{container}{$tag})
609 } else {
610 update_container ($tag);
581 } 611 }
582 612
583# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0}; 613# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0};
584} 614}
585 615
593 update_floorbox; 623 update_floorbox;
594 update_container ($_->{tag}); 624 update_container ($_->{tag});
595 } elsif ($_->{container} == $self->{player}{tag}) { 625 } elsif ($_->{container} == $self->{player}{tag}) {
596 $::INV->set_items ($self->{container}{$self->{player}{tag}}) 626 $::INV->set_items ($self->{container}{$self->{player}{tag}})
597 } else { 627 } else {
598 update_container ($_->{tag}); 628 update_container ($_->{container});
599 } 629 }
600 } 630 }
601} 631}
602 632
603sub item_update { 633sub item_update {
628} 658}
629 659
630sub player_update { 660sub player_update {
631 my ($self, $player) = @_; 661 my ($self, $player) = @_;
632 $::STATWIDS->{weight}->set_text (sprintf "Weight: %.1fkg", $player->{weight} / 1000); 662 $::STATWIDS->{weight}->set_text (sprintf "Weight: %.1fkg", $player->{weight} / 1000);
663
664 # do it here because it is ignored earlier, and there is no "login" event
665 $self->send_command ("output-sync $::CFG->{output_sync}");
666 $self->send_command ("output-count $::CFG->{output_count}");
633} 667}
634 668
6351; 6691;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines