Compare commits
12 Commits
feature-up
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 385e10d24f | |||
| 6885cbcc76 | |||
| 36e273a59e | |||
| 0bae925097 | |||
| 2af7527495 | |||
| 12bbf41693 | |||
| 2a0c3a126b | |||
|
|
44b6986562 | ||
| 3509bd20d4 | |||
| 9af3a339bd | |||
| 6a9d6122d2 | |||
| 4b549f8af9 |
96
README.md
96
README.md
@ -18,17 +18,25 @@
|
|||||||
|
|
||||||
实际上光遇NTAG徽章设计,感应区为徽章背面的小圆点部分,而这部分感应区太小且徽章的针扣也在这一面,手机nfc感应区位置问题导致徽章无法放平使用,也无法从背面扫描徽章,经常导致扫描无反应或者需要将徽章在手机nfc感应区移动很久才有反应。
|
实际上光遇NTAG徽章设计,感应区为徽章背面的小圆点部分,而这部分感应区太小且徽章的针扣也在这一面,手机nfc感应区位置问题导致徽章无法放平使用,也无法从背面扫描徽章,经常导致扫描无反应或者需要将徽章在手机nfc感应区移动很久才有反应。
|
||||||
|
|
||||||
## 当前功能
|
## 功能
|
||||||
|
|
||||||
- 录入多个徽章信息
|
- [x] 录入徽章
|
||||||
|
|
||||||
- 选择对应徽章使用
|
- [x] 使用徽章
|
||||||
|
|
||||||
- 新增渠道服选择
|
- [x] 渠道服选择
|
||||||
|
|
||||||
- 添加国际服支持
|
- [x] 国际服支持
|
||||||
|
|
||||||
- 新增渠道切换
|
- [x] 测试服支持
|
||||||
|
|
||||||
|
- [x] 修改使用次数
|
||||||
|
|
||||||
|
- [x] 徽章排序
|
||||||
|
|
||||||
|
- [ ] 导出徽章
|
||||||
|
|
||||||
|
- [ ] 导入徽章
|
||||||
|
|
||||||
## 使用方法
|
## 使用方法
|
||||||
|
|
||||||
@ -52,39 +60,79 @@
|
|||||||
|
|
||||||
> 为什么实体徽章会有几次无法使用?
|
> 为什么实体徽章会有几次无法使用?
|
||||||
|
|
||||||
光遇的NTAG徽章中使用了NFC COUNTER(nfc计数器),每次徽章在nfc下使用徽章使用次次数加会加1(无论你是否打开光遇)。当你打开光遇app时,徽章使用次数会上传到光遇服务器,下一次使用时候会校验使用次数,小于上一次的使用次数时候会抛出异常(徽章验证错误:CANNOT_UPDATE_NFC_COUNTER)。
|
光遇的NTAG徽章使用了NFC COUNTER(nfc计数器),每次在nfc下使用徽章会使得徽章使用次数加1(无论你是否打开光遇)。当你打开光遇app并使用徽章时,光遇服务器就会记录徽章使用次数,下次使用时会校验使用次数,小于上一次的使用次数时候会抛出异常(徽章验证错误:CANNOT_UPDATE_NFC_COUNTER)。
|
||||||
|
|
||||||
举个例子:如果你现在的徽章在光遇使用了10次,此时你将徽章信息录入本脚本,本脚本记录的使用次数也是10次。当你再次使用实体徽章时候此时徽章使用次数为11次。脚本中的使用次数依旧为10,打开光遇后就会报错徽章验证错误。当然如果你使用本脚本时次数为20次(使用次数可以手动修改NTAG中url的最后6位16进制数),而你实体徽章次数为15次,相差了5次,此时你需要使用实体徽章在nfc下刷5次后方可使用。
|
举个例子:如果你的徽章在光遇中使用了10次,此时你将徽章信息复制并录入,程序记录下的使用次数也是10次,当你再次使用实体徽章,此时原徽章使用次数变为11次,但程序中的使用次数依旧为10,此时打开光遇后就会报错(徽章验证错误)。当然如果你使用本程序时次数为20次(使用次数可以手动修改NTAG中url的最后6位16进制数),而你实体徽章次数为15次,相差了5次,此时你需要使用实体徽章在nfc下刷5次后方可使用,因此切勿随意更改徽章使用次数,否则可能导致原徽章无法正常使用。
|
||||||
|
|
||||||
> 执行脚本打开光遇报错 徽章验证错误:CANNOT_UPDATE_NFC_COUNTER
|
> 打开光遇报错 徽章验证错误:CANNOT_UPDATE_NFC_COUNTER
|
||||||
|
|
||||||
重新录入最新的徽章信息
|
重新录入最新的徽章信息
|
||||||
|
|
||||||
> 使用脚本后使用实体徽章报错 徽章验证错误:CANNOT_UPDATE_NFC_COUNTER
|
> 使用本程序后,使用实体徽章报错 徽章验证错误:CANNOT_UPDATE_NFC_COUNTER
|
||||||
|
|
||||||
多在NFC下刷几次徽章(无需打开光遇app,手机有反应即可)更新徽章使用次数。
|
多在NFC下刷几次徽章(无需打开光遇app,手机有反应即可)更新徽章使用次数。切勿随意更改徽章使用次数,否则可能导致原徽章无法正常使用,轻则需要刷原徽章几十次、几百次、甚至上千次,重则要刷上万次、上百万次才能使徽章恢复正常,这取决于你修改的徽章使用次数的大小。注意原徽章的数据是无法更改的。
|
||||||
|
|
||||||
|
|
||||||
## 渠道服务包名
|
## 渠道服务包名
|
||||||
|
|
||||||
<s>如果你正在使用渠道服,请修改脚本第15行的com.netease.sky为下表中渠道对应的包名,</s>目前无需修改,各渠道包名见下表。
|
<s>如果你正在使用渠道服,请修改脚本第15行的com.netease.sky为下表中渠道对应的包名,</s>目前无需修改,各渠道包名见下表。
|
||||||
|
|
||||||
| 包名 | 渠道名称 |
|
| 包名 | 渠道名称 |
|
||||||
| ------------------------ | -------- |
|
| ------------------------ |-------------|
|
||||||
| com.netease.sky | 网易 |
|
| com.netease.sky | 网易 |
|
||||||
| com.netease.sky.bilibili | 哔哩哔哩 |
|
| com.netease.sky.bilibili | 哔哩哔哩 |
|
||||||
| com.netease.sky.aligames | 九游 |
|
| com.netease.sky.aligames | 九游 |
|
||||||
| com.netease.sky.nearme.gamecenter | Realme/OPPO |
|
| com.netease.sky.nearme.gamecenter | Realme/OPPO |
|
||||||
| com.netease.sky.m4399 | 4399 |
|
| com.netease.sky.m4399 | 4399 |
|
||||||
| com.netease.sky.mi | 小米 |
|
| com.netease.sky.mi | 小米 |
|
||||||
| com.netease.sky.vivo | VIVO |
|
| com.netease.sky.vivo | VIVO |
|
||||||
| com.tencent.tmgp.eyou.eygy | 应用宝 |
|
| com.tencent.tmgp.eyou.eygy | 应用宝 |
|
||||||
| com.netease.sky.huawei | 华为 |
|
| com.netease.sky.huawei | 华为 |
|
||||||
| com.tgc.sky.android | 国际服 |
|
| com.tgc.sky.android | 国际服 |
|
||||||
| com.tgc.sky.android.test.gold | 测试服 |
|
| com.tgc.sky.android.test.gold | 测试服 |
|
||||||
|
| com.tgc.sky.android.huawei | 华为国际服 |
|
||||||
|
|
||||||
|
## 更新日志
|
||||||
|
|
||||||
|
### 2022.01.15
|
||||||
|
|
||||||
|
- 发布第一个仅支持网易官方国服的版本。
|
||||||
|
|
||||||
|
### 2022.01.17
|
||||||
|
|
||||||
|
- 补充添加国内各渠道服。
|
||||||
|
|
||||||
|
### 2022.02.01
|
||||||
|
|
||||||
|
- 调整渠道服选择方式,由选择徽章后选择渠道改为先设置全局渠道,然后再使用徽章。
|
||||||
|
|
||||||
|
### 2022.02.15
|
||||||
|
|
||||||
|
- 添加华为渠道服支持。
|
||||||
|
|
||||||
|
- 修复删除和录入徽章显示多个渠道问题。
|
||||||
|
|
||||||
|
### 2022.03.07
|
||||||
|
|
||||||
|
- 添加测试服务支持。
|
||||||
|
- 添加更新徽章使用次数功能,用于解决使用实体徽章后原数据失效问题。
|
||||||
|
|
||||||
|
### 2022.03.08
|
||||||
|
|
||||||
|
- 添加自定义徽章排序功能【由用户 [影灵3](https://github.com/1173922902) 贡献 】
|
||||||
|
|
||||||
|
### 2022.05.04
|
||||||
|
|
||||||
|
- 添加华为国际服支持
|
||||||
|
|
||||||
|
|
||||||
## 贡献
|
## 贡献
|
||||||
|
|
||||||
特别鸣谢以下用户对本项目做出的贡献
|
特别鸣谢以下用户的贡献
|
||||||
|
|
||||||
- [影灵3](https://github.com/1173922902)
|
- [影灵3](https://github.com/1173922902)
|
||||||
|
|
||||||
|
## 敬请期待
|
||||||
|
- 正在规划开发app版本
|
||||||
|
- 录入更方便(直接刷徽章录入)
|
||||||
|
|
||||||
|
|||||||
87
skyBadge.js
87
skyBadge.js
@ -1,6 +1,6 @@
|
|||||||
"auto"
|
"auto"
|
||||||
// 徽章数据
|
// 徽章数据
|
||||||
var storage = storages.create("com.netease.sky:badge1");
|
var storage = storages.create("com.netease.sky:badge");
|
||||||
// storage.clear();
|
// storage.clear();
|
||||||
var global_option = getMenu();
|
var global_option = getMenu();
|
||||||
if (!storage.contains("menu")) {
|
if (!storage.contains("menu")) {
|
||||||
@ -166,6 +166,44 @@ function startSky() {
|
|||||||
startSky();
|
startSky();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "sort":
|
||||||
|
// 变更徽章位置
|
||||||
|
// let len = Object.keys(menu_map).length;
|
||||||
|
console.log("len => " + len + " menuLen => " + Object.keys(getMenu()).length);
|
||||||
|
if (len - 1 > Object.keys(getMenu()).length) {
|
||||||
|
let sort_options = [];
|
||||||
|
let storage_map = global_option;//初始化
|
||||||
|
Object.keys(menu_map).map(function (key, index) {
|
||||||
|
console.log("key => " + key, "index => " + index);
|
||||||
|
if (!isOptions(key, menu_map)) {
|
||||||
|
sort_options.push(key);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let befor_index = dialogs.select("请选择需要变更位置的徽章", sort_options);
|
||||||
|
let after_index = dialogs.select("请选择变更后的位置", sort_options);
|
||||||
|
if (befor_index === after_index) {
|
||||||
|
toast("两次选项一样。");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// map重排序
|
||||||
|
for (let x = 0; x < len; x++) {
|
||||||
|
if (x === befor_index) {
|
||||||
|
storage_map[sort_options[after_index]] = menu_map[sort_options[after_index]];
|
||||||
|
} else if (x === after_index) {
|
||||||
|
storage_map[sort_options[befor_index]] = menu_map[sort_options[befor_index]];
|
||||||
|
} else {
|
||||||
|
storage_map[sort_options[x]] = menu_map[sort_options[x]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
storage.put("menu", storage_map);
|
||||||
|
toast("位置替换成功,请重新运行");
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
toast("你没有录入任何徽章信息");
|
||||||
|
// 再次打开菜单
|
||||||
|
startSky();
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// 启动app
|
// 启动app
|
||||||
console.log(value);
|
console.log(value);
|
||||||
@ -185,11 +223,12 @@ function startSky() {
|
|||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
function isOptions(key, menu) {
|
function isOptions(key, menu) {
|
||||||
if (menu[key] == "add"
|
if (menu[key] === "add"
|
||||||
|| menu[key] == "delete"
|
|| menu[key] === "delete"
|
||||||
|| menu[key] == "clear"
|
|| menu[key] === "clear"
|
||||||
|| menu[key] == "channel"
|
|| menu[key] === "channel"
|
||||||
|| menu[key] == "update"
|
|| menu[key] === "update"
|
||||||
|
|| menu[key] === "sort"
|
||||||
) {
|
) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -204,7 +243,7 @@ function isOptions(key, menu) {
|
|||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
function isSwitchOptions(key, menu) {
|
function isSwitchOptions(key, menu) {
|
||||||
if (menu[key] == "channel") {
|
if (menu[key] === "channel") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -212,8 +251,8 @@ function isSwitchOptions(key, menu) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 已选择的渠道包名
|
* 已选择的渠道包名
|
||||||
*
|
*
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
function getAppChannelPackageName() {
|
function getAppChannelPackageName() {
|
||||||
let channel = storage.get("channel");
|
let channel = storage.get("channel");
|
||||||
@ -236,6 +275,7 @@ function selectAppChannelPackageName() {
|
|||||||
"[C] VIVO": "com.netease.sky.vivo",
|
"[C] VIVO": "com.netease.sky.vivo",
|
||||||
"[C] 应用宝": "com.tencent.tmgp.eyou.eygy",
|
"[C] 应用宝": "com.tencent.tmgp.eyou.eygy",
|
||||||
"[C] 华为": "com.netease.sky.huawei",
|
"[C] 华为": "com.netease.sky.huawei",
|
||||||
|
"[I] 华为国际服": "com.tgc.sky.android.huawei",
|
||||||
"[I] 国际服": "com.tgc.sky.android",
|
"[I] 国际服": "com.tgc.sky.android",
|
||||||
"[T] 测试服": "com.tgc.sky.android.test.gold",
|
"[T] 测试服": "com.tgc.sky.android.test.gold",
|
||||||
};
|
};
|
||||||
@ -255,22 +295,23 @@ function selectAppChannelPackageName() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 全局菜单
|
* 全局菜单
|
||||||
*
|
*
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
function getMenu() {
|
function getMenu() {
|
||||||
return {
|
return {
|
||||||
"[O] 录入徽章": "add",
|
"[O] 录入徽章": "add",
|
||||||
"[O] 清空徽章": "clear",
|
"[O] 清空徽章": "clear",
|
||||||
"[O] 删除徽章": "delete",
|
"[O] 删除徽章": "delete",
|
||||||
"[O] 更新次数": "update"
|
"[O] 更新次数": "update",
|
||||||
|
"[O] 徽章排序": "sort"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取class
|
* 获取class
|
||||||
*
|
*
|
||||||
* @param package_name
|
* @param package_name
|
||||||
*/
|
*/
|
||||||
function getClassName(package_name) {
|
function getClassName(package_name) {
|
||||||
let china_class_name = "com.tgc.sky.netease.GameActivity_Netease";
|
let china_class_name = "com.tgc.sky.netease.GameActivity_Netease";
|
||||||
@ -285,11 +326,11 @@ function getClassName(package_name) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断是否为国际服
|
* 判断是否为国际服
|
||||||
*
|
*
|
||||||
* @param package_name
|
* @param package_name
|
||||||
*/
|
*/
|
||||||
function isInternational(package_name) {
|
function isInternational(package_name) {
|
||||||
if (package_name === "com.tgc.sky.android") {
|
if (package_name === "com.tgc.sky.android" || package_name === "com.tgc.sky.android.huawei") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -298,8 +339,8 @@ function isInternational(package_name) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断是否为测试服
|
* 判断是否为测试服
|
||||||
*
|
*
|
||||||
* @param package_name
|
* @param package_name
|
||||||
*/
|
*/
|
||||||
function isTest(package_name) {
|
function isTest(package_name) {
|
||||||
if (package_name === "com.tgc.sky.android.test.gold") {
|
if (package_name === "com.tgc.sky.android.test.gold") {
|
||||||
@ -327,7 +368,7 @@ function currentChannel() {
|
|||||||
/**
|
/**
|
||||||
* 16进制转10进制
|
* 16进制转10进制
|
||||||
* @param {*} hex 16进制
|
* @param {*} hex 16进制
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
function hex2dec(hex) {
|
function hex2dec(hex) {
|
||||||
return parseInt(hex, 16);
|
return parseInt(hex, 16);
|
||||||
@ -335,10 +376,10 @@ function hex2dec(hex) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 10进制转16进制
|
* 10进制转16进制
|
||||||
*
|
*
|
||||||
* @param {*} dec 10进制
|
* @param {*} dec 10进制
|
||||||
* @param {*} len 长度
|
* @param {*} len 长度
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
function dec2hex(dec, len) {
|
function dec2hex(dec, len) {
|
||||||
var hex = "";
|
var hex = "";
|
||||||
@ -351,4 +392,4 @@ function dec2hex(dec, len) {
|
|||||||
while (hex.length < len) hex = '0' + hex;
|
while (hex.length < len) hex = '0' + hex;
|
||||||
}
|
}
|
||||||
return hex;
|
return hex;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user