排行榜:一览&领取

This commit is contained in:
luying
2021-04-12 09:47:16 +08:00
parent 5dca7b304d
commit 22e6a82100
20 changed files with 496 additions and 139 deletions
@@ -4,10 +4,13 @@ import { STATUS, REDIS_KEY, RANK_TYPE_TO_KEY, ROLE_SELECT, RANK_TYPE, HERO_SELEC
import { RoleModel } from "../../../db/Role";
import { UserGuildModel } from "../../../db/UserGuild";
import { GuildModel } from "../../../db/Guild";
import { HeroModel } from "../../../db/Hero";
import { UserModel } from "../../../db/User";
import { Rank } from "../../../services/rankService";
import { nowSeconds } from "../../../pubUtils/timeUtil";
import { GeneralRankParamRole, GeneralRankParamBattle, RoleRankInfo } from "../../../domain/rank";
import { gameData } from "../../../pubUtils/data";
import { addItems } from "../../../services/rewardService";
import { HeroModel, HeroUpdate } from "../../../db/Hero";
export default function (app: Application) {
return new RoleHandler(app);
@@ -22,22 +25,42 @@ export class RoleHandler {
let roleName = session.get('roleName');
let serverId = session.get('serverId');
return resResult(STATUS.SUCCESS, {
role: [
{ type: 1, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 464262, received: [], },
{ type: 2, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 64262, received: [], },
{ type: 3, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 100, received: [], },
{ type: 4, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 99, received: [], },
],
battle: [ // 右边列
{ type: 5, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 464262, received: [], },
{ type: 6, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 99, received: [], },
{ type: 7, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 5060, received: [], },
{ type: 8, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 323, received: [], },
{ type: 9, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 9224, received: [], },
]
});
let role = await RoleModel.findByRoleId(roleId, 'rankReceived');
if(!role) return resResult(STATUS.WRONG_PARMS);
let { rankReceived = []} = role;
let res = {
role: new Array<GeneralRankParamRole>(),
battle: new Array<GeneralRankParamBattle>()
};
for(let { id, general } of gameData.rank) {
let redisKey = RANK_TYPE_TO_KEY.get(id);
if(redisKey) {
let received = rankReceived.filter(rewardId => {
let dic = gameData.generalRankReward.get(rewardId);
return dic && dic.rankId == id;
});
if(general == 1) {
let r = new Rank(redisKey, { serverId }, false, 1);
let ranks = <RoleRankInfo[]> await r.getRankByRange();
let param = new GeneralRankParamRole(id, ranks[0]||new RoleRankInfo({}, false), received);
res.role.push(param);
} else if (general = 2) {
let r = new Rank(redisKey, { serverId }, false, 1);
let ranks = <RoleRankInfo[]> await r.getRankByRange();
let hero: HeroUpdate;
if(ranks.length > 0) {
hero = await HeroModel.getMyTopHero(ranks[0].roleId, 'hid skins');
}
let param = new GeneralRankParamBattle(id, ranks[0]||new RoleRankInfo({}, false), hero, received);
res.battle.push(param);
}
}
}
return resResult(STATUS.SUCCESS, res);
}
async getRank(msg: { type: number }, session: BackendSession) {
@@ -47,17 +70,9 @@ export class RoleHandler {
let { type } = msg;
let redisKey = RANK_TYPE_TO_KEY.get(type);
if(!redisKey) return resResult(STATUS.WRONG_PARMS);
let r = new Rank(redisKey, { serverId });
let r: Rank;
switch(type) {
case RANK_TYPE.TOP_LINTUP:
case RANK_TYPE.TOP_HERO:
case RANK_TYPE.SUM_CE:
r = new Rank(redisKey, { serverId }, false, 0); break;
default:
r = new Rank(redisKey, { serverId }); break;
}
let { ranks, myRank } = await r.getRankListWithMyRank(roleId);
let { ranks, myRank } = await r.getRankListWithMyRank({roleId});
if(!myRank) {
let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.RANK, true);
if(type == RANK_TYPE.TOP_LINTUP) {
@@ -120,7 +135,7 @@ export class RoleHandler {
let redisKey = RANK_TYPE_TO_KEY.get(type);
if(!redisKey) return resResult(STATUS.WRONG_PARMS);
let r = new Rank(redisKey, { serverId, hid }, false, 0);
let r = new Rank(redisKey, { serverId, hid });
let ranks = await r.getRankByRange();
return resResult(STATUS.SUCCESS, {
@@ -129,12 +144,37 @@ export class RoleHandler {
}
async receiveReward(msg: { type: number, id: number }, session: BackendSession) {
let { type } = msg;
let roleId = session.get('roleId');
let serverId = session.get('serverId');
let roleName = session.get('roleName');
let sid = session.get('sid');
let { type, id } = msg;
let dicReward = gameData.generalRankReward.get(id);
if(!dicReward || dicReward.rankId != type) return resResult(STATUS.WRONG_PARMS);
let redisKey = RANK_TYPE_TO_KEY.get(type);
let r = new Rank(redisKey, { serverId }, false, 1);
let ranks = await r.getRankByRange();
let num = ranks.length > 0? ranks[0].num: 0;
if(num < dicReward.condition) return resResult(STATUS.REWARD_CONDITION_NOT_REACH);
let role = await RoleModel.receiveRankReward(roleId, id);
if(!role) return resResult(STATUS.REWARD_HAS_RECEIVED);
let reward = dicReward.reward;
let goods = await addItems(roleId, roleName, sid, reward);
let received = role.rankReceived.filter(rewardId => {
let dic = gameData.generalRankReward.get(rewardId);
return dic && dic.rankId == id;
});
return resResult(STATUS.SUCCESS, {
type: type,
received: [],
goods: []
received,
goods
})
}
@@ -12,8 +12,10 @@ import { SclResultInter, SclPosInter } from '../../../pubUtils/interface';
import { SchoolModel } from '../../../db/School';
import { checkTeraphMaterialEnough } from '../../../services/roleService'
import { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService';
import { HERO_SYSTEM_TYPE, LINEUP_NUM, ROLE_SELECT } from '../../../consts';
import { HERO_SYSTEM_TYPE, LINEUP_NUM, ROLE_SELECT, REDIS_KEY } from '../../../consts';
import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
import { Rank } from '../../../services/rankService';
import { updateUserInfo } from '../../../services/redisService';
export default function(app: Application) {
return new RoleHandler(app);
@@ -410,6 +412,7 @@ export class RoleHandler {
async saveShowLineup(msg: { showLineup: number[] }, session: BackendSession) {
let { showLineup } = msg;
let roleId = session.get('roleId');
let serverId = session.get('serverId');
let checkHeroes = await checkBattleHeroesByHid(roleId, showLineup);
if(showLineup.length > 0 && !checkHeroes) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
@@ -419,6 +422,8 @@ export class RoleHandler {
}
let role = await RoleModel.updateRoleInfo(roleId, { showLineup });
let r = new Rank(REDIS_KEY.SHOW_LINEUP, {});
await r.generParamAndSet(REDIS_KEY.SHOW_LINEUP, { roleId }, { role });
return resResult(STATUS.SUCCESS, { showLineup: role.showLineup });
}
@@ -443,6 +448,7 @@ export class RoleHandler {
curHead.enable = true;
role = await RoleModel.updateRoleInfo(roleId, { heads });
await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'head', value: id }]);
return resResult(STATUS.SUCCESS, { heads: role.heads, head: role.head });
}
@@ -467,6 +473,7 @@ export class RoleHandler {
curFrame.enable = true;
role = await RoleModel.updateRoleInfo(roleId, { frames });
await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'frame', value: id }]);
return resResult(STATUS.SUCCESS, { frames: role.frames, frame: role.frame });
}
@@ -491,6 +498,7 @@ export class RoleHandler {
curSpine.enable = true;
role = await RoleModel.updateRoleInfo(roleId, { spines });
await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'spine', value: id }]);
return resResult(STATUS.SUCCESS, { spines: role.spines, spine: role.spine });
}
@@ -507,6 +515,7 @@ export class RoleHandler {
let role = await RoleModel.updateRoleInfo(roleId, { roleName });
session.set('roleName', role.roleName);
session.push('roleName', () => {});
await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'roleName', value: roleName }]);
return resResult(STATUS.SUCCESS, { roleName: role.roleName });
}