Subversion Repositories spk

Rev

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

Rev 216 Rev 217
Line 609... Line 609...
609
		else if ( node->Data()->GetType() == TYPE_XSP )
609
		else if ( node->Data()->GetType() == TYPE_XSP )
610
		{
610
		{
611
			CXspFile *p = (CXspFile *)node->Data();
611
			CXspFile *p = (CXspFile *)node->Data();
612
			for ( CListNode<SGameShip> *gNode = m_lGameShips.Front(); gNode; gNode = gNode->next() )
612
			for ( CListNode<SGameShip> *gNode = m_lGameShips.Front(); gNode; gNode = gNode->next() )
613
			{
613
			{
614
				if ( p->GetShipID().Compare(gNode->Data()->sShipID.toString()) )
614
				if ( p->shipID().Compare(gNode->Data()->sShipID) )
615
				{
615
				{
616
					gNode->Data()->pPackage = p;
616
					gNode->Data()->pPackage = p;
617
					break;
617
					break;
618
				}
618
				}
619
			}
619
			}
Line 1009... Line 1009...
1009
		}
1009
		}
1010
	}
1010
	}
1011
	else if ( package->GetType() == TYPE_XSP )
1011
	else if ( package->GetType() == TYPE_XSP )
1012
	{
1012
	{
1013
		CXspFile *xsp = (CXspFile *)package;
1013
		CXspFile *xsp = (CXspFile *)package;
1014
		Utils::String data = xsp->GetShipData();
1014
		Utils::WString data = xsp->shipData();
1015
 
1015
 
1016
		for ( int i = 17; i <= 18; i++ )
1016
		for ( int i = 17; i <= 18; i++ )
1017
		{
1017
		{
1018
			Utils::String model = data.token(";", i);
1018
			Utils::WString model = data.token(L";", i);
1019
			Utils::String modelExt = model.right(4);
1019
			Utils::WString modelExt = model.right(4);
1020
			// check file extension
1020
			// check file extension
1021
			if ( modelExt.Compare(".bod") || modelExt.Compare(".pbd") )
1021
			if ( modelExt.Compare(L".bod") || modelExt.Compare(L".pbd") )
1022
				data = data.replaceToken(";", i, model.left(-4));
1022
				data = data.replaceToken(L";", i, model.left(-4));
1023
		}
1023
		}
1024
 
1024
 
1025
		xsp->SetShipData(data);
1025
		xsp->setShipData(data);
1026
	}
1026
	}
1027
 
1027
 
1028
	// any extra files that are in director folder
1028
	// any extra files that are in director folder
1029
	if ( package->AnyFileType(FILETYPE_EXTRA) )
1029
	if ( package->AnyFileType(FILETYPE_EXTRA) )
1030
	{
1030
	{
Line 2327... Line 2327...
2327
		CXspFile *p = (CXspFile *)pNode->Data();
2327
		CXspFile *p = (CXspFile *)pNode->Data();
2328
 
2328
 
2329
		bool found = false;
2329
		bool found = false;
2330
		for ( CListNode<SGameShip> *wNode = m_lGameShips.Front(); wNode; wNode = wNode->next() )
2330
		for ( CListNode<SGameShip> *wNode = m_lGameShips.Front(); wNode; wNode = wNode->next() )
2331
		{
2331
		{
2332
			if ( wNode->Data()->sShipID.Compare(p->GetShipID()) )
2332
			if ( wNode->Data()->sShipID.Compare(p->shipID()) )
2333
			{
2333
			{
2334
				if ( !p->IsEnabled() )
2334
				if ( !p->IsEnabled() )
2335
					wNode->Data()->iType = WARETYPE_DISABLED;
2335
					wNode->Data()->iType = WARETYPE_DISABLED;
2336
				else
2336
				else
2337
					wNode->Data()->iType = WARETYPE_ADDED;
2337
					wNode->Data()->iType = WARETYPE_ADDED;
2338
				found = true;
2338
				found = true;
2339
				wNode->Data()->pPackage = p;
2339
				wNode->Data()->pPackage = p;
2340
				wNode->Data()->sShipClass = p->GetShipClass().toWString();
2340
				wNode->Data()->sShipClass = p->shipClass();
2341
				break;
2341
				break;
2342
			}
2342
			}
2343
		}
2343
		}
2344
 
2344
 
2345
		if ( found || !p->IsEnabled() )
2345
		if ( found || !p->IsEnabled() )
Line 2350... Line 2350...
2350
		for ( CListNode<SGameShip> *wNode = m_lGameShips.Front(); wNode; wNode = wNode->next() )
2350
		for ( CListNode<SGameShip> *wNode = m_lGameShips.Front(); wNode; wNode = wNode->next() )
2351
		{
2351
		{
2352
			if ( (!gw) && (wNode->Data()->iType == WARETYPE_NONE) )
2352
			if ( (!gw) && (wNode->Data()->iType == WARETYPE_NONE) )
2353
				gw = wNode->Data();
2353
				gw = wNode->Data();
2354
			// find an old entry for the ware and add it to the same place
2354
			// find an old entry for the ware and add it to the same place
2355
			if ( wNode->Data()->sShipID.Compare(p->GetShipID()) )
2355
			if ( wNode->Data()->sShipID.Compare(p->shipID()) )
2356
			{
2356
			{
2357
				gw = wNode->Data();
2357
				gw = wNode->Data();
2358
				break;
2358
				break;
2359
			}
2359
			}
2360
		}
2360
		}
2361
 
2361
 
2362
		// none found, create one
2362
		// none found, create one
2363
		if ( !gw )
2363
		if ( !gw )
2364
		{
2364
		{
2365
			gw = new SGameShip;
2365
			gw = new SGameShip;
2366
			gw->sShipID = p->GetShipID().toWString();
2366
			gw->sShipID = p->shipID();
2367
			gw->sShipClass = p->GetShipClass().toWString();
2367
			gw->sShipClass = p->shipClass();
2368
			gw->pPackage = p;
2368
			gw->pPackage = p;
2369
			m_lGameShips.push_back(gw);
2369
			m_lGameShips.push_back(gw);
2370
		}
2370
		}
2371
		gw->iType = WARETYPE_ADDED;
2371
		gw->iType = WARETYPE_ADDED;
2372
	}
2372
	}
Line 3375... Line 3375...
3375
 
3375
 
3376
	// we are checking against a SPK package, so we match the name and author
3376
	// we are checking against a SPK package, so we match the name and author
3377
	if ( package->GetType() == TYPE_SPK )
3377
	if ( package->GetType() == TYPE_SPK )
3378
		return findSpkPackage(package->name(), package->author());
3378
		return findSpkPackage(package->name(), package->author());
3379
	else if ( package->GetType() == TYPE_XSP )
3379
	else if ( package->GetType() == TYPE_XSP )
3380
		return findXspPackage(((CXspFile *)package)->GetShipID());
3380
		return findXspPackage(((CXspFile *)package)->shipID());
3381
	else if ( package->GetType() == TYPE_ARCHIVE )
3381
	else if ( package->GetType() == TYPE_ARCHIVE )
3382
		return findArchivePackage(package->name().toString());
3382
		return findArchivePackage(package->name());
3383
 
3383
 
3384
	// nothing found obviously
3384
	// nothing found obviously
3385
	return 0;
3385
	return 0;
3386
}
3386
}
3387
 
3387
 
Line 3432... Line 3432...
3432
	}
3432
	}
3433
 
3433
 
3434
	return NULL;
3434
	return NULL;
3435
}
3435
}
3436
 
3436
 
3437
CArchiveFile *CPackages::findArchivePackage(const Utils::String &name) const
3437
CArchiveFile *CPackages::findArchivePackage(const Utils::WString &name) const
3438
{
3438
{
3439
	// interate through all packages
3439
	// interate through all packages
3440
	for ( CListNode<CBaseFile> *node = m_lPackages.Front(); node; node = node->next() )
3440
	for ( CListNode<CBaseFile> *node = m_lPackages.Front(); node; node = node->next() )
3441
	{
3441
	{
3442
		CBaseFile *file = node->Data();
3442
		CBaseFile *file = node->Data();
Line 3498... Line 3498...
3498
/**
3498
/**
3499
 * Find a XSP Package
3499
 * Find a XSP Package
3500
 *
3500
 *
3501
 * This searching all installed packages for a XSP Package matching the object id
3501
 * This searching all installed packages for a XSP Package matching the object id
3502
 */
3502
 */
3503
CBaseFile *CPackages::findXspPackage(const Utils::String &id) const
3503
CBaseFile *CPackages::findXspPackage(const Utils::WString &id) const
3504
{
3504
{
3505
	// interate through all packages
3505
	// interate through all packages
3506
	for ( CListNode<CBaseFile> *node = m_lPackages.Front(); node; node = node->next() )
3506
	for ( CListNode<CBaseFile> *node = m_lPackages.Front(); node; node = node->next() )
3507
	{
3507
	{
3508
		CBaseFile *file = node->Data();
3508
		CBaseFile *file = node->Data();
Line 3510... Line 3510...
3510
		// only look for spk packages
3510
		// only look for spk packages
3511
		if ( file->GetType() != TYPE_XSP )
3511
		if ( file->GetType() != TYPE_XSP )
3512
			continue;
3512
			continue;
3513
 
3513
 
3514
		// now compare the id, "Compare" is a non case senseative check, opposed to ==.
3514
		// now compare the id, "Compare" is a non case senseative check, opposed to ==.
3515
		if ( ((CXspFile *)file)->GetShipID().Compare(id) )
3515
		if ( ((CXspFile *)file)->shipID().Compare(id) )
3516
			return file;
3516
			return file;
3517
	}
3517
	}
3518
 
3518
 
3519
	// nothing found
3519
	// nothing found
3520
	return 0;
3520
	return 0;
Line 7278... Line 7278...
7278
							if ( shipData.readShipData(line) )
7278
							if ( shipData.readShipData(line) )
7279
							{
7279
							{
7280
								for ( CListNode<SGameShip> *node = shipOverrides.Front(); node; node = node->next() )
7280
								for ( CListNode<SGameShip> *node = shipOverrides.Front(); node; node = node->next() )
7281
								{
7281
								{
7282
									SGameShip *s = node->Data();
7282
									SGameShip *s = node->Data();
7283
									if ( !s->pPackage->GetShipID().toWString().Compare(shipData.sID))
7283
									if ( !s->pPackage->shipID().Compare(shipData.sID))
7284
										continue;
7284
										continue;
7285
									s->iText = shiptext;
7285
									s->iText = shiptext;
7286
									if ( !s->pPackage->GetOriginalDescription() )
7286
									if ( !s->pPackage->GetOriginalDescription() )
7287
										shiptext += 2;
7287
										shiptext += 2;
7288
									s->iPos = tshipsList.size();
7288
									s->iPos = tshipsList.size();
Line 8131... Line 8131...
8131
	}
8131
	}
8132
 
8132
 
8133
	return false;
8133
	return false;
8134
}
8134
}
8135
 
8135
 
8136
size_t CPackages::loadShipData(const Utils::String &file, Utils::CStringList &list) const
8136
size_t CPackages::loadShipData(const Utils::WString &file, Utils::WStringList &list) const
8137
{
8137
{
8138
	CFileIO File;
8138
	CFileIO File;
8139
	bool deleteFile = false;
8139
	bool deleteFile = false;
8140
 
8140
 
8141
	// load from cat file
8141
	// load from cat file
8142
	if (CFileIO(file).isFileExtension(L"cat"))
8142
	if (CFileIO(file).isFileExtension(L"cat"))
8143
	{
8143
	{
8144
		CCatFile cat;
8144
		CCatFile cat;
8145
		if (cat.open(file, this->getAddonDir().toString(), CATREAD_CATDECRYPT, false) != CATERR_NONE)
8145
		if (cat.open(file, this->getAddonDir(), CATREAD_CATDECRYPT, false) != CATERR_NONE)
8146
			return false;
8146
			return false;
8147
 
8147
 
8148
		if (!cat.extractFile(L"types\\TShips.pck", m_sTempDir + L"/tships.txt"))
8148
		if (!cat.extractFile(L"types\\TShips.pck", m_sTempDir + L"/tships.txt"))
8149
			return false;
8149
			return false;
8150
 
8150
 
Line 8171... Line 8171...
8171
 
8171
 
8172
	if (!File.exists())
8172
	if (!File.exists())
8173
		return false;
8173
		return false;
8174
 
8174
 
8175
	bool ret = false;
8175
	bool ret = false;
8176
	std::vector<Utils::String> lines;
8176
	std::vector<Utils::WString> lines;
8177
	if (File.readLines(lines))
8177
	if (File.readLines(lines))
8178
	{
8178
	{
8179
		bool readFirst = false;
8179
		bool readFirst = false;
8180
		for (auto itr = lines.begin(); itr != lines.end(); itr++)
8180
		for (auto itr = lines.begin(); itr != lines.end(); itr++)
8181
		{
8181
		{
8182
			if (itr->empty())
8182
			if (itr->empty())
8183
				continue;
8183
				continue;
8184
			Utils::String str = itr->remove('\r').remove(9);
8184
			Utils::WString str = itr->remove('\r').remove(9);
8185
			str = str.removeFirstSpace();
8185
			str = str.removeFirstSpace();
8186
			if (str.empty())
8186
			if (str.empty())
8187
				continue;
8187
				continue;
8188
			if (str[0] == '/' || str[0] == '#')
8188
			if (str[0] == '/' || str[0] == '#')
8189
				continue;
8189
				continue;
8190
 
8190
 
8191
			if (!readFirst)
8191
			if (!readFirst)
8192
				readFirst = true;
8192
				readFirst = true;
8193
			else
8193
			else
8194
			{
8194
			{
8195
				Utils::String t = str.tokens(";", -2);
8195
				Utils::WString t = str.tokens(L";", -2);
8196
				while (t.right(1) == ";")
8196
				while (t.right(1) == ";")
8197
					t.truncate((int)t.length() - 1);
8197
					t.truncate((int)t.length() - 1);
8198
				list.pushBack(t, str);
8198
				list.pushBack(t, str);
8199
			}
8199
			}
8200
		}
8200
		}
Line 8206... Line 8206...
8206
		File.remove();
8206
		File.remove();
8207
 
8207
 
8208
	return ret;
8208
	return ret;
8209
}
8209
}
8210
 
8210
 
8211
Utils::String CPackages::readShipData(const Utils::String &file, const Utils::String &id) const
8211
Utils::WString CPackages::readShipData(const Utils::WString &file, const Utils::WString &id) const
8212
{
8212
{
8213
	Utils::CStringList list;
8213
	Utils::WStringList list;
8214
	if(!this->loadShipData(file, list))
8214
	if(!this->loadShipData(file, list))
8215
		return Utils::String::Null();
8215
		return Utils::WString::Null();
8216
 
8216
 
8217
	CShipData data;
8217
	CShipData data;
8218
	for(auto itr = list.begin(); itr != list.end(); itr++)
8218
	for(auto itr = list.begin(); itr != list.end(); itr++)
8219
	{
8219
	{
8220
		if ((*itr)->str.Compare(id))
8220
		if ((*itr)->str.Compare(id))
8221
			return (*itr)->data;
8221
			return (*itr)->data;
8222
	}
8222
	}
8223
 
8223
 
8224
	return Utils::String::Null();
8224
	return Utils::WString::Null();
8225
}
8225
}
8226
 
8226
 
8227
bool CPackages::readTextPage(const Utils::WString &file, Utils::WStringList &list, bool search, int page) const
8227
bool CPackages::readTextPage(const Utils::WString &file, Utils::WStringList &list, bool search, int page) const
8228
{
8228
{
8229
	CFileIO File;
8229
	CFileIO File;