diff --git a/code/nel/include/nel/3d/tile_bank.h b/code/nel/include/nel/3d/tile_bank.h index 00e0f2cae..32a205e6d 100644 --- a/code/nel/include/nel/3d/tile_bank.h +++ b/code/nel/include/nel/3d/tile_bank.h @@ -20,6 +20,7 @@ #include "nel/misc/debug.h" #include "nel/misc/stream.h" #include "nel/misc/rgba.h" +#include "nel/misc/path.h" #include #include #include @@ -82,8 +83,8 @@ public: // not free _Flags&=~NL3D_CTILE_FREE_FLAG; - // set filename - _BitmapName[bitmapType]=name; + // set filename, replacing \\ by / if needed + _BitmapName[bitmapType] = NLMISC::CPath::standardizePath(name, false); } std::string getFileName (TBitmap bitmapType) const diff --git a/code/nel/include/nel/misc/common.h b/code/nel/include/nel/misc/common.h index 7dc394f24..710a9e6df 100644 --- a/code/nel/include/nel/misc/common.h +++ b/code/nel/include/nel/misc/common.h @@ -360,6 +360,11 @@ sint launchProgramAndWaitForResult (const std::string &programName, const std::s /// This function executes a program and returns output as a string std::string getCommandOutput(const std::string &command); +/// This function replace all environment variables in a string by their content. +/// Environment variables names can use both Windows (%NAME%) and UNIX syntax ($NAME) +/// Authorized characters in names are A-Z, a-z, 0-9 and _ +std::string expandEnvironmentVariables(const std::string &s); + /// This function kills a program using his pid (on unix, it uses the kill() POSIX function) bool killProgram(uint32 pid); diff --git a/code/nel/include/nel/misc/path.h b/code/nel/include/nel/misc/path.h index ff7711b06..20ea9b2a9 100644 --- a/code/nel/include/nel/misc/path.h +++ b/code/nel/include/nel/misc/path.h @@ -497,7 +497,7 @@ public: static void getFileListByName(const std::string &extension, const std::string &name, std::vector &filenames); /** Create a list of file having the requested string in the path and the requested extension - */ + */ static void getFileListByPath(const std::string &extension, const std::string &path, std::vector &filenames); /** Make a path relative to another if possible, else doesn't change it. @@ -508,18 +508,24 @@ public: static bool makePathRelative (const char *basePath, std::string &relativePath); /** Make path absolute - * \param relativePath - The relative path - * \param directory - the directory to which the path is relative to - * returns the absolute path, or empty if something went wrong. - */ + * \param relativePath - The relative path + * \param directory - the directory to which the path is relative to + * returns the absolute path, or empty if something went wrong. + */ static std::string makePathAbsolute (const std::string &relativePath, const std::string &directory ); + /** Return if a path is absolute or not. + * \param path - The path + * returns true if path is absolute or false if relative. + */ + static bool isAbsolutePath (const std::string &path); + /** If File in this list is added more than one in an addSearchPath, it doesn't launch a warning. */ static void addIgnoredDoubleFile(const std::string &ignoredFile); /** For the moment after memoryCompress you cant addsearchpath anymore - */ + */ static void memoryCompress(); static void memoryUncompress(); @@ -527,17 +533,17 @@ public: static bool isMemoryCompressed() { return getInstance()->_FileContainer.isMemoryCompressed(); } /** Get the ms windows directory (in standardized way with end slash), or returns an empty string on other os - */ + */ static std::string getWindowsDirectory(); /** Get application directory. - * \return directory where applications should write files. - */ + * \return directory where applications should write files. + */ static std::string getApplicationDirectory(const std::string &appName = ""); /** Get a temporary directory. - * \return temporary directory where applications should write files. - */ + * \return temporary directory where applications should write files. + */ static std::string getTemporaryDirectory(); // release singleton @@ -612,7 +618,7 @@ struct CFile * Return the position between [begin,end[ of the last separator between path and filename ('/' or '\'). * If there's no separator, it returns string::npos. */ - static int getLastSeparator (const std::string &filename); + static std::string::size_type getLastSeparator (const std::string &filename); static std::string getFilenameWithoutExtension (const std::string &filename); static std::string getExtension (const std::string &filename); diff --git a/code/nel/src/misc/common.cpp b/code/nel/src/misc/common.cpp index 982d42da3..e57ce635b 100644 --- a/code/nel/src/misc/common.cpp +++ b/code/nel/src/misc/common.cpp @@ -913,6 +913,80 @@ std::string getCommandOutput(const std::string &command) return result; } +std::string expandEnvironmentVariables(const std::string &s) +{ + size_t len = s.length(); + std::string ret; + + std::string::size_type pos1 = 0, pos2 = 0; + + // look for environement variables delimiters + while(pos2 < len && (pos1 = s.find_first_of("%$", pos2)) != std::string::npos) + { + // copy string unprocessed part + ret += s.substr(pos2, pos1-pos2); + + // extract a valid variable name (a-zA-Z0-9_) + pos2 = pos1+1; + + while(pos2 < len && (isalnum(s[pos2]) || s[pos2] == '_')) ++pos2; + + // check if variable name is empty + bool found = pos2 > pos1+1; + + std::string name; + + if (found) + { + // found at least 1 character + name = s.substr(pos1+1, pos2-pos1-1); + } + + // Windows format needs a trailing % delimiter + if (found && s[pos1] == '%') + { + if (pos2 >= len || s[pos2] != '%') + { + // not a variable name, because no trailing % + found = false; + } + else + { + // found a trailing %, next character to check + ++pos2; + } + } + + // get variable value if name found + if (found) + { + const char *value = getenv(name.c_str()); + + if (value) + { + // value found + ret += std::string(value); + } + else + { + // value not found + found = false; + } + } + + if (!found) + { + // variable or value not found, don't evaluate variable + ret += s.substr(pos1, pos2-pos1); + } + } + + // copy last unprocessed part + ret += s.substr(pos2); + + return ret; +} + /* * Display the bits (with 0 and 1) composing a byte (from right to left) */ diff --git a/code/nel/src/misc/path.cpp b/code/nel/src/misc/path.cpp index de36efa56..7ec61fdd7 100644 --- a/code/nel/src/misc/path.cpp +++ b/code/nel/src/misc/path.cpp @@ -1854,7 +1854,7 @@ std::string CFileContainer::getTemporaryDirectory() ////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////// -int CFile::getLastSeparator (const string &filename) +std::string::size_type CFile::getLastSeparator (const string &filename) { string::size_type pos = filename.find_last_of ('/'); if (pos == string::npos) @@ -1865,7 +1865,7 @@ int CFile::getLastSeparator (const string &filename) pos = filename.find_last_of ('@'); } } - return (int)pos; + return pos; } string CFile::getFilename (const string &filename) @@ -2597,6 +2597,25 @@ std::string CPath::makePathAbsolute( const std::string &relativePath, const std: return npath; } +bool CPath::isAbsolutePath(const std::string &path) +{ + if (path.empty()) return false; + +#ifdef NL_OS_WINDOWS + // Windows root of current disk. Eg.: "\" or + // Windows network address. Eg.: \\someshare\path + if (path[0] == '\\') return true; + + // Normal Windows absolute path. Eg.: C:\something + if (path.length() > 2 && isalpha(path[0]) && (path[1] == ':' ) && ((path[2] == '\\') || (path[2] == '/' ))) return true; +#endif + + // Unix filesystem absolute path (works also under Windows) + if (path[0] == '/') return true; + + return false; +} + bool CFile::setRWAccess(const std::string &filename) { #ifdef NL_OS_WINDOWS diff --git a/code/nel/src/net/service.cpp b/code/nel/src/net/service.cpp index 1f3436d1c..f7dc40da1 100644 --- a/code/nel/src/net/service.cpp +++ b/code/nel/src/net/service.cpp @@ -1169,7 +1169,7 @@ sint IService::main (const char *serviceShortName, const char *serviceLongName, { for (uint i = 0; i < var->size(); i++) { - CPath::addSearchPath (var->asString(i), true, false); + CPath::addSearchPath (NLMISC::expandEnvironmentVariables(var->asString(i)), true, false); } } @@ -1177,7 +1177,7 @@ sint IService::main (const char *serviceShortName, const char *serviceLongName, { for (uint i = 0; i < var->size(); i++) { - CPath::addSearchPath (var->asString(i), false, false); + CPath::addSearchPath (NLMISC::expandEnvironmentVariables(var->asString(i)), false, false); } } diff --git a/code/nel/tools/3d/build_far_bank/build_far_bank.cpp b/code/nel/tools/3d/build_far_bank/build_far_bank.cpp index bd060417e..dfc3f7f65 100644 --- a/code/nel/tools/3d/build_far_bank/build_far_bank.cpp +++ b/code/nel/tools/3d/build_far_bank/build_far_bank.cpp @@ -50,16 +50,6 @@ bool recompute (const char* f1, const char* f2) return buf1.st_mtime > buf2.st_mtime; } -// Return true if the file exist -bool isFileExist (const char* sName) -{ - FILE *pFile=fopen (sName, "rb"); - if (!pFile) - return false; - fclose (pFile); - return true; -} - // Fill tile far pixel with this bitmap bool fillTileFar (uint tile, const char* sName, CTileFarBank::TFarType type, CTileFarBank& farBank, bool _256, uint8 rotate) { @@ -90,7 +80,7 @@ bool fillTileFar (uint tile, const char* sName, CTileFarBank::TFarType type, CTi // Get bitmap size uint width=bitmap.getWidth(); uint height=bitmap.getHeight(); - + // Check size.. if ((!((_256&&(width==256)&&(height==256))||((!_256)&&(width==128)&&(height==128))))) @@ -163,8 +153,6 @@ int main (int argc, char **argv) outputVersion=true; if (strcmp (argv[n], "-?")==0) outputHelp=true; - if (strcmp (argv[n], "-?")==0) - outputHelp=true; if (strncmp (argv[n], "-d", 2)==0) { rootDir = argv[n]; @@ -192,7 +180,6 @@ int main (int argc, char **argv) "\t-d#: change the root directory of the small bank. # is the new directory\n" "\t-p#: postfix tiles filename by #\n" "\t-r: load the bitmaps from the current directory\n" - "\t-r: load the bitmaps from the current directory\n" "\t-f: force recomputation of all the tiles\n" "\t-v: print the version\n" "\t-?: print help\n" @@ -223,7 +210,7 @@ int main (int argc, char **argv) // Serial the bank in input farBank.serial (inputFarBank); } - + // Force recomputation ? if (recompute (argv[1], argv[2])) { @@ -287,8 +274,8 @@ int main (int argc, char **argv) if (pTile->getRelativeFileName (CTile::diffuse)!="") { // File exist ? - string tileFilename = bank.getAbsPath()+pTile->getRelativeFileName (CTile::diffuse); - if (isFileExist (tileFilename.c_str())) + string tileFilename = bank.getAbsPath()+CPath::standardizePath(pTile->getRelativeFileName (CTile::diffuse), false); + if (CFile::fileExists(tileFilename)) { // Recompute it? if (recompute (tileFilename.c_str(), argv[2])||forceRecomputation) @@ -307,7 +294,7 @@ int main (int argc, char **argv) { // One more tile tileCount++; - + printf ("Skipping %s...\n", tileFilename.c_str()); bDeleteDiffuse=false; } @@ -318,8 +305,8 @@ int main (int argc, char **argv) if (pTile->getRelativeFileName (CTile::additive)!="") { // File exist ? - string tileFilename = bank.getAbsPath()+pTile->getRelativeFileName (CTile::additive); - if (isFileExist (tileFilename.c_str())) + string tileFilename = bank.getAbsPath()+CPath::standardizePath(pTile->getRelativeFileName (CTile::additive), false); + if (CFile::fileExists(tileFilename)) { // Recompute it? if (recompute (tileFilename.c_str(), argv[2])||forceRecomputation) @@ -349,8 +336,8 @@ int main (int argc, char **argv) if (pTile->getRelativeFileName (CTile::alpha)!="") { // File exist ? - string tileFilename = bank.getAbsPath()+pTile->getRelativeFileName (CTile::alpha); - if (isFileExist (tileFilename.c_str())) + string tileFilename = bank.getAbsPath()+CPath::standardizePath(pTile->getRelativeFileName (CTile::alpha), false); + if (CFile::fileExists(tileFilename)) { // Recompute it? if (recompute (tileFilename.c_str(), argv[2])||forceRecomputation) @@ -418,7 +405,7 @@ int main (int argc, char **argv) { nlwarning ("ERROR Can't open file %s for reading\n", argv[1]); } - } + } // exit return 0; diff --git a/code/ryzom/client/src/init.cpp b/code/ryzom/client/src/init.cpp index fec51a93e..b0098ccba 100644 --- a/code/ryzom/client/src/init.cpp +++ b/code/ryzom/client/src/init.cpp @@ -616,6 +616,63 @@ void initStereoDisplayDevice() IStereoDisplay::releaseUnusedLibraries(); } +static void addPaths(IProgressCallback &progress, const std::vector &paths, bool recurse) +{ + // all prefixes for paths + std::vector directoryPrefixes; + + // current directory has priority everywhere + directoryPrefixes.push_back(""); + +#if defined(NL_OS_WINDOWS) + char path[MAX_PATH]; + GetModuleFileNameA(GetModuleHandleA(NULL), path, MAX_PATH); + + // check in same directory as executable + directoryPrefixes.push_back(CPath::standardizePath(CFile::getPath(path))); +#elif defined(NL_OS_MAC) + // check in bundle (Installer) + directoryPrefixes.push_back(CPath::standardizePath(getAppBundlePath() + "/Contents/Resources")); + + // check in same directory as bundle (Steam) + directoryPrefixes.push_back(CPath::standardizePath(getAppBundlePath()); +#elif defined(NL_OS_UNIX) + if (CFile::isDirectory(getRyzomSharePrefix())) directoryPrefixes.push_back(CPath::standardizePath(getRyzomSharePrefix())); +#endif + + float total = (float)(directoryPrefixes.size() * paths.size()); + float current = 0.f, next = 0.f; + + for (uint j = 0; j < directoryPrefixes.size(); j++) + { + std::string directoryPrefix = directoryPrefixes[j]; + + for (uint i = 0; i < paths.size(); i++) + { + std::string directory = NLMISC::expandEnvironmentVariables(paths[i]); + + // only prepend default directory if path is relative + if (!directory.empty() && !directoryPrefix.empty() && !CPath::isAbsolutePath(directory)) + { + directory = directoryPrefix + directory; + } + + // update next progress value + next += 1.f; + + progress.progress (current/total); + progress.pushCropedValues (current/total, next/total); + + // next is current value + current = next; + + CPath::addSearchPath(directory, recurse, false, &progress); + + progress.popCropedValues (); + } + } +} + void addSearchPaths(IProgressCallback &progress) { // Add search path of UI addon. Allow only a subset of files. @@ -625,54 +682,13 @@ void addSearchPaths(IProgressCallback &progress) // Add Standard search paths { H_AUTO(InitRZAddSearchPath2) - for (uint i = 0; i < ClientCfg.DataPath.size(); i++) - { - progress.progress ((float)i/(float)ClientCfg.DataPath.size()); - progress.pushCropedValues ((float)i/(float)ClientCfg.DataPath.size(), (float)(i+1)/(float)ClientCfg.DataPath.size()); - CPath::addSearchPath(ClientCfg.DataPath[i], true, false, &progress); - - progress.popCropedValues (); - } + addPaths(progress, ClientCfg.DataPath, true); CPath::loadRemappedFiles("remap_files.csv"); } - for (uint i = 0; i < ClientCfg.DataPathNoRecurse.size(); i++) - { - progress.progress ((float)i/(float)ClientCfg.DataPathNoRecurse.size()); - progress.pushCropedValues ((float)i/(float)ClientCfg.DataPathNoRecurse.size(), (float)(i+1)/(float)ClientCfg.DataPathNoRecurse.size()); - - CPath::addSearchPath(ClientCfg.DataPathNoRecurse[i], false, false, &progress); - - progress.popCropedValues (); - } - - std::string defaultDirectory; - -#ifdef NL_OS_MAC - defaultDirectory = CPath::standardizePath(getAppBundlePath() + "/Contents/Resources"); -#elif defined(NL_OS_UNIX) - if (CFile::isDirectory(getRyzomSharePrefix())) defaultDirectory = CPath::standardizePath(getRyzomSharePrefix()); -#endif - - // add in last position, a specific possibly read only directory - if (!defaultDirectory.empty()) - { - for (uint i = 0; i < ClientCfg.DataPath.size(); i++) - { - // don't prepend default directory if path is absolute - if (!ClientCfg.DataPath[i].empty() && ClientCfg.DataPath[i][0] != '/') - { - progress.progress ((float)i/(float)ClientCfg.DataPath.size()); - progress.pushCropedValues ((float)i/(float)ClientCfg.DataPath.size(), (float)(i+1)/(float)ClientCfg.DataPath.size()); - - CPath::addSearchPath(defaultDirectory + ClientCfg.DataPath[i], true, false, &progress); - - progress.popCropedValues (); - } - } - } + addPaths(progress, ClientCfg.DataPathNoRecurse, false); } void addPreDataPaths(NLMISC::IProgressCallback &progress) @@ -681,43 +697,9 @@ void addPreDataPaths(NLMISC::IProgressCallback &progress) H_AUTO(InitRZAddSearchPaths); - for (uint i = 0; i < ClientCfg.PreDataPath.size(); i++) - { - progress.progress ((float)i/(float)ClientCfg.PreDataPath.size()); - progress.pushCropedValues ((float)i/(float)ClientCfg.PreDataPath.size(), (float)(i+1)/(float)ClientCfg.PreDataPath.size()); - - CPath::addSearchPath(ClientCfg.PreDataPath[i], true, false, &progress); - - progress.popCropedValues (); - } + addPaths(progress, ClientCfg.PreDataPath, true); //nlinfo ("PROFILE: %d seconds for Add search paths Predata", (uint32)(ryzomGetLocalTime ()-initPaths)/1000); - - std::string defaultDirectory; - -#ifdef NL_OS_MAC - defaultDirectory = CPath::standardizePath(getAppBundlePath() + "/Contents/Resources"); -#elif defined(NL_OS_UNIX) - if (CFile::isDirectory(getRyzomSharePrefix())) defaultDirectory = CPath::standardizePath(getRyzomSharePrefix()); -#endif - - // add in last position, a specific possibly read only directory - if (!defaultDirectory.empty()) - { - for (uint i = 0; i < ClientCfg.PreDataPath.size(); i++) - { - // don't prepend default directory if path is absolute - if (!ClientCfg.PreDataPath[i].empty() && ClientCfg.PreDataPath[i][0] != '/') - { - progress.progress ((float)i/(float)ClientCfg.PreDataPath.size()); - progress.pushCropedValues ((float)i/(float)ClientCfg.PreDataPath.size(), (float)(i+1)/(float)ClientCfg.PreDataPath.size()); - - CPath::addSearchPath(defaultDirectory + ClientCfg.PreDataPath[i], true, false, &progress); - - progress.popCropedValues (); - } - } - } } static void addPackedSheetUpdatePaths(NLMISC::IProgressCallback &progress) @@ -726,7 +708,7 @@ static void addPackedSheetUpdatePaths(NLMISC::IProgressCallback &progress) { progress.progress((float)i/(float)ClientCfg.UpdatePackedSheetPath.size()); progress.pushCropedValues ((float)i/(float)ClientCfg.UpdatePackedSheetPath.size(), (float)(i+1)/(float)ClientCfg.UpdatePackedSheetPath.size()); - CPath::addSearchPath(ClientCfg.UpdatePackedSheetPath[i], true, false, &progress); + CPath::addSearchPath(NLMISC::expandEnvironmentVariables(ClientCfg.UpdatePackedSheetPath[i]), true, false, &progress); progress.popCropedValues(); } } diff --git a/code/ryzom/common/src/game_share/visual_slot_manager.cpp b/code/ryzom/common/src/game_share/visual_slot_manager.cpp index eed01388d..bc2410eea 100644 --- a/code/ryzom/common/src/game_share/visual_slot_manager.cpp +++ b/code/ryzom/common/src/game_share/visual_slot_manager.cpp @@ -94,70 +94,59 @@ void CVisualSlotManager::init() f.close(); // Display elements read. -// for(uint i=0; i<_VisualSlot.size(); ++i) -// { + for(uint i=0, len = _VisualSlot.size(); i you probably need to rebuild the tab."); - - // No Item - return 0; + return sheet2Index(id, SLOTTYPE::RIGHT_HAND_SLOT); }// rightItem2Index // //----------------------------------------------- // leftItem2Index : // Return the visual slot index from a sheet Id for items in left hand. -// \todo GUIGUI : Use map for faster search for example //----------------------------------------------- uint32 CVisualSlotManager::leftItem2Index(const NLMISC::CSheetId &id) { - if(SLOTTYPE::LEFT_HAND_SLOT < _VisualSlot.size()) - { - for(uint i=0; i<_VisualSlot[SLOTTYPE::LEFT_HAND_SLOT].Element.size(); ++i) - if(_VisualSlot[SLOTTYPE::LEFT_HAND_SLOT].Element[i].SheetId == id) - return _VisualSlot[SLOTTYPE::LEFT_HAND_SLOT].Element[i].Index; - } - else - nlwarning("VSMngr:leftItem2Index: Bad slot -> you probably need to rebuild the tab."); - - // No Item - return 0; + return sheet2Index(id, SLOTTYPE::LEFT_HAND_SLOT); }// leftItem2Index // //----------------------------------------------- // sheet2Index : // Return the visual index from a sheet Id and the visual slot. -// \todo GUIGUI : Use map for faster search for example //----------------------------------------------- uint32 CVisualSlotManager::sheet2Index(const NLMISC::CSheetId &id, SLOTTYPE::EVisualSlot slot) { if((uint)slot < _VisualSlot.size()) { - for(uint i=0; i<_VisualSlot[slot].Element.size(); ++i) - if(_VisualSlot[slot].Element[i].SheetId == id) - return _VisualSlot[slot].Element[i].Index; + const TElementList &el = _VisualSlot[slot]; + TElementList::SheetIdToIndexMapType::const_iterator it = el.SheetIdToIndexMap.find(id); + if (it != el.SheetIdToIndexMap.end()) return it->second; } else nlwarning("VSMngr:sheet2Index: Bad slot '%d' -> you probably need to rebuild the tab.", (sint)slot); diff --git a/code/ryzom/common/src/game_share/visual_slot_manager.h b/code/ryzom/common/src/game_share/visual_slot_manager.h index 9d2f67dc0..ee9d8371a 100644 --- a/code/ryzom/common/src/game_share/visual_slot_manager.h +++ b/code/ryzom/common/src/game_share/visual_slot_manager.h @@ -71,11 +71,17 @@ public: // elements list for a visual slot. std::vector Element; + // std::map to increase access speed + typedef std::map SheetIdToIndexMapType; + SheetIdToIndexMapType SheetIdToIndexMap; + /// Load/Save the values using the serial system void serial(class NLMISC::IStream &s) throw(NLMISC::EStream) { s.serialCont(Element); } + + void updateMaps(); } TElementList; typedef std::vector TVisualSlot; diff --git a/code/ryzom/server/src/ai_service/sheets.cpp b/code/ryzom/server/src/ai_service/sheets.cpp index 56060db1e..57b26f4d2 100644 --- a/code/ryzom/server/src/ai_service/sheets.cpp +++ b/code/ryzom/server/src/ai_service/sheets.cpp @@ -906,7 +906,7 @@ void AISHEETS::CSheets::packSheets(const std::string &writeFilesDirectoryName) { addSearchPath=true; for (uint32 i=0;isize();++i) - CPath::addSearchPath(varPtr->asString(i).c_str(), true, false); + CPath::addSearchPath(NLMISC::expandEnvironmentVariables(varPtr->asString(i)), true, false); } loadForm2("aiaction", writeFilesDirectoryName+AISPackedActionSheetsFilename, _ActionSheets, true); } @@ -918,7 +918,7 @@ void AISHEETS::CSheets::packSheets(const std::string &writeFilesDirectoryName) { addSearchPath=true; for (uint32 i=0;isize();++i) - CPath::addSearchPath(varPtr->asString(i).c_str(), true, false); + CPath::addSearchPath(NLMISC::expandEnvironmentVariables(varPtr->asString(i)), true, false); } loadForm("actionlist", writeFilesDirectoryName+AISPackedFightConfigSheetsFilename, _ActionListSheets, true); } @@ -931,7 +931,7 @@ void AISHEETS::CSheets::packSheets(const std::string &writeFilesDirectoryName) { addSearchPath=true; for (uint32 i=0;isize();++i) - CPath::addSearchPath(varPtr->asString(i).c_str(), true, false); + CPath::addSearchPath(NLMISC::expandEnvironmentVariables(varPtr->asString(i)), true, false); } loadForm2("creature", writeFilesDirectoryName+AISPackedSheetsFilename, _Sheets, true); } @@ -943,7 +943,7 @@ void AISHEETS::CSheets::packSheets(const std::string &writeFilesDirectoryName) { addSearchPath=true; for (uint32 i=0;isize();++i) - CPath::addSearchPath(varPtr->asString(i).c_str(), true, false); + CPath::addSearchPath(NLMISC::expandEnvironmentVariables(varPtr->asString(i)), true, false); } loadForm2("race_stats", writeFilesDirectoryName+AISPackedRaceStatsSheetsFilename, _RaceStatsSheets, true); } diff --git a/code/ryzom/tools/client/client_patcher/main.cpp b/code/ryzom/tools/client/client_patcher/main.cpp index a0730b19f..004e3d861 100644 --- a/code/ryzom/tools/client/client_patcher/main.cpp +++ b/code/ryzom/tools/client/client_patcher/main.cpp @@ -249,7 +249,7 @@ int main(int argc, char *argv[]) { for(uint i = 0; i < ClientCfg.PreDataPath.size(); ++i) { - CPath::addSearchPath(ClientCfg.PreDataPath[i], true, false); + CPath::addSearchPath(NLMISC::expandEnvironmentVariables(ClientCfg.PreDataPath[i]), true, false); } } diff --git a/code/ryzom/tools/leveldesign/alias_synchronizer/alias_synchronizer.cpp b/code/ryzom/tools/leveldesign/alias_synchronizer/alias_synchronizer.cpp index c080fd038..5bfd98eae 100644 --- a/code/ryzom/tools/leveldesign/alias_synchronizer/alias_synchronizer.cpp +++ b/code/ryzom/tools/leveldesign/alias_synchronizer/alias_synchronizer.cpp @@ -390,7 +390,7 @@ int main() // add the search paths for (uint i=0; i files; @@ -1472,6 +1472,7 @@ void SetupDirectories() data.readFromFile( "raw_material_generation.cfg" ); + // beurk :s Use CConfigFile instead LEVEL_DESIGN_PATH = data.splitFrom( "LevelDesignPath = \"").splitTo( "\"" ); TRANSLATION_PATH = data.splitFrom( "TranslationPath = \"" ).splitTo( "\"" ); diff --git a/code/ryzom/tools/make_alias_file/make_alias_file.cpp b/code/ryzom/tools/make_alias_file/make_alias_file.cpp index 387a04a23..df35be9cb 100644 --- a/code/ryzom/tools/make_alias_file/make_alias_file.cpp +++ b/code/ryzom/tools/make_alias_file/make_alias_file.cpp @@ -179,7 +179,7 @@ int main( int argc, char ** argv ) sint i; for( i = 0; i< (sint)cvSheetPaths.size(); ++i) { - sheetPaths.push_back( cvSheetPaths.asString(i) ); + sheetPaths.push_back(NLMISC::expandEnvironmentVariables(cvSheetPaths.asString(i))); } } catch(const EUnknownVar &) diff --git a/code/ryzom/tools/server/build_world_packed_col/build_world_packed_col.cpp b/code/ryzom/tools/server/build_world_packed_col/build_world_packed_col.cpp index f03489196..b9ab53f98 100644 --- a/code/ryzom/tools/server/build_world_packed_col/build_world_packed_col.cpp +++ b/code/ryzom/tools/server/build_world_packed_col/build_world_packed_col.cpp @@ -108,7 +108,7 @@ int main(int argc, char* argv[]) // for(uint k = 0; k < builderConfig.SearchPaths.size(); ++k) { - CPath::addSearchPath(builderConfig.SearchPaths[k], true, false); + CPath::addSearchPath(NLMISC::expandEnvironmentVariables(builderConfig.SearchPaths[k]), true, false); } CPath::remapExtension("dds", "tga", true); CPath::remapExtension("dds", "png", true); diff --git a/code/ryzom/tools/sheets_packer/sheets_packer_init.cpp b/code/ryzom/tools/sheets_packer/sheets_packer_init.cpp index 51d6c0095..1490895c6 100644 --- a/code/ryzom/tools/sheets_packer/sheets_packer_init.cpp +++ b/code/ryzom/tools/sheets_packer/sheets_packer_init.cpp @@ -83,7 +83,7 @@ bool init() // Define the root path that contains all data needed for the application. nlinfo("Adding search paths..."); for(uint i = 0; i < AppCfg.DataPath.size(); i++) - CPath::addSearchPath(AppCfg.DataPath[i], true, false); + CPath::addSearchPath(NLMISC::expandEnvironmentVariables(AppCfg.DataPath[i]), true, false); // Initialize Sheet IDs. nlinfo("Init SheetId..."); diff --git a/code/ryzom/tools/skill_extractor/skill_extractor.cpp b/code/ryzom/tools/skill_extractor/skill_extractor.cpp index a37d22ba8..054d5788c 100644 --- a/code/ryzom/tools/skill_extractor/skill_extractor.cpp +++ b/code/ryzom/tools/skill_extractor/skill_extractor.cpp @@ -542,7 +542,6 @@ sint main( sint argc, char ** argv ) // output begin skill.h file - //if( ! fo.open( string( "r:/code/ryzom/src_v2/game_share/skills.h" ) ) ) if( ! fo.open( srcDir + string( "skills.h" ) ) ) { nlwarning(" Can't open file %s for writing", "skills.h" ); @@ -648,7 +647,6 @@ sint main( sint argc, char ** argv ) ///////////////////////////////////////////////////////////////////////////////////// // begin output skill.cpp file -// if( ! fo.open( string( "r:/code/ryzom/src_v2/game_share/skills.cpp" ) ) ) if( ! fo.open( srcDir + string( "skills.cpp" ) ) ) { nlwarning(" Can't open file skills.cpp for writing"); diff --git a/code/ryzom/tools/translation_tools/extract_bot_names.cpp b/code/ryzom/tools/translation_tools/extract_bot_names.cpp index 4c3268e1f..e25d0e2b0 100644 --- a/code/ryzom/tools/translation_tools/extract_bot_names.cpp +++ b/code/ryzom/tools/translation_tools/extract_bot_names.cpp @@ -256,11 +256,11 @@ int extractBotNames(int argc, char *argv[]) for (uint i=0; i