镇念塔:节点奖励
This commit is contained in:
@@ -17,6 +17,8 @@ import { HeroModel } from '../../../db/Hero';
|
|||||||
import { vipCanSkipTower } from '../../../services/activity/monthlyTicketService';
|
import { vipCanSkipTower } from '../../../services/activity/monthlyTicketService';
|
||||||
import { pushTowerMsg } from '../../../services/sysChatService';
|
import { pushTowerMsg } from '../../../services/sysChatService';
|
||||||
import { WarStar } from '../../../domain/dbGeneral';
|
import { WarStar } from '../../../domain/dbGeneral';
|
||||||
|
import { RewardInter } from '../../../pubUtils/interface';
|
||||||
|
import { combineItems } from '../../../services/role/util';
|
||||||
|
|
||||||
export default function(app: Application) {
|
export default function(app: Application) {
|
||||||
return new TowerBattleHandler(app);
|
return new TowerBattleHandler(app);
|
||||||
@@ -33,7 +35,7 @@ export class TowerBattleHandler {
|
|||||||
async getStatus(msg: {}, session: BackendSession) {
|
async getStatus(msg: {}, session: BackendSession) {
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let serverId = session.get('serverId');
|
let serverId = session.get('serverId');
|
||||||
let role = await RoleModel.findByRoleId(roleId);
|
let role = await RoleModel.findByRoleId(roleId, 'roleId serverId towerLv towerReceived');
|
||||||
let data = await getTowerStatus(role);
|
let data = await getTowerStatus(role);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, data);
|
return resResult(STATUS.SUCCESS, data);
|
||||||
@@ -330,4 +332,45 @@ export class TowerBattleHandler {
|
|||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { ...data, goods });
|
return resResult(STATUS.SUCCESS, { ...data, goods });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取节点奖励
|
||||||
|
* @param session
|
||||||
|
*/
|
||||||
|
async receiveBox(msg: { id: number }, session: BackendSession) {
|
||||||
|
let roleId = session.get('roleId');
|
||||||
|
let roleName = session.get('roleName');
|
||||||
|
let sid = session.get('sid');
|
||||||
|
let { id } = msg; // id为0表示一键领取
|
||||||
|
|
||||||
|
let role = await RoleModel.findByRoleId(roleId, 'towerLv towerReceived');
|
||||||
|
if(!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||||
|
|
||||||
|
let { towerLv, towerReceived = [] } = role;
|
||||||
|
let rewards: RewardInter[] = [], newReceived: number[] = [];
|
||||||
|
if(id == 0) {
|
||||||
|
for(let [ id, dicTowerGift ] of gameData.towerGift) {
|
||||||
|
if(towerLv > dicTowerGift.towerLv && towerReceived.indexOf(id) == -1) {
|
||||||
|
rewards.push(...dicTowerGift.reward);
|
||||||
|
newReceived.push(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(newReceived.length <= 0) return resResult(STATUS.TOWER_BOX_NO_RECEIVE);
|
||||||
|
} else {
|
||||||
|
let dicTowerGift = gameData.towerGift.get(id);
|
||||||
|
if(!dicTowerGift) return resResult(STATUS.WRONG_PARMS);
|
||||||
|
if(towerLv <= dicTowerGift.towerLv) {
|
||||||
|
return resResult(STATUS.TOWER_LV_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
if(towerReceived.indexOf(id) != -1) {
|
||||||
|
return resResult(STATUS.TOWER_BOX_HAS_RECEIVED);
|
||||||
|
}
|
||||||
|
rewards.push(...dicTowerGift.reward);
|
||||||
|
newReceived.push(id);
|
||||||
|
}
|
||||||
|
role = await RoleModel.receiveTowerBox(roleId, newReceived);
|
||||||
|
let goods = await addItems(roleId, roleName, sid, combineItems(rewards), ITEM_CHANGE_REASON.RECEIVE_TOWER_BOX);
|
||||||
|
|
||||||
|
return resResult(STATUS.SUCCESS, { goods, receivedBox: newReceived });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import { getVipHungupReward } from './activity/monthlyTicketService';
|
|||||||
* @param role
|
* @param role
|
||||||
*/
|
*/
|
||||||
export async function getTowerStatus(role: RoleType) {
|
export async function getTowerStatus(role: RoleType) {
|
||||||
let { towerLv, roleId, serverId } = role;
|
let { towerLv, roleId, serverId, towerReceived } = role;
|
||||||
if (!towerLv) {
|
if (!towerLv) {
|
||||||
let role = await RoleModel.towerLvUp(roleId);
|
let role = await RoleModel.towerLvUp(roleId);
|
||||||
towerLv = role.towerLv;
|
towerLv = role.towerLv;
|
||||||
@@ -37,7 +37,8 @@ export async function getTowerStatus(role: RoleType) {
|
|||||||
sendTaskEnableLv: dicParam.TOWER_SEARCH.TOWER_SEARCH_STARTLIMITED,
|
sendTaskEnableLv: dicParam.TOWER_SEARCH.TOWER_SEARCH_STARTLIMITED,
|
||||||
curLv: towerLv,
|
curLv: towerLv,
|
||||||
usedHeroes: towerRec.heroes,
|
usedHeroes: towerRec.heroes,
|
||||||
progress: towerRec.warStatus
|
progress: towerRec.warStatus,
|
||||||
|
receivedBox: towerReceived||[],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -543,6 +543,7 @@ export const FILENAME = {
|
|||||||
DIC_JEWEL_CONDITION: 'dic_zyz_jewel_condition',
|
DIC_JEWEL_CONDITION: 'dic_zyz_jewel_condition',
|
||||||
DIC_MAIN_STAR_BOX: 'dic_zyz_main_star_reward',
|
DIC_MAIN_STAR_BOX: 'dic_zyz_main_star_reward',
|
||||||
DIC_EQUIP_STRENGTH_ATTR: 'dic_zyz_equipStrengthAttr',
|
DIC_EQUIP_STRENGTH_ATTR: 'dic_zyz_equipStrengthAttr',
|
||||||
|
DIC_TOWER_GIFT: 'dic_zyz_towerGift',
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WAR_RELATE_TABLES = [
|
export const WAR_RELATE_TABLES = [
|
||||||
@@ -1016,7 +1017,8 @@ export enum ITEM_CHANGE_REASON {
|
|||||||
ACT_GUILD_PAY_REWARD = 144, // 活动-军团人数奖励
|
ACT_GUILD_PAY_REWARD = 144, // 活动-军团人数奖励
|
||||||
RECEIVE_CHAPTER_BOX = 145, // 领取主线章节宝箱
|
RECEIVE_CHAPTER_BOX = 145, // 领取主线章节宝箱
|
||||||
JEWEL_INHERIT = 146, // 天晶继承
|
JEWEL_INHERIT = 146, // 天晶继承
|
||||||
RESET_TALENT = 147, // 洗点
|
RESET_TALENT = 147, // 洗点
|
||||||
|
RECEIVE_TOWER_BOX = 148, // 领取镇念塔节点奖励
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum TA_EVENT {
|
export enum TA_EVENT {
|
||||||
|
|||||||
@@ -106,6 +106,9 @@ export const STATUS = {
|
|||||||
TOWER_HERO_FORBIDDEN: { code: 20520, simStr: '该武将不可使用' },
|
TOWER_HERO_FORBIDDEN: { code: 20520, simStr: '该武将不可使用' },
|
||||||
TOWER_CANNOT_SKIP: { code: 20521, simStr: '该层不可跳过' },
|
TOWER_CANNOT_SKIP: { code: 20521, simStr: '该层不可跳过' },
|
||||||
TOWER_SKIP_POWER_NOT_ENOUGH: { code: 20522, simStr: '战力不足不可跳过' },
|
TOWER_SKIP_POWER_NOT_ENOUGH: { code: 20522, simStr: '战力不足不可跳过' },
|
||||||
|
TOWER_LV_NOT_ENOUGH: { code: 20523, simStr: '层数不足不可领取奖励' },
|
||||||
|
TOWER_BOX_NO_RECEIVE: { code: 20524, simStr: '无可领取奖励' },
|
||||||
|
TOWER_BOX_HAS_RECEIVED: { code: 20525, simStr: '奖励已领取' },
|
||||||
// 寻宝(共斗) 20600 - 20699
|
// 寻宝(共斗) 20600 - 20699
|
||||||
COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' },
|
COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' },
|
||||||
COM_BATTLE_BLUEPRT_NOT_FOUND: { code: 20602, simStr: '藏宝图不足' },
|
COM_BATTLE_BLUEPRT_NOT_FOUND: { code: 20602, simStr: '藏宝图不足' },
|
||||||
|
|||||||
@@ -209,6 +209,8 @@ export default class Role extends BaseModel {
|
|||||||
towerLv: number; // 天梯当前层数
|
towerLv: number; // 天梯当前层数
|
||||||
@prop({ required: true, default: new Date() })
|
@prop({ required: true, default: new Date() })
|
||||||
towerUpTime: Date; // 天梯爬到这一层的时间
|
towerUpTime: Date; // 天梯爬到这一层的时间
|
||||||
|
@prop({ required: true, default: [], type: Number })
|
||||||
|
towerReceived: number[]; // 已领取节点
|
||||||
|
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
hangUpSpdUpCnt: number; // 挂机加速次数
|
hangUpSpdUpCnt: number; // 挂机加速次数
|
||||||
@@ -364,6 +366,11 @@ export default class Role extends BaseModel {
|
|||||||
return role;
|
return role;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async receiveTowerBox(roleId: string, ids: number[] = []) {
|
||||||
|
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $push: { towerReceived: { $each: ids }} }, { new: true }).lean();
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
public static async increaseExpeditionPoint(roleId: string, point: number, lean = true) {
|
public static async increaseExpeditionPoint(roleId: string, point: number, lean = true) {
|
||||||
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { expeditionPoint: point } }, { new: true }).lean(lean);
|
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { expeditionPoint: point } }, { new: true }).lean(lean);
|
||||||
return role;
|
return role;
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ import { dicMainStarBox, dicMainStarBoxByChapter, loadMainStarBox } from './dict
|
|||||||
import { dicHeroTalent, initTalents, loadHeroTalent } from './dictionary/DicHeroTalent';
|
import { dicHeroTalent, initTalents, loadHeroTalent } from './dictionary/DicHeroTalent';
|
||||||
import { Talent } from "../db/Hero";
|
import { Talent } from "../db/Hero";
|
||||||
import { dicEquipStrengthAttr, loadEquipStrengthAttr } from './dictionary/DicEquipStrengthAttr';
|
import { dicEquipStrengthAttr, loadEquipStrengthAttr } from './dictionary/DicEquipStrengthAttr';
|
||||||
|
import { dicTowerGift, loadTowerGift } from './dictionary/DicTowerGift';
|
||||||
|
|
||||||
export const gameData = {
|
export const gameData = {
|
||||||
daily: dicDaily,
|
daily: dicDaily,
|
||||||
@@ -127,6 +128,7 @@ export const gameData = {
|
|||||||
se: dicSe,
|
se: dicSe,
|
||||||
tower: dicTower,
|
tower: dicTower,
|
||||||
towerTask: dicTowerTask,
|
towerTask: dicTowerTask,
|
||||||
|
towerGift: dicTowerGift,
|
||||||
war: dicWar,
|
war: dicWar,
|
||||||
warJson: dicWarJson,
|
warJson: dicWarJson,
|
||||||
dailyWarByType: dicDailyWarByType,
|
dailyWarByType: dicDailyWarByType,
|
||||||
@@ -974,6 +976,7 @@ function loadDatas() {
|
|||||||
loadSe();
|
loadSe();
|
||||||
loadTower();
|
loadTower();
|
||||||
loadTowerTask();
|
loadTowerTask();
|
||||||
|
loadTowerGift();
|
||||||
loadWar();
|
loadWar();
|
||||||
loadWarJson();
|
loadWarJson();
|
||||||
loadXunbao();
|
loadXunbao();
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
// 物品表
|
||||||
|
import { readFileAndParse, parseGoodStr, } from '../util'
|
||||||
|
import { FILENAME, } from '../../consts'
|
||||||
|
import { RewardInter } from '../interface';
|
||||||
|
const _ = require('lodash');
|
||||||
|
|
||||||
|
export interface DicTowerGift {
|
||||||
|
// 奖励id
|
||||||
|
readonly id: number;
|
||||||
|
// 镇念塔层数
|
||||||
|
readonly towerLv: number;
|
||||||
|
// 奖励
|
||||||
|
readonly reward: RewardInter[];
|
||||||
|
}
|
||||||
|
|
||||||
|
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
||||||
|
const DicTowerGiftKeys: KeysEnum<DicTowerGift> = {
|
||||||
|
id: true,
|
||||||
|
towerLv: true,
|
||||||
|
reward: true,
|
||||||
|
}
|
||||||
|
export const dicTowerGift = new Map<number, DicTowerGift>();
|
||||||
|
|
||||||
|
export function loadTowerGift() {
|
||||||
|
dicTowerGift.clear();
|
||||||
|
let arr = readFileAndParse(FILENAME.DIC_TOWER_GIFT);
|
||||||
|
|
||||||
|
arr.forEach(o => {
|
||||||
|
o.reward = parseGoodStr(o.reward);
|
||||||
|
dicTowerGift.set(o.id, _.pick(o, Object.keys(DicTowerGiftKeys)));
|
||||||
|
});
|
||||||
|
|
||||||
|
arr = undefined;
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user