2017-03-15 19:29:34 +00:00
|
|
|
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
|
|
// Copyright (C) 2010 Winch Gate Property Limited
|
|
|
|
//
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU Affero General Public License as
|
|
|
|
// published by the Free Software Foundation, either version 3 of the
|
|
|
|
// License, or (at your option) any later version.
|
|
|
|
//
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// GNU Affero General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// misc
|
|
|
|
#include "nel/misc/types_nl.h"
|
|
|
|
#include "nel/misc/sheet_id.h"
|
|
|
|
#include "nel/misc/config_file.h"
|
|
|
|
|
|
|
|
#include "nel/georges/u_form.h"
|
|
|
|
#include "nel/georges/u_form_elm.h"
|
|
|
|
#include "nel/georges/load_form.h"
|
|
|
|
|
|
|
|
// std
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
using namespace NLMISC;
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Class to manage a sheet.
|
|
|
|
* \author Stephane Coutelas
|
|
|
|
* \author Nevrax France
|
|
|
|
* \date 2003
|
|
|
|
*/
|
|
|
|
class CSheet
|
|
|
|
{
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
/// Alias
|
|
|
|
string Alias;
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
/// Constructor
|
|
|
|
CSheet() {}
|
|
|
|
|
|
|
|
/// Load the values using the george sheet
|
|
|
|
void readGeorges (const CSmartPtr<NLGEORGES::UForm> &form, const CSheetId &sheetId);
|
|
|
|
|
|
|
|
/// Load/Save the values using the serial system
|
|
|
|
void serial (NLMISC::IStream &s);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Event to implement any action when the sheet is no longer existent.
|
|
|
|
* This method is called when a sheet have been read from the packed sheet
|
|
|
|
* and the associated sheet file no more exist in the directories.
|
|
|
|
*/
|
|
|
|
void removed() {}
|
|
|
|
|
|
|
|
static uint getVersion();
|
|
|
|
|
|
|
|
private :
|
|
|
|
|
|
|
|
static const uint _Version;
|
|
|
|
};
|
|
|
|
|
|
|
|
uint const CSheet::_Version = 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------
|
|
|
|
// readGeorges
|
|
|
|
//
|
|
|
|
//-----------------------------------------------
|
|
|
|
void CSheet::readGeorges (const CSmartPtr<NLGEORGES::UForm> &form, const CSheetId &sheetId)
|
|
|
|
{
|
|
|
|
// Load the form with given sheet id
|
|
|
|
if (form)
|
|
|
|
{
|
|
|
|
if( !form->getRootNode().getValueByName(Alias, "Alias", NLGEORGES::UFormElm::NoEval) )
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------
|
|
|
|
// serial
|
|
|
|
//
|
|
|
|
//-----------------------------------------------
|
|
|
|
void CSheet::serial (NLMISC::IStream &s)
|
|
|
|
{
|
|
|
|
s.serial( Alias );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------
|
|
|
|
// getVersion
|
|
|
|
//
|
|
|
|
//-----------------------------------------------
|
|
|
|
uint CSheet::getVersion ()
|
|
|
|
{
|
|
|
|
//return CSheetManager::_AliasFilenameVersion;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------
|
|
|
|
// displayHelp
|
|
|
|
//
|
|
|
|
//-----------------------------------------------
|
|
|
|
void displayHelp()
|
|
|
|
{
|
|
|
|
cout<<"This tool creates a packed file which associates sheet id with sheet alias"<<endl;
|
|
|
|
cout<<"Vars used in make_alias_file.cfg :"<<endl;
|
|
|
|
cout<<" - SheetPaths : the paths where to find the sheets"<<endl;
|
|
|
|
cout<<" - AliasFilename : name used for alias file (default is 'alias.packed_sheets')"<<endl;
|
|
|
|
cout<<" - Extensions : the extensions list of sheets to read"<<endl;
|
|
|
|
cout<<endl;
|
|
|
|
cout<<"MAKE_ALIAS_FILE"<<endl;
|
|
|
|
|
|
|
|
} // displayHelp //
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------
|
|
|
|
// MAIN
|
|
|
|
//
|
|
|
|
//-----------------------------------------------
|
|
|
|
int main( int argc, char ** argv )
|
|
|
|
{
|
|
|
|
// get the output filename
|
|
|
|
if( argc > 1 )
|
|
|
|
{
|
|
|
|
displayHelp();
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
// load the cfg
|
|
|
|
CConfigFile configFile;
|
|
|
|
string configFileName = "make_alias_file.cfg";
|
|
|
|
if(!CFile::fileExists(configFileName))
|
|
|
|
{
|
|
|
|
nlwarning("Config file %s not found",configFileName.c_str());
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
configFile.load(configFileName);
|
|
|
|
|
|
|
|
|
|
|
|
// read the sheet paths
|
|
|
|
vector<string> sheetPaths;
|
|
|
|
try
|
|
|
|
{
|
|
|
|
CConfigFile::CVar& cvSheetPaths = configFile.getVar("SheetPaths");
|
|
|
|
sint i;
|
|
|
|
for( i = 0; i< (sint)cvSheetPaths.size(); ++i)
|
|
|
|
{
|
|
|
|
sheetPaths.push_back(NLMISC::expandEnvironmentVariables(cvSheetPaths.asString(i)));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch(const EUnknownVar &)
|
|
|
|
{
|
|
|
|
nlwarning("var 'SheetPaths' not found");
|
|
|
|
}
|
|
|
|
|
|
|
|
// add the sheet paths
|
|
|
|
cout<<"adding the sheet paths ..."<<endl;
|
|
|
|
vector<string>::iterator itPath;
|
|
|
|
for( itPath = sheetPaths.begin(); itPath != sheetPaths.end(); ++itPath )
|
|
|
|
{
|
|
|
|
CPath::addSearchPath(*itPath,true,false);
|
|
|
|
}
|
|
|
|
|
|
|
|
// read the name that will be used for packed file
|
|
|
|
string aliasFilename = "alias.packed_sheets";
|
|
|
|
try
|
|
|
|
{
|
|
|
|
CConfigFile::CVar &cvAliasFilename = configFile.getVar("AliasFilename");
|
|
|
|
aliasFilename = cvAliasFilename.asString();
|
|
|
|
}
|
|
|
|
catch(const EUnknownVar &)
|
|
|
|
{
|
|
|
|
nlwarning("var 'AliasFilename' not found");
|
|
|
|
}
|
|
|
|
|
|
|
|
// read the extensions list of sheets to read
|
|
|
|
vector<string> extensions;
|
|
|
|
try
|
|
|
|
{
|
|
|
|
CConfigFile::CVar& cvExtensions = configFile.getVar("Extensions");
|
|
|
|
sint i;
|
|
|
|
for( i = 0; i< (sint)cvExtensions.size(); ++i)
|
|
|
|
{
|
|
|
|
extensions.push_back( cvExtensions.asString(i) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch(const EUnknownVar &)
|
|
|
|
{
|
|
|
|
nlwarning("var 'Extensions' not found");
|
|
|
|
}
|
|
|
|
|
|
|
|
// load form and create packed sheets
|
|
|
|
cout<<"reading the sheets ..."<<endl;
|
|
|
|
map<CSheetId, CSheet> sheetMap;
|
|
|
|
bool updatePackedSheet = true;
|
|
|
|
createDebug(); // needed to init WarningLog
|
|
|
|
loadForm (extensions, aliasFilename, sheetMap, updatePackedSheet);
|
|
|
|
cout<<"finished."<<endl;
|
|
|
|
|
|
|
|
// display the content of the map
|
|
|
|
/*
|
|
|
|
map<CSheetId, CSheet>::iterator itAlias;
|
|
|
|
for( itAlias = sheetMap.begin(); itAlias != sheetMap.end(); ++itAlias )
|
|
|
|
{
|
|
|
|
nlinfo("sheet %s alias = %s",(*itAlias).first.toString().c_str(),(*itAlias).second.Alias.c_str());
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
|
|
|
|
} // main //
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|