John Davidson

arrays - Decode a CS:GO match sharing code with PHP

0 comments
Message:


I am trying to build a function which decodes a CS:GO match sharing code. I have seen enough examples but everyhting is in JS or C# but nothing in PHP.


I took the akiver demo manager as an example and i tried to replicate it in PHP. I am going bit blind because i have no idea what is the output on a certain points so i can only hope that the result will be what i expect it to be. I think i am on the right path, the problem comes when the bytes have to be created/interpeted/converted to the desire outcome.


The code that should be decoded is the following: 'CSGO-oPRbA-uTQuR-UFkiC-hYWMB-syBcO' ($getNextGame variable)


The result should be 3418217537907720662


My code so far:


 /**
* @param $getNextGame
* @return array
*/
public function decodeDemoCode(string $getNextGame): array
{
$shareCodePattern = "/CSGO(-?[\w]{5}){5}$/";
if (preg_match($shareCodePattern, $getNextGame) === 1) {
$result = [];
$bigNumber = 0;
$matchIdBytes = $outcomeIdBytes = $tvPortIdBytes = [];
$dictionary = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefhijkmnopqrstuvwxyz23456789";
$dictionaryLength = strlen($dictionary);

$changedNextGame = str_replace(array("CSGO", "-"), "", $getNextGame);
$chars = array_reverse(str_split($changedNextGame));
foreach ($chars as $char) {
$bigNumber = ($bigNumber * $dictionaryLength) + strpos($dictionary, $char);
}
}
}

This brings me back something like that:


1.86423701402E+43 (double)

Then i have the following:


$packed = unpack("C*", $bigNumber);
$reversedPacked = array_reverse($packed);

and this brings the following back:


array(17 items)
0 => 51 (integer)
1 => 52 (integer)
2 => 43 (integer)
3 => 69 (integer)
4 => 50 (integer)
5 => 48 (integer)
6 => 52 (integer)
7 => 49 (integer)
8 => 48 (integer)
9 => 55 (integer)
10 => 51 (integer)
11 => 50 (integer)
12 => 52 (integer)
13 => 54 (integer)
14 => 56 (integer)
15 => 46 (integer)
16 => 49 (integer)

Now here i am not really sure what to do because i do not completely understand C# and i have never worked with bytes in PHP before.


Generally the return type should be an array and would look something like that:


$result = [
matchId => 3418217537907720662,
reservationId => 3418217537907720662,
tvPort => 55788
];

Thanks in advance. Any help is deeply appreciated



My Answer:
. I am not sure how to convert it to PHP. Can someone help me with this?

Here is an example of a CS:GO match sharing code: "CSGO-abcdef-ghijk-lmnop-qrstu-vwxyz"

I need to decode this code and extract the match details such as map, score, players, etc.

Any help would be greatly appreciated. Thank you!

Rate this post

3 of 5 based on 3281 votes

Comments




© 2024 Hayatsk.info - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us