--- deliantra/server/ext/item-worldmap.ext 2008/09/19 01:39:45 1.19 +++ deliantra/server/ext/item-worldmap.ext 2008/09/23 04:29:11 1.20 @@ -106,56 +106,58 @@ }, ; -cf::async_ext { - $Coro::current->{desc} = "worldmap updater"; - - while () { - Coro::EV::timer_once $WORLDMAP_UPDATE_INTERVAL; - - cf::get_slot 0.01, -50, "worldmap update"; - - ++$GENCOUNT; - - # recalculate player info - my %new; - for (values %cf::PLAYER) { - my $map = $_->ob->map - or next; - $map =~ /^\/world\/world_(\d\d\d)_(\d\d\d)/ - or next; - - my $ob = $_->ob; - my $x = ($1 - 100) * 50 + $ob->x; - my $y = ($2 - 100) * 50 + $ob->y; - - 0 <= $x && 0 <= $y && $x < 1500 && $y < 1500 - or next; - - $x = int $x * $MAPW / 1500; - $y = int $y * $MAPH / 1500; - - my $name = $ob->name; - - if (my $pi = delete $PLAYERINFO{$name}) { - if ($pi->[0] == $x && $pi->[1] == $y) { - $new{$name} = $pi; - next; +cf::post_init { + cf::async_ext { + $Coro::current->{desc} = "worldmap updater"; + + while () { + Coro::EV::timer_once $WORLDMAP_UPDATE_INTERVAL; + + cf::get_slot 0.01, -50, "worldmap update"; + + ++$GENCOUNT; + + # recalculate player info + my %new; + for (values %cf::PLAYER) { + my $map = $_->ob->map + or next; + $map =~ /^\/world\/world_(\d\d\d)_(\d\d\d)/ + or next; + + my $ob = $_->ob; + my $x = ($1 - 100) * 50 + $ob->x; + my $y = ($2 - 100) * 50 + $ob->y; + + 0 <= $x && 0 <= $y && $x < 1500 && $y < 1500 + or next; + + $x = int $x * $MAPW / 1500; + $y = int $y * $MAPH / 1500; + + my $name = $ob->name; + + if (my $pi = delete $PLAYERINFO{$name}) { + if ($pi->[0] == $x && $pi->[1] == $y) { + $new{$name} = $pi; + next; + } } + + $new{$name} = [$x, $y]; } - - $new{$name} = [$x, $y]; - } - *PLAYERINFO = \%new; + *PLAYERINFO = \%new; - cf::get_slot 0.03, -50, "worldmap socket update"; - for (values %cf::PLAYER) { - my $ns = $_->ns - or next; + cf::get_slot 0.03, -50, "worldmap socket update"; + for (values %cf::PLAYER) { + my $ns = $_->ns + or next; - update_worldmap $ns->{ws_worldmap} - if $ns->{ws_worldmap} && $ns->{ws_worldmap}{toplevel}{visibility}; + update_worldmap $ns->{ws_worldmap} + if $ns->{ws_worldmap} && $ns->{ws_worldmap}{toplevel}{visibility}; + } } - } + }; };