✨ feat(gvg): 激战期接口详细返回

This commit is contained in:
luying
2023-02-17 10:59:38 +08:00
parent ab0b7aa9ae
commit 26832196b6
14 changed files with 917 additions and 214 deletions
+14 -3
View File
@@ -6,6 +6,8 @@ class Player {
leagueCode: string;
@prop({ required: true })
roleId: string;
@prop({ required: true })
teamCnt: number;
}
@@ -27,6 +29,9 @@ export default class GVGCity extends BaseModel {
@prop({ required: true, default: [], type: Player, _id: false })
players: Player[]; // 联军
@prop({ required: false })
hasGuard: boolean; // 是否有联军占领
@prop({ required: false })
guardLeague: string; // 占领的联军
@@ -42,7 +47,7 @@ export default class GVGCity extends BaseModel {
// 创建城市
public static async createCity(configId: number, groupId: number, serverType: number, cityId: number) {
let doc = new GVGCityModel();
let update = Object.assign(doc.toJSON(), { configId, cityId});
let update = Object.assign(doc.toJSON(), { configId, cityId, groupId, serverType});
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, cityId, groupId, serverType }, { $setOnInsert: update }, { upsert: true, new: true }).lean();
return city;
}
@@ -54,8 +59,8 @@ export default class GVGCity extends BaseModel {
}
// 添加人数
public static async increasePlayer(configId: number, groupId: number, serverType: number, cityId: number, roleId: string, leagueCode: string) {
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupId, serverType, cityId, userCnt: { $lt: 200 } }, { $inc: { userCnt: 1 }, $push: { players: { roleId, leagueCode } }}, { new: true, upsert: true }).lean();
public static async increasePlayer(configId: number, groupId: number, serverType: number, cityId: number, roleId: string, leagueCode: string, teamCnt: number) {
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupId, serverType, cityId, userCnt: { $lt: 200 } }, { $inc: { userCnt: 1 }, $push: { players: { roleId, leagueCode, teamCnt } }}, { new: true, upsert: true }).lean();
return city;
}
@@ -64,6 +69,12 @@ export default class GVGCity extends BaseModel {
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupId, serverType, cityId, 'players.roleId': roleId }, { $inc: { userCnt: -1 }, $pull: { players: { roleId } }}, { new: true, upsert: true }).lean();
return city;
}
// 查询联军驻守情况
public static async findGuardCityByLeague(configId: number, groupId: number, serverType: number, ) {
const cities: GVGCityType[] = await GVGCityModel.find({ configId, groupId, serverType, hasGuard: true }).lean();
return cities
}
}
+35 -9
View File
@@ -15,6 +15,12 @@ export default class GVGTeam extends BaseModel {
@prop({ required: true })
roleId: string; // 玩家id
@prop({ required: true })
roleName: string; // 玩家名
@prop({ required: true })
serverId: number; // 小区id
@prop({ required: true })
teamCode: string; // 玩家队伍唯一标识
@@ -24,6 +30,9 @@ export default class GVGTeam extends BaseModel {
@prop({ required: true })
leagueCode: string; // 联军
@prop({ required: true })
leagueName: string; // 联军
@prop({ required: true })
guildCode: string; // 军团
@@ -48,12 +57,18 @@ export default class GVGTeam extends BaseModel {
@prop({ required: true, default: 0 })
durability: number; // 耐久
@prop({ required: true, default: 0 })
maxDurability: number; // 耐久
@prop({ required: true, default: 0 })
restartTime: number; // 修整期倒计时
@prop({ required: true, default: 0 })
attackTime: number; // 进攻冷却时间
@prop({ required: true, default: 0 })
fromAreaId: number; // 从那个区域移动
@prop({ required: true, default: 0 })
startMoveTime: number;
@@ -82,19 +97,19 @@ export default class GVGTeam extends BaseModel {
isRobot: boolean; // 是否是机器人
// 创建队伍
public static async createTeam(roleId: string, leagueCode: string, teamId: number, head: number, spine: number, frame: number, lineup: [LineupHero]) {
public static async createTeam(roleId: string, roleName: string, serverId: number, leagueCode: string, leagueName: string, teamId: number, head: number, spine: number, frame: number, durability: number, lineup: [LineupHero], lineupCe: number) {
const doc = new GVGTeamModel();
const teamCode = genCode(8);
const update = Object.assign(doc.toJSON(), { roleId, leagueCode, teamId, teamCode, head, spine, frame, lineup });
const update = Object.assign(doc.toJSON(), { roleId, roleName, serverId, leagueCode, leagueName, teamId, teamCode, head, spine, frame, lineup, durability, maxDurability: durability, lineupCe });
const team: GVGTeamType | null = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $setOnInsert: update }, { upsert: true, new: true }).lean();
return team;
}
// 保存队伍
public static async saveTeam(roleId: string, leagueCode: string, teamId: number, head: number, spine: number, frame: number, lineup: [LineupHero]) {
public static async saveTeam(roleId: string, roleName: string, serverId: number, leagueCode: string, leagueName: string, teamId: number, head: number, spine: number, frame: number, durability: number, lineup: [LineupHero], lineupCe: number) {
let team: GVGTeamType = await GVGTeamModel.findOne({ roleId, teamId }).lean();
if (!team) {
team = await this.createTeam(roleId, leagueCode, teamId, head, spine, frame, lineup);
team = await this.createTeam(roleId, roleName, serverId, leagueCode, leagueName, teamId, head, spine, frame, durability, lineup, lineupCe);
return team;
}
@@ -122,6 +137,10 @@ export default class GVGTeam extends BaseModel {
return teams.length;
}
public static async checkCity(roleId: string, cityId: number, groupId: number, serverType: number) {
return await GVGTeamModel.exists({ roleId, cityId, groupId, serverType });
}
// 玩家切换城池更新队伍信息
public static async enterCity(roleId: string, cityId: number, areaId: number, groupId: number, serverType: number) {
const res = await GVGTeamModel.updateMany({ roleId }, { cityId, areaId, pointId: 0, groupId, serverType }).lean();
@@ -141,13 +160,13 @@ export default class GVGTeam extends BaseModel {
}
// 移动
public static async startMove(teamCode: string, areaId: number) {
const res: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { areaId, stopMoveTime: nowSeconds() + GVG.GVG_DEFAULT_MOVE_CD } }).lean();
public static async startMove(teamCode: string, areaId: number, fromAreaId: number) {
const res: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { areaId, fromAreaId, stopMoveTime: nowSeconds() + GVG.GVG_DEFAULT_MOVE_CD } }).lean();
return res;
}
public static async stopMove(teamCode: string, areaId: number) {
const res: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { areaId, stopMoveTime: nowSeconds() } }).lean();
const res: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { areaId, fromAreaId: 0, stopMoveTime: nowSeconds() } }).lean();
return res;
}
@@ -161,7 +180,7 @@ export default class GVGTeam extends BaseModel {
}
return { attackTeam, defenseTeam }
}
public static async checkRobot(groupId: number, serverType: number, cityId: number) {
return await GVGTeamModel.exists({ groupId, serverType, cityId, isRobot: true });
}
@@ -171,10 +190,12 @@ export default class GVGTeam extends BaseModel {
return {
updateOne: {
filter: { groupId, serverType, cityId, pointId: dic.pointId },
update: { $setOnInsert: { teamCode: `robot${dic.pointId}`, ...dic, isRobot: true } }, upsert: true
update: { $setOnInsert: { teamCode: `robot${dic.pointId}`, ...dic, roleName: dic.name, isRobot: true } }, upsert: true
}
}
}));
const team: GVGTeamType[] = await GVGTeamModel.find({ groupId, serverType, cityId, isRobot: true }).lean();
return team;
}
// 攻击方攻击cd
@@ -188,6 +209,11 @@ export default class GVGTeam extends BaseModel {
const team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { attackTime: nowSeconds() + GVG.GVG_DEFAULT_DEFENSE_CD, groupId, serverType } }, { new: true }).lean();
return team;
}
public static async findByAreaId(groupId: number, serverType: number, cityId: number, areaId: number) {
const team: GVGTeamType[] = await GVGTeamModel.find({ groupId, serverType, cityId, areaId, stopMoveTime: { $lte: nowSeconds() } }).lean();
return team;
}
}