🐞 fix(gvg): 激战期推送相关修改
This commit is contained in:
@@ -15,7 +15,7 @@ import { gameData, getReviveGold } from '../../../pubUtils/data';
|
|||||||
import { getAllServerName } from '../../../services/redisService';
|
import { getAllServerName } from '../../../services/redisService';
|
||||||
import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
|
import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
|
||||||
import { SaveTeamParam, SaveTeamUpdateParam } from '../../../domain/gvgField/gvgDb';
|
import { SaveTeamParam, SaveTeamUpdateParam } from '../../../domain/gvgField/gvgDb';
|
||||||
import { GVG_AREA_TYPE, GVG_ITEM, GVG_PERIOD, GVG_REC_TYPE, ITEM_CHANGE_REASON, REDIS_KEY, STATUS } from '../../../consts';
|
import { GVG_AREA_TYPE, GVG_ITEM, GVG_PERIOD, GVG_REC_TYPE, ITEM_CHANGE_REASON, PUSH_ROUTE, REDIS_KEY, STATUS } from '../../../consts';
|
||||||
import { GVGHeroInfo } from '../../../domain/dbGeneral';
|
import { GVGHeroInfo } from '../../../domain/dbGeneral';
|
||||||
import { ArtifactModel } from '../../../db/Artifact';
|
import { ArtifactModel } from '../../../db/Artifact';
|
||||||
import { getHeroesAttributes } from '../../../services/playerCeService';
|
import { getHeroesAttributes } from '../../../services/playerCeService';
|
||||||
@@ -29,6 +29,8 @@ import { Rank } from '../../../services/rankService';
|
|||||||
import { LeagueRankInfo, RoleRankInfo } from '../../../domain/rank';
|
import { LeagueRankInfo, RoleRankInfo } from '../../../domain/rank';
|
||||||
import { addBattleEndRec, addTeamSettleRec } from '../../../services/gvg/gvgRecService';
|
import { addBattleEndRec, addTeamSettleRec } from '../../../services/gvg/gvgRecService';
|
||||||
import { RoleModel } from '../../../db/Role';
|
import { RoleModel } from '../../../db/Role';
|
||||||
|
import { GVG } from '../../../pubUtils/dicParam';
|
||||||
|
import { sendMessageToGVGAreaByTeamWithSuc } from '../../../services/pushService';
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
new HandlerService(app, {});
|
new HandlerService(app, {});
|
||||||
@@ -142,7 +144,7 @@ export class GVGBattleHandler {
|
|||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
cityId,
|
cityId,
|
||||||
guardLeague: { leagueCode, name, icon },
|
guardLeague: { leagueCode, name, icon },
|
||||||
guardStartTime: startFightTime - 3 * 60,// TODO 进系统参数表
|
guardStartTime: startFightTime - GVG.GVG_GUARD_START_TIME,
|
||||||
startTime: startFightTime,
|
startTime: startFightTime,
|
||||||
endTime: endFightTime,
|
endTime: endFightTime,
|
||||||
ourTeamCnt,
|
ourTeamCnt,
|
||||||
@@ -532,7 +534,7 @@ export class GVGBattleHandler {
|
|||||||
let city = await GVGCityModel.findByCityId(configId, groupKey, cityId);
|
let city = await GVGCityModel.findByCityId(configId, groupKey, cityId);
|
||||||
if (!city) return resResult(STATUS.GVG_CITY_NOT_FOUND);
|
if (!city) return resResult(STATUS.GVG_CITY_NOT_FOUND);
|
||||||
|
|
||||||
defenseTeam = await GVGTeamModel.battleEndDefense(teamCode, await getTechKnifeHurt(configId, attackTeam.leagueCode), getBirthAreaOfCity(city, defenseTeam.leagueCode), await getTechReviveMinus(configId, defenseTeam.leagueCode));
|
defenseTeam = await GVGTeamModel.battleEndDefense(oppoTeamCode, await getTechKnifeHurt(configId, attackTeam.leagueCode), getBirthAreaOfCity(city, defenseTeam.leagueCode), await getTechReviveMinus(configId, defenseTeam.leagueCode));
|
||||||
if(defenseTeam.curTeamBreak && defenseTeam.originPointId > 0) { // 打败的对手原来占领着一个位置,现在这个位置是你的了
|
if(defenseTeam.curTeamBreak && defenseTeam.originPointId > 0) { // 打败的对手原来占领着一个位置,现在这个位置是你的了
|
||||||
if(!attackTeam.curTeamBreak) {
|
if(!attackTeam.curTeamBreak) {
|
||||||
attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId);
|
attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId);
|
||||||
@@ -552,7 +554,9 @@ export class GVGBattleHandler {
|
|||||||
teamObj.battleEnd([attackTeam, defenseTeam]);
|
teamObj.battleEnd([attackTeam, defenseTeam]);
|
||||||
|
|
||||||
await battleEndSendMessage(groupKey, cityId, defenseTeam, attackTeam);
|
await battleEndSendMessage(groupKey, cityId, defenseTeam, attackTeam);
|
||||||
|
await sendMessageToGVGAreaByTeamWithSuc(groupKey, defenseTeam.areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
|
||||||
|
cityId, areaId: defenseTeam.areaId, attackType: 2, teams: [new GVGTeamInList(defenseTeam), new GVGTeamInList(attackTeam)]
|
||||||
|
});
|
||||||
return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(attackTeam) });
|
return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(attackTeam) });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -129,9 +129,10 @@ class GVGBattleData {
|
|||||||
if(!teamMem) { // 基本不会有没有这个内存的情况,有的话就让他重新计算一次吧
|
if(!teamMem) { // 基本不会有没有这个内存的情况,有的话就让他重新计算一次吧
|
||||||
this.enterCity(team); continue;
|
this.enterCity(team); continue;
|
||||||
}
|
}
|
||||||
let { areaId: fromAreaId, pointId: fromPointId } = teamMem;
|
let { curTeamBreak, pointId } = team;
|
||||||
|
let { areaId: fromAreaId, pointId: originPointId } = teamMem;
|
||||||
teamMem.updateTeam(team);
|
teamMem.updateTeam(team);
|
||||||
this.setRolePoints(team.roleId, fromPointId, team.pointId, team.teamCode);
|
this.setRolePoints(team.roleId, originPointId, curTeamBreak? 0: pointId, team.teamCode);
|
||||||
this.setAreaMap(team.teamCode, fromAreaId, team.areaId);
|
this.setAreaMap(team.teamCode, fromAreaId, team.areaId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -191,6 +192,7 @@ export async function initTeamToMem() {
|
|||||||
if(period != GVG_PERIOD.BATTLE) return;
|
if(period != GVG_PERIOD.BATTLE) return;
|
||||||
let teams = await GVGTeamModel.findByConfigId(configId);
|
let teams = await GVGTeamModel.findByConfigId(configId);
|
||||||
for(let team of teams) {
|
for(let team of teams) {
|
||||||
|
if(team.isBroken) continue;
|
||||||
if(dispatch(team.cityId.toString(), servers)?.id == sid) {
|
if(dispatch(team.cityId.toString(), servers)?.id == sid) {
|
||||||
let teamObj = getGVGBattleData(team.groupKey);
|
let teamObj = getGVGBattleData(team.groupKey);
|
||||||
teamObj.enterCity(team);
|
teamObj.enterCity(team);
|
||||||
|
|||||||
@@ -22,17 +22,7 @@ import { sendMailByContent, sendMailToLeagueByContent } from "../mailService";
|
|||||||
import { GVGCityAreaPointModel } from "../../db/GVGCityAreaPoint";
|
import { GVGCityAreaPointModel } from "../../db/GVGCityAreaPoint";
|
||||||
import { addCityGuardMessage } from "./gvgRecService";
|
import { addCityGuardMessage } from "./gvgRecService";
|
||||||
import { GVGUserDataModel } from "../../db/GVGUserData";
|
import { GVGUserDataModel } from "../../db/GVGUserData";
|
||||||
|
import { RoleModel } from "../../db/Role";
|
||||||
|
|
||||||
/**
|
|
||||||
* 检查上周是否有占领城池
|
|
||||||
* @param league
|
|
||||||
* @returns boolean 是否占领
|
|
||||||
*/
|
|
||||||
export async function checkHasCities(league: GVGLeagueType) {
|
|
||||||
let { configId } = getGVGConfig();
|
|
||||||
return await GVGCityModel.checkLeagueHasGuard(configId, league.leagueCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取本联军上周占领的城池
|
* 获取本联军上周占领的城池
|
||||||
@@ -138,7 +128,8 @@ export async function refreshTeams(configId: number, groupKey: string, roleId: s
|
|||||||
for(let team of oldTeams) {
|
for(let team of oldTeams) {
|
||||||
if(team.configId != configId) {
|
if(team.configId != configId) {
|
||||||
let { teamCode, maxDurability } = team;
|
let { teamCode, maxDurability } = team;
|
||||||
let newTeam = await GVGTeamModel.refreshByConfig(team.teamCode, { teamCode, durability: maxDurability, cityId: 0, areaId: 0, pointId: 0, roleName, guildCode, leagueCode: myLeague.leagueCode, leagueName: myLeague.name, groupKey });
|
let { lv } = await RoleModel.findByRoleId(roleId, 'lv');
|
||||||
|
let newTeam = await GVGTeamModel.refreshByConfig(teamCode, { configId, lv, durability: maxDurability, cityId: 0, areaId: 0, pointId: 0, roleName, guildCode, leagueCode: myLeague.leagueCode, leagueName: myLeague.name, groupKey });
|
||||||
teams.push(newTeam);
|
teams.push(newTeam);
|
||||||
} else {
|
} else {
|
||||||
teams.push(team);
|
teams.push(team);
|
||||||
@@ -297,16 +288,18 @@ export async function catapultHurt() {
|
|||||||
let dicGVGCity = gameData.gvgCity.get(catapult.cityId);
|
let dicGVGCity = gameData.gvgCity.get(catapult.cityId);
|
||||||
let teams = await GVGTeamModel.attackByCatapult(teamCodes, catapult.captapultAtk, dicGVGCity.attackBirth);
|
let teams = await GVGTeamModel.attackByCatapult(teamCodes, catapult.captapultAtk, dicGVGCity.attackBirth);
|
||||||
teamObj.battleEnd(teams);
|
teamObj.battleEnd(teams);
|
||||||
await sendMessageToGVGAreaWithSuc(teamObj.groupKey, catapult.areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
|
if(teams.length > 0) {
|
||||||
cityId: catapult.cityId, areaId: catapult.areaId, attackType: 1, teams: teams.map(team => new GVGTeamInList(team))
|
await sendMessageToGVGAreaByTeamWithSuc(teamObj.groupKey, catapult.areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
|
||||||
});
|
cityId: catapult.cityId, areaId: catapult.areaId, attackType: 1, teams: teams.map(team => new GVGTeamInList(team))
|
||||||
await sendMessageToGVGAreaByTeamWithSuc(teamObj.groupKey, catapult.areaId, PUSH_ROUTE.GVG_SPINE_ATTACKED, {
|
});
|
||||||
cityId: catapult.cityId, areaId: catapult.areaId, attackType: 1, teams: teams.map(team => new GVGAttackSpine(team, catapult.captapultAtk))
|
await sendMessageToGVGAreaWithSuc(teamObj.groupKey, catapult.areaId, PUSH_ROUTE.GVG_SPINE_ATTACKED, {
|
||||||
});
|
cityId: catapult.cityId, areaId: catapult.areaId, attackType: 1, teams: teams.map(team => new GVGAttackSpine(team, catapult.captapultAtk))
|
||||||
for(let team of teams) {
|
});
|
||||||
await pushTeamBeHurtMessage(team);
|
for(let team of teams) {
|
||||||
if(team.curTeamBreak && team.originPointId > 0) {
|
await pushTeamBeHurtMessage(team);
|
||||||
await GVGCityAreaPointModel.leavePoint(configId, teamObj.groupKey, team.originPointId);
|
if(team.curTeamBreak && team.originPointId > 0) {
|
||||||
|
await GVGCityAreaPointModel.leavePoint(configId, teamObj.groupKey, team.originPointId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { pinus } from "pinus";
|
|||||||
import { GVGConfigModel, GVGConfigType } from "../../db/GVGConfig";
|
import { GVGConfigModel, GVGConfigType } from "../../db/GVGConfig";
|
||||||
import { getTimeFun, getZeroPoint, getZeroPointOfTime, nowSeconds, WEEK_TO_SECOND } from "../../pubUtils/timeUtil";
|
import { getTimeFun, getZeroPoint, getZeroPointOfTime, nowSeconds, WEEK_TO_SECOND } from "../../pubUtils/timeUtil";
|
||||||
import { getAllServerCreateTime, getServerCreateTime } from "../redisService";
|
import { getAllServerCreateTime, getServerCreateTime } from "../redisService";
|
||||||
import { GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_JOB, SHOP_REFRESH_TYPE } from "../../consts";
|
import { GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_JOB, PUSH_ROUTE, SHOP_REFRESH_TYPE } from "../../consts";
|
||||||
import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague";
|
import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague";
|
||||||
import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
|
import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
|
||||||
import { GVGServerGroupModel } from "../../db/GVGServerGroup";
|
import { GVGServerGroupModel } from "../../db/GVGServerGroup";
|
||||||
@@ -11,7 +11,6 @@ import { getRandSingleEelm } from "../../pubUtils/util";
|
|||||||
import { GVG } from "../../pubUtils/dicParam";
|
import { GVG } from "../../pubUtils/dicParam";
|
||||||
import { ServerlistModel } from "../../db/Serverlist";
|
import { ServerlistModel } from "../../db/Serverlist";
|
||||||
import { GuildModel, GuildType } from "../../db/Guild";
|
import { GuildModel, GuildType } from "../../db/Guild";
|
||||||
import { checkHasCities } from "./gvgBattleService";
|
|
||||||
import { GVGLeagueApplyModel } from "../../db/GVGLeagueApply";
|
import { GVGLeagueApplyModel } from "../../db/GVGLeagueApply";
|
||||||
import { GVGMainData, LeagueContributeInfo } from "../../domain/gvgField/returnData";
|
import { GVGMainData, LeagueContributeInfo } from "../../domain/gvgField/returnData";
|
||||||
import { Contribute, GVGUserDataModel, GVGUserDataType } from "../../db/GVGUserData";
|
import { Contribute, GVGUserDataModel, GVGUserDataType } from "../../db/GVGUserData";
|
||||||
@@ -24,6 +23,8 @@ import { calVestigeLeagueBoxRewards, getFightTimeByPeriod } from "./gvgFightServ
|
|||||||
import { GVGVestigeLeagueRankModel } from "../../db/GVGVestigeLeagueRank";
|
import { GVGVestigeLeagueRankModel } from "../../db/GVGVestigeLeagueRank";
|
||||||
import { GVGVestigeSumRankModel } from "../../db/GVGVestigeSumRank";
|
import { GVGVestigeSumRankModel } from "../../db/GVGVestigeSumRank";
|
||||||
import { GVGTeamModel } from "../../db/GVGTeam";
|
import { GVGTeamModel } from "../../db/GVGTeam";
|
||||||
|
import { sendMessageToGuildWithSuc } from "../pushService";
|
||||||
|
import { GVGCityModel } from "../../db/GVGCity";
|
||||||
|
|
||||||
// 定时器相关
|
// 定时器相关
|
||||||
export async function createNewGVGConfig() {
|
export async function createNewGVGConfig() {
|
||||||
@@ -42,13 +43,20 @@ export async function createNewGVGConfig() {
|
|||||||
let autoLeagues = await GVGLeagueModel.findAutoCreateLeague();
|
let autoLeagues = await GVGLeagueModel.findAutoCreateLeague();
|
||||||
let needDissmissLeagueId: string[] = [], needDissmissLeagueCodes: string[] = [];
|
let needDissmissLeagueId: string[] = [], needDissmissLeagueCodes: string[] = [];
|
||||||
for(let league of autoLeagues) {
|
for(let league of autoLeagues) {
|
||||||
if(!await checkHasCities(league)) {
|
if(!await GVGCityModel.checkLeagueHasGuard(config.configId, league.leagueCode)) {
|
||||||
needDissmissLeagueId.push(league._id);
|
needDissmissLeagueId.push(league._id);
|
||||||
needDissmissLeagueCodes.push(league.leagueCode);
|
needDissmissLeagueCodes.push(league.leagueCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await GVGLeagueModel.dismissByIds(needDissmissLeagueId);
|
await GVGLeagueModel.dismissByIds(needDissmissLeagueId);
|
||||||
await GuildModel.leagueAutoDismiss(needDissmissLeagueCodes);
|
await GuildModel.leagueAutoDismiss(needDissmissLeagueCodes);
|
||||||
|
for(let league of autoLeagues) {
|
||||||
|
if(needDissmissLeagueCodes.indexOf(league.leagueCode) == -1) continue;
|
||||||
|
for(let guildCode of league.guildCodes) {
|
||||||
|
await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.LEAGUE_DISSMISS, { leagueCode: league.leagueCode })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
await pinus.app.rpc.systimer.systimerRemote.initGVGConfigSchedule.broadcast();
|
await pinus.app.rpc.systimer.systimerRemote.initGVGConfigSchedule.broadcast();
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export async function autoCreateLeague(guildCode: string) {
|
|||||||
if(!guild || guild.lv < GVG.GVG_ARMY_LEAGUE_TIME) return;
|
if(!guild || guild.lv < GVG.GVG_ARMY_LEAGUE_TIME) return;
|
||||||
|
|
||||||
let { configId, period } = getGVGPeriodData();
|
let { configId, period } = getGVGPeriodData();
|
||||||
if(period == GVG_PERIOD.PREPARE || period == GVG_PERIOD.BATTLE) {
|
if(period == GVG_PERIOD.PREPARE) {
|
||||||
let league = await createLeague(guild, {});
|
let league = await createLeague(guild, {});
|
||||||
await GVGLeaguePrepareModel.initData(configId, league.leagueCode, guild.memberCnt);
|
await GVGLeaguePrepareModel.initData(configId, league.leagueCode, guild.memberCnt);
|
||||||
return league;
|
return league;
|
||||||
|
|||||||
@@ -921,9 +921,12 @@ export async function initGVGConfigSchedule() {
|
|||||||
let { startFightTime, endFightTime } = getFightTimeByPeriod(GVG_PERIOD.BATTLE, config.battleTime);
|
let { startFightTime, endFightTime } = getFightTimeByPeriod(GVG_PERIOD.BATTLE, config.battleTime);
|
||||||
|
|
||||||
if(nowSeconds() > startFightTime && nowSeconds() < endFightTime) {
|
if(nowSeconds() > startFightTime && nowSeconds() < endFightTime) {
|
||||||
startGvgBattleSeconds();
|
if(gvgBattleSecondJob) gvgBattleSecondJob.cancel();
|
||||||
|
gvgBattleSecondJob = scheduleJob('gvgBattleSecondJob', '*/5 * * * * *', gvgBattleSecondSchedule);
|
||||||
|
if(gvgBattleCatapultJob) gvgBattleCatapultJob.cancel();
|
||||||
|
gvgBattleCatapultJob = scheduleJob('gvgBattleCatapultJob', `*/${GVG.GVG_CATAPULT_TIME} * * * * *`, gvgBattleCatapult);
|
||||||
} else {
|
} else {
|
||||||
scheduleJob(`gvgBattleStartSchedule`, startFightTime * 1000, gvgBattleStartSchedule);
|
scheduleJob(`gvgBattleStartSchedule`, (startFightTime - GVG.GVG_GUARD_START_TIME) * 1000, gvgBattleStartSchedule);
|
||||||
}
|
}
|
||||||
scheduleJob(`gvgBattleEndSchedule`, endFightTime * 1000, gvgBattleEndSchedule);
|
scheduleJob(`gvgBattleEndSchedule`, endFightTime * 1000, gvgBattleEndSchedule);
|
||||||
}
|
}
|
||||||
@@ -933,20 +936,21 @@ let gvgBattleCatapultJob: Job; // gvg投石车定时器
|
|||||||
|
|
||||||
// gvg激战期开始定时器
|
// gvg激战期开始定时器
|
||||||
export async function gvgBattleStartSchedule() {
|
export async function gvgBattleStartSchedule() {
|
||||||
// 初始化投石车
|
|
||||||
let guildServers = pinus.app.getServersByType('guild');
|
|
||||||
if(guildServers.length > 0) {
|
|
||||||
pinus.app.rpc.guild.guildRemote.gvgBattleStart.toServer(getRandSingleEelm(guildServers).id);
|
|
||||||
}
|
|
||||||
startGvgBattleSeconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
function startGvgBattleSeconds() {
|
|
||||||
// 发放道具
|
|
||||||
if(gvgBattleSecondJob) gvgBattleSecondJob.cancel();
|
if(gvgBattleSecondJob) gvgBattleSecondJob.cancel();
|
||||||
gvgBattleSecondJob = scheduleJob('gvgBattleSecondJob', '*/5 * * * * *', gvgBattleSecondSchedule);
|
gvgBattleSecondJob = scheduleJob('gvgBattleSecondJob', '*/5 * * * * *', gvgBattleSecondSchedule);
|
||||||
if(gvgBattleCatapultJob) gvgBattleCatapultJob.cancel();
|
|
||||||
gvgBattleCatapultJob = scheduleJob('gvgBattleCatapultJob', `*/${GVG.GVG_CATAPULT_TIME} * * * * *`, gvgBattleCatapult);
|
setTimeout(async () => {
|
||||||
|
console.log('############')
|
||||||
|
if(gvgBattleCatapultJob) gvgBattleCatapultJob.cancel();
|
||||||
|
gvgBattleCatapultJob = scheduleJob('gvgBattleCatapultJob', `*/${GVG.GVG_CATAPULT_TIME} * * * * *`, gvgBattleCatapult);
|
||||||
|
// 初始化投石车
|
||||||
|
let guildServers = pinus.app.getServersByType('guild');
|
||||||
|
if(guildServers.length > 0) {
|
||||||
|
pinus.app.rpc.guild.guildRemote.gvgBattleStart.toServer(getRandSingleEelm(guildServers).id);
|
||||||
|
}
|
||||||
|
|
||||||
|
}, 60);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 每隔5秒的积分计算定时器
|
// 每隔5秒的积分计算定时器
|
||||||
|
|||||||
@@ -49,7 +49,8 @@ export default class GVGCity extends BaseModel {
|
|||||||
|
|
||||||
// 添加人数
|
// 添加人数
|
||||||
public static async increasePlayer(configId: number, groupKey: string, cityId: number, roleId: string, leagueCode: string, teamCnt: number) {
|
public static async increasePlayer(configId: number, groupKey: string, cityId: number, roleId: string, leagueCode: string, teamCnt: number) {
|
||||||
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupKey, cityId, userCnt: { $lt: 200 } }, { $inc: { userCnt: 1 }, $push: { players: { roleId, leagueCode, teamCnt } }}, { new: true, upsert: true }).lean();
|
await GVGCityModel.findOneAndUpdate({ configId, groupKey, cityId }, { $setOnInsert: { userCnt: 0, players: [] } }, { upsert: true }).lean()
|
||||||
|
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupKey, cityId, userCnt: { $lt: 200 } }, { $inc: { userCnt: 1 }, $push: { players: { roleId, leagueCode, teamCnt } }}, { new: true }).lean();
|
||||||
return city;
|
return city;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,7 +99,7 @@ export default class GVGCity extends BaseModel {
|
|||||||
public static async guardCity(configId: number, groupKey: string, cityId: number, league: LeagueRankInfo) {
|
public static async guardCity(configId: number, groupKey: string, cityId: number, league: LeagueRankInfo) {
|
||||||
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId: configId + 1, cityId, groupKey }, { $set: {
|
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId: configId + 1, cityId, groupKey }, { $set: {
|
||||||
hasGuard: true, guardLeague: league.code, guardLeagueName: league.name, guardLeagueIcon: league.icon
|
hasGuard: true, guardLeague: league.code, guardLeagueName: league.name, guardLeagueIcon: league.icon
|
||||||
} }, { upsert: true, new: true }).lean();
|
}, $setOnInsert: { userCnt: 0, players: [] } }, { upsert: true, new: true }).lean();
|
||||||
return city;
|
return city;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -282,7 +282,7 @@ export default class GVGTeam extends BaseModel {
|
|||||||
|
|
||||||
// 结算防守方
|
// 结算防守方
|
||||||
public static async battleEndDefense(teamCode: string, hpInc: number, rebirthAreaId: number, reviveCd: number) {
|
public static async battleEndDefense(teamCode: string, hpInc: number, rebirthAreaId: number, reviveCd: number) {
|
||||||
let team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { defenseTime: nowSeconds() + GVG.GVG_DEFAULT_DEFENSE_CD, lockTime: 0, lockTeamCode: '' }, $inc: { durability: hpInc } }, { new: true }).lean();
|
let team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { defenseTime: nowSeconds() + GVG.GVG_DEFAULT_DEFENSE_CD, lockTime: 0, lockTeamCode: '' }, $inc: { durability: -hpInc } }, { new: true }).lean();
|
||||||
if(team.durability <= 0) {
|
if(team.durability <= 0) {
|
||||||
let originPointId = team.pointId;
|
let originPointId = team.pointId;
|
||||||
team = await GVGTeamModel.teamBreak(teamCode, team.isRobot, team.maxDurability, rebirthAreaId, team.areaId, reviveCd);
|
team = await GVGTeamModel.teamBreak(teamCode, team.isRobot, team.maxDurability, rebirthAreaId, team.areaId, reviveCd);
|
||||||
@@ -294,11 +294,11 @@ export default class GVGTeam extends BaseModel {
|
|||||||
// 队伍进入修整器
|
// 队伍进入修整器
|
||||||
public static async teamBreak(teamCode: string, isRobot: boolean, maxDurability: number, areaId: number, fromAreaId: number, reviveCd: number) {
|
public static async teamBreak(teamCode: string, isRobot: boolean, maxDurability: number, areaId: number, fromAreaId: number, reviveCd: number) {
|
||||||
if(!isRobot) {
|
if(!isRobot) {
|
||||||
const team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { restartTime: nowSeconds() - reviveCd, stopMoveTime: nowSeconds(), areaId, fromAreaId, durability: maxDurability, pointId: 0 } }, { new: true }).lean();
|
const team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { restartTime: nowSeconds() + reviveCd, stopMoveTime: nowSeconds(), areaId, fromAreaId, durability: maxDurability, pointId: 0 } }, { new: true }).lean();
|
||||||
team.curTeamBreak = true;
|
team.curTeamBreak = true;
|
||||||
return team;
|
return team;
|
||||||
} else {
|
} else {
|
||||||
const team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { fromAreaId, pointId: 0, durability: 0, isBroken: true } }, { new: true }).lean();
|
const team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { fromAreaId, durability: 0, isBroken: true } }, { new: true }).lean();
|
||||||
team.curTeamBreak = true;
|
team.curTeamBreak = true;
|
||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -375,7 +375,7 @@ export const GUIDE = {
|
|||||||
};
|
};
|
||||||
export const GVG = {
|
export const GVG = {
|
||||||
GVG_LEAGUE_COMPOSE: 3, // 一个联军有最多多少军团组成
|
GVG_LEAGUE_COMPOSE: 3, // 一个联军有最多多少军团组成
|
||||||
GVG_CROSS_SERVICE_STARTTIME: 4, // 开服几周后开始跨服玩法
|
GVG_CROSS_SERVICE_STARTTIME: 2, // 开服几周后开始跨服玩法
|
||||||
GVG_ROLE_TOTAL_RATIO: 1.2, // 贤臣+猛将总人数上限系数
|
GVG_ROLE_TOTAL_RATIO: 1.2, // 贤臣+猛将总人数上限系数
|
||||||
GVG_ROLE_RATIO: 1, // 贤臣/猛将各职能选择人数上限系数
|
GVG_ROLE_RATIO: 1, // 贤臣/猛将各职能选择人数上限系数
|
||||||
GVG_PRODUCER_GET: '10&6|11&2', // 贤臣每天发多少令
|
GVG_PRODUCER_GET: '10&6|11&2', // 贤臣每天发多少令
|
||||||
@@ -386,7 +386,7 @@ export const GVG = {
|
|||||||
GVG_ARMY_LEAGUE_TIME: 3, // GVG开启军团等级开启限制
|
GVG_ARMY_LEAGUE_TIME: 3, // GVG开启军团等级开启限制
|
||||||
GVG_ROLE_TYPE: '1&贤臣|2&猛将', // GVG中职能选择
|
GVG_ROLE_TYPE: '1&贤臣|2&猛将', // GVG中职能选择
|
||||||
GVG_TEAM_NUMBER: '1&1&100|2&50&100|3&80&100', // GVG编队,index&lv&durability
|
GVG_TEAM_NUMBER: '1&1&100|2&50&100|3&80&100', // GVG编队,index&lv&durability
|
||||||
GVG_CATAPULT: '&', // &
|
GVG_GUARD_START_TIME: 300, // 城池占领者提前入城时间
|
||||||
GVG_CITY_OCCUPIED_NUMBER: 2, // 一个联军最多可以占领的城池数量
|
GVG_CITY_OCCUPIED_NUMBER: 2, // 一个联军最多可以占领的城池数量
|
||||||
GVG_SP_FIELD_ADD: 0.2, // 农田特殊格子上种植对应的植物的加成
|
GVG_SP_FIELD_ADD: 0.2, // 农田特殊格子上种植对应的植物的加成
|
||||||
GVG_FARM_LOCK_TIME: 300, // 农田锁定时间(秒)
|
GVG_FARM_LOCK_TIME: 300, // 农田锁定时间(秒)
|
||||||
@@ -418,6 +418,7 @@ export const GVG = {
|
|||||||
GVG_ROBOT_WARJSON: 85002, // GVG城池守卫的出兵表
|
GVG_ROBOT_WARJSON: 85002, // GVG城池守卫的出兵表
|
||||||
GVG_REDPOINT_BATTLEFEAT: 0, // 千机阁战功红点大于多少可能出现红点
|
GVG_REDPOINT_BATTLEFEAT: 0, // 千机阁战功红点大于多少可能出现红点
|
||||||
GVG_REVIVE_GOLD: '1&100|2&150|3&200|4&250|5&300|6&500', // GVG激战期元宝购买复活的消耗,次数&元宝数
|
GVG_REVIVE_GOLD: '1&100|2&150|3&200|4&250|5&300|6&500', // GVG激战期元宝购买复活的消耗,次数&元宝数
|
||||||
|
GVG_VESTIGE_CHALLENGE_TIME: '5:00:00&22:00:00', // 征战中原遗迹可挑战时间
|
||||||
};
|
};
|
||||||
export const PLATFORM_CONFIG = {
|
export const PLATFORM_CONFIG = {
|
||||||
OPEN_ANIMATION: 1, // 0关,1开(开场动画视频)
|
OPEN_ANIMATION: 1, // 0关,1开(开场动画视频)
|
||||||
|
|||||||
@@ -292,5 +292,12 @@
|
|||||||
"sendName": "学宫驿使",
|
"sendName": "学宫驿使",
|
||||||
"content": "亲爱的百家传人,逐鹿中原激战期已结束,您的联军锐不可当成功占领%d,占领奖励现已发送至邮箱,请查收",
|
"content": "亲爱的百家传人,逐鹿中原激战期已结束,您的联军锐不可当成功占领%d,占领奖励现已发送至邮箱,请查收",
|
||||||
"time": 720
|
"time": 720
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 42,
|
||||||
|
"title": "联军邮件",
|
||||||
|
"sendName": "&",
|
||||||
|
"content": "%d",
|
||||||
|
"time": 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
{
|
{
|
||||||
"periodType": 3,
|
"periodType": 3,
|
||||||
"day": "6&",
|
"day": "6&",
|
||||||
"startTime": "17:00:00",
|
"startTime": "22:06:00",
|
||||||
"endTime": "22:00:00"
|
"endTime": "23:00:00"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
Reference in New Issue
Block a user