ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/lib/cf.pm
(Generate patch)

Comparing deliantra/server/lib/cf.pm (file contents):
Revision 1.606 by root, Sun Nov 18 08:34:23 2012 UTC vs.
Revision 1.612 by root, Wed Nov 21 12:47:09 2012 UTC

597 my $busy; 597 my $busy;
598 598
599 while () { 599 while () {
600 next_job: 600 next_job:
601 601
602 Coro::cede;
603
602 my $avail = cf::till_tick; 604 my $avail = cf::till_tick;
603 605
604 for (0 .. $#SLOT_QUEUE) { 606 for (0 .. $#SLOT_QUEUE) {
605 if ($SLOT_QUEUE[$_][0] <= $avail) { 607 if ($SLOT_QUEUE[$_][0] <= $avail) {
606 $busy = 0; 608 $busy = 0;
607 my $job = splice @SLOT_QUEUE, $_, 1, (); 609 my $job = splice @SLOT_QUEUE, $_, 1, ();
608 $job->[2]->send; 610 $job->[2]->send;
609 Coro::cede;
610 goto next_job; 611 goto next_job;
611 } else { 612 } else {
612 $SLOT_QUEUE[$_][0] *= $SLOT_DECAY; 613 $SLOT_QUEUE[$_][0] *= $SLOT_DECAY;
613 } 614 }
614 } 615 }
615 616
616 if (@SLOT_QUEUE) { 617 if (@SLOT_QUEUE) {
617 # we do not use wait_for_tick() as it returns immediately when tick is inactive 618 wait_for_tick;
618 $WAIT_FOR_TICK->wait;
619 } else { 619 } else {
620 $busy = 0; 620 $busy = 0;
621 Coro::schedule; 621 Coro::schedule;
622 } 622 }
623 } 623 }
3041} 3041}
3042 3042
3043=head3 cf::client 3043=head3 cf::client
3044 3044
3045=over 4 3045=over 4
3046
3047=item $client->send_drawinfo ($text, $flags)
3048
3049Sends a drawinfo packet to the client. Circumvents output buffering so
3050should not be used under normal circumstances.
3051
3052=cut
3053
3054sub cf::client::send_drawinfo {
3055 my ($self, $text, $flags) = @_;
3056
3057 utf8::encode $text;
3058 $self->send_packet (sprintf "msg %d 0 %s", $flags || cf::NDI_BLACK, $text);
3059}
3060 3046
3061=item $client->send_big_packet ($pkt) 3047=item $client->send_big_packet ($pkt)
3062 3048
3063Like C<send_packet>, but tries to compress large packets, and fragments 3049Like C<send_packet>, but tries to compress large packets, and fragments
3064them as required. 3050them as required.
3290 if @{ $self->{query_queue} } == 1; 3276 if @{ $self->{query_queue} } == 1;
3291 3277
3292 1 3278 1
3293} 3279}
3294 3280
3281=item $client->update_command_faces
3282
3283=cut
3284
3285our %COMMAND_FACE;
3286
3287sub cf::client::update_command_faces {
3288 my ($self) = @_;
3289
3290 my @faces = grep $_,
3291 $COMMAND_FACE{standard},
3292 $COMMAND_FACE{emote},
3293 $COMMAND_FACE{skill},
3294 $self->pl->ob->flag (cf::FLAG_WIZ) ? $COMMAND_FACE{dm} : (),
3295 ;
3296
3297 $self->send_face ($_)
3298 for @faces;
3299 $self->flush_fx;
3300
3301 $self->ext_msg (command_list => @faces);
3302}
3303
3304=item cf::client::set_command_face $type, $commands
3305
3306=cut
3307
3308sub cf::client::set_command_face {
3309 my ($type, $list) = @_;
3310
3311 my $idx = &cf::face::set ( #d# ugly forward reference
3312 "command_list/$type" => cf::FT_RSRC,
3313 JSON::XS->new->utf8->encode ([ sort @$list ])
3314 );
3315
3316 $COMMAND_FACE{$type} = $idx;
3317}
3318
3295cf::client->attach ( 3319cf::client->attach (
3296 on_connect => sub { 3320 on_connect => sub {
3297 my ($ns) = @_; 3321 my ($ns) = @_;
3298 3322
3299 $ns->{json_coder} = JSON::XS->new->utf8->max_size (1e6)->convert_blessed; 3323 $ns->{json_coder} = JSON::XS->new->utf8->max_size (1e6)->convert_blessed;
3763 cf::face::set 3787 cf::face::set
3764 "res/spell_paths" => FT_RSRC, 3788 "res/spell_paths" => FT_RSRC,
3765 JSON::XS->new->utf8->canonical->encode ( 3789 JSON::XS->new->utf8->canonical->encode (
3766 [map [cf::spellpathnames ($_)], 0 .. NRSPELLPATHS - 1] 3790 [map [cf::spellpathnames ($_)], 0 .. NRSPELLPATHS - 1]
3767 ); 3791 );
3792
3793 # command completion
3794 my @commands;
3795
3796 for (0..cf::arch::skillvec_size - 1) {
3797 my $skill = cf::arch::skillvec $_;
3798 my $name = $skill->name;
3799 my $flags = cf::skill_flags $skill->subtype;
3800
3801 push @commands, "ready_skill $name" if $flags & (SF_COMBAT | SF_RANGED | SF_GRACE);
3802 push @commands, "use_skill $name" if $flags & (SF_USE | SF_AUTARK | SF_GRACE);
3803 }
3804
3805 cf::client::set_command_face skill => \@commands;
3768} 3806}
3769 3807
3770sub reload_treasures { 3808sub reload_treasures {
3771 load_resource_file "$DATADIR/treasures" 3809 load_resource_file "$DATADIR/treasures"
3772 or die "unable to load treasurelists\n"; 3810 or die "unable to load treasurelists\n";

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines