Skip to content

Commit

Permalink
V3.0版本,新增tpm系统,优化游戏内不显示玩家问题,解决极少数情况下因为JAVA随机数造成的7位key导致密钥错误问题
Browse files Browse the repository at this point in the history
  • Loading branch information
liujiaqi7998 committed May 14, 2022
1 parent 2e11c39 commit 0925b92
Show file tree
Hide file tree
Showing 4 changed files with 135 additions and 31 deletions.
52 changes: 38 additions & 14 deletions README.md
@@ -1,14 +1,20 @@
# Grasscutters的WEB控制面板
# Grasscutters的工具箱

一款Grasscutters的WEB控制面板插件

## 服主控制台使用方法
一款Grasscutters的~~WEB控制面板插件~~(工具箱)

**2.x及其以上版本是针对割草机dev分支最新版本开发的,如果你使用的是割草机1.0版本请安装1.x版本的插件**

**2.0版本更新需要删除1.0版本的配置文件!!**

1.下载GrasscuttersWebDashboard.jar放在服务器的plugins文件夹下
功能介绍

- [x] 服主WEB控制台
- [x] 服务器成员WebTools网页管理器(2.x版本功能完善)
- [x] tpm万能传送标记功能(3.x版本新增)

## 服主控制台使用方法(安装指南)

1.在[Releases · liujiaqi7998/GrasscuttersWebDashboard (github.com)](https://github.com/liujiaqi7998/GrasscuttersWebDashboard/releases)下载GrasscuttersWebDashboard.jar放在服务器的plugins文件夹下

2.重启服务器

Expand All @@ -25,23 +31,41 @@

5.输入连接地址,点击确定

## 服务器成员进入WebTools方法
## tpm万能传送标记功能(3.x版本新增)

**2.0版本更新需要删除1.0版本的配置文件!!**
命令:/tpm [@uid] <go|add|del|list> [Name]

权限节点:GrasscuttersWebDashboard.tpm

1.向服务器发送 /webtools 或 /webt 或 /wt 命令
参数含义

| 参数 | Name参数 | 含义 |
| ------ | ------------------ | ---------------------- |
| go | 自定义的传送点名称 | 传送到传送点 |
| add | 自定义的传送点名称 | 添加传送点 |
| del | 自定义的传送点名称 | 删除传送点 |
| delall | yes(其他无效) | 删除改玩家全部传送点 |
| list || 查看该玩家的传送点列表 |

#### 注意事项:

1. 传送点名称是唯一的,如需修改某个传送点,请先删除,然后再添加

## 服务器成员进入WebTools方法

2.你会接收到一封带有网页链接的邮件
权限节点:GrasscuttersWebDashboard.webtools

3.点击连接打开网页控制台
1. 游戏内向服务器发送 **/webtools****/webt****/wt** 命令(控制台请使用**/webtools @uid** 向指定玩家发送WebTools链接邮件)
2. 你会接收到一封带有网页链接的邮件
3. 点击连接打开网页控制台

#### 注意事项:

1.只有玩家处于在线状态才可以使用。
1. 只有玩家处于在线状态才可以使用。

2.如果玩家没有某条指令的权限,执行是没有效果的。
2. 如果玩家没有某条指令的权限,执行是没有效果的。

3.邮件默认有效时间是3分钟,请3分钟内打开邮件链接,已经打开的页面只要不关闭就会一直处于连接状态。
3. 邮件默认有效时间是3分钟,请3分钟内打开邮件链接,已经打开的页面只要不关闭就会一直处于连接状态。

## 配置文件

Expand Down Expand Up @@ -109,7 +133,7 @@ Q2. 无法连接到服务器
3. 设置浏览器安全级别不校验SSL证书
4. 将服务器的证书添加到电脑信任目录
5. 将网页拉取到本地部署打开
6. (推荐)来着@wmn1525的方法, 直接先https://ip:端口,访问一下 然后信任,之后就能正常连接
6. (推荐)来着@wmn1525的方法, 先直接 https://ip:端口 访问一下 然后信任,之后就能正常连接了

## 自行编译

Expand Down
95 changes: 80 additions & 15 deletions docs/webtools.html
Expand Up @@ -36,13 +36,29 @@ <h1 class="mui-title">Grasscutters 网页工具箱</h1>
<div class="mui-content">

<div class="mui-card" style="margin-bottom: 35px;">
<div class="mui-card-header">在线玩家
<button type="button" data-loading-text="请稍后" class="mui-btn" onclick="updatePlayerList()">刷新</button>
<div class="mui-card-header">在线玩家 <br>传送前请先刷新一下列表
<button type="button" data-loading-text="请稍后" class="mui-btn mui-btn-primary mui-btn-outlined"
onclick="updatePlayerList()">刷新
</button>
</div>
<ul class="mui-table-view" id="id-player-list">
</ul>
</div>

<div class="mui-card" style="margin-bottom: 35px;">
<div class="mui-card-header">传送点列表
<button type="button" data-loading-text="请稍后" class="mui-btn mui-btn-outlined" onclick="addTransfer()">添加
</button>
<button type="button" data-loading-text="请稍后" class="mui-btn mui-btn-primary mui-btn-outlined"
onclick="updateTransferList()">刷新
</button>
<button type="button" data-loading-text="请稍后" class="mui-btn mui-btn-danger mui-btn-outlined"
onclick="delAllTransfer()">全部删除
</button>
</div>
<ul class="mui-table-view" id="id-Transfer-list">
</ul>
</div>

<div class="container">
<div class="toolset">
Expand Down Expand Up @@ -154,20 +170,49 @@ <h1 class="mui-title">Grasscutters 网页工具箱</h1>
sendCommand("0", "Player");
}

function updateTransferList() {
sendCommand("0", "TPMList");
}

function delAllTransfer() {
//询问是否删除
mui.confirm("确定删除所有传送点?", "删除传送点", ["确定", "取消"], function (e) {
if (e.index === 0) {
sendCommand("tpm delall yes");
updateTransferList();
}
});
}

function addTransfer() {
mui.prompt("请输入传送点名称", "添加传送点", "提示", ["取消", "确定"], function (e) {
if (e.index === 1) {
const name = e.value;
if (name.length === 0) {
mui.alert("传送点名称不能为空", "添加失败", "确定", function () {
});
} else {
sendCommand("tpm add " + name);
updateTransferList();
}
}
});
}

//心跳检测防止与服务器断开连接
var heartCheck = {
timeout: 10000, //10秒发一次心跳
timeoutObj: null,
serverTimeoutObj: null,
reset: function(){
reset: function () {
clearTimeout(this.timeoutObj);
clearTimeout(this.serverTimeoutObj);
return this;
},
start: function(){
this.timeoutObj = setTimeout(function(){
start: function () {
this.timeoutObj = setTimeout(function () {
updatePlayerList();
updateTransferList();
}, this.timeout)
}
}
Expand All @@ -190,19 +235,39 @@ <h1 class="mui-title">Grasscutters 网页工具箱</h1>
case "success":
mui.toast(server_msg['data']);
break;
case 'TPMList':
var tpm_list = server_msg['data'];
var tpm_list_html = "";
for (let i = 0; i < tpm_list.length; i++) {
var tpm_list_data = tpm_list[i];

tpm_list_html += "<li class=\"mui-table-view-cell\">\n" +
" <div class=\"mui-slider-cell\">\n" +
" <div class=\"mui-slider-cell-right\">\n" +
" <p class=\"mui-ellipsis\">传送点名称:" + tpm_list_data['Name'] + "</p>\n" +
" <p class=\"mui-ellipsis\">坐标:" + tpm_list_data['pos'] + "</p>\n" +
" <p class=\"mui-ellipsis\">场景:" + tpm_list_data['SceneId'] + "</p>\n" +
" <p class=\"mui-ellipsis\">UID:" + tpm_list_data['uid'] + "</p>\n" +
" <button type=\"button\" data-loading-text=\"请稍后\" class=\"mui-btn \" onclick=\"sendCommand('tpm go " + tpm_list_data['Name'] + "')\">传送</button>" +
" <button type=\"button\" data-loading-text=\"请稍后\" class=\"mui-btn \" onclick=\"sendCommand('tpm del " + tpm_list_data['Name'] + "');updateTransferList();\">删除</button>" +
" </div>\n" +
" </div>\n" +
" </li>";
}
document.getElementById("id-Transfer-list").innerHTML = tpm_list_html;
break;
case 'PlayerList':
const player_list = server_msg['data'];
var player_list = server_msg['data'];
//遍历玩家列表
let player_list_html = "";
var player_list_html = "";
for (let i = 0; i < player_list.length; i++) {
const player_data = player_list[i];

let tp_str = player_data['pos'];
tp_str = tp_str.replaceAll(",", "");
tp_str = tp_str.replaceAll("(", "");
tp_str = tp_str.replaceAll(")", "");
var player_data = player_list[i];
var tp_str = player_data['pos'];
tp_str = tp_str.replace("(", "");
tp_str = tp_str.replace(")", "");
tp_str = tp_str.replace(",", "");
tp_str = tp_str.replace(",", "");
tp_str = "tp " + tp_str + " " + player_data['SceneId'];

player_list_html += "<li class=\"mui-table-view-cell\">\n" +
" <div class=\"mui-slider-cell\">\n" +
" <div class=\"mui-slider-cell-right\">\n" +
Expand All @@ -214,7 +279,6 @@ <h1 class="mui-title">Grasscutters 网页工具箱</h1>
" <p class=\"mui-ellipsis\">等级:" + player_data['Level'] + "级</p>\n" +
" <p class=\"mui-ellipsis\">坐标:" + player_data['pos'] + "</p>\n" +
" <p class=\"mui-ellipsis\">场景:" + player_data['SceneId'] + "</p>\n" +
" <p class=\"mui-ellipsis\">传送前请先刷新一下列表</p>\n" +
" <button type=\"button\" data-loading-text=\"请稍后\" class=\"mui-btn \" onclick=\"sendCommand('" + tp_str + "')\">传送</button>" +
" </div>\n" +
" </div>\n" +
Expand All @@ -235,6 +299,7 @@ <h1 class="mui-title">Grasscutters 网页工具箱</h1>
console.log("连接成功");
heartCheck.reset().start();
updatePlayerList();
updateTransferList();
}
ws.onclose = () => {
mui.alert("连接已断开", "提示", "确定", function () {
Expand Down
Expand Up @@ -32,13 +32,13 @@ public void execute(Player sender, Player targetPlayer, List<String> args) {
return;
}
//随机8位数字
String random = Long.toString((long) (Math.random() * 100000000));
String random = Utils.generate8UID();
while (ServerUtils.tempPlayersData.containsKey(random)) {
//判断密钥是否超过key_timeout分钟
if (System.currentTimeMillis() - ServerUtils.tempPlayersData.get(random).getTime > GrasscuttersWebDashboard.key_timeout) {
ServerUtils.tempPlayersData.remove(random);
} else {
random = Long.toString((long) (Math.random() * 100000000));
random = Utils.generate8UID();
}
}

Expand Down
15 changes: 15 additions & 0 deletions src/main/java/top/cyqi/utils/Utils.java
Expand Up @@ -2,6 +2,8 @@

import top.cyqi.GrasscuttersWebDashboard;

import java.util.Random;

public class Utils {

private static final Runtime RUNTIME = Runtime.getRuntime();
Expand All @@ -20,4 +22,17 @@ public static long GetFreeJVMMemory() {
public static long GetAllocatedJVMMemory() {
return Utils.RUNTIME.totalMemory();
}

/***
* 生成uid 8位数字
*/
public static String generate8UID(){
Random random = new Random();
String result="";
for(int i=0;i<8;i++){
//首字母不能为0
result += (random.nextInt(9)+1);
}
return result;
}
}

0 comments on commit 0925b92

Please sign in to comment.