领取训练场进阶奖励
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 roleName: string = session.get('roleName');
|
||||
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 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) {
|
||||
return resResult(STATUS.GUILD_GET_TRAIN_REWARD_FAIL);
|
||||
return resResult(STATUS.INTERNAL_ERR);
|
||||
}
|
||||
let goods = await addItems(roleId, roleName, sid, jinjieReward);
|
||||
let { trainRewards } = userGuild;
|
||||
|
||||
@@ -13,7 +13,7 @@ import { getRandomByLen, resResult } from '../pubUtils/util';
|
||||
import { getRedis } from './redisService';
|
||||
import { STATUS } from '../consts/statusCode';
|
||||
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)
|
||||
return;
|
||||
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) {
|
||||
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId);
|
||||
if (!!guildTrain) {
|
||||
return;
|
||||
return guildTrain;
|
||||
}
|
||||
let { trainInstances } = getArmyTrainJuDian(trainId);
|
||||
// 初始化
|
||||
|
||||
+23
-19
@@ -148,6 +148,27 @@ export const STATUS = {
|
||||
GUILD_ACTIVE_POINT_NOT_REACH: { code: 20919, 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
|
||||
DIC_DATA_NOT_FOUND: { code: 30000, 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_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
|
||||
// 运营模块相关状态 50000 - 59999
|
||||
// GM后台相关状态 60000 - 69999
|
||||
|
||||
@@ -133,12 +133,11 @@ export default class UserGuild extends BaseModel {
|
||||
}
|
||||
|
||||
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);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static async addTrainCount(roleId: string, trainCount: number, lean = true) {
|
||||
const result = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON, $gte:{buyTrainCount: trainCount}},
|
||||
{$inc: {trainCount, buyTrainCount: -1 * trainCount}}, {new: true}).lean(lean);
|
||||
|
||||
Reference in New Issue
Block a user