领取训练场进阶奖励
This commit is contained in:
@@ -0,0 +1,137 @@
|
|||||||
|
import { Application, BackendSession, pinus } from 'pinus';
|
||||||
|
import { UserGuildModel } from '../../../db/UserGuild';
|
||||||
|
import { resResult } from '../../../pubUtils/util';
|
||||||
|
import { STATUS, GUILD_OPERATE } from '../../../consts';
|
||||||
|
import { GuildRefineModel } from '../../../db/GuildRefine';
|
||||||
|
import { getArmyDevelopConsumeById, getGoodById } from '../../../pubUtils/data';
|
||||||
|
import { EquipModel } from '../../../db/Equip';
|
||||||
|
import { nowSeconds } from '../../../pubUtils/timeUtil';
|
||||||
|
import { handleCost, addItems } from '../../../services/rewardService';
|
||||||
|
import { GuildModel } from '../../../db/Guild';
|
||||||
|
import { findIndex, findWhere } from 'underscore';
|
||||||
|
import { lockData } from '../../../services/redLockService';
|
||||||
|
import { GUILD_DATA_NAME, GUILD_STRUCTURE } from '../../../consts/constModules/guildConst';
|
||||||
|
import { checkAuth } from '../../../services/guildService';
|
||||||
|
import { ARMY } from '../../../pubUtils/dicParam';
|
||||||
|
import { CURRENCY_BY_TYPE, CURRENCY_TYPE } from '../../../consts/constModules/itemConst';
|
||||||
|
|
||||||
|
export default function (app: Application) {
|
||||||
|
return new GuildRefineHandler(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class GuildRefineHandler {
|
||||||
|
constructor(private app: Application) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async getRefine(msg: {}, session: BackendSession) {
|
||||||
|
const roleId = session.get('roleId');
|
||||||
|
let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode');
|
||||||
|
if (!userGuild)
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
const { guildCode: code } = userGuild;
|
||||||
|
let { scienceTrees } = await GuildRefineModel.getRefine(code);
|
||||||
|
return resResult(STATUS.SUCCESS, { scienceTrees });
|
||||||
|
}
|
||||||
|
|
||||||
|
async refineEquip(msg: {eid: number}, session: BackendSession) {
|
||||||
|
let { eid } = msg;
|
||||||
|
const roleId: string = session.get('roleId');
|
||||||
|
const sid: string = session.get('sid');
|
||||||
|
const roleName: string = session.get('roleName');
|
||||||
|
let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode');
|
||||||
|
if (!userGuild)
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
let { guildCode: code } = userGuild;
|
||||||
|
let equip = await EquipModel.findbySeqId(eid);
|
||||||
|
if (!equip) return resResult(STATUS.EQUIP_NOT_FIND);
|
||||||
|
let equpInfo = getGoodById(equip.id);
|
||||||
|
let { scienceTrees } = await GuildRefineModel.getRefine(code);
|
||||||
|
let findDevelopConsume;
|
||||||
|
for (let scienceTree of scienceTrees) {
|
||||||
|
if (scienceTree.endTime < nowSeconds()) {
|
||||||
|
let developConsume = getArmyDevelopConsumeById(scienceTree.id);
|
||||||
|
if (developConsume.quality && developConsume.levelMax >= equpInfo.lvLimited && equpInfo.lvLimited <= developConsume.levelMin) {
|
||||||
|
findDevelopConsume = developConsume;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!findDevelopConsume)
|
||||||
|
return resResult(STATUS.GUILD_NOT_REFINE_THE_EQUIP);
|
||||||
|
|
||||||
|
let result = await handleCost(roleId, sid, findDevelopConsume.honourConsume);
|
||||||
|
if(!result)
|
||||||
|
return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
let goods = await addItems(roleId, roleName, sid, [{id: eid, count: 1}]);
|
||||||
|
return resResult(STATUS.SUCCESS, { goods });
|
||||||
|
}
|
||||||
|
|
||||||
|
async lightUpTree(msg: {id: number}, session: BackendSession) {
|
||||||
|
let { id } = msg;
|
||||||
|
const roleId: string = session.get('roleId');
|
||||||
|
const serverId: number = session.get('serverId');
|
||||||
|
let userGuild = await UserGuildModel.getMyGuild(roleId, 'auth guildCode');
|
||||||
|
if (!userGuild)
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
const checkMyResult = await checkAuth(GUILD_OPERATE.EQUIP_PRODUCE, roleId, null, userGuild);
|
||||||
|
if(!checkMyResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||||
|
const { guildCode: code } = userGuild;
|
||||||
|
let developConsume = getArmyDevelopConsumeById(id);
|
||||||
|
if (!developConsume)
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
let res:any = await lockData(serverId, GUILD_DATA_NAME.GUILD_REFINE, code);//加锁
|
||||||
|
if (!!res.err)
|
||||||
|
return resResult(STATUS.REDLOCK_ERR);
|
||||||
|
let guildRefine = await GuildRefineModel.getRefine(code);
|
||||||
|
for (let scienceTree of guildRefine.scienceTrees) {
|
||||||
|
if (scienceTree.id == id)
|
||||||
|
return resResult(STATUS.GUILD_LIGHT_UP_THE_SCIENCETREE);
|
||||||
|
|
||||||
|
if (scienceTree.endTime > nowSeconds())
|
||||||
|
return resResult(STATUS.GUILD_SCIENCETREE_IS_RUNNING);
|
||||||
|
}
|
||||||
|
const costResult = await GuildModel.costFund(code, developConsume.fundConsume);
|
||||||
|
if(!costResult)
|
||||||
|
return resResult(STATUS.GUILD_FUND_NOT_ENOUGH);
|
||||||
|
let scienceTree = { id, endTime: nowSeconds() + developConsume.timeConsume, assistRoleIds: []}
|
||||||
|
let { scienceTrees } = await GuildRefineModel.pushRefine(code, scienceTree);
|
||||||
|
res.releaseCallback();
|
||||||
|
return resResult(STATUS.SUCCESS, { scienceTrees });
|
||||||
|
}
|
||||||
|
|
||||||
|
async assistRefine(msg: {id: number}, session: BackendSession) {
|
||||||
|
let { id } = msg;
|
||||||
|
const roleId: string = session.get('roleId');
|
||||||
|
const serverId: number = session.get('serverId');
|
||||||
|
const sid: string = session.get('sid');
|
||||||
|
|
||||||
|
let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode');
|
||||||
|
if (!userGuild)
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
const { guildCode: code } = userGuild;
|
||||||
|
let res:any = await lockData(serverId, GUILD_DATA_NAME.GUILD_ASSIST_REFINE, code);//加锁
|
||||||
|
if (!!res.err)
|
||||||
|
return resResult(STATUS.REDLOCK_ERR);
|
||||||
|
let guildRefine = await GuildRefineModel.getRefine(code);
|
||||||
|
|
||||||
|
let index = findIndex(guildRefine.scienceTrees, { id });
|
||||||
|
if (index == -1)
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
let scienceTree = guildRefine.scienceTrees[index];
|
||||||
|
if (!!scienceTree.assistRoleIds.indexOf(roleId))
|
||||||
|
return resResult(STATUS.GUILD_IS_ASSISTED_SCIENCETREE);
|
||||||
|
if (scienceTree.assistRoleIds.length >= ARMY.ARMY_DEVELOPMENT_SPEEDTMES)
|
||||||
|
return resResult(STATUS.GUILD_REACH_MAX_ASSIST_COUNT);
|
||||||
|
|
||||||
|
let result = await handleCost(roleId, sid, [{id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD), count: ARMY.ARMY_DEVELOPMENT_SPEEDCOST}]);
|
||||||
|
if(!result)
|
||||||
|
return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
scienceTree.assistRoleIds.push(roleId);
|
||||||
|
scienceTree.endTime -= scienceTree.endTime - ARMY.ARMY_DEVELOPMENT_SPEED * 60;
|
||||||
|
|
||||||
|
let { scienceTrees } = await GuildRefineModel.updateRefine(code, { scienceTrees: guildRefine.scienceTrees })
|
||||||
|
res.releaseCallback();
|
||||||
|
return resResult(STATUS.SUCCESS, { scienceTrees });
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -242,11 +242,20 @@ export class GuildTrainHandler {
|
|||||||
const roleId: string = session.get('roleId');
|
const roleId: string = session.get('roleId');
|
||||||
const roleName: string = session.get('roleName');
|
const roleName: string = session.get('roleName');
|
||||||
const sid: string = session.get('sid');
|
const sid: string = session.get('sid');
|
||||||
|
const serverId: number = parseInt(session.get('serverId'));
|
||||||
|
let userGuild = await getUserGuild(roleId, serverId);
|
||||||
|
if (!userGuild)
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
const { guildCode: code } = userGuild;
|
||||||
|
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId);
|
||||||
|
if (!guildTrain||!guildTrain.isComplete)
|
||||||
|
return resResult(STATUS.GUILD_TRAIN_IS_NOT_COMPLETE);
|
||||||
let { jinjieReward } = getArmyTrainJuDian(trainId);
|
let { jinjieReward } = getArmyTrainJuDian(trainId);
|
||||||
let userGuild = await UserGuildModel.receiveTrainRewards(roleId, trainId);
|
if (userGuild.trainRewards.indexOf(trainId) != -1)
|
||||||
|
return resResult(STATUS.GUILD_TRAIN_QUALITY_REWARD_IS_GOT);
|
||||||
|
userGuild = await UserGuildModel.receiveTrainRewards(roleId, trainId);
|
||||||
if (!userGuild) {
|
if (!userGuild) {
|
||||||
return resResult(STATUS.GUILD_GET_TRAIN_REWARD_FAIL);
|
return resResult(STATUS.INTERNAL_ERR);
|
||||||
}
|
}
|
||||||
let goods = await addItems(roleId, roleName, sid, jinjieReward);
|
let goods = await addItems(roleId, roleName, sid, jinjieReward);
|
||||||
let { trainRewards } = userGuild;
|
let { trainRewards } = userGuild;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { getRandomByLen, resResult } from '../pubUtils/util';
|
|||||||
import { getRedis } from './redisService';
|
import { getRedis } from './redisService';
|
||||||
import { STATUS } from '../consts/statusCode';
|
import { STATUS } from '../consts/statusCode';
|
||||||
export async function getUserGuild(roleId: string, serverId: number) {
|
export async function getUserGuild(roleId: string, serverId: number) {
|
||||||
let userGuild = await UserGuildModel.getMyGuild(roleId,'trainCount trainTime trainRewards');
|
let userGuild = await UserGuildModel.getMyGuild(roleId,'trainCount trainTime trainRewards guildCode');
|
||||||
if (!userGuild)
|
if (!userGuild)
|
||||||
return;
|
return;
|
||||||
let { trainCount, trainTime, buyTrainCount, guildCode} = userGuild;
|
let { trainCount, trainTime, buyTrainCount, guildCode} = userGuild;
|
||||||
@@ -112,7 +112,7 @@ export function getGuildTrainInfo (guildTrains: Array<GuildTrainType>, roleId:
|
|||||||
export async function unlockTrain(code: string, trainId: number) {
|
export async function unlockTrain(code: string, trainId: number) {
|
||||||
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId);
|
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId);
|
||||||
if (!!guildTrain) {
|
if (!!guildTrain) {
|
||||||
return;
|
return guildTrain;
|
||||||
}
|
}
|
||||||
let { trainInstances } = getArmyTrainJuDian(trainId);
|
let { trainInstances } = getArmyTrainJuDian(trainId);
|
||||||
// 初始化
|
// 初始化
|
||||||
|
|||||||
+23
-19
@@ -148,6 +148,27 @@ export const STATUS = {
|
|||||||
GUILD_ACTIVE_POINT_NOT_REACH: { code: 20919, simStr: '军团活跃值不足' },
|
GUILD_ACTIVE_POINT_NOT_REACH: { code: 20919, simStr: '军团活跃值不足' },
|
||||||
GUILD_ACTIVE_BOX_HAS_RECEIVED: { code: 20920, simStr: '该活跃宝箱已领取' },
|
GUILD_ACTIVE_BOX_HAS_RECEIVED: { code: 20920, simStr: '该活跃宝箱已领取' },
|
||||||
|
|
||||||
|
GUILD_SCRIPT_IS_OPENED_TODAY: { code: 20950, simStr: '今日演武场已开启' },
|
||||||
|
GUILD_SCRIPT_NOT_OPENED: { code: 20951, simStr: '演武场未开启' },
|
||||||
|
GUILD_SCRIPT_IS_BATTLED: { code: 20952, simStr: '今日已挑战过演武场' },
|
||||||
|
GUILD_SCRIPT_IS_COMPLETE: { code: 20953, simStr: '演武场已挑战完成' },
|
||||||
|
GUILD_TRAIN_SCRIPT_NOT_OPENED: { code: 20954, simStr: '试炼关卡未开启' },
|
||||||
|
GUILD_TRAIN_BATTLE_COUNT_NOT_ENOUGH: { code: 20955, simStr: '试炼挑战次数已用完' },
|
||||||
|
GUILD_TRAIN_IS_COMPLETE: { code: 20956, simStr: '试炼关卡已经被压制' },
|
||||||
|
GUILD_GET_TRAIN_BOX_FAIL: { code: 20957, simStr: '宝箱领取失败' },
|
||||||
|
GUILD_TRAIN_REWARD_IS_RECEIVED: { code: 20958, simStr: '试炼进阶奖励已领取' },
|
||||||
|
GUILD_GET_TRAIN_REWARD_FAIL: { code: 20959, simStr: '宝箱领取失败' },
|
||||||
|
GUILD_TRAIN_LEVEL_IS_COMPLETE: { code: 20960, simStr: '试炼已经进阶' },
|
||||||
|
GUILD_BUY_TRAIN_COUNT_REACH_MAX: { code: 20961, simStr: '训练场购买挑战次数以达到上线' },
|
||||||
|
GUILD_TRAIN_IS_RESETED: { code: 20962, simStr: '军团训练场已经重置' },
|
||||||
|
GUILD_NOT_REFINE_THE_EQUIP: { code: 20963, simStr: '军团不能研发次装备' },
|
||||||
|
GUILD_LIGHT_UP_THE_SCIENCETREE: { code: 20964, simStr: '军团已经点亮此科技' },
|
||||||
|
GUILD_SCIENCETREE_IS_RUNNING: { code: 20965, simStr: '军团正在进行研发,不能点亮' },
|
||||||
|
GUILD_IS_ASSISTED_SCIENCETREE: { code: 20966, simStr: '玩家已经协助过该科技树' },
|
||||||
|
GUILD_REACH_MAX_ASSIST_COUNT: { code: 20967, simStr: '已经达到协助的最大次数' },
|
||||||
|
GUILD_TRAIN_IS_NOT_COMPLETE: { code: 20968, simStr: '军团该训练场没有完成' },
|
||||||
|
GUILD_TRAIN_QUALITY_REWARD_IS_GOT: { code: 20969, simStr: '军团训练进阶奖励已经领取' },
|
||||||
|
|
||||||
// 通用 30000 - 30099
|
// 通用 30000 - 30099
|
||||||
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
|
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
|
||||||
ROLE_MATERIAL_NOT_ENOUGH: { code: 30001, simStr: '材料数量不足' },
|
ROLE_MATERIAL_NOT_ENOUGH: { code: 30001, simStr: '材料数量不足' },
|
||||||
@@ -213,25 +234,8 @@ export const STATUS = {
|
|||||||
ROLE_SCHOOL_POSITION_UNLOCK_NOT_NEED: { code: 30605, simStr: '该位置已解锁' },
|
ROLE_SCHOOL_POSITION_UNLOCK_NOT_NEED: { code: 30605, simStr: '该位置已解锁' },
|
||||||
ROLE_SCROLL_REACH_MAX: { code: 30606, simStr: '已经升到可以升的最高等级' },
|
ROLE_SCROLL_REACH_MAX: { code: 30606, simStr: '已经升到可以升的最高等级' },
|
||||||
|
|
||||||
//军团30800-30899
|
|
||||||
GUILD_SCRIPT_IS_OPENED_TODAY: {code: 30800, simStr: '今日演武场已开启'},
|
|
||||||
GUILD_SCRIPT_NOT_OPENED: {code: 30801, simStr: '演武场未开启'},
|
|
||||||
GUILD_SCRIPT_IS_BATTLED: {code: 30802, simStr: '今日已挑战过演武场'},
|
|
||||||
GUILD_SCRIPT_IS_COMPLETE: {code: 30803, simStr: '演武场已挑战完成'},
|
|
||||||
GUILD_TRAIN_SCRIPT_NOT_OPENED: {code: 30910, simStr: '试炼关卡未开启'},
|
|
||||||
GUILD_TRAIN_BATTLE_COUNT_NOT_ENOUGH: {code: 30911, simStr: '试炼挑战次数已用完'},
|
|
||||||
GUILD_TRAIN_IS_COMPLETE: {code: 30912, simStr: '试炼关卡已经被压制'},
|
|
||||||
GUILD_GET_TRAIN_BOX_FAIL: {code: 30913, simStr: '宝箱领取失败'},
|
|
||||||
GUILD_TRAIN_REWARD_IS_RECEIVED: {code: 30913, simStr: '试炼进阶奖励已领取'},
|
|
||||||
GUILD_GET_TRAIN_REWARD_FAIL: {code: 30913, simStr: '宝箱领取失败'},
|
|
||||||
GUILD_TRAIN_LEVEL_IS_COMPLETE: {code: 30913, simStr: '试炼已经进阶'},
|
|
||||||
GUILD_BUY_TRAIN_COUNT_REACH_MAX: { code: 30913, simStr: '训练场购买挑战次数以达到上线' },
|
|
||||||
GUILD_TRAIN_IS_RESETED: { code: 30913, simStr: '军团训练场已经重置' },
|
|
||||||
GUILD_NOT_REFINE_THE_EQUIP: { code: 30913, simStr: '军团不能研发次装备' },
|
|
||||||
GUILD_LIGHT_UP_THE_SCIENCETREE: { code: 20920, simStr: '军团已经点亮此科技' },
|
|
||||||
GUILD_SCIENCETREE_IS_RUNNING: { code: 20920, simStr: '军团正在进行研发,不能点亮' },
|
|
||||||
GUILD_IS_ASSISTED_SCIENCETREE: { code: 20920, simStr: '玩家已经协助过该科技树' },
|
|
||||||
GUILD_REACH_MAX_ASSIST_COUNT: { code: 20920, simStr: '已经达到协助的最大次数' },
|
|
||||||
// 社交相关状态 40000 - 49999
|
// 社交相关状态 40000 - 49999
|
||||||
// 运营模块相关状态 50000 - 59999
|
// 运营模块相关状态 50000 - 59999
|
||||||
// GM后台相关状态 60000 - 69999
|
// GM后台相关状态 60000 - 69999
|
||||||
|
|||||||
@@ -133,12 +133,11 @@ export default class UserGuild extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static async receiveTrainRewards(roleId: string, trainId: number, lean = true) {
|
public static async receiveTrainRewards(roleId: string, trainId: number, lean = true) {
|
||||||
const result = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON, 'trainRewards':{$ne: trainId }},
|
const result = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON},
|
||||||
{$push:{trainRewards: trainId} },{new: true}).lean(lean);
|
{$push:{trainRewards: trainId} },{new: true}).lean(lean);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static async addTrainCount(roleId: string, trainCount: number, lean = true) {
|
public static async addTrainCount(roleId: string, trainCount: number, lean = true) {
|
||||||
const result = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON, $gte:{buyTrainCount: trainCount}},
|
const result = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON, $gte:{buyTrainCount: trainCount}},
|
||||||
{$inc: {trainCount, buyTrainCount: -1 * trainCount}}, {new: true}).lean(lean);
|
{$inc: {trainCount, buyTrainCount: -1 * trainCount}}, {new: true}).lean(lean);
|
||||||
|
|||||||
Reference in New Issue
Block a user