Subversion Repositories spk

Rev

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

Rev 214 Rev 216
Line 96... Line 96...
96
	else if ( first == L"ScriptTypeNew:" )
96
	else if ( first == L"ScriptTypeNew:" )
97
		m_iScriptType = rest;
97
		m_iScriptType = rest;
98
	else if ( first == L"PackageType:" )
98
	else if ( first == L"PackageType:" )
99
		m_iPackageType = rest;
99
		m_iPackageType = rest;
100
	else if ( first == L"Ware:" )
100
	else if ( first == L"Ware:" )
101
		AddWare ( rest.toString() );
101
		addWare(rest);
102
	else if ( (first == L"WareText:") && (m_pLastWare) )
102
	else if ( (first == L"WareText:") && (m_pLastWare) )
103
		addWareText ( rest );
103
		addWareText(rest);
104
	else if ( first == L"Setting:" )
104
	else if ( first == L"Setting:" )
105
	{
105
	{
106
		SSettingType *t = addSetting(rest.token(L"|", 2), rest.token(L"|", 1));
106
		SSettingType *t = addSetting(rest.token(L"|", 2), rest.token(L"|", 1));
107
		convertSetting(t, rest.tokens(L"|", 3));
107
		convertSetting(t, rest.tokens(L"|", 3));
108
	}
108
	}
Line 167... Line 167...
167
		}
167
		}
168
	}
168
	}
169
	return m_sScriptType;
169
	return m_sScriptType;
170
}
170
}
171
 
171
 
172
bool CSpkFile::readWares(int iLang, CLinkList<SWareEntry> &list, const Utils::String &empWares)
172
bool CSpkFile::readWares(int iLang, CLinkList<SWareEntry> &list, const Utils::WString &empWares)
173
{
173
{
174
	if ( CBaseFile::readWares(iLang, list, empWares) ) {
174
	if ( CBaseFile::readWares(iLang, list, empWares) ) {
175
		for(CListNode<SWares> *node = m_lWares.Front(); node; node = node->next()) {
175
		for(CListNode<SWares> *node = m_lWares.Front(); node; node = node->next()) {
176
 
176
 
177
			SWareEntry *ware = new SWareEntry;
177
			SWareEntry *ware = new SWareEntry;
Line 225... Line 225...
225
	m_pLastWare->lText.push_back ( wt );
225
	m_pLastWare->lText.push_back ( wt );
226
 
226
 
227
	_changed();
227
	_changed();
228
}
228
}
229
 
229
 
230
void CSpkFile::AddWare(const Utils::String &sData)
230
void CSpkFile::addWare(const Utils::WString &sData)
231
{
231
{
232
	SWares *ware = new SWares;
232
	SWares *ware = new SWares;
233
	ware->iTextID = -1;
233
	ware->iTextID = -1;
234
	ware->iTextPage = 0;
234
	ware->iTextPage = 0;
235
	ware->cType = sData.token(":", 1)[0];
235
	ware->cType = sData.token(L":", 1)[0];
236
	ware->iPrice = sData.token(":", 2);
236
	ware->iPrice = sData.token(L":", 2);
237
	ware->iSize = sData.token(":", 3);
237
	ware->iSize = sData.token(L":", 3);
238
	ware->iVolumn = sData.token(":", 4);
238
	ware->iVolumn = sData.token(L":", 4);
239
	ware->sID = sData.token(":", 5).toWString();
239
	ware->sID = sData.token(L":", 5);
240
	ware->iNotority = sData.token(":", 6);
240
	ware->iNotority = sData.token(L":", 6);
241
	if ( !sData.token(":", 7).empty() )
241
	if ( !sData.token(L":", 7).empty() )
242
	{
242
	{
243
		Utils::String r = sData.token(":", 7);
243
		Utils::WString r = sData.token(L":", 7);
244
		ware->iTextID = r.token(",", 1);
244
		ware->iTextID = r.token(L",", 1);
245
		ware->iTextPage = r.token(",", 2);
245
		ware->iTextPage = r.token(L",", 2);
246
	}
246
	}
247
	m_lWares.push_back ( ware );
247
	m_lWares.push_back ( ware );
248
	m_pLastWare = ware;
248
	m_pLastWare = ware;
249
 
249
 
250
	_changed();
250
	_changed();
Line 263... Line 263...
263
	}
263
	}
264
 
264
 
265
	return false;
265
	return false;
266
}
266
}
267
 
267
 
268
void CSpkFile::ClearWares()
268
void CSpkFile::clearWares()
269
{
269
{
270
	for ( CListNode<SWares> *node = m_lWares.Front(); node; node = node->next() ) {
270
	for ( CListNode<SWares> *node = m_lWares.Front(); node; node = node->next() ) {
271
		node->Data()->lText.clear(true);
271
		node->Data()->lText.clear(true);
272
		node->DeleteData();
272
		node->DeleteData();
273
	}
273
	}
274
	_changed();
274
	_changed();
275
	m_lWares.clear(true);
275
	m_lWares.clear(true);
276
}
276
}
277
 
277
 
278
SWares *CSpkFile::FindWare(const Utils::String &id) const
278
SWares *CSpkFile::findWare(const Utils::WString &id) const
279
{
279
{
280
	for ( CListNode<SWares> *node = m_lWares.Front(); node; node = node->next() ) {
280
	for ( CListNode<SWares> *node = m_lWares.Front(); node; node = node->next() ) {
281
		SWares *w = node->Data();
281
		SWares *w = node->Data();
282
		if ( w->sID.Compare(id) ) {
282
		if ( w->sID.Compare(id) ) {
283
			return w;
283
			return w;
284
		}
284
		}
285
	}
285
	}
286
	return NULL;
286
	return NULL;
287
}
287
}
288
 
288
 
289
void CSpkFile::RemoveWare(const Utils::String &id )
289
void CSpkFile::removeWare(const Utils::WString &id )
290
{
290
{
291
	for ( CListNode<SWares> *node = m_lWares.Front(); node; node = node->next() ) {
291
	for ( CListNode<SWares> *node = m_lWares.Front(); node; node = node->next() ) {
292
		SWares *w = node->Data();
292
		SWares *w = node->Data();
293
		if ( w->sID.Compare(id) ) {
293
		if ( w->sID.Compare(id) ) {
294
			m_lWares.RemoveCurrent ();
294
			m_lWares.RemoveCurrent ();
Line 297... Line 297...
297
			return;
297
			return;
298
		}
298
		}
299
	}
299
	}
300
}
300
}
301
 
301
 
302
void CSpkFile::AddWare(SWares *ware)
302
void CSpkFile::addWare(SWares *ware)
303
{
303
{
304
	ware->sID.remove(' ');
304
	ware->sID.remove(' ');
305
 
305
 
306
	SWares *newware = this->FindWare(ware->sID.toString());
306
	SWares *newware = this->findWare(ware->sID);
307
	if ( newware ) {
307
	if ( newware ) {
308
		m_lWares.remove(newware);
308
		m_lWares.remove(newware);
309
	}
309
	}
310
 
310
 
311
	m_lWares.push_back(ware);
311
	m_lWares.push_back(ware);
Line 332... Line 332...
332
	pWare->lText.push_back(wt);
332
	pWare->lText.push_back(wt);
333
	_changed();
333
	_changed();
334
}
334
}
335
 
335
 
336
 
336
 
337
void CSpkFile::ClearWareText(const Utils::String &id)
337
void CSpkFile::clearWareText(const Utils::WString &id)
338
{
338
{
339
	SWares *w = FindWare(id);
339
	SWares *w = findWare(id);
340
	ClearWareText(w);
340
	clearWareText(w);
341
}
341
}
342
 
342
 
343
void CSpkFile::ClearWareText(SWares *w)
343
void CSpkFile::clearWareText(SWares *w)
344
{
344
{
345
	if ( !w ) return;
345
	if ( !w ) return;
346
 
346
 
347
	w->lText.clear(true);
347
	w->lText.clear(true);
348
	_changed();
348
	_changed();
349
}
349
}
350
 
350
 
351
void CSpkFile::RemoveWareText(const Utils::String &wid, int lang)
351
void CSpkFile::removeWareText(const Utils::WString &wid, int lang)
352
{
352
{
353
	SWares *w = FindWare(wid);
353
	SWares *w = findWare(wid);
354
	if ( w )
354
	if ( w )
355
	{
355
	{
356
		for ( CListNode<SWaresText> *node = w->lText.Front(); node; node = node->next() ) {
356
		for ( CListNode<SWaresText> *node = w->lText.Front(); node; node = node->next() ) {
357
			SWaresText *wt = node->Data();
357
			SWaresText *wt = node->Data();
358
			if ( wt->iLang == lang ) {
358
			if ( wt->iLang == lang ) {
Line 455... Line 455...
455
	switch ( t->iType )
455
	switch ( t->iType )
456
	{
456
	{
457
		case SETTING_STRING:
457
		case SETTING_STRING:
458
			return ((SSettingString *)t)->sValue;
458
			return ((SSettingString *)t)->sValue;
459
		case SETTING_INTEGER:
459
		case SETTING_INTEGER:
460
			return Utils::String::Number(((SSettingInteger *)t)->iValue);
460
			return Utils::WString::Number(((SSettingInteger *)t)->iValue);
461
		case SETTING_CHECK:
461
		case SETTING_CHECK:
462
			return (((SSettingInteger *)t)->iValue) ? L"1" : L"0";
462
			return (((SSettingInteger *)t)->iValue) ? L"1" : L"0";
463
	}
463
	}
464
 
464
 
465
	return L"";
465
	return L"";
Line 470... Line 470...
470
	m_lSettings.clear(true);
470
	m_lSettings.clear(true);
471
	_changed();
471
	_changed();
472
}
472
}
473
 
473
 
474
 
474
 
475
bool CSpkFile::IsMatchingMod(const Utils::String &mod) const
475
bool CSpkFile::isMatchingMod(const Utils::WString &mod) const
476
{
476
{
477
	for ( CListNode<C_File> *node = m_lFiles.Front(); node; node = node->next() )
477
	for ( CListNode<C_File> *node = m_lFiles.Front(); node; node = node->next() )
478
	{
478
	{
479
		C_File *file = node->Data();
479
		C_File *file = node->Data();
480
		if ( file->GetFileType() != FILETYPE_MOD )
480
		if ( file->GetFileType() != FILETYPE_MOD )
Line 493... Line 493...
493
Utils::WString CSpkFile::scriptTypeString(int lang) const
493
Utils::WString CSpkFile::scriptTypeString(int lang) const
494
{
494
{
495
	int iType = m_iScriptType;
495
	int iType = m_iScriptType;
496
 
496
 
497
	if ( this->IsLibrary() )
497
	if ( this->IsLibrary() )
498
		return "Library";
498
		return L"Library";
499
	else if ( this->IsPackageUpdate() )
499
	else if ( this->IsPackageUpdate() )
500
		return "Package Update";
500
		return L"Package Update";
501
	else if ( this->IsCustomStart() )
501
	else if ( this->IsCustomStart() )
502
		return "Custom Start";
502
		return L"Custom Start";
503
	else if ( this->IsPatch() )
503
	else if ( this->IsPatch() )
504
		return "Patch";
504
		return L"Patch";
505
	else if ( m_iScriptType == SCRIPTTYPE_CUSTOM )
505
	else if ( m_iScriptType == SCRIPTTYPE_CUSTOM )
506
	{
506
	{
507
		Utils::WString type = this->customScriptType(lang);
507
		Utils::WString type = this->customScriptType(lang);
508
		if ( !type.empty() )
508
		if ( !type.empty() )
509
			return type;
509
			return type;
Line 511... Line 511...
511
	}
511
	}
512
 
512
 
513
	if (iType == -1)  // no script type
513
	if (iType == -1)  // no script type
514
	{
514
	{
515
		if ( this->IsFakePatch() )
515
		if ( this->IsFakePatch() )
516
			return "Fake Patch";
516
			return L"Fake Patch";
517
	}
517
	}
518
 
518
 
519
	Utils::WString sType = CSpkFile::GetScriptTypeStringStatic(m_iScriptType);
519
	Utils::WString sType = CSpkFile::GetScriptTypeStringStatic(m_iScriptType);
520
 
520
 
521
	if ( sType.empty() )
521
	if ( sType.empty() )
522
		return "Other";
522
		return L"Other";
523
 
523
 
524
	return sType.toString();
524
	return sType;
525
}
525
}
526
 
526
 
527
int CSpkFile::ConvertScriptType(const Utils::WString &sType)
527
int CSpkFile::ConvertScriptType(const Utils::WString &sType)
528
{
528
{
529
	for ( int i = 0; i < SCRIPTTYPE_MAX; i++ )
529
	for ( int i = 0; i < SCRIPTTYPE_MAX; i++ )
Line 599... Line 599...
599
			int check = sRest;
599
			int check = sRest;
600
			if ( check || sRest == L"0" )
600
			if ( check || sRest == L"0" )
601
				m_iScriptType = check;
601
				m_iScriptType = check;
602
			else
602
			else
603
			{
603
			{
604
				m_iScriptType = CSpkFile::ConvertScriptType(sRest.toString());
604
				m_iScriptType = CSpkFile::ConvertScriptType(sRest);
605
				if ( m_iScriptType == -1 )
605
				if ( m_iScriptType == -1 )
606
					m_sScriptType = sRest;
606
					m_sScriptType = sRest;
607
			}
607
			}
608
		}
608
		}
609
	}
609
	}
Line 784... Line 784...
784
	}
784
	}
785
 
785
 
786
	return name;
786
	return name;
787
}
787
}
788
 
788
 
789
Utils::String CSpkFile::GetCustomStartName() const
789
Utils::WString CSpkFile::customStartName() const
790
{
790
{
791
	if ( !this->IsCustomStart() )
791
	if ( !this->IsCustomStart() )
792
		return "";
792
		return L"";
793
 
793
 
794
	// else find the custom start script
794
	// else find the custom start script
795
	C_File *file = NULL;
795
	C_File *file = NULL;
796
	for ( file = this->GetFirstFile(FILETYPE_SCRIPT); file; file = this->GetNextFile(file) )
796
	for ( file = this->GetFirstFile(FILETYPE_SCRIPT); file; file = this->GetNextFile(file) )
797
	{
797
	{
798
		if ( file->filename().contains(L"initplayership") && file->filename().token(L".", 1).Compare(L"galaxy") )
798
		if ( file->filename().contains(L"initplayership") && file->filename().token(L".", 1).Compare(L"galaxy") )
799
			break;
799
			break;
800
	}
800
	}
801
 
801
 
802
	if ( !file )
802
	if ( !file )
803
		return "";
803
		return L"";
804
 
804
 
805
	return file->filename().token(L".", 2).toString();
805
	return file->filename().token(L".", 2);
806
}
806
}
807
 
807
 
808
void CSpkFile::MergePackage(CBaseFile *base)
808
void CSpkFile::MergePackage(CBaseFile *base)
809
{
809
{
810
	// update possible changes
810
	// update possible changes
811
	if ( base->GetType() == TYPE_SPK )
811
	if ( base->GetType() == TYPE_SPK )
812
	{
812
	{
813
		CSpkFile *spk = (CSpkFile *)base;
813
		CSpkFile *spk = (CSpkFile *)base;
814
		m_bForceProfile = spk->IsForceProfile();
814
		m_bForceProfile = spk->IsForceProfile();
815
 
815
 
816
		// add any new wares
816
		// add any new wares
817
		if ( spk->AnyWares() )
817
		if ( spk->anyWares() )
818
		{
818
		{
819
			for ( CListNode<SWares> *node = spk->GetWaresList()->Front(); node; node = node->next() )
819
			for ( CListNode<SWares> *node = spk->GetWaresList()->Front(); node; node = node->next() )
820
				this->AddWare(node->Data());
820
				this->addWare(node->Data());
821
			spk->GetWaresList()->clear(); // remove wares so they aren't deleted
821
			spk->GetWaresList()->clear(); // remove wares so they aren't deleted
822
		}
822
		}
823
 
823
 
824
		// add any settings
824
		// add any settings
825
		if ( spk->anySettings() )
825
		if ( spk->anySettings() )
826
		{
826
		{
827
			for ( CListNode<SSettingType> *node = spk->settingsList()->Front(); node; node = node->next() )
827
			for ( CListNode<SSettingType> *node = spk->settingsList()->Front(); node; node = node->next() )
828
				this->addSetting(node->Data()->sKey, node->Data()->iType);
828
				this->addSetting(node->Data()->sKey, node->Data()->iType);
829
		}
829
		}
830
 
830
 
831
		if ( !spk->otherName().empty() )
831
		if ( !spk->otherName().empty() )
832
		{
832
		{
833
			m_sOtherName = spk->otherName();
833
			m_sOtherName = spk->otherName();
834
			m_sOtherAuthor = spk->otherAuthor();
834
			m_sOtherAuthor = spk->otherAuthor();
835
		}
835
		}
836
	}
836
	}
837
 
837
 
838
	// copy settings from base class
838
	// copy settings from base class
839
	_merge(base);
839
	_merge(base);
840
 
840
 
841
	for ( CListNode<SGameCompat> *gNode = base->GetGameCompatabilityList()->Front(); gNode; gNode = gNode->next() ) {
841
	for ( CListNode<SGameCompat> *gNode = base->GetGameCompatabilityList()->Front(); gNode; gNode = gNode->next() ) {
842
		if ( !gNode->Data()->sVersion.empty() )
842
		if ( !gNode->Data()->sVersion.empty() )
843
			this->AddGameCompatability(gNode->Data()->iGame, gNode->Data()->sVersion.toString());
843
			this->AddGameCompatability(gNode->Data()->iGame, gNode->Data()->sVersion);
844
		else
844
		else
845
			this->AddGameCompatability(gNode->Data()->iGame, (long)gNode->Data()->iVersion);
845
			this->AddGameCompatability(gNode->Data()->iGame, (long)gNode->Data()->iVersion);
846
	}
846
	}
847
 
847
 
848
	// copy over needed librarys
848
	// copy over needed librarys
Line 854... Line 854...
854
		this->addWebMirror((*itr)->str);
854
		this->addWebMirror((*itr)->str);
855
 
855
 
856
	// copy over package names
856
	// copy over package names
857
	for(auto itr = base->namesList()->begin(); itr != base->namesList()->end(); itr++)
857
	for(auto itr = base->namesList()->begin(); itr != base->namesList()->end(); itr++)
858
		this->addName((*itr)->iLanguage, (*itr)->sName);
858
		this->addName((*itr)->iLanguage, (*itr)->sName);
859
 
859
 
860
	// finally do all the files
860
	// finally do all the files
861
	for ( CListNode<C_File> *node = base->fileList().Front(); node; node = node->next() )
861
	for ( CListNode<C_File> *node = base->fileList().Front(); node; node = node->next() )
862
	{
862
	{
863
		C_File *f = node->Data();
863
		C_File *f = node->Data();
864
		// if it exists, remove the old
864
		// if it exists, remove the old
Line 874... Line 874...
874
		m_lFiles.push_back(f);
874
		m_lFiles.push_back(f);
875
	}
875
	}
876
 
876
 
877
	// clear the files so we dont delete them later
877
	// clear the files so we dont delete them later
878
	base->GetFileList()->clear();
878
	base->GetFileList()->clear();
879
}
879
}
880
 
880
 
881
unsigned char *CSpkFile::_convert_uncompressFile(const Utils::String &sOldFilename, int *pLen)
881
unsigned char *CSpkFile::_convert_uncompressFile(const Utils::WString &sOldFilename, int *pLen)
882
{
882
{
883
	// firstcheck if the file exists
883
	// firstcheck if the file exists
884
	FILE *id = fopen(sOldFilename.c_str(), "rb" );
884
	FILE *id = _wfopen(sOldFilename.c_str(), L"rb" );
885
	if ( !id ) {
885
	if ( !id ) {
886
		CLog::logf(CLog::Log_IO, 1, "Unable to open file: %s", sOldFilename.c_str());
886
		CLog::logf(CLog::Log_IO, 1, "Unable to open file: %s", sOldFilename.c_str());
887
		return false;
887
		return false;
888
	}
888
	}
889
 
889
 
Line 911... Line 911...
911
		if ( !opened ) {
911
		if ( !opened ) {
912
			CLog::log(CLog::Log_IO, 1, L"Unable to uncompress file, exiting...");
912
			CLog::log(CLog::Log_IO, 1, L"Unable to uncompress file, exiting...");
913
			return false;
913
			return false;
914
		}
914
		}
915
 
915
 
916
		CLog::log(CLog::Log_IO, 1, L"* Reading file into memory...");
916
		CLog::log(CLog::Log_IO, 1, L"* Reading file into memory...");
917
		// get file length
917
		// get file length
918
		fseek ( id, 0, SEEK_END );
918
		fseek ( id, 0, SEEK_END );
919
		len = ftell ( id );
919
		len = ftell ( id );
920
		
920
		
921
		// move back to beginning
921
		// move back to beginning
922
		fseek ( id, 0, SEEK_SET );
922
		fseek ( id, 0, SEEK_SET );
923
 
923
 
924
		// read the data from file into memory
924
		// read the data from file into memory
925
		uncomprData = new unsigned char[len + 1];
925
		uncomprData = new unsigned char[len + 1];
926
		fread ( uncomprData, sizeof(unsigned char), len, id );
926
		fread ( uncomprData, sizeof(unsigned char), len, id );
927
 
927
 
928
		newlen = len;
928
		newlen = len;
Line 938... Line 938...
938
		fseek ( id, 0, SEEK_SET );
938
		fseek ( id, 0, SEEK_SET );
939
 
939
 
940
		// read the data from file into memory
940
		// read the data from file into memory
941
		data = new unsigned char[len + 1];
941
		data = new unsigned char[len + 1];
942
		fread ( data, sizeof(unsigned char), len, id );
942
		fread ( data, sizeof(unsigned char), len, id );
943
 
943
 
944
		// uncompress the file (currently only 7zip compression)
944
		// uncompress the file (currently only 7zip compression)
945
		CLog::log(CLog::Log_IO, 1, L"* Uncompressing file...");
945
		CLog::log(CLog::Log_IO, 1, L"* Uncompressing file...");
946
		newlen = len;
946
		newlen = len;
947
	#ifdef _INCLUDE7ZIP
947
	#ifdef _INCLUDE7ZIP
948
		uncomprData = LZMADecodeData ( data, len, newlen, progress );
948
		uncomprData = LZMADecodeData ( data, len, newlen, progress );
949
	#else
949
	#else
950
		uncomprData = LZMADecode_C ( (unsigned char *)data, len, (size_t*)&newlen, NULL );
950
		uncomprData = LZMADecode_C ( (unsigned char *)data, len, (size_t*)&newlen, NULL );
951
	#endif
951
	#endif
952
	}
952
	}
953
 
953
 
954
	*pLen = newlen;
954
	*pLen = newlen;
955
 
955
 
956
	if ( !removeFile.empty() ) {
956
	if ( !removeFile.empty() ) {
957
		CFileIO::Remove(removeFile);
957
		CFileIO::Remove(removeFile);
958
	}
958
	}
959
 
959
 
960
	return uncomprData;
960
	return uncomprData;
961
}
961
}
962
 
962
 
963
Utils::String CSpkFile::_convert_fileEndString(const Utils::String &sFile)
963
Utils::WString CSpkFile::_convert_fileEndString(const Utils::WString &sFile)
964
{
964
{
965
	if ( sFile.Compare("Text") )
965
	if ( sFile.Compare(L"Text") )
966
		return "-- End of Script --";
966
		return L"-- End of Script --";
967
	else if ( sFile.Compare("Uninstall") )
967
	else if ( sFile.Compare(L"Uninstall") )
968
		return "-- End of Uninstall --";
968
		return L"-- End of Uninstall --";
969
	else if ( sFile.Compare("Readme") )
969
	else if ( sFile.Compare(L"Readme") )
970
		return "-- End of Readme --";
970
		return L"-- End of Readme --";
971
	else if ( sFile.Compare("Map") )
971
	else if ( sFile.Compare(L"Map") )
972
		return "-- End of Map --";
972
		return L"-- End of Map --";
973
	else if ( sFile.Compare("Mod") || sFile.Compare("Extra") || sFile.Compare("Screen") || sFile.Compare("Sound") )
973
	else if ( sFile.Compare(L"Mod") || sFile.Compare(L"Extra") || sFile.Compare(L"Screen") || sFile.Compare(L"Sound") )
974
		return "";
974
		return L"";
975
	return "-- End of Script --";
975
	return L"-- End of Script --";
976
}
976
}
977
 
977
 
978
FileType CSpkFile::_convert_fileType(const Utils::String &sFile)
978
FileType CSpkFile::_convert_fileType(const Utils::WString &sFile)
979
{
979
{
980
	if ( sFile.Compare("Text") )
980
	if ( sFile.Compare(L"Text") )
981
		return FILETYPE_TEXT;
981
		return FILETYPE_TEXT;
982
	else if ( sFile.Compare("Uninstall") )
982
	else if ( sFile.Compare(L"Uninstall") )
983
		return FILETYPE_UNINSTALL;
983
		return FILETYPE_UNINSTALL;
984
	else if ( sFile.Compare("Readme") )
984
	else if ( sFile.Compare(L"Readme") )
985
		return FILETYPE_README;
985
		return FILETYPE_README;
986
	else if ( sFile.Compare("Map") )
986
	else if ( sFile.Compare(L"Map") )
987
		return FILETYPE_MAP;
987
		return FILETYPE_MAP;
988
	else if ( sFile.Compare("Mod") )
988
	else if ( sFile.Compare(L"Mod") )
989
		return FILETYPE_MOD;
989
		return FILETYPE_MOD;
990
	else if ( sFile.Compare("Extra") )
990
	else if ( sFile.Compare(L"Extra") )
991
		return FILETYPE_EXTRA;
991
		return FILETYPE_EXTRA;
992
	else if ( sFile.Compare("Screen") )
992
	else if ( sFile.Compare(L"Screen") )
993
		return FILETYPE_SCREEN;
993
		return FILETYPE_SCREEN;
994
	else if ( sFile.Compare("Sound") )
994
	else if ( sFile.Compare(L"Sound") )
995
		return FILETYPE_SOUND;
995
		return FILETYPE_SOUND;
996
 
996
 
997
	return FILETYPE_SCRIPT;
997
	return FILETYPE_SCRIPT;
998
}
998
}
999
 
999
 
1000
void CSpkFile::_convert_parse(const Utils::String &sCmd, const Utils::String &sRest)
1000
void CSpkFile::_convert_parse(const Utils::WString &sCmd, const Utils::WString &sRest)
1001
{
1001
{
1002
	if ( sCmd == "Name:" )
1002
	if ( sCmd == L"Name:" )
1003
	{
1003
	{
1004
		this->setName ( sRest );
1004
		this->setName(sRest);
1005
		CLog::logf(CLog::Log_EditPackage, 3, "\tScript Name: %s", sRest.c_str() );
1005
		CLog::logf(CLog::Log_EditPackage, 3, "\tScript Name: %s", sRest.c_str() );
1006
	}
1006
	}
1007
	else if ( sCmd == "Author:" )
1007
	else if ( sCmd == L"Author:" )
1008
	{
1008
	{
1009
		this->setAuthor(sRest);
1009
		this->setAuthor(sRest);
1010
		CLog::logf(CLog::Log_EditPackage, 3, "\tScript Author: %s", sRest.c_str() );
1010
		CLog::logf(CLog::Log_EditPackage, 3, "\tScript Author: %s", sRest.c_str() );
1011
	}
1011
	}
1012
	else if ( sCmd == "CustomStart" )
1012
	else if ( sCmd == L"CustomStart" )
1013
	{
1013
	{
1014
		this->SetCustomStart();
1014
		this->SetCustomStart();
1015
		CLog::logf(CLog::Log_EditPackage, 3, "\tPackage is a custom start!!" );
1015
		CLog::logf(CLog::Log_EditPackage, 3, "\tPackage is a custom start!!" );
1016
	}
1016
	}
1017
	else if ( sCmd == "AnotherMod:" )
1017
	else if ( sCmd == L"AnotherMod:" )
1018
	{
1018
	{
1019
		this->setAnotherMod(sRest.token("|", 1), sRest.tokens("|", 2));
1019
		this->setAnotherMod(sRest.token(L"|", 1), sRest.tokens(L"|", 2));
1020
		CLog::logf(CLog::Log_EditPackage, 3, "\tFor another Mod, Name: %s, Author: %s", this->otherName().c_str(), this->otherAuthor().c_str() );
1020
		CLog::logf(CLog::Log_EditPackage, 3, "\tFor another Mod, Name: %s, Author: %s", this->otherName().c_str(), this->otherAuthor().c_str() );
1021
	}
1021
	}
1022
	else if ( sCmd == "PATCH" )
1022
	else if ( sCmd == L"PATCH" )
1023
	{
1023
	{
1024
		this->SetPatch();
1024
		this->SetPatch();
1025
		CLog::logf(CLog::Log_EditPackage, 3, "\tPackage is a Patch Mod!!" );
1025
		CLog::logf(CLog::Log_EditPackage, 3, "\tPackage is a Patch Mod!!" );
1026
	}
1026
	}
1027
	else if ( sCmd == "Version:" )
1027
	else if ( sCmd == L"Version:" )
1028
	{
1028
	{
1029
		this->setVersion(sRest);
1029
		this->setVersion(sRest);
1030
		CLog::logf(CLog::Log_EditPackage, 3,"\tScript Version: %s", sRest.c_str() );
1030
		CLog::logf(CLog::Log_EditPackage, 3,"\tScript Version: %s", sRest.c_str() );
1031
	}
1031
	}
1032
	else if ( sCmd == "Date:" )
1032
	else if ( sCmd == L"Date:" )
1033
	{
1033
	{
1034
		this->setCreationDate ( sRest );
1034
		this->setCreationDate ( sRest );
1035
		CLog::logf(CLog::Log_EditPackage, 3,"\tScript Creation Date: %s", sRest.c_str() );
1035
		CLog::logf(CLog::Log_EditPackage, 3,"\tScript Creation Date: %s", sRest.c_str() );
1036
	}
1036
	}
1037
	else if ( sCmd == "Desc:" ) {
1037
	else if ( sCmd == L"Desc:" ) {
1038
		this->setDescription(sRest.findReplace("<br>", "\n") );
1038
		this->setDescription(sRest.findReplace(L"<br>", L"\n") );
1039
		CLog::logf(CLog::Log_EditPackage, 3,"\tScript Description: %s", this->description().c_str() );
1039
		CLog::logf(CLog::Log_EditPackage, 3,"\tScript Description: %s", this->description().c_str() );
1040
	}
1040
	}
1041
	else if ( sCmd == "WebAddress:" ) {
1041
	else if ( sCmd == L"WebAddress:" ) {
1042
		this->setWebAddress(sRest);
1042
		this->setWebAddress(sRest);
1043
		CLog::logf(CLog::Log_EditPackage, 3, "\tWeb Address: %s", sRest.c_str() );
1043
		CLog::logf(CLog::Log_EditPackage, 3, "\tWeb Address: %s", sRest.c_str() );
1044
	}
1044
	}
1045
	else if ( sCmd == "WebMirror1:" )
1045
	else if ( sCmd == L"WebMirror1:" )
1046
	{
1046
	{
1047
		this->addWebMirror(sRest);
1047
		this->addWebMirror(sRest);
1048
		CLog::logf(CLog::Log_EditPackage, 3, "\tWeb Mirror Address: %s", sRest.c_str() );
1048
		CLog::logf(CLog::Log_EditPackage, 3, "\tWeb Mirror Address: %s", sRest.c_str() );
1049
	}
1049
	}
1050
	else if ( sCmd == "WebMirror2:" )
1050
	else if ( sCmd == L"WebMirror2:" )
1051
	{
1051
	{
1052
		this->addWebMirror(sRest);
1052
		this->addWebMirror(sRest);
1053
		CLog::logf(CLog::Log_EditPackage, 3, "\tWeb Mirror Address: %s", sRest.c_str() );
1053
		CLog::logf(CLog::Log_EditPackage, 3, "\tWeb Mirror Address: %s", sRest.c_str() );
1054
	}
1054
	}
1055
	
1055
	
1056
	else if ( sCmd == "ScriptType:" )
1056
	else if ( sCmd == L"ScriptType:" )
1057
		this->setScriptType (sRest.toWString());
1057
		this->setScriptType (sRest);
1058
	else if ( sCmd == "WebSite:" ) {
1058
	else if ( sCmd == L"WebSite:" ) {
1059
		this->setWebSite ( sRest );
1059
		this->setWebSite ( sRest );
1060
		CLog::logf(CLog::Log_EditPackage, 3, "\tWeb Site: %s", sRest.c_str() );
1060
		CLog::logf(CLog::Log_EditPackage, 3, "\tWeb Site: %s", sRest.c_str() );
1061
	}
1061
	}
1062
	else if ( sCmd == "Email:" ) {
1062
	else if ( sCmd == L"Email:" ) {
1063
		this->setEmail(sRest);
1063
		this->setEmail(sRest);
1064
		CLog::logf(CLog::Log_EditPackage, 3, "\tAuthor Email Address: %s", sRest.c_str() );
1064
		CLog::logf(CLog::Log_EditPackage, 3, "\tAuthor Email Address: %s", sRest.c_str() );
1065
	}
1065
	}
1066
	else if ( sCmd == "GameVersion:" )
1066
	else if ( sCmd == L"GameVersion:" )
1067
	{
1067
	{
1068
		//TODO: fix this for new game version
1068
		//TODO: fix this for new game version
1069
		/*
1069
		/*
1070
		int version = sRest.ToInt();
1070
		int version = sRest.ToInt();
1071
		if ( version == 0 )
1071
		if ( version == 0 )
Line 1076... Line 1076...
1076
			this->SetGameVersion ( version );
1076
			this->SetGameVersion ( version );
1077
		CLog::logf(CLog::Log_EditPackage, "\tGame Version: %d", this->GetGameVersion () );
1077
		CLog::logf(CLog::Log_EditPackage, "\tGame Version: %d", this->GetGameVersion () );
1078
		*/
1078
		*/
1079
	}
1079
	}
1080
	
1080
	
1081
	else if ( sCmd == "Ware:" )
1081
	else if ( sCmd == L"Ware:" )
1082
	{
1082
	{
1083
		this->AddWare ( sRest );
1083
		this->addWare ( sRest );
1084
		CLog::logf(CLog::Log_EditPackage, 3, "\tAdding Custom Ware" );
1084
		CLog::logf(CLog::Log_EditPackage, 3, "\tAdding Custom Ware" );
1085
	}
1085
	}
1086
	else if ( sCmd == "WareText:" )
1086
	else if ( sCmd == L"WareText:" )
1087
		this->addWareText ( sRest );
1087
		this->addWareText ( sRest );
1088
	else if ( sCmd == "UninstallAfter:" )	this->addUninstallText(sRest.token(" ", 1).toLong(), false, sRest.tokens(" ", 2));
1088
	else if ( sCmd == L"UninstallAfter:" )	this->addUninstallText(sRest.token(L" ", 1).toLong(), false, sRest.tokens(L" ", 2));
1089
	else if ( sCmd == "UninstallBefore:" )	this->addUninstallText(sRest.token(" ", 1).toLong(), true, sRest.tokens(" ", 2));
1089
	else if ( sCmd == L"UninstallBefore:" )	this->addUninstallText(sRest.token(L" ", 1).toLong(), true, sRest.tokens(L" ", 2));
1090
	else if ( sCmd == "InstallAfter:" )		this->addInstallText(sRest.token(" ", 1).toLong(), false, sRest.tokens(" ", 2));
1090
	else if ( sCmd == L"InstallAfter:" )	this->addInstallText(sRest.token(L" ", 1).toLong(), false, sRest.tokens(L" ", 2));
1091
	else if ( sCmd == "InstallBefore:" )	this->addInstallText(sRest.token(" ", 1).toLong(), true, sRest.tokens(" ", 2));
1091
	else if ( sCmd == L"InstallBefore:" )	this->addInstallText(sRest.token(L" ", 1).toLong(), true, sRest.tokens(L" ", 2));
1092
	else if ( sCmd == "ScriptName:" )
1092
	else if ( sCmd == L"ScriptName:" )
1093
	{
1093
	{
1094
		Utils::String lang = sRest.token(":", 1);
1094
		Utils::WString lang = sRest.token(L":", 1);
1095
		Utils::String name = sRest.tokens(":", 2);
1095
		Utils::WString name = sRest.tokens(L":", 2);
1096
		this->addName(lang.toLong(), name);
1096
		this->addName(lang.toLong(), name);
1097
		CLog::logf(CLog::Log_EditPackage, 3, "\tScript Name Language (%s) %s", lang.c_str(), name.c_str() );
1097
		CLog::logf(CLog::Log_EditPackage, 3, "\tScript Name Language (%s) %s", lang.c_str(), name.c_str() );
1098
	}
1098
	}
1099
}
1099
}
1100
 
1100
 
1101
Utils::String CSpkFile::_convert_parseFilename(const Utils::String &sRest, float fVersion, Utils::String *pDir)
1101
Utils::WString CSpkFile::_convert_parseFilename(const Utils::WString &sRest, float fVersion, Utils::WString *pDir)
1102
{
1102
{
1103
	Utils::String sFilename;
1103
	Utils::WString sFilename;
1104
 
1104
 
1105
	if ( fVersion >= 3.00f )
1105
	if ( fVersion >= 3.00f )
1106
		sFilename = sRest.tokens(" ", 3);
1106
		sFilename = sRest.tokens(L" ", 3);
1107
	else if ( fVersion >= 2.00f )
1107
	else if ( fVersion >= 2.00f )
1108
		sFilename = sRest.tokens(" ", 2);
1108
		sFilename = sRest.tokens(L" ", 2);
1109
	else
1109
	else
1110
		sFilename = sRest;
1110
		sFilename = sRest;
1111
 
1111
 
1112
	if ( sFilename.isin("<br>") ) {
1112
	if ( sFilename.contains(L"<br>") ) {
1113
		sFilename = sFilename.findReplace("<br>", "|");
1113
		sFilename = sFilename.findReplace(L"<br>", L"|");
1114
		if ( sFilename[0] == '|' ) {
1114
		if ( sFilename[0] == L'|' ) {
1115
			sFilename = sFilename.token("|", 1);
1115
			sFilename = sFilename.token(L"|", 1);
1116
		}
1116
		}
1117
		else {
1117
		else {
1118
			*pDir = sFilename.token("|", 1);
1118
			*pDir = sFilename.token(L"|", 1);
1119
			sFilename = sFilename.tokens("|", 2);
1119
			sFilename = sFilename.tokens(L"|", 2);
1120
		}
1120
		}
1121
	}
1121
	}
1122
 
1122
 
1123
	return sFilename;
1123
	return sFilename;
1124
}
1124
}
1125
 
1125
 
1126
unsigned char *CSpkFile::_convert_parseFile(const Utils::String &sCmd, const Utils::String &sRest, float fVersion, unsigned char *d)
1126
unsigned char *CSpkFile::_convert_parseFile(const Utils::WString &sCmd, const Utils::WString &sRest, float fVersion, unsigned char *d)
1127
{
1127
{
1128
	bool bShared = (sCmd.left(9) == "$$$Shared") ? true : false;
1128
	bool bShared = (sCmd.left(9) == L"$$$Shared") ? true : false;
1129
	Utils::String sFile = sCmd.right(-3).left(-1);
1129
	Utils::WString sFile = sCmd.right(-3).left(-1);
1130
	Utils::String sEnd = this->_convert_fileEndString(sFile);
1130
	Utils::WString sEnd = this->_convert_fileEndString(sFile);
1131
	FileType iType = this->_convert_fileType(sFile);
1131
	FileType iType = this->_convert_fileType(sFile);
1132
 
1132
 
1133
	// convert the filename and directory
1133
	// convert the filename and directory
1134
	Utils::String dir, filename = _convert_parseFilename(sRest, fVersion, &dir);
1134
	Utils::WString dir, filename = _convert_parseFilename(sRest, fVersion, &dir);
1135
 
1135
 
1136
	// get the size and time
1136
	// get the size and time
1137
	long time = 0, size = 0;
1137
	long time = 0, size = 0;
1138
	if ( fVersion >= 2.00f ) time = sRest.token(" ", 1).toLong();
1138
	if ( fVersion >= 2.00f ) time = sRest.token(L" ", 1).toLong();
1139
	if ( fVersion >= 3.00f ) size = sRest.token(" ", 2).toLong();
1139
	if ( fVersion >= 3.00f ) size = sRest.token(L" ", 2).toLong();
1140
	bool binaryRead = (CFileIO(filename).isFileExtension(L"PCK")) ? true : false;
1140
	bool binaryRead = (CFileIO(filename).isFileExtension(L"PCK")) ? true : false;
1141
	if ( sEnd.empty() ) binaryRead = true;
1141
	if ( sEnd.empty() ) binaryRead = true;
1142
	
1142
	
1143
	C_File *file = new C_File ();
1143
	C_File *file = new C_File ();
1144
 
1144
 
Line 1152... Line 1152...
1152
		d += size;
1152
		d += size;
1153
	}
1153
	}
1154
	else
1154
	else
1155
	{
1155
	{
1156
		Utils::String readData;
1156
		Utils::String readData;
1157
		d = LineByLineRead ( d, sEnd, &readData );
1157
		d = LineByLineRead ( d, sEnd.toString(), &readData);
1158
		file->ReadFromData ( (char *)readData.c_str(), (long)readData.length() );
1158
		file->ReadFromData ( (char *)readData.c_str(), (long)readData.length() );
1159
	}
1159
	}
1160
 
1160
 
1161
	// setup the file
1161
	// setup the file
1162
	file->setName ( filename );
1162
	file->setName ( filename );
Line 1171... Line 1171...
1171
	CLog::logf(CLog::Log_File, 3, "Size: %s", file->dataSizeString().c_str() );
1171
	CLog::logf(CLog::Log_File, 3, "Size: %s", file->dataSizeString().c_str() );
1172
 
1172
 
1173
	return d;
1173
	return d;
1174
}
1174
}
1175
 
1175
 
1176
CSpkFile *CSpkFile::convertFromOld(const Utils::String &sOldFilename)
1176
CSpkFile *CSpkFile::convertFromOld(const Utils::WString &sOldFilename)
1177
{
1177
{
1178
	// check if the old file is actually in an old format
1178
	// check if the old file is actually in an old format
1179
	int ret = CBaseFile::CheckFile ( sOldFilename );
1179
	int ret = CBaseFile::CheckFile ( sOldFilename );
1180
	if ( ret != SPKFILE_INVALID && ret != SPKFILE_OLD ) {
1180
	if ( ret != SPKFILE_INVALID && ret != SPKFILE_OLD ) {
1181
		return NULL;
1181
		return NULL;
Line 1188... Line 1188...
1188
	}
1188
	}
1189
 
1189
 
1190
	return pSpkFile;
1190
	return pSpkFile;
1191
}
1191
}
1192
 
1192
 
1193
bool CSpkFile::convertOld(const Utils::String &sOldFilename)
1193
bool CSpkFile::convertOld(const Utils::WString &sOldFilename)
1194
{
1194
{
1195
	// check if the old file is actually in an old format
1195
	// check if the old file is actually in an old format
1196
	int ret = CBaseFile::CheckFile ( sOldFilename );
1196
	int ret = CBaseFile::CheckFile ( sOldFilename );
1197
	if ( ret != SPKFILE_INVALID && ret != SPKFILE_OLD ) {
1197
	if ( ret != SPKFILE_INVALID && ret != SPKFILE_OLD ) {
1198
		return false;
1198
		return false;