mirror of
https://github.com/Grasscutters/Iridium.git
synced 2024-11-23 03:59:42 +00:00
Squash
This commit is contained in:
commit
3661d44dd9
70
README.md
Normal file
70
README.md
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
# Iridium
|
||||||
|
A KCP packet sniffer + visualizer in one.
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
|
||||||
|
0. Bring `GenshinData` from Grasscutter's resource folder.
|
||||||
|
|
||||||
|
½. `npm i`
|
||||||
|
|
||||||
|
1. `node . main` or `npm run main`
|
||||||
|
|
||||||
|
2. http://localhost:1984/index.html
|
||||||
|
|
||||||
|
From there, you can either start a proxy or read a .pcap file filtered with `udp.port == 22101 or udp.port == 22102`.
|
||||||
|
Proxy captures will be saved to `captures` folder in a .gcap format and can also be read with this tool.
|
||||||
|
|
||||||
|
|
||||||
|
# Using with Grasscutter on Localhost
|
||||||
|
|
||||||
|
0. Set Grasscutter's GameServer port to an available port and set `PublicPort` to 22102.
|
||||||
|
|
||||||
|
1. Open config.js and set `useDispatchServer` to false, `UdpTargetIP` to `127.0.0.1` and `UdpTargetPort` to the port that you specified.
|
||||||
|
|
||||||
|
2. Start Iridium and enable UDP Proxy from Frontend, then you can start Grasscutter.
|
||||||
|
|
||||||
|
|
||||||
|
# Node module API for your own packets
|
||||||
|
|
||||||
|
`startFrontend`: launches the frontend on http://localhost:1984/index.html
|
||||||
|
|
||||||
|
`displayPacket`: sends an abstract packet to frontend
|
||||||
|
|
||||||
|
```js
|
||||||
|
iridium.displayPacket({
|
||||||
|
source: 0=server, 1=client
|
||||||
|
packetID: numerical ID,
|
||||||
|
protoName: name of the proto,
|
||||||
|
object: decoded packet contents/any info to display in the frontend
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
`decodePacket`: queues a packet to be decoded by mtxor -> protobuf
|
||||||
|
|
||||||
|
```js
|
||||||
|
iridium.decodePacket({
|
||||||
|
ip: {
|
||||||
|
address: src_addr,
|
||||||
|
address_dst: dst_addr,
|
||||||
|
port: port_src,
|
||||||
|
port_dst: port_dst
|
||||||
|
} - this is used to construct the kcp ingest object and determine direction
|
||||||
|
crypt: if "uncrypt" is missing: the buffer containing only the data bytes of the raw udp packet (usually offset 28),
|
||||||
|
overrideKey: if crypt is used, you can supply your own key to XOR with, per-packet.
|
||||||
|
uncrypt: if "crypt" is missing: a buffer containing the already-dexored datagram to feed into protobuf decoder, must start with packet id at offset 2,
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
If `uncrypt` is supplied, `ip` object only needs either `port` or `port_dst` set to `22101` to determine direction.
|
||||||
|
|
||||||
|
`updateProxyIP(ip, port)`: Set remote IP and port of the server the proxy should connect to. This is usually determined automatically when the client makes the request to the cur.
|
||||||
|
|
||||||
|
# How the proxy works
|
||||||
|
|
||||||
|
While you can just drop in a sniffed pcap, the proxy allows you to see traffic realtime. You will need to reach logged-in state, point the dispatch hosts to localhost and activate the Iridium frontend along with the proxy. The dispatch will be running on localhost:80 and localhost:443 - make sure the ports are succesfully bound, you usually need admin access to do that and if there's svchost taking those up, it won't work and you need to kill it first.
|
||||||
|
|
||||||
|
After that, you click into the client and it should request the cur - the response cur will point the client to 127.0.0.1 in terms of UDP. If you are using Fiddler to redirect the hosts, you will have to put your own `cur.json` into `www` folder, as it becomes impossible to make a request for the real cur. It will work if you're just using the hosts file.
|
||||||
|
|
||||||
|
After you click again (the door), the UDP connection should start being monitored.
|
||||||
|
|
||||||
|
- Alg
|
29
backend/excelPivot.js
Normal file
29
backend/excelPivot.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path')
|
||||||
|
|
||||||
|
const log = new (require("../util/log"))('Excel', 'redBright');
|
||||||
|
|
||||||
|
log.start('Loading Excels...')
|
||||||
|
const jsonsInDir = fs.readdirSync('./GenshinData/ExcelBinOutput/');
|
||||||
|
jsonsInDir.push('../TextMap/TextMapEN.json');
|
||||||
|
const excels = jsonsInDir.map((file) => {
|
||||||
|
const fileData = fs.readFileSync(path.join('./GenshinData/ExcelBinOutput/', file));
|
||||||
|
const o = JSON.parse(fileData.toString());
|
||||||
|
if(file.includes('TextMapEN')) {
|
||||||
|
return {name: 'TextMap', json: o}
|
||||||
|
}
|
||||||
|
const E = {};
|
||||||
|
if(!o[0]) return;
|
||||||
|
const key = Object.keys(o[0]).find(key => key == 'Id') ||
|
||||||
|
Object.keys(o[0]).find(key => key == 'ID') ||
|
||||||
|
Object.keys(o[0]).find(key => key.includes('Id') || key.includes('ID'));
|
||||||
|
if(!key) return;
|
||||||
|
o.forEach(item => {
|
||||||
|
E[item[key]] = item;
|
||||||
|
})
|
||||||
|
return {name: file, json: E};
|
||||||
|
}).filter(a=>a);
|
||||||
|
log.log(excels.length + '/' + jsonsInDir.length + ' excels are loaded into memory.')
|
||||||
|
log.log('ID lookup is now enabled. Select text and press Enter or use q(id) in console.')
|
||||||
|
|
||||||
|
module.exports = excels || [];
|
80
backend/frontend-server.js
Normal file
80
backend/frontend-server.js
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
const http = require('http');
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path')
|
||||||
|
const log = new (require("../util/log"))('Frontend', 'cyanBright');
|
||||||
|
const packetsToSend = [];
|
||||||
|
|
||||||
|
let requestListener = async (req, res) => {
|
||||||
|
let filePath = path.join(__dirname, "..", "frontend", "public", req.url.split("?")[0]);
|
||||||
|
// try {
|
||||||
|
res.writeHead(200);
|
||||||
|
const file = await fs.promises.readFile(filePath);
|
||||||
|
res.end(file);
|
||||||
|
// }
|
||||||
|
// catch (e) {
|
||||||
|
// res.writeHead(404, { "Content-Type": "text/html" });
|
||||||
|
// log.error("404 " + req.url);
|
||||||
|
// res.end('404 Not Found');
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
const clients = [];
|
||||||
|
let wss;
|
||||||
|
|
||||||
|
function webSocket() {
|
||||||
|
var WebSocketServer = require('ws').Server,
|
||||||
|
wss = new WebSocketServer({
|
||||||
|
port: 40510
|
||||||
|
})
|
||||||
|
|
||||||
|
wss.on('connection', function(ws) {
|
||||||
|
ws.on('message', function(message) {
|
||||||
|
const msg = JSON.parse(message);
|
||||||
|
// try {
|
||||||
|
let endpoint = require(path.join('..','frontend','endpoints',`${msg.cmd}.js`));
|
||||||
|
log.log(`[${msg.cmd}] ${msg.data}`);
|
||||||
|
const handler = endpoint.execute(msg.cmd, msg.data).then(data => {
|
||||||
|
if (data === undefined) return;
|
||||||
|
ws.send(JSON.stringify({
|
||||||
|
cmd: msg.cmd.replace('Req', 'Rsp'),
|
||||||
|
data: data
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
// } catch (e) {
|
||||||
|
// log.error(`${msg.cmd} event not handled`);
|
||||||
|
// ws.send(JSON.stringify({
|
||||||
|
// cmd: msg.cmd.replace('Req', 'Rsp')
|
||||||
|
// }));
|
||||||
|
// }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
setInterval(() => {
|
||||||
|
if (packetsToSend.length) {
|
||||||
|
let msg = {
|
||||||
|
cmd: 'PacketNotify',
|
||||||
|
data: packetsToSend
|
||||||
|
};
|
||||||
|
msg = JSON.stringify(msg);
|
||||||
|
wss.clients.forEach(ws => {
|
||||||
|
ws.send(msg);
|
||||||
|
})
|
||||||
|
packetsToSend.length = 0;
|
||||||
|
}
|
||||||
|
}, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
function queuePacket(packet) {
|
||||||
|
packetsToSend.push(packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
execute() {
|
||||||
|
http.createServer({}, requestListener).listen(1984, () => {
|
||||||
|
log.start('Frontend running on http://localhost:1984/index.html')
|
||||||
|
});
|
||||||
|
webSocket();
|
||||||
|
},
|
||||||
|
queuePacket
|
||||||
|
}
|
43
backend/http-dispatch.js
Normal file
43
backend/http-dispatch.js
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
const http = require('http');
|
||||||
|
const https = require('https');
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const log = new(require("../util/log"))('Dispatch', 'yellowBright');
|
||||||
|
let servers = [];
|
||||||
|
|
||||||
|
let requestListener = function(req, res) {
|
||||||
|
try {
|
||||||
|
res.writeHead(200, {
|
||||||
|
"Content-Type": "text/html"
|
||||||
|
});
|
||||||
|
const file = require(path.join(path.resolve(path.join(__dirname, "..", "www")), req.url.split("?")[0]));
|
||||||
|
file.execute(req, res);
|
||||||
|
if (req.url != "/perf/dataUpload") {
|
||||||
|
log.log("200", req.url);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
res.writeHead(404, {
|
||||||
|
"Content-Type": "text/html"
|
||||||
|
});
|
||||||
|
// if(e) console.log(e)
|
||||||
|
log.error("404", req.url);
|
||||||
|
res.end('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const httpsOptions = {
|
||||||
|
key: fs.readFileSync("./cert/ys.key"),
|
||||||
|
cert: fs.readFileSync("./cert/ys.crt")
|
||||||
|
};
|
||||||
|
module.exports = {
|
||||||
|
execute() {
|
||||||
|
servers.push(http.createServer(requestListener).listen(80, () => {
|
||||||
|
log.start('HTTP:', 'localhost:80')
|
||||||
|
}))
|
||||||
|
servers.push(https.createServer(httpsOptions, requestListener).listen(443, () => {
|
||||||
|
log.start('HTTPS:', 'localhost:443')
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
stop() {
|
||||||
|
servers.forEach(server => server.close());
|
||||||
|
}
|
||||||
|
}
|
407
backend/sniffer.js
Normal file
407
backend/sniffer.js
Normal file
@ -0,0 +1,407 @@
|
|||||||
|
const config = require('../config')
|
||||||
|
const proxy = require('udp-proxy')
|
||||||
|
const MHYbuf = require("../util/MHYbuf");
|
||||||
|
const kcp = require("node-kcp");
|
||||||
|
const fs = require("fs");
|
||||||
|
const pcapp = require('pcap-parser');
|
||||||
|
// const SQLiteCrud = require('sqlite3-promisify');
|
||||||
|
const DelimiterStream = require('delimiter-stream');
|
||||||
|
const util = require('util');
|
||||||
|
const path = require('path');
|
||||||
|
const execFile = util.promisify(require('child_process').execFile);
|
||||||
|
const udpPacket = require('udp-packet');
|
||||||
|
const ipPacket = require('ip-packet')
|
||||||
|
const {
|
||||||
|
WSMessage
|
||||||
|
} = require("../util/classes");
|
||||||
|
const log = new (require("../util/log"))('Sniffer', 'blueBright');
|
||||||
|
const chalk = require('chalk');
|
||||||
|
let Session = {
|
||||||
|
//filename
|
||||||
|
//proxy
|
||||||
|
}
|
||||||
|
const frontend = require('./frontend-server')
|
||||||
|
const MT19937_64 = require("../util/mt64");
|
||||||
|
|
||||||
|
const packetQueue = [];
|
||||||
|
const DIR_SERVER = 0;
|
||||||
|
const DIR_CLIENT = 1;
|
||||||
|
const GCAP_DELIM = '█▄█\n';
|
||||||
|
const GCAP_DIR = path.join('.', 'captures')
|
||||||
|
const PACKET_GetPlayerTokenRsp = MHYbuf.getPacketIDByProtoName('GetPlayerTokenRsp');
|
||||||
|
const PACKET_UnionCmdNotify = MHYbuf.getPacketIDByProtoName('UnionCmdNotify');
|
||||||
|
|
||||||
|
let packetQueueSize = 0;
|
||||||
|
let unknownPackets = 0,
|
||||||
|
packetOrderCount = 0;
|
||||||
|
let MHYKeys = require('../data/MHYkeys.json');
|
||||||
|
for (let key in MHYKeys) {
|
||||||
|
MHYKeys[key] = Buffer.from(MHYKeys[key], 'base64');
|
||||||
|
}
|
||||||
|
let initialKey;
|
||||||
|
let yuankey;
|
||||||
|
var serverBound = {};
|
||||||
|
var clientBound = {};
|
||||||
|
|
||||||
|
async function processMHYPacket(packet) {
|
||||||
|
let {
|
||||||
|
crypt,
|
||||||
|
uncrypt,
|
||||||
|
ip,
|
||||||
|
overrideKey
|
||||||
|
} = packet;
|
||||||
|
if (uncrypt) return [uncrypt];
|
||||||
|
if (!crypt) return log.warn("Empty data received.");
|
||||||
|
|
||||||
|
let packetSource = (ip.port == 22101 || ip.port == 22102 || ip.port == config.UdpTargetPort) ? DIR_SERVER : DIR_CLIENT;
|
||||||
|
if (crypt.byteLength <= 20) {
|
||||||
|
yuankey = undefined;
|
||||||
|
initialKey = undefined;
|
||||||
|
serverBound = {};
|
||||||
|
clientBound = {};
|
||||||
|
switch (crypt.readInt32BE(0)) {
|
||||||
|
case 0xFF:
|
||||||
|
log.log("Handshake", "Connected");
|
||||||
|
frontend.queuePacket({
|
||||||
|
source: packetSource,
|
||||||
|
packetID: 'HND',
|
||||||
|
protoName: 'Handshake',
|
||||||
|
object: 'Hamdshanke pls.'
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
case 404:
|
||||||
|
log.log("Handshake", "Disconnected"); //red
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
frontend.queuePacket({
|
||||||
|
source: packetSource,
|
||||||
|
packetID: 'HND',
|
||||||
|
protoName: 'Handshake',
|
||||||
|
object: 'Hamdshanke estamblished.'
|
||||||
|
})
|
||||||
|
// log.warn("UNKNOWN HANDSHAKE", crypt.readInt32BE(0));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let KCPContextMap;
|
||||||
|
if (packetSource == DIR_SERVER) {
|
||||||
|
KCPContextMap = serverBound;
|
||||||
|
} else {
|
||||||
|
KCPContextMap = clientBound;
|
||||||
|
}
|
||||||
|
|
||||||
|
let peerID = ip.address + '_' + ip.port + '_' + crypt.readUInt32LE(0).toString(16);
|
||||||
|
if (!KCPContextMap[peerID]) {
|
||||||
|
KCPContextMap[peerID] = new kcp.KCP(crypt.readUInt32LE(0), ip);
|
||||||
|
// KCPContextMap[peerID].nodelay(1, 1000, 2, 0)
|
||||||
|
log.log('KCP', 'Instance created: ' + peerID);
|
||||||
|
}
|
||||||
|
|
||||||
|
let kcpobj = KCPContextMap[peerID];
|
||||||
|
kcpobj.input(await MHYbuf.reformatKcpPacket(crypt))
|
||||||
|
var hrTime = process.hrtime();
|
||||||
|
kcpobj.update(hrTime[0] * 1000000 + hrTime[1] / 1000);
|
||||||
|
kcpobj.wndsize(1024, 1024);
|
||||||
|
|
||||||
|
let packets = [];
|
||||||
|
let recv;
|
||||||
|
do {
|
||||||
|
recv = kcpobj.recv();
|
||||||
|
if (!recv) break;
|
||||||
|
if (!initialKey) {
|
||||||
|
initialKey = MHYKeys[recv.readUInt16BE(0) ^ 0x4567];
|
||||||
|
}
|
||||||
|
let keyBuffer = overrideKey || yuankey || initialKey;
|
||||||
|
MHYbuf.xorData(recv, keyBuffer);
|
||||||
|
|
||||||
|
let packetID = recv.readUInt16BE(2);
|
||||||
|
if (packetID == PACKET_GetPlayerTokenRsp) {
|
||||||
|
var proto = await MHYbuf.dataToProtobuffer(MHYbuf.removeMagic(recv), "GetPlayerTokenRsp")
|
||||||
|
log.debug(proto.secretKey.toString())
|
||||||
|
let initgen = new MT19937_64();
|
||||||
|
initgen.seed(BigInt(proto.secretKey));
|
||||||
|
let generator = new MT19937_64();
|
||||||
|
generator.seed(initgen.int64());
|
||||||
|
generator.int64();
|
||||||
|
let key = Buffer.alloc(4096);
|
||||||
|
for (let i = 0; i < 4096; i += 8) {
|
||||||
|
let val = generator.int64();
|
||||||
|
key.writeBigUInt64BE(val, i)
|
||||||
|
}
|
||||||
|
yuankey = key;
|
||||||
|
}
|
||||||
|
packets.push(recv);
|
||||||
|
} while (recv);
|
||||||
|
hrTime = process.hrtime();
|
||||||
|
kcpobj.update(hrTime[0] * 1000000 + hrTime[1] / 1000)
|
||||||
|
return packets;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInfoCharacter(packetName, dir) {
|
||||||
|
if (!isNaN(+packetName)) return ' X ';
|
||||||
|
if (packetName.includes('Rsp')) return chalk.yellow('<--');
|
||||||
|
if (packetName.includes('Req')) return chalk.cyan('-->');
|
||||||
|
if (packetName.includes('Notify') && !dir) return chalk.yellowBright('<-i');
|
||||||
|
if (packetName.includes('Notify') && dir) return chalk.cyanBright('i->');
|
||||||
|
}
|
||||||
|
|
||||||
|
function logPacket(packetSource, packetID, protoName, o, union, last) {
|
||||||
|
let s = '';
|
||||||
|
if (union)
|
||||||
|
if (last)
|
||||||
|
s += (' └─');
|
||||||
|
else
|
||||||
|
s += (' ├─');
|
||||||
|
s += union ? '' : new Date().toLocaleTimeString();
|
||||||
|
s += packetSource ? chalk.cyan(' [CLIENT] ') : chalk.yellow(' [SERVER] ');
|
||||||
|
s += `${('' + packetID).padEnd(6)}${getInfoCharacter(protoName, packetSource)} ${('' + (protoName || '')).padEnd(20)}`;
|
||||||
|
log.plain(s);
|
||||||
|
log.trail(JSON.stringify(o.object) || '');
|
||||||
|
|
||||||
|
if (last) log.log();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function decodePacketProto(packet, ip) {
|
||||||
|
let packetID = packet.readUInt16BE(2);
|
||||||
|
let protoName = MHYbuf.getProtoNameByPacketID(packetID);
|
||||||
|
let { ignoredProtos } = require('../config');
|
||||||
|
if (ignoredProtos.includes(protoName)) return;
|
||||||
|
|
||||||
|
let o = {};
|
||||||
|
if (packetID != parseInt(protoName)) {
|
||||||
|
let object = await MHYbuf.dataToProtobuffer(MHYbuf.parsePacketData(packet), packetID);
|
||||||
|
o = {
|
||||||
|
packetID,
|
||||||
|
protoName,
|
||||||
|
object: object,
|
||||||
|
packet: MHYbuf.parsePacketData(packet).toString('base64')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (packetID == protoName) {
|
||||||
|
o = {
|
||||||
|
packetID,
|
||||||
|
protoName,
|
||||||
|
object: null,
|
||||||
|
missing: true,
|
||||||
|
packet: MHYbuf.parsePacketData(packet).toString('base64')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let packetSource = (ip.port == 22101 || ip.port == 22102 || ip.port == config.UdpTargetPort) ? DIR_SERVER : DIR_CLIENT;
|
||||||
|
logPacket(packetSource, packetID, protoName, o);
|
||||||
|
|
||||||
|
if (packetID == PACKET_UnionCmdNotify) {
|
||||||
|
var commands = [];
|
||||||
|
for (var i = 0; i < o.object.cmdList.length; i++) {
|
||||||
|
let { messageId, body } = o.object.cmdList[i];
|
||||||
|
let protoName = MHYbuf.getProtoNameByPacketID(messageId);
|
||||||
|
let nested = await MHYbuf.dataToProtobuffer(body, messageId);
|
||||||
|
commands.push({
|
||||||
|
protoName,
|
||||||
|
packetID: messageId,
|
||||||
|
object: nested
|
||||||
|
})
|
||||||
|
logPacket(packetSource, messageId, protoName, commands[commands.length - 1], true, i == o.object.cmdList.length - 1);
|
||||||
|
}
|
||||||
|
o.object = {}
|
||||||
|
o.object.cmdList = commands;
|
||||||
|
}
|
||||||
|
if (o) o.source = packetSource;
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function joinBuffers(buffers, delimiter = ' ') {
|
||||||
|
let d = Buffer.from(delimiter);
|
||||||
|
return buffers.reduce((prev, b) => Buffer.concat([prev, d, b]));
|
||||||
|
}
|
||||||
|
function delay(t) { return new Promise(resolve => setTimeout(resolve, t)) };
|
||||||
|
|
||||||
|
function queuePacket(packet) {
|
||||||
|
packetQueue.push(packet);
|
||||||
|
packetQueueSize++;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function execute() {
|
||||||
|
async function loop() {
|
||||||
|
if (!packetQueueSize) return setTimeout(loop, 32);
|
||||||
|
let decryptedDatagram;
|
||||||
|
let packetObject;
|
||||||
|
while (packetQueue.length) {
|
||||||
|
let packet = packetQueue.shift();
|
||||||
|
packetQueueSize--;
|
||||||
|
|
||||||
|
if (packet.ip.port !== config.UdpTargetPort && packet.ip.port_dst !== config.UdpTargetPort &&
|
||||||
|
packet.ip.port !== 22102 && packet.ip.port_dst !== 22102 &&
|
||||||
|
packet.ip.port !== 22101 && packet.ip.port_dst !== 22101)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// await delay(20)
|
||||||
|
packets = await processMHYPacket(packet);
|
||||||
|
if (!packets) continue;
|
||||||
|
for (var i = 0; i < packets.length; i++) {
|
||||||
|
let decryptedDatagram = packets[i];
|
||||||
|
if (Session.datagrams) {
|
||||||
|
let datagram;
|
||||||
|
if (packet.ip.port === config.UdpTargetPort || packet.ip.port === 22101 || packet.ip.port === 22102) {
|
||||||
|
datagram = Buffer.concat([Buffer.from([0]), decryptedDatagram])
|
||||||
|
} else {
|
||||||
|
datagram = Buffer.concat([Buffer.from([1]), decryptedDatagram])
|
||||||
|
}
|
||||||
|
Session.datagrams.push(datagram);
|
||||||
|
};
|
||||||
|
packetObject = await decodePacketProto(decryptedDatagram, packet.ip);
|
||||||
|
if (packetObject) {
|
||||||
|
packetObject.time = packet.time;
|
||||||
|
frontend.queuePacket(packetObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Session.fileHandle && Session.datagrams && Session.datagrams.length > 0) {
|
||||||
|
await Session.fileHandle.appendFile(Buffer.concat([joinBuffers(Session.datagrams, GCAP_DELIM), Buffer.from(GCAP_DELIM)]));
|
||||||
|
Session.written = (Session.written || 0) + 1;
|
||||||
|
Session.datagrams = [];
|
||||||
|
}
|
||||||
|
setImmediate(loop);
|
||||||
|
}
|
||||||
|
loop();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function pcap(file) {
|
||||||
|
const { Readable } = require('stream');
|
||||||
|
const stream = Readable.from(Buffer.from(file, 'base64'));
|
||||||
|
var parser = pcapp.parse(stream);
|
||||||
|
parser.on('packet', packet => {
|
||||||
|
if (packet.data.readInt16LE(12) === 8)
|
||||||
|
packet.data = packet.data.slice(14);
|
||||||
|
let udp = MHYbuf.read_pcap_udp_header(packet.data);
|
||||||
|
let ip = MHYbuf.read_pcap_ipv4_header(packet.data);
|
||||||
|
|
||||||
|
queuePacket({
|
||||||
|
crypt: packet.data.slice(28),
|
||||||
|
ip: {
|
||||||
|
address: ip.src_addr,
|
||||||
|
address_dst: ip.dst_addr,
|
||||||
|
port: udp.port_src,
|
||||||
|
port_dst: udp.port_dst
|
||||||
|
},
|
||||||
|
time: packet.header.timestampSeconds * 1000 + Math.floor(packet.header.timestampMicroseconds / 1000)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
parser.on('end', async () => {
|
||||||
|
log.log('Parse finished.')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function gcap(file) {
|
||||||
|
// var fs = require('fs');
|
||||||
|
var linestream = new DelimiterStream({
|
||||||
|
delimiter: GCAP_DELIM
|
||||||
|
});
|
||||||
|
|
||||||
|
const { Readable } = require('stream');
|
||||||
|
const stream = Readable.from(Buffer.from(file, 'base64'));
|
||||||
|
|
||||||
|
linestream.on('data', packet => {
|
||||||
|
ip = {};
|
||||||
|
if (packet.readInt8(0) == 1) {
|
||||||
|
ip.port_dst = 22101
|
||||||
|
ip.port = null
|
||||||
|
} else {
|
||||||
|
ip.port = 22101
|
||||||
|
ip.port_dst = null
|
||||||
|
}
|
||||||
|
queuePacket({
|
||||||
|
uncrypt: packet.slice(1),
|
||||||
|
ip
|
||||||
|
})
|
||||||
|
});
|
||||||
|
stream.pipe(linestream);
|
||||||
|
}
|
||||||
|
|
||||||
|
const INTERCEPT = false;
|
||||||
|
|
||||||
|
function proxyMiddleware(dir, msg, sender, peer, next) {
|
||||||
|
if (!INTERCEPT) next(msg, sender, peer);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function startProxySession(filename, ip, port) {
|
||||||
|
Session = {};
|
||||||
|
if (!filename) filename = new Date().toISOString().replace('T', '_').replace(/:/g, '-').split('.')[0] + '.gcap';
|
||||||
|
Session.filename = path.resolve(path.join(GCAP_DIR, filename));
|
||||||
|
|
||||||
|
Session.fileHandle = await fs.promises.open(Session.filename, 'w');
|
||||||
|
Session.datagrams = [];
|
||||||
|
let opt = {
|
||||||
|
address: config.UdpTargetIP,
|
||||||
|
port: config.UdpTargetPort,
|
||||||
|
localaddress: config.UdpListenIP,
|
||||||
|
localport: config.UdpListenPort,
|
||||||
|
middleware: {
|
||||||
|
message: (msg, sender, next) => proxyMiddleware(1, msg, sender, undefined, next),
|
||||||
|
proxyMsg: (msg, sender, peer, next) => proxyMiddleware(0, msg, sender, peer, next)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Session.proxy = proxy.createServer(opt);
|
||||||
|
|
||||||
|
Session.proxy.on('listening', (details) => {
|
||||||
|
log.start("UDP", 'Proxy Listening at', chalk.yellowBright(`${config.UdpListenIP}:${config.UdpListenPort}`));
|
||||||
|
});
|
||||||
|
|
||||||
|
Session.proxy.on('bound', (details) => {
|
||||||
|
log.log('UDP', `Proxy bound to ${details.route.address}:${details.route.port}`);
|
||||||
|
log.log('UDP', `Peer bound to ${details.peer.address}:${details.peer.port}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 'message' is emitted when the server gets a message
|
||||||
|
Session.proxy.on('message', (packet, ip) => {
|
||||||
|
ip.address_dst = opt.address;
|
||||||
|
ip.port_dst = opt.port;
|
||||||
|
queuePacket({
|
||||||
|
crypt: packet,
|
||||||
|
ip: ip
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
Session.proxy.on('proxyMsg', (packet, ip, peer) => {
|
||||||
|
ip.address_dst = peer.address;
|
||||||
|
ip.port_dst = peer.port;
|
||||||
|
queuePacket({
|
||||||
|
crypt: packet,
|
||||||
|
ip: ip
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function stopProxySession() {
|
||||||
|
if (Session.proxy) {
|
||||||
|
Session.proxy.close();
|
||||||
|
log.stop("UDP", 'proxy stopped')
|
||||||
|
}
|
||||||
|
if (Session.fileHandle) await Session.fileHandle.close();
|
||||||
|
if (!Session.written && Session.filename) fs.unlinkSync(Session.filename);
|
||||||
|
Session = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSessionStatus() {
|
||||||
|
return !!Session.proxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateProxyIP(ip, port) {
|
||||||
|
if (Session.proxy && proxyIP !== ip || Session.proxy && proxyPort !== port) {
|
||||||
|
log.refresh('Relaunching proxy with an updated IP and port...')
|
||||||
|
await stopProxySession();
|
||||||
|
startProxySession(undefined, ip, port);
|
||||||
|
}
|
||||||
|
proxyIP = ip;
|
||||||
|
proxyPort = port;
|
||||||
|
console.log
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
execute,
|
||||||
|
pcap, gcap,
|
||||||
|
startProxySession, stopProxySession, getSessionStatus, updateProxyIP,
|
||||||
|
queuePacket
|
||||||
|
}
|
19
cert/cert.csr
Normal file
19
cert/cert.csr
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
-----BEGIN CERTIFICATE REQUEST-----
|
||||||
|
MIIDBzCCAe8CAQAwVjESMBAGA1UEAwwJbG9jYWxob3N0MQswCQYDVQQGEwJDWTEO
|
||||||
|
MAwGA1UECAwFQ3JlcGUxDjAMBgNVBAcMBUNyZXBlMRMwEQYDVQQKDApDcmVwZSBJ
|
||||||
|
bmMuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnPFIkkIHKJdmWdUd
|
||||||
|
mwja9qENmnmVL7iSFrgMhBRuZadsD1gYb78liWHH/CT45zmVJ44LiON3DjmCP/gA
|
||||||
|
bFe3epPifB5i6CIh+tolqG8fg9WyyWrP71Z+raaGtlV4NIyybRJI/9Gjysf4aehp
|
||||||
|
CtEKJf4BAy82lrfBhNhmHf16W65c0NCGMJoB9Wr+wZCdR6PzcKgWNa33YVfXTD8P
|
||||||
|
iTOU9cLRvRFgwO870f/8jekxVdHggfTdQmVj9rcNet6XMrWvzUI4LnI2JPyyEpMt
|
||||||
|
lAQnDQ2+aGG5A3GdPPkWeaST+vF6CDCTFkg8Dxw0jQ30jc0uQv/zz0mFuqvvivgp
|
||||||
|
GSXeuwIDAQABoGwwagYJKoZIhvcNAQkOMV0wWzAOBgNVHQ8BAf8EBAMCBaAwIAYD
|
||||||
|
VR0lAQH/BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCcGA1UdEQQgMB6CDCoubWlo
|
||||||
|
b3lvLmNvbYIOKi55dWFuc2hlbi5jb20wDQYJKoZIhvcNAQELBQADggEBABY2Mu+B
|
||||||
|
/QmTxNrYdTAMQ1yKzzuFnhZCgvf7POk6by0/x8XRHuFPM2F9vbsk2uL/O1wo58dv
|
||||||
|
IV0nO1QVwdgBj0C0/U46Ipo96k//7I4MeV7EtvKR/dQrT29dPjmSwaCKEC+/tCCm
|
||||||
|
ibnIXnt4uZnNdk8HgvP0HSvmwJ5zS491LhnIFPfVoaJRxJc3QSe/UADvSeCbC+1w
|
||||||
|
RrBrI/tKxvW+N0xZ2RQ12CYDYBtE7P15D8de3Hgsw7HAOmPRj263j8gdiJU6C3ev
|
||||||
|
atGB/m/TbTpZpwu9sfSRzgcKR2Ch59AjkLujRdB8uICjzzq3zqmrEBMDrDKANUve
|
||||||
|
crWZ6H0TrO0hN7Y=
|
||||||
|
-----END CERTIFICATE REQUEST-----
|
24
cert/cert.p7b
Normal file
24
cert/cert.p7b
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
-----BEGIN PKCS7-----
|
||||||
|
MIIECgYJKoZIhvcNAQcCoIID+zCCA/cCAQExADALBgkqhkiG9w0BBwGgggPdMIID
|
||||||
|
2TCCAsGgAwIBAgIUO4lg/Dj+kZ9fv+AFxQBrMNUJc9cwDQYJKoZIhvcNAQELBQAw
|
||||||
|
VjESMBAGA1UEAwwJbG9jYWxob3N0MQswCQYDVQQGEwJDWTEOMAwGA1UECAwFQ3Jl
|
||||||
|
cGUxDjAMBgNVBAcMBUNyZXBlMRMwEQYDVQQKDApDcmVwZSBJbmMuMB4XDTIxMTIx
|
||||||
|
MjE2NDY0NloXDTMxMTIxMDE2NDY0NlowVjESMBAGA1UEAwwJbG9jYWxob3N0MQsw
|
||||||
|
CQYDVQQGEwJDWTEOMAwGA1UECAwFQ3JlcGUxDjAMBgNVBAcMBUNyZXBlMRMwEQYD
|
||||||
|
VQQKDApDcmVwZSBJbmMuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
||||||
|
nPFIkkIHKJdmWdUdmwja9qENmnmVL7iSFrgMhBRuZadsD1gYb78liWHH/CT45zmV
|
||||||
|
J44LiON3DjmCP/gAbFe3epPifB5i6CIh+tolqG8fg9WyyWrP71Z+raaGtlV4NIyy
|
||||||
|
bRJI/9Gjysf4aehpCtEKJf4BAy82lrfBhNhmHf16W65c0NCGMJoB9Wr+wZCdR6Pz
|
||||||
|
cKgWNa33YVfXTD8PiTOU9cLRvRFgwO870f/8jekxVdHggfTdQmVj9rcNet6XMrWv
|
||||||
|
zUI4LnI2JPyyEpMtlAQnDQ2+aGG5A3GdPPkWeaST+vF6CDCTFkg8Dxw0jQ30jc0u
|
||||||
|
Qv/zz0mFuqvvivgpGSXeuwIDAQABo4GeMIGbMB0GA1UdDgQWBBS8E5THWThfTVAw
|
||||||
|
TnGez4druLTacDAfBgNVHSMEGDAWgBS8E5THWThfTVAwTnGez4druLTacDAOBgNV
|
||||||
|
HQ8BAf8EBAMCBaAwIAYDVR0lAQH/BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCcG
|
||||||
|
A1UdEQQgMB6CDCoubWlob3lvLmNvbYIOKi55dWFuc2hlbi5jb20wDQYJKoZIhvcN
|
||||||
|
AQELBQADggEBAIVqx99S1DYtyLqsi15KwTUawShW9iJVsvpk59vK6qbbzuGZL72D
|
||||||
|
rRJVTMxodv4WLaiM+te1TsW0WmdrhUYUBfIi+JpB67QB6aWKkOCP8fYq+mWnQ3vu
|
||||||
|
AEC6KpWH30j+0S58LVV+2iaGVetXYmYDXKoNslyVuJAM4iZSutTZhctO2FxmVicp
|
||||||
|
0fiPq/HJzxsmKHxyFJsgsdV0Dl9ElnlhpH77qxi/nXuUz9YlWZwwQI8KSsKmsOzT
|
||||||
|
UpSHHHpDocT24Yx73bR3Hd8CJam2bCEOOIIJG7sPx2lhTEJ+sKHDh4jHmRUI3rVk
|
||||||
|
5R+x1CcIrAgin+8nH28PhZFdOKs+CYMYGk2hADEA
|
||||||
|
-----END PKCS7-----
|
23
cert/ys.crt
Normal file
23
cert/ys.crt
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIID2TCCAsGgAwIBAgIUO4lg/Dj+kZ9fv+AFxQBrMNUJc9cwDQYJKoZIhvcNAQEL
|
||||||
|
BQAwVjESMBAGA1UEAwwJbG9jYWxob3N0MQswCQYDVQQGEwJDWTEOMAwGA1UECAwF
|
||||||
|
Q3JlcGUxDjAMBgNVBAcMBUNyZXBlMRMwEQYDVQQKDApDcmVwZSBJbmMuMB4XDTIx
|
||||||
|
MTIxMjE2NDY0NloXDTMxMTIxMDE2NDY0NlowVjESMBAGA1UEAwwJbG9jYWxob3N0
|
||||||
|
MQswCQYDVQQGEwJDWTEOMAwGA1UECAwFQ3JlcGUxDjAMBgNVBAcMBUNyZXBlMRMw
|
||||||
|
EQYDVQQKDApDcmVwZSBJbmMuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
||||||
|
AQEAnPFIkkIHKJdmWdUdmwja9qENmnmVL7iSFrgMhBRuZadsD1gYb78liWHH/CT4
|
||||||
|
5zmVJ44LiON3DjmCP/gAbFe3epPifB5i6CIh+tolqG8fg9WyyWrP71Z+raaGtlV4
|
||||||
|
NIyybRJI/9Gjysf4aehpCtEKJf4BAy82lrfBhNhmHf16W65c0NCGMJoB9Wr+wZCd
|
||||||
|
R6PzcKgWNa33YVfXTD8PiTOU9cLRvRFgwO870f/8jekxVdHggfTdQmVj9rcNet6X
|
||||||
|
MrWvzUI4LnI2JPyyEpMtlAQnDQ2+aGG5A3GdPPkWeaST+vF6CDCTFkg8Dxw0jQ30
|
||||||
|
jc0uQv/zz0mFuqvvivgpGSXeuwIDAQABo4GeMIGbMB0GA1UdDgQWBBS8E5THWThf
|
||||||
|
TVAwTnGez4druLTacDAfBgNVHSMEGDAWgBS8E5THWThfTVAwTnGez4druLTacDAO
|
||||||
|
BgNVHQ8BAf8EBAMCBaAwIAYDVR0lAQH/BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
|
||||||
|
MCcGA1UdEQQgMB6CDCoubWlob3lvLmNvbYIOKi55dWFuc2hlbi5jb20wDQYJKoZI
|
||||||
|
hvcNAQELBQADggEBAIVqx99S1DYtyLqsi15KwTUawShW9iJVsvpk59vK6qbbzuGZ
|
||||||
|
L72DrRJVTMxodv4WLaiM+te1TsW0WmdrhUYUBfIi+JpB67QB6aWKkOCP8fYq+mWn
|
||||||
|
Q3vuAEC6KpWH30j+0S58LVV+2iaGVetXYmYDXKoNslyVuJAM4iZSutTZhctO2Fxm
|
||||||
|
Vicp0fiPq/HJzxsmKHxyFJsgsdV0Dl9ElnlhpH77qxi/nXuUz9YlWZwwQI8KSsKm
|
||||||
|
sOzTUpSHHHpDocT24Yx73bR3Hd8CJam2bCEOOIIJG7sPx2lhTEJ+sKHDh4jHmRUI
|
||||||
|
3rVk5R+x1CcIrAgin+8nH28PhZFdOKs+CYMYGk0=
|
||||||
|
-----END CERTIFICATE-----
|
28
cert/ys.key
Normal file
28
cert/ys.key
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCc8UiSQgcol2ZZ
|
||||||
|
1R2bCNr2oQ2aeZUvuJIWuAyEFG5lp2wPWBhvvyWJYcf8JPjnOZUnjguI43cOOYI/
|
||||||
|
+ABsV7d6k+J8HmLoIiH62iWobx+D1bLJas/vVn6tpoa2VXg0jLJtEkj/0aPKx/hp
|
||||||
|
6GkK0Qol/gEDLzaWt8GE2GYd/XpbrlzQ0IYwmgH1av7BkJ1Ho/NwqBY1rfdhV9dM
|
||||||
|
Pw+JM5T1wtG9EWDA7zvR//yN6TFV0eCB9N1CZWP2tw163pcyta/NQjgucjYk/LIS
|
||||||
|
ky2UBCcNDb5oYbkDcZ08+RZ5pJP68XoIMJMWSDwPHDSNDfSNzS5C//PPSYW6q++K
|
||||||
|
+CkZJd67AgMBAAECggEBAJv3KQC4f3a2Zu+1XBObTEc2rFcsprbi/MN5Km8EAuYg
|
||||||
|
6MGi8b3zvrD1rJGGiJj5X6IMhqgGLWXEfw1lP75ruZomZzij1fUNHqm1qyDlNfOF
|
||||||
|
JoUGEhiu43tc95kx/SB0Bklgl40rYFQAQH23itRGA4jYEVeBzwUfHkEP8QOyyKtc
|
||||||
|
YKJHa1jCEvE4XHxLqxFC+z7aNmpFonrW8OerVwrDPIkFbXYrC1alzxqMcNBJVeKE
|
||||||
|
LFFc6EK9ppoPSsm600yac5gOX2ima9JkaYkGKhK25D4NXCd511Ea/TJNctA8IkYA
|
||||||
|
QB7mCzLHdapRlhSplDwwwgNRzlrkImbqyS2+768ejYkCgYEAzyatfH62cDSDP5e1
|
||||||
|
oukWI46AqybfIhd9kHzIbIyPjuSb3RvvuxIfNBFjUxRyh+ggCjnRA14HcZzDcGRd
|
||||||
|
6VpApq80LQk6mhklKicJNRrcuEvdmj+kRJ+XtSbNZhJVUkNf7nmHCOoJkEwRsblL
|
||||||
|
kIZCVmfkWAKFjHnCEqH5RHvTbacCgYEAwfObyw0eMD+X23IpyEsCsTKIwIk4Zl8J
|
||||||
|
iTNnR9yp6B9JdwLSdEWQjhXSltkfmNZ3WXYoyh6kr3jp8d5EqWX1P8JrZBaZikTD
|
||||||
|
y526kKIvs/I/iW3obOoE6CX6LJEGob8bAPkvu2u37Rghign57W02fYtzJUuqPAoK
|
||||||
|
b5mtrQ/ycM0CgYBsR8pthgq1Mi3dAt82DeK9qVKGpGYEewTujttxKjQsPEFg3aZ9
|
||||||
|
Qaa/38rsdYa8ldCRp9EikncPoyLh0ATq4nti5bg/RlC0lipAE3GTqbvwNe/bHiMu
|
||||||
|
n8F8NpEtJq4ktwUhMbMtLLDdFXY2USY3oIZyhhHtEzxdxpN0i+gxLQzChwKBgQCG
|
||||||
|
FFztYGIwRKY8hI2x83km+qJjR/l/e8/h03Fg0oF7ALYO2hqXWsf2EcwFkJAxXoIf
|
||||||
|
jHniUJDU5agFFv0shlmm/Ea1aJI4bhVVG/MvrY+AvMWDwkFdmeJOgoKScKe/BZgr
|
||||||
|
chi3Xl5GP9pfzUnEAy4aWF7/t3E2FFLml7zi2RVnOQKBgQCYmzwikvHpR+HRiZL9
|
||||||
|
m0TB6mayGbwQO3xU/naZ1UyCydsRORQnbKaTWSMZgrr7nTAqDhegfUyJXX+uxhGQ
|
||||||
|
cGu9uLENZWrysXROpMZBhgyNUbDPdO0okIMoJ3kUSocC7L7lpWyZGOxgMwi0a4qK
|
||||||
|
nV1QDKXsA3oBZn9MJpkuQ81jCw==
|
||||||
|
-----END PRIVATE KEY-----
|
42
config.js
Normal file
42
config.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
module.exports = {
|
||||||
|
UdpListenIP: "127.0.0.1",
|
||||||
|
UdpListenPort: 22102,
|
||||||
|
|
||||||
|
UdpTargetIP: "47.90.134.247", // America: 47.90.134.247, Europe: 47.245.143.151
|
||||||
|
UdpTargetPort: 22102,
|
||||||
|
|
||||||
|
useDispatchServer: true,
|
||||||
|
|
||||||
|
ignoredProtos: [
|
||||||
|
// "QueryPathReq",
|
||||||
|
// "PingReq",
|
||||||
|
// "PingRsp",
|
||||||
|
"UnionCmdNotify",
|
||||||
|
// "EvtAiSyncCombatThreatInfoNotify",
|
||||||
|
// "WorldPlayerRTTNotify",
|
||||||
|
// "QueryPathRsp",
|
||||||
|
// "EvtAiSyncSkillCdNotify",
|
||||||
|
// "SetEntityClientDataNotify",
|
||||||
|
// "ObstacleModifyNotify",
|
||||||
|
// "ClientReportNotify",
|
||||||
|
// "ClientAbilityInitFinishNotify",
|
||||||
|
// "EntityConfigHashNotify",
|
||||||
|
// "MonsterAIConfigHashNotify",
|
||||||
|
// "EntityAiSyncNotify",
|
||||||
|
// //currently broken packets
|
||||||
|
"TakeAchievementRewardRsp",
|
||||||
|
"ActivityPlayOpenAnimNotify",
|
||||||
|
"FurnitureCurModuleArrangeCountNotify",
|
||||||
|
"HomeAvatarTalkFinishInfoNotify",
|
||||||
|
"GroupLinkAllNotify",
|
||||||
|
"UnlockedFurnitureSuiteDataNotify",
|
||||||
|
"HomeAvatarRewardEventNotify",
|
||||||
|
"H5ActivityIdsNotify",
|
||||||
|
"HomePriorCheckNotify",
|
||||||
|
"HomePlantInfoNotify",
|
||||||
|
"HomeResourceNotify",
|
||||||
|
"HomeAvatarAllFinishRewardNotify",
|
||||||
|
"HomeBasicInfoNotify",
|
||||||
|
"FurnitureMakeRsp"
|
||||||
|
]
|
||||||
|
}
|
7
data/MHYkeys.json
Normal file
7
data/MHYkeys.json
Normal file
File diff suppressed because one or more lines are too long
1205
data/packetIds.json
Normal file
1205
data/packetIds.json
Normal file
File diff suppressed because it is too large
Load Diff
18
data/proto/AISnapshotEntityData.proto
Normal file
18
data/proto/AISnapshotEntityData.proto
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AISnapshotEntitySkillCycle.proto";
|
||||||
|
|
||||||
|
message AISnapshotEntityData {
|
||||||
|
uint32 entity_id = 1;
|
||||||
|
float real_time = 2;
|
||||||
|
float tick_time = 3;
|
||||||
|
uint32 tactic = 4;
|
||||||
|
float distance_to_player = 5;
|
||||||
|
uint32 threat_list_size = 6;
|
||||||
|
uint32 threat_target_id = 7;
|
||||||
|
uint32 ai_target_id = 8;
|
||||||
|
uint32 attack_target_id = 9;
|
||||||
|
float moved_distance = 10;
|
||||||
|
repeated AISnapshotEntitySkillCycle finished_skill_cycles = 11;
|
||||||
|
map<uint32, uint32> hitting_avatars = 12;
|
||||||
|
}
|
10
data/proto/AISnapshotEntitySkillCycle.proto
Normal file
10
data/proto/AISnapshotEntitySkillCycle.proto
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AISnapshotEntitySkillCycle {
|
||||||
|
uint32 skill_id = 1;
|
||||||
|
bool selected = 2;
|
||||||
|
bool trydoskill = 3;
|
||||||
|
bool success = 4;
|
||||||
|
bool failed = 5;
|
||||||
|
}
|
7
data/proto/AISnapshotInfo.proto
Normal file
7
data/proto/AISnapshotInfo.proto
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AISnapshotEntityData.proto";
|
||||||
|
|
||||||
|
message AISnapshotInfo {
|
||||||
|
repeated AISnapshotEntityData ai_snapshots = 1;
|
||||||
|
}
|
8
data/proto/AbilityActionBlink.proto
Normal file
8
data/proto/AbilityActionBlink.proto
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Vector.proto";
|
||||||
|
|
||||||
|
message AbilityActionBlink {
|
||||||
|
Vector pos = 1;
|
||||||
|
Vector rot = 2;
|
||||||
|
}
|
9
data/proto/AbilityActionCreateGadget.proto
Normal file
9
data/proto/AbilityActionCreateGadget.proto
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Vector.proto";
|
||||||
|
|
||||||
|
message AbilityActionCreateGadget {
|
||||||
|
Vector pos = 1;
|
||||||
|
Vector rot = 2;
|
||||||
|
uint32 room_id = 3;
|
||||||
|
}
|
8
data/proto/AbilityActionCreateTile.proto
Normal file
8
data/proto/AbilityActionCreateTile.proto
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Vector.proto";
|
||||||
|
|
||||||
|
message AbilityActionCreateTile {
|
||||||
|
Vector pos = 1;
|
||||||
|
Vector rot = 2;
|
||||||
|
}
|
8
data/proto/AbilityActionDestroyTile.proto
Normal file
8
data/proto/AbilityActionDestroyTile.proto
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Vector.proto";
|
||||||
|
|
||||||
|
message AbilityActionDestroyTile {
|
||||||
|
Vector pos = 1;
|
||||||
|
Vector rot = 2;
|
||||||
|
}
|
7
data/proto/AbilityActionFireAfterImgae.proto
Normal file
7
data/proto/AbilityActionFireAfterImgae.proto
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Vector.proto";
|
||||||
|
|
||||||
|
message AbilityActionFireAfterImgae {
|
||||||
|
Vector dir = 1;
|
||||||
|
}
|
9
data/proto/AbilityActionGenerateElemBall.proto
Normal file
9
data/proto/AbilityActionGenerateElemBall.proto
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Vector.proto";
|
||||||
|
|
||||||
|
message AbilityActionGenerateElemBall {
|
||||||
|
Vector pos = 1;
|
||||||
|
Vector rot = 2;
|
||||||
|
uint32 room_id = 3;
|
||||||
|
}
|
6
data/proto/AbilityActionServerMonsterLog.proto
Normal file
6
data/proto/AbilityActionServerMonsterLog.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityActionServerMonsterLog {
|
||||||
|
repeated int32 param_list = 1;
|
||||||
|
}
|
8
data/proto/AbilityActionSetCrashDamage.proto
Normal file
8
data/proto/AbilityActionSetCrashDamage.proto
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Vector.proto";
|
||||||
|
|
||||||
|
message AbilityActionSetCrashDamage {
|
||||||
|
float damage = 1;
|
||||||
|
Vector hit_pos = 2;
|
||||||
|
}
|
6
data/proto/AbilityActionSetRandomOverrideMapValue.proto
Normal file
6
data/proto/AbilityActionSetRandomOverrideMapValue.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityActionSetRandomOverrideMapValue {
|
||||||
|
float random_value = 1;
|
||||||
|
}
|
8
data/proto/AbilityActionSummon.proto
Normal file
8
data/proto/AbilityActionSummon.proto
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Vector.proto";
|
||||||
|
|
||||||
|
message AbilityActionSummon {
|
||||||
|
Vector pos = 1;
|
||||||
|
Vector rot = 2;
|
||||||
|
}
|
6
data/proto/AbilityActionTriggerAbility.proto
Normal file
6
data/proto/AbilityActionTriggerAbility.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityActionTriggerAbility {
|
||||||
|
uint32 other_id = 1;
|
||||||
|
}
|
11
data/proto/AbilityAppliedAbility.proto
Normal file
11
data/proto/AbilityAppliedAbility.proto
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityString.proto";
|
||||||
|
import "AbilityScalarValueEntry.proto";
|
||||||
|
|
||||||
|
message AbilityAppliedAbility {
|
||||||
|
AbilityString ability_name = 1;
|
||||||
|
AbilityString ability_override = 2;
|
||||||
|
repeated AbilityScalarValueEntry override_map = 3;
|
||||||
|
uint32 instanced_ability_id = 4;
|
||||||
|
}
|
21
data/proto/AbilityAppliedModifier.proto
Normal file
21
data/proto/AbilityAppliedModifier.proto
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityString.proto";
|
||||||
|
import "AbilityAttachedModifier.proto";
|
||||||
|
import "ModifierDurability.proto";
|
||||||
|
|
||||||
|
message AbilityAppliedModifier {
|
||||||
|
int32 modifier_local_id = 1;
|
||||||
|
uint32 parent_ability_entity_id = 2;
|
||||||
|
AbilityString parent_ability_name = 3;
|
||||||
|
AbilityString parent_ability_override = 4;
|
||||||
|
uint32 instanced_ability_id = 5;
|
||||||
|
uint32 instanced_modifier_id = 6;
|
||||||
|
float exist_duration = 7;
|
||||||
|
AbilityAttachedModifier attached_instanced_modifier = 8;
|
||||||
|
uint32 apply_entity_id = 9;
|
||||||
|
bool is_attached_parent_ability = 10;
|
||||||
|
ModifierDurability modifier_durability = 11;
|
||||||
|
uint32 sbuff_uid = 12;
|
||||||
|
bool is_serverbuff_modifier = 13;
|
||||||
|
}
|
6
data/proto/AbilityApplyLevelModifier.proto
Normal file
6
data/proto/AbilityApplyLevelModifier.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityApplyLevelModifier {
|
||||||
|
uint32 apply_entity_id = 1;
|
||||||
|
}
|
10
data/proto/AbilityArgument.proto
Normal file
10
data/proto/AbilityArgument.proto
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityArgument {
|
||||||
|
oneof Arg {
|
||||||
|
uint32 int_arg = 1;
|
||||||
|
float float_arg = 2;
|
||||||
|
string str_arg = 3;
|
||||||
|
}
|
||||||
|
}
|
10
data/proto/AbilityAttachedModifier.proto
Normal file
10
data/proto/AbilityAttachedModifier.proto
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityAttachedModifier {
|
||||||
|
bool is_invalid = 1;
|
||||||
|
uint32 owner_entity_id = 2;
|
||||||
|
uint32 instanced_modifier_id = 3;
|
||||||
|
bool is_serverbuff_modifier = 4;
|
||||||
|
int32 attach_name_hash = 5;
|
||||||
|
}
|
9
data/proto/AbilityBornType.proto
Normal file
9
data/proto/AbilityBornType.proto
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Vector.proto";
|
||||||
|
|
||||||
|
message AbilityBornType {
|
||||||
|
Vector pos = 1;
|
||||||
|
Vector rot = 2;
|
||||||
|
Vector move_dir = 3;
|
||||||
|
}
|
16
data/proto/AbilityChangeNotify.proto
Normal file
16
data/proto/AbilityChangeNotify.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityControlBlock.proto";
|
||||||
|
|
||||||
|
message AbilityChangeNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 1112;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 entity_id = 1;
|
||||||
|
AbilityControlBlock ability_control_block = 2;
|
||||||
|
}
|
7
data/proto/AbilityControlBlock.proto
Normal file
7
data/proto/AbilityControlBlock.proto
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityEmbryo.proto";
|
||||||
|
|
||||||
|
message AbilityControlBlock {
|
||||||
|
repeated AbilityEmbryo ability_embryo_list = 1;
|
||||||
|
}
|
8
data/proto/AbilityEmbryo.proto
Normal file
8
data/proto/AbilityEmbryo.proto
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityEmbryo {
|
||||||
|
uint32 ability_id = 1;
|
||||||
|
fixed32 ability_name_hash = 2;
|
||||||
|
fixed32 ability_override_name_hash = 3;
|
||||||
|
}
|
6
data/proto/AbilityFloatValue.proto
Normal file
6
data/proto/AbilityFloatValue.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityFloatValue {
|
||||||
|
float value = 1;
|
||||||
|
}
|
8
data/proto/AbilityGadgetInfo.proto
Normal file
8
data/proto/AbilityGadgetInfo.proto
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityGadgetInfo {
|
||||||
|
uint32 camp_id = 1;
|
||||||
|
uint32 camp_target_type = 2;
|
||||||
|
uint32 target_entity_id = 3;
|
||||||
|
}
|
11
data/proto/AbilityIdentifier.proto
Normal file
11
data/proto/AbilityIdentifier.proto
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityIdentifier {
|
||||||
|
uint32 instanced_ability_id = 1;
|
||||||
|
uint32 ability_caster_id = 2;
|
||||||
|
int32 local_id = 3;
|
||||||
|
uint32 instanced_modifier_id = 4;
|
||||||
|
uint32 modifier_owner_id = 5;
|
||||||
|
bool is_serverbuff_modifier = 6;
|
||||||
|
}
|
17
data/proto/AbilityInvocationFailNotify.proto
Normal file
17
data/proto/AbilityInvocationFailNotify.proto
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityInvokeEntry.proto";
|
||||||
|
|
||||||
|
message AbilityInvocationFailNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 1200;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 entity_id = 1;
|
||||||
|
AbilityInvokeEntry invoke = 2;
|
||||||
|
string reason = 3;
|
||||||
|
}
|
21
data/proto/AbilityInvocationFixedNotify.proto
Normal file
21
data/proto/AbilityInvocationFixedNotify.proto
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityInvokeEntry.proto";
|
||||||
|
|
||||||
|
message AbilityInvocationFixedNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
IS_ALLOW_CLIENT = 1;
|
||||||
|
CMD_ID = 1149;
|
||||||
|
}
|
||||||
|
|
||||||
|
AbilityInvokeEntry invoke1_st = 1;
|
||||||
|
AbilityInvokeEntry invoke2_nd = 2;
|
||||||
|
AbilityInvokeEntry invoke3_rd = 3;
|
||||||
|
AbilityInvokeEntry invoke4_th = 4;
|
||||||
|
AbilityInvokeEntry invoke5_th = 5;
|
||||||
|
AbilityInvokeEntry invoke6_th = 6;
|
||||||
|
}
|
16
data/proto/AbilityInvocationsNotify.proto
Normal file
16
data/proto/AbilityInvocationsNotify.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityInvokeEntry.proto";
|
||||||
|
|
||||||
|
message AbilityInvocationsNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
IS_ALLOW_CLIENT = 1;
|
||||||
|
CMD_ID = 1118;
|
||||||
|
}
|
||||||
|
|
||||||
|
repeated AbilityInvokeEntry invokes = 1;
|
||||||
|
}
|
52
data/proto/AbilityInvokeArgument.proto
Normal file
52
data/proto/AbilityInvokeArgument.proto
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
enum AbilityInvokeArgument {
|
||||||
|
ABILITY_NONE = 0;
|
||||||
|
ABILITY_META_MODIFIER_CHANGE = 1;
|
||||||
|
ABILITY_META_COMMAND_MODIFIER_CHANGE_REQUEST = 2;
|
||||||
|
ABILITY_META_SPECIAL_FLOAT_ARGUMENT = 3;
|
||||||
|
ABILITY_META_OVERRIDE_PARAM = 4;
|
||||||
|
ABILITY_META_CLEAR_OVERRIDE_PARAM = 5;
|
||||||
|
ABILITY_META_REINIT_OVERRIDEMAP = 6;
|
||||||
|
ABILITY_META_GLOBAL_FLOAT_VALUE = 7;
|
||||||
|
ABILITY_META_CLEAR_GLOBAL_FLOAT_VALUE = 8;
|
||||||
|
ABILITY_META_ABILITY_ELEMENT_STRENGTH = 9;
|
||||||
|
ABILITY_META_ADD_OR_GET_ABILITY_AND_TRIGGER = 10;
|
||||||
|
ABILITY_META_SET_KILLED_SETATE = 11;
|
||||||
|
ABILITY_META_SET_ABILITY_TRIGGER = 12;
|
||||||
|
ABILITY_META_ADD_NEW_ABILITY = 13;
|
||||||
|
ABILITY_META_REMOVE_ABILITY = 14;
|
||||||
|
ABILITY_META_SET_MODIFIER_APPLY_ENTITY = 15;
|
||||||
|
ABILITY_META_MODIFIER_DURABILITY_CHANGE = 16;
|
||||||
|
ABILITY_META_ELEMENT_REACTION_VISUAL = 17;
|
||||||
|
ABILITY_META_SET_POSE_PARAMETER = 18;
|
||||||
|
ABILITY_META_UPDATE_BASE_REACTION_DAMAGE = 19;
|
||||||
|
ABILITY_META_TRIGGER_ELEMENT_REACTION = 20;
|
||||||
|
ABILITY_META_LOSE_HP = 21;
|
||||||
|
ABILITY_ACTION_TRIGGER_ABILITY = 50;
|
||||||
|
ABILITY_ACTION_SET_CRASH_DAMAGE = 51;
|
||||||
|
ABILITY_ACTION_EFFECT = 52;
|
||||||
|
ABILITY_ACTION_SUMMON = 53;
|
||||||
|
ABILITY_ACTION_BLINK = 54;
|
||||||
|
ABILITY_ACTION_CREATE_GADGET = 55;
|
||||||
|
ABILITY_ACTION_APPLY_LEVEL_MODIFIER = 56;
|
||||||
|
ABILITY_ACTION_GENERATE_ELEM_BALL = 57;
|
||||||
|
ABILITY_ACTION_SET_RANDOM_OVERRIDE_MAP_VALUE = 58;
|
||||||
|
ABILITY_ACTION_SERVER_MONSTER_LOG = 59;
|
||||||
|
ABILITY_ACTION_CREATE_TILE = 60;
|
||||||
|
ABILITY_ACTION_DESTROY_TILE = 61;
|
||||||
|
ABILITY_ACTION_FIRE_AFTER_IMAGE = 62;
|
||||||
|
ABILITY_MIXIN_AVATAR_STEER_BY_CAMERA = 100;
|
||||||
|
ABILITY_MIXIN_MONSTER_DEFEND = 101;
|
||||||
|
ABILITY_MIXIN_WIND_ZONE = 102;
|
||||||
|
ABILITY_MIXIN_COST_STAMINA = 103;
|
||||||
|
ABILITY_MIXIN_ELITE_SHIELD = 104;
|
||||||
|
ABILITY_MIXIN_ELEMENT_SHIELD = 105;
|
||||||
|
ABILITY_MIXIN_GLOBAL_SHIELD = 106;
|
||||||
|
ABILITY_MIXIN_SHIELD_BAR = 107;
|
||||||
|
ABILITY_MIXIN_WIND_SEED_SPAWNER = 108;
|
||||||
|
ABILITY_MIXIN_DO_ACTION_BY_ELEMENT_REACTION = 109;
|
||||||
|
ABILITY_MIXIN_FIELD_ENTITY_COUNT_CHANGE = 110;
|
||||||
|
ABILITY_MIXIN_SCENE_PROP_SYNC = 111;
|
||||||
|
ABILITY_MIXIN_WIDGET_MP_SUPPORT = 112;
|
||||||
|
}
|
16
data/proto/AbilityInvokeEntry.proto
Normal file
16
data/proto/AbilityInvokeEntry.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityInvokeEntryHead.proto";
|
||||||
|
import "AbilityInvokeArgument.proto";
|
||||||
|
import "ForwardType.proto";
|
||||||
|
|
||||||
|
message AbilityInvokeEntry {
|
||||||
|
AbilityInvokeEntryHead head = 1;
|
||||||
|
AbilityInvokeArgument argument_type = 2;
|
||||||
|
bytes ability_data = 3;
|
||||||
|
uint32 entity_id = 4;
|
||||||
|
ForwardType forward_type = 5;
|
||||||
|
uint32 forward_peer = 6;
|
||||||
|
uint32 event_id = 7;
|
||||||
|
double total_tick_time = 8;
|
||||||
|
}
|
12
data/proto/AbilityInvokeEntryHead.proto
Normal file
12
data/proto/AbilityInvokeEntryHead.proto
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityInvokeEntryHead {
|
||||||
|
uint32 instanced_ability_id = 1;
|
||||||
|
uint32 instanced_modifier_id = 2;
|
||||||
|
int32 local_id = 3;
|
||||||
|
int32 modifier_config_local_id = 4;
|
||||||
|
uint32 target_id = 5;
|
||||||
|
bool is_serverbuff_modifier = 6;
|
||||||
|
uint32 server_buff_uid = 7;
|
||||||
|
}
|
7
data/proto/AbilityMetaAddAbility.proto
Normal file
7
data/proto/AbilityMetaAddAbility.proto
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityAppliedAbility.proto";
|
||||||
|
|
||||||
|
message AbilityMetaAddAbility {
|
||||||
|
AbilityAppliedAbility ability = 1;
|
||||||
|
}
|
9
data/proto/AbilityMetaAddOrGetAbilityAndTrigger.proto
Normal file
9
data/proto/AbilityMetaAddOrGetAbilityAndTrigger.proto
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityString.proto";
|
||||||
|
|
||||||
|
message AbilityMetaAddOrGetAbilityAndTrigger {
|
||||||
|
AbilityString ability_name = 1;
|
||||||
|
AbilityString ability_override = 2;
|
||||||
|
float trigger_argument = 3;
|
||||||
|
}
|
9
data/proto/AbilityMetaElementReactionVisual.proto
Normal file
9
data/proto/AbilityMetaElementReactionVisual.proto
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMetaElementReactionVisual {
|
||||||
|
uint32 element_reaction_type = 1;
|
||||||
|
uint32 element_source_type = 2;
|
||||||
|
uint32 element_reactor_type = 3;
|
||||||
|
int32 hit_index = 4;
|
||||||
|
}
|
6
data/proto/AbilityMetaLoseHp.proto
Normal file
6
data/proto/AbilityMetaLoseHp.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMetaLoseHp {
|
||||||
|
uint32 lose_hp_config_idx = 1;
|
||||||
|
}
|
19
data/proto/AbilityMetaModifierChange.proto
Normal file
19
data/proto/AbilityMetaModifierChange.proto
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "ModifierAction.proto";
|
||||||
|
import "AbilityString.proto";
|
||||||
|
import "AbilityAttachedModifier.proto";
|
||||||
|
import "ModifierProperty.proto";
|
||||||
|
|
||||||
|
message AbilityMetaModifierChange {
|
||||||
|
ModifierAction action = 1;
|
||||||
|
AbilityString parent_ability_name = 2;
|
||||||
|
AbilityString parent_ability_override = 3;
|
||||||
|
AbilityAttachedModifier attached_instanced_modifier = 4;
|
||||||
|
repeated ModifierProperty properties = 5;
|
||||||
|
int32 modifier_local_id = 6;
|
||||||
|
bool is_mute_remote = 7;
|
||||||
|
uint32 apply_entity_id = 8;
|
||||||
|
bool is_attached_parent_ability = 9;
|
||||||
|
uint32 server_buff_uid = 10;
|
||||||
|
}
|
7
data/proto/AbilityMetaModifierDurabilityChange.proto
Normal file
7
data/proto/AbilityMetaModifierDurabilityChange.proto
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMetaModifierDurabilityChange {
|
||||||
|
float reduce_durability = 1;
|
||||||
|
float remain_durability = 2;
|
||||||
|
}
|
7
data/proto/AbilityMetaReInitOverrideMap.proto
Normal file
7
data/proto/AbilityMetaReInitOverrideMap.proto
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityScalarValueEntry.proto";
|
||||||
|
|
||||||
|
message AbilityMetaReInitOverrideMap {
|
||||||
|
repeated AbilityScalarValueEntry override_map = 1;
|
||||||
|
}
|
6
data/proto/AbilityMetaSetAbilityTrigger.proto
Normal file
6
data/proto/AbilityMetaSetAbilityTrigger.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMetaSetAbilityTrigger {
|
||||||
|
uint32 trigger_ability_entity_id = 1;
|
||||||
|
}
|
6
data/proto/AbilityMetaSetKilledState.proto
Normal file
6
data/proto/AbilityMetaSetKilledState.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMetaSetKilledState {
|
||||||
|
bool killed = 1;
|
||||||
|
}
|
6
data/proto/AbilityMetaSetModifierApplyEntityId.proto
Normal file
6
data/proto/AbilityMetaSetModifierApplyEntityId.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMetaSetModifierApplyEntityId {
|
||||||
|
uint32 apply_entity_id = 1;
|
||||||
|
}
|
7
data/proto/AbilityMetaSetPoseParameter.proto
Normal file
7
data/proto/AbilityMetaSetPoseParameter.proto
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AnimatorParameterValueInfoPair.proto";
|
||||||
|
|
||||||
|
message AbilityMetaSetPoseParameter {
|
||||||
|
AnimatorParameterValueInfoPair value = 1;
|
||||||
|
}
|
7
data/proto/AbilityMetaSpecialFloatArgument.proto
Normal file
7
data/proto/AbilityMetaSpecialFloatArgument.proto
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMetaSpecialFloatArgument {
|
||||||
|
float argument_value = 1;
|
||||||
|
bool is_on = 2;
|
||||||
|
}
|
10
data/proto/AbilityMetaTriggerElementReaction.proto
Normal file
10
data/proto/AbilityMetaTriggerElementReaction.proto
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMetaTriggerElementReaction {
|
||||||
|
uint32 element_reaction_type = 1;
|
||||||
|
uint32 element_source_type = 2;
|
||||||
|
uint32 element_reactor_type = 3;
|
||||||
|
int32 hit_index = 4;
|
||||||
|
uint32 trigger_entity_id = 5;
|
||||||
|
}
|
9
data/proto/AbilityMetaUpdateBaseReactionDamage.proto
Normal file
9
data/proto/AbilityMetaUpdateBaseReactionDamage.proto
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityString.proto";
|
||||||
|
|
||||||
|
message AbilityMetaUpdateBaseReactionDamage {
|
||||||
|
uint32 source_caster_id = 1;
|
||||||
|
uint32 reaction_type = 2;
|
||||||
|
AbilityString global_value_key = 3;
|
||||||
|
}
|
8
data/proto/AbilityMixinAvatarSteerByCamera.proto
Normal file
8
data/proto/AbilityMixinAvatarSteerByCamera.proto
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Vector.proto";
|
||||||
|
|
||||||
|
message AbilityMixinAvatarSteerByCamera {
|
||||||
|
Vector target_pos = 1;
|
||||||
|
Vector target_dir = 2;
|
||||||
|
}
|
6
data/proto/AbilityMixinCostStamina.proto
Normal file
6
data/proto/AbilityMixinCostStamina.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMixinCostStamina {
|
||||||
|
bool is_swim = 1;
|
||||||
|
}
|
6
data/proto/AbilityMixinDoActionByElementReaction.proto
Normal file
6
data/proto/AbilityMixinDoActionByElementReaction.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMixinDoActionByElementReaction {
|
||||||
|
uint32 target_entity_id = 1;
|
||||||
|
}
|
10
data/proto/AbilityMixinElementShield.proto
Normal file
10
data/proto/AbilityMixinElementShield.proto
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMixinElementShield {
|
||||||
|
float sub_shield = 1;
|
||||||
|
bool is_shield_broken = 2;
|
||||||
|
float shield = 3;
|
||||||
|
float max_shield = 4;
|
||||||
|
uint32 absorb_type = 5;
|
||||||
|
}
|
6
data/proto/AbilityMixinEliteShield.proto
Normal file
6
data/proto/AbilityMixinEliteShield.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMixinEliteShield {
|
||||||
|
float sub_shield = 1;
|
||||||
|
}
|
5
data/proto/AbilityMixinEmpty.proto
Normal file
5
data/proto/AbilityMixinEmpty.proto
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMixinEmpty {
|
||||||
|
}
|
6
data/proto/AbilityMixinFieldEntityCountChange.proto
Normal file
6
data/proto/AbilityMixinFieldEntityCountChange.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMixinFieldEntityCountChange {
|
||||||
|
uint32 field_entity_count = 1;
|
||||||
|
}
|
11
data/proto/AbilityMixinGlobalShield.proto
Normal file
11
data/proto/AbilityMixinGlobalShield.proto
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMixinGlobalShield {
|
||||||
|
float sub_shield = 1;
|
||||||
|
uint32 avatar_id = 2;
|
||||||
|
string shield_effect_name = 3;
|
||||||
|
float height_offset = 4;
|
||||||
|
bool is_create_effect = 5;
|
||||||
|
float max_shield = 6;
|
||||||
|
}
|
14
data/proto/AbilityMixinRecoverInfo.proto
Normal file
14
data/proto/AbilityMixinRecoverInfo.proto
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "MassivePropSyncInfo.proto";
|
||||||
|
|
||||||
|
message AbilityMixinRecoverInfo {
|
||||||
|
oneof Source {
|
||||||
|
uint32 instanced_ability_id = 1;
|
||||||
|
uint32 instanced_modifier_id = 2;
|
||||||
|
}
|
||||||
|
uint32 local_id = 3;
|
||||||
|
repeated uint32 data_list = 4;
|
||||||
|
bool is_serverbuff_modifier = 5;
|
||||||
|
repeated MassivePropSyncInfo massive_prop_list = 6;
|
||||||
|
}
|
9
data/proto/AbilityMixinScenePropSync.proto
Normal file
9
data/proto/AbilityMixinScenePropSync.proto
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "MassivePropSyncInfo.proto";
|
||||||
|
|
||||||
|
message AbilityMixinScenePropSync {
|
||||||
|
repeated MassivePropSyncInfo massive_prop_list = 1;
|
||||||
|
repeated int64 delete_id_list = 2;
|
||||||
|
bool is_clear_all = 3;
|
||||||
|
}
|
8
data/proto/AbilityMixinShieldBar.proto
Normal file
8
data/proto/AbilityMixinShieldBar.proto
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMixinShieldBar {
|
||||||
|
uint32 element_type = 1;
|
||||||
|
float shield = 2;
|
||||||
|
float max_shield = 3;
|
||||||
|
}
|
6
data/proto/AbilityMixinWidgetMpSupport.proto
Normal file
6
data/proto/AbilityMixinWidgetMpSupport.proto
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMixinWidgetMpSupport {
|
||||||
|
uint32 target_entity_id = 1;
|
||||||
|
}
|
20
data/proto/AbilityMixinWindSeedSpawner.proto
Normal file
20
data/proto/AbilityMixinWindSeedSpawner.proto
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Vector.proto";
|
||||||
|
|
||||||
|
message AbilityMixinWindSeedSpawner {
|
||||||
|
message AddSignal {
|
||||||
|
}
|
||||||
|
message RefreshSeed {
|
||||||
|
repeated Vector pos_list = 1;
|
||||||
|
}
|
||||||
|
message CatchSeed {
|
||||||
|
uint32 entity_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
oneof Cmd {
|
||||||
|
AddSignal add_signal = 1;
|
||||||
|
RefreshSeed refresh_seed = 2;
|
||||||
|
CatchSeed catch_seed = 3;
|
||||||
|
}
|
||||||
|
}
|
7
data/proto/AbilityMixinWindZone.proto
Normal file
7
data/proto/AbilityMixinWindZone.proto
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityMixinWindZone {
|
||||||
|
repeated uint32 entity_ids = 1;
|
||||||
|
repeated uint32 zone_id_list = 2;
|
||||||
|
}
|
11
data/proto/AbilityScalarType.proto
Normal file
11
data/proto/AbilityScalarType.proto
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
enum AbilityScalarType {
|
||||||
|
UNKNOW = 0;
|
||||||
|
FLOAT = 1;
|
||||||
|
INT = 2;
|
||||||
|
BOOL = 3;
|
||||||
|
TRIGGER = 4;
|
||||||
|
STRING = 5;
|
||||||
|
UINT = 6;
|
||||||
|
}
|
15
data/proto/AbilityScalarValueEntry.proto
Normal file
15
data/proto/AbilityScalarValueEntry.proto
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityString.proto";
|
||||||
|
import "AbilityScalarType.proto";
|
||||||
|
|
||||||
|
message AbilityScalarValueEntry {
|
||||||
|
oneof Value {
|
||||||
|
float float_value = 3;
|
||||||
|
string string_value = 4;
|
||||||
|
int32 int_value = 5;
|
||||||
|
uint32 uint_value = 6;
|
||||||
|
}
|
||||||
|
AbilityString key = 1;
|
||||||
|
AbilityScalarType value_type = 2;
|
||||||
|
}
|
9
data/proto/AbilityString.proto
Normal file
9
data/proto/AbilityString.proto
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AbilityString {
|
||||||
|
oneof Type {
|
||||||
|
string str = 1;
|
||||||
|
uint32 hash = 2;
|
||||||
|
}
|
||||||
|
}
|
15
data/proto/AbilitySyncStateInfo.proto
Normal file
15
data/proto/AbilitySyncStateInfo.proto
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "AbilityScalarValueEntry.proto";
|
||||||
|
import "AbilityAppliedAbility.proto";
|
||||||
|
import "AbilityAppliedModifier.proto";
|
||||||
|
import "AbilityMixinRecoverInfo.proto";
|
||||||
|
|
||||||
|
message AbilitySyncStateInfo {
|
||||||
|
bool is_inited = 1;
|
||||||
|
repeated AbilityScalarValueEntry dynamic_value_map = 2;
|
||||||
|
repeated AbilityAppliedAbility applied_abilities = 3;
|
||||||
|
repeated AbilityAppliedModifier applied_modifiers = 4;
|
||||||
|
repeated AbilityMixinRecoverInfo mixin_recover_infos = 5;
|
||||||
|
repeated AbilityScalarValueEntry sgv_dynamic_value_map = 6;
|
||||||
|
}
|
16
data/proto/AcceptCityReputationRequestReq.proto
Normal file
16
data/proto/AcceptCityReputationRequestReq.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AcceptCityReputationRequestReq {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
IS_ALLOW_CLIENT = 1;
|
||||||
|
CMD_ID = 2842;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 city_id = 1;
|
||||||
|
uint32 request_id = 2;
|
||||||
|
}
|
16
data/proto/AcceptCityReputationRequestRsp.proto
Normal file
16
data/proto/AcceptCityReputationRequestRsp.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message AcceptCityReputationRequestRsp {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 2861;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 retcode = 1;
|
||||||
|
uint32 city_id = 2;
|
||||||
|
uint32 request_id = 3;
|
||||||
|
}
|
21
data/proto/AccountType.proto
Normal file
21
data/proto/AccountType.proto
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
enum AccountType {
|
||||||
|
ACCOUNT_MIHOYO_GUEST = 0;
|
||||||
|
ACCOUNT_MIHOYO = 1;
|
||||||
|
ACCOUNT_XIAOMI = 11;
|
||||||
|
ACCOUNT_COOLPAD = 12;
|
||||||
|
ACCOUNT_YYB = 13;
|
||||||
|
ACCOUNT_BILI = 14;
|
||||||
|
ACCOUNT_HUAWEI = 15;
|
||||||
|
ACCOUNT_MEIZU = 16;
|
||||||
|
ACCOUNT360 = 17;
|
||||||
|
ACCOUNT_OPPO = 18;
|
||||||
|
ACCOUNT_VIVO = 19;
|
||||||
|
ACCOUNT_UC = 20;
|
||||||
|
ACCOUNT_WANDOJIA = 21;
|
||||||
|
ACCOUNT_LENOVO = 22;
|
||||||
|
ACCOUNT_JINLI = 23;
|
||||||
|
ACCOUNT_BAIDU = 25;
|
||||||
|
ACCOUNT_DANGLE = 26;
|
||||||
|
}
|
17
data/proto/Achievement.proto
Normal file
17
data/proto/Achievement.proto
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message Achievement {
|
||||||
|
enum Status {
|
||||||
|
INVALID = 0;
|
||||||
|
UNFINISHED = 1;
|
||||||
|
FINISHED = 2;
|
||||||
|
REWARD_TAKEN = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 id = 1;
|
||||||
|
Status status = 2;
|
||||||
|
uint32 cur_progress = 3;
|
||||||
|
uint32 total_progress = 4;
|
||||||
|
uint32 finish_timestamp = 5;
|
||||||
|
}
|
16
data/proto/AchievementAllDataNotify.proto
Normal file
16
data/proto/AchievementAllDataNotify.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Achievement.proto";
|
||||||
|
|
||||||
|
message AchievementAllDataNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 2653;
|
||||||
|
}
|
||||||
|
|
||||||
|
repeated Achievement achievement_list = 1;
|
||||||
|
repeated uint32 reward_taken_goal_id_list = 2;
|
||||||
|
}
|
15
data/proto/AchievementUpdateNotify.proto
Normal file
15
data/proto/AchievementUpdateNotify.proto
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Achievement.proto";
|
||||||
|
|
||||||
|
message AchievementUpdateNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 2693;
|
||||||
|
}
|
||||||
|
|
||||||
|
repeated Achievement achievement_list = 1;
|
||||||
|
}
|
209
data/proto/ActionReasonType.proto
Normal file
209
data/proto/ActionReasonType.proto
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
enum ActionReasonType {
|
||||||
|
ACTION_REASON_NONE = 0;
|
||||||
|
ACTION_REASON_QUEST_ITEM = 1;
|
||||||
|
ACTION_REASON_QUEST_REWARD = 2;
|
||||||
|
ACTION_REASON_TRIFLE = 3;
|
||||||
|
ACTION_REASON_SHOP = 4;
|
||||||
|
ACTION_REASON_PLAYER_UPGRADE_REWARD = 5;
|
||||||
|
ACTION_REASON_ADD_AVATAR = 6;
|
||||||
|
ACTION_REASON_GADGET_ENV_ANIMAL = 7;
|
||||||
|
ACTION_REASON_MONSTER_ENV_ANIMAL = 8;
|
||||||
|
ACTION_REASON_COMPOUND = 9;
|
||||||
|
ACTION_REASON_COOK = 10;
|
||||||
|
ACTION_REASON_GATHER = 11;
|
||||||
|
ACTION_REASON_MAIL_ATTACHMENT = 12;
|
||||||
|
ACTION_REASON_CITY_LEVELUP_RETURN = 15;
|
||||||
|
ACTION_REASON_CITY_LEVELUP_REWARD = 17;
|
||||||
|
ACTION_REASON_AREA_EXPLORE_REWARD = 18;
|
||||||
|
ACTION_REASON_UNLOCK_POINT_REWARD = 19;
|
||||||
|
ACTION_REASON_DUNGEON_FIRST_PASS = 20;
|
||||||
|
ACTION_REASON_DUNGEON_PASS = 21;
|
||||||
|
ACTION_REASON_CHANGE_ELEM_TYPE = 23;
|
||||||
|
ACTION_REASON_FETTER_OPEN = 25;
|
||||||
|
ACTION_REASON_DAILY_TASK_SCORE = 26;
|
||||||
|
ACTION_REASON_DAILY_TASK_HOST = 27;
|
||||||
|
ACTION_REASON_RAND_TASK_HOST = 28;
|
||||||
|
ACTION_REASON_EXPEDITION = 29;
|
||||||
|
ACTION_REASON_GACHA = 30;
|
||||||
|
ACTION_REASON_COMBINE = 31;
|
||||||
|
ACTION_REASON_RAND_TASK_GUEST = 32;
|
||||||
|
ACTION_REASON_DAILY_TASK_GUEST = 33;
|
||||||
|
ACTION_REASON_FORGE_OUTPUT = 34;
|
||||||
|
ACTION_REASON_FORGE_RETURN = 35;
|
||||||
|
ACTION_REASON_INIT_AVATAR = 36;
|
||||||
|
ACTION_REASON_MONSTER_DIE = 37;
|
||||||
|
ACTION_REASON_GM = 38;
|
||||||
|
ACTION_REASON_OPEN_CHEST = 39;
|
||||||
|
ACTION_REASON_GADGET_DIE = 40;
|
||||||
|
ACTION_REASON_MONSTER_CHANGE_HP = 41;
|
||||||
|
ACTION_REASON_SUBFIELD_DROP = 42;
|
||||||
|
ACTION_REASON_PUSH_TIPS_REWARD = 43;
|
||||||
|
ACTION_REASON_ACTIVITY_MONSTER_DROP = 44;
|
||||||
|
ACTION_REASON_ACTIVITY_GATHER = 45;
|
||||||
|
ACTION_REASON_ACTIVITY_SUBFIELD_DROP = 46;
|
||||||
|
ACTION_REASON_TOWER_SCHEDULE_REWARD = 47;
|
||||||
|
ACTION_REASON_TOWER_FLOOR_STAR_REWARD = 48;
|
||||||
|
ACTION_REASON_TOWER_FIRST_PASS_REWARD = 49;
|
||||||
|
ACTION_REASON_TOWER_DAILY_REWARD = 50;
|
||||||
|
ACTION_REASON_HIT_CLIENT_TRIVIAL_ENTITY = 51;
|
||||||
|
ACTION_REASON_OPEN_WORLD_BOSS_CHEST = 52;
|
||||||
|
ACTION_REASON_MATERIAL_DELETE_RETURN = 53;
|
||||||
|
ACTION_REASON_SIGN_IN_REWARD = 54;
|
||||||
|
ACTION_REASON_OPEN_BLOSSOM_CHEST = 55;
|
||||||
|
ACTION_REASON_RECHARGE = 56;
|
||||||
|
ACTION_REASON_BONUS_ACTIVITY_REWARD = 57;
|
||||||
|
ACTION_REASON_TOWER_COMMEMORATIVE_REWARD = 58;
|
||||||
|
ACTION_REASON_TOWER_SKIP_FLOOR_REWARD = 59;
|
||||||
|
ACTION_REASON_RECHARGE_BONUS = 60;
|
||||||
|
ACTION_REASON_RECHARGE_CARD = 61;
|
||||||
|
ACTION_REASON_RECHARGE_CARD_DAILY = 62;
|
||||||
|
ACTION_REASON_RECHARGE_CARD_REPLACE = 63;
|
||||||
|
ACTION_REASON_RECHARGE_CARD_REPLACE_FREE = 64;
|
||||||
|
ACTION_REASON_RECHARGE_PLAY_REPLACE = 65;
|
||||||
|
ACTION_REASON_MP_PLAY_TAKE_REWARD = 66;
|
||||||
|
ACTION_REASON_ACTIVITY_WATCHER = 67;
|
||||||
|
ACTION_REASON_SALESMAN_DELIVER_ITEM = 68;
|
||||||
|
ACTION_REASON_SALESMAN_REWARD = 69;
|
||||||
|
ACTION_REASON_REBATE = 70;
|
||||||
|
ACTION_REASON_MCOIN_EXCHANGE_HCOIN = 71;
|
||||||
|
ACTION_REASON_DAILY_TASK_EXCHANGE_LEGENDARY_KEY = 72;
|
||||||
|
ACTION_REASON_UNLOCK_PERSON_LINE = 73;
|
||||||
|
ACTION_REASON_FETTER_LEVEL_REWARD = 74;
|
||||||
|
ACTION_REASON_BUY_RESIN = 75;
|
||||||
|
ACTION_REASON_RECHARGE_PACKAGE = 76;
|
||||||
|
ACTION_REASON_DELIVERY_DAILY_REWARD = 77;
|
||||||
|
ACTION_REASON_CITY_REPUTATION_LEVEL = 78;
|
||||||
|
ACTION_REASON_CITY_REPUTATION_QUEST = 79;
|
||||||
|
ACTION_REASON_CITY_REPUTATION_REQUEST = 80;
|
||||||
|
ACTION_REASON_CITY_REPUTATION_EXPLORE = 81;
|
||||||
|
ACTION_REASON_OFFERGING_LEVEL = 82;
|
||||||
|
ACTION_REASON_ROUTINE_HOST = 83;
|
||||||
|
ACTION_REASON_ROUTINE_GUEST = 84;
|
||||||
|
ACTION_REASON_TREASURE_MAP_SPOT_TOKEN = 89;
|
||||||
|
ACTION_REASON_TREASURE_MAP_BONUS_LEVEL_REWARD = 90;
|
||||||
|
ACTION_REASON_TREASURE_MAP_MP_REWARD = 91;
|
||||||
|
ACTION_REASON_CONVERT = 92;
|
||||||
|
ACTION_REASON_OVERFLOW_TRANSFORM = 93;
|
||||||
|
ACTION_REASON_ACTIVITY_AVATAR_SELECTION_REWARD = 96;
|
||||||
|
ACTION_REASON_ACTIVITY_WATCHER_BATCH = 97;
|
||||||
|
ACTION_REASON_HIT_TREE_DROP = 98;
|
||||||
|
ACTION_REASON_GET_HOME_LEVELUP_REWARD = 99;
|
||||||
|
ACTION_REASON_HOME_DEFAULT_FURNITURE = 100;
|
||||||
|
ACTION_REASON_ACTIVITY_COND = 101;
|
||||||
|
ACTION_REASON_BATTLE_PASS_NOTIFY = 102;
|
||||||
|
ACTION_REASON_RELIQUARY_DECOMPOSE = 103;
|
||||||
|
ACTION_REASON_RECHARGE_GOOGLE_GIFT_GARD = 104;
|
||||||
|
ACTION_REASON_RECHARGE_CONCERT_PRODUCT = 105;
|
||||||
|
ACTION_REASON_RECHARGE_CONCERT_PRODUCT_REPLACE = 106;
|
||||||
|
ACTION_REASON_SEND_CONCERT_PRODUCT_BY_MUIP = 107;
|
||||||
|
ACTION_REASON_RECHARGE_APPLE_GIFT_GARD = 108;
|
||||||
|
ACTION_REASON_PLAYER_USE_ITEM = 1001;
|
||||||
|
ACTION_REASON_DROP_ITEM = 1002;
|
||||||
|
ACTION_REASON_WEAPON_UPGRADE = 1011;
|
||||||
|
ACTION_REASON_WEAPON_PROMOTE = 1012;
|
||||||
|
ACTION_REASON_WEAPON_AWAKEN = 1013;
|
||||||
|
ACTION_REASON_RELIC_UPGRADE = 1014;
|
||||||
|
ACTION_REASON_ABILITY = 1015;
|
||||||
|
ACTION_REASON_DUNGEON_STATUE_DROP = 1016;
|
||||||
|
ACTION_REASON_OFFLINE_MSG = 1017;
|
||||||
|
ACTION_REASON_AVATAR_UPGRADE = 1018;
|
||||||
|
ACTION_REASON_AVATAR_PROMOTE = 1019;
|
||||||
|
ACTION_REASON_QUEST_ACTION = 1021;
|
||||||
|
ACTION_REASON_CITY_LEVELUP = 1022;
|
||||||
|
ACTION_REASON_UPGRADE_SKILL = 1024;
|
||||||
|
ACTION_REASON_UNLOCK_TALENT = 1025;
|
||||||
|
ACTION_REASON_UPGRADE_PROUD_SKILL = 1026;
|
||||||
|
ACTION_REASON_PLAYER_LEVEL_LIMIT_UP = 1027;
|
||||||
|
ACTION_REASON_DUNGEON_DAILY = 1028;
|
||||||
|
ACTION_REASON_ITEM_GIVING = 1030;
|
||||||
|
ACTION_REASON_FORGE_COST = 1031;
|
||||||
|
ACTION_REASON_INVESTIGATION_REWARD = 1032;
|
||||||
|
ACTION_REASON_INVESTIGATION_TARGET_REWARD = 1033;
|
||||||
|
ACTION_REASON_GADGET_INTERACT = 1034;
|
||||||
|
ACTION_REASON_SEA_LAMP_CI_MATERIAL = 1036;
|
||||||
|
ACTION_REASON_SEA_LAMP_CONTRIBUTION_REWARD = 1037;
|
||||||
|
ACTION_REASON_SEA_LAMP_PHASE_REWARD = 1038;
|
||||||
|
ACTION_REASON_SEA_LAMP_FLY_LAMP = 1039;
|
||||||
|
ACTION_REASON_AUTO_RECOVER = 1040;
|
||||||
|
ACTION_REASON_ACTIVITY_EXPIRE_ITEM = 1041;
|
||||||
|
ACTION_REASON_SUB_COIN_NEGATIVE = 1042;
|
||||||
|
ACTION_REASON_BARGAIN_DEDUCT = 1043;
|
||||||
|
ACTION_REASON_BATTLE_PASS_PAID_REWARD = 1044;
|
||||||
|
ACTION_REASON_BATTLE_PASS_LEVEL_REWARD = 1045;
|
||||||
|
ACTION_REASON_TRIAL_AVATAR_ACTIVITY_FIRST_PASS_REWARD = 1046;
|
||||||
|
ACTION_REASON_BUY_BATTLE_PASS_LEVEL = 1047;
|
||||||
|
ACTION_REASON_GRANT_BIRTHDAY_BENEFIT = 1048;
|
||||||
|
ACTION_REASON_ACHIEVEMENT_REWARD = 1049;
|
||||||
|
ACTION_REASON_ACHIEVEMENT_GOAL_REWARD = 1050;
|
||||||
|
ACTION_REASON_FIRST_SHARE_TO_SOCIAL_NETWORK = 1051;
|
||||||
|
ACTION_REASON_DESTROY_MATERIAL = 1052;
|
||||||
|
ACTION_REASON_CODEX_LEVELUP_REWARD = 1053;
|
||||||
|
ACTION_REASON_HUNTING_OFFER_REWARD = 1054;
|
||||||
|
ACTION_REASON_USE_WIDGET_ANCHOR_POINT = 1055;
|
||||||
|
ACTION_REASON_USE_WIDGET_BONFIRE = 1056;
|
||||||
|
ACTION_REASON_UNGRADE_WEAPON_RETURN_MATERIAL = 1057;
|
||||||
|
ACTION_REASON_USE_WIDGET_ONEOFF_GATHER_POINT_DETECTOR = 1058;
|
||||||
|
ACTION_REASON_USE_WIDGET_CLIENT_COLLECTOR = 1059;
|
||||||
|
ACTION_REASON_USE_WIDGET_CLIENT_DETECTOR = 1060;
|
||||||
|
ACTION_REASON_TAKE_GENERAL_REWARD = 1061;
|
||||||
|
ACTION_REASON_ASTER_TAKE_SPECIAL_REWARD = 1062;
|
||||||
|
ACTION_REASON_REMOVE_CODEX_BOOK = 1063;
|
||||||
|
ACTION_REASON_OFFERING_ITEM = 1064;
|
||||||
|
ACTION_REASON_USE_WIDGET_GADGET_BUILDER = 1065;
|
||||||
|
ACTION_REASON_EFFIGY_FIRST_PASS_REWARD = 1066;
|
||||||
|
ACTION_REASON_EFFIGY_REWARD = 1067;
|
||||||
|
ACTION_REASON_REUNION_FIRST_GIFT_REWARD = 1068;
|
||||||
|
ACTION_REASON_REUNION_SIGN_IN_REWARD = 1069;
|
||||||
|
ACTION_REASON_REUNION_WATCHER_REWARD = 1070;
|
||||||
|
ACTION_REASON_SALESMAN_MP_REWARD = 1071;
|
||||||
|
ACTION_REASION_AVATAR_PROMOTE_REWARD = 1072;
|
||||||
|
ACTION_REASON_BLESSING_REDEEM_REWARD = 1073;
|
||||||
|
ACTION_MIRACLE_RING_REWARD = 1074;
|
||||||
|
ACTION_REASON_EXPEDITION_REWARD = 1075;
|
||||||
|
ACTION_REASON_TREASURE_MAP_REMOVE_DETECTOR = 1076;
|
||||||
|
ACTION_REASON_MECHANICUS_DUNGEON_TICKET = 1077;
|
||||||
|
ACTION_REASON_MECHANICUS_LEVELUP_GEAR = 1078;
|
||||||
|
ACTION_REASON_MECHANICUS_BATTLE_SETTLE = 1079;
|
||||||
|
ACTION_REASON_REGION_SEARCH_REWARD = 1080;
|
||||||
|
ACTION_REASON_UNLOCK_COOP_CHAPTER = 1081;
|
||||||
|
ACTION_REASON_TAKE_COOP_REWARD = 1082;
|
||||||
|
ACTION_REASON_FLEUR_FAIR_DUNGEON_REWARD = 1083;
|
||||||
|
ACTION_REASON_ACTIVITY_SCORE = 1084;
|
||||||
|
ACTION_REASON_CHANNELLER_SLAB_ONEOFF_DUNGEON_REWARD = 1085;
|
||||||
|
ACTION_REASON_FURNITURE_MAKE_START = 1086;
|
||||||
|
ACTION_REASON_FURNITURE_MAKE_TAKE = 1087;
|
||||||
|
ACTION_REASON_FURNITURE_MAKE_CANCEL = 1088;
|
||||||
|
ACTION_REASON_FURNITURE_MAKE_FAST_FINISH = 1089;
|
||||||
|
ACTION_REASON_CHANNELLER_SLAB_LOOP_DUNGEON_FIRST_PASS_REWARD = 1090;
|
||||||
|
ACTION_REASON_CHANNELLER_SLAB_LOOP_DUNGEON_SCORE_REWARD = 1091;
|
||||||
|
ACTION_REASON_HOME_LIMITED_SHOP_BUY = 1092;
|
||||||
|
ACTION_REASON_HOME_COIN_COLLECT = 1093;
|
||||||
|
ACTION_REASON_SUMMER_TIME_SENTRY_TOWER_REWARD = 1094;
|
||||||
|
ACTION_REASON_SUMMER_TIME_SPRINT_BOAT_REWARD = 1095;
|
||||||
|
ACTION_REASON_SUMMER_TIME_BOSS_REWARD = 1096;
|
||||||
|
ACTION_REASON_SUMMER_TIME_BOMB_REWARD = 1097;
|
||||||
|
ACTION_REASON_HOME_FETTER_COLLECT = 1098;
|
||||||
|
ACTION_REASON_ECHO_SHELL_REWARD = 1099;
|
||||||
|
ACTION_REASON_HOME_EVENT_REWARD = 1100;
|
||||||
|
ACTION_REASON_BLITZ_RUSH_DUNGEON_REWARD = 1101;
|
||||||
|
ACTION_REASON_FURNITURE_MAKE_RETURN = 1102;
|
||||||
|
ACTION_REASON_HOME_PLANT_BOX_GATHER = 1103;
|
||||||
|
ACTION_REASON_HOME_PLANT_SEED = 1104;
|
||||||
|
ACTION_REASON_HOME_PLANT_GATHER = 1105;
|
||||||
|
ACTION_REASON_CHESS_DUNGEON_REWARD = 1106;
|
||||||
|
ACTION_REASON_GROUP_LINK_BUNDLE_FINISH = 1107;
|
||||||
|
ACTION_REASON_LUNA_RITE_SACRIFICE = 1108;
|
||||||
|
ACTION_REASON_LUNA_RITE_TAKE_SACRIFICE_REWARD = 1109;
|
||||||
|
ACTION_REASON_FISH_BITE = 1110;
|
||||||
|
ACTION_REASON_FISH_SUCC = 1111;
|
||||||
|
ACTION_REASON_PLANT_FLOWER_REWARD = 1112;
|
||||||
|
ACTION_REASON_PLANT_FLOWER_DELIVER_ITEM = 1113;
|
||||||
|
ACTION_REASON_PLANT_FLOWER_GIVE_FLOWER = 1114;
|
||||||
|
ACTION_REASON_PLANT_FLOWER_RECV_FLOWER = 1115;
|
||||||
|
ACTION_REASON_ROGUE_CHALLENGE_SETTLE = 1116;
|
||||||
|
ACTION_REASON_ROGUE_TAKE_FIRST_PASS_REWARD = 1117;
|
||||||
|
ACTION_REASON_ROGUE_UPGRADE_SHIKIGAMI = 1118;
|
||||||
|
ACTION_REASON_ROGUE_REFRESH_CARD = 1119;
|
||||||
|
}
|
16
data/proto/ActivityCoinInfoNotify.proto
Normal file
16
data/proto/ActivityCoinInfoNotify.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivityCoinInfoNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 2151;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 schedule_id = 1;
|
||||||
|
map<uint32, uint32> activity_coin_map = 2;
|
||||||
|
uint32 activity_id = 3;
|
||||||
|
}
|
20
data/proto/ActivityCondStateChangeNotify.proto
Normal file
20
data/proto/ActivityCondStateChangeNotify.proto
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Uint32Pair.proto";
|
||||||
|
|
||||||
|
message ActivityCondStateChangeNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 2166;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 schedule_id = 1;
|
||||||
|
uint32 activity_id = 2;
|
||||||
|
repeated uint32 meet_cond_list = 3;
|
||||||
|
repeated uint32 expire_cond_list = 4;
|
||||||
|
repeated uint32 activated_sale_id_list = 5;
|
||||||
|
repeated Uint32Pair disable_transfer_point_interaction_list = 6;
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "Uint32Pair.proto";
|
||||||
|
|
||||||
|
message ActivityDisableTransferPointInteractionNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 8016;
|
||||||
|
}
|
||||||
|
|
||||||
|
Uint32Pair scene_point_pair = 1;
|
||||||
|
bool is_disable = 2;
|
||||||
|
}
|
92
data/proto/ActivityInfo.proto
Normal file
92
data/proto/ActivityInfo.proto
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "SeaLampActivityDetailInfo.proto";
|
||||||
|
import "CrucibleActivityDetailInfo.proto";
|
||||||
|
import "SalesmanActivityDetailInfo.proto";
|
||||||
|
import "TrialAvatarActivityDetailInfo.proto";
|
||||||
|
import "DeliveryActivityDetailInfo.proto";
|
||||||
|
import "AsterActivityDetailInfo.proto";
|
||||||
|
import "FlightActivityDetailInfo.proto";
|
||||||
|
import "DragonSpineActivityDetailInfo.proto";
|
||||||
|
import "EffigyActivityDetailInfo.proto";
|
||||||
|
import "TreasureMapActivityDetailInfo.proto";
|
||||||
|
import "BlessingActivityDetailInfo.proto";
|
||||||
|
import "SeaLampActivityInfo.proto";
|
||||||
|
import "ExpeditionActivityDetailInfo.proto";
|
||||||
|
import "ArenaChallengeActivityDetailInfo.proto";
|
||||||
|
import "FleurFairActivityDetailInfo.proto";
|
||||||
|
import "WaterSpiritActivityDetailInfo.proto";
|
||||||
|
import "ChannelerSlabActivityDetailInfo.proto";
|
||||||
|
import "MistTrialActivityDetailInfo.proto";
|
||||||
|
import "HideAndSeekActivityDetailInfo.proto";
|
||||||
|
import "FindHilichurlDetailInfo.proto";
|
||||||
|
import "SummerTimeDetailInfo.proto";
|
||||||
|
import "BuoyantCombatDetailInfo.proto";
|
||||||
|
import "EchoShellDetailInfo.proto";
|
||||||
|
import "BounceConjuringActivityDetailInfo.proto";
|
||||||
|
import "BlitzRushActivityDetailInfo.proto";
|
||||||
|
import "ChessActivityDetailInfo.proto";
|
||||||
|
import "SumoActivityDetailInfo.proto";
|
||||||
|
import "MoonfinTrialActivityDetailInfo.proto";
|
||||||
|
import "LunaRiteDetailInfo.proto";
|
||||||
|
import "PlantFlowerActivityDetailInfo.proto";
|
||||||
|
import "MusicGameActivityDetailInfo.proto";
|
||||||
|
import "RoguelikeDungeonActivityDetailInfo.proto";
|
||||||
|
import "DigActivityDetailInfo.proto";
|
||||||
|
import "ActivityWatcherInfo.proto";
|
||||||
|
|
||||||
|
message ActivityInfo {
|
||||||
|
oneof Detail {
|
||||||
|
SeaLampActivityDetailInfo sam_lamp_info = 11;
|
||||||
|
CrucibleActivityDetailInfo crucible_info = 12;
|
||||||
|
SalesmanActivityDetailInfo salesman_info = 13;
|
||||||
|
TrialAvatarActivityDetailInfo trial_avatar_info = 14;
|
||||||
|
DeliveryActivityDetailInfo delivery_info = 16;
|
||||||
|
AsterActivityDetailInfo aster_info = 21;
|
||||||
|
FlightActivityDetailInfo flight_info = 25;
|
||||||
|
DragonSpineActivityDetailInfo dragon_spine_info = 31;
|
||||||
|
EffigyActivityDetailInfo effigy_info = 32;
|
||||||
|
TreasureMapActivityDetailInfo treasure_map_info = 35;
|
||||||
|
BlessingActivityDetailInfo blessing_info = 41;
|
||||||
|
SeaLampActivityInfo sea_lamp_info = 42;
|
||||||
|
ExpeditionActivityDetailInfo expedition_info = 43;
|
||||||
|
ArenaChallengeActivityDetailInfo arena_challenge_info = 44;
|
||||||
|
FleurFairActivityDetailInfo fleur_fair_info = 51;
|
||||||
|
WaterSpiritActivityDetailInfo water_spirit_info = 52;
|
||||||
|
ChannelerSlabActivityDetailInfo challneler_slab_info = 61;
|
||||||
|
MistTrialActivityDetailInfo mist_trial_activity_info = 62;
|
||||||
|
HideAndSeekActivityDetailInfo hide_and_seek_info = 63;
|
||||||
|
FindHilichurlDetailInfo find_hilichurl_info = 64;
|
||||||
|
SummerTimeDetailInfo summer_time_info = 65;
|
||||||
|
BuoyantCombatDetailInfo buoyant_combat_info = 66;
|
||||||
|
EchoShellDetailInfo echo_shell_info = 67;
|
||||||
|
BounceConjuringActivityDetailInfo bounce_conjuring_info = 68;
|
||||||
|
BlitzRushActivityDetailInfo blitz_rush_info = 69;
|
||||||
|
ChessActivityDetailInfo chess_info = 70;
|
||||||
|
SumoActivityDetailInfo sumo_info = 71;
|
||||||
|
MoonfinTrialActivityDetailInfo moonfin_trial_info = 72;
|
||||||
|
LunaRiteDetailInfo luna_rite_info = 73;
|
||||||
|
PlantFlowerActivityDetailInfo plant_flower_info = 74;
|
||||||
|
MusicGameActivityDetailInfo music_game_info = 75;
|
||||||
|
RoguelikeDungeonActivityDetailInfo roguelike_dungoen_info = 76;
|
||||||
|
DigActivityDetailInfo dig_info = 77;
|
||||||
|
}
|
||||||
|
uint32 activity_id = 1;
|
||||||
|
uint32 schedule_id = 2;
|
||||||
|
uint32 begin_time = 3;
|
||||||
|
uint32 end_time = 4;
|
||||||
|
uint32 activity_type = 5;
|
||||||
|
bool is_play_open_anim = 6;
|
||||||
|
bool is_finished = 7;
|
||||||
|
bool is_starting = 8;
|
||||||
|
repeated ActivityWatcherInfo watcher_info_list = 9;
|
||||||
|
repeated uint32 meet_cond_list = 10;
|
||||||
|
repeated uint32 expire_cond_list = 15;
|
||||||
|
uint32 selected_avatar_reward_id = 17;
|
||||||
|
map<uint32, uint32> activity_coin_map = 18;
|
||||||
|
uint32 score_limit = 19;
|
||||||
|
uint32 cur_score = 20;
|
||||||
|
repeated uint32 taken_reward_list = 24;
|
||||||
|
bool is_hidden = 26;
|
||||||
|
uint32 first_day_start_time = 27;
|
||||||
|
}
|
16
data/proto/ActivityInfoNotify.proto
Normal file
16
data/proto/ActivityInfoNotify.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "ActivityInfo.proto";
|
||||||
|
|
||||||
|
message ActivityInfoNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
IS_ALLOW_CLIENT = 1;
|
||||||
|
CMD_ID = 2177;
|
||||||
|
}
|
||||||
|
|
||||||
|
ActivityInfo activity_info = 1;
|
||||||
|
}
|
15
data/proto/ActivityPlayOpenAnimNotify.proto
Normal file
15
data/proto/ActivityPlayOpenAnimNotify.proto
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivityPlayOpenAnimNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
IS_ALLOW_CLIENT = 1;
|
||||||
|
CMD_ID = 2081;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 activity_id = 1;
|
||||||
|
}
|
15
data/proto/ActivitySaleChangeNotify.proto
Normal file
15
data/proto/ActivitySaleChangeNotify.proto
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivitySaleChangeNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 2100;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 sale_id = 1;
|
||||||
|
bool is_close = 2;
|
||||||
|
}
|
10
data/proto/ActivityScheduleInfo.proto
Normal file
10
data/proto/ActivityScheduleInfo.proto
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivityScheduleInfo {
|
||||||
|
uint32 activity_id = 1;
|
||||||
|
bool is_open = 2;
|
||||||
|
uint32 schedule_id = 3;
|
||||||
|
uint32 begin_time = 4;
|
||||||
|
uint32 end_time = 5;
|
||||||
|
}
|
17
data/proto/ActivityScheduleInfoNotify.proto
Normal file
17
data/proto/ActivityScheduleInfoNotify.proto
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "ActivityScheduleInfo.proto";
|
||||||
|
|
||||||
|
message ActivityScheduleInfoNotify {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
IS_ALLOW_CLIENT = 1;
|
||||||
|
CMD_ID = 2068;
|
||||||
|
}
|
||||||
|
|
||||||
|
repeated ActivityScheduleInfo activity_schedule_list = 1;
|
||||||
|
uint32 remain_fly_sea_lamp_num = 2;
|
||||||
|
}
|
16
data/proto/ActivitySelectAvatarCardReq.proto
Normal file
16
data/proto/ActivitySelectAvatarCardReq.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivitySelectAvatarCardReq {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
IS_ALLOW_CLIENT = 1;
|
||||||
|
CMD_ID = 2002;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 activity_id = 1;
|
||||||
|
uint32 reward_id = 2;
|
||||||
|
}
|
16
data/proto/ActivitySelectAvatarCardRsp.proto
Normal file
16
data/proto/ActivitySelectAvatarCardRsp.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivitySelectAvatarCardRsp {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 2133;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 retcode = 1;
|
||||||
|
uint32 activity_id = 2;
|
||||||
|
uint32 reward_id = 3;
|
||||||
|
}
|
8
data/proto/ActivityShopSheetInfo.proto
Normal file
8
data/proto/ActivityShopSheetInfo.proto
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivityShopSheetInfo {
|
||||||
|
uint32 sheet_id = 1;
|
||||||
|
uint32 begin_time = 2;
|
||||||
|
uint32 end_time = 3;
|
||||||
|
}
|
15
data/proto/ActivityTakeAllScoreRewardReq.proto
Normal file
15
data/proto/ActivityTakeAllScoreRewardReq.proto
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivityTakeAllScoreRewardReq {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
IS_ALLOW_CLIENT = 1;
|
||||||
|
CMD_ID = 8011;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 activity_id = 1;
|
||||||
|
}
|
16
data/proto/ActivityTakeAllScoreRewardRsp.proto
Normal file
16
data/proto/ActivityTakeAllScoreRewardRsp.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivityTakeAllScoreRewardRsp {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 8864;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 retcode = 1;
|
||||||
|
uint32 activity_id = 2;
|
||||||
|
repeated uint32 reward_config_list = 3;
|
||||||
|
}
|
16
data/proto/ActivityTakeScoreRewardReq.proto
Normal file
16
data/proto/ActivityTakeScoreRewardReq.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivityTakeScoreRewardReq {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
IS_ALLOW_CLIENT = 1;
|
||||||
|
CMD_ID = 8122;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 activity_id = 1;
|
||||||
|
uint32 reward_config_id = 2;
|
||||||
|
}
|
16
data/proto/ActivityTakeScoreRewardRsp.proto
Normal file
16
data/proto/ActivityTakeScoreRewardRsp.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivityTakeScoreRewardRsp {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
CMD_ID = 8206;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 retcode = 1;
|
||||||
|
uint32 activity_id = 2;
|
||||||
|
uint32 reward_config_id = 3;
|
||||||
|
}
|
16
data/proto/ActivityTakeWatcherRewardBatchReq.proto
Normal file
16
data/proto/ActivityTakeWatcherRewardBatchReq.proto
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
message ActivityTakeWatcherRewardBatchReq {
|
||||||
|
enum CmdId {
|
||||||
|
option allow_alias = true;
|
||||||
|
ENET_CHANNEL_ID = 0;
|
||||||
|
NONE = 0;
|
||||||
|
ENET_IS_RELIABLE = 1;
|
||||||
|
IS_ALLOW_CLIENT = 1;
|
||||||
|
CMD_ID = 2049;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 activity_id = 1;
|
||||||
|
repeated uint32 watcher_id_list = 2;
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user