Example #1
0
bool TAccount::loadAccount(const CString& pAccount, bool ignoreNickname)
{
	// Just in case this account was loaded offline through RC.
	accountName = pAccount;

	bool loadedFromDefault = false;
	CFileSystem* accfs = server->getAccountsFileSystem();
	std::vector<CString> fileData;

	CString accountText = server->getPluginManager().LoadAccount(pAccount);
	if (!accountText.isEmpty())
		fileData = accountText.tokenize("\n");
	else
	{
		// Find the account in the file system.
		CString accpath(accfs->findi(CString() << pAccount << ".txt"));
		if (accpath.length() == 0)
		{
			accpath = CString() << server->getServerPath() << "accounts/defaultaccount.txt";
			CFileSystem::fixPathSeparators(&accpath);
			loadedFromDefault = true;
		}

		// Load file.
		fileData = CString::loadToken(accpath, "\n");
		if (fileData.size() == 0 || fileData[0].trim() != "GRACC001")
			return false;
	}

	// Clear Lists
	for (int i = 0; i < 30; ++i) attrList[i].clear();
	chestList.clear();
	flagList.clear();
	folderList.clear();
	weaponList.clear();

	// Parse File
	for (unsigned int i = 0; i < fileData.size(); i++)
	{
		// Trim Line
		fileData[i].trimI();

		// Declare Variables;
		CString section, val;
		int sep;

		// Seperate Section & Value
		sep = fileData[i].find(' ');
		section = fileData[i].subString(0, sep);
		if (sep != -1)
			val = fileData[i].subString(sep + 1);

		if (section == "NAME") continue;
		else if (section == "NICK") { if (!ignoreNickname) nickName = val; }
		else if (section == "COMMUNITYNAME") communityName = val;
		else if (section == "LEVEL") levelName = val;
		else if (section == "X") { x = (float)strtofloat(val); x2 = (int)(x * 16); }
		else if (section == "Y") { y = (float)strtofloat(val); y2 = (int)(y * 16); }
		else if (section == "Z") { z = (float)strtofloat(val); z2 = (int)(z * 16); }
		else if (section == "MAXHP") maxPower = (int)strtoint(val);
		else if (section == "HP") power = (float)strtofloat(val);
		else if (section == "RUPEES") gralatc = strtoint(val);
		else if (section == "ANI") gani = val;
		else if (section == "ARROWS") arrowc = strtoint(val);
		else if (section == "BOMBS") bombc = strtoint(val);
		else if (section == "GLOVEP") glovePower = strtoint(val);
		else if (section == "SHIELDP") shieldPower = strtoint(val);
		else if (section == "SWORDP") swordPower = strtoint(val);
		else if (section == "BOWP") bowPower = strtoint(val);
		else if (section == "BOW") bowImage = val;
		else if (section == "HEAD") headImg = val;
		else if (section == "BODY") bodyImg = val;
		else if (section == "SWORD") swordImg = val;
		else if (section == "SHIELD") shieldImg = val;
		else if (section == "COLORS") { std::vector<CString> t = val.tokenize(","); for (int i = 0; i < (int)t.size() && i < 5; i++) colors[i] = (unsigned char)strtoint(t[i]); }
		else if (section == "SPRITE") sprite = strtoint(val);
		else if (section == "STATUS") status = strtoint(val);
		else if (section == "MP") mp = strtoint(val);
		else if (section == "AP") ap = strtoint(val);
		else if (section == "APCOUNTER") apCounter = strtoint(val);
		else if (section == "ONSECS") onlineTime = strtoint(val);
		else if (section == "IP") { if (accountIp == 0) accountIp = strtolong(val); }
		else if (section == "LANGUAGE") { language = val; if (language.isEmpty()) language = "English"; }
		else if (section == "KILLS") kills = strtoint(val);
		else if (section == "DEATHS") deaths = strtoint(val);
		else if (section == "RATING") rating = (float)strtofloat(val);
		else if (section == "DEVIATION") deviation = (float)strtofloat(val);
		else if (section == "LASTSPARTIME") lastSparTime = strtolong(val);
		else if (section == "FLAG") setFlag(val);
		else if (section == "ATTR1") attrList[0] = val;
		else if (section == "ATTR2") attrList[1] = val;
		else if (section == "ATTR3") attrList[2] = val;
		else if (section == "ATTR4") attrList[3] = val;
		else if (section == "ATTR5") attrList[4] = val;
		else if (section == "ATTR6") attrList[5] = val;
		else if (section == "ATTR7") attrList[6] = val;
		else if (section == "ATTR8") attrList[7] = val;
		else if (section == "ATTR9") attrList[8] = val;
		else if (section == "ATTR10") attrList[9] = val;
		else if (section == "ATTR11") attrList[10] = val;
		else if (section == "ATTR12") attrList[11] = val;
		else if (section == "ATTR13") attrList[12] = val;
		else if (section == "ATTR14") attrList[13] = val;
		else if (section == "ATTR15") attrList[14] = val;
		else if (section == "ATTR16") attrList[15] = val;
		else if (section == "ATTR17") attrList[16] = val;
		else if (section == "ATTR18") attrList[17] = val;
		else if (section == "ATTR19") attrList[18] = val;
		else if (section == "ATTR20") attrList[19] = val;
		else if (section == "ATTR21") attrList[20] = val;
		else if (section == "ATTR22") attrList[21] = val;
		else if (section == "ATTR23") attrList[22] = val;
		else if (section == "ATTR24") attrList[23] = val;
		else if (section == "ATTR25") attrList[24] = val;
		else if (section == "ATTR26") attrList[25] = val;
		else if (section == "ATTR27") attrList[26] = val;
		else if (section == "ATTR28") attrList[27] = val;
		else if (section == "ATTR29") attrList[28] = val;
		else if (section == "ATTR30") attrList[29] = val;
		else if (section == "WEAPON") weaponList.push_back(val);
		else if (section == "CHEST") chestList.push_back(val);
		else if (section == "BANNED") isBanned = (strtoint(val) == 0 ? false : true);
		else if (section == "BANREASON") banReason = val;
		else if (section == "BANLENGTH") banLength = val;
		else if (section == "COMMENTS") accountComments = val;
		else if (section == "EMAIL") email = val;
		else if (section == "LOCALRIGHTS") adminRights = strtoint(val);
		else if (section == "IPRANGE") adminIp = val;
		else if (section == "LOADONLY") isLoadOnly = (strtoint(val) == 0 ? false : true);
		else if (section == "FOLDERRIGHT") folderList.push_back(val);
		else if (section == "LASTFOLDER") lastFolder = val;
	}

	// If this is a guest account, loadonly is set to true.
	if (pAccount == "guest")
	{
		isLoadOnly = true;
		isGuest = true;
		srand((unsigned int)time(0));

		// Try to create a unique account number.
		while (true)
		{
			int v = (rand() * rand()) % 9999999;
			if (server->getPlayer("pc:" + CString(v)) == 0)
			{
				accountName = "pc:" + CString(v);
				break;
			}
		}
	}

	// Comment out this line if you are actually going to use community names.
	communityName = accountName;

	// If we loaded from the default account...
	if (loadedFromDefault)
	{
		CSettings* settings = server->getSettings();

		// Check to see if we are overriding our start level and position.
		if (settings->exists("startlevel"))
			levelName = settings->getStr("startlevel", "onlinestartlocal.nw");
		if (settings->exists("startx"))
		{
			x = settings->getFloat("startx", 30.0f);
			x2 = (int)(x * 16);
		}
		if (settings->exists("starty"))
		{
			y = settings->getFloat("starty", 30.5f);
			y2 = (int)(y * 16);
		}

		// Save our account now and add it to the file system.
		if (!isLoadOnly)
		{
			saveAccount();
			accfs->addFile(CString() << "accounts/" << pAccount << ".txt");
		}
	}

	return true;
}
Example #2
0
void
WGrid::paintEvent(QPaintEvent * pEvent)
	{
	QRect rcPaint = pEvent->rect();
	const int xPaintLeft = rcPaint.left();
	const int xPaintRight = rcPaint.right();
	const int yPaintBottom = rcPaint.bottom();
	Assert(xPaintLeft >= 0 && xPaintLeft <= m_cxDisplay);
	Assert(xPaintRight >= 0 && xPaintRight <= m_cxDisplay);
	Assert(yPaintBottom >= 0 && yPaintBottom <= m_cyDisplay);

	OPainter oPainter(viewport());

	if (m_cxWidthColumns == 0)
		_ColumnsRecalculateWidths();

	// Find the column to start drawing
	int cxSkip = m_xScrollStart + xPaintLeft;
	CGridColumn ** ppColumnStop;
	CGridColumn ** prgpColumns = m_arraypColumnsDisplay.PrgpGetColumnsStop(OUT &ppColumnStop);
	CGridColumn ** ppColumnStart = prgpColumns;
	while (ppColumnStart != ppColumnStop)
		{
		cxSkip -= ppColumnStart[0]->m_cxWidth;
		if (cxSkip <= 0)
			break;
		ppColumnStart++;
		} // while

	CString sText;
	if (m_cyHeightHeaderTop > 0)
		{
		//QRect rcHeader(0, 0, rcClient.width(), m_cy)
		oPainter.setPen(d_coGrayDark);
		oPainter.DrawLineHorizontal(xPaintLeft, xPaintRight, 0);
		oPainter.DrawLineHorizontal(xPaintLeft, xPaintRight, m_cyHeightHeaderTop);
		oPainter.DrawLineVertical(0, 0, m_cyHeightHeaderTop);

		// Draw the columns of the header
		CGridColumn ** ppColumn = ppColumnStart;
		int xLeft = 0;
		while (ppColumn != ppColumnStop)
			{
			CGridColumn * pColumn = *ppColumn++;
			sText.InitFromStringU(pColumn->m_strName);
			const int cxWidth = pColumn->m_cxWidth;
			oPainter.drawText(xLeft, 0, cxWidth, m_cyHeightHeaderTop, Qt::AlignHCenter | Qt::AlignVCenter, sText);

			// Display all the data for a column
			oPainter.setPen(d_coBlack);
			int yTop = m_cyHeightHeaderTop;
			PFn_GridCellGetText pfnGetText = pColumn->m_pfnGetText;
			if (pfnGetText != NULL)
				{
				CGridRow ** ppRowStop;
				CGridRow ** ppRow = m_arraypRowsDisplay.PrgpGetRowsStop(OUT &ppRowStop);
				while (ppRow != ppRowStop)
					{
					CGridRow * pRow = *ppRow++;
					sText = pfnGetText(pRow->m_pvDataRow, pColumn, eGridCellTextDisplay);
					if (!sText.isEmpty())
						{
						oPainter.drawText(xLeft + 2, yTop, cxWidth, m_cyHeightHeaderTop, Qt::AlignLeft | Qt::AlignVCenter, sText);
						yTop += m_cyHeightRow;
						if (yTop >= yPaintBottom)
							break;	// Don't draw the rows outside of the drawing area
						}
					} // while
				} // if

			xLeft += cxWidth;
			if (xLeft > xPaintRight)
				break;	// No need to draw anything outside of the drawing area
			oPainter.DrawLineVertical(xLeft, 0, m_cyHeightHeaderTop);
			} // while
		} // if

	// Draw the gridlines
	oPainter.setPen(d_coGrayDark);
	int yTop = m_cyHeightHeaderTop;
	while (yTop < yPaintBottom)
		{
		yTop += m_cyHeightRow;
		oPainter.DrawLineHorizontal(xPaintLeft, xPaintRight, yTop);
		}
	/*
	oPainter.setPen(d_coOrange);
	oPainter.drawText(rcClient, Qt::AlignHCenter | Qt::AlignVCenter, "Under Development");
	*/
	} // paintEvent()
Example #3
0
bool TAccount::saveAccount()
{
	// Don't save 'Load Only' or RC Accounts
	if (isLoadOnly)
		return false;

	CString newFile = "GRACC001\r\n";
	newFile << "NAME " << accountName << "\r\n";
	newFile << "NICK " << nickName << "\r\n";
	newFile << "COMMUNITYNAME " << accountName /*communityName*/ << "\r\n";
	newFile << "LEVEL " << levelName << "\r\n";
	newFile << "X " << CString(x) << "\r\n";
	newFile << "Y " << CString(y) << "\r\n";
	newFile << "Z " << CString(z) << "\r\n";
	newFile << "MAXHP " << CString(maxPower) << "\r\n";
	newFile << "HP " << CString(power) << "\r\n";
	newFile << "RUPEES " << CString(gralatc) << "\r\n";
	newFile << "ANI " << gani << "\r\n";
	newFile << "ARROWS " << CString(arrowc) << "\r\n";
	newFile << "BOMBS " << CString(bombc) << "\r\n";
	newFile << "GLOVEP " << CString(glovePower) << "\r\n";
	newFile << "SHIELDP " << CString(shieldPower) << "\r\n";
	newFile << "SWORDP " << CString(swordPower) << "\r\n";
	newFile << "BOWP " << CString(bowPower) << "\r\n";
	newFile << "BOW " << bowImage << "\r\n";
	newFile << "HEAD " << headImg << "\r\n";
	newFile << "BODY " << bodyImg << "\r\n";
	newFile << "SWORD " << swordImg << "\r\n";
	newFile << "SHIELD " << shieldImg << "\r\n";
	newFile << "COLORS " << CString(colors[0]) << "," << CString(colors[1]) << "," << CString(colors[2]) << "," << CString(colors[3]) << "," << CString(colors[4]) << "\r\n";
	newFile << "SPRITE " << CString(sprite) << "\r\n";
	newFile << "STATUS " << CString(status) << "\r\n";
	newFile << "MP " << CString(mp) << "\r\n";
	newFile << "AP " << CString(ap) << "\r\n";
	newFile << "APCOUNTER " << CString(apCounter) << "\r\n";
	newFile << "ONSECS " << CString(onlineTime) << "\r\n";
	newFile << "IP " << CString(accountIp) << "\r\n";
	newFile << "LANGUAGE " << language << "\r\n";
	newFile << "KILLS " << CString(kills) << "\r\n";
	newFile << "DEATHS " << CString(deaths) << "\r\n";
	newFile << "RATING " << CString(rating) << "\r\n";
	newFile << "DEVIATION " << CString(deviation) << "\r\n";
	newFile << "LASTSPARTIME " << CString((unsigned long)lastSparTime) << "\r\n";

	// Attributes
	for (unsigned int i = 0; i < 30; i++)
	{
		if (attrList[i].length() > 0)
			newFile << "ATTR" << CString(i+1) << " " << attrList[i] << "\r\n";
	}

	// Chests
	for (unsigned int i = 0; i < chestList.size(); i++)
		newFile << "CHEST " << chestList[i] << "\r\n";

	// Weapons
	for (unsigned int i = 0; i < weaponList.size(); i++)
		newFile << "WEAPON " << weaponList[i] << "\r\n";

	// Flags
	for (std::map<CString, CString>::const_iterator i = flagList.begin(); i != flagList.end(); ++i)
	{
		newFile << "FLAG " << i->first;
		if (!i->second.isEmpty()) newFile << "=" << i->second;
		newFile << "\r\n";
	}

	// Account Settings
	newFile << "\r\n";
	newFile << "BANNED " << CString((int)(isBanned == true ? 1 : 0)) << "\r\n";
	newFile << "BANREASON " << banReason << "\r\n";
	newFile << "BANLENGTH " << banLength << "\r\n";
	newFile << "COMMENTS " << accountComments << "\r\n";
	newFile << "EMAIL " << email << "\r\n";
	newFile << "LOCALRIGHTS " << CString(adminRights) << "\r\n";
	newFile << "IPRANGE " << adminIp << "\r\n";
	newFile << "LOADONLY " << CString((int)(isLoadOnly == true ? 1 : 0)) << "\r\n";

	// Folder Rights
	for (unsigned int i = 0; i < folderList.size(); i++)
		newFile << "FOLDERRIGHT " << folderList[i] << "\r\n";
	newFile << "LASTFOLDER " << lastFolder << "\r\n";

	// See if a plugin saves the account.
	if (server->getPluginManager().SaveAccount(accountName.text(), newFile.text()))
		return true;

	// Get the file name for the account.
	CString accountFileName = server->getAccountsFileSystem()->fileExistsAs(CString() << accountName << ".txt");
	if (accountFileName.isEmpty()) accountFileName = CString() << accountName << ".txt";

	// Save the account now.
	CString accpath = CString() << server->getServerPath() << "accounts/" << accountFileName;
	CFileSystem::fixPathSeparators(&accpath);
	if (!newFile.save(accpath))
		server->getRCLog().out("** Error saving account: %s\n", accountName.text());

	return true;
}