From 7ffc21bec5b8a270566d84ae7bd3cdcb1d5fcf2b Mon Sep 17 00:00:00 2001 From: "False.Genesis" Date: Sat, 9 Jun 2007 21:46:04 +0000 Subject: [PATCH] * 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. --- bin/scripts/config.def | 30 +++++++++++++++++++------- src/Client/DefScriptInterface.cpp | 29 ++++++++++++++++++++++++- src/Client/DefScriptInterfaceInclude.h | 1 + src/Client/PseuWoW.cpp | 1 + 4 files changed, 52 insertions(+), 9 deletions(-) diff --git a/bin/scripts/config.def b/bin/scripts/config.def index f5246ae..cd3790c 100644 --- a/bin/scripts/config.def +++ b/bin/scripts/config.def @@ -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 diff --git a/src/Client/DefScriptInterface.cpp b/src/Client/DefScriptInterface.cpp index ab1b3af..cab9bf9 100644 --- a/src/Client/DefScriptInterface.cpp +++ b/src/Client/DefScriptInterface.cpp @@ -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::"; diff --git a/src/Client/DefScriptInterfaceInclude.h b/src/Client/DefScriptInterfaceInclude.h index 0a8b716..19a0a90 100644 --- a/src/Client/DefScriptInterfaceInclude.h +++ b/src/Client/DefScriptInterfaceInclude.h @@ -35,5 +35,6 @@ DefReturnResult SCGetObjectType(CmdSet&); DefReturnResult SCObjectKnown(CmdSet&); DefReturnResult SCGetPlayerPerm(CmdSet&); DefReturnResult SCGetScriptPerm(CmdSet&); +DefReturnResult SCGetFileList(CmdSet&); #endif \ No newline at end of file diff --git a/src/Client/PseuWoW.cpp b/src/Client/PseuWoW.cpp index 5241dca..87e64cf 100644 --- a/src/Client/PseuWoW.cpp +++ b/src/Client/PseuWoW.cpp @@ -311,6 +311,7 @@ PseuInstanceConf::PseuInstanceConf() { enablecli=false; exitonerror=false; + debug=0; } void PseuInstanceConf::ApplyFromVarSet(VarSet &v)