🐞 fix(gvg): 添加可以不发奖励的开关
This commit is contained in:
@@ -3,7 +3,7 @@ import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague";
|
|||||||
import { GVGTeamModel, GVGTeamType, GVGTeamUpdate } from "../../db/GVGTeam";
|
import { GVGTeamModel, GVGTeamType, GVGTeamUpdate } from "../../db/GVGTeam";
|
||||||
import { GVGCityModel, GVGCityType } from "../../db/GVGCity";
|
import { GVGCityModel, GVGCityType } from "../../db/GVGCity";
|
||||||
import { gameData, getGVGBattleRankReward } from "../../pubUtils/data";
|
import { gameData, getGVGBattleRankReward } from "../../pubUtils/data";
|
||||||
import { GVG_AREA_TYPE, GVG_ATTACK_TYPE, GVG_BATTLE_RANK_TYPE, GVG_PERIOD, GVG_POINT_TYPE, GVG_TECH_TYPE, MAIL_TYPE, PUSH_ROUTE, REDIS_KEY, STATUS } from "../../consts";
|
import { COUNTER, GVG_AREA_TYPE, GVG_ATTACK_TYPE, GVG_BATTLE_RANK_TYPE, GVG_PERIOD, GVG_POINT_TYPE, GVG_TECH_TYPE, MAIL_TYPE, PUSH_ROUTE, REDIS_KEY, STATUS } from "../../consts";
|
||||||
import { getTimeFun, nowSeconds } from "../../pubUtils/timeUtil";
|
import { getTimeFun, nowSeconds } from "../../pubUtils/timeUtil";
|
||||||
import { DicGVGAreaPoint } from "../../pubUtils/dictionary/DicGVGAreaPoint";
|
import { DicGVGAreaPoint } from "../../pubUtils/dictionary/DicGVGAreaPoint";
|
||||||
import { getGVGBattleData, getGVGBattleMap } from "./gvgBattleMemory";
|
import { getGVGBattleData, getGVGBattleMap } from "./gvgBattleMemory";
|
||||||
@@ -16,7 +16,7 @@ import { pinus } from "pinus";
|
|||||||
import { dispatch } from "../../pubUtils/dispatcher";
|
import { dispatch } from "../../pubUtils/dispatcher";
|
||||||
import { Rank } from "../rankService";
|
import { Rank } from "../rankService";
|
||||||
import { KeyNameParam, LeagueRankInfo, myIdInter, RoleRankInfo } from "../../domain/rank";
|
import { KeyNameParam, LeagueRankInfo, myIdInter, RoleRankInfo } from "../../domain/rank";
|
||||||
import { findKeys, getAllServerName } from "../redisService";
|
import { findKeys, getAllServerName, redisClient } from "../redisService";
|
||||||
import { sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc, sendMessageToGVGCityWithSuc, sendMessageToUserWithSuc } from "../pushService";
|
import { sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc, sendMessageToGVGCityWithSuc, sendMessageToUserWithSuc } from "../pushService";
|
||||||
import { sendMailByContent, sendMailToLeagueByContent } from "../mailService";
|
import { sendMailByContent, sendMailToLeagueByContent } from "../mailService";
|
||||||
import { GVGCityAreaPointModel } from "../../db/GVGCityAreaPoint";
|
import { GVGCityAreaPointModel } from "../../db/GVGCityAreaPoint";
|
||||||
@@ -28,6 +28,7 @@ import { getRandSingleEelm } from "../../pubUtils/util";
|
|||||||
import { HeroModel, HeroType } from "../../db/Hero";
|
import { HeroModel, HeroType } from "../../db/Hero";
|
||||||
import { ArtifactModel } from "../../db/Artifact";
|
import { ArtifactModel } from "../../db/Artifact";
|
||||||
import { getHeroesAttributes } from "../playerCeService";
|
import { getHeroesAttributes } from "../playerCeService";
|
||||||
|
import { CounterModel } from "../../db/Counter";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取本联军上周占领的城池
|
* 获取本联军上周占领的城池
|
||||||
@@ -520,9 +521,9 @@ export async function gvgBattleSeconds() {
|
|||||||
export async function gvgBattleEnd() {
|
export async function gvgBattleEnd() {
|
||||||
console.log('######### gvgBattleEnd #######')
|
console.log('######### gvgBattleEnd #######')
|
||||||
let { configId } = getGVGConfig();
|
let { configId } = getGVGConfig();
|
||||||
|
let dontSendReward = await redisClient().getAsync(REDIS_KEY.GVG_SEND_REWARD) == 'true';
|
||||||
// 城池占领情况
|
// 城池占领情况
|
||||||
await calCityGuard(configId);
|
await calCityGuard(configId, dontSendReward);
|
||||||
|
|
||||||
// 联军排行榜发放奖励
|
// 联军排行榜发放奖励
|
||||||
let leagueKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_LEAGUE_RANK}:${configId}:`);
|
let leagueKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_LEAGUE_RANK}:${configId}:`);
|
||||||
@@ -534,7 +535,7 @@ export async function gvgBattleEnd() {
|
|||||||
for(let _obj of ranks) {
|
for(let _obj of ranks) {
|
||||||
let obj = <LeagueRankInfo>_obj;
|
let obj = <LeagueRankInfo>_obj;
|
||||||
let dicRank = getGVGBattleRankReward(GVG_BATTLE_RANK_TYPE.LEAGUE, obj.rank);
|
let dicRank = getGVGBattleRankReward(GVG_BATTLE_RANK_TYPE.LEAGUE, obj.rank);
|
||||||
await sendMailToLeagueByContent(MAIL_TYPE.GVG_BATTLE_LEAGUE_RANK_REWARD, obj.code, { params: [`${obj.rank}`], goods: dicRank.reward });
|
await sendMailToLeagueByContent(MAIL_TYPE.GVG_BATTLE_LEAGUE_RANK_REWARD, obj.code, { params: [`${obj.rank}`], goods: dicRank.reward }, null, dontSendReward);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -548,7 +549,7 @@ export async function gvgBattleEnd() {
|
|||||||
for(let _obj of ranks) {
|
for(let _obj of ranks) {
|
||||||
let obj = <RoleRankInfo>_obj;
|
let obj = <RoleRankInfo>_obj;
|
||||||
let dicRank = getGVGBattleRankReward(GVG_BATTLE_RANK_TYPE.PLAYER, obj.rank);
|
let dicRank = getGVGBattleRankReward(GVG_BATTLE_RANK_TYPE.PLAYER, obj.rank);
|
||||||
await sendMailByContent(MAIL_TYPE.GVG_BATTLE_PLAYER_RANK_REWARD, obj.roleId, { params: [`${obj.rank}`], goods: dicRank.reward });
|
await sendMailByContent(MAIL_TYPE.GVG_BATTLE_PLAYER_RANK_REWARD, obj.roleId, { params: [`${obj.rank}`], goods: dicRank.reward }, dontSendReward);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -558,7 +559,7 @@ interface SortCities { cityType: number, cityId: number, index: number, league:
|
|||||||
interface RankAndLastLeague { ranks: LeagueRankInfo[], lastLeague: string };
|
interface RankAndLastLeague { ranks: LeagueRankInfo[], lastLeague: string };
|
||||||
|
|
||||||
// 赛期末结算守城
|
// 赛期末结算守城
|
||||||
export async function calCityGuard(configId: number) {
|
export async function calCityGuard(configId: number, canSendReward: boolean) {
|
||||||
|
|
||||||
let sortCities = new Map<string, SortCities[]>(); // groupKey => cities
|
let sortCities = new Map<string, SortCities[]>(); // groupKey => cities
|
||||||
let rankByCity = new Map<string, Map<number, RankAndLastLeague>>(); // groupKey => city => {ranks, lastLeague}
|
let rankByCity = new Map<string, Map<number, RankAndLastLeague>>(); // groupKey => city => {ranks, lastLeague}
|
||||||
@@ -581,7 +582,7 @@ export async function calCityGuard(configId: number) {
|
|||||||
if(!leagueCode) continue;
|
if(!leagueCode) continue;
|
||||||
let cnt = guardLeagueCnt.get(leagueCode)||0;
|
let cnt = guardLeagueCnt.get(leagueCode)||0;
|
||||||
if(cnt < GVG.GVG_CITY_OCCUPIED_NUMBER) {
|
if(cnt < GVG.GVG_CITY_OCCUPIED_NUMBER) {
|
||||||
await addGuardCity(configId, groupKey, cityId, leagueCode);
|
await addGuardCity(configId, groupKey, cityId, leagueCode, canSendReward);
|
||||||
guardLeagueCnt.set(leagueCode, cnt + 1);
|
guardLeagueCnt.set(leagueCode, cnt + 1);
|
||||||
cityResult.push(cityId);
|
cityResult.push(cityId);
|
||||||
}
|
}
|
||||||
@@ -647,14 +648,13 @@ async function generateData(configId: number, sortCities: Map<string, SortCities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function addGuardCity(configId: number, groupKey: string, cityId: number, leagueCode: string) {
|
async function addGuardCity(configId: number, groupKey: string, cityId: number, leagueCode: string, canSendReward: boolean) {
|
||||||
console.log('####### addGuardCity', configId, groupKey, cityId, leagueCode)
|
|
||||||
let dicCity = gameData.gvgCity.get(cityId);
|
let dicCity = gameData.gvgCity.get(cityId);
|
||||||
let dicCityAdd = gameData.gvgCityAdd.get(dicCity.cityType);
|
let dicCityAdd = gameData.gvgCityAdd.get(dicCity.cityType);
|
||||||
let league = await GVGLeagueModel.findByCodeWithoutPopulate(leagueCode);
|
let league = await GVGLeagueModel.findByCodeWithoutPopulate(leagueCode);
|
||||||
if(!league) return;
|
if(!league) return;
|
||||||
await GVGCityModel.guardCity(configId, groupKey, cityId, league);
|
await GVGCityModel.guardCity(configId, groupKey, cityId, league);
|
||||||
await sendMailToLeagueByContent(MAIL_TYPE.GVG_GUARD_CITY_REWARD, leagueCode, { params: [dicCity.cityName], goods: dicCityAdd.occupyReward }, league);
|
await sendMailToLeagueByContent(MAIL_TYPE.GVG_GUARD_CITY_REWARD, leagueCode, { params: [dicCity.cityName], goods: dicCityAdd.occupyReward }, league, canSendReward);
|
||||||
await addCityGuardMessage(league, cityId);
|
await addCityGuardMessage(league, cityId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,9 +55,11 @@ function getMailInfos(roleId: string, mails: MailType[], groupMails: GroupMailTy
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function sendMailByContent(contentId: MAIL_TYPE, hisRoleId: string, params: { sendName?: string, endTime?: number, params?: string[], goods?: RewardInter[] }) {
|
export async function sendMailByContent(contentId: MAIL_TYPE, hisRoleId: string, params: { sendName?: string, endTime?: number, params?: string[], goods?: RewardInter[] }, dontSendReward?: boolean) {
|
||||||
|
|
||||||
let f = new SendMailFun();
|
let f = new SendMailFun();
|
||||||
let code = f.setWithContentId(contentId, params);
|
let code = f.setWithContentId(contentId, params);
|
||||||
|
if(dontSendReward) f.setMailHide();
|
||||||
await f.createSingleMails(code, [hisRoleId]);
|
await f.createSingleMails(code, [hisRoleId]);
|
||||||
await f.pushToUsers();
|
await f.pushToUsers();
|
||||||
}
|
}
|
||||||
@@ -72,11 +74,13 @@ export async function sendMailToGuildByContent(contentId: MAIL_TYPE, guildCode:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function sendMailToLeagueByContent(contentId: MAIL_TYPE, leagueCode: string, params: { sendName?: string, endTime?: number, params?: string[], goods?: RewardInter[] }, league?: GVGLeagueType) {
|
export async function sendMailToLeagueByContent(contentId: MAIL_TYPE, leagueCode: string, params: { sendName?: string, endTime?: number, params?: string[], goods?: RewardInter[] }, league?: GVGLeagueType, dontSendReward?: boolean) {
|
||||||
|
console.log('###### sendMailToLeagueByContent', dontSendReward)
|
||||||
if(!league) league = await GVGLeagueModel.findByCodeWithoutPopulate(leagueCode);
|
if(!league) league = await GVGLeagueModel.findByCodeWithoutPopulate(leagueCode);
|
||||||
if(!league) return false;
|
if(!league) return false;
|
||||||
let f = new SendMailFun();
|
let f = new SendMailFun();
|
||||||
let code = f.setWithContentId(contentId, params);
|
let code = f.setWithContentId(contentId, params);
|
||||||
|
if(dontSendReward) f.setMailHide();
|
||||||
await f.createGroupMails(code, league.members.map(cur => cur.roleId), null, leagueCode);
|
await f.createGroupMails(code, league.members.map(cur => cur.roleId), null, leagueCode);
|
||||||
await f.pushToUsers();
|
await f.pushToUsers();
|
||||||
return true;
|
return true;
|
||||||
@@ -201,11 +205,16 @@ export class SendMailFun {
|
|||||||
private mails: MailType[] = [];
|
private mails: MailType[] = [];
|
||||||
private groupMails: GroupMailType[] = [];
|
private groupMails: GroupMailType[] = [];
|
||||||
private serverMails: ServerMailType[] = [];
|
private serverMails: ServerMailType[] = [];
|
||||||
|
private hideMail = false;
|
||||||
|
|
||||||
public getMailTemp(code: string) {
|
public getMailTemp(code: string) {
|
||||||
return this.mailTemps.get(code);
|
return this.mailTemps.get(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public setMailHide() {
|
||||||
|
this.hideMail = true;
|
||||||
|
}
|
||||||
|
|
||||||
// 从dicMail读取数据
|
// 从dicMail读取数据
|
||||||
public setWithContentId(contentId: MAIL_TYPE, params: { sendName?: string, params?: string[], goods?: RewardInter[] }) {
|
public setWithContentId(contentId: MAIL_TYPE, params: { sendName?: string, params?: string[], goods?: RewardInter[] }) {
|
||||||
let mailTemp = new MailTemp();
|
let mailTemp = new MailTemp();
|
||||||
@@ -228,7 +237,8 @@ export class SendMailFun {
|
|||||||
let mapTemp = this.mailTemps.get(code);
|
let mapTemp = this.mailTemps.get(code);
|
||||||
if(mapTemp.sendTime < nowSeconds()) return;
|
if(mapTemp.sendTime < nowSeconds()) return;
|
||||||
for(let roleId of roleIds) {
|
for(let roleId of roleIds) {
|
||||||
let originMail = await MailModel.addMail({ roleId, ...mapTemp.getCreateMailParams() });
|
console.log('#### createSingleMails this.hideMail', this.hideMail, this.hideMail? MAIL_STATUS.HIDE: MAIL_STATUS.CREATE)
|
||||||
|
let originMail = await MailModel.addMail({ roleId, status: this.hideMail? MAIL_STATUS.HIDE: MAIL_STATUS.CREATE, ...mapTemp.getCreateMailParams() });
|
||||||
this.mails.push(originMail);
|
this.mails.push(originMail);
|
||||||
}
|
}
|
||||||
if(mapTemp.gmmail) await GMMailModel.sendMail(mapTemp.gmmail._id, mapTemp.sendTime);
|
if(mapTemp.gmmail) await GMMailModel.sendMail(mapTemp.gmmail._id, mapTemp.sendTime);
|
||||||
@@ -239,8 +249,9 @@ export class SendMailFun {
|
|||||||
let mapTemp = this.mailTemps.get(code);
|
let mapTemp = this.mailTemps.get(code);
|
||||||
if(mapTemp.sendTime < nowSeconds()) return;
|
if(mapTemp.sendTime < nowSeconds()) return;
|
||||||
let roleStatus = roleIds.map(roleId => {
|
let roleStatus = roleIds.map(roleId => {
|
||||||
return { roleId, status: MAIL_STATUS.CREATE }
|
return { roleId, status: this.hideMail? MAIL_STATUS.HIDE: MAIL_STATUS.CREATE }
|
||||||
})
|
})
|
||||||
|
console.log('#### createGroupMails', this.hideMail, roleStatus)
|
||||||
let originMail = await GroupMailModel.addMail({ roleStatus, guildCode, leagueCode, ...mapTemp.getCreateMailParams() });
|
let originMail = await GroupMailModel.addMail({ roleStatus, guildCode, leagueCode, ...mapTemp.getCreateMailParams() });
|
||||||
if(mapTemp.gmmail) await GMMailModel.sendMail(mapTemp.gmmail._id, mapTemp.sendTime);
|
if(mapTemp.gmmail) await GMMailModel.sendMail(mapTemp.gmmail._id, mapTemp.sendTime);
|
||||||
this.groupMails.push(originMail);
|
this.groupMails.push(originMail);
|
||||||
@@ -266,6 +277,7 @@ export class SendMailFun {
|
|||||||
|
|
||||||
// 将存储的邮件发出
|
// 将存储的邮件发出
|
||||||
public async pushToUsers(myRoleId?: string, mySid?: string) {
|
public async pushToUsers(myRoleId?: string, mySid?: string) {
|
||||||
|
if(this.hideMail) return;
|
||||||
// 将可以发的邮件发出
|
// 将可以发的邮件发出
|
||||||
let pushByRoleId = new Map<string, MailParam[]>();
|
let pushByRoleId = new Map<string, MailParam[]>();
|
||||||
let pushByGuildCode = new Map<string, MailParam[]>();
|
let pushByGuildCode = new Map<string, MailParam[]>();
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
export enum MAIL_STATUS {
|
export enum MAIL_STATUS {
|
||||||
|
HIDE = -2,
|
||||||
DELETE = -1,
|
DELETE = -1,
|
||||||
CREATE = 0,
|
CREATE = 0,
|
||||||
READ = 1,
|
READ = 1,
|
||||||
|
|||||||
@@ -265,6 +265,7 @@ export enum REDIS_KEY {
|
|||||||
GVG_HISTORY_AREA ='gvgHisArea', // gvg激战期玩家加入的区域
|
GVG_HISTORY_AREA ='gvgHisArea', // gvg激战期玩家加入的区域
|
||||||
GVG_HISTORY_AREA_TEAM ='gvgHisAreaTeam', // gvg激战期玩家加入的区域
|
GVG_HISTORY_AREA_TEAM ='gvgHisAreaTeam', // gvg激战期玩家加入的区域
|
||||||
GVG_HISTORY_CITY ='gvgHisCity', // gvg激战期玩家进入的城池
|
GVG_HISTORY_CITY ='gvgHisCity', // gvg激战期玩家进入的城池
|
||||||
|
GVG_SEND_REWARD ='gvgSendReward', // gvg发放奖励
|
||||||
}
|
}
|
||||||
|
|
||||||
// 各排行榜对应hash的key
|
// 各排行榜对应hash的key
|
||||||
|
|||||||
Reference in New Issue
Block a user