ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/maps/perl/follow.ext
Revision: 1.4
Committed: Sat Feb 4 05:28:41 2006 UTC (18 years, 3 months ago) by root
Branch: MAIN
Changes since 1.3: +3 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #! perl
2    
3 root 1.4 # TODO: skip arena
4     # TODO: check for player leaving
5    
6 root 1.1 # implement a 'follow' command
7    
8     my %follow;
9    
10     cf::register_command follow => 0, sub {
11     my ($who, $args) = @_;
12    
13     my $name = $who->name;
14    
15     if ($args ne "" && $name ne $args) {
16     if (cf::player::find $args) {
17     $who->message ("following player '$args', to stop, type: 'follow");
18     $follow{$name} = $args;
19     } else {
20     $who->message ("cannot follow '$args': no such player");
21     }
22     } else {
23     $who->message ("follow mode off");
24     delete $follow{$name};
25     }
26     };
27    
28 root 1.3 sub teleport {
29     my ($pl, $map, $x, $y) = @_;
30    
31     my $portal = cf::object::new ("exit");
32    
33     $portal->set_slaying ($map->path);
34     $portal->set_hp ($x);
35     $portal->set_sp ($y);
36    
37     $portal->apply ($pl->ob, 0);
38    
39     $portal->free;
40     }
41    
42 root 1.1 sub on_clock {
43     my ($event) = @_;
44    
45     return unless %follow;
46    
47     while (my ($name, $target) = each %follow) {
48     my ($who, $other) = (cf::player::find $name, cf::player::find $target);
49     if ($who && $other) {
50 root 1.3 teleport $who, $other->ob->map, $other->ob->x, $other->ob->y
51 root 1.2 if $who->ob->map->path ne $other->ob->map->path;
52 root 1.1 } else {
53     warn "follow: $name or $target is gone, removing from follow list\n";
54     delete $follow{$name};
55     }
56     }
57     }
58    
59    
60    
61