Пишу бота. В запросах есть сигнатура, - она вычисляется как мд5 от какой-то строки, которая получается из определённо расставленных параметров. Покопавшись в декомпилированном флеше нашёл нужную функцию, которая собственно и расставляет параметры.
PHP код:
private function concat(arg1:*):String
{
var loc1:*;
loc1 = 0;
var loc4:*;
loc4 = null;
var loc5:*;
loc5 = null;
var loc6:*;
loc6 = null;
var loc7:*;
loc7 = undefined;
var loc8:*;
loc8 = false;
var loc2:*;
loc2 = "";
var loc3:*;
if ((loc3 = arg1 as Array) == null)
{
if (String(arg1) != "[object Object]")
{
loc2 = loc2 + arg1;
}
else
{
loc5 = [];
loc8 = true;
var loc9:*;
loc9 = 0;
var loc10:*;
loc10 = arg1;
for (loc6 in loc10)
{
loc7 = arg1[loc6];
if ((loc4 = this.concat(loc7)).length > 0)
{
if (isNaN(Number(loc6)))
{
loc8 = false;
}
loc5.push({"param":loc6, "value":loc4});
continue;
}
loc5.push({"param":loc6, "value":""});
}
if (loc8)
{
loc5.sortOn("param", Array.DESCENDING | Array.NUMERIC);
}
else
{
loc5.sortOn("param", Array.DESCENDING);
}
loc1 = (loc5.length - 1);
while (loc1 >= 0)
{
loc2 = loc2 + loc5[loc1].param + loc5[loc1].value;
loc1 = (loc1 - 1);
}
}
}
else
{
loc1 = 0;
while (loc1 < loc3.length)
{
loc2 = loc2 + loc1.toString() + this.concat(loc3[loc1]);
++loc1;
}
}
return loc2;
}
к ней идет обращение из другой функции, которая передает параметры
PHP код:
var req:Object;
req = null;
...
req = {};
req.controller = "friend"; //---обьявлен как string
req.action = "openChest"; //---обьявлен как string
req.params = {"userId":-1, "screenId":0} //---обьявлен как object
req.time = 1384842545; //---обьявлен как int
var loc2:*;
loc2 = this.concat(req);
Обьясните что будет на выходе функции concat, если можно, то хотелось бы увидеть аналогию функции на delphi.