✨ feat(gvg): 每日首次获得
This commit is contained in:
@@ -12,7 +12,7 @@ import { GVGUserItemModel } from "../../../db/GVGUserItem";
|
|||||||
import { GVGUserTaskModel } from "../../../db/GVGUserTask";
|
import { GVGUserTaskModel } from "../../../db/GVGUserTask";
|
||||||
import { GVG } from "../../../pubUtils/dicParam";
|
import { GVG } from "../../../pubUtils/dicParam";
|
||||||
import { RoleModel } from "../../../db/Role";
|
import { RoleModel } from "../../../db/Role";
|
||||||
import { addGVGActive, calProduce, checkPreTech, checkTechIsIng } from "../../../services/gvg/gvgPrepareService";
|
import { addGVGActive, addGVGTechActive, calProduce, checkPreTech, checkTechIsIng, getDailyLoginReward, getGVGDailyItems } from "../../../services/gvg/gvgPrepareService";
|
||||||
import { GVGUserDailyDataModel } from "../../../db/GVGUserDailyData";
|
import { GVGUserDailyDataModel } from "../../../db/GVGUserDailyData";
|
||||||
import { gameData } from "../../../pubUtils/data";
|
import { gameData } from "../../../pubUtils/data";
|
||||||
import { lockLeagueData } from "../../../services/redLockService";
|
import { lockLeagueData } from "../../../services/redLockService";
|
||||||
@@ -33,8 +33,10 @@ export class GVGHandler {
|
|||||||
// 测试
|
// 测试
|
||||||
async getData(msg: {}, session: BackendSession) {
|
async getData(msg: {}, session: BackendSession) {
|
||||||
const roleId = session.get('roleId');
|
const roleId = session.get('roleId');
|
||||||
const guildCode = session.get('guildCode');
|
const roleName = session.get('roleName');
|
||||||
const serverId = session.get('serverId');
|
const serverId = session.get('serverId');
|
||||||
|
const guildCode = session.get('guildCode');
|
||||||
|
const sid = session.get('sid');
|
||||||
|
|
||||||
let { configId, period, countdownTime } = getGVGPeriodData();
|
let { configId, period, countdownTime } = getGVGPeriodData();
|
||||||
let serverType = await getGVGServerType(serverId);
|
let serverType = await getGVGServerType(serverId);
|
||||||
@@ -57,6 +59,9 @@ export class GVGHandler {
|
|||||||
let items = await GVGUserItemModel.findByRole(configId, league.leagueCode, roleId);
|
let items = await GVGUserItemModel.findByRole(configId, league.leagueCode, roleId);
|
||||||
let tasks = await GVGUserTaskModel.findByRole(configId, league.leagueCode, roleId);
|
let tasks = await GVGUserTaskModel.findByRole(configId, league.leagueCode, roleId);
|
||||||
data.setPlayerInfo(userData, getMyAuth(league, roleId), await checkCanPrepare(roleId), checkCanChooseJob(userData?.job, leaguePrepare), items, tasks);
|
data.setPlayerInfo(userData, getMyAuth(league, roleId), await checkCanPrepare(roleId), checkCanChooseJob(userData?.job, leaguePrepare), items, tasks);
|
||||||
|
|
||||||
|
let { reward: dailyReward } = await getDailyLoginReward(roleId, roleName, sid, league.leagueCode, userData?.job);
|
||||||
|
if(dailyReward) data.setFistLogin(dailyReward);
|
||||||
}
|
}
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, data)
|
return resResult(STATUS.SUCCESS, data)
|
||||||
@@ -71,6 +76,8 @@ export class GVGHandler {
|
|||||||
// 选择职能
|
// 选择职能
|
||||||
async chooseJob(msg: { job: number }, session: BackendSession) {
|
async chooseJob(msg: { job: number }, session: BackendSession) {
|
||||||
const roleId = session.get('roleId');
|
const roleId = session.get('roleId');
|
||||||
|
const roleName = session.get('roleName');
|
||||||
|
const sid = session.get('sid');
|
||||||
const guildCode = session.get('guildCode');
|
const guildCode = session.get('guildCode');
|
||||||
const { job } = msg;
|
const { job } = msg;
|
||||||
|
|
||||||
@@ -97,12 +104,14 @@ export class GVGHandler {
|
|||||||
myUserData = await GVGUserDataModel.chooseJob(configId, myLeague.leagueCode, roleId, job);
|
myUserData = await GVGUserDataModel.chooseJob(configId, myLeague.leagueCode, roleId, job);
|
||||||
// 更新prepare
|
// 更新prepare
|
||||||
leaguePrepare = await GVGLeaguePrepareModel.chooseJob(configId, myLeague.leagueCode, job);
|
leaguePrepare = await GVGLeaguePrepareModel.chooseJob(configId, myLeague.leagueCode, job);
|
||||||
|
let { reward: dailyReward } = await getDailyLoginReward(roleId, roleName, sid, myLeague.leagueCode, myUserData?.job);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
leagueCode: myLeague.leagueCode,
|
leagueCode: myLeague.leagueCode,
|
||||||
job: myUserData.job,
|
job: myUserData.job,
|
||||||
producerCnt: leaguePrepare.producerCnt,
|
producerCnt: leaguePrepare.producerCnt,
|
||||||
fighterCnt: leaguePrepare.fighterCnt
|
fighterCnt: leaguePrepare.fighterCnt,
|
||||||
|
leagueGoods: dailyReward? dailyReward: []
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,7 +279,7 @@ export class GVGHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 添加 活跃
|
// 添加 活跃
|
||||||
let active = await addGVGActive(myLeague.leagueCode, roleId, GVG_ACTIVE_TYPE.TECH_ACTIVATE);
|
let active = await addGVGTechActive(myLeague.leagueCode, roleId);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
active,
|
active,
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import { GVG_ACTIVE_TYPE } from "../../consts";
|
import { GVG_ACTIVE_TYPE, ITEM_CHANGE_REASON, LEAGUE_JOB } from "../../consts";
|
||||||
import { Tech } from "../../db/GVGLeaguePrepare";
|
import { Tech } from "../../db/GVGLeaguePrepare";
|
||||||
import { GVGUserDailyDataModel } from "../../db/GVGUserDailyData";
|
import { GVGUserDailyDataModel } from "../../db/GVGUserDailyData";
|
||||||
import { GVGUserDataModel } from "../../db/GVGUserData";
|
import { GVGUserDataModel, GVGUserDataType } from "../../db/GVGUserData";
|
||||||
import { gameData } from "../../pubUtils/data";
|
import { gameData } from "../../pubUtils/data";
|
||||||
|
import { GVG } from "../../pubUtils/dicParam";
|
||||||
|
import { parseGoodStr } from "../../pubUtils/util";
|
||||||
|
import { addGVGReward } from "./gvgItemService";
|
||||||
import { getGVGConfig } from "./gvgService";
|
import { getGVGConfig } from "./gvgService";
|
||||||
|
|
||||||
export function checkPreTech(techId: number, activeQueue: number[], techQueue: Tech[]) {
|
export function checkPreTech(techId: number, activeQueue: number[], techQueue: Tech[]) {
|
||||||
@@ -42,14 +45,34 @@ export async function addGVGActive(leagueCode: string, roleId: string, type: GVG
|
|||||||
let { configId } = getGVGConfig();
|
let { configId } = getGVGConfig();
|
||||||
|
|
||||||
let add = gameData.gvgActive.get(type)||0;
|
let add = gameData.gvgActive.get(type)||0;
|
||||||
if(type == GVG_ACTIVE_TYPE.TECH_ACTIVATE) {
|
|
||||||
let check = await GVGUserDailyDataModel.checkGetTechActive(configId, leagueCode, roleId);
|
|
||||||
if(!check) {
|
|
||||||
await GVGUserDailyDataModel.setHasGetTechActive(configId, leagueCode, roleId);
|
|
||||||
} else {
|
|
||||||
add = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let result = await GVGUserDataModel.addActive(configId, leagueCode, roleId, type, add);
|
let result = await GVGUserDataModel.addActive(configId, leagueCode, roleId, type, add);
|
||||||
return result.active;
|
return result.active;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function addGVGTechActive(leagueCode: string, roleId: string) {
|
||||||
|
let { configId } = getGVGConfig();
|
||||||
|
let check = await GVGUserDailyDataModel.checkGetTechActive(configId, leagueCode, roleId);
|
||||||
|
if(!check) {
|
||||||
|
await GVGUserDailyDataModel.setHasGetTechActive(configId, leagueCode, roleId);
|
||||||
|
return await addGVGActive(leagueCode, roleId, GVG_ACTIVE_TYPE.TECH_ACTIVATE);
|
||||||
|
} else {
|
||||||
|
const data = await GVGUserDataModel.findByRole(configId, leagueCode, roleId);
|
||||||
|
return data?.active||0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getGVGDailyItems(job: number) {
|
||||||
|
return job == LEAGUE_JOB.PRODUCER? parseGoodStr(GVG.GVG_PRODUCER_GET): parseGoodStr(GVG.GVG_FIGHTER_GET);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getDailyLoginReward(roleId: string, roleName: string, sid: string, leagueCode: string, job: number) {
|
||||||
|
let { configId } = getGVGConfig();
|
||||||
|
if(job && !await GVGUserDailyDataModel.checkHasLogin(configId, leagueCode, roleId)) {
|
||||||
|
// 发每日奖励
|
||||||
|
await GVGUserDailyDataModel.setHasLogin(configId, leagueCode, roleId);
|
||||||
|
let leagueGoods = await addGVGReward(roleId, roleName, leagueCode, sid, getGVGDailyItems(job), [], ITEM_CHANGE_REASON.GVG_LOGIN)
|
||||||
|
let active = await addGVGActive(leagueCode, roleId, GVG_ACTIVE_TYPE.LOGIN);
|
||||||
|
return { active, reward: leagueGoods }
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
@@ -1070,6 +1070,7 @@ export enum ITEM_CHANGE_REASON {
|
|||||||
ARTIFACT_TRANSFER = 159, // 宝物转换
|
ARTIFACT_TRANSFER = 159, // 宝物转换
|
||||||
ARTIFACT_REBUILD = 160, // 宝物重铸
|
ARTIFACT_REBUILD = 160, // 宝物重铸
|
||||||
GVG_ACTIVE_TECH = 161, // 千机阁解锁
|
GVG_ACTIVE_TECH = 161, // 千机阁解锁
|
||||||
|
GVG_LOGIN = 162, // 每日登录
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum TA_EVENT {
|
export enum TA_EVENT {
|
||||||
|
|||||||
@@ -85,7 +85,6 @@ export default class GVGLeague extends BaseModel {
|
|||||||
public static async findLeagueByGuild(guildCode: string) {
|
public static async findLeagueByGuild(guildCode: string) {
|
||||||
const league: GVGLeagueType = await GVGLeagueModel.findOne({ guildCodes: guildCode, status: 1 })
|
const league: GVGLeagueType = await GVGLeagueModel.findOne({ guildCodes: guildCode, status: 1 })
|
||||||
.populate('leader', { roleId: 1, roleName: 1, head: 1, frame: 1, spine: 1, lv: 1, quitTime: 1, ce: 1, title: 1, serverId: 1, _id: 0 }, 'Role')
|
.populate('leader', { roleId: 1, roleName: 1, head: 1, frame: 1, spine: 1, lv: 1, quitTime: 1, ce: 1, title: 1, serverId: 1, _id: 0 }, 'Role')
|
||||||
.select('+serverId')
|
|
||||||
.lean();
|
.lean();
|
||||||
return league
|
return league
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ export default class GVGUserDailyData extends BaseModel {
|
|||||||
hasGetTechActive: boolean; // 千机阁激活活跃是否获得
|
hasGetTechActive: boolean; // 千机阁激活活跃是否获得
|
||||||
|
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
hasLogin: boolean; // 每日登录活跃是否获得
|
hasLogin: boolean; // 是否登录
|
||||||
|
|
||||||
public static async findByRole(configId: number, leagueCode: string, roleId: string) {
|
public static async findByRole(configId: number, leagueCode: string, roleId: string) {
|
||||||
const result: GVGUserDailyDataType = await GVGUserDailyDataModel.findOne({ configId, leagueCode, roleId, time: getZeroPoint() }).select('food mineral wood score').lean();
|
const result: GVGUserDailyDataType = await GVGUserDailyDataModel.findOne({ configId, leagueCode, roleId, time: getZeroPoint() }).select('food mineral wood score').lean();
|
||||||
@@ -52,6 +52,15 @@ export default class GVGUserDailyData extends BaseModel {
|
|||||||
const result: GVGUserDailyDataType = await GVGUserDailyDataModel.findOneAndUpdate({ configId, leagueCode, roleId, time: getZeroPoint() }, { hasGetTechActive: true }, { upsert: true, new: true }).lean();
|
const result: GVGUserDailyDataType = await GVGUserDailyDataModel.findOneAndUpdate({ configId, leagueCode, roleId, time: getZeroPoint() }, { hasGetTechActive: true }, { upsert: true, new: true }).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async checkHasLogin(configId: number, leagueCode: string, roleId: string) {
|
||||||
|
return await GVGUserDailyDataModel.exists({ configId, leagueCode, roleId, time: getZeroPoint(), hasLogin: { $exists: true } });
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async setHasLogin(configId: number, leagueCode: string, roleId: string) {
|
||||||
|
const result: GVGUserDailyDataType = await GVGUserDailyDataModel.findOneAndUpdate({ configId, leagueCode, roleId, time: getZeroPoint() }, { hasLogin: true }, { upsert: true, new: true }).lean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const GVGUserDailyDataModel = getModelForClass(GVGUserDailyData);
|
export const GVGUserDailyDataModel = getModelForClass(GVGUserDailyData);
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ export default class GVGUserData extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static async addActive(configId: number, leagueCode: string, roleId: string, activeType: number, active: number) {
|
public static async addActive(configId: number, leagueCode: string, roleId: string, activeType: number, active: number) {
|
||||||
const result: GVGUserDataType = await GVGUserDataModel.findOneAndUpdate({ configId, leagueCode, roleId }, { $inc: { active }, $push: { activeRec: new ActiveRec(activeType, active) } }, { new: true, upsert: true}).lean();
|
const result: GVGUserDataType = await GVGUserDataModel.findOneAndUpdate({ configId, leagueCode, roleId }, { $inc: { active }, $push: { activeRec: new ActiveRec(activeType, active) } }, { new: true, upsert: true}).select('active').lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,6 +74,10 @@ export class GVGMainData {
|
|||||||
|
|
||||||
sumTime: number = 0; // 今日贡献结算时间 10位时间戳
|
sumTime: number = 0; // 今日贡献结算时间 10位时间戳
|
||||||
|
|
||||||
|
// 是否每天首次登录
|
||||||
|
isFirst = false;
|
||||||
|
leagueGoods: { itemType: number, id: number, count: number }[];
|
||||||
|
|
||||||
constructor(configId: number, period: number, countdownTime: number, type: number) {
|
constructor(configId: number, period: number, countdownTime: number, type: number) {
|
||||||
this.configId = configId;
|
this.configId = configId;
|
||||||
this.period = period;
|
this.period = period;
|
||||||
@@ -112,6 +116,11 @@ export class GVGMainData {
|
|||||||
}
|
}
|
||||||
this.myInfo.tasks = tasks;
|
this.myInfo.tasks = tasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setFistLogin(item: { itemType: number, id: number, count: number }[]) {
|
||||||
|
this.isFirst = true;
|
||||||
|
this.leagueGoods = item;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class LeagueListInfo {
|
export class LeagueListInfo {
|
||||||
|
|||||||
Reference in New Issue
Block a user