* implemented automatic conf file loading using newly added "lgetfiles" script func.

* forgot to mention on last commit: a) support almost infinite DefScript args now: @0 ... @4294967295; b) speeded up DefScript execution speed by ~10%
* TODO: load .def files the same way as the conf files now.
This commit is contained in:
False.Genesis 2007-06-09 21:46:04 +00:00
parent dff2d2085e
commit 7ffc21bec5
4 changed files with 52 additions and 9 deletions

View File

@ -1,19 +1,33 @@
#permission=255
// Load required conf files.
LOADCONF PseuWoW.conf
LOADCONF users.conf
LOADCONF ScriptConfig.conf
// Load all conf files from directory /conf/
// get all *.conf file names from /conf/ directory, store the names in list 'fl' and the amount in 'fcount'
SET,fcount ?{LGETFILES,fl,conf conf}
LOGDETAIL * Loading ${fcount} conf files.
// iterate over all files and load them; if counter i is equal to the amount of files we are done.
SET,i 0
LOOP
IF ?{EQUAL,${i} ${fcount}}
EXITLOOP
ENDIF
SET,fn ?{LINDEX,fl ${i}}
LOG * Loading conf file [ ${fn} ]
LOADCONF ${fn}
ADD,i 1
ENDLOOP
UNSET fcount
UNSET i
UNSET fn
LDELETE fl
// Apply the configuration
APPLYCONF
LOG * Configuration applied.
// Apply user permissions
APPLYPERMISSIONS
IF ${#ENABLEGUI}
LOADCONF gui.conf
ENDIF
// remove dangerous variables
CLEANUPVARS

View File

@ -43,6 +43,7 @@ void DefScriptPackage::_InitDefScriptInterface(void)
AddFunc("objectknown",&DefScriptPackage::SCObjectKnown);
AddFunc("getplayerperm",&DefScriptPackage::SCGetPlayerPerm);
AddFunc("getscriptperm",&DefScriptPackage::SCGetScriptPerm);
AddFunc("lgetfiles",&DefScriptPackage::SCGetFileList);
}
DefReturnResult DefScriptPackage::SCshdn(CmdSet& Set)
@ -187,7 +188,7 @@ DefReturnResult DefScriptPackage::SCloadconf(CmdSet& Set){
if(variables.ReadVarsFromFile(fn))
{
log("Loaded conf file [%s]",fn.c_str());
logdev("Loaded conf file [%s]",fn.c_str());
return true;
}
@ -721,6 +722,32 @@ DefReturnResult DefScriptPackage::SCGetItemProtoValue(CmdSet& Set)
return r;
}
DefReturnResult DefScriptPackage::SCGetFileList(CmdSet& Set)
{
DefList *l = lists.Get(_NormalizeVarName(Set.arg[0],Set.myname));
l->clear();
*l = (DefList)GetFileList(Set.defaultarg);
if(Set.arg[1].length())
{
std::string ext = ".";
ext += Set.arg[1];
ext = stringToLower(ext);
for(DefList::iterator i = l->begin(); i != l->end(); )
{
std::string tmp = stringToLower(i->c_str() + (i->length() - ext.length()));
if( stringToLower(i->c_str() + (i->length() - ext.length())) != ext )
{
l->erase(i);
continue;
}
i++;
}
}
return toString((uint64)l->size());
}
void DefScriptPackage::My_LoadUserPermissions(VarSet &vs)
{
static char *prefix = "USERS::";

View File

@ -35,5 +35,6 @@ DefReturnResult SCGetObjectType(CmdSet&);
DefReturnResult SCObjectKnown(CmdSet&);
DefReturnResult SCGetPlayerPerm(CmdSet&);
DefReturnResult SCGetScriptPerm(CmdSet&);
DefReturnResult SCGetFileList(CmdSet&);
#endif

View File

@ -311,6 +311,7 @@ PseuInstanceConf::PseuInstanceConf()
{
enablecli=false;
exitonerror=false;
debug=0;
}
void PseuInstanceConf::ApplyFromVarSet(VarSet &v)