Quote:
	
	
		| 
					Originally Posted by Kroeg
					
				 On a few quest files, it left off the ';' before the '}' at the end of the line.. others added the ';' but didn't put a space between ';' and '}'. | 
	
 
	Quote:
	
	
		| 
					Originally Posted by mollymillions
					
				 it still wont handle more than one function per line though. | 
	
 Attached is the perlscript that I've been using to convert scripts into perl.  Even if you choose to continue using the native scripting engine, I think you may find this useful.  It can be easily modified to suit your needs (if it doesn't already).  If you don't already have Perl, I recommend getting the 
Activestate distribution.  It is a small, free download.
	Code:
	#!/usr/bin/perl -w
#convert scripts from .qst to .pl
#usage: ./convert.pl [questdir]
use File::Find;
use strict;
sub convert
{
	my $infile = $_;
	(my $outfile = $infile)=~s/qst$/pl/;
	print "Converting file: $infile -> $outfile\n";
	if(!open IN, "$infile") {
		warn $!;
		return;
	}
	if(!open OUT, ">$outfile") {
		warn $!;
		return;
	}
	while(<IN>)
	{
		#remove stray backslashes
		s|\\|\?|;
		#change /yada yada yada/ comment lines to #yada yada
		s|^/(.*)/\s*$|#($1)|;
		#prefix each event block w/ "sub"
		s/^(EVENT_)/sub $1/;
		#change $1/$1- (etc) notation to instead match against $text
		s/\s*\$\d-?\s*=~\s*\"(.*?)\"/\$text=~\/$1\/i/;
		s/\$\d-?/\$text/;
		#change itemcount syntax
		s/if\(\$itemcount\(\"(\d+)\"\)\s*==/if\(\$itemcount\{$1\} && \$itemcount\{$1\} ==/;
		#change summonitem syntax to seperate args w/ commas
		s/summonitem\((.*?\")\s+(\".*?)\)/summonitem\($1, $2\)/;
		#change commands to have a quest:: prefix and be seperated by semi-colons (;)
		s/(say|emote|shout|spawn|echo|summonitem|castspell|depop|cumflag|flagnpc|flagclient|exp|level|safemove|rain|snow|givecash|pvp|doanim|addskill|me)(\(.*?\))/quest::$1$2;/g;
		print OUT $_;
	}
	close IN;
	close OUT;
}
@ARGV = qw(.) unless @ARGV;
find( sub {/^.*\.qst\z/s && convert("$_")}, @ARGV);
 If you need to ensure that quests are using valid database references, you can use something like the following.  I used ODBC here, but if you install the DBD::mysql module, you can go directly through mysql.
	Code:
	#! /usr/bin/perl -w
use strict;
use File::Find ();
use DBI;
my $dbh= DBI->connect("DBI:ODBC:yourdsnname","yourusername","yourpassword") or die "Got error $DBI::errstr when connecting to db\n";
#my $dbh= DBI->connect("DBI:mysql:yourdsnname","yourusername","yourpassword") or die "Got error $DBI::errstr when connecting to db\n";
# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, './quests');
exit;
sub wanted
{
    if(/^.*\.qst\z/s)
	{
		if(!open(SCRIPT, $_))
		{
			warn $!;
			return;
		}
		while(<SCRIPT>)
		{#summonitem("19629");
			if(/summonitem\(\"(\d+)\"\)/)
			{
				my $rv = $dbh->do("select * from items where id = $1");
				if(!$rv)
				{
					warn  "Can't execute query: $dbh->errstr $!";
					return;
				}
				if($rv == 0E0)
				{
					print "Error: summonning non-existant item (#$1) in $File::Find::name\n";
				}
			}
		}
		close SCRIPT;
	}
}
 By using the techniques in these two scripts, you should be able to mold your quest scripts to whatever format you desire.