Raised This Month: $51 Target: $400
 12% 

Convert STEAMID to Steam Community ID


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
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 #19

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
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 14:53.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode