sub exitsgod {
foreach $a (keys %{$room[$user{$client}{room}]{exits}}) {
$outbuffer {$client}.="\r\n$a = ";
if ($a eq "obvious") {
$outbuffer{$client}.="$room[$user{$client}{room}]{exits}{$a}";
next;
}
foreach $b (keys %{$room[$user{$client}{room}]{exits}{$a}}){
$outbuffer{$client}.="$b-> $room[$user{$client}{room}]{exits}{$a}{$b} ";
}
}
$outbuffer{$client}.="\r\n$prompt";
}
sub exed {
my $exit=$input[1];
my $type=$input[2];
my $value=$input[3];
if ($exit eq "obvious" or $exit eq "o"){
shift @input;
shift @input;
$value="@input";
$room[$user{$client}{room}]{exits}{obvious}=$value;
$outbuffer{$client}.="room $user{$client}{room}'s obvious exits have been set to $value";
return;
}
if (!$value){
$value= $type;
$type="dest";
}
if (defined($exitnames{$exit})){
$exit="$exitnames{$exit}";
}
$room[$user{$client}{room}]{exits}{$exit}{$type}=$value;
if (!$value and $type eq "dest"){
delete($room[$user{$client}{room}]{exits}{$exit});
$outbuffer{$client}.="$user{$client}{room}'s $exit $type has been deleted.";
}else {
$outbuffer{$client}.="$user{$client}{room}'s $exit $type has been set to $value";
}
}
sub roomed {
my $room=($input[1] or $user{$client}{room});
$outbuffer{$client}.="editing $room: \r\n$room[$room]{longdesc}\r\n";
$type{$client}="roomed2";
$user{$client}{editing}=$room;
}
sub roomed2 {
$room[$user{$client}{editing}]{longdesc}="$request";
delete $user{$client}{editing};
$type{$client}="normal";
$outbuffer{$client}.="done\r\n";
}
%exitnames=(n=>"North", s=>"South", e=>"East", w=>"West", ne=>"NorthEast", nw=>"NorthWest", se=>"SouthEast", sw=>"SouthWest");
sub save_room {
my $filename=(shift or "map/map.xml");
my $b=1;
local $string;
foreach (@room){
unless ($room[$b]){
$b++;
next;
}
$string.="<room>\n";
$string.="<num=$b>\n";
foreach $a (keys %{$room[$b]}){
if ($a eq "in"){
next;
}
descend($room[$b]{$a}, $a);
}
$string.="</room>\n";
$b++;
}
unlink($filename);
open (FILE, ">>$filename");
print FILE $string;
close (FILE);
$outbuffer{$client}.="Rooms saved";
}
return 1;