Quote:
Originally Posted by nomy
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;
}
__________________