--- deliantra/server/ext/dmcommands.ext 2007/01/01 16:50:09 1.4 +++ deliantra/server/ext/dmcommands.ext 2007/03/02 13:43:58 1.18 @@ -2,20 +2,52 @@ # wizard commands +cf::register_command shutdown => sub { + my ($ob, $arg) = @_; + return $ob->reply (undef, "Sorry, you can't shutdown the server.") + unless $ob->flag (cf::FLAG_WIZ); + + my $name = $ob->name; + cf::cleanup ("dm '$name' initiated shutdown" . ($arg ? " with reason: $arg" : "."), 0); + + 1 +}; + +cf::register_command kick => sub { + my ($ob, $arg) = @_; + return unless $ob->flag (cf::FLAG_WIZ); + + my $other = cf::player::find_active $arg + or return 0; + $other->kick ($ob); + $ob->reply (undef, "$arg is kicked out of the game.", cf::NDI_UNIQUE | cf::NDI_ALL | cf::NDI_RED); + + 1 +}; + cf::register_command goto => sub { my ($ob, $arg) = @_; return unless $ob->may ("command_goto"); - my $portal = cf::object::new "exit"; + my ($path, $x, $y) = split /\s+/, $arg, 3; + + $ob->goto ($path, $x, $y); + + 1 +}; + +cf::register_command teleport => sub { + my ($ob, $arg) = @_; - $portal->slaying ($arg); - $portal->stats->hp (0); - $portal->stats->sp (0); + return unless $ob->may ("command_teleport"); - $portal->apply ($ob); + cf::async { + my $other = cf::player::find $arg + or return $ob->reply (undef, "$arg: no such player."); - $portal->destroy; + $ob->goto ($other->maplevel, $other->ob->x, $other->ob->y); + }; 1 }; @@ -75,20 +107,21 @@ my $map = $ob->map; - cf::sync_job { - my @pl = $map->players; + my @pl = $map->players; + $_->enter_link for @pl; + cf::async { + my $name = $map->visible_name; - $_->enter_link for @pl; $map->reset; $_->leave_link for @pl; - }; - $ob->reply (undef, $map->{path}->as_string . " was reset."); + $ob->reply (undef, "$name was reset."); + }; 1 }; -for my $command (qw(teleport summon arrest kick banish)) { +for my $command (qw(summon arrest banish)) { my $method = "command_$command"; cf::register_command $command => sub {