获得战报,刷新,领取
This commit is contained in:
@@ -296,6 +296,7 @@ export const FILENAME = {
|
||||
DIC_PVP_REFRESHCONSUME: 'dic_pvp_refreshConsume',
|
||||
DIC_PVP_HERO_REWARD: 'dic_pvp_heroAccountReward',
|
||||
DIC_PVP_RANK_REWARD: 'dic_pvp_rankReward',
|
||||
DIC_PVP_BOX: 'dic_pvp_boxReward',
|
||||
}
|
||||
|
||||
export const WAR_RELATE_TABLES = [
|
||||
|
||||
@@ -182,6 +182,10 @@ export const STATUS = {
|
||||
ROLE_SCHOOL_POSITION_LOCKED: {code: 30604, simStr: '该位置未解锁'},
|
||||
ROLE_SCHOOL_POSITION_UNLOCK_NOT_NEED: {code: 30605, simStr: '该位置已解锁'},
|
||||
ROLE_SCROLL_REACH_MAX: {code: 30606, simStr: '已经升到可以升的最高等级'},
|
||||
// pvp 30800-30899
|
||||
PVP_NOT_REACH_BOX_SCORE: {code: 30800, simStr: '未达到宝箱领取军功'},
|
||||
PVP_BOX_IS_GOT: {code: 30801, simStr: '宝箱已经领取'},
|
||||
PVP_CHALLENGE_TIMES_NOT_ENOUGH: {code: 30802, simStr: '挑战次数不足'},
|
||||
|
||||
// 社交相关状态 40000 - 49999
|
||||
// 运营模块相关状态 50000 - 59999
|
||||
|
||||
@@ -19,6 +19,8 @@ interface pvpUpdateInter {
|
||||
challengeCnt?:number;
|
||||
challengeRefTime?:number;
|
||||
isFirstEntry?:boolean;
|
||||
receivedBox?: Array<number>;
|
||||
seasonEndTime?:number;
|
||||
}
|
||||
|
||||
export class Heroes {
|
||||
@@ -138,6 +140,8 @@ export default class PvpDefense extends BaseModel {
|
||||
receivedBox: Array<number>;
|
||||
@prop({ required: true, default: 0 })
|
||||
seasonNum: number;
|
||||
@prop({ required: true, default: 0 })
|
||||
seasonEndTime: number;
|
||||
@prop({ required: true, default: true })
|
||||
isFirstEntry: boolean;
|
||||
public static async findByRoleId(roleId: string, lean = true) {
|
||||
@@ -150,7 +154,7 @@ export default class PvpDefense extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async createPvpDefense(params: { roleId: string, roleName: string, role: string, heroes: Array<Heroes>, oppPlayers: Array<OppPlayers>, defCe: number, seasonNum: number, warId: number, challengeCnt: number }, lean = true) {
|
||||
public static async createPvpDefense(params: { roleId: string, roleName: string, role: string, heroes: Array<Heroes>, oppPlayers: Array<OppPlayers>, defCe: number, seasonNum: number, seasonEndTime:number, challengeCnt: number }, lean = true) {
|
||||
const doc = new PvpDefenseModel();
|
||||
const update = Object.assign(doc.toJSON(), params);
|
||||
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, { upsert: true, new: true }).lean(lean);
|
||||
|
||||
@@ -3,70 +3,75 @@ import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoos
|
||||
|
||||
|
||||
export class HeroesRecord {
|
||||
@prop({ required: true, default: 0 })
|
||||
hid: number; // 武将id
|
||||
@prop({ required: true, default: 0 })
|
||||
quality: number; // 品质
|
||||
@prop({ required: true, default: 0 })
|
||||
star: number; // 星级
|
||||
@prop({ required: true, default: 0 })
|
||||
colorStar: number; // 觉醒
|
||||
@prop({ required: true, default: 0 })
|
||||
lv: number; // 等级
|
||||
@prop({ required: true, default: 0 })
|
||||
damage: number; // 伤害
|
||||
@prop({ required: true, default: 0 })
|
||||
heal: number; // 治疗
|
||||
@prop({ required: true, default: 0 })
|
||||
underDamage: number; // 承伤
|
||||
@prop({ required: true, default: 0 })
|
||||
hid: number; // 武将id
|
||||
@prop({ required: true, default: 0 })
|
||||
quality: number; // 品质
|
||||
@prop({ required: true, default: 0 })
|
||||
star: number; // 星级
|
||||
@prop({ required: true, default: 0 })
|
||||
colorStar: number; // 觉醒
|
||||
@prop({ required: true, default: 0 })
|
||||
lv: number; // 等级
|
||||
@prop({ required: true, default: 0 })
|
||||
damage: number; // 伤害
|
||||
@prop({ required: true, default: 0 })
|
||||
heal: number; // 治疗
|
||||
@prop({ required: true, default: 0 })
|
||||
underDamage: number; // 承伤
|
||||
}
|
||||
|
||||
export class PlayerInfo {
|
||||
@prop({ required: true })
|
||||
roleId: string; // 角色 id
|
||||
@prop({ required: true })
|
||||
roleName: string; // 角色 名
|
||||
@prop({ required: true, default: 0 })
|
||||
lv: number; // 等级
|
||||
@prop({ required: true, default: 0 })
|
||||
sHid: number; // 形象
|
||||
@prop({ required: true, default: 0 })
|
||||
headHid: number; // 头像
|
||||
@prop({ required: true, default: 0 })
|
||||
title: number; // 爵位
|
||||
@prop({ required: true, default: 0 })
|
||||
ce: number; // 最高五人战力
|
||||
@prop({ required: true, default: false })
|
||||
isSuccess: boolean; // 是否胜利
|
||||
@prop({ required: true, default: 0 })
|
||||
score: number; // 获得的总积分
|
||||
@prop({ required: true, type: HeroesRecord, default: [], _id: false })
|
||||
heroes: HeroesRecord[]; // 获得的总积分
|
||||
@prop({ required: true })
|
||||
roleId: string; // 角色 id
|
||||
@prop({ required: true })
|
||||
roleName: string; // 角色 名
|
||||
@prop({ required: true, default: 0 })
|
||||
lv: number; // 等级
|
||||
@prop({ required: true, default: 0 })
|
||||
sHid: number; // 形象
|
||||
@prop({ required: true, default: 0 })
|
||||
headHid: number; // 头像
|
||||
@prop({ required: true, default: 0 })
|
||||
title: number; // 爵位
|
||||
@prop({ required: true, default: 0 })
|
||||
ce: number; // 最高五人战力
|
||||
@prop({ required: true, default: false })
|
||||
isSuccess: boolean; // 是否胜利
|
||||
@prop({ required: true, default: 0 })
|
||||
score: number; // 获得的总积分
|
||||
@prop({ required: true, type: HeroesRecord, default: [], _id: false })
|
||||
heroes: HeroesRecord[]; // 获得的总积分
|
||||
}
|
||||
|
||||
@index({ roleId1: 1, updatedAt: -1 })
|
||||
@index({ roleId2: 1, updatedAt: -1 })
|
||||
|
||||
export default class PvpRecord extends BaseModel {
|
||||
@prop({ required: true })
|
||||
roleId1: string; // 角色 id
|
||||
@prop({ required: true })
|
||||
roleId2: string; // 角色 id
|
||||
@prop({ required: true })
|
||||
roleId1: string; // 角色 id
|
||||
@prop({ required: true })
|
||||
roleId2: string; // 角色 id
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
warId: number; // 这一关使用的地图
|
||||
@prop({ required: true, type: PlayerInfo, default: {}, _id: false })
|
||||
attackInfo: PlayerInfo; // 攻方信息
|
||||
@prop({ required: true, type: PlayerInfo, default: {}, _id: false })
|
||||
defenseInfo: PlayerInfo; // 守方信息
|
||||
@prop({ required: true, default: 0 })
|
||||
warId: number; // 这一关使用的地图
|
||||
@prop({ required: true, type: PlayerInfo, default: {}, _id: false })
|
||||
attackInfo: PlayerInfo; // 攻方信息
|
||||
@prop({ required: true, type: PlayerInfo, default: {}, _id: false })
|
||||
defenseInfo: PlayerInfo; // 守方信息
|
||||
|
||||
|
||||
public static async createRec(param: { roleId1: string, roleId2: string, warId: number, attackInfo: PlayerInfo, defenseInfo: PlayerInfo}, lean = true) {
|
||||
const result = await PvpRecordModel.findOneAndUpdate({}, param, { new: true, upsert: true }).lean();
|
||||
return result;
|
||||
}
|
||||
public static async createRec(param: { roleId1: string, roleId2: string, warId: number, attackInfo: PlayerInfo, defenseInfo: PlayerInfo }, lean = true) {
|
||||
const result = await PvpRecordModel.findOneAndUpdate({}, param, { new: true, upsert: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async getRecByRoleId( roleId: string, lean = true) {
|
||||
const result: PvpRecord[] = await PvpRecordModel.find({ $or:[{roleId1: roleId}, {roleId2: roleId}] }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const PvpRecordModel = getModelForClass(PvpRecord);
|
||||
|
||||
export interface PvpRecordType extends Pick<DocumentType<PvpRecord>, keyof PvpRecord>{};
|
||||
export interface PvpRecordType extends Pick<DocumentType<PvpRecord>, keyof PvpRecord> { };
|
||||
@@ -42,6 +42,7 @@ import { dicPvpRefreshConsume } from './dictionary/DicPvpRefreshConsume';
|
||||
import { dicGkPvp, dicGkPvps } from './dictionary/DicGkPvp';
|
||||
import { dicHeroRewads } from './dictionary/DicPvpHeroReward';
|
||||
import { dicRankRewads } from './dictionary/DicPvpRankReward';
|
||||
import { dicPvpBoxs } from './dictionary/DicPvpBox';
|
||||
export const gameData = {
|
||||
blurprtCompose: dicBlueprtCompose,
|
||||
blueprtPossibility: dicBlueprtPossibility,
|
||||
@@ -98,6 +99,7 @@ export const gameData = {
|
||||
pvpGks: dicGkPvps,
|
||||
pvpHeroRewards: dicHeroRewads,
|
||||
pvpRankRewards: dicRankRewads,
|
||||
pvpBoxs: dicPvpBoxs,
|
||||
};
|
||||
|
||||
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
||||
@@ -290,4 +292,8 @@ export function getPvpHeroRewards() {
|
||||
|
||||
export function getPvpRankRewards() {
|
||||
return gameData.pvpRankRewards;
|
||||
}
|
||||
|
||||
export function getPvpBoxs() {
|
||||
return gameData.pvpBoxs;
|
||||
}
|
||||
20
shared/pubUtils/dictionary/DicPvpBox.ts
Normal file
20
shared/pubUtils/dictionary/DicPvpBox.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { readJsonFile, parseGoodStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
export interface DicPvpBox {
|
||||
|
||||
readonly id: number;
|
||||
readonly score: number;
|
||||
readonly reward: Array<RewardInter>;
|
||||
|
||||
}
|
||||
|
||||
const str = readJsonFile(FILENAME.DIC_PVP_BOX);
|
||||
let arr = JSON.parse(str);
|
||||
|
||||
export const dicPvpBoxs = new Array<DicPvpBox>();
|
||||
|
||||
arr.forEach(o => {
|
||||
o.reward = parseGoodStr(o.reward);
|
||||
dicPvpBoxs.push(o);
|
||||
});
|
||||
@@ -1,5 +1,7 @@
|
||||
|
||||
const PER_SECOND = 1 * 1000;
|
||||
const PER_DAY = 24 * 60 * 60;
|
||||
|
||||
export function nowSeconds() {
|
||||
return Math.floor(Date.now() / PER_SECOND );
|
||||
}
|
||||
@@ -11,4 +13,11 @@ export function getTodayZeroPoint() {
|
||||
date.setSeconds(0);
|
||||
var time = Math.floor(date.getTime() / PER_SECOND);
|
||||
return time;
|
||||
}
|
||||
|
||||
export function checkTodayTime(seasonEndTime: number) {
|
||||
if (seasonEndTime - nowSeconds() <= PER_DAY) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user