ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/ext/item-worldmap.ext
(Generate patch)

Comparing deliantra/server/ext/item-worldmap.ext (file contents):
Revision 1.5 by root, Sun Jul 22 20:08:38 2007 UTC vs.
Revision 1.6 by root, Mon Jul 23 16:53:15 2007 UTC

2 2
3# this module implements a rather fancy worldmap 3# this module implements a rather fancy worldmap
4 4
5our $WORLDMAP_UPDATE_INTERVAL = $cf::CFG{worldmap_update_interval} || 10; 5our $WORLDMAP_UPDATE_INTERVAL = $cf::CFG{worldmap_update_interval} || 10;
6 6
7our $GENCOUNT = 0;
7our %PLAYERINFO; 8our %PLAYERINFO;
8 9
9sub update_worldmap { 10sub update_worldmap {
10 my ($ws) = @_; 11 my ($ws) = @_;
11 12
89 90
90 while () { 91 while () {
91 $schedule_interval->interval ($WORLDMAP_UPDATE_INTERVAL); 92 $schedule_interval->interval ($WORLDMAP_UPDATE_INTERVAL);
92 $schedule_interval->next; 93 $schedule_interval->next;
93 94
95 cf::get_slot 0.05;
96
97 ++$GENCOUNT;
98
94 # recalculate player info 99 # recalculate player info
95 %PLAYERINFO = (); 100 my %new;
96 for (values %cf::PLAYER) { 101 for (values %cf::PLAYER) {
97 my $map = $_->ob->map 102 my $map = $_->ob->map
98 or next; 103 or next;
99 $map =~ /^\/world\/world_(\d\d\d)_(\d\d\d)/ 104 $map =~ /^\/world\/world_(\d\d\d)_(\d\d\d)/
100 or next; 105 or next;
106
101 my $ob = $_->ob; 107 my $ob = $_->ob;
102 my $x = ($1 - 100) * 50 + $ob->x; 108 my $x = ($1 - 100) * 50 + $ob->x;
103 my $y = ($2 - 100) * 50 + $ob->y; 109 my $y = ($2 - 100) * 50 + $ob->y;
104 110
105 0 <= $x && 0 <= $y && $x < 1500 && $y < 1500 111 0 <= $x && 0 <= $y && $x < 1500 && $y < 1500
106 or next; 112 or next;
107 113
108 # rounding saves network bandwidth... 114 # rounding saves network bandwidth...
109 $PLAYERINFO{$ob->name} = [(sprintf "%.3f", $x / 1500), (sprintf "%.3f", $y / 1500)]; 115 $x = sprintf "%.3f", $x / 1500;
116 $y = sprintf "%.3f", $y / 1500;
117
118 my $name = $ob->name;
119
120 if (my $pi = delete $PLAYERINFO{$name}) {
121 if ($pi->[0] == $x && $pi->[1] == $y) {
122 $new{$name} = $pi;
123 next;
124 }
125 }
126
127 $new{$name} = [$x, $y];
110 } 128 }
111 129
112 for (values %cf::PLAYER) { 130 for (values %cf::PLAYER) {
113 my $ns = $_->ns 131 my $ns = $_->ns
114 or next; 132 or next;
133
115 update_worldmap $ns->{ws_worldmap} 134 update_worldmap $ns->{ws_worldmap}
116 if $ns->{ws_worldmap} && $ns->{ws_worldmap}{toplevel}{visibility}; 135 if $ns->{ws_worldmap} && $ns->{ws_worldmap}{toplevel}{visibility};
117 } 136 }
118 } 137 }
119}; 138};

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines