排行榜:一览&领取
This commit is contained in:
@@ -42,7 +42,7 @@ export enum GUILD_SELECT {
|
||||
// 获得邀请列表
|
||||
INVITED_MEMBER = '_id code isMemberMax +invitedMembers +inviteTime',
|
||||
// 排行榜字段
|
||||
RANK = 'code name icon lv memberCnt leader leader activeWeekly activeUpdateTime'
|
||||
RANK = 'code name icon lv memberCnt leader lvUpdateTime activeWeekly activeUpdateTime'
|
||||
}
|
||||
|
||||
export enum FRIEND_SHIP_SELECT {
|
||||
|
||||
@@ -349,6 +349,9 @@ export const KEY_TO_COMPOSE_FIELD = new Map([
|
||||
[REDIS_KEY.MAIN_ELITE_RANK, COMPOSE_FIELD_TYPE.ROLE],
|
||||
[REDIS_KEY.HERO_RANK, COMPOSE_FIELD_TYPE.ROLE_HERO],
|
||||
[REDIS_KEY.SHOW_LINEUP, COMPOSE_FIELD_TYPE.ROLE],
|
||||
[REDIS_KEY.SUM_CE_RANK, COMPOSE_FIELD_TYPE.ROLE],
|
||||
[REDIS_KEY.PVP_RANK, COMPOSE_FIELD_TYPE.ROLE],
|
||||
|
||||
]);
|
||||
|
||||
|
||||
@@ -456,7 +459,9 @@ export const FILENAME = {
|
||||
DIC_CITY_ACTIVITY_REWARD: 'dic_zyz_cityActivityReward',
|
||||
DIC_RACE_ACTIVITY: 'dic_zyz_raceActivity',
|
||||
DIC_SHOP: 'dic_zyz_shop',
|
||||
DIC_SHOP_LIST: 'dic_zyz_shopList'
|
||||
DIC_SHOP_LIST: 'dic_zyz_shopList',
|
||||
DIC_RANK: 'dic_zyz_rankingType',
|
||||
DIC_RANK_REWARD: 'dic_zyz_rankingReward'
|
||||
}
|
||||
|
||||
export const WAR_RELATE_TABLES = [
|
||||
|
||||
@@ -214,6 +214,9 @@ export const STATUS = {
|
||||
// 通用 30000 - 30099
|
||||
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
|
||||
ROLE_MATERIAL_NOT_ENOUGH: { code: 30001, simStr: '材料数量不足' },
|
||||
REWARD_CONDITION_NOT_REACH: { code: 30002, simStr: '未满足领取条件' },
|
||||
REWARD_HAS_RECEIVED: { code: 30003, simStr: '奖励已领取' },
|
||||
|
||||
// 武将养成通用 30100 - 30199
|
||||
|
||||
// 武将合成,升级,升星,升品相关 30200 - 30299
|
||||
|
||||
+1
-1
@@ -148,7 +148,7 @@ export default class Guild extends BaseModel {
|
||||
.sort(sort)
|
||||
.limit(100).skip((page - 1) * 100)
|
||||
.select(GUILD_SELECT.RANK)
|
||||
.populate('leader', {roleName: 1, title: 1, frame: 1, head: 1, spine: 1, lv: 1, _id: 0}, 'Role')
|
||||
.populate('leader', {roleId: 1, roleName: 1, title: 1, frame: 1, head: 1, spine: 1, lv: 1, _id: 0}, 'Role')
|
||||
.lean({ virtuals: true });
|
||||
return guildList;
|
||||
}
|
||||
|
||||
@@ -269,6 +269,8 @@ export default class Role extends BaseModel {
|
||||
|
||||
// 排行相关
|
||||
@prop({ required: true, default: 0 })
|
||||
lvUpdatedAt: number; // 升级时间
|
||||
@prop({ required: true, default: 0 })
|
||||
heroNum: number; // 武将数量
|
||||
@prop({ required: true, default: 0 })
|
||||
heroNumUpdatedAt: number; // 武将数量更新时间
|
||||
@@ -284,6 +286,8 @@ export default class Role extends BaseModel {
|
||||
mainEliteWarId: number; // 精英通关关卡
|
||||
@prop({ required: true, default: 0 })
|
||||
mainEliteUpdatedAt: number; // 精英通关时间
|
||||
@prop({ required: true, default: [], type: Number })
|
||||
rankReceived: number[]; // 已领取奖励
|
||||
|
||||
|
||||
public static async findAllByUid(uid: number, getters = false, virtuals = true) {
|
||||
@@ -626,6 +630,11 @@ export default class Role extends BaseModel {
|
||||
.sort({ ce: -1 }).lean();
|
||||
return roles[Math.floor(roles.length/2)]
|
||||
}
|
||||
|
||||
public static async receiveRankReward(roleId: string, id: number) {
|
||||
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId, rankReceived: { $nin: [id] } }, { $push: { rankReceived: id } }, {new: true}).lean();
|
||||
return role;
|
||||
}
|
||||
}
|
||||
|
||||
export const RoleModel = getModelForClass(Role);
|
||||
|
||||
+87
-25
@@ -3,43 +3,44 @@ import { WoodenHorse } from "./battleField/guildActivity";
|
||||
import { RoleUpdate, RoleType } from "../db/Role";
|
||||
import { reduceCe } from "../pubUtils/util";
|
||||
import { GuildUpdateParam } from "../db/Guild";
|
||||
import { currentId } from "async_hooks";
|
||||
import { HeroType } from "../db/Hero";
|
||||
import { HeroType, HeroUpdate } from "../db/Hero";
|
||||
|
||||
// 排行榜返回玩家值
|
||||
export class RankParam {
|
||||
roleName: string;
|
||||
lv: number;
|
||||
vLv: number;
|
||||
roleName: string = "";
|
||||
lv: number = 0;
|
||||
vLv: number = 0;
|
||||
guildName: string = "";
|
||||
head: number = EXTERIOR.EXTERIOR_FACE;
|
||||
frame: number = EXTERIOR.EXTERIOR_FACECASE;
|
||||
spine: number = EXTERIOR.EXTERIOR_APPEARANCE;
|
||||
title: number;
|
||||
ce: number;
|
||||
title: number = 1;
|
||||
ce: number = 0;
|
||||
|
||||
constructor(role: RoleUpdate) {
|
||||
this.roleName = role.roleName;
|
||||
this.lv = role.lv;
|
||||
this.vLv = role.vLv;
|
||||
this.head = role.head;
|
||||
this.frame = role.frame;
|
||||
this.spine = role.spine;
|
||||
this.title = role.title;
|
||||
this.guildName = role.guildName||"";
|
||||
if(role.isReducedCe) {
|
||||
this.ce = role.ce;
|
||||
} else {
|
||||
this.ce = reduceCe(role.ce);
|
||||
constructor(role: RoleUpdate, fromDb: boolean) {
|
||||
if(role.roleName) this.roleName = role.roleName;
|
||||
if(role.lv) this.lv = role.lv;
|
||||
if(role.vLv) this.vLv = role.vLv;
|
||||
if(role.head) this.head = role.head;
|
||||
if(role.frame) this.frame = role.frame;
|
||||
if(role.spine) this.spine = role.spine;
|
||||
if(role.title) this.title = role.title;
|
||||
if(role.guildName) this.guildName = role.guildName||"";
|
||||
if(role.ce) {
|
||||
if(fromDb && !role.isReducedCe) {
|
||||
this.ce = reduceCe(role.ce);
|
||||
} else {
|
||||
this.ce = role.ce;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class RoleRankInfo extends RankParam {
|
||||
rank: number;
|
||||
roleId: string;
|
||||
num: number;
|
||||
time: number;
|
||||
rank: number = 1;
|
||||
roleId: string = "";
|
||||
num: number = 0;
|
||||
time: number = 0;
|
||||
hero: LineupParam[];
|
||||
lineup: LineupParam[];
|
||||
|
||||
@@ -70,6 +71,7 @@ export class GuildRankParam {
|
||||
lv: number;
|
||||
memberCnt: number;
|
||||
leader: {
|
||||
roleId: string;
|
||||
roleName: string;
|
||||
title: number;
|
||||
lv: number;
|
||||
@@ -84,6 +86,7 @@ export class GuildRankParam {
|
||||
this.name = guild.name;
|
||||
this.lv = guild.lv;
|
||||
let leader = <RoleType>guild.leader;
|
||||
console.log('**', JSON.stringify(leader))
|
||||
let _leader = new GuildLeader(leader);
|
||||
this.leader = _leader;
|
||||
this.memberCnt = guild.memberCnt;
|
||||
@@ -109,6 +112,7 @@ export class GuildRankInfo extends GuildRankParam {
|
||||
}
|
||||
|
||||
export class GuildLeader {
|
||||
roleId: string;
|
||||
roleName: string;
|
||||
title: number;
|
||||
lv: number;
|
||||
@@ -116,7 +120,8 @@ export class GuildLeader {
|
||||
frame: number;
|
||||
spine: number;
|
||||
|
||||
constructor(leader: {roleName: string, title: number, lv: number, head: number, frame: number, spine: number}) {
|
||||
constructor(leader: { roleId: string, roleName: string, title: number, lv: number, head: number, frame: number, spine: number}) {
|
||||
this.roleId = leader.roleId;
|
||||
this.roleName = leader.roleName;
|
||||
this.title = leader.title;
|
||||
this.lv = leader.lv;
|
||||
@@ -236,4 +241,61 @@ export interface myIdInter {
|
||||
roleId?: string;
|
||||
guildCode?: string;
|
||||
hid?: number;
|
||||
}
|
||||
|
||||
// 排行榜总览左边的数据
|
||||
export class GeneralRankParamRole {
|
||||
type: number; // 排行榜id
|
||||
roleId: string;
|
||||
roleName: string;
|
||||
head: number;
|
||||
frame: number;
|
||||
spine: number;
|
||||
lv: number;
|
||||
vLv: number;
|
||||
guildName: string;
|
||||
ce: number;
|
||||
num: number;
|
||||
received: number[];
|
||||
|
||||
constructor(type: number, rankInfo: RoleRankInfo, received: number[]) {
|
||||
this.type = type;
|
||||
this.roleId = rankInfo.roleId;
|
||||
this.roleName = rankInfo.roleName;
|
||||
this.head = rankInfo.head;
|
||||
this.frame = rankInfo.frame;
|
||||
this.spine = rankInfo.spine;
|
||||
this.lv = rankInfo.lv;
|
||||
this.vLv = rankInfo.vLv;
|
||||
this.guildName = rankInfo.guildName;
|
||||
this.ce = rankInfo.ce;
|
||||
this.num = rankInfo.num;
|
||||
this.received = received;
|
||||
}
|
||||
}
|
||||
|
||||
// 排行榜右边的数据
|
||||
export class GeneralRankParamBattle {
|
||||
type: number;
|
||||
roleId: string;
|
||||
roleName: string;
|
||||
guildName: string;
|
||||
hid: number = 0;
|
||||
skinId: number = 0;
|
||||
num: number;
|
||||
received: number[];
|
||||
|
||||
constructor(type: number, rankInfo: RoleRankInfo, hero: HeroUpdate, received: number[]) {
|
||||
this.type = type;
|
||||
this.roleId = rankInfo.roleId;
|
||||
this.roleName = rankInfo.roleName;
|
||||
this.guildName = rankInfo.guildName;
|
||||
this.num = rankInfo.num;
|
||||
if(hero) {
|
||||
this.hid = hero.hid;
|
||||
let curSkin = hero.skins.find(cur => cur.enable);
|
||||
this.skinId = curSkin?curSkin.id: 0;
|
||||
}
|
||||
this.received = received;
|
||||
}
|
||||
}
|
||||
@@ -71,6 +71,8 @@ import { decodeIdCntArrayStr, parseGoodStr, decodeArrayListStr, getRandValueByMi
|
||||
import { RACE_EVENT_TYPE } from "../consts";
|
||||
import { dicShop, dicShopItem } from "./dictionary/DicShop";
|
||||
import { dicShopList } from "./dictionary/DicShopList";
|
||||
import { dicRank } from "./dictionary/DicRank";
|
||||
import { dicRankReward } from "./dictionary/DicRankReward";
|
||||
|
||||
export const gameData = {
|
||||
blurprtCompose: dicBlueprtCompose,
|
||||
@@ -167,7 +169,9 @@ export const gameData = {
|
||||
shop: dicShop,
|
||||
shopItem: dicShopItem,
|
||||
shopList: dicShopList,
|
||||
dicMyHeroes: dicMyHeroes
|
||||
dicMyHeroes: dicMyHeroes,
|
||||
rank: dicRank,
|
||||
generalRankReward: dicRankReward
|
||||
};
|
||||
|
||||
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
// 排行榜表
|
||||
import { readJsonFile } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
|
||||
export interface DicRank {
|
||||
|
||||
// 排行榜id
|
||||
readonly id: number;
|
||||
// 属于哪个页签
|
||||
readonly group: number;
|
||||
// 总览中的位置
|
||||
readonly general: number;
|
||||
|
||||
}
|
||||
|
||||
|
||||
const str = readJsonFile(FILENAME.DIC_RANK);
|
||||
let arr = JSON.parse(str);
|
||||
|
||||
export const dicRank = new Array<DicRank>();
|
||||
|
||||
arr.forEach(o => {
|
||||
dicRank.push(o);
|
||||
});
|
||||
|
||||
arr = undefined;
|
||||
@@ -0,0 +1,30 @@
|
||||
// 排行榜奖励表
|
||||
import { readJsonFile, parseGoodStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicRankReward {
|
||||
|
||||
// 奖励id
|
||||
readonly id: number;
|
||||
// 排行榜id
|
||||
readonly rankId: number;
|
||||
// 条件
|
||||
readonly condition: number;
|
||||
// 奖励
|
||||
readonly reward: Array<RewardInter>;
|
||||
|
||||
}
|
||||
|
||||
|
||||
const str = readJsonFile(FILENAME.DIC_RANK_REWARD);
|
||||
let arr = JSON.parse(str);
|
||||
|
||||
export const dicRankReward = new Map<number, DicRankReward>();
|
||||
|
||||
arr.forEach(o => {
|
||||
o.reward = parseGoodStr(o.reward);
|
||||
dicRankReward.set(o.id, o);
|
||||
});
|
||||
|
||||
arr = undefined;
|
||||
Reference in New Issue
Block a user