… | |
… | |
5 | cf::register_command goto => sub { |
5 | cf::register_command goto => sub { |
6 | my ($ob, $arg) = @_; |
6 | my ($ob, $arg) = @_; |
7 | |
7 | |
8 | return unless $ob->may ("command_goto"); |
8 | return unless $ob->may ("command_goto"); |
9 | |
9 | |
10 | my $portal = cf::object::new "exit"; |
10 | my ($path, $x, $y) = split /\s+/, $arg, 3; |
11 | |
11 | |
12 | $portal->slaying ($arg); |
12 | $ob->goto ($path, $x, $y); |
13 | $portal->stats->hp (0); |
|
|
14 | $portal->stats->sp (0); |
|
|
15 | |
13 | |
16 | $portal->apply ($ob); |
14 | 1 |
|
|
15 | }; |
17 | |
16 | |
18 | $portal->destroy; |
17 | cf::register_command teleport => sub { |
|
|
18 | my ($ob, $arg) = @_; |
|
|
19 | |
|
|
20 | return unless $ob->may ("command_teleport"); |
|
|
21 | |
|
|
22 | cf::async { |
|
|
23 | my $other = cf::player::find $arg |
|
|
24 | or return $ob->reply (undef, "$arg: no such player."); |
|
|
25 | |
|
|
26 | $ob->goto ($other->maplevel, $other->ob->x, $other->ob->y); |
|
|
27 | }; |
19 | |
28 | |
20 | 1 |
29 | 1 |
21 | }; |
30 | }; |
22 | |
31 | |
23 | cf::register_command wizpass => sub { |
32 | cf::register_command wizpass => sub { |
… | |
… | |
66 | $ob->reply (undef, "You can temporarily see through walls."); |
75 | $ob->reply (undef, "You can temporarily see through walls."); |
67 | |
76 | |
68 | 1 |
77 | 1 |
69 | }; |
78 | }; |
70 | |
79 | |
71 | cf::register_command maps => sub { |
|
|
72 | my ($ob, $arg) = @_; |
|
|
73 | |
|
|
74 | no re 'eval'; $arg = qr<$arg>; |
|
|
75 | |
|
|
76 | my $format = "%2s %2s %-30.30s\n"; |
|
|
77 | |
|
|
78 | my $msg = sprintf $format, "Pl", "Fl", "Reset", "Name"; |
|
|
79 | |
|
|
80 | for (sort keys %cf::MAP) { |
|
|
81 | my $map = $cf::MAP{$_} |
|
|
82 | or next; |
|
|
83 | |
|
|
84 | $msg |
|
|
85 | } |
|
|
86 | |
|
|
87 | 1 |
|
|
88 | }; |
|
|
89 | |
|
|
90 | cf::register_command reset => sub { |
80 | cf::register_command reset => sub { |
91 | my ($ob, $arg) = @_; |
81 | my ($ob, $arg) = @_; |
92 | |
82 | |
93 | return unless $ob->may ("command_reset"); |
83 | return unless $ob->may ("command_reset"); |
94 | |
84 | |
95 | $ob->reply (undef, "You can temporarily see through walls."); |
85 | my $map = $ob->map; |
|
|
86 | |
|
|
87 | my @pl = $map->players; |
|
|
88 | $_->enter_link for @pl; |
|
|
89 | cf::async { |
|
|
90 | my $name = $map->visible_name; |
|
|
91 | |
|
|
92 | $map->reset; |
|
|
93 | $_->leave_link for @pl; |
|
|
94 | |
|
|
95 | $ob->reply (undef, "$name was reset."); |
|
|
96 | }; |
96 | |
97 | |
97 | 1 |
98 | 1 |
98 | }; |
99 | }; |
99 | |
100 | |
100 | for my $command (qw(teleport summon arrest kick banish)) { |
101 | for my $command (qw(summon arrest kick banish)) { |
101 | my $method = "command_$command"; |
102 | my $method = "command_$command"; |
102 | |
103 | |
103 | cf::register_command $command => sub { |
104 | cf::register_command $command => sub { |
104 | my ($ob, $arg) = @_; |
105 | my ($ob, $arg) = @_; |
105 | |
106 | |