使用字节将字母数字代码解码为键值对象

2024-04-17

我有一个来自 CS:GO 游戏的“十字准线代码”:CSGO-O4Jsi-V36wY-rTMGK-9w7qF-jQ8WB

我可以使用此函数解码一些值:

import BigNumber from 'bignumber.js';

// Intentionally no 0 and 1 number in DICTIONARY
const DICTIONARY = 'ABCDEFGHJKLMNOPQRSTUVWXYZabcdefhijkmnopqrstuvwxyz23456789';
const DICTIONARY_LENGTH = DICTIONARY.length;
const SHARECODE_PATTERN = /CSGO(-?[\w]{5}){5}$/;

function bigNumberToByteArray(big) {
  const str = big.toString(16).padStart(36, '0');
  const bytes = [];
  for (let i = 0; i < str.length; i += 2) {
    bytes.push(parseInt(str.slice(i, i + 2), 16));
  }

  return bytes;
}


function bytesToInt32(bytes) {
  let number = 0;
  for (let i = 0; i < bytes.length; i++) {
    number += bytes[i];
    if (i < bytes.length - 1) {
      number = number << 8;
    }
  }

  return number;
}

const decode = shareCode => {
  if (!shareCode.match(SHARECODE_PATTERN)) {
    throw new Error('Invalid share code');
  }

  shareCode = shareCode.replace(/CSGO|-/g, '');
  const chars = Array.from(shareCode).reverse();
  let big = new BigNumber(0);

  for (let i = 0; i < chars.length; i++) {
    big = big.multipliedBy(DICTIONARY_LENGTH).plus(DICTIONARY.indexOf(chars[i]));
  }

  const bytes = bigNumberToByteArray(big);

  return {
    cl_crosshaircolor_r: bytesToInt32(bytes.slice(4, 5).reverse()),
    cl_crosshaircolor_g: bytesToInt32(bytes.slice(5, 6).reverse()),
    cl_crosshaircolor_b: bytesToInt32(bytes.slice(6, 7).reverse())
  };
};

console.log(decode('CSGO-O4Jsi-V36wY-rTMGK-9w7qF-jQ8WB'))
// { cl_crosshaircolor_r: 50, cl_crosshaircolor_g: 250, cl_crosshaircolor_b: 84

我不知道如何获取其余的值,因为它没有显示正确的数字。

我应该从中得到这些值:

{
    cl_crosshair_drawoutline: 0,
    cl_crosshair_dynamic_maxdist_splitratio: 0.3,
    cl_crosshair_dynamic_splitalpha_innermod: 0.6,
    cl_crosshair_dynamic_splitalpha_outermod: 0.8,
    cl_crosshair_dynamic_splitdist: 127,
    cl_crosshair_outlinethickness: 1.5,
    cl_crosshair_t: 1,
    cl_crosshairalpha: 200,
    cl_crosshaircolor: 5,
    cl_crosshaircolor_b: 84,
    cl_crosshaircolor_g: 250,
    cl_crosshaircolor_r: 50,
    cl_crosshairdot: 1,
    cl_crosshairgap: 1,
    cl_crosshairgap_useweaponvalue: 0,
    cl_crosshairsize: 33,
    cl_crosshairstyle: 2,
    cl_crosshairthickness: 4.1,
    cl_crosshairusealpha: 0,
    cl_fixedcrosshairgap: -10
}

其他示例:

CSGO-tEAHu-36Ro8-Oyms7-NVvnV-F6XDJ
{
    cl_crosshair_drawoutline: 0,
    cl_crosshair_dynamic_maxdist_splitratio: 0.1,
    cl_crosshair_dynamic_splitalpha_innermod: 0.8,
    cl_crosshair_dynamic_splitalpha_outermod: 0.6,
    cl_crosshair_dynamic_splitdist: 13,
    cl_crosshair_outlinethickness: 2,
    cl_crosshair_t: 0,
    cl_crosshairalpha: 250,
    cl_crosshaircolor: 5,
    cl_crosshaircolor_b: 90,
    cl_crosshaircolor_g: 255,
    cl_crosshaircolor_r: 55,
    cl_crosshairdot: 1,
    cl_crosshairgap: -2,
    cl_crosshairgap_useweaponvalue: 0,
    cl_crosshairsize: 10,
    cl_crosshairstyle: 2,
    cl_crosshairthickness: 4.5,
    cl_crosshairusealpha: 1,
    cl_fixedcrosshairgap: 12
}

CSGO-rGhtd-eWuUm-EWVO7-72rvk-zqAUM
{
    cl_crosshair_drawoutline: 1,
    cl_crosshair_dynamic_maxdist_splitratio: 0.9,
    cl_crosshair_dynamic_splitalpha_innermod: 0.5,
    cl_crosshair_dynamic_splitalpha_outermod: 0.6,
    cl_crosshair_dynamic_splitdist: 12,
    cl_crosshair_outlinethickness: 0.5,
    cl_crosshair_t: 0,
    cl_crosshairalpha: 189,
    cl_crosshaircolor: 2,
    cl_crosshaircolor_b: 123,
    cl_crosshaircolor_g: 229,
    cl_crosshaircolor_r: 67,
    cl_crosshairdot: 1,
    cl_crosshairgap: 3,
    cl_crosshairgap_useweaponvalue: 0,
    cl_crosshairsize: 7,
    cl_crosshairstyle: 4,
    cl_crosshairthickness: 1.2,
    cl_crosshairusealpha: 0,
    cl_fixedcrosshairgap: -5
}

CSGO-wQ3FD-JiRVa-kKcFt-6XfbF-uMD7K
{
    cl_crosshair_drawoutline: 1,
    cl_crosshair_dynamic_maxdist_splitratio: 0.9,
    cl_crosshair_dynamic_splitalpha_innermod: 0.5,
    cl_crosshair_dynamic_splitalpha_outermod: 0.6,
    cl_crosshair_dynamic_splitdist: 12,
    cl_crosshair_outlinethickness: 1.5,
    cl_crosshair_t: 1,
    cl_crosshairalpha: 158,
    cl_crosshaircolor: 5,
    cl_crosshaircolor_b: 198,
    cl_crosshaircolor_g: 182,
    cl_crosshaircolor_r: 91,
    cl_crosshairdot: 1,
    cl_crosshairgap: 1.4,
    cl_crosshairgap_useweaponvalue: 1,
    cl_crosshairsize: 6.4,
    cl_crosshairstyle: 4,
    cl_crosshairthickness: 1.8,
    cl_crosshairusealpha: 1,
    cl_fixedcrosshairgap: -5
}

性能范围:

{
    // acts like boolean
    cl_crosshair_drawoutline: {
        min: 0,
        max: 1
    },
    cl_crosshair_dynamic_maxdist_splitratio: {
        min: 0,
        step: 0.1, // e.g: 0, 0.1, 0.2, 0.3 etc.
        max: 1
    },
    cl_crosshair_dynamic_splitalpha_innermod: {
        min: 0,
        step: 0.1, // e.g: 0, 0.1, 0.2, 0.3 etc.
        max: 1
    },
    cl_crosshair_dynamic_splitalpha_outermod: {
        min: 0.3,
        step: 0.1, // 0.3, 0.4, 0.5 etc.
        max: 1
    },
    cl_crosshair_dynamic_splitdist: {
        min: 0,
        step: 1, // e.g: 0, 1, 2, 3, ..., 127
        max: 127
    },
    cl_crosshair_outlinethickness: {
        min: 0,
        step: 0.5, // e.g: 0, 0.5, 1, ..., 3
        max: 3
    },
    // acts like boolean
    cl_crosshair_t: {
        min: 0,
        max: 1
    },
    cl_crosshairalpha: {
        min: 0,
        step: 1, // e.g: 1, 2, 3, ..., 255
        max: 255
    },
    cl_crosshaircolor: {
        min: 0,
        step: 1, // e.g: 1, 2, 3, ..., 7
        max: 7
    },
    cl_crosshaircolor_b: {
        min: 0,
        step: 1, // e.g: 1, 2, 3, ..., 255
        max: 255
    },
    cl_crosshaircolor_g: {
        min: 0,
        step: 1, // e.g: 1, 2, 3, ..., 255
        max: 255
    },
    cl_crosshaircolor_r: {
        min: 0,
        step: 1, // e.g: 1, 2, 3, ..., 255
        max: 255
    },
    // acts like boolean
    cl_crosshairdot: {
        min: 0,
        max: 1
    },
    cl_crosshairgap: {
        min: -12.8,
        step: 0.1, // e.g: 10, 10.1 etc.
        max: 12.7
    },
    // acts like boolean
    cl_crosshairgap_useweaponvalue: {
        min: 0,
        max: 1
    },
    cl_crosshairsize: {
        min: 0,
        step: 0.1, // e.g: 0, 0.1, 0.2, 14.4 etc.
        max: 819.100037 // can't say why such an unusual output
    },
    cl_crosshairstyle: {
        min: 0,
        step: 1, // e.g: 1, 2, 3, ..., 7
        max: 7
    }
    cl_crosshairthickness: {
        min: 0,
        step: 0.1, // e.g: 0, 0.1, 0.2, ..., 6.3
        max: 6.3
    }
    // acts like boolean
    cl_crosshairusealpha: {
        min: 0,
        max: 1
    },
    cl_fixedcrosshairgap: {
        min: -12.8,
        step: 0.1, // e.g: 10, 10.1 etc.
        max: 12.7
    }
}

值一次改变一个:

Default: CSGO-6G2cS-WzcxT-fH3dp-Rf7oq-X9oJN
{
    cl_crosshair_drawoutline: 1,
    cl_crosshair_dynamic_maxdist_splitratio: 0.3,
    cl_crosshair_dynamic_splitalpha_innermod: 1,
    cl_crosshair_dynamic_splitalpha_outermod: 0.5,
    cl_crosshair_dynamic_splitdist: 7,
    cl_crosshair_outlinethickness: 1,
    cl_crosshair_t: 0,
    cl_crosshairalpha: 200,
    cl_crosshaircolor: 1,
    cl_crosshaircolor_b: 50,
    cl_crosshaircolor_g: 250,
    cl_crosshaircolor_r: 50,
    cl_crosshairdot: 1,
    cl_crosshairgap: 1,
    cl_crosshairgap_useweaponvalue: 0,
    cl_crosshairsize: 5,
    cl_crosshairstyle: 2,
    cl_crosshairthickness: 0.5,
    cl_crosshairusealpha: 1,
    cl_fixedcrosshairgap: 3
}

The only value changed is described beside, rest stays the same as default 
above.

cl_crosshair_drawoutline
1   = CSGO-6G2cS-WzcxT-fH3dp-Rf7oq-X9oJN
0   = CSGO-of9RX-KD5Fp-4kb7Q-EoVSz-cb7nM

cl_crosshair_dynamic_maxdist_splitratio
0   = CSGO-Vtkiw-zkx82-6AYMS-9OXdk-6yXHK
0.5 = CSGO-Trqu8-WUQCn-5MfrP-KDUGF-CFeKP
1   = CSGO-QMSEL-6KJoK-vvajh-WpPKZ-Bh2ED

cl_crosshair_dynamic_splitalpha_innermod
0   = CSGO-Tabp9-L98iF-Btmcu-64Das-MdaEC
0.5 = CSGO-HRKjJ-R5sqr-Q6t9r-GsADN-SthGH
1   = CSGO-6G2cS-WzcxT-fH3dp-Rf7oq-X9oJN

cl_crosshair_dynamic_splitalpha_outermod
0.3 = CSGO-RBqva-DumOx-WPvGy-cDxic-5zcBN
0.7 = CSGO-jNCMK-q6UXz-pA93e-FAGu4-2GzQN
1   = CSGO-DWSPa-oEJum-4Tn8R-SrTXs-jxkbN

cl_crosshair_dynamic_splitdist
0   = CSGO-Dxzuf-AUuea-G7enM-c3Zza-sBhrM
50  = CSGO-LcTca-Laf43-7pmXZ-jnJGu-oS9zP
127 = CSGO-xa4d4-MN8pW-aETR7-jhzeQ-6DjjD

cl_crosshair_outlinethickness
0   = CSGO-aQUWL-7ysnT-Ve8rS-PHXDY-5zcBN
1.5 = CSGO-LhmCW-jzV4T-m6T4z-SOtbU-nhPNN
3   = CSGO-5x4rh-N29JU-3VqEY-WUF3Q-VPBYN

cl_crosshair_t
0   = CSGO-6G2cS-WzcxT-fH3dp-Rf7oq-X9oJN
1   = CSGO-iyOcd-YLrjN-8xQqU-xZa3G-zjRFE

cl_crosshairalpha
0   = CSGO-sQOF4-9RKDe-sLeFU-wqGMn-uonpQ
200 = CSGO-6G2cS-WzcxT-fH3dp-Rf7oq-X9oJN
255 = CSGO-BqGwL-hirNt-AX6Dy-YbCoB-fFDmQ

cl_crosshaircolor
0 = CSGO-4KA8L-stYs2-aqTxt-3R3GF-KZEFN
4 = CSGO-C8ZDo-TJrEr-uafja-dOLSe-GqZUN
7 = CSGO-JxAn9-Qa5UE-AvLpN-r6X6T-yWMfN

cl_crosshaircolor_b
0   = CSGO-8fuTL-n9Uqy-iF6pY-6tOYX-brNAK
200 = CSGO-xWpEr-keTtj-QmeUw-XpE3a-FCPcF
255 = CSGO-W58Ja-mo8Q6-e7Phv-3mK2v-NJn6J

cl_crosshaircolor_g
0   = CSGO-BvDs8-JUwK4-54sLY-c745T-yWMfN
200 = CSGO-h7whC-Uiy99-WKxr3-HLJYX-brNAK
255 = CSGO-Wnbcy-QvJ47-65Eqz-MQUXs-jxkbN

cl_crosshaircolor_r
0   = CSGO-uznHJ-WZpew-rQpJS-p2F8W-brNAK
200 = CSGO-aaBpx-XNVPr-zES6H-MTdMc-FCPcF
255 = CSGO-nOKuX-kEo8c-hBOZh-WaOpx-NJn6J

cl_crosshairdot
0 = CSGO-c8tdf-txA5L-UFDY3-zuu69-i6OJM
1 = CSGO-6G2cS-WzcxT-fH3dp-Rf7oq-X9oJN

cl_crosshairgap
-12.8 = CSGO-N5fyF-u3u8M-4jU9j-O9vLu-aSYbD
0     = CSGO-qis8G-DpZxE-Z9QeN-upthN-OSveM
12.7  = CSGO-XuT3W-BvVvv-cvEFo-cM8iA-CtxXD

cl_crosshairgap_useweaponvalue
0 = CSGO-6G2cS-WzcxT-fH3dp-Rf7oq-X9oJN
1 = CSGO-zYEbz-m4Zmk-5MfrP-KDUGF-CFeKP

cl_crosshairsize
0 = CSGO-hzFpv-XtPmX-wHSxa-LvOYX-brNAK
100 = CSGO-Cn2cE-Mau97-N4rOC-typ7o-ayzpH
819 = CSGO-GC68x-Jh9L4-73R6P-zjXN8-WGSyL
819.100037 = CSGO-MjLui-qkX6J-CUzmL-Pybui-mp33L

cl_crosshairstyle
0 = CSGO-TjyO2-rj2yR-OWps8-pjocQ-asS4M
4 = CSGO-ho3st-BGGwV-y3ERW-4bPzG-VPBYN
7 = CSGO-875F5-AdfP5-QfXa5-S3qGu-vnhvN

cl_crosshairthickness
0   = CSGO-r6TO2-WsYFC-K6GCD-RVj6o-MKsyM
3.1 = CSGO-ToYxk-5EQKD-ciNhr-tn3ya-kq8vO
6.3 = CSGO-LAYaa-DEf8T-2n2tR-mKQRz-OwxwQ

cl_crosshairusealpha
0 = CSGO-GfZhN-2sjMv-t8iFe-hcMv4-Gw8GJ
1 = CSGO-6G2cS-WzcxT-fH3dp-Rf7oq-X9oJN

cl_fixedcrosshairgap
-12.80 = CSGO-OPDHV-Ab3cf-pmoFG-8ecMS-eNqRP
0      = CSGO-NJ6Z7-bRb8Y-qSBRv-cZ8Ys-7xSOG
12.70  = CSGO-SSCsS-u4nYT-rKGYL-iRYoq-QoFOP

干得好。添加这个parseBytes功能、修改decode如图所示,并保持其余代码不变。

function parseBytes(bytes) {
  return {
    cl_crosshairgap: Int8Array.of(bytes[2])[0] / 10.0,

    cl_crosshair_outlinethickness: (bytes[3] & 7) / 2.0,

    cl_crosshaircolor_r: bytes[4],
    cl_crosshaircolor_g: bytes[5],
    cl_crosshaircolor_b: bytes[6],
    cl_crosshairalpha: bytes[7],
    cl_crosshair_dynamic_splitdist: bytes[8],

    cl_fixedcrosshairgap: Int8Array.of(bytes[9])[0] / 10.0,

    cl_crosshaircolor: bytes[10] & 7,
    cl_crosshair_drawoutline: bytes[10] & 8 ? 1 : 0,
    cl_crosshair_dynamic_splitalpha_innermod: ((bytes[10] & 0xF0) >> 4) / 10.0,

    cl_crosshair_dynamic_splitalpha_outermod: (bytes[11] & 0xF) / 10.0,
    cl_crosshair_dynamic_maxdist_splitratio: ((bytes[11] & 0xF0) >> 4) / 10.0,

    cl_crosshairthickness: (bytes[12] & 0x3F) / 10.0,

    cl_crosshairstyle: (bytes[13] & 0xE) >> 1,
    cl_crosshairdot: bytes[13] & 0x10 ? 1 : 0,
    cl_crosshairgap_useweaponvalue: bytes[13] & 0x20 ? 1 : 0,
    cl_crosshairusealpha: bytes[13] & 0x40 ? 1 : 0,
    cl_crosshair_t: bytes[13] & 0x80 ? 1 : 0,

    cl_crosshairsize: (((bytes[15] & 0x1f) << 8) + bytes[14]) / 10.0
  };
}

const decode = shareCode => {
  if (!shareCode.match(SHARECODE_PATTERN)) {
    throw new Error('Invalid share code');
  }

  shareCode = shareCode.replace(/CSGO|-/g, '');
  const chars = Array.from(shareCode).reverse();
  let big = new BigNumber(0);

  for (let i = 0; i < chars.length; i++) {
    big = big.multipliedBy(DICTIONARY_LENGTH).plus(DICTIONARY.indexOf(chars[i]));
  }
  
  return parseBytes(bigNumberToByteArray(big));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用字节将字母数字代码解码为键值对象 的相关文章

  • 如何阻止 HTML 输入字段中的特殊字符? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是想问一下如何在html输入字段中阻止 等特殊字符 为什么不使用html5呢
  • 在 ES6 Node.js 中导入“.json”扩展名会引发错误

    我们正在尝试使用 Node js 导出和导入 ES6 模块的新方法 对于我们来说 从package json文件 下面的代码应该做到这一点 import name version from package json 但是 执行时会抛出以下错
  • Node.js npm mssql 函数返回未定义

    我使用 mssql 和 node js 连接到 sql server 数据库 我试图通过将连接代码包装在具有一个查询参数的函数中来减少代码 当我从 router get 函数中的 with 调用该函数时 它返回未定义 任何帮助将非常感激 f
  • 如何使错误冒泡,以便可以在同一个 try/catch 块中捕获它们?

    我有一个带有抛出错误的函数的对象 myObj ini function this f f function throw new Error 但我只想捕获创建对象的异常 try var o new myObj catch err alert
  • 尝试在 Windows 上执行 package.json 中的脚本会引发 JScript 错误

    所以我正在尝试构建 javascriptair site 在 的里面package json有一个 npm 脚本指向 javascript 命令 package scripts 找到该存储库https github com kentcdod
  • 打开图层地图,经纬度获取地址

    我正在尝试获取带有经度和纬度的地址 城市 邮政编码 街道地址 但我不知道如何获取 我正在使用开放图层 当我单击地图的一部分时 会获取该位置的经度和纬度 有人有解决方案吗 div class map div
  • 如何在D3中导入json数据?

    如何在D3中导入json文件 I did d3 json temp json 但是我如何在进一步的代码中访问这个数据集呢 到目前为止我已经尝试过 var data d3 json temp json 但使用 data data 在其余代码中
  • 在 Angular 中将图像 url 转换为 base64

    我正在努力尝试将给定的图像 url 转换为 base64 在我的例子中 我有一个带有图像路径的字符串 var imgUrl assets logoEmpresas empresa logoUrl 我如何直接将给定的图像网址转换为base64
  • Chrome DevTools 脚本黑盒不起作用

    我正在尝试使用 chrome devtools 的新功能 黑盒脚本 这篇 Chrome Devtools 文章列出了脚本黑盒功能 https developer chrome com devtools docs blackboxing wh
  • TSConfig JSX:React JSX 与 React

    在将 Typescript 与 React 一起使用时 我们必须指定jsx in compilerOptions in tsconfig json file It has preserve react react native react
  • Javascript 闭包问题

    所以 我仍在阅读 Apress Pro Javascript 技术 但我在闭包方面遇到了麻烦 正如约翰 雷西格所说 闭包允许您引用父函数中存在的变量 然而 它在创建变量时并不提供变量的值 它提供父函数中变量的最后一个值 这是最常见的问题 您
  • RxJS 将三元组中的属性组合到表中

    我有一项服务生成类似于三元组的对象 它们将采用以下格式 country attribute value Example country usa attribute population value 100 country mexico at
  • JS 检查深层对象属性是否存在[重复]

    这个问题在这里已经有答案了 我正在尝试找到一种优雅的方法来检查对象中是否存在某些深层属性 因此 实际上试图避免对未定义的情况进行巨大的保护性检查 例如 if typeof error undefined typeof error respo
  • HTML5:从存储的二进制字符串播放视频

    我正在尝试使用 FileReader readAsBinaryString Blob File 将视频文件的内容作为二进制字符串读取 如示例中所示http www html5rocks com en tutorials file dndfi
  • JavaScript 排序列表

    Javascript 或 jQuery 中有排序列表吗 我有一个巨大的列表 随着时间的推移 插入操作很少 每次添加单个项目时 我无法为整个列表调用 object sort 我需要插入 o log n 不 没有 你拥有的只是Array sor
  • 删除鼠标悬停时的 Vue 自定义过滤器

    我想使用 VueJS 2 删除鼠标悬停时的截断过滤器 这是模板中的过滤器 div class eng word english truncate div 这是过滤器本身 filters truncate function value let
  • 尝试利用?

    我看到我的 nopCommerce 网站记录了以下搜索 ADw script AD4 alert 202 ADw script AD4 我有点好奇他们想要完成什么 我搜索了一下 似乎是ADw script AD4 以 UTF7 编码为
  • 脚本和链接标签的简写 http:// 为 // ?有人以前看过/用过这个吗?

    问题如下 如果您使用 addthis 共享按钮 查看任何网站 一旦您浮动在 addthis 按钮上 并且加载了所有必需的资源 请使用 firebug 或 chrome 检查器查看文档的正文 不是源代码 而是屏幕上的实际文档 对象检查器 你会
  • 反应本机中的“未知命名模块”错误

    我正在使用 React Native 创建一个应用程序 但某些导入会引发标题中的错误 Unknown named module 两个包都会发生这种情况 react native material design and react nativ
  • 推荐的增长缓冲区的方法?

    假设我正在 Node js 中构造一个可变长度的字符串或一系列字节 buf write 的文档说 https nodejs org api buffer html buffer buf write string offset length

随机推荐