1
0
mirror of synced 2025-02-10 16:12:59 +01:00
Bayshore/src/modules/ghost.ts

882 lines
24 KiB
TypeScript
Raw Normal View History

2022-08-15 10:47:34 +07:00
import { Application } from "express";
import { Module } from "module";
import { prisma } from "..";
import { CarPathandTuning } from "@prisma/client";
2022-08-15 10:47:34 +07:00
import Long from "long";
import { Config } from "../config";
2022-12-25 16:22:58 +07:00
let MersenneTwister = require('chancer');
2022-08-15 10:47:34 +07:00
// Import Proto
import * as wm from "../wmmt/wm.proto";
import * as wmsrv from "../wmmt/service.proto";
// Import Util
import * as common from "../util/common";
import * as ghost_save_trail from "../util/ghost/ghost_save_trail";
import * as ghost_trail from "../util/ghost/ghost_trail";
import * as ghost_area from "../util/ghost/ghost_area";
2022-08-15 10:47:34 +07:00
export default class GhostModule extends Module {
register(app: Application): void {
// Load Ghost Battle Info
app.post('/method/load_ghost_battle_info', async (req, res) => {
// Get the request body for the load stamp target request
let body = wm.wm.protobuf.LoadGhostBattleInfoRequest.decode(req.body);
let car = await prisma.car.findFirst({
where:{
carId: body.carId
2022-08-24 17:14:06 +07:00
},
include:{
gtWing: true,
lastPlayedPlace: true
}
})
2022-08-25 11:16:44 +07:00
// Car History
let findChallenger = await prisma.carChallenger.findMany({
2022-08-15 10:47:34 +07:00
where: {
2022-08-25 11:16:44 +07:00
challengerCarId: body.carId
2022-08-25 11:24:43 +07:00
},
orderBy:{
lastPlayedAt: 'desc'
},
take: 10
2022-08-25 11:16:44 +07:00
})
let carsHistory: wm.wm.protobuf.Car[] = [];
if(findChallenger.length > 0)
{
for(let i=0; i<findChallenger.length; i++)
{
let car = await prisma.car.findFirst({
where: {
carId: findChallenger[i].carId
2022-08-15 10:47:34 +07:00
},
2022-08-25 11:16:44 +07:00
include:{
gtWing: true,
lastPlayedPlace: true
2022-08-15 10:47:34 +07:00
},
2022-08-25 11:16:44 +07:00
orderBy: {
carId: 'asc'
},
take: 10
});
carsHistory.push(wm.wm.protobuf.Car.create({
...car!
}))
}
}
2022-08-15 10:47:34 +07:00
let carsStamp: wm.wm.protobuf.StampTargetCar[] = [];
let carsChallenger: wm.wm.protobuf.ChallengerCar[] = [];
// Get all of the friend cars for the carId provided
let stampTargets = await prisma.carStampTarget.findMany({
where: {
2022-08-30 18:29:15 +07:00
stampTargetCarId: body.carId,
2022-08-31 23:31:16 +07:00
recommended: true
},
orderBy:{
locked: 'desc'
}
});
if(stampTargets)
2022-08-15 10:47:34 +07:00
{
for(let i=0; i<stampTargets.length; i++)
{
let carTarget = await prisma.car.findFirst({
where:{
carId: stampTargets[i].carId
2022-08-24 17:14:06 +07:00
},
include:{
gtWing: true,
lastPlayedPlace: true
}
})
carsStamp.push(
wm.wm.protobuf.StampTargetCar.create({
car: carTarget!,
returnCount: stampTargets[i].returnCount,
locked: stampTargets[i].locked,
recommended: stampTargets[i].recommended
})
);
}
}
2022-09-10 10:47:53 +07:00
// Get all of the challenger car for the carId provided except beated car
let checkBeatedCar = await prisma.carStampTarget.findMany({
where: {
stampTargetCarId: body.carId,
recommended: false
},
orderBy:{
carId: 'asc'
}
});
let arrChallengerCarId = [];
for(let i=0; i<checkBeatedCar.length; i++)
{
arrChallengerCarId.push(checkBeatedCar[i].carId);
}
let challengers = await prisma.carChallenger.findMany({
where: {
2022-09-10 10:47:53 +07:00
carId: body.carId,
NOT: {
challengerCarId: { in: arrChallengerCarId }, // Except beated challenger id
},
}
});
if(challengers)
{
for(let i=0; i<challengers.length; i++)
{
let carTarget = await prisma.car.findFirst({
where:{
2022-08-24 23:41:46 +07:00
carId: challengers[i].challengerCarId
2022-08-24 17:14:06 +07:00
},
include:{
gtWing: true,
lastPlayedPlace: true
}
})
2022-08-26 14:01:23 +07:00
let result = 0;
if(challengers[i].result > 0)
{
result = -Math.abs(challengers[i].result);
}
else{
result = Math.abs(challengers[i].result);
}
carsChallenger.push(
wm.wm.protobuf.ChallengerCar.create({
car: carTarget!,
stamp: challengers[i].stamp,
2022-08-26 14:01:23 +07:00
result: result,
area: challengers[i].area
})
);
2022-08-15 10:47:34 +07:00
}
}
// Response data
let msg = {
error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS,
2022-08-24 23:41:46 +07:00
stampTargetCars: carsStamp || null,
challengers: carsChallenger || null,
stampSheetCount: car!.stampSheetCount,
stampSheet: car?.stampSheet || null,
stampReturnStats: car?.stampSheet || null,
2022-08-25 11:27:36 +07:00
history: carsHistory || null,
2022-08-15 10:47:34 +07:00
};
// Encode the response
let message = wm.wm.protobuf.LoadGhostBattleInfoResponse.encode(msg);
// Send the response to the client
common.sendResponse(message, res);
})
// Load Stamp Target
2022-08-15 10:47:34 +07:00
app.post('/method/load_stamp_target', async (req, res) => {
// Get the request body for the load stamp target request
let body = wm.wm.protobuf.LoadStampTargetRequest.decode(req.body);
let carsStamp: wm.wm.protobuf.StampTargetCar[] = [];
let carsChallenger: wm.wm.protobuf.ChallengerCar[] = [];
// Get all of the friend cars for the carId provided
let stampTargets = await prisma.carStampTarget.findMany({
where: {
2022-08-30 18:29:15 +07:00
stampTargetCarId: body.carId,
2022-08-31 23:31:16 +07:00
recommended: true
},
orderBy:{
locked: 'asc'
}
});
if(stampTargets)
{
for(let i=0; i<stampTargets.length; i++)
{
let carTarget = await prisma.car.findFirst({
where:{
2022-08-30 18:29:15 +07:00
carId: stampTargets[i].carId
2022-08-24 17:14:06 +07:00
},
include:{
gtWing: true,
lastPlayedPlace: true
}
})
carsStamp.push(
wm.wm.protobuf.StampTargetCar.create({
car: carTarget!,
returnCount: stampTargets[i].returnCount,
locked: stampTargets[i].locked,
recommended: stampTargets[i].recommended
})
);
}
}
2022-08-15 10:47:34 +07:00
// Get all of the friend cars for the carId provided
let challengers = await prisma.carChallenger.findMany({
where: {
carId: body.carId
}
});
if(stampTargets)
{
for(let i=0; i<challengers.length; i++)
{
let carTarget = await prisma.car.findFirst({
where:{
carId: challengers[i].challengerCarId
2022-08-24 17:14:06 +07:00
},
include:{
gtWing: true,
lastPlayedPlace: true
}
})
2022-08-26 14:01:23 +07:00
let result = 0;
if(challengers[i].result > 0)
{
result = -Math.abs(challengers[i].result);
}
else{
result = Math.abs(challengers[i].result);
}
carsChallenger.push(
wm.wm.protobuf.ChallengerCar.create({
car: carTarget!,
stamp: challengers[i].stamp,
2022-08-26 14:01:23 +07:00
result: result,
area: challengers[i].area
})
);
}
}
2022-08-15 10:47:34 +07:00
// Response data
let msg = {
error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS,
cars: carsStamp,
challengers: carsChallenger
2022-08-15 10:47:34 +07:00
};
// Encode the response
let message = wm.wm.protobuf.LoadStampTargetResponse.encode(msg);
// Send the response to the client
common.sendResponse(message, res);
})
// Ghost Mode
2022-08-15 10:47:34 +07:00
app.post('/method/search_cars_by_level', async (req, res) => {
// Get the request body for the search cars by level request
let body = wm.wm.protobuf.SearchCarsByLevelRequest.decode(req.body);
let car;
if(body.regionId !== null && body.regionId !== undefined && body.regionId !== 0)
{
// Find ghost car by selected level and region ID
car = await prisma.car.findMany({
where: {
ghostLevel: body.ghostLevel,
regionId: body.regionId
},
include:{
gtWing: true,
lastPlayedPlace: true,
}
});
}
else
{
// Find ghost car by selected level
car = await prisma.car.findMany({
where: {
ghostLevel: body.ghostLevel,
},
include:{
gtWing: true,
lastPlayedPlace: true,
}
});
}
2022-08-15 10:47:34 +07:00
// Randomizing the starting ramp and path based on selected area
let rampVal = 0;
let pathVal = 0;
// Get the ramp and path id
let ghost_areas = await ghost_area.GhostArea(body.area);
// Set the value
rampVal = ghost_areas.rampVal;
pathVal = ghost_areas.pathVal;
2022-08-15 10:47:34 +07:00
// Empty list of ghost car records
let lists_ghostcar: wm.wm.protobuf.GhostCar[] = [];
let arr = [];
let maxNumber = 0;
// If all user car data available is more than 10 for certain level
if(car.length > 10)
{
2022-08-15 10:47:34 +07:00
maxNumber = 10 // Limit to 10 (game default)
}
// If no more than 10
else
{
2022-08-15 10:47:34 +07:00
maxNumber = car.length;
}
// Choose the user's car data randomly to appear
while(arr.length < maxNumber)
{
2022-08-15 10:47:34 +07:00
// Pick random car Id
2023-01-03 21:22:12 +07:00
let randomNumber = MersenneTwister.int(0, car.length-1);
2022-09-04 19:03:11 +07:00
if(arr.indexOf(randomNumber) === -1)
{
2022-08-15 10:47:34 +07:00
// Push current number to array
arr.push(randomNumber);
// Check if ghost trail for certain car is available
let ghost_trails = await prisma.ghostTrail.findFirst({
where: {
carId: car[randomNumber].carId,
area: body.area,
crownBattle: false
},
orderBy: {
playedAt: 'desc'
}
});
// If regionId is 0 or not set, game will crash after defeating the ghost
if(car[randomNumber]!.regionId === 0)
2022-12-25 16:22:58 +07:00
{
car[randomNumber].regionId = MersenneTwister.int(1, 47);
2022-08-15 10:47:34 +07:00
}
// Push user's car data without ghost trail
if(!(ghost_trails))
{
2022-08-15 10:47:34 +07:00
lists_ghostcar.push(wm.wm.protobuf.GhostCar.create({
car: car[randomNumber]
}));
}
// Push user's car data with ghost trail
else
{
2022-08-15 10:47:34 +07:00
// Set the tunePower used when playing certain area
car[randomNumber].tunePower = ghost_trails!.tunePower;
// Set the tuneHandling used when playing certain area
car[randomNumber].tuneHandling = ghost_trails!.tuneHandling;
// Push data to Ghost car proto
lists_ghostcar.push(wm.wm.protobuf.GhostCar.create({
car: car[randomNumber],
nonhuman: false,
type: wm.wm.protobuf.GhostType.GHOST_NORMAL,
trailId: ghost_trails!.dbId!
}));
}
}
}
// Check again if car list for that selected region is available of not
if(body.regionId !== null && body.regionId !== undefined && body.regionId !== 0)
{
if(car.length < 1)
{
// Get current date
let date = Math.floor(new Date().getTime() / 1000);
let playedPlace = wm.wm.protobuf.Place.create({
placeId: Config.getConfig().placeId,
regionId: Config.getConfig().regionId,
shopName: Config.getConfig().shopName,
country: Config.getConfig().country
});
let tunePowerDefault = 0
let tuneHandlingDefault = 0;
if(body.ghostLevel === 1)
{
tunePowerDefault = 1;
tuneHandlingDefault = 4;
}
else if(body.ghostLevel === 2)
{
tunePowerDefault = 5;
tuneHandlingDefault = 5;
}
else if(body.ghostLevel === 3)
{
tunePowerDefault = 8;
tuneHandlingDefault = 7;
}
else if(body.ghostLevel === 4)
{
tunePowerDefault = 10;
tuneHandlingDefault = 10;
}
else if(body.ghostLevel === 5)
{
tunePowerDefault = 15;
tuneHandlingDefault = 10;
}
else if(body.ghostLevel === 6)
{
tunePowerDefault = 18;
tuneHandlingDefault = 10;
}
else if(body.ghostLevel === 7)
{
tunePowerDefault = 20;
tuneHandlingDefault = 10;
}
else if(body.ghostLevel === 8)
{
tunePowerDefault = 21;
tuneHandlingDefault = 10;
}
else if(body.ghostLevel === 9)
{
tunePowerDefault = 22;
tuneHandlingDefault = 10;
}
else if(body.ghostLevel === 10)
{
2022-08-25 14:56:04 +07:00
tunePowerDefault = 24;
tuneHandlingDefault = 10;
}
else if(body.ghostLevel === 11)
{
tunePowerDefault = 24;
tuneHandlingDefault = 24;
}
// Generate default S660 car data
car = wm.wm.protobuf.Car.create({
carId: 999999999, // Don't change this
name: '',
regionId: body.regionId, // IDN (福井)
manufacturer: 12, // HONDA
model: 105, // S660 [JW5]
visualModel: 130, // S660 [JW5]
defaultColor: 0,
customColor: 0,
wheel: 20,
wheelColor: 0,
aero: 0,
bonnet: 0,
wing: 0,
mirror: 0,
neon: 0,
trunk: 0,
plate: 0,
plateColor: 0,
plateNumber: 0,
tunePower: tunePowerDefault,
tuneHandling: tuneHandlingDefault,
rivalMarker: 32,
aura: 551,
windowSticker: true,
windowStickerString: '',
windowStickerFont: 0,
title: 'No Ghost for this Region',
level: 65, // SSSSS
lastPlayedAt: date,
country: 'JPN',
lastPlayedPlace: playedPlace
});
// Push data to Ghost car proto
lists_ghostcar.push(wm.wm.protobuf.GhostCar.create({
car: car,
nonhuman: true,
type: wm.wm.protobuf.GhostType.GHOST_DEFAULT,
}));
}
// else{} have car list
}
2022-08-15 10:47:34 +07:00
// Response data
let msg = {
error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS,
ramp: rampVal,
path: pathVal,
ghosts: lists_ghostcar,
selectionMethod: Number(wm.wm.protobuf.GhostSelectionMethod.GHOST_SELECT_BY_LEVEL)
};
// Encode the response
let message = wm.wm.protobuf.SearchCarsByLevelResponse.encode(msg);
// Send the response to the client
common.sendResponse(message, res);
})
// Load Normal Ghost Trail data
app.post('/method/load_ghost_drive_data', async (req, res) => {
// Get the request body for the load ghost drive data request
let body = wm.wm.protobuf.LoadGhostDriveDataRequest.decode(req.body);
// Get the path value from request body
let path = body.path;
// Empty list of ghost drive data records
let lists_ghostcar: wm.wm.protobuf.LoadGhostDriveDataResponse.GhostDriveData[] = [];
// Check how many opponent ghost data available (including user data)
for(let i=0; i<body.carTunings.length; i++)
{
2022-08-15 10:47:34 +07:00
// Check if opponent ghost have trail
let ghost_trails = await prisma.ghostTrail.findFirst({
where: {
carId: body.carTunings[i].carId!,
path: body.path,
},
orderBy: {
playedAt: 'desc'
}
});
// ---Get the user and opponent ghost trail data---
let ghostType: number = wm.wm.protobuf.GhostType.GHOST_NORMAL;
let lists_binarydriveData;
if(ghost_trails?.driveData !== null && ghost_trails?.driveData !== undefined){
lists_binarydriveData = wm.wm.protobuf.BinaryData.create({
data: ghost_trails!.driveData!,
mergeSerial: ghost_trails!.driveDMergeSerial!
});
}
let lists_binaryByArea
if(ghost_trails?.trendBinaryByArea !== null && ghost_trails?.trendBinaryByArea !== undefined){
lists_binaryByArea = wm.wm.protobuf.BinaryData.create({
data: ghost_trails!.trendBinaryByArea!,
mergeSerial: ghost_trails!.byAreaMergeSerial!
});
}
let lists_binaryByCar
if(ghost_trails?.trendBinaryByCar !== null && ghost_trails?.trendBinaryByCar !== undefined){
lists_binaryByCar = wm.wm.protobuf.BinaryData.create({
data: ghost_trails!.trendBinaryByCar!,
mergeSerial: ghost_trails!.byCarMergeSerial!
});
}
let lists_binaryByUser
if(ghost_trails?.trendBinaryByUser !== null && ghost_trails?.trendBinaryByUser !== undefined){
lists_binaryByUser = wm.wm.protobuf.BinaryData.create({
data: ghost_trails!.trendBinaryByUser!,
mergeSerial: ghost_trails!.byUserMergeSerial!
});
}
// ------------------------------------------------
// Push the data
lists_ghostcar.push(wm.wm.protobuf.LoadGhostDriveDataResponse.GhostDriveData.create({ // Push the data
carId: Number(body.carTunings[i].carId!),
type: ghostType,
driveData: lists_binarydriveData || null,
trendBinaryByArea: lists_binaryByArea || null,
trendBinaryByCar: lists_binaryByCar || null,
trendBinaryByUser: lists_binaryByUser || null,
}));
}
// Response data
let msg = {
error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS,
path: path,
data: lists_ghostcar
};
// Encode the response
let message = wm.wm.protobuf.LoadGhostDriveDataResponse.encode(msg);
// Send the response to the client
common.sendResponse(message, res);
})
// Saving the ghost trail on mileage screen
app.post('/method/register_ghost_trail', async (req, res) => {
// Get the request body for the register ghost trail request
let body = wm.wm.protobuf.RegisterGhostTrailRequest.decode(req.body);
// Get the session id
let actualSessionId: number = 0;
// If the session are set, and are long data
if(Long.isLong(body.ghostSessionId))
{
// Convert them to BigInt and add to the data
actualSessionId = common.getBigIntFromLong(body.ghostSessionId);
}
// OCM game mode session id
if(actualSessionId > 100 && actualSessionId < 201)
{
console.log('OCM Ghost Battle Game found');
// User playing ocm battle game mode
await ghost_save_trail.saveOCMGhostTrail(body);
}
// Ghost Battle or Crown Ghost Battle game Mode session id
else if(actualSessionId > 0 && actualSessionId < 101)
{
// Check if it is crown ghost battle or not (crown ghost battle don't have time, driveData, trendBinaryByArea, trendBinaryByCar, trendBinaryByUser value from request body)
2022-08-16 15:38:05 +07:00
if(!(body.trendBinaryByArea) && !(body.trendBinaryByCar) && !(body.trendBinaryByUser))
2022-08-15 10:47:34 +07:00
{
console.log('Crown Ghost Battle Game found');
// User is playing crown ghost battle game mode
await ghost_save_trail.saveCrownGhostTrail(body);
}
else
{
console.log('Normal Ghost Battle Game found');
// User is playing normal ghost battle game mode
await ghost_save_trail.saveNormalGhostTrail(body);
// Saving Ghost Path and Tuning
await ghost_save_trail.savePathAndTuning(body);
}
}
// Response data
let msg = {
error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS
}
// Encode the response
let message = wm.wm.protobuf.RegisterGhostTrailResponse.encode(msg);
// Send the response to the client
common.sendResponse(message, res);
})
// Load Crown Ghost Trail or Top 1 OCM Ghost Trail
app.get('/resource/ghost_trail', async (req, res) => {
// Get url query parameter [For Crown Ghost Battle]
let pCarId = Number(req.query.car_id);
let pArea = Number(req.query.area);
// Get url query parameter [For OCM Ghost Battle]
let pTrailId = Number(req.query.trail_id) || undefined;
// Declare variable
let rampVal: number = 0;
let pathVal: number = 0;
let playedAt: number = 0;
let ghostTrail;
// Query parameter from OCM Battle available
if(pTrailId)
{
2022-09-17 20:07:26 +07:00
console.log('Requesting OCM Ghost Trail');
2022-08-15 10:47:34 +07:00
// Get the trail data
let ghost_trails = await ghost_trail.getOCMGhostTrail(pCarId, pTrailId);
2023-01-03 14:33:48 +07:00
pArea = ghost_trails.areaVal;
rampVal = ghost_trails.rampVal;
pathVal = ghost_trails.pathVal;
playedAt = ghost_trails.playedAt;
ghostTrail = ghost_trails.ghostTrail;
2022-08-15 10:47:34 +07:00
}
// Query parameter from Crown Ghost Battle available
else
{
2022-09-17 20:07:26 +07:00
console.log('Requesting Crown Ghost Trail');
2022-08-15 10:47:34 +07:00
// Get the crown trail data
let ghost_trails = await ghost_trail.getCrownGhostTrail(pCarId, pArea);
rampVal = ghost_trails.rampVal;
pathVal = ghost_trails.pathVal;
playedAt = ghost_trails.playedAt;
ghostTrail = ghost_trails.ghostTrail;
}
// Response data
let msg = {
carId: pCarId,
area: pArea,
ramp: rampVal,
path: pathVal,
playedAt: playedAt,
trail: ghostTrail
};
// Encode the response
let message = wm.wm.protobuf.GhostTrail.encode(msg);
// Send the response to the client
common.sendResponse(message, res);
})
// Load ghost path and tunings per area
app.post('/method/load_paths_and_tunings', async (req, res) => {
// Get the request body for the load path and tunings request
let body = wm.wm.protobuf.LoadPathsAndTuningsRequest.decode(req.body);
// Empty list of car path and tuning records
let carTbyP: wm.wm.protobuf.LoadPathsAndTuningsResponse.CarTuningsByPath[] = [];
// Loop GID_RUNAREA_*
for(let j=0; j<19; j++)
{
// 14 - 16 are dummy area, 17 is C1 Closed
if(j >= 14){
j = 18; // GID_RUNAREA_HIROSHIMA
}
let rampVal = 0;
let pathVal = 0;
// Get the ramp and path id
let ghost_areas = await ghost_area.GhostArea(j);
// Set the value
rampVal = ghost_areas.rampVal;
pathVal = ghost_areas.pathVal;
2022-08-15 10:47:34 +07:00
// Empty list of car tuning records
let carTuning: wm.wm.protobuf.CarTuning[] = [];
let pathAndTuning: CarPathandTuning | null;
// Loop to how many opponent ghost selected by user
for(let i=0; i<body.selectedCars.length; i++)
{
// Get path and tuning per area
pathAndTuning = await prisma.carPathandTuning.findFirst({
where: {
carId: body.selectedCars[i],
area: j
},
orderBy: {
area: 'asc'
}
});
// Opponent ghost have path and tuning record for certain area
if(pathAndTuning)
{
// Push the data
carTuning.push(wm.wm.protobuf.CarTuning.create({
carId: body.selectedCars[i],
tunePower: pathAndTuning!.tunePower,
tuneHandling: pathAndTuning!.tuneHandling,
lastPlayedAt: pathAndTuning!.lastPlayedAt,
2022-08-15 10:47:34 +07:00
}));
}
// Opponent ghost doesn't have path and tuning record for certain area
else
{
// Get user's car last used tunePower and tuneHandling
let car = await prisma.car.findFirst({
where: {
carId: body.selectedCars[i]
2022-08-15 10:47:34 +07:00
},
select:{
tunePower: true,
tuneHandling: true
}
});
// Push the data
carTuning.push(wm.wm.protobuf.CarTuning.create({
carId: body.selectedCars[i],
// Set the tunePower used when last played the game
tunePower: car!.tunePower,
// Set the tuneHandling used when last played the game
tuneHandling: car!.tuneHandling
}));
}
}
// Push the data
carTbyP.push(wm.wm.protobuf.LoadPathsAndTuningsResponse.CarTuningsByPath.create({
area: j,
ramp: rampVal,
path: pathVal,
carTunings: carTuning,
selectionMethod: wm.wm.protobuf.PathSelectionMethod.PATH_NORMAL // idk what this is
}));
}
// Response data
let msg = {
error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS,
data: carTbyP
};
// Encode the response
let message = wm.wm.protobuf.LoadPathsAndTuningsResponse.encode(msg);
// Send the response to the client
common.sendResponse(message, res);
})
2022-08-26 13:10:13 +07:00
// Lock Crown
2022-08-15 10:47:34 +07:00
app.post('/method/lock_crown', (req, res) => {
2022-08-26 13:10:13 +07:00
// Get the information from the request
let body = wmsrv.wm.protobuf.LockCrownRequest.decode(req.body);
2022-08-15 10:47:34 +07:00
// Response data
let msg = {
error: wmsrv.wm.protobuf.ErrorCode.ERR_SUCCESS,
};
// Encode the response
let message = wmsrv.wm.protobuf.LockCrownResponse.encode(msg);
// Send the response to the client
common.sendResponse(message, res);
})
}
}