1
0
mirror of https://github.com/shiroikitsu8/Bayshore_6r_legacy.git synced 2024-12-01 02:27:22 +01:00

Merge pull request #65 from shiroikitsu8/master

limit terminal ocm ranking to 150, fix ghost search by region, preven TA record more than 20 minutes
This commit is contained in:
Luna 2023-03-07 10:19:13 +00:00 committed by GitHub
commit fafb3490f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 324 additions and 242 deletions

View File

@ -23,7 +23,7 @@ export default class CarModule extends Module {
// Get the car (required data only) with the given id // Get the car (required data only) with the given id
let car = await carFunctions.getCar(body.carId); let car = await carFunctions.getCar(body.carId);
// Get Challenger Data // Get Registered HoF Data
let registeredTarget = await carFunctions.getRegisteredTarget(body.carId); let registeredTarget = await carFunctions.getRegisteredTarget(body.carId);
// Get Challenger Data // Get Challenger Data

View File

@ -150,12 +150,12 @@ export async function getOpponentsTarget(carId: number, registeredargetAvailable
while(randomArray.length < maxNumber) while(randomArray.length < maxNumber)
{ {
// Pick random car Id // Pick random car Id
random = Math.floor(Math.random() * opponentTargetCount + 0.9); random = Math.floor(Math.random() * opponentTargetCount);
// Try randomize it again if it's 0, and fix if more than car length // Try randomize it again if it's 0, and fix if more than car length
if(random < 1 || random >= opponentTargetCount) if(random < 1 || random >= opponentTargetCount)
{ {
random = Math.floor(Math.random() * opponentTargetCount + 0.9); random = Math.floor(Math.random() * opponentTargetCount);
} }
// Random Number not yet selected // Random Number not yet selected
@ -167,7 +167,7 @@ export async function getOpponentsTarget(carId: number, registeredargetAvailable
} }
// Pick the array number // Pick the array number
let pickRandom = Math.floor(Math.random() * randomArray.length + 0.9); let pickRandom = Math.floor(Math.random() * randomArray.length);
random = randomArray[pickRandom]; random = randomArray[pickRandom];
// Check opponents target // Check opponents target
@ -360,12 +360,12 @@ export async function createCar(body: wm.protobuf.CreateCarRequest)
while(randomArray.length < 5) while(randomArray.length < 5)
{ {
// Pick random car Id // Pick random car Id
random = Math.floor(Math.random() * 47 + 0.9) + 1; random = Math.floor(Math.random() * 47) + 1;
// Try randomize it again if it's 0, and fix if more than car length // Try randomize it again if it's 0, and fix if more than car length
if(random < 1 || random > 47) if(random < 1 || random > 47)
{ {
random = Math.floor(Math.random() * 47 + 0.9) + 1; random = Math.floor(Math.random() * 47) + 1;
} }
// Random Number not yet selected // Random Number not yet selected
@ -377,7 +377,7 @@ export async function createCar(body: wm.protobuf.CreateCarRequest)
} }
// Pick the array number // Pick the array number
let pickRandom = Math.floor(Math.random() * randomArray.length + 0.9); let pickRandom = Math.floor(Math.random() * randomArray.length);
random = randomArray[pickRandom]; random = randomArray[pickRandom];
// Default car values // Default car values

View File

@ -58,8 +58,8 @@ export async function saveTimeAttackResult(body: wm.protobuf.SaveGameResultReque
// Record already exists // Record already exists
if (currentRecord) if (currentRecord)
{ {
// If the existing record is faster, do not continue // Current time record is faster than previous time record and time record is below 20 minutes
if (body.taResult!.time < currentRecord.time) if (body.taResult!.time < currentRecord.time && body.taResult!.time < 1200000)
{ {
console.log('Updating time attack record...'); console.log('Updating time attack record...');

View File

@ -149,9 +149,9 @@ export default class GhostModule extends Module {
let lists_ghostcar = getGhostCar.lists_ghostcar; let lists_ghostcar = getGhostCar.lists_ghostcar;
// Check again if car list for that selected region is available of not // Check again if car list for that selected region is available of not
if(body.regionId !== null && body.regionId !== undefined && body.regionId !== 0) if(body.regionId !== null && body.regionId !== undefined && body.regionId !== 0 && car.length < 1)
{ {
let checkGhostSearchByRegion = await ghostFunctions.checkGhostSearchByRegion(car, body.ghostLevel, body.regionId); let checkGhostSearchByRegion = await ghostFunctions.checkGhostSearchByRegion(body.ghostLevel, body.regionId);
lists_ghostcar = checkGhostSearchByRegion.lists_ghostcar; lists_ghostcar = checkGhostSearchByRegion.lists_ghostcar;
} }

View File

@ -15,9 +15,10 @@ export async function getOpponentHistory(carId: number)
orderBy:{ orderBy:{
lastPlayedAt: 'desc' lastPlayedAt: 'desc'
}, },
take: 10 take: 20
}) });
let opponentHistory: wmproto.wm.protobuf.Car[] = []; let opponentHistory: wmproto.wm.protobuf.Car[] = [];
let inserted = 0;
if(findChallenger.length > 0) if(findChallenger.length > 0)
{ {
@ -30,13 +31,11 @@ export async function getOpponentHistory(carId: number)
include:{ include:{
gtWing: true, gtWing: true,
lastPlayedPlace: true lastPlayedPlace: true
}, }
orderBy: {
carId: 'asc'
},
take: 10
}); });
if(car)
{
// Error handling if regionId is below 1 or above 47 // Error handling if regionId is below 1 or above 47
if(car!.regionId < 1 || car!.regionId > 47) if(car!.regionId < 1 || car!.regionId > 47)
{ {
@ -45,7 +44,15 @@ export async function getOpponentHistory(carId: number)
opponentHistory.push(wmproto.wm.protobuf.Car.create({ opponentHistory.push(wmproto.wm.protobuf.Car.create({
...car! ...car!
})) }));
inserted++;
}
if(inserted > 10)
{
break;
}
} }
} }
@ -64,7 +71,8 @@ export async function getStampTarget(carId: number)
}, },
orderBy:{ orderBy:{
locked: 'desc' locked: 'desc'
} },
take: 10
}); });
let stampTarget: wmproto.wm.protobuf.StampTargetCar[] = []; let stampTarget: wmproto.wm.protobuf.StampTargetCar[] = [];
@ -119,18 +127,21 @@ export async function getChallengers(carId: number)
let challengers: wmproto.wm.protobuf.ChallengerCar[] = []; let challengers: wmproto.wm.protobuf.ChallengerCar[] = [];
let arrChallengerCarId = []; let arrChallengerCarId = [];
// Push beated carId to array
for(let i=0; i<checkBeatedCar.length; i++) for(let i=0; i<checkBeatedCar.length; i++)
{ {
arrChallengerCarId.push(checkBeatedCar[i].carId); arrChallengerCarId.push(checkBeatedCar[i].carId);
} }
// Find Opponent Challengers except beated car
let getChallengers = await prisma.carChallenger.findMany({ let getChallengers = await prisma.carChallenger.findMany({
where: { where: {
carId: carId, carId: carId,
NOT: { NOT: {
challengerCarId: { in: arrChallengerCarId }, // Except beated challenger id challengerCarId: { in: arrChallengerCarId }, // Except beated challenger id
},
} }
},
take: 10
}); });
if(getChallengers) if(getChallengers)
@ -270,12 +281,8 @@ export async function getGhostCar(car: any, area: number, ramp: number, path: nu
// Check Ghost Car when using Search by Region // Check Ghost Car when using Search by Region
export async function checkGhostSearchByRegion(car: any, ghostLevel: number, regionId: number) export async function checkGhostSearchByRegion(ghostLevel: number, regionId: number)
{ {
let lists_ghostcar: any;
if(car.length < 1)
{
// Get current date // Get current date
let date = Math.floor(new Date().getTime() / 1000); let date = Math.floor(new Date().getTime() / 1000);
@ -345,7 +352,7 @@ export async function checkGhostSearchByRegion(car: any, ghostLevel: number, reg
} }
// Generate default S660 car data // Generate default S660 car data
car = wmproto.wm.protobuf.Car.create({ let car = wmproto.wm.protobuf.Car.create({
carId: 999999999, // Don't change this carId: 999999999, // Don't change this
name: '', name: '',
regionId: regionId, // IDN (福井) regionId: regionId, // IDN (福井)
@ -380,12 +387,12 @@ export async function checkGhostSearchByRegion(car: any, ghostLevel: number, reg
}); });
// Push data to Ghost car proto // Push data to Ghost car proto
let lists_ghostcar: wmproto.wm.protobuf.GhostCar[] = [];
lists_ghostcar.push(wmproto.wm.protobuf.GhostCar.create({ lists_ghostcar.push(wmproto.wm.protobuf.GhostCar.create({
car: car, car: car,
nonhuman: true, nonhuman: true,
type: wmproto.wm.protobuf.GhostType.GHOST_DEFAULT, type: wmproto.wm.protobuf.GhostType.GHOST_DEFAULT,
})); }));
}
return { lists_ghostcar } return { lists_ghostcar }
} }

View File

@ -588,10 +588,10 @@ export async function ocmGiveNamePlateReward(competitionId: number)
let participantLength = getCarParticipant.length; let participantLength = getCarParticipant.length;
// Participant is more than 100 // Participant is more than certain number (100 is default)
if(participantLength > 100) if(participantLength > 25)
{ {
participantLength = 100 participantLength = 25;
} }
// 16th - C1 // 16th - C1

View File

@ -101,7 +101,20 @@ export async function competitionSchedule(date: any, competitionId: any)
// It's previous Competition (OCM) event // It's previous Competition (OCM) event
if(pastEvent === 1) if(pastEvent === 1)
{ {
lastCompetitionId = ghostCompetitionSchedule.competitionId; // Get current date
let dates = Math.floor(new Date().getTime() / 1000);
let lastScheduleCompetitionId = await prisma.oCMEvent.findFirst({
where: {
competitionCloseAt: { lte: dates }
},
orderBy:{
competitionId: 'desc'
}
});
lastCompetitionId = lastScheduleCompetitionId?.competitionId || 0;
} }
// Competition (OCM) Response Message // Competition (OCM) Response Message

View File

@ -635,32 +635,36 @@ export default class TerminalModule extends Module {
periodId: 'desc' periodId: 'desc'
} }
], ],
include:{
car: true
},
distinct: ["carId"],
}) })
numOfParticipants = ocmParticipant.length; numOfParticipants = ocmParticipant.length;
periodId = 0; periodId = 0;
let ranking = 0; let ranking = 0;
let maxNumber = 150;
if(ocmParticipant) if(numOfParticipants < 151)
{
maxNumber = numOfParticipants;
}
if(numOfParticipants > 0)
{ {
periodId = ocmParticipant[0].periodId; periodId = ocmParticipant[0].periodId;
for(let i=0; i<ocmParticipant.length; i++) for(let i=0; i<maxNumber; i++)
{ {
let cars = await prisma.car.findFirst({
where:{
carId: ocmParticipant[i].carId
},
include:{
gtWing: true,
lastPlayedPlace: true
}
});
let ocmGhostrecord = await prisma.oCMGhostBattleRecord.findFirst({ let ocmGhostrecord = await prisma.oCMGhostBattleRecord.findFirst({
where:{ where:{
carId: ocmParticipant[0].carId, carId: ocmParticipant[0].carId,
competitionId: ocmEventDate!.competitionId, competitionId: ocmEventDate!.competitionId,
},
select:{
playedShopName: true,
playedAt: true
} }
}); });
@ -676,14 +680,14 @@ export default class TerminalModule extends Module {
rank: i + 1, rank: i + 1,
result: ocmParticipant[i].result, result: ocmParticipant[i].result,
carId: ocmParticipant[i].carId, carId: ocmParticipant[i].carId,
name: cars!.name, name: ocmParticipant[i].car.name,
regionId: cars!.regionId, regionId: ocmParticipant[i].car.regionId,
model: cars!.model, model: ocmParticipant[i].car.model,
visualModel: cars!.visualModel, visualModel: ocmParticipant[i].car.visualModel,
defaultColor: cars!.defaultColor, defaultColor: ocmParticipant[i].car.defaultColor,
title: cars!.title, title: ocmParticipant[i].car.title,
level: cars!.level, level: ocmParticipant[i].car.level,
windowStickerString: cars!.windowStickerString, windowStickerString: ocmParticipant[i].car.windowStickerString,
playedShopName: playedShopName, playedShopName: playedShopName,
playedAt: ocmGhostrecord!.playedAt playedAt: ocmGhostrecord!.playedAt
}); });
@ -696,18 +700,56 @@ export default class TerminalModule extends Module {
rank: i + 1, rank: i + 1,
result: ocmParticipant[i].result, result: ocmParticipant[i].result,
carId: ocmParticipant[i].carId, carId: ocmParticipant[i].carId,
name: cars!.name, name: ocmParticipant[i].car.name,
regionId: cars!.regionId, regionId: ocmParticipant[i].car.regionId,
model: cars!.model, model: ocmParticipant[i].car.model,
visualModel: cars!.visualModel, visualModel: ocmParticipant[i].car.visualModel,
defaultColor: cars!.defaultColor, defaultColor: ocmParticipant[i].car.defaultColor,
title: cars!.title, title: ocmParticipant[i].car.title,
level: cars!.level, level: ocmParticipant[i].car.level,
windowStickerString: cars!.windowStickerString, windowStickerString: ocmParticipant[i].car.windowStickerString,
playedShopName: playedShopName, playedShopName: playedShopName,
playedAt: ocmGhostrecord!.playedAt playedAt: ocmGhostrecord!.playedAt
})); }));
} }
if(!(ownRecords))
{
for(let i=150; i<numOfParticipants; i++)
{
if(ocmParticipant[i].carId === body.carId)
{
let ocmGhostrecord = await prisma.oCMGhostBattleRecord.findFirst({
where:{
carId: body.carId,
competitionId: ocmEventDate!.competitionId,
},
select:{
playedAt: true
}
});
// User car setting
ownRecords = wm.wm.protobuf.LoadGhostCompetitionRankingResponse.Entry.create({
rank: i + 1,
result: ocmParticipant[i].result,
carId: ocmParticipant[i].carId,
name: ocmParticipant[i].car.name,
regionId: ocmParticipant[i].car.regionId,
model: ocmParticipant[i].car.model,
visualModel: ocmParticipant[i].car.visualModel,
defaultColor: ocmParticipant[i].car.defaultColor,
title: ocmParticipant[i].car.title,
level: ocmParticipant[i].car.level,
windowStickerString: ocmParticipant[i].car.windowStickerString,
playedShopName: playedShopName,
playedAt: ocmGhostrecord!.playedAt
});
break;
}
}
}
} }
} }
// Current date is OCM qualifying day // Current date is OCM qualifying day
@ -721,27 +763,21 @@ export default class TerminalModule extends Module {
}, },
orderBy: { orderBy: {
result: 'desc' result: 'desc'
} },
include:{
car: true
},
distinct: ["carId"],
}) })
numOfParticipants = ocmParticipant.length; numOfParticipants = ocmParticipant.length;
periodId = 0; periodId = 0;
let ranking = 0; let ranking = 0;
if(ocmParticipant) if(numOfParticipants > 0)
{ {
for(let i=0; i<ocmParticipant.length; i++) for(let i=0; i<numOfParticipants; i++)
{ {
let cars = await prisma.car.findFirst({
where:{
carId: ocmParticipant[i].carId
},
include:{
gtWing: true,
lastPlayedPlace: true
}
})
if(ocmParticipant[i].carId === body.carId && ranking === 0) if(ocmParticipant[i].carId === body.carId && ranking === 0)
{ {
// User car setting // User car setting
@ -749,37 +785,21 @@ export default class TerminalModule extends Module {
rank: i + 1, rank: i + 1,
result: ocmParticipant[i].result, result: ocmParticipant[i].result,
carId: ocmParticipant[i].carId, carId: ocmParticipant[i].carId,
name: cars!.name, name: ocmParticipant[i].car.name,
regionId: cars!.regionId, regionId: ocmParticipant[i].car.regionId,
model: cars!.model, model: ocmParticipant[i].car.model,
visualModel: cars!.visualModel, visualModel: ocmParticipant[i].car.visualModel,
defaultColor: cars!.defaultColor, defaultColor: ocmParticipant[i].car.defaultColor,
title: cars!.title, title: ocmParticipant[i].car.title,
level: cars!.level, level: ocmParticipant[i].car.level,
windowStickerString: cars!.windowStickerString, windowStickerString: ocmParticipant[i].car.windowStickerString,
playedShopName: ocmParticipant[i].playedShopName, playedShopName: playedShopName,
playedAt: ocmParticipant[i].playedAt playedAt: ocmParticipant[i].playedAt
}); });
ranking++; ranking++;
break;
} }
// Generate OCM Top Records
topRecords.push(wm.wm.protobuf.LoadGhostCompetitionRankingResponse.Entry.create({
rank: i + 1,
result: ocmParticipant[i].result,
carId: ocmParticipant[i].carId,
name: cars!.name,
regionId: cars!.regionId,
model: cars!.model,
visualModel: cars!.visualModel,
defaultColor: cars!.defaultColor,
title: cars!.title,
level: cars!.level,
windowStickerString: cars!.windowStickerString,
playedShopName: ocmParticipant[i].playedShopName,
playedAt: ocmParticipant[i].playedAt
}));
} }
} }
} }
@ -795,31 +815,35 @@ export default class TerminalModule extends Module {
}, },
orderBy: { orderBy: {
result: 'desc' result: 'desc'
} },
include:{
car: true
},
distinct: ["carId"]
}) })
numOfParticipants = ocmParticipant.length; numOfParticipants = ocmParticipant.length;
periodId = 0; periodId = 0;
let ranking = 0; let ranking = 0;
let maxNumber = 150;
if(ocmParticipant) if(numOfParticipants < 151)
{ {
for(let i=0; i<ocmParticipant.length; i++) maxNumber = numOfParticipants;
{
let cars = await prisma.car.findFirst({
where:{
carId: ocmParticipant[i].carId
},
include:{
gtWing: true,
lastPlayedPlace: true
} }
});
if(numOfParticipants > 0)
{
for(let i=0; i<maxNumber; i++)
{
let ocmGhostrecord = await prisma.oCMGhostBattleRecord.findFirst({ let ocmGhostrecord = await prisma.oCMGhostBattleRecord.findFirst({
where:{ where:{
carId: ocmParticipant[0].carId, carId: ocmParticipant[i].carId,
competitionId: ocmEventDate!.competitionId, competitionId: ocmEventDate!.competitionId,
},
select:{
playedShopName: true,
playedAt: true
} }
}); });
@ -830,14 +854,14 @@ export default class TerminalModule extends Module {
rank: i + 1, rank: i + 1,
result: ocmParticipant[i].result, result: ocmParticipant[i].result,
carId: ocmParticipant[i].carId, carId: ocmParticipant[i].carId,
name: cars!.name, name: ocmParticipant[i].car.name,
regionId: cars!.regionId, regionId: ocmParticipant[i].car.regionId,
model: cars!.model, model: ocmParticipant[i].car.model,
visualModel: cars!.visualModel, visualModel: ocmParticipant[i].car.visualModel,
defaultColor: cars!.defaultColor, defaultColor: ocmParticipant[i].car.defaultColor,
title: cars!.title, title: ocmParticipant[i].car.title,
level: cars!.level, level: ocmParticipant[i].car.level,
windowStickerString: cars!.windowStickerString, windowStickerString: ocmParticipant[i].car.windowStickerString,
playedShopName: ocmGhostrecord!.playedShopName, playedShopName: ocmGhostrecord!.playedShopName,
playedAt: ocmGhostrecord!.playedAt playedAt: ocmGhostrecord!.playedAt
}); });
@ -850,18 +874,56 @@ export default class TerminalModule extends Module {
rank: i + 1, rank: i + 1,
result: ocmParticipant[i].result, result: ocmParticipant[i].result,
carId: ocmParticipant[i].carId, carId: ocmParticipant[i].carId,
name: cars!.name, name: ocmParticipant[i].car.name,
regionId: cars!.regionId, regionId: ocmParticipant[i].car.regionId,
model: cars!.model, model: ocmParticipant[i].car.model,
visualModel: cars!.visualModel, visualModel: ocmParticipant[i].car.visualModel,
defaultColor: cars!.defaultColor, defaultColor: ocmParticipant[i].car.defaultColor,
title: cars!.title, title: ocmParticipant[i].car.title,
level: cars!.level, level: ocmParticipant[i].car.level,
windowStickerString: cars!.windowStickerString, windowStickerString: ocmParticipant[i].car.windowStickerString,
playedShopName: ocmGhostrecord!.playedShopName, playedShopName: ocmGhostrecord!.playedShopName,
playedAt: ocmGhostrecord!.playedAt playedAt: ocmGhostrecord!.playedAt
})); }));
} }
if(!(ownRecords))
{
for(let i=maxNumber; i<numOfParticipants; i++)
{
if(ocmParticipant[i].carId === body.carId)
{
let ocmGhostrecord = await prisma.oCMGhostBattleRecord.findFirst({
where:{
carId: body.carId,
competitionId: ocmEventDate!.competitionId,
},
select:{
playedAt: true
}
});
// User car setting
ownRecords = wm.wm.protobuf.LoadGhostCompetitionRankingResponse.Entry.create({
rank: i + 1,
result: ocmParticipant[i].result,
carId: ocmParticipant[i].carId,
name: ocmParticipant[i].car.name,
regionId: ocmParticipant[i].car.regionId,
model: ocmParticipant[i].car.model,
visualModel: ocmParticipant[i].car.visualModel,
defaultColor: ocmParticipant[i].car.defaultColor,
title: ocmParticipant[i].car.title,
level: ocmParticipant[i].car.level,
windowStickerString: ocmParticipant[i].car.windowStickerString,
playedShopName: playedShopName,
playedAt: ocmGhostrecord!.playedAt
});
break;
}
}
}
} }
} }

View File

@ -236,8 +236,8 @@ export default class UserModule extends Module {
if (user.carOrder.length > 0) if (user.carOrder.length > 0)
{ {
// Sort the player's car list using the car order property // Sort the player's car list using the car order property
user.cars = user.cars.sort(function(a, b){ user.cars = user.cars.sort(function(a, b)
{
// User, and both car IDs exist // User, and both car IDs exist
if (user) if (user)
{ {