✨ feat(gvg): 玩家驻扎排行榜
This commit is contained in:
@@ -28,7 +28,7 @@ export default class GVGLeagueApply extends BaseModel {
|
||||
}
|
||||
|
||||
public static async checkApply(leagueCode: string, guildCode: string, type: GVG_APPLY_TYPE) {
|
||||
console.log('####', leagueCode, guildCode, type)
|
||||
// console.log('####', leagueCode, guildCode, type)
|
||||
const result = await GVGLeagueApplyModel.exists({ guildCode, leagueCode,
|
||||
type: type == GVG_APPLY_TYPE.ALL? { $in: [GVG_APPLY_TYPE.APPLY, GVG_APPLY_TYPE.INVITE] }: type
|
||||
});
|
||||
|
||||
@@ -16,6 +16,9 @@ export default class GVGVestigeLock extends BaseModel {
|
||||
@prop({ required: true })
|
||||
groupId: number; // 战区id
|
||||
|
||||
@prop({ required: true })
|
||||
serverType: number; // 1-单服 2-跨服
|
||||
|
||||
@prop({ required: true })
|
||||
vestigeId: number; // 遗迹id
|
||||
|
||||
@@ -31,26 +34,26 @@ export default class GVGVestigeLock extends BaseModel {
|
||||
@prop({ required: true })
|
||||
defenseRoleId: string; // 防守玩家
|
||||
|
||||
public static async chooseOppLock(groupId: number, vestigeId: number, rank: number, configId: number, attackRoleId: string, defenseRoleId: string ) {
|
||||
public static async chooseOppLock(groupId: number, serverType: number, vestigeId: number, rank: number, configId: number, attackRoleId: string, defenseRoleId: string ) {
|
||||
let day = getZeroPoint();
|
||||
await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, vestigeId, rank }, { $setOnInsert: { configId, unlockTime: 0 } }, { upsert: true });
|
||||
await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, serverType, vestigeId, rank }, { $setOnInsert: { configId, unlockTime: 0 } }, { upsert: true });
|
||||
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({
|
||||
day, groupId, vestigeId, rank, unlockTime: { $lt: Date.now() }
|
||||
}, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN * 1000, attackRoleId, defenseRoleId } }, { new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async checkBattleLock(groupId: number, vestigeId: number, rank: number, attackRoleId: string) {
|
||||
public static async checkBattleLock(groupId: number, serverType: number, vestigeId: number, rank: number, attackRoleId: string) {
|
||||
let day = getZeroPoint();
|
||||
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({
|
||||
day, groupId, vestigeId, rank, attackRoleId, unlockTime: { $gt: Date.now() }
|
||||
day, groupId, serverType, vestigeId, rank, attackRoleId, unlockTime: { $gt: Date.now() }
|
||||
}, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_BATTLE_COUNTDOWN * 1000 } }, { new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async releaseLock(groupId: number, vestigeId: number, rank: number) {
|
||||
public static async releaseLock(groupId: number, serverType: number, vestigeId: number, rank: number) {
|
||||
let day = getZeroPoint();
|
||||
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, vestigeId, rank }, { $set: { unlockTime: 0 } }, { new: true }).lean();
|
||||
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, serverType, vestigeId, rank }, { $set: { unlockTime: 0 } }, { new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ export class Lineup {
|
||||
ce: number; // 战力
|
||||
}
|
||||
|
||||
@index({ day: 1, groupId: 1, vestigeId: 1, rank: 1 })
|
||||
@index({ day: 1, groupId: 1, serverType: 1, vestigeId: 1, rank: 1 })
|
||||
@index({ roleId: 1 })
|
||||
export default class GVGVestigeRank extends BaseModel {
|
||||
|
||||
@@ -31,10 +31,10 @@ export default class GVGVestigeRank extends BaseModel {
|
||||
vestigeId: number; // 遗迹id
|
||||
|
||||
@prop({ required: true })
|
||||
roleId: string; // 玩家
|
||||
serverType: number; // 1-单服 2-跨服
|
||||
|
||||
@prop({ ref: 'Role', type: mongoose.Schema.Types.ObjectId })
|
||||
role: Ref<Role>;
|
||||
@prop({ required: true })
|
||||
roleId: string; // 玩家
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
rank: number; // 排名
|
||||
@@ -75,10 +75,10 @@ export default class GVGVestigeRank extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async initRank(configId: number, vestigeId: number, groupId: number, role: RoleType, oppRanks: number[]) {
|
||||
public static async initRank(configId: number, vestigeId: number, groupId: number, serverType: number, role: RoleType, oppRanks: number[]) {
|
||||
let today = getZeroPoint();
|
||||
let doc = new GVGVestigeRankModel();
|
||||
let update = Object.assign(doc.toJSON(), { role: role._id, configId, groupId, oppRanks });
|
||||
let update = Object.assign(doc.toJSON(), { role: role._id, configId, groupId, serverType, oppRanks });
|
||||
let result: GVGVestigeRankType = await GVGVestigeRankModel.findOneAndUpdate({ day: today, vestigeId, roleId: role.roleId }, { $setOnInsert: update }, { new: true, upsert: true }).lean();
|
||||
return result;
|
||||
}
|
||||
@@ -89,10 +89,9 @@ export default class GVGVestigeRank extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByRanks(groupId: number, vestigeId: number, ranks: number[]) {
|
||||
public static async findByRanks(groupId: number, serverType: number, vestigeId: number, ranks: number[]) {
|
||||
let today = getZeroPoint();
|
||||
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, rank: { $in: ranks } })
|
||||
.populate('role', 'roleId roleName head frame spine heads frames spines title lv guildName serverId updatedAt')
|
||||
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, serverType, rank: { $in: ranks } })
|
||||
.lean();
|
||||
return result;
|
||||
}
|
||||
@@ -142,6 +141,24 @@ export default class GVGVestigeRank extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findRank(): Promise<{ _id: { groupId: number, vestigeId: number, serverType: number }, arr: { roleId: string, rank: number }[], roleIds: string[] }[]> {
|
||||
let today = getZeroPoint();
|
||||
let ranks = await GVGVestigeRankModel.aggregate([
|
||||
{ $match: { day: today } },
|
||||
{ $group: {
|
||||
_id: { groupId: "$groupId", vestigeId: "$vestigeId", serverType: "$serverType" },
|
||||
arr: { $push: { roleId: "$roleId", rank: "$rank" } }, roleIds: { $addToSet: "$roleId" }
|
||||
}},
|
||||
]);
|
||||
return ranks;
|
||||
}
|
||||
|
||||
|
||||
public static async findRankByVestige(groupId: number, serverType: number, vestigeId: number) {
|
||||
let today = getZeroPoint();
|
||||
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, serverType }).sort({ rank: 1 }).select('roleId rank lineup').lean();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const GVGVestigeRankModel = getModelForClass(GVGVestigeRank);
|
||||
|
||||
@@ -35,6 +35,9 @@ export default class GVGVestigeRec extends BaseModel {
|
||||
@prop({ required: true })
|
||||
groupId: number; // 战区id
|
||||
|
||||
@prop({ required: true })
|
||||
serverType: number; // 战区id
|
||||
|
||||
@prop({ required: true })
|
||||
vestigeId: number; // 遗迹id
|
||||
|
||||
@@ -62,10 +65,10 @@ export default class GVGVestigeRec extends BaseModel {
|
||||
@prop({ required: true, default: false })
|
||||
hasRpl: boolean; // 是否存在对应录像
|
||||
|
||||
public static async createRec(configId: number, vestigeId: number, groupId: number, warId: number, attackInfo: OppPlayerInfo, defenseInfo: OppPlayerInfo, leagueGoods: LeagueGood[]) {
|
||||
public static async createRec(configId: number, vestigeId: number, groupId: number, serverType: number, warId: number, attackInfo: OppPlayerInfo, defenseInfo: OppPlayerInfo, leagueGoods: LeagueGood[]) {
|
||||
const battleCode = genCode(10);
|
||||
const result: GVGVestigeRecType = await GVGVestigeRecModel.findOneAndUpdate({ battleCode }, {
|
||||
$set: { configId, vestigeId, groupId, attackRoleId: attackInfo.roleId, defenseRoleId: defenseInfo.roleId, warId, checkTime: Date.now(), attackInfo, defenseInfo, leagueGoods }
|
||||
$set: { configId, vestigeId, groupId, serverType, attackRoleId: attackInfo.roleId, defenseRoleId: defenseInfo.roleId, warId, checkTime: Date.now(), attackInfo, defenseInfo, leagueGoods }
|
||||
}, { new: true, upsert: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ export default class HiddenData extends BaseModel {
|
||||
}
|
||||
|
||||
public static async findNextData(now: number) {
|
||||
console.log('####', now)
|
||||
// console.log('####', now)
|
||||
let result: HiddenDataModelType = await HiddenDataModel.findOne({ refTime: { $gt: now } }).sort({ refTime: 1 });
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ export default class TowerRecord extends BaseModel {
|
||||
|
||||
// 跳过当前层
|
||||
public static async skipTower(roleId: string, fromLv: number, curLv: number, warStatus: WarStatus[]) {
|
||||
console.log('######## skipTower', roleId, fromLv, curLv)
|
||||
// console.log('######## skipTower', roleId, fromLv, curLv)
|
||||
|
||||
await TowerRecordModel.findOneAndUpdate({ roleId, lv: fromLv }, { $set: { passed: true } }, { new: true });
|
||||
|
||||
|
||||
Reference in New Issue
Block a user