feat: backup plugins
Signed-off-by: MiaoWoo <admin@yumc.pw>
parent
f111b9891c
commit
41d3923d94
|
@ -42,15 +42,21 @@
|
|||
|
||||
### 基础准备工作
|
||||
- QQ搜索小程序 `圈云盒子` 并登录
|
||||
- 申请内测服务器账号 个人中心 => 配置面板 => 圈云盒子客服群 加群申请
|
||||
- 申请内测服务器账号
|
||||
- 个人中心 => 配置面板 => 圈云盒子客服群
|
||||
- 打开群详情 加群
|
||||
|
||||
### 接下来就是赚钱的操作
|
||||
|
||||
### 服务器准备工作
|
||||
- 先安装 `MiaoScript` [站内地址]()
|
||||
- 打开 [圈云盒子管理后台](https://reward.yumc.pw)
|
||||
- 先安装 `MiaoScript` [站内地址](https://www.mcbbs.net/thread-774401-1-1.html)
|
||||
- 可以通过 Yum 快速安装 `/yum install MiaoScript`
|
||||
- 等待 MiaoScript 引擎启动完成(首次启动可能需要10-20秒 依赖于您的网络环境)
|
||||
- 执行 `/mspm install MiaoReward`
|
||||
|
||||
### 绑定服务器
|
||||
- 由于当前框架存在BUG 请先执行 `/mspm reload MiaoReward` 生成配置文件
|
||||
- 执行 `/mrd bind server`
|
||||
- 使用QQ扫码
|
||||
- 选择需要绑定的服务器
|
||||
|
@ -59,7 +65,11 @@
|
|||
- 执行 `/mrd ratio 0.001` (最低为 1:0.0001)
|
||||
- 执行兑换比例确认指令
|
||||
- 执行 `/mrd server` 查看服务器信息
|
||||
- 如需绑定多台 可以直接复制绑定之后的 `MiaoScript/plugins/MiaoReward/config.yml` 文件到多台服务器上 然后 `/mrd reload` 重载插件
|
||||
- 如果群组服需要绑定多台服务器(前提是每个服务器都有玩家在)
|
||||
- 执行 `/gmspm install MiaoReward` 批量安装
|
||||
- 可以直接复制绑定之后的 `MiaoScript/plugins/MiaoReward/config.yml`
|
||||
- 黏贴配置文件到所有需要绑定的服务器上
|
||||
- 然后 `/gmspm reload MiaoReward` 批量重载插件
|
||||
|
||||
### QQ群配置
|
||||
- 打开小程序
|
||||
|
@ -72,6 +82,7 @@
|
|||
- 执行 `/mrd bind`
|
||||
- 使用QQ扫码
|
||||
- 完成绑定
|
||||
- 执行 `/mrd query` 查询信息
|
||||
|
||||
## 使用说明
|
||||
- 玩家可以通过下列方式获取喵币
|
||||
|
@ -82,13 +93,21 @@
|
|||
- 腐竹可以在平台将喵币兑换成RMB(兑换比例请加群联系客服详谈)
|
||||
- 登录小程序后 个人中心 => 配置面板 => 圈云盒子客服群
|
||||
|
||||
## PAPI兼容
|
||||
- 目前已经兼容 PAPI 变量
|
||||
- `%mrd_balance%` 玩家喵币
|
||||
- `%mrd_sign%` 玩家签到(*/1)
|
||||
- `%mrd_video%` 玩家视频观看次数(*/300)
|
||||
- `%mrd_box%` 玩家盒子观看次数(*/300)
|
||||
- 如果玩家变量没有及时更新 执行 `/mrd query` 或 `重新登录游戏` 即可
|
||||
|
||||
## 配置文件
|
||||
|
||||
``` yaml
|
||||
```yml
|
||||
# 服务器ID
|
||||
serverId: '16'
|
||||
serverId: 16
|
||||
# 服务器Token
|
||||
serverToken: d50d3f6e-2a59-460a-2b29-82b66c4bbf52
|
||||
serverToken: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
|
||||
# 兑换指令
|
||||
drawCommand: 'p give %player_name% %amount%'
|
||||
# 冷却时间
|
||||
|
@ -97,6 +116,10 @@ drawCooldown: 300
|
|||
prefix: '§6[§b广告系统§6]§r'
|
||||
```
|
||||
|
||||
## 插件源码
|
||||
|
||||
- [MiaoScript包管理中心](http://ms.yumc.pw/api/plugin/download/name/MiaoReward)
|
||||
|
||||
## Roadmap
|
||||
- 绑定服务器(已完成)
|
||||
- 绑定玩家(已完成)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { constants, task, server, channel, chat, proxy } from "@ccms/api"
|
||||
import { JSPlugin, interfaces, Cmd, Tab, Listener, Config } from "@ccms/plugin"
|
||||
import { JSPlugin, interfaces, Cmd, Tab, Listener, Config, PluginConfig } from "@ccms/plugin"
|
||||
|
||||
import { QRCode, QRErrorCorrectLevel } from '@ccms/common/dist/qrcode'
|
||||
|
||||
|
@ -62,7 +62,7 @@ interface UserInfo {
|
|||
box: string
|
||||
}
|
||||
|
||||
@JSPlugin({ prefix: 'MRD', version: '1.3.2', author: 'MiaoWoo', servers: [constants.ServerType.Bukkit], source: __filename })
|
||||
@JSPlugin({ prefix: 'MRD', version: '1.3.3', author: 'MiaoWoo', servers: [constants.ServerType.Bukkit], source: __filename })
|
||||
export class MiaoReward extends interfaces.Plugin {
|
||||
private serverInfo: any
|
||||
private cacheBindUuid = ''
|
||||
|
@ -90,7 +90,7 @@ export class MiaoReward extends interfaces.Plugin {
|
|||
private bungee: proxy.BungeeCord
|
||||
|
||||
@Config()
|
||||
private config = {
|
||||
private config: PluginConfig = {
|
||||
prefix: '§6[§b广告系统§6]§r',
|
||||
serverId: '',
|
||||
serverToken: '',
|
||||
|
@ -114,7 +114,7 @@ export class MiaoReward extends interfaces.Plugin {
|
|||
this.logger.prefix = this.config.prefix
|
||||
this.downgrade = Bukkit.getServer().class.name.split('.')[3] == "v1_7_R4"
|
||||
this.updateServerInfo()
|
||||
this.updatePlayerInfo()
|
||||
this.updateOnlinePlayersInfo()
|
||||
}
|
||||
|
||||
private updateServerInfo(player?: any) {
|
||||
|
@ -132,15 +132,12 @@ export class MiaoReward extends interfaces.Plugin {
|
|||
}).async().submit()
|
||||
}
|
||||
|
||||
private updatePlayerInfo(player?: any) {
|
||||
this.taskManager.create(() => {
|
||||
Java.from(this.server.getOnlinePlayers()).forEach(p => {
|
||||
let info = this.queryUser(p)
|
||||
if (info.code == 200) {
|
||||
this.playerInfoCache.set(p.getName(), info.data)
|
||||
private updateOnlinePlayersInfo() {
|
||||
Java.from(this.server.getOnlinePlayers()).forEach(player => this.updatePlayerInfo(player))
|
||||
}
|
||||
})
|
||||
}).async().submit()
|
||||
|
||||
private updatePlayerInfo(player: org.bukkit.entity.Player) {
|
||||
this.taskManager.create(() => this.queryUser(player)).async().submit()
|
||||
}
|
||||
|
||||
@JSClass('com.google.common.io.ByteStreams')
|
||||
|
@ -190,20 +187,15 @@ export class MiaoReward extends interfaces.Plugin {
|
|||
} else {
|
||||
this.PlaceholderAPI.registerPlaceholderHook("mrd", new this.PlaceholderHook({
|
||||
onPlaceholderRequest: (player: any, s: string) => {
|
||||
if (!this.playerInfoCache.has(player.getName())) {
|
||||
return '用户未绑定'
|
||||
}
|
||||
if (!this.playerInfoCache.has(player.getName())) { return '用户未绑定' }
|
||||
let data = this.playerInfoCache.get(player.getName())
|
||||
switch (s.toLowerCase()) {
|
||||
case "balance":
|
||||
return data.balance
|
||||
case "sign":
|
||||
return data.sign
|
||||
case "box":
|
||||
return data.box
|
||||
default:
|
||||
case "balance": return data.balance
|
||||
case "sign": return data.sign
|
||||
case "video": return data.video
|
||||
case "box": return data.box
|
||||
default: return "未知的参数: " + s
|
||||
}
|
||||
return "未知的参数: " + s
|
||||
}
|
||||
}))
|
||||
}
|
||||
|
@ -326,6 +318,7 @@ export class MiaoReward extends interfaces.Plugin {
|
|||
|
||||
cmddraw(sender: org.bukkit.entity.Player, amount: number) {
|
||||
if (!sender.getItemInHand) { return this.logger.sender(sender, '§c手持物品检测异常 请检查是否在客户端执行命令!') }
|
||||
if (!this.playerInfoCache.has(sender.getName())) { return this.logger.sender(sender, '§c当前用户尚未绑定服务器玩家账号 请先执行 /mrd bind 绑定账号!') }
|
||||
amount = Number(amount)
|
||||
if (!Number.isInteger(amount)) {
|
||||
return this.logger.sender(sender, '§4金额必须是数字!')
|
||||
|
@ -419,12 +412,13 @@ export class MiaoReward extends interfaces.Plugin {
|
|||
if (result.code !== 200) {
|
||||
return this.logger.sender(sender, `§4操作异常 §6服务器返回: §c${result.msg}`)
|
||||
}
|
||||
let data = result.data
|
||||
this.logger.sender(sender, [
|
||||
`§6====== ${this.config.prefix} §a服务器信息 §6======`,
|
||||
`§6服务器: §a${result.data.name}`,
|
||||
`§6喵币余额: §b${result.data.score} §6喵币`,
|
||||
`§6喵币比例: §b${result.data.ratio}`,
|
||||
`§6今日收入: §b${result.data.today} §6喵币`,
|
||||
`§6服务器: §a${data.name}`,
|
||||
`§6喵币余额: §b${data.score} §6喵币`,
|
||||
`§6喵币比例: §b${data.ratio}`,
|
||||
`§6今日收入: §b${data.today} §6喵币`,
|
||||
`§6====== ${this.config.prefix} §a服务器信息 §6======`,
|
||||
])
|
||||
}
|
||||
|
@ -469,6 +463,10 @@ export class MiaoReward extends interfaces.Plugin {
|
|||
})
|
||||
}
|
||||
|
||||
cmdreload() {
|
||||
this.config.reload()
|
||||
}
|
||||
|
||||
private ratio2string(ratio) {
|
||||
ratio = parseFloat(ratio)
|
||||
if (ratio > 1) {
|
||||
|
@ -499,9 +497,10 @@ export class MiaoReward extends interfaces.Plugin {
|
|||
if (check.code == 200) {
|
||||
this.config.serverId = check.data.serverId
|
||||
this.config.serverToken = check.data.serverToken
|
||||
this.config['save']()
|
||||
this.config.save()
|
||||
this.logger.sender(sender, '§a已成功绑定服务器: §b' + check.data.serverName)
|
||||
this.updateServerInfo()
|
||||
this.updateServerInfo(sender)
|
||||
this.updateOnlinePlayersInfo()
|
||||
}
|
||||
sync.scaned = true
|
||||
}).async().submit()
|
||||
|
@ -590,13 +589,17 @@ export class MiaoReward extends interfaces.Plugin {
|
|||
|
||||
private queryUser(sender: org.bukkit.entity.Player, sync = false) {
|
||||
if (!this.config.serverId || !this.config.serverToken) { return this.logger.sender(sender, '§4当前服务器尚未配置绑定ID 请联系腐竹进行配置!') }
|
||||
return this.httpPost(`https://reward.yumc.pw/server/queryUser`, {
|
||||
let result = this.httpPost(`https://reward.yumc.pw/server/queryUser`, {
|
||||
id: this.config.serverId,
|
||||
token: this.config.serverToken,
|
||||
uuid: sender.getUniqueId().toString(),
|
||||
username: sender.getName(),
|
||||
sync
|
||||
})
|
||||
if (result?.code == 200) {
|
||||
this.playerInfoCache.set(sender.getName(), result.data)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
cmdquery(sender: org.bukkit.entity.Player) {
|
||||
|
@ -687,10 +690,7 @@ CAST TIME : ${Date.now() - startTime}`)
|
|||
PlayerJoinEvent(event: org.bukkit.event.player.PlayerJoinEvent) {
|
||||
const player = event.getPlayer()
|
||||
this.bungeeCordDetect(player)
|
||||
let info = this.queryUser(player)
|
||||
if (info.code == 200) {
|
||||
this.playerInfoCache.set(player.getName(), info.data)
|
||||
}
|
||||
this.updatePlayerInfo(player)
|
||||
}
|
||||
|
||||
@Listener()
|
||||
|
@ -750,7 +750,7 @@ CAST TIME : ${Date.now() - startTime}`)
|
|||
}
|
||||
|
||||
private isQrCodeItem(item: org.bukkit.inventory.ItemStack): boolean {
|
||||
if (!item) { return false }
|
||||
if (!item || item.getType() == Material.AIR) { return false }
|
||||
if ((item.getType() == Material.MAP || item.getType() == Material.FILLED_MAP) && item.hasItemMeta()) {
|
||||
return Java.from(item.getItemMeta().getLore()).indexOf('QRCODE') != -1
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ let langMap = {
|
|||
'download.start': '§6开始下载插件: §b{name} §6版本 §3{version}',
|
||||
'download.url': '§6插件下载地址: §b{url}',
|
||||
'download.finish': '§6插件 §b{name} §6版本 §3{version} §a下载完毕 开始加载 ...',
|
||||
'install.already': '§6插件 §b{name} §6版本 §3{version} §c已安装在服务器 §3更新请用 update 命令!',
|
||||
'install.finish': '§6插件 §b{name} §6版本 §3{version} §a安装成功!',
|
||||
'update.finish': '§6插件 §b{name} §6版本 §3{version} §a更新成功!',
|
||||
'upgrade.confirm': '§6您正在尝试更新 §bMiaoScript §c核心 §6请执行 §b/mpm §aupgrade §cconfirm §6确认执行!',
|
||||
|
@ -177,7 +178,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
|||
let message = JSON.parse(input.readUTF())
|
||||
let fakeSender = this.getProxySender(message.sender)
|
||||
this.taskManager.create(() => this.main(fakeSender, message.command, message.args)).async().submit()
|
||||
this.logger.sender(fakeSender, `§6命令 §b/mpm ${message.args?.join?.(' ')} §a执行成功!`)
|
||||
this.logger.sender(fakeSender, `§6命令 §b/mspm ${message.args?.join?.(' ')} §a执行成功!`)
|
||||
}
|
||||
|
||||
private getProxySender(name: string) {
|
||||
|
@ -224,7 +225,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
|||
if (!this.isBungeeCord) return this.logger.sender(sender, '§c当前服务器尚未检测到 BungeeCord 链接...')
|
||||
this.taskManager.create(() => this.main(sender, command, args)).async().submit()
|
||||
this.bungeeCordForward(sender, { sender: sender.getName(), command, args })
|
||||
this.logger.sender(sender, `§6[§3BPM§6][§a${this.serverName}§6] §6命令 §b/mpm ${args.join?.(' ')} §a发布成功!`)
|
||||
this.logger.sender(sender, `§6[§3BPM§6][§a${this.serverName}§6] §6命令 §b/mspm ${args.join?.(' ')} §a发布成功!`)
|
||||
}
|
||||
|
||||
@Cmd({ servers: [constants.ServerType.Bungee] })
|
||||
|
@ -264,6 +265,18 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
|||
])
|
||||
}
|
||||
|
||||
cmdsudo(sender: any, name: string, ...args: string[]) {
|
||||
this.taskManager.create(() => {
|
||||
let player = this.server.getPlayer(name)
|
||||
if (!player) {
|
||||
return this.logger.sender(sender, `§4玩家 ${player.getName()} 不在线或不存在!`)
|
||||
}
|
||||
let command = args.join(' ')
|
||||
this.server.dispatchCommand(player, command)
|
||||
this.logger.sender(sender, `§6玩家 §a${player.getName()} §6命令 §b${command} §a执行完成!`)
|
||||
}).submit()
|
||||
}
|
||||
|
||||
cmdload(sender: any, name: string) {
|
||||
let pluginFile = fs.concat(__dirname + '', name)
|
||||
if (!fs.exists(pluginFile)) {
|
||||
|
@ -290,7 +303,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
|||
cmdinstall(sender: any, name: string) {
|
||||
if (!name) { return this.i18n(sender, 'plugin.name.empty') }
|
||||
if (this.pluginManager.getPlugins().has(name)) {
|
||||
|
||||
this.i18n(sender, 'install.already', { name, version: this.pluginManager.getPlugins().get(name).description.version })
|
||||
return
|
||||
}
|
||||
this.download(sender, name, false, () => {
|
||||
|
@ -402,7 +415,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
|||
this.i18n(sender, 'prun.script', { name })
|
||||
this.i18n(sender, 'run.script', { script })
|
||||
let result = this.runCode(script, sender, this.pluginManager.getPlugins().get(name))
|
||||
this.i18n(sender, 'run.result', { result: result == undefined ? this.translate.translate('run.noresult') : result + '' })
|
||||
this.i18n(sender, 'run.result', { result: result == undefined ? this.translate.translate('run.noresult') : typeof result == "string" ? result : JSON.stringify(result) })
|
||||
} catch (ex) {
|
||||
this.logger.sender(sender, this.logger.stack(ex))
|
||||
}
|
||||
|
@ -429,8 +442,8 @@ if (this.serverType == "spring") {
|
|||
var db = dbm.getMainDatabase()
|
||||
var df = base.getInstance().getAutowireCapableBeanFactory()
|
||||
}
|
||||
return ''+ eval(${JSON.stringify(code)});`)
|
||||
return tfunc.apply(_this, params) + ''
|
||||
return eval(${JSON.stringify(code)});`)
|
||||
return tfunc.apply(_this, params)
|
||||
}
|
||||
|
||||
cmddeploy(sender: any, name: any) {
|
||||
|
@ -460,7 +473,7 @@ return ''+ eval(${JSON.stringify(code)});`)
|
|||
|
||||
@Tab({ alias: ['gmspm', 'bungeemspm'] })
|
||||
tabmspm(_sender: any, _command: any, args: string | any[]) {
|
||||
if (args.length === 1) { return ['list', 'install', 'update', 'upgrade', 'reload', 'restart', 'run', 'prun', 'help', 'create', 'deploy'] }
|
||||
if (args.length === 1) { return ['list', 'install', 'update', 'upgrade', 'reload', 'restart', 'run', 'prun', 'sudo', 'help', 'create', 'deploy'] }
|
||||
if (args.length > 1) {
|
||||
switch (args[0]) {
|
||||
case "list":
|
||||
|
@ -474,6 +487,9 @@ return ''+ eval(${JSON.stringify(code)});`)
|
|||
case "prun":
|
||||
if (args.length == 2) return [...this.pluginManager.getPlugins().keys()]
|
||||
return []
|
||||
case "sudo":
|
||||
if (args.length == 2) return Java.from(this.server.getOnlinePlayers()).map(p => p.getName())
|
||||
return []
|
||||
case "update":
|
||||
case "load":
|
||||
case "unload":
|
||||
|
|
Loading…
Reference in New Issue