--- deliantra/server/ext/dmcommands.ext 2007/03/14 15:44:47 1.19 +++ deliantra/server/ext/dmcommands.ext 2013/01/11 15:08:03 1.27 @@ -1,7 +1,95 @@ -#! perl # MANDATORY +#! perl # mandatory # wizard commands +sub dm($) { + my ($ob) = @_; + + if ($ob->flag (cf::FLAG_WIZ)) { + $ob->reply (undef, "You are already the Dungeon Master!"); + return 0; + + } else { + $ob->flag (cf::FLAG_WIZ , 1); + $ob->flag (cf::FLAG_WIZPASS, 1); + $ob->flag (cf::FLAG_WIZCAST, 1); + $ob->flag (cf::FLAG_WIZLOOK, 1); + + $ob->contr->do_los (1); + $ob->contr->ns->update_command_faces; + + $ob->reply (undef, "Ok, you are the Dungeon Master!"); + + return 1; + } +} + +sub hide($) { + my ($ob) = @_; + + if ($ob->contr->hidden) { + $ob->contr->hidden (0); +# $ob->invisible (1); + + $ob->reply (undef, "You are no longer hidden!"); + } else { + $ob->contr->hidden (1); + + $ob->reply (undef, "You are now hidden!"); + } +} + +cf::register_command dm => sub { + my ($ob, $arg) = @_; + + return unless $ob->may ("command_dm"); + + dm $ob + and $ob->reply (undef, "The Dungeon Master has arrived!", cf::NDI_UNIQUE | cf::NDI_ALL | cf::NDI_LT_GREEN); + + 1 +}; + +cf::register_command dmhide => sub { + my ($ob, $arg) = @_; + + return unless $ob->may ("command_dm"); + + dm $ob + and hide $ob; + + 1 +}; + +cf::register_command hide => sub { + my ($ob, $arg) = @_; + return $ob->reply (undef, "Sorry, you are not the DM!") + unless $ob->flag (cf::FLAG_WIZ); + + hide $ob; + + 1 +}; + +cf::register_command nodm => sub { + my ($ob, $arg) = @_; + return $ob->reply (undef, "Sorry, you are not the DM!") + unless $ob->flag (cf::FLAG_WIZ); + + $ob->contr->hidden + and hide $ob; + + $ob->flag (cf::FLAG_WIZ , 0); + $ob->flag (cf::FLAG_WIZPASS, 0); + $ob->flag (cf::FLAG_WIZCAST, 0); + $ob->flag (cf::FLAG_WIZLOOK, 0); + + $ob->contr->do_los (1); + $ob->contr->ns->update_command_faces; + + 1 +}; + cf::register_command shutdown => sub { my ($ob, $arg) = @_; return $ob->reply (undef, "Sorry, you can't shutdown the server.") @@ -43,6 +131,8 @@ return unless $ob->may ("command_teleport"); cf::async { + $Coro::current->{desc} = "teleport $arg"; + my $other = cf::player::find $arg or return $ob->reply (undef, "$arg: no such player."); @@ -93,9 +183,17 @@ return unless $ob->may ("command_wizlook"); - $ob->clear_los; + my $new_val = length $arg ? $arg * 1 : !$ob->flag (cf::FLAG_WIZLOOK); + + $ob->flag (cf::FLAG_WIZLOOK, $new_val); - $ob->reply (undef, "You can temporarily see through walls."); + $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 }; @@ -105,14 +203,19 @@ return unless $ob->may ("command_reset"); + my $unique = $arg =~ s/^\s*--unique\s*//; + my $map = $ob->map; my @pl = $map->players; $_->enter_link for @pl; cf::async { my $name = $map->visible_name; + $Coro::current->{desc} = "reset $name"; + $map->clear_unique_items if $unique; $map->reset; + $_->leave_link for @pl; $ob->reply (undef, "$name was reset."); @@ -120,6 +223,17 @@ 1 }; + +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";