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;