@@ -9,59 +9,91 @@
|
||||
*/
|
||||
|
||||
|
||||
function DoRest(r, t, e) {
|
||||
var u = r.Arr[0], o = Math.floor(e / global.REST_BLOCK_SCALE);
|
||||
if (o !== Math.floor((u.BlockNum - 1) / global.REST_BLOCK_SCALE)) {
|
||||
for (var n = GetRestArr(o), l = [], a = n.length - 2; 0 <= a; a--)
|
||||
l.push(n[a] * global.REST_BLOCK_SCALE);
|
||||
RestPush(r, l, e, 1);
|
||||
function DoRest(RestData, Data, BlockNum) {
|
||||
var Prev = RestData.Arr[0];
|
||||
var BlockNum0 = Math.floor(BlockNum / global.REST_BLOCK_SCALE);
|
||||
if (BlockNum0 !== Math.floor((Prev.BlockNum - 1) / global.REST_BLOCK_SCALE)) {
|
||||
var arr = GetRestArr(BlockNum0);
|
||||
var arr2 = [];
|
||||
for (var i = arr.length - 2; i >= 0; i--) {
|
||||
arr2.push(arr[i] * global.REST_BLOCK_SCALE);
|
||||
}
|
||||
RestPush(RestData, arr2, BlockNum, 1);
|
||||
}
|
||||
r.Arr[0] = { BlockNum: e, Value: t.Value };
|
||||
RestData.Arr[0] = { BlockNum: BlockNum, Value: Data.Value };
|
||||
};
|
||||
|
||||
function RestPush(r, t, e, u) {
|
||||
var o = r.Arr[u - 1], n = r.Arr[u];
|
||||
if (1 < u) {
|
||||
var l = t[u - 2];
|
||||
if (o.BlockNum > l)
|
||||
function RestPush(RestData, ArrRest, BlockNum, Index) {
|
||||
var Prev = RestData.Arr[Index - 1];
|
||||
var Cur = RestData.Arr[Index];
|
||||
if (Index > 1) {
|
||||
var RestNum = ArrRest[Index - 2];
|
||||
if (Prev.BlockNum > RestNum)
|
||||
return;
|
||||
}
|
||||
if (n.BlockNum && n.BlockNum >= e || o.BlockNum >= e)
|
||||
return n.BlockNum = 0, void (n.Value = {});
|
||||
n.BlockNum && u < r.Arr.length - 1 && RestPush(r, t, e, u + 1), r.Arr[u] = o;
|
||||
if ((Cur.BlockNum && Cur.BlockNum >= BlockNum) || Prev.BlockNum >= BlockNum) {
|
||||
Cur.BlockNum = 0;
|
||||
Cur.Value = {};
|
||||
return;
|
||||
}
|
||||
if (Cur.BlockNum) {
|
||||
if (Index < RestData.Arr.length - 1) {
|
||||
RestPush(RestData, ArrRest, BlockNum, Index + 1);
|
||||
}
|
||||
}
|
||||
RestData.Arr[Index] = Prev;
|
||||
};
|
||||
|
||||
function GetRestArr(r) {
|
||||
for (var t = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], e = t.length, u = 0; u <= r; u++)
|
||||
for (var o = 0, n = u, l = e - 1; 0 <= l; l--) {
|
||||
var a = t[l];
|
||||
if (t[l] = n, n = a, 0 == ((o = o << 4 | 15) & u))
|
||||
function GetRestArr(CurBlockNum) {
|
||||
var Arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
var ArrLength = Arr.length;
|
||||
var StartNum = 0;
|
||||
for (var num = StartNum; num <= CurBlockNum; num++) {
|
||||
var maska = 0;
|
||||
var CurNum = num;
|
||||
for (var i = ArrLength - 1; i >= 0; i--) {
|
||||
var PosNum = Arr[i];
|
||||
Arr[i] = CurNum;
|
||||
CurNum = PosNum;
|
||||
maska = (maska << 4) | 15;
|
||||
if ((maska & num) === 0)
|
||||
break;
|
||||
if (0 != (o & n))
|
||||
if ((maska & CurNum) !== 0)
|
||||
break;
|
||||
}
|
||||
return t;
|
||||
}
|
||||
return Arr;
|
||||
};
|
||||
var RestArrMap = {};
|
||||
|
||||
function GetCurrentRestArr() {
|
||||
var r = global.GetCurrentBlockNumByTime(), t = Math.floor(r / global.REST_BLOCK_SCALE), e = RestArrMap[t];
|
||||
if (void 0 === e) {
|
||||
RestArrMap = {}, (e = GetRestArr(t)).length = e.length - 1;
|
||||
for (var u = 0; u < e.length; u++)
|
||||
e[u] = e[u] * global.REST_BLOCK_SCALE;
|
||||
RestArrMap[t] = e;
|
||||
var BlockNum = global.GetCurrentBlockNumByTime();
|
||||
var BlockNum0 = Math.floor(BlockNum / global.REST_BLOCK_SCALE);
|
||||
var arr = RestArrMap[BlockNum0];
|
||||
if (arr === undefined) {
|
||||
RestArrMap = {};
|
||||
arr = GetRestArr(BlockNum0);
|
||||
arr.length = arr.length - 1;
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
arr[i] = arr[i] * global.REST_BLOCK_SCALE;
|
||||
}
|
||||
RestArrMap[BlockNum0] = arr;
|
||||
}
|
||||
return e;
|
||||
return arr;
|
||||
};
|
||||
|
||||
function GetCurrentRestNum(r) {
|
||||
for (var t = global.GetCurrentBlockNumByTime() - r, e = GetCurrentRestArr(), u = e.length - 1; 0 <= u; u--)
|
||||
if (e[u] <= t)
|
||||
return e[u];
|
||||
function GetCurrentRestNum(NumDelta) {
|
||||
var BlockNum = global.GetCurrentBlockNumByTime();
|
||||
var BlockNumMin = BlockNum - NumDelta;
|
||||
var arr = GetCurrentRestArr();
|
||||
for (var i = arr.length - 1; i >= 0; i--) {
|
||||
if (arr[i] <= BlockNumMin) {
|
||||
return arr[i];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
global.DoRest = DoRest
|
||||
global.GetRestArr = GetRestArr
|
||||
global.GetCurrentRestArr = GetCurrentRestArr
|
||||
global.DoRest = DoRest;
|
||||
global.GetRestArr = GetRestArr;
|
||||
global.GetCurrentRestArr = GetCurrentRestArr;
|
||||
global.GetCurrentRestNum = GetCurrentRestNum;
|
||||
|
||||
Reference in New Issue
Block a user