Subversion Repositories spk

Rev

Rev 124 | Rev 126 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 124 Rev 125
Line 30... Line 30...
30
} SComponantEntry;
30
} SComponantEntry;
31
 
31
 
32
Utils::String CPackages::m_sTempDir;
32
Utils::String CPackages::m_sTempDir;
33
 
33
 
34
CPackages::CPackages() : m_pCurrentGameExe(NULL),
34
CPackages::CPackages() : m_pCurrentGameExe(NULL),
35
	_pOriginalFiles(NULL)
35
	_pOriginalFiles(NULL),
-
 
36
	_pCurrentDir(NULL)	
36
{
37
{
37
	m_bRenameText = false;
38
	m_bRenameText = false;
38
	m_iLanguage = 0;
39
	m_iLanguage = 0;
39
	m_iGame = -1;
40
	m_iGame = -1;
40
	m_iGameVersion = -1;
41
	m_iGameVersion = -1;
Line 68... Line 69...
68
	m_lDisableList.clear();
69
	m_lDisableList.clear();
69
	m_lEnableList.clear();
70
	m_lEnableList.clear();
70
	this->Reset();
71
	this->Reset();
71
}
72
}
72
 
73
 
-
 
74
void CPackages::SetCurrentDir(CyString dir)
-
 
75
{ 
-
 
76
	m_sCurrentDir = dir; 
-
 
77
	if (_pCurrentDir) delete _pCurrentDir;
-
 
78
	_pCurrentDir = new GameDirectory();
-
 
79
	_pCurrentDir->dir = dir.ToString();
-
 
80
	_pCurrentDir->id = -1;
-
 
81
 
-
 
82
	m_gameExe.GetDirectoryData(_pCurrentDir);
-
 
83
	_pCurrentDir->langid = this->GetGameLanguage(_pCurrentDir->dir);
-
 
84
	if (_pCurrentDir->langid > 0)
-
 
85
		_pCurrentDir->langname = this->ConvertLanguage(_pCurrentDir->langid);
-
 
86
}
-
 
87
 
73
void CPackages::SetVanilla(bool b)
88
void CPackages::SetVanilla(bool b)
74
{
89
{
75
	if ( m_bVanilla != b && b ) {
90
	if ( m_bVanilla != b && b ) {
76
		for ( CListNode<CBaseFile> *pNode = m_lPackages.Front(); pNode; pNode = pNode->next() ) {
91
		for ( CListNode<CBaseFile> *pNode = m_lPackages.Front(); pNode; pNode = pNode->next() ) {
77
			pNode->Data()->SetModifiedEnabled(pNode->Data()->IsEnabled());
92
			pNode->Data()->SetModifiedEnabled(pNode->Data()->IsEnabled());
Line 118... Line 133...
118
 
133
 
119
	m_lCreatedFiles.Clear();
134
	m_lCreatedFiles.Clear();
120
	m_lNonRemovedFiles.Clear();
135
	m_lNonRemovedFiles.Clear();
121
	m_lGlobals.Clear();
136
	m_lGlobals.Clear();
122
	m_lFakePatchOrder.Clear();
137
	m_lFakePatchOrder.Clear();
-
 
138
	if (_pCurrentDir)
-
 
139
		delete _pCurrentDir;
-
 
140
	_pCurrentDir = NULL;
123
}
141
}
124
 
142
 
125
void CPackages::LoadVirtualFileSystem()
143
void CPackages::LoadVirtualFileSystem()
126
{
144
{
127
	if ( !m_bLoadVFS )
145
	if ( !m_bLoadVFS )
128
		return;
146
		return;
129
 
147
 
130
	m_pGameVFS.setAddon(this->GetAddonDir().ToString());
148
	m_pGameVFS.setAddon(this->getAddonDir());
131
	if ( m_pEnabledMod )
149
	if ( m_pEnabledMod )
132
	{
150
	{
133
		C_File *f;
151
		C_File *f;
134
		for ( f = m_pEnabledMod->GetFirstFile(FILETYPE_MOD); f; f = m_pEnabledMod->GetNextFile(f) )
152
		for ( f = m_pEnabledMod->GetFirstFile(FILETYPE_MOD); f; f = m_pEnabledMod->GetNextFile(f) )
135
		{
153
		{
Line 185... Line 203...
185
 
203
 
186
bool CPackages::Read(CyString dir, CProgressInfo *progress)
204
bool CPackages::Read(CyString dir, CProgressInfo *progress)
187
{
205
{
188
	m_sCurrentDir = dir;
206
	m_sCurrentDir = dir;
189
	m_sCurrentDir = m_sCurrentDir.FindReplace("\\", "/");
207
	m_sCurrentDir = m_sCurrentDir.FindReplace("\\", "/");
-
 
208
	this->SetCurrentDir(dir);
190
	m_bOldPlugin = false;
209
	m_bOldPlugin = false;
191
	m_lCreatedFiles.Clear();
210
	m_lCreatedFiles.Clear();
192
	m_bRemoveDir = false;
211
	m_bRemoveDir = false;
193
	m_bSurpressProtectedWarning = false;
212
	m_bSurpressProtectedWarning = false;
194
	m_iSaveGame = -1;
213
	m_iSaveGame = -1;
Line 741... Line 760...
741
 
760
 
742
	if ( !useFile.Empty() )
761
	if ( !useFile.Empty() )
743
	{
762
	{
744
		// lets check whats in the file first
763
		// lets check whats in the file first
745
		CCatFile openCat;
764
		CCatFile openCat;
746
		if ( openCat.Open(m_sCurrentDir + "/" + useFile + ".cat", addonDir, CATREAD_CATDECRYPT, false) == CATERR_NONE )
765
		if ( openCat.open((m_sCurrentDir + "/" + useFile + ".cat").ToString(), addonDir.ToString(), CATREAD_CATDECRYPT, false) == CATERR_NONE )
747
		{
766
		{
748
			std::vector<SInCatFile *> *files = openCat.GetFiles();
767
			std::vector<SInCatFile *> *files = openCat.GetFiles();
749
			bool found = false;
768
			bool found = false;
750
			if ( files )
769
			if ( files )
751
			{
770
			{
Line 815... Line 834...
815
 
834
 
816
	CFileIO catFile(m_sCurrentDir + "/" + filename + ".cat");
835
	CFileIO catFile(m_sCurrentDir + "/" + filename + ".cat");
817
	if ( catFile.exists() && CFileIO(m_sCurrentDir + "/" + filename + ".dat").ExistsOld() )
836
	if ( catFile.exists() && CFileIO(m_sCurrentDir + "/" + filename + ".dat").ExistsOld() )
818
	{
837
	{
819
		CCatFile openFile;
838
		CCatFile openFile;
820
		if ( openFile.Open(catFile.fullFilename(), this->GetAddonDir(), CATREAD_CATDECRYPT, false) == CATERR_NONE )
839
		if ( openFile.open(catFile.fullFilename(), this->getAddonDir(), CATREAD_CATDECRYPT, false) == CATERR_NONE )
821
		{
840
		{
822
//			if ( openFile.internaldatFilename().Compare("PlugMan_Fake.dat") ) return true;
841
//			if ( openFile.internaldatFilename().Compare("PlugMan_Fake.dat") ) return true;
823
			int count = 0;
842
			int count = 0;
824
			int noncount = 0;
843
			int noncount = 0;
825
 
844
 
Line 850... Line 869...
850
	// both the cat file and dat file exists, lets open it
869
	// both the cat file and dat file exists, lets open it
851
	CFileIO catFile(m_sCurrentDir + "/" + filename + ".cat");
870
	CFileIO catFile(m_sCurrentDir + "/" + filename + ".cat");
852
	if ( catFile.exists() && CFileIO(m_sCurrentDir + "/" + filename + ".dat").ExistsOld() )
871
	if ( catFile.exists() && CFileIO(m_sCurrentDir + "/" + filename + ".dat").ExistsOld() )
853
	{
872
	{
854
		CCatFile openFile;
873
		CCatFile openFile;
855
		if ( openFile.Open(catFile.fullFilename(), this->GetAddonDir(), CATREAD_CATDECRYPT, false) == CATERR_NONE )
874
		if ( openFile.open(catFile.fullFilename(), this->getAddonDir(), CATREAD_CATDECRYPT, false) == CATERR_NONE )
856
		{
875
		{
857
			if ( openFile.FindData("PlugMan\\TFake.pck") )
876
			if ( openFile.FindData("PlugMan\\TFake.pck") )
858
				return true;
877
				return true;
859
			if ( openFile.FindData("pluginmanagerfake.pck") )
878
			if ( openFile.FindData("pluginmanagerfake.pck") )
860
				return true;
879
				return true;
Line 1311... Line 1330...
1311
}
1330
}
1312
 
1331
 
1313
void CPackages::_addToFakePatch(CBaseFile *pPackage)
1332
void CPackages::_addToFakePatch(CBaseFile *pPackage)
1314
{
1333
{
1315
	CCatFile cat;
1334
	CCatFile cat;
1316
	if ( CCatFile::Opened(cat.Open(m_sCurrentDir + "/PluginManager/PlugMan_Fake.cat", this->GetAddonDir(), CATREAD_DAT)) ) {
1335
	if ( CCatFile::Opened(cat.open((m_sCurrentDir + "/PluginManager/PlugMan_Fake.cat").ToString(), this->getAddonDir(), CATREAD_DAT)) ) {
1317
		for ( CListNode<C_File> *f = pPackage->GetFileList()->Front(); f; f = f->next() ) {
1336
		for ( CListNode<C_File> *f = pPackage->GetFileList()->Front(); f; f = f->next() ) {
1318
			if ( f->Data()->GetFileType() != FILETYPE_SHIPSCENE && f->Data()->GetFileType() != FILETYPE_COCKPITSCENE && f->Data()->GetFileType() != FILETYPE_SHIPMODEL && f->Data()->GetFileType() != FILETYPE_SHIPOTHER ) {
1337
			if ( f->Data()->GetFileType() != FILETYPE_SHIPSCENE && f->Data()->GetFileType() != FILETYPE_COCKPITSCENE && f->Data()->GetFileType() != FILETYPE_SHIPMODEL && f->Data()->GetFileType() != FILETYPE_SHIPOTHER ) {
1319
				continue;
1338
				continue;
1320
			}
1339
			}
1321
			if ( CCatFile::IsAddonDir(f->Data()->GetNameDirectory(pPackage)) ) {
1340
			if ( CCatFile::IsAddonDir(f->Data()->GetNameDirectory(pPackage)) ) {
Line 1361... Line 1380...
1361
		disabled = prevDisabled;
1380
		disabled = prevDisabled;
1362
 
1381
 
1363
	return disabled;
1382
	return disabled;
1364
}
1383
}
1365
 
1384
 
-
 
1385
Utils::String CPackages::getCurrentDirectory() const
-
 
1386
{ 
-
 
1387
	return (_pCurrentDir) ? _pCurrentDir->dir : Utils::String::Null(); 
-
 
1388
}
-
 
1389
 
-
 
1390
 
1366
bool CPackages::InstallPackage ( CBaseFile *package, CyStringList *errors, CProgressInfo *progress, bool disabled )
1391
bool CPackages::InstallPackage ( CBaseFile *package, CyStringList *errors, CProgressInfo *progress, bool disabled )
1367
{
1392
{
1368
	CLog::logf(CLog::Log_Install, 1, "Starting to install new package, %s by %s (Version: %s)", package->name().c_str(), package->author().c_str(), package->version().c_str());
1393
	CLog::logf(CLog::Log_Install, 1, "Starting to install new package, %s by %s (Version: %s)", package->name().c_str(), package->author().c_str(), package->version().c_str());
1369
	
1394
	
1370
	CBaseFile *oldPackage = FindPackage(package);
1395
	CBaseFile *oldPackage = FindPackage(package);
Line 1497... Line 1522...
1497
 
1522
 
1498
				if ( findMatching )
1523
				if ( findMatching )
1499
				{
1524
				{
1500
					// copy accross all mods
1525
					// copy accross all mods
1501
					CCatFile catTo, catFrom;
1526
					CCatFile catTo, catFrom;
1502
					if ( catFrom.Open(f->Data()->GetFilePointer(), this->GetAddonDir(), CATREAD_CATDECRYPT, false) == CATERR_NONE )
1527
					if ( catFrom.open(f->Data()->filePointer(), this->getAddonDir(), CATREAD_CATDECRYPT, false) == CATERR_NONE )
1503
					{
1528
					{
1504
						if ( catTo.Open(findMatching->GetFilePointer(), this->GetAddonDir(), CATREAD_CATDECRYPT, false) == CATERR_NONE )
1529
						if ( catTo.open(findMatching->filePointer(), this->getAddonDir(), CATREAD_CATDECRYPT, false) == CATERR_NONE )
1505
						{
1530
						{
1506
							for (unsigned int i = 0; i < catFrom.GetNumFiles(); i++ )
1531
							for (unsigned int i = 0; i < catFrom.GetNumFiles(); i++ )
1507
							{
1532
							{
1508
								SInCatFile *c = catFrom.GetFile(i);								 
1533
								SInCatFile *c = catFrom.GetFile(i);								 
1509
								catTo.AppendFile(f->Data()->GetFilePointer().ToString() + "::" + c->sFile, c->sFile);
1534
								catTo.AppendFile(f->Data()->GetFilePointer().ToString() + "::" + c->sFile, c->sFile);
Line 2379... Line 2404...
2379
		return true;
2404
		return true;
2380
	if ( !m_bLoaded )
2405
	if ( !m_bLoaded )
2381
		return true;
2406
		return true;
2382
 
2407
 
2383
	CLog::log(CLog::Log_Directory, 1, "closing directory: " + m_sCurrentDir.ToString());
2408
	CLog::log(CLog::Log_Directory, 1, "closing directory: " + m_sCurrentDir.ToString());
2384
	m_sActiveDir = m_sCurrentDir;
-
 
2385
 
2409
 
2386
	if ( m_bRenameText ) {
2410
	if ( m_bRenameText ) {
2387
		CLog::log(CLog::Log_Directory, 2, "Creating other language files for game");
2411
		CLog::log(CLog::Log_Directory, 2, "Creating other language files for game");
2388
		CreateLanguageTextFiles(errors);
2412
		CreateLanguageTextFiles(errors);
2389
	}
2413
	}
Line 2457... Line 2481...
2457
		CyStringList removeDirs;
2481
		CyStringList removeDirs;
2458
		removeDirs.PushBack(".");
2482
		removeDirs.PushBack(".");
2459
		RemoveUnusedDirectories(removeDirs, errors);
2483
		RemoveUnusedDirectories(removeDirs, errors);
2460
	}
2484
	}
2461
 
2485
 
2462
	m_sCurrentDir = "";
2486
	this->SetCurrentDir("");
-
 
2487
		 
2463
	m_bLoaded = false;
2488
	m_bLoaded = false;
2464
	return true;
2489
	return true;
2465
}
2490
}
2466
 
2491
 
2467
CyString CPackages::GetModKey()
2492
CyString CPackages::GetModKey()
Line 4317... Line 4342...
4317
 
4342
 
4318
	int check = start;
4343
	int check = start;
4319
	while ( check < 9999 )
4344
	while ( check < 9999 )
4320
	{
4345
	{
4321
		++check;
4346
		++check;
4322
		CyString newFilename = SPK::FormatTextName(check, m_iLanguage, (m_iGameFlags & EXEFLAG_TCTEXT));
4347
		Utils::String newFilename = SPK::FormatTextName(check, m_iLanguage, (m_iGameFlags & EXEFLAG_TCTEXT)).ToString();
4323
 
4348
 
4324
		// check if a packed file exists
4349
		// check if a packed file exists
4325
		if ( !Dir.Exists(newFilename + ".pck") )
4350
		if ( !Dir.exists(newFilename + ".pck") )
4326
		{
4351
		{
4327
			// it doen't, check if theres an unpacked file
4352
			// it doen't, check if theres an unpacked file
4328
			if ( !Dir.Exists(newFilename + ".xml") )
4353
			if ( !Dir.exists(newFilename + ".xml") )
4329
				break;
4354
				break;
4330
		}
4355
		}
4331
	}
4356
	}
4332
 
4357
 
4333
	return check;
4358
	return check;
Line 4608... Line 4633...
4608
 
4633
 
4609
	if ( file->GetFilePointer().IsIn("::") ) {
4634
	if ( file->GetFilePointer().IsIn("::") ) {
4610
		CFileIO CatFile(file->GetFilePointer().GetToken("::", 1, 1));
4635
		CFileIO CatFile(file->GetFilePointer().GetToken("::", 1, 1));
4611
		if ( CatFile.exists() ) {
4636
		if ( CatFile.exists() ) {
4612
			CCatFile cat;
4637
			CCatFile cat;
4613
			if ( cat.Open(CatFile.fullFilename(), this->GetAddonDir(), CATREAD_DAT, false) == CATERR_NONE ) {
4638
			if ( cat.open(CatFile.fullFilename(), this->getAddonDir(), CATREAD_DAT, false) == CATERR_NONE ) {
4614
				CyString fileName = file->GetFilePointer().GetToken("::", 2, 2);
4639
				CyString fileName = file->GetFilePointer().GetToken("::", 2, 2);
4615
				if ( cat.FindData(fileName) ) {
4640
				if ( cat.FindData(fileName) ) {
4616
					if ( cat.removeFile(fileName.ToString()) ) {
4641
					if ( cat.removeFile(fileName.ToString()) ) {
4617
						this->AddLogEntry(SPKINSTALL_DELETEFILE, remFileStr, errors);
4642
						this->AddLogEntry(SPKINSTALL_DELETEFILE, remFileStr, errors);
4618
					}
4643
					}
Line 4734... Line 4759...
4734
	int num = 0;
4759
	int num = 0;
4735
	for ( CListNode<CBaseFile> *node = m_lPackages.Front(); node; node = node->next() )
4760
	for ( CListNode<CBaseFile> *node = m_lPackages.Front(); node; node = node->next() )
4736
		node->Data()->SetNum(num++);
4761
		node->Data()->SetNum(num++);
4737
}
4762
}
4738
 
4763
 
4739
CyString CPackages::FindDataDir(CyString dir, CyString file)
4764
CyString CPackages::FindDataDir(CyString dir, CyString sFile)
4740
{
4765
{
4741
	CDirIO Dir(dir);
4766
	CDirIO Dir(dir.ToString());
-
 
4767
	Utils::String file = sFile.ToString();
-
 
4768
 
4742
	// data files could be in 4 places depending on what program is used, check for all of these
4769
	// data files could be in 4 places depending on what program is used, check for all of these
4743
	if ( Dir.Exists(file) )
4770
	if ( Dir.exists(file) )
4744
		return Dir.File(file);
4771
		return Dir.file(file);
4745
	else if ( Dir.Exists(CyString("Data/") + file) )
4772
	else if ( Dir.exists("Data/" + file) )
4746
		return Dir.File(CyString("Data/") + file);
4773
		return Dir.file("Data/" + file);
4747
	else if ( Dir.Exists(CyString("../") + file) )
4774
	else if ( Dir.exists("../" + file) )
4748
		return Dir.File(CyString("../") + file);
4775
		return Dir.file("../" + file);
4749
	else if ( Dir.Exists(CyString("../Data/") + file) )
4776
	else if ( Dir.exists("../Data/" + file) )
4750
		return Dir.File(CyString("../Data/") + file);
4777
		return Dir.file("../Data/" + file);
4751
 
4778
 
4752
	return NullString;
4779
	return NullString;
4753
}
4780
}
4754
 
4781
 
4755
void CPackages::Startup(CyString dir, CyString tempDir, CyString myDoc, CyString mod)
4782
void CPackages::Startup(CyString dir, CyString tempDir, CyString myDoc, CyString mod)
Line 4955... Line 4982...
4955
		{
4982
		{
4956
			if ( !file->CheckFileExt("cat") )
4983
			if ( !file->CheckFileExt("cat") )
4957
				continue;
4984
				continue;
4958
 
4985
 
4959
			CCatFile catFile;
4986
			CCatFile catFile;
4960
			if ( catFile.Open(file->GetFilePointer(), addonDir, CATREAD_CATDECRYPT, false) == CATERR_NONE )
4987
			if ( catFile.open(file->filePointer(), addonDir.ToString(), CATREAD_CATDECRYPT, false) == CATERR_NONE )
4961
			{
4988
			{
4962
				if ( catFile.ExtractFile(aFilename, aTo) )
4989
				if ( catFile.ExtractFile(aFilename, aTo) )
4963
					return 1;
4990
					return 1;
4964
				if ( catFile.error() == CATERR_INVALIDDEST || catFile.error() == CATERR_CANTCREATEDIR )
4991
				if ( catFile.error() == CATERR_INVALIDDEST || catFile.error() == CATERR_CANTCREATEDIR )
4965
				{
4992
				{
Line 4973... Line 5000...
4973
	else if ( !m_sSetMod.Empty() )
5000
	else if ( !m_sSetMod.Empty() )
4974
	{
5001
	{
4975
		if ( CFileIO(m_sCurrentDir + "/mods/" + m_sSetMod + ".cat").ExistsOld() )
5002
		if ( CFileIO(m_sCurrentDir + "/mods/" + m_sSetMod + ".cat").ExistsOld() )
4976
		{
5003
		{
4977
			CCatFile catFile;
5004
			CCatFile catFile;
4978
			if ( catFile.Open(m_sCurrentDir + "/mods/" + m_sSetMod + ".cat", addonDir, CATREAD_CATDECRYPT, false) == CATERR_NONE )
5005
			if (catFile.open((m_sCurrentDir + "/mods/" + m_sSetMod + ".cat").ToString(), addonDir.ToString(), CATREAD_CATDECRYPT, false) == CATERR_NONE)
4979
			{
5006
			{
4980
				if ( catFile.ExtractFile(aFilename, aTo) )
5007
				if ( catFile.ExtractFile(aFilename, aTo) )
4981
					return 1;
5008
					return 1;
4982
				if ( catFile.error() == CATERR_INVALIDDEST || catFile.error() == CATERR_CANTCREATEDIR )
5009
				if ( catFile.error() == CATERR_INVALIDDEST || catFile.error() == CATERR_CANTCREATEDIR )
4983
				{
5010
				{
Line 4998... Line 5025...
4998
 
5025
 
4999
	// work backwards until we find the file
5026
	// work backwards until we find the file
5000
	for ( ; catNumber; catNumber-- )
5027
	for ( ; catNumber; catNumber-- )
5001
	{
5028
	{
5002
		CCatFile catFile;
5029
		CCatFile catFile;
5003
		if ( catFile.Open(dir + "/" + CyString::Number(catNumber).PadNumber(2) + ".cat", addonDir, CATREAD_CATDECRYPT, false) == CATERR_NONE )
5030
		if (catFile.open((dir + "/" + CyString::Number(catNumber).PadNumber(2) + ".cat").ToString(), addonDir.ToString(), CATREAD_CATDECRYPT, false) == CATERR_NONE )
5004
		{
5031
		{
5005
			// check for the file
5032
			// check for the file
5006
			if ( catFile.ExtractFile(aFilename, aTo) )
5033
			if ( catFile.ExtractFile(aFilename, aTo) )
5007
				return 1;
5034
				return 1;
5008
			if ( catFile.error() == CATERR_INVALIDDEST || catFile.error() == CATERR_CANTCREATEDIR )
5035
			if ( catFile.error() == CATERR_INVALIDDEST || catFile.error() == CATERR_CANTCREATEDIR )
Line 5826... Line 5853...
5826
		{
5853
		{
5827
			CFileIO File(saveDir.File(node->str));
5854
			CFileIO File(saveDir.File(node->str));
5828
			if ( !File.CheckFileExtension("sav") )
5855
			if ( !File.CheckFileExtension("sav") )
5829
				continue;
5856
				continue;
5830
			// remove the file if already exists
5857
			// remove the file if already exists
5831
			if ( gameSaveDir.Exists(node->str) )
5858
			if (gameSaveDir.exists(node->str.ToString()))
5832
				CFileIO::Remove(gameSaveDir.File(node->str).ToString());
5859
				CFileIO::Remove(gameSaveDir.File(node->str).ToString());
5833
 
5860
 
5834
			// copy the file into the games save dir for backup
5861
			// copy the file into the games save dir for backup
5835
			File.copy(gameSaveDir.File(File.filename()).ToString(), true);
5862
			File.copy(gameSaveDir.File(File.filename()).ToString(), true);
5836
		}
5863
		}
Line 5868... Line 5895...
5868
	{
5895
	{
5869
		for ( SStringList *node = dirs->Head(); node; node = node->next )
5896
		for ( SStringList *node = dirs->Head(); node; node = node->next )
5870
		{
5897
		{
5871
			CFileIO File(restoreDir.File(node->str));
5898
			CFileIO File(restoreDir.File(node->str));
5872
			// remove the file if already exists
5899
			// remove the file if already exists
5873
			if ( toDir.Exists(node->str) ) CFileIO::Remove(toDir.File(node->str).ToString());
5900
			if ( toDir.exists(node->str.ToString()) ) CFileIO::Remove(toDir.file(node->str.ToString()));
5874
 
5901
 
5875
			// move file over
5902
			// move file over
5876
			File.copy(toDir.File(node->str).ToString(), true);
5903
			File.copy(toDir.file(node->str.ToString()), true);
5877
		}
5904
		}
5878
 
5905
 
5879
		delete dirs;
5906
		delete dirs;
5880
	}
5907
	}
5881
 
5908
 
Line 7216... Line 7243...
7216
{
7243
{
7217
	filename = filename.FindReplace("\\", "/");
7244
	filename = filename.FindReplace("\\", "/");
7218
	if ( m_iGame == GAME_X3 )
7245
	if ( m_iGame == GAME_X3 )
7219
	{
7246
	{
7220
		CCatFile catFile;
7247
		CCatFile catFile;
7221
		int error = catFile.Open(m_sCurrentDir + "/mods/PluginManager.cat", this->GetAddonDir(), CATREAD_CATDECRYPT, true);
7248
		int error = catFile.open((m_sCurrentDir + "/mods/PluginManager.cat").ToString(), this->getAddonDir(), CATREAD_CATDECRYPT, true);
7222
		if ( error == CATERR_NONE || error == CATERR_CREATED )
7249
		if ( error == CATERR_NONE || error == CATERR_CREATED )
7223
		{
7250
		{
7224
			// it it wrote ok, remove the old ones
7251
			// it it wrote ok, remove the old ones
7225
			if ( !catFile.AppendFile(File->fullFilename(), filename.ToString(), true, true) )
7252
			if ( !catFile.AppendFile(File->fullFilename(), filename.ToString(), true, true) )
7226
				return false;
7253
				return false;
Line 7692... Line 7719...
7692
 
7719
 
7693
	// load from cat file
7720
	// load from cat file
7694
	if ( CFileIO(file).CheckFileExtension("cat") )
7721
	if ( CFileIO(file).CheckFileExtension("cat") )
7695
	{
7722
	{
7696
		CCatFile cat;
7723
		CCatFile cat;
7697
		if ( cat.Open(file, this->GetAddonDir(), CATREAD_CATDECRYPT, false) != CATERR_NONE )
7724
		if ( cat.open(file.ToString(), this->getAddonDir(), CATREAD_CATDECRYPT, false) != CATERR_NONE )
7698
			return false;
7725
			return false;
7699
 
7726
 
7700
		if ( !cat.ExtractFile("types\\TShips.pck", m_sTempDir + "/tships.txt") )
7727
		if ( !cat.ExtractFile("types\\TShips.pck", m_sTempDir + "/tships.txt") )
7701
			return false;
7728
			return false;
7702
 
7729
 
Line 7801... Line 7828...
7801
	if ( CFileIO(file).CheckFileExtension("cat") )
7828
	if ( CFileIO(file).CheckFileExtension("cat") )
7802
	{
7829
	{
7803
		bool done = false;
7830
		bool done = false;
7804
 
7831
 
7805
		CCatFile cat;
7832
		CCatFile cat;
7806
		if ( cat.Open(file, this->GetAddonDir(), CATREAD_CATDECRYPT, false) != CATERR_NONE )
7833
		if ( cat.open(file.ToString(), this->getAddonDir(), CATREAD_CATDECRYPT, false) != CATERR_NONE )
7807
			return false;
7834
			return false;
7808
 
7835
 
7809
		// extract 1 at a time
7836
		// extract 1 at a time
7810
		for (unsigned int i = 0; i < cat.GetNumFiles(); i++ )
7837
		for (unsigned int i = 0; i < cat.GetNumFiles(); i++ )
7811
		{
7838
		{
Line 8035... Line 8062...
8035
}
8062
}
8036
 
8063
 
8037
bool CPackages::MergeMods(CCatFile *mod1, CCatFile *mod2, CyString outFile, CyStringList *cantMerge)
8064
bool CPackages::MergeMods(CCatFile *mod1, CCatFile *mod2, CyString outFile, CyStringList *cantMerge)
8038
{
8065
{
8039
	CCatFile newCat;
8066
	CCatFile newCat;
8040
	if ( newCat.Open(outFile, this->GetAddonDir()) != CATERR_CREATED )
8067
	if ( newCat.open(outFile.ToString(), this->getAddonDir()) != CATERR_CREATED )
8041
		return false;
8068
		return false;
8042
 
8069
 
8043
	Utils::CStringList list;
8070
	Utils::CStringList list;
8044
	this->getMergedFiles(list, mod1, mod2);
8071
	this->getMergedFiles(list, mod1, mod2);
8045
	if (list.empty())
8072
	if (list.empty())
Line 8118... Line 8145...
8118
	if ( file->GetFileType() != FILETYPE_MOD ) return false;
8145
	if ( file->GetFileType() != FILETYPE_MOD ) return false;
8119
	if ( !file->GetFileExt().Compare("cat") ) return false;
8146
	if ( !file->GetFileExt().Compare("cat") ) return false;
8120
 
8147
 
8121
	// we need to read the file list for the mod
8148
	// we need to read the file list for the mod
8122
	CCatFile cat;
8149
	CCatFile cat;
8123
	if ( cat.Open(file->GetFilePointer(), this->GetAddonDir(), CATREAD_JUSTCONTENTS, false) == CATERR_NONE )
8150
	if ( cat.open(file->filePointer(), this->getAddonDir(), CATREAD_JUSTCONTENTS, false) == CATERR_NONE )
8124
	{
8151
	{
8125
		for (unsigned int i = 0; i < cat.GetNumFiles(); i++ )
8152
		for (unsigned int i = 0; i < cat.GetNumFiles(); i++ )
8126
		{
8153
		{
8127
			SInCatFile *f = cat.GetFile(i);
8154
			SInCatFile *f = cat.GetFile(i);
8128
			CyString filename = f->sFile;
8155
			CyString filename = f->sFile;
Line 8897... Line 8924...
8897
			CyString modFile = f->GetFilePointer().GetToken("::", 1, 1);
8924
			CyString modFile = f->GetFilePointer().GetToken("::", 1, 1);
8898
			CyString file = f->GetFilePointer().GetToken("::", 2, 2);
8925
			CyString file = f->GetFilePointer().GetToken("::", 2, 2);
8899
 
8926
 
8900
			if ( CFileIO(modFile).ExistsOld() ) {
8927
			if ( CFileIO(modFile).ExistsOld() ) {
8901
				CCatFile catFile;
8928
				CCatFile catFile;
8902
				if ( catFile.Open(modFile, "", CATREAD_CATDECRYPT, false) == CATERR_NONE ) {
8929
				if ( catFile.open(modFile.ToString(), "", CATREAD_CATDECRYPT, false) == CATERR_NONE ) {
8903
					if ( catFile.FindData(file) )
8930
					if ( catFile.FindData(file) )
8904
						exists = true;
8931
						exists = true;
8905
				}
8932
				}
8906
			}
8933
			}
8907
		}
8934
		}