View Single Post
YamiKaitou
Has a lovely bunch of coconuts
Join Date: Apr 2006
Location: Texas
Old 11-15-2014 , 10:10   Re: Convert STEAMID to Steam Community ID
Reply With Quote #341

Quote:
Originally Posted by nomy View Post
Hey guys, anyone has a block that converts Community ID (Steam64) to Steam ID? I need it for sourcemod scripting.
I have one for AMXModX, you should be able to easily convert it to Sourcemod. I can't remember if it works 100% since it I haven't published my plugin update yet.

Code:
new const szBase[] = "76561197960265728";

stock getSteam2(const szSteam64[], szSteam2[], iLen)
{
	new iBorrow = 0;
	new szSteam[18];
	new szAccount[18];
	new iY = 0;
	new iZ = 0;
	new iTemp = 0;
	
	arrayset(szAccount, '0', charsmax(szAccount));
	copy(szSteam, charsmax(szSteam), szSteam64);
	
	
	if (intval(szSteam[16]) % 2 == 1)
	{
		iY = 1;
		szSteam[16] = strval(intval(szSteam[16]) - 1);
	}
	
	for (new k = 16; k >= 0; k--)
	{
		if (iBorrow > 0)
		{
			iTemp = intval(szSteam[k]) - 1;
			
			if (iTemp >= intval(szBase[k]))
			{
				iBorrow = 0;
				szAccount[k] = strval(iTemp - intval(szBase[k]));
			}
			else
			{
				iBorrow = 1;
				szAccount[k] = strval((iTemp + 10) - intval(szBase[k]));
			}
		}
		else
		{
			if (intval(szSteam[k]) >= intval(szBase[k]))
			{
				iBorrow = 0;
				szAccount[k] = strval(intval(szSteam[k]) - intval(szBase[k]));
			}
			else
			{
				iBorrow = 1;
				szAccount[k] = strval((intval(szSteam[k]) + 10) - intval(szBase[k]));
			}
		}
	}
	
	iZ = str_to_num(szAccount);
	iZ /= 2;
	
	formatex(szSteam2, iLen, "STEAM_0:%d:%d", iY, iZ);
}

stock getSteam64(const szSteam2[], szSteam64[18])
{
	new iCarry = 0;
	new szAccount[18];
	new iTemp = 0;
	
	copy(szSteam64, charsmax(szSteam64), szBase);
	formatex(szAccount, charsmax(szAccount), "%s", szSteam2[10]);
	formatex(szAccount, charsmax(szAccount), "%017d", str_to_num(szAccount));
	
	szSteam64[16] = strval(intval(szSteam64[16]) + intval(szSteam2[8]));
	
	for (new j = 0; j < 2; j++)
	{
		for (new k = 16; k >= 0; k--)
		{
			if (iCarry > 0)
			{
				iTemp = intval(szSteam64[k-iCarry+1]) + 1;
				
				if (iTemp > 9)
				{
					iTemp -= 10;
					szSteam64[k-iCarry+1] = strval(iTemp);
					iCarry += 1;
				}
				else
				{
					szSteam64[k-iCarry+1] = strval(iTemp);
					iCarry = 0;
				}
				
				k++;
			}
			else
			{
				iTemp = intval(szSteam64[k]) + intval(szAccount[k]);
				
				if (iTemp > 9)
				{
					iCarry = 1;
					iTemp -= 10;
				}
				
				szSteam64[k] = strval(iTemp);
			}
		}
	}
}

strval(const iNum)
{
	switch (iNum)
	{
		case 0:		return '0';
		case 1:		return '1';
		case 2:		return '2';
		case 3:		return '3';
		case 4:		return '4';
		case 5:		return '5';
		case 6:		return '6';
		case 7:		return '7';
		case 8:		return '8';
		case 9:		return '9';
	}
	
	return '0';
}

intval(cNum)
{
	switch (cNum)
	{
		case '0':		return 0;
		case '1':		return 1;
		case '2':		return 2;
		case '3':		return 3;
		case '4':		return 4;
		case '5':		return 5;
		case '6':		return 6;
		case '7':		return 7;
		case '8':		return 8;
		case '9':		return 9;
	}
	
	return 0;
}
__________________
ProjectYami Laboratories

I do not browse the forums regularly anymore. If you need me for anything (asking questions or anything else), then PM me (be descriptive in your PM, message containing only a link to a thread will be ignored).
YamiKaitou is offline