diff --git a/.gitignore b/.gitignore index acf29b7..3639a88 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ key.pem config.json package-lock.json ecosystem.config.js -static/* \ No newline at end of file +static/* +screenshot/* \ No newline at end of file diff --git a/config.example.json b/config.example.json index 386d268..025e00f 100644 --- a/config.example.json +++ b/config.example.json @@ -12,6 +12,7 @@ "scratchEnabled": 1, "scratchType": 1, "giveMeterReward": 0, - "newCardsBanned": 0 + "newCardsBanned": 0, + "enableScreenshot": 0 } } \ No newline at end of file diff --git a/src/config.ts b/src/config.ts index d8ed0e4..d3ac8c1 100644 --- a/src/config.ts +++ b/src/config.ts @@ -47,12 +47,16 @@ export interface GameOptions { grantFullTuneTicketToNewUsers: number; // Give meter reward every n*100 play - giveMeterReward: number; //1 is on, 0 is off + giveMeterReward: number; // 1 is on, 0 is off // if the new card is not in the User databese // set this option to 1 will not create a new card // and prevent new card registration - newCardsBanned: number;//1 is on, 0 is off + newCardsBanned: number; // 1 is on, 0 is off + + // revision check + // set this option to 1 to enable screenshot feature + enableScreenshot: number; // 1 is on, 0 is off } export class Config { diff --git a/src/modules/cars.ts b/src/modules/cars.ts index d164244..50c2e83 100644 --- a/src/modules/cars.ts +++ b/src/modules/cars.ts @@ -1,4 +1,5 @@ import { Application } from "express"; +import { Config } from "../config"; import { Module } from "module"; import { prisma } from ".."; @@ -28,6 +29,19 @@ export default class CarModule extends Module { // Get Challenger Data let opponentsTarget = await carFunctions.getOpponentsTarget(body.carId, registeredTarget.registeredargetAvailable); + // Set Screenshot Count + let screenshotCount = 0; + + // Check if screenshot feature enabled or not + let enableScreenshot = Config.getConfig().gameOptions.enableScreenshot || 0; + + // Screenshot feature enabled + if(enableScreenshot === 1) + { + // Set the screnshot chance count + screenshotCount = 99; + } + // Response data let msg = { error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS, @@ -43,7 +57,7 @@ export default class CarModule extends Module { rgPreviousVersionPlayCount: 0, stCompleted_100Episodes: car!.stCompleted100Episodes, auraMotifAutoChange: false, - screenshotCount: 0, + screenshotCount: screenshotCount, transferred: false, // Stamp or Challenger @@ -136,33 +150,52 @@ export default class CarModule extends Module { // Get the request body for the update car request let body = wm.wm.protobuf.UpdateCarRequest.decode(req.body); - // Update the car - await carFunctions.updateCar(body); - - // Update the car setting - await carFunctions.updateCarSetting(body); - - // Update the car window Sticker - await carFunctions.updateCarWindowSticker(body); - - // Update the car Custom Wing - await carFunctions.updateCarCustomWing(body); - - // Get car item (custom color or discarded card) - if(body.earnedItems.length !== 0) + // Not deleting car + if(body.toBeDeleted === false || body.toBeDeleted === undefined || body.toBeDeleted === null) { - console.log('Car Item reward available, continuing ...'); - for(let i=0; i { - // Get the information from the request + // Get the request body let body = wm.wm.protobuf.SaveScreenshotRequest.decode(req.body); - - // TODO: Actual stuff here - // This is literally just bare-bones so the shit boots + + // Perform the save screenshot request for the car + await gameFunction.saveScreenshot(body); // Response data let msg = { error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS, }; - // Encode the response + // Encode the response let message = wm.wm.protobuf.SaveScreenshotResponse.encode(msg); - + // Send the response to the client common.sendResponse(message, res); - }); + }) } } diff --git a/src/modules/game/functions.ts b/src/modules/game/functions.ts index f5bd011..25d3a95 100644 --- a/src/modules/game/functions.ts +++ b/src/modules/game/functions.ts @@ -1,4 +1,7 @@ import { prisma } from "../.."; +import { Config } from "../../config"; +import path from "path"; +import fs from "fs"; // Import Proto import { wm } from "../../wmmt/wm.proto"; @@ -407,4 +410,41 @@ export async function getGhostBattleRecord(body: wm.protobuf.LoadGameHistoryRequ } return { ghostBattle_records } +} + + +// Save Screenshot +export async function saveScreenshot(body: wm.protobuf.SaveScreenshotRequest) +{ + // Check if screenshot feature enabled or not + let enableScreenshot = Config.getConfig().gameOptions.enableScreenshot || 0; + + // Screenshot feature enabled + if(enableScreenshot === 1) + { + let filename: string | undefined = undefined; + + filename = `${body.timestamp}_${body.carId}_${body.imageType}.png`; + + let dir = path.join('screenshot'); + + if (!fs.existsSync(dir)){ + fs.mkdirSync(dir); + } + + // Combine the filename with the save location + let fullname = path.join('screenshot', filename); + + // Attempt to write to the file + fs.writeFile(fullname, body.image, (err) => { + if (err) + { + console.log(err); + } + else + { + console.log(`Screenshot saved successfully as '${filename}'`) + } + }); + } } \ No newline at end of file diff --git a/src/modules/users.ts b/src/modules/users.ts index 73b8cab..eef85a3 100644 --- a/src/modules/users.ts +++ b/src/modules/users.ts @@ -39,6 +39,9 @@ export default class UserModule extends Module { state: true, gtWing: true, lastPlayedPlace: true + }, + where:{ + state: { toBeDeleted: false } // except deleted car } } }