:add 在线人员快捷操作 代码生成去除/ 默认添加uid@

This commit is contained in:
wmn 2022-05-15 16:23:57 +08:00
parent 141fad05a7
commit dc19669a78
13 changed files with 259 additions and 256 deletions

View File

@ -140,5 +140,8 @@
], ],
"[javascript]": { "[javascript]": {
"editor.defaultFormatter": "vscode.typescript-language-features" "editor.defaultFormatter": "vscode.typescript-language-features"
},
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features"
} }
} }

2
src/components.d.ts vendored
View File

@ -9,12 +9,14 @@ declare module '@vue/runtime-core' {
ACascader: typeof import('@arco-design/web-vue')['Cascader'] ACascader: typeof import('@arco-design/web-vue')['Cascader']
ACheckbox: typeof import('@arco-design/web-vue')['Checkbox'] ACheckbox: typeof import('@arco-design/web-vue')['Checkbox']
ADescriptions: typeof import('@arco-design/web-vue')['Descriptions'] ADescriptions: typeof import('@arco-design/web-vue')['Descriptions']
ADrawer: typeof import('@arco-design/web-vue')['Drawer']
AInput: typeof import('@arco-design/web-vue')['Input'] AInput: typeof import('@arco-design/web-vue')['Input']
AInputNumber: typeof import('@arco-design/web-vue')['InputNumber'] AInputNumber: typeof import('@arco-design/web-vue')['InputNumber']
ALink: typeof import('@arco-design/web-vue')['Link'] ALink: typeof import('@arco-design/web-vue')['Link']
AMenu: typeof import('@arco-design/web-vue')['Menu'] AMenu: typeof import('@arco-design/web-vue')['Menu']
AMenuItem: typeof import('@arco-design/web-vue')['MenuItem'] AMenuItem: typeof import('@arco-design/web-vue')['MenuItem']
ASelect: typeof import('@arco-design/web-vue')['Select'] ASelect: typeof import('@arco-design/web-vue')['Select']
ASpace: typeof import('@arco-design/web-vue')['Space']
ASubMenu: typeof import('@arco-design/web-vue')['SubMenu'] ASubMenu: typeof import('@arco-design/web-vue')['SubMenu']
ATable: typeof import('@arco-design/web-vue')['Table'] ATable: typeof import('@arco-design/web-vue')['Table']
ATooltip: typeof import('@arco-design/web-vue')['Tooltip'] ATooltip: typeof import('@arco-design/web-vue')['Tooltip']

View File

@ -7,11 +7,11 @@ import { Message } from '@arco-design/web-vue'
const { text, isSupported, copy } = useClipboard() const { text, isSupported, copy } = useClipboard()
var value2 = ref(223) var value2 = ref(223)
var uid = ref('') var uid = ref('@')
var num = ref(1000) var num = ref(1000)
const value = computed(() => { const value = computed(() => {
return `/give ${uid.value} ${value2.value} ${num.value}` return `give ${uid.value} ${value2.value} ${num.value}`
}) })
const options = reactive([ const options = reactive([
{ {

View File

@ -8,7 +8,7 @@ import holyrelicx from './json/holyrelicnx.json'
import { Message } from '@arco-design/web-vue' import { Message } from '@arco-design/web-vue'
const { text, isSupported, copy } = useClipboard() const { text, isSupported, copy } = useClipboard()
var uid = ref('') var uid = ref('@')
var holyrelicnamevalue = ref('') var holyrelicnamevalue = ref('')
var holyrelicnmainvalue = ref('') var holyrelicnmainvalue = ref('')
@ -23,7 +23,7 @@ const value = computed(() => {
xct = xct + ` ${k.value},${k.num}` xct = xct + ` ${k.value},${k.num}`
} }
}) })
return `/giveart ${uid.value} ${holyrelicnamevalue.value} ${holyrelicnmainvalue.value}${xct} ${ return `giveart ${uid.value} ${holyrelicnamevalue.value} ${holyrelicnmainvalue.value}${xct} ${
grade.value + 1 grade.value + 1
}` }`
}) })

View File

@ -2,266 +2,111 @@
[ [
{ {
"label": "生命值", "label": "生命值",
"value": 10001 "value": "hp"
}, },
{ {
"label": "生命值百分比", "label": "最大生命值",
"value": 10002 "value": "maxhp"
}, },
{ {
"label": "攻击力", "label": "攻击力",
"value": 10003 "value": "atk"
}, },
{ {
"label": "攻击力百分比", "label": "元素精通",
"value": 10004 "value": "em"
},
{
"label": "防御力",
"value": 10005
},
{
"label": "防御力百分比",
"value": 10006
}, },
{ {
"label": "元素充能效率", "label": "元素充能效率",
"value": 10007 "value": "er"
},
{
"label": "元素精通",
"value": 10008
},
{
"label": "火元素抗性",
"value": 10009
},
{
"label": "雷元素抗性",
"value": 10010
},
{
"label": "冰元素抗性",
"value": 10011
},
{
"label": "水元素抗性",
"value": 10012
},
{
"label": "风元素抗性",
"value": 10013
},
{
"label": "岩元素抗性",
"value": 10014
},
{
"label": "草元素抗性",
"value": 10015
},
{
"label": "攻击力",
"value": 12001
},
{
"label": "生命值",
"value": 13001
},
{
"label": "生命值百分比",
"value": 13002
},
{
"label": "攻击力",
"value": 13003
},
{
"label": "攻击力百分比",
"value": 13004
},
{
"label": "防御力",
"value": 13005
},
{
"label": "防御力百分比",
"value": 13006
}, },
{ {
"label": "暴击率", "label": "暴击率",
"value": 13007 "value": "crate"
}, },
{ {
"label": "暴击伤害", "label": "暴击伤害",
"value": 13008 "value": "cdmg"
},
{
"label": "冷却缩减",
"value": "cdr"
}, },
{ {
"label": "治疗加成", "label": "治疗加成",
"value": 13009 "value": "heal"
}, },
{ {
"label": "元素精通", "label": "受治疗加成",
"value": 13010 "value": "heali"
}, },
{ {
"label": "生命值", "label": "护盾强效",
"value": 14001 "value": "shield"
}, },
{ {
"label": "生命值", "label": "无视防御",
"value": 15001 "value": "defi"
}, },
{ {
"label": "生命值百分比", "label": "元素增伤 火",
"value": 15002 "value": "epyro"
}, },
{ {
"label": "攻击力", "label": "元素增伤 冰",
"value": 15003 "value": "ecryo"
}, },
{ {
"label": "攻击力百分比", "label": "元素增伤 水",
"value": 15004 "value": "ehydro"
}, },
{ {
"label": "防御力", "label": "元素增伤 岩",
"value": 15005 "value": "egeo"
}, },
{ {
"label": "防御力百分比", "label": "元素增伤 草",
"value": 15006 "value": "edendro"
}, },
{ {
"label": "元素精通", "label": "元素增伤 雷",
"value": 15007 "value": "eelectro"
}, },
{ {
"label": "火元素伤害加成", "label": "元素增伤 物理",
"value": 15008 "value": "ephys"
}, },
{ {
"label": "雷元素伤害加成", "label": "元素增伤 草",
"value": 15009 "value": ""
}, },
{ {
"label": "冰元素伤害加成", "label": "元素抗性 火",
"value": 15010 "value": "respyro"
}, },
{ {
"label": "水元素伤害加成", "label": "元素抗性 冰",
"value": 15011 "value": "rescryo"
}, },
{ {
"label": "风元素伤害加成", "label": "元素抗性 水",
"value": 15012 "value": "reshydro"
}, },
{ {
"label": "岩元素伤害加成", "label": "元素抗性 岩",
"value": 15013 "value": "resgeo"
}, },
{ {
"label": "草元素伤害加成", "label": "元素抗性 草",
"value": 15014 "value": "resdendro"
}, },
{ {
"label": "物理伤害加成", "label": "元素抗性 雷",
"value": 15015 "value": "reselectro"
}, },
{ {
"label": "攻击力百分比", "label": "元素抗性 物理",
"value": 10990 "value": "resphys"
},
{
"label": "生命值百分比",
"value": 10980
},
{
"label": "防御力百分比",
"value": 10970
},
{
"label": "元素充能效率",
"value": 10960
},
{
"label": "元素精通",
"value": 10950
},
{
"label": "攻击力百分比",
"value": 30990
},
{
"label": "生命值百分比",
"value": 30980
},
{
"label": "防御力百分比",
"value": 30970
},
{
"label": "暴击率",
"value": 30960
},
{
"label": "暴击伤害",
"value": 30950
},
{
"label": "治疗加成",
"value": 30940
},
{
"label": "元素精通",
"value": 30930
},
{
"label": "攻击力百分比",
"value": 50990
},
{
"label": "生命值百分比",
"value": 50980
},
{
"label": "防御力百分比",
"value": 50970
},
{
"label": "火元素伤害加成",
"value": 50960
},
{
"label": "雷元素伤害加成",
"value": 50950
},
{
"label": "冰元素伤害加成",
"value": 50940
},
{
"label": "水元素伤害加成",
"value": 50930
},
{
"label": "风元素伤害加成",
"value": 50920
},
{
"label": "岩元素伤害加成",
"value": 50910
},
{
"label": "草元素伤害加成",
"value": 50900
},
{
"label": "物理伤害加成",
"value": 50890
},
{
"label": "元素精通",
"value": 50880
} }
] ]

View File

@ -10,9 +10,10 @@ const { text, isSupported, copy } = useClipboard()
var value2 = ref(21010101) var value2 = ref(21010101)
var grade = ref(80) var grade = ref(80)
var num = ref(10) var num = ref(10)
var uid = ref('@')
const value = computed(() => { const value = computed(() => {
return `/spawn ${value2.value} ${num.value} ${grade.value}` return `spawn ${uid.value} ${value2.value} ${num.value} ${grade.value}`
}) })
const options = reactive(monster) const options = reactive(monster)
const message = Message const message = Message
@ -27,29 +28,21 @@ function copyvalue() {
<template> <template>
<div class="commuse"> <div class="commuse">
<div class="commuse-item">
<div class="text-slate-900 dark:text-slate-100"> UID: </div>
<a-input v-model="uid" placeholder="请输入UID" allow-clear />
</div>
<div class="commuse-item"> <div class="commuse-item">
<div class="text-slate-900 dark:text-slate-100"> 怪物: </div> <div class="text-slate-900 dark:text-slate-100"> 怪物: </div>
<a-cascader allow-search v-model="value2" :options="options" placeholder="" filterable /> <a-cascader allow-search v-model="value2" :options="options" placeholder="" filterable />
</div> </div>
<div class="commuse-item"> <div class="commuse-item">
<div class="text-slate-900 dark:text-slate-100"> 等级: </div> <div class="text-slate-900 dark:text-slate-100"> 等级: </div>
<a-input-number <a-input-number v-model="grade" placeholder="请输入数量" mode="button" size="large" class="input-demo" />
v-model="grade"
placeholder="请输入数量"
mode="button"
size="large"
class="input-demo"
/>
</div> </div>
<div class="commuse-item"> <div class="commuse-item">
<div class="text-slate-900 dark:text-slate-100"> 数量: </div> <div class="text-slate-900 dark:text-slate-100"> 数量: </div>
<a-input-number <a-input-number v-model="num" placeholder="请输入数量" mode="button" size="large" class="input-demo" />
v-model="num"
placeholder="请输入数量"
mode="button"
size="large"
class="input-demo"
/>
</div> </div>
<div class="generate"> <div class="generate">
<a-input v-model="value" placeholder="" /> <a-input v-model="value" placeholder="" />

View File

@ -0,0 +1,86 @@
[
{
"label": "给予指定玩家全部物品",
"value": [
"giveall @"
]
},
{
"label": "60级",
"value": [
"give @ 102 1880200"
]
},
{
"label": "世界8",
"value": [
"setworldlevel @ 8"
]
},
{
"label": "1000000原石",
"value": [
"give @ 201 1000000"
]
},
{
"label": "1000000纠缠之缘",
"value": [
"give @ 223 1880200"
]
},
{
"label": "1000000相遇之缘",
"value": [
"give @ 224 1000000"
]
},
{
"label": "1000000魔拉",
"value": [
"give @ 202 1000000"
]
},
{
"label": "1000000创世结晶",
"value": [
"give @ 203 1000000"
]
},
{
"label": "1000000创世结晶",
"value": [
"give @ 102 1000000"
]
},
{
"label": "50只120级丘丘人",
"value": [
"spawn @ 21010101 50 120"
]
},
{
"label": "治疗队伍中所有角色",
"value": [
"heal @"
]
},
{
"label": "当前角色普攻满级",
"value": [
"talent @ n 10"
]
},
{
"label": "当前角色Q满级",
"value": [
"talent @ q 10"
]
},
{
"label": "当前角色E满级",
"value": [
"talent @ e 10"
]
}
]

View File

@ -9,38 +9,32 @@ const { text, isSupported, copy } = useClipboard()
const options = reactive([ const options = reactive([
{ {
title: '治疗队伍中所有角色', title: '治疗队伍中所有角色',
isuse: '仅客户端', value: 'heal',
value: '/heal',
}, },
{ {
title: '列出在线玩家', title: '列出在线玩家',
isuse: '均可使用', value: 'list',
value: '/list',
}, },
{ {
title: '获取当前坐标', title: '获取当前坐标',
isuse: '仅客户端', value: 'position',
value: '/position',
}, },
{ {
title: '重载服务器配置', title: '重载服务器配置',
isuse: '均可使用', value: 'reload',
value: '/reload',
}, },
{ {
title: '重启服务端', title: '重启服务端',
isuse: '均可使用', isuse: '均可使用',
value: '/restart', value: 'restart',
}, },
{ {
title: '停止服务器', title: '停止服务器',
isuse: '均可使用', value: 'stop',
value: '/stop',
}, },
{ {
title: '世界等级8', title: '世界等级8',
isuse: '仅客户端', value: 'setworldlevel 8',
value: '/setworldlevel 8',
}, },
]) ])
const message = Message const message = Message

View File

@ -1,15 +1,40 @@
<template> <template>
<div class="personnel"> <div class="personnel">
<a-table :columns="columns" :data="data"> <a-space direction="vertical">
<a-button type="outline" @click="updatePlayerList">刷新</a-button>
<a-table :columns="columns" :data="appStore.PlayerList">
<template #optional="{ record }"> <template #optional="{ record }">
<a-button @click="$modal.info({ title: 'Name', content: record.name })">操作</a-button> <a-button @click="handle(record)">操作</a-button>
</template> </template>
</a-table> </a-table>
</a-space>
</div> </div>
<a-drawer :width="500" :visible="visible" placement="right" @ok="handleOk" @cancel="handleCancel" unmountOnClose>
<template #title>
操作 UID @{{ handleUid }}
</template>
<div class="personnel-drawer">
<a-space direction="vertical" fill>
<div>
一键操作
</div>
<a-space wrap>
<a-button v-for="(item, index) in operationData" type="outline" :key="index" @click="handleOP(item.value)">{{
item.label
}}</a-button>
</a-space>
</a-space>
</div>
</a-drawer>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref, computed } from 'vue' import { reactive, ref, onMounted } from 'vue'
import { useAppStore } from '@/store/modules/app'
import operationdata from './operation.json'
const appStore = useAppStore()
function updatePlayerList() {
appStore.socketSend("{\"type\":\"Player\",\"data\":\"0\"}");
}
const data = ref([]) const data = ref([])
const columns = [ const columns = [
{ {
@ -38,9 +63,48 @@ const columns = [
}, },
{ {
title: '操作', title: '操作',
dataIndex: 'Optional', slotName: 'optional'
}, },
]; ];
const operationData = ref(operationdata)
const handleUid = ref(1)
const handle = (record: any) => {
handleUid.value = record.uid
visible.value = true;
}
const handleOP = (valueList: string[]) => {
for (let index = 0; index < valueList.length; index++) {
const element = valueList[index];
var i = element.search("@") + 1
send(insertStr(element, i))
}
}
function send(cmd: string) {
const send_msg = {
type: 'CMD',
data: cmd,
}
const send_msg_str = JSON.stringify(send_msg)
appStore.socketSend(send_msg_str)
}
function insertStr(soure: string, start: number, newStr = handleUid.value) {
return soure.slice(0, start) + newStr + soure.slice(start);
}
const handleOk = () => {
visible.value = false;
}
const handleCancel = () => {
visible.value = false;
}
const visible = ref(false);
onMounted(() => {
updatePlayerList()
})
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.personnel { .personnel {
@ -48,4 +112,11 @@ const columns = [
width: 700px; width: 700px;
} }
</style> </style>
<style lang="less" >
.personnel-drawer {
width: 100%;
height: 100%;
overflow: auto;
}
</style>

View File

@ -8,11 +8,12 @@ import role from './json/role.json'
const { text, isSupported, copy } = useClipboard() const { text, isSupported, copy } = useClipboard()
var value2 = ref() var value2 = ref("hp")
var num = ref() var num = ref()
var uid = ref("@")
const value = computed(() => { const value = computed(() => {
return `/setstats ${value2.value} ${num.value}` return `setstats ${uid.value} ${value2.value} ${num.value}`
}) })
const options = reactive(role) const options = reactive(role)
const message = Message const message = Message
@ -28,6 +29,10 @@ function copyvalue() {
<template> <template>
<div class="commuse"> <div class="commuse">
<div class="title"> 直接修改当前角色的面板 </div> <div class="title"> 直接修改当前角色的面板 </div>
<div class="commuse-item">
<div class="text-slate-900 dark:text-slate-100"> UID: </div>
<a-input v-model="uid" placeholder="请输入UID" allow-clear />
</div>
<div class="commuse-item"> <div class="commuse-item">
<div class="text-slate-900 dark:text-slate-100"> 属性: </div> <div class="text-slate-900 dark:text-slate-100"> 属性: </div>
<a-cascader allow-search v-model="value2" :options="options" placeholder="" filterable /> <a-cascader allow-search v-model="value2" :options="options" placeholder="" filterable />

View File

@ -8,7 +8,7 @@ const { text, isSupported, copy } = useClipboard()
var value2 = ref() var value2 = ref()
var value3 = ref('/give') var value3 = ref('/give')
var uid = ref() var uid = ref("@")
var num = ref() var num = ref()
const value = computed(() => { const value = computed(() => {

View File

@ -6,14 +6,14 @@ import { Message } from '@arco-design/web-vue'
import weapon from './json/weapon.json' import weapon from './json/weapon.json'
const { text, isSupported, copy } = useClipboard() const { text, isSupported, copy } = useClipboard()
var uid = ref(1) var uid = ref("@")
var value2 = ref(12510) var value2 = ref(12510)
var num = ref(5) var num = ref(5)
var grade = ref(90) var grade = ref(90)
var refined = ref(5) var refined = ref(5)
const value = computed(() => { const value = computed(() => {
return `/give ${uid.value} ${value2.value} ${num.value} ${grade.value} ${refined.value}` return `give ${uid.value} ${value2.value} ${num.value} ${grade.value} ${refined.value}`
}) })
const options = reactive(weapon) const options = reactive(weapon)

View File

@ -57,7 +57,8 @@ export const useAppStore = defineStore(
send: (data: string | ArrayBuffer | Blob, useBuffer?: boolean | undefined) => { }, send: (data: string | ArrayBuffer | Blob, useBuffer?: boolean | undefined) => { },
close: () => { }, close: () => { },
open: () => { }, open: () => { },
mesgData: [""] mesgData: [""],
PlayerList: []
}), }),
getters: {}, getters: {},
actions: { actions: {
@ -175,8 +176,11 @@ export const useAppStore = defineStore(
case "cmd_msg": case "cmd_msg":
this.mesgData.push(parse.data) this.mesgData.push(parse.data)
Message.info(parse.data)
break;
case "PlayerList":
this.PlayerList = parse.data
break; break;
default: default:
break; break;
} }