From c6fb8434e4610904ac7c4dd0fa8935688b6b05da Mon Sep 17 00:00:00 2001 From: ghkkk090 <108461408+ghkkk090@users.noreply.github.com> Date: Fri, 29 Jul 2022 19:37:45 +0700 Subject: [PATCH] get ghost trail req but saving still broken --- .../20220729120134_ghost_trail/migration.sql | 27 +++++++ .../migration.sql | 29 +++++++ prisma/schema.prisma | 75 ++++++++++++------- src/modules/game.ts | 72 +++++++++++++++++- src/modules/startup.ts | 1 + 5 files changed, 173 insertions(+), 31 deletions(-) create mode 100644 prisma/migrations/20220729120134_ghost_trail/migration.sql create mode 100644 prisma/migrations/20220729123033_ghost_trail_2/migration.sql diff --git a/prisma/migrations/20220729120134_ghost_trail/migration.sql b/prisma/migrations/20220729120134_ghost_trail/migration.sql new file mode 100644 index 0000000..4097ff7 --- /dev/null +++ b/prisma/migrations/20220729120134_ghost_trail/migration.sql @@ -0,0 +1,27 @@ +/* + Warnings: + + - The `trail` column on the `CarCrown` table would be dropped and recreated. This will lead to data loss if there is data in the column. + +*/ +-- AlterTable +ALTER TABLE "Car" ALTER COLUMN "stLoseBits" SET DEFAULT 0; + +-- AlterTable +ALTER TABLE "CarCrown" DROP COLUMN "trail", +ADD COLUMN "trail" BIGINT[]; + +-- CreateTable +CREATE TABLE "GhostTrail" ( + "dbId" SERIAL NOT NULL, + "carId" INTEGER NOT NULL, + "area" INTEGER NOT NULL, + "ramp" INTEGER NOT NULL, + "path" INTEGER NOT NULL, + "trail" BIGINT[], + + CONSTRAINT "GhostTrail_pkey" PRIMARY KEY ("dbId") +); + +-- AddForeignKey +ALTER TABLE "GhostTrail" ADD CONSTRAINT "GhostTrail_carId_fkey" FOREIGN KEY ("carId") REFERENCES "Car"("carId") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/prisma/migrations/20220729123033_ghost_trail_2/migration.sql b/prisma/migrations/20220729123033_ghost_trail_2/migration.sql new file mode 100644 index 0000000..4682621 --- /dev/null +++ b/prisma/migrations/20220729123033_ghost_trail_2/migration.sql @@ -0,0 +1,29 @@ +/* + Warnings: + + - Changed the type of `trail` on the `CarCrown` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required. + - Added the required column `driveData` to the `GhostTrail` table without a default value. This is not possible if the table is not empty. + - Added the required column `playedAt` to the `GhostTrail` table without a default value. This is not possible if the table is not empty. + - Added the required column `time` to the `GhostTrail` table without a default value. This is not possible if the table is not empty. + - Added the required column `trendBinaryByArea` to the `GhostTrail` table without a default value. This is not possible if the table is not empty. + - Added the required column `tuneHandling` to the `GhostTrail` table without a default value. This is not possible if the table is not empty. + - Added the required column `tunePower` to the `GhostTrail` table without a default value. This is not possible if the table is not empty. + - Changed the type of `trail` on the `GhostTrail` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required. + +*/ +-- AlterTable +ALTER TABLE "Car" ALTER COLUMN "stLoseBits" SET DEFAULT 0; + +-- AlterTable +ALTER TABLE "CarCrown" DROP COLUMN "trail", +ADD COLUMN "trail" BIGINT NOT NULL; + +-- AlterTable +ALTER TABLE "GhostTrail" ADD COLUMN "driveData" BYTEA NOT NULL, +ADD COLUMN "playedAt" INTEGER NOT NULL, +ADD COLUMN "time" INTEGER NOT NULL, +ADD COLUMN "trendBinaryByArea" BYTEA NOT NULL, +ADD COLUMN "tuneHandling" INTEGER NOT NULL, +ADD COLUMN "tunePower" INTEGER NOT NULL, +DROP COLUMN "trail", +ADD COLUMN "trail" BIGINT NOT NULL; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index e7cdc0c..c53f568 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -29,7 +29,7 @@ model ScratchSheet { id Int @id @default(autoincrement()) User User @relation(fields: [userId], references: [id]) userId Int - sheetNo Int // Player's sheet number (i.e. first sheet) + sheetNo Int // Player's sheet number (i.e. first sheet) squares ScratchSquare[] } @@ -124,25 +124,26 @@ model Car { stConsecutiveWinsMax Int @default(0) stCompleted100Episodes Boolean @default(false) - items CarItem[] - carGTWingDbId Int @unique - gtWing CarGTWing @relation(fields: [carGTWingDbId], references: [dbId]) - carStateDbId Int @unique - state CarState @relation(fields: [carStateDbId], references: [dbId]) - TimeAttackRecord TimeAttackRecord[] - CarCrown CarCrown[] + items CarItem[] + carGTWingDbId Int @unique + gtWing CarGTWing @relation(fields: [carGTWingDbId], references: [dbId]) + carStateDbId Int @unique + state CarState @relation(fields: [carStateDbId], references: [dbId]) + TimeAttackRecord TimeAttackRecord[] + CarCrown CarCrown[] + GhostTrail GhostTrail[] } model CarGTWing { - dbId Int @id @default(autoincrement()) - car Car? + dbId Int @id @default(autoincrement()) + car Car? - pillar Int @default(0) - pillarMaterial Int @default(0) - mainWing Int @default(0) - mainWingColor Int @default(0) - wingTip Int @default(0) - material Int @default(0) + pillar Int @default(0) + pillarMaterial Int @default(0) + mainWing Int @default(0) + mainWingColor Int @default(0) + wingTip Int @default(0) + material Int @default(0) } model CarItem { @@ -155,8 +156,8 @@ model CarItem { } model CarSettings { - dbId Int @id @default(autoincrement()) - car Car? + dbId Int @id @default(autoincrement()) + car Car? view Boolean @default(true) transmission Boolean @default(false) @@ -171,8 +172,8 @@ model CarSettings { } model CarState { - dbId Int @id @default(autoincrement()) - car Car? + dbId Int @id @default(autoincrement()) + car Car? hasOpponentGhost Boolean @default(false) eventJoined Boolean @default(false) @@ -181,12 +182,12 @@ model CarState { } model TimeAttackRecord { - dbId Int @id @default(autoincrement()) + dbId Int @id @default(autoincrement()) - car Car @relation(fields: [carId], references: [carId]) - carId Int + car Car @relation(fields: [carId], references: [carId]) + carId Int - model Int // Car model, literally just the `model` field from Car + model Int // Car model, literally just the `model` field from Car time Int course Int isMorning Boolean @@ -202,14 +203,30 @@ model TimeAttackRecord { } model CarCrown { - dbId Int @id @default(autoincrement()) - car Car @relation(fields: [carId], references: [carId]) + dbId Int @id @default(autoincrement()) + car Car @relation(fields: [carId], references: [carId]) carId Int - area Int @unique + area Int @unique ramp Int path Int - trail BigInt @default(0) - playedAt Int @default(0) + trail BigInt + playedAt Int @default(0) tunePower Int tuneHandling Int } + +model GhostTrail { + dbId Int @id @default(autoincrement()) + car Car @relation(fields: [carId], references: [carId]) + carId Int + area Int + ramp Int + path Int + trail BigInt + time Int + driveData Bytes @db.ByteA + trendBinaryByArea Bytes @db.ByteA + tunePower Int + tuneHandling Int + playedAt Int +} diff --git a/src/modules/game.ts b/src/modules/game.ts index 652b6cd..46c8943 100644 --- a/src/modules/game.ts +++ b/src/modules/game.ts @@ -23,6 +23,7 @@ export default class GameModule extends Module { } }); let storyLose: boolean = false; + let ghostModePlay: boolean = false; switch (body.gameMode) { case wm.wm.protobuf.GameMode.MODE_STORY: { @@ -199,6 +200,7 @@ export default class GameModule extends Module { case wm.wm.protobuf.GameMode.MODE_GHOST_BATTLE: { if (!(body.retired)) { + ghostModePlay = true; let saveEx: any = {}; if (body.rgResult?.rgRegionMapScore !== null && body.rgResult?.rgRegionMapScore !== undefined) { saveEx.rgRegionMapScore = body.rgResult?.rgRegionMapScore!; @@ -685,9 +687,19 @@ export default class GameModule extends Module { }); } - let msg = { - error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS, + let msg; + if(ghostModePlay === true){ + msg = { + error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS, + ghostSessionId: Math.floor(Math.random() * 1000) + 1 + } } + else{ + msg = { + error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS + } + } + let resp = wm.wm.protobuf.SaveGameResultResponse.encode(msg); let end = resp.finish(); let r = res @@ -698,6 +710,62 @@ export default class GameModule extends Module { r.send(Buffer.from(end)); }) + app.post('/method/register_ghost_trail', async (req, res) => { + let body = wm.wm.protobuf.RegisterGhostTrailRequest.decode(req.body); + console.log(body); + + //-----------------SAVING STILL NOT WORKING----------------- + let saveEx: any = {}; + saveEx.carId = body.ghost!.car.carId; + if(body.ghost?.area !== null && body.ghost?.area !== undefined){ + saveEx.area = body.ghost?.area!; + } + if(body.ghost?.ramp !== null && body.ghost?.ramp !== undefined){ + saveEx.ramp = body.ghost?.ramp!; + } + if(body.ghost?.path !== null && body.ghost?.path !== undefined){ + saveEx.path = body.ghost?.path!; + } + if(body.trail !== null && body.trail !== undefined){ + saveEx.trail = body.trail!; + } + if(body.time !== null && body.time !== undefined){ + saveEx.time = body.time!; + } + if(body.driveData !== null && body.driveData !== undefined){ + saveEx.driveData = body.driveData!; + } + if(body.trendBinaryByArea !== null && body.trendBinaryByArea !== undefined){ + saveEx.trendBinaryByArea = body.trendBinaryByArea!; + } + if(body.trendBinaryByArea !== null && body.trendBinaryByArea !== undefined){ + saveEx.trendBinaryByArea = body.trendBinaryByArea!; + } + if(body.ghost?.car.tunePower !== null && body.ghost?.car.tunePower !== undefined){ + saveEx.tunePower = body.ghost?.car.tunePower!; + } + if(body.ghost?.car.tuneHandling !== null && body.ghost?.car.tuneHandling !== undefined){ + saveEx.tuneHandling = body.ghost?.car.tuneHandling!; + } + + await prisma.carCrown.create({ + data: saveEx + }); + //---------------------------------------------------------- + + let msg = { + error: wm.wm.protobuf.ErrorCode.ERR_SUCCESS + } + let resp = wm.wm.protobuf.RegisterGhostTrailResponse.encode(msg); + let end = resp.finish(); + let r = res + .header('Server', 'v388 wangan') + .header('Content-Type', 'application/x-protobuf; revision=8053') + .header('Content-Length', end.length.toString()) + .status(200); + r.send(Buffer.from(end)); + }) + app.post('/method/load_user', async (req, res) => { let body = wm.wm.protobuf.LoadUserRequest.decode(req.body); diff --git a/src/modules/startup.ts b/src/modules/startup.ts index 0c5fbcf..57015db 100644 --- a/src/modules/startup.ts +++ b/src/modules/startup.ts @@ -329,6 +329,7 @@ export default class StartupModule extends Module { unlockAt: 0, })); } + break } } else{