--- deliantra/maps/perl/cfplus.ext 2006/06/19 10:19:51 1.4 +++ deliantra/maps/perl/cfplus.ext 2006/07/11 15:37:31 1.5 @@ -14,6 +14,18 @@ my %dialog; # currently active dialogs +my $timer = Event->timer (interval => 0.2, parked => 1, cb => sub { + while (my ($token, $dialog) = each %dialog) { + my (undef, $dx, $dy) = $dialog->{ob}->rangevector ($dialog->{npc}); + next if (abs $dx) <= 2 && (abs $dy) <= 2; + + $dialog->{ob}->contr->send ("ext $token out_of_range"); + delete $dialog{$token}; + } + + $_[0]->w->stop unless keys %dialog; +}); + sub dialog_tell { my ($token, $dialog, $msg) = @_; @@ -55,6 +67,7 @@ if (NPC_Dialogue::has_dialogue $npc) { $dialog{$token} = new NPC_Dialogue ob => $pl->ob, npc => $npc; dialog_tell $token, $dialog{$token}, "hi"; + $timer->start; return; } } @@ -85,17 +98,4 @@ 0 } -sub on_clock { - return 0 unless %dialog; - - while (my ($token, $dialog) = each %dialog) { - my (undef, $dx, $dy) = $dialog->{ob}->rangevector ($dialog->{npc}); - next if (abs $dx) <= 2 && (abs $dy) <= 2; - - $dialog->{ob}->contr->send ("ext $token out_of_range"); - delete $dialog{$token}; - } - - 0 -}