--- deliantra/server/ext/dmcommands.ext 2007/01/14 02:10:41 1.13 +++ deliantra/server/ext/dmcommands.ext 2008/12/23 06:58:23 1.25 @@ -1,7 +1,30 @@ -#! perl +#! perl # mandatory # 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) = @_; @@ -20,8 +43,10 @@ return unless $ob->may ("command_teleport"); cf::async { + $Coro::current->{desc} = "teleport $arg"; + my $other = cf::player::find $arg - or return $ob->reply ("$arg: no such player."); + or return $ob->reply (undef, "$arg: no such player."); $ob->goto ($other->maplevel, $other->ob->x, $other->ob->y); }; @@ -70,9 +95,17 @@ return unless $ob->may ("command_wizlook"); - $ob->clear_los; + my $new_val = length $arg ? $arg * 1 : !$ob->flag (cf::FLAG_WIZLOOK); - $ob->reply (undef, "You can temporarily see through walls."); + $ob->flag (cf::FLAG_WIZLOOK, $new_val); + + $ob->contr->do_los (1); + + $ob->reply (undef, + $new_val + ? "You can now look through walls." + : "You will now see the same thing as you would normally.", + ); 1 }; @@ -88,6 +121,7 @@ $_->enter_link for @pl; cf::async { my $name = $map->visible_name; + $Coro::current->{desc} = "reset $name"; $map->reset; $_->leave_link for @pl; @@ -98,7 +132,18 @@ 1 }; -for my $command (qw(summon arrest kick banish)) { +cf::register_command observe => sub { + my ($ob, $arg) = @_; + + return unless $ob->may ("command_observe"); + + my $other = cf::player::find_active $arg; + $ob->contr->set_observe ($other ? $other->ob : undef); + + 1 +}; + +for my $command (qw(summon arrest banish)) { my $method = "command_$command"; cf::register_command $command => sub {