#! perl # implement a 'follow' command my %follow; cf::register_command follow => 0, sub { my ($who, $args) = @_; my $name = $who->name; if ($args ne "" && $name ne $args) { if (cf::player::find $args) { $who->message ("following player '$args', to stop, type: 'follow"); $follow{$name} = $args; } else { $who->message ("cannot follow '$args': no such player"); } } else { $who->message ("follow mode off"); delete $follow{$name}; } }; sub on_clock { my ($event) = @_; return unless %follow; while (my ($name, $target) = each %follow) { my ($who, $other) = (cf::player::find $name, cf::player::find $target); if ($who && $other) { $who->ob->teleport ($other->ob->map, $other->ob->x, $other->ob->y); } else { warn "follow: $name or $target is gone, removing from follow list\n"; delete $follow{$name}; } } }