活动:成长活动统计任务,领取奖励接口
This commit is contained in:
@@ -2,6 +2,12 @@ import { Application, BackendSession } from 'pinus';
|
||||
import { resResult } from '../../../pubUtils/util';
|
||||
import { STATUS, } from '../../../consts';
|
||||
import { getPlayerGrowthData } from '../../../services/growthService';
|
||||
import { GrowthItem } from '../../../domain/activityField/growthField';
|
||||
import { addItems, createHero } from '../../../services/rewardService';
|
||||
import { HeroModel } from '../../../db/Hero';
|
||||
import { gameData } from '../../../pubUtils/data';
|
||||
import { ActivityModelType } from '../../../db/Activity';
|
||||
import { ActivityGrowthModel } from '../../../db/ActivityGrowth';
|
||||
|
||||
|
||||
export default function (app: Application) {
|
||||
@@ -22,10 +28,8 @@ export class SevenDaysHandler {
|
||||
const { activityId } = msg;
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
// const funcs: number[] = session.get('funcs');
|
||||
// const sid = session.get('sid');
|
||||
|
||||
let playerData = getPlayerGrowthData(activityId, serverId, roleId)
|
||||
let playerData = await getPlayerGrowthData(activityId, serverId, roleId)
|
||||
|
||||
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
|
||||
|
||||
@@ -39,17 +43,54 @@ export class SevenDaysHandler {
|
||||
* @memberof SevenDaysHandler
|
||||
*/
|
||||
async getGrowthCellReward(msg: { activityId: number, dayIndex: number, cellIndex: number, type: number }, session: BackendSession) {
|
||||
const { activityId } = msg;
|
||||
const { activityId, dayIndex, cellIndex, type } = msg;
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
// const funcs: number[] = session.get('funcs');
|
||||
// const sid = session.get('sid');
|
||||
|
||||
let playerData = getPlayerGrowthData(activityId, serverId, roleId)
|
||||
const sid = session.get('sid');
|
||||
const roleName = session.get('roleName');
|
||||
|
||||
let playerData = await getPlayerGrowthData(activityId, serverId, roleId)
|
||||
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
|
||||
|
||||
return resResult(STATUS.SUCCESS, playerData);
|
||||
let growthItemData: GrowthItem = playerData.findGrowthItem(dayIndex, cellIndex, type);
|
||||
if (!growthItemData) {
|
||||
return resResult(STATUS.ACTIVITY_DATA_ERROR);
|
||||
}
|
||||
if (!growthItemData.isComplete()) {//未完成任务
|
||||
return resResult(STATUS.ACTIVITY_TASK_UNCOMPLETED);
|
||||
}
|
||||
if (!growthItemData.canReceive()) {//已经领取过
|
||||
return resResult(STATUS.ACTIVITY_REWARDED);
|
||||
}
|
||||
|
||||
await ActivityGrowthModel.addCellRecord(activityId, roleId, dayIndex, cellIndex, type, 1);
|
||||
let reward = growthItemData.goodReward();
|
||||
let goods = await addItems(roleId, roleName, sid, reward);
|
||||
let heroReward = growthItemData.heroReward();
|
||||
let addHeros = [];
|
||||
if (heroReward.length > 0) {
|
||||
for (let heroParam of heroReward) {
|
||||
// 检查是否存在武将
|
||||
let hid = heroParam.id;
|
||||
let count = heroParam.count;
|
||||
let hasHero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if (hasHero && count > 1) {//已经有武将
|
||||
|
||||
continue;
|
||||
}
|
||||
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let { pieceId, quality, initialStars: star, pieceCount, jobid: job, name: hName, initialSkin } = dicHero;
|
||||
// createHero
|
||||
let hero = await createHero(roleId, sid, serverId, {
|
||||
roleId, serverId, roleName, hid, hName, star, quality, job, skins: [{ id: initialSkin, enable: true }]
|
||||
});
|
||||
addHeros.push(hero);
|
||||
}
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, { playerData, goods, addHeros });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -59,17 +100,55 @@ export class SevenDaysHandler {
|
||||
* @memberof SevenDaysHandler
|
||||
*/
|
||||
async getGrowthDayReward(msg: { activityId: number, dayIndex: number }, session: BackendSession) {
|
||||
const { activityId } = msg;
|
||||
const { activityId, dayIndex } = msg;
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
// const funcs: number[] = session.get('funcs');
|
||||
// const sid = session.get('sid');
|
||||
|
||||
let playerData = getPlayerGrowthData(activityId, serverId, roleId)
|
||||
const sid = session.get('sid');
|
||||
const roleName = session.get('roleName');
|
||||
|
||||
let playerData = await getPlayerGrowthData(activityId, serverId, roleId)
|
||||
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
|
||||
|
||||
return resResult(STATUS.SUCCESS, playerData);
|
||||
let dayItemData: GrowthItem = playerData.findDayItem(dayIndex);
|
||||
if (!dayItemData) {
|
||||
return resResult(STATUS.ACTIVITY_DATA_ERROR);
|
||||
}
|
||||
if (playerData.totalPoint - playerData.totalConsumePoint < dayItemData.consumePoint) {
|
||||
return resResult(STATUS.ACTIVITY_NO_POINT);
|
||||
}
|
||||
if (dayItemData.getPointReward) {//已经领取过
|
||||
return resResult(STATUS.ACTIVITY_REWARDED);
|
||||
}
|
||||
|
||||
await ActivityGrowthModel.addDayRecord(activityId, roleId, dayIndex, 1);
|
||||
|
||||
let reward = dayItemData.goodReward();
|
||||
let goods = await addItems(roleId, roleName, sid, reward);
|
||||
let heroReward = dayItemData.heroReward();
|
||||
let addHeros = [];
|
||||
if (heroReward.length > 0) {
|
||||
for (let heroParam of heroReward) {
|
||||
// 检查是否存在武将
|
||||
let hid = heroParam.id;
|
||||
let count = heroParam.count;
|
||||
let hasHero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if (hasHero && count > 1) {//已经有武将
|
||||
|
||||
continue;
|
||||
}
|
||||
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let { pieceId, quality, initialStars: star, pieceCount, jobid: job, name: hName, initialSkin } = dicHero;
|
||||
// createHero
|
||||
let hero = await createHero(roleId, sid, serverId, {
|
||||
roleId, serverId, roleName, hid, hName, star, quality, job, skins: [{ id: initialSkin, enable: true }]
|
||||
});
|
||||
addHeros.push(hero);
|
||||
}
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, { playerData, goods, addHeros });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,12 +4,12 @@ import { STATUS, TASK_TYPE } from '../../../consts';
|
||||
import { GuildTrainModel } from '../../../db/GuildTrain';
|
||||
import { BattleRecordModel } from '../../../db/BattleRecord';
|
||||
import { nowSeconds, getHourPoint, getCurHourPoint } from '../../../pubUtils/timeUtil';
|
||||
import { getUserGuild, getGuildTrainInfo, unlockTrain, resetTrain, getGuildTrainRewards} from '../../../services/guildTrainService';
|
||||
import { getUserGuild, getGuildTrainInfo, unlockTrain, resetTrain, getGuildTrainRewards } from '../../../services/guildTrainService';
|
||||
import { findIndex, findWhere, indexBy } from 'underscore'
|
||||
import { lockData } from '../../../services/redLockService';
|
||||
import { lockData } from '../../../services/redLockService';
|
||||
import { REFRESH_HOUR, GUILD_REPORT_NUM, GUILD_POINT_WAYS } from '../../../consts/constModules/guildConst';
|
||||
import { UserGuildModel } from '../../../db/UserGuild';
|
||||
import { GuildModel } from '../../../db/Guild';
|
||||
import { UserGuildModel } from '../../../db/UserGuild';
|
||||
import { GuildModel } from '../../../db/Guild';
|
||||
import { getArmyTrainJuDian, getTrainSoloReward, getTrainBaseByLv } from '../../../pubUtils/data';
|
||||
import { CURRENCY_BY_TYPE, CURRENCY_TYPE } from '../../../consts/constModules/itemConst';
|
||||
import { handleCost, addItems } from '../../../services/rewardService';
|
||||
@@ -19,6 +19,7 @@ import { GuildTrainReportModel } from '../../../db/GuildTrainReport';
|
||||
import { DATA_NAME } from '../../../consts/dataName';
|
||||
import { pushGuildTrainSucMsg } from '../../../services/chatService';
|
||||
import { checkTask } from '../../../services/taskService';
|
||||
import { accomplishTask } from '../../../pubUtils/taskUtil';
|
||||
|
||||
export default function (app: Application) {
|
||||
return new GuildTrainHandler(app);
|
||||
@@ -34,17 +35,17 @@ export class GuildTrainHandler {
|
||||
const roleId: string = session.get('roleId');
|
||||
const serverId: number = parseInt(session.get('serverId'));
|
||||
let userGuild = await getUserGuild(roleId, serverId);
|
||||
if (!userGuild)
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
let { trainId, trainLv } = await GuildModel.findGuild(code, serverId, 'trainId trainLv');
|
||||
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId);
|
||||
if (!guildTrain ) {
|
||||
if (!guildTrain) {
|
||||
guildTrain = await unlockTrain(code, trainId);
|
||||
}
|
||||
let { trainCount, trainRewards, buyTrainCount } = userGuild;
|
||||
let result:any = getGuildTrainInfo(guildTrain, roleId, trainCount, trainRewards);
|
||||
result.buyTrainCount = buyTrainCount||0;
|
||||
let result: any = getGuildTrainInfo(guildTrain, roleId, trainCount, trainRewards);
|
||||
result.buyTrainCount = buyTrainCount || 0;
|
||||
result.trainLv = trainLv;
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
@@ -53,7 +54,7 @@ export class GuildTrainHandler {
|
||||
const roleId: string = session.get('roleId');
|
||||
const serverId: number = parseInt(session.get('serverId'));
|
||||
let userGuild = await getUserGuild(roleId, serverId);
|
||||
if (!userGuild)
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
let trainIds = [];
|
||||
@@ -63,11 +64,11 @@ export class GuildTrainHandler {
|
||||
trainIds.push(trainId - 1);
|
||||
let trainReports = await GuildTrainReportModel.findGuildTrainByTrainIds(code, trainIds);
|
||||
let reports = [];
|
||||
trainReports.map(({ reports: resReports, trainId: resTrainId})=>{
|
||||
trainReports.map(({ reports: resReports, trainId: resTrainId }) => {
|
||||
if (resTrainId != trainId) {
|
||||
let lenNum = resReports.length;
|
||||
resReports = resReports.splice(lenNum - GUILD_REPORT_NUM - 1, GUILD_REPORT_NUM);//获得上场的战报的信息与本次战报合并
|
||||
}
|
||||
}
|
||||
reports.push(...resReports);
|
||||
});
|
||||
return resResult(STATUS.SUCCESS, { reports });
|
||||
@@ -78,30 +79,30 @@ export class GuildTrainHandler {
|
||||
const roleId: string = session.get('roleId');
|
||||
const serverId: number = parseInt(session.get('serverId'));
|
||||
let userGuild = await getUserGuild(roleId, serverId);
|
||||
if (!userGuild)
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
let guildTrains = await GuildTrainModel.findGuildTrain(code);//获得未失效的宝箱奖励
|
||||
let resTrainBoxs = [];
|
||||
guildTrains.forEach(({trainInstances, trainId}) =>{
|
||||
guildTrains.forEach(({ trainInstances, trainId }) => {
|
||||
let { trainInstances: instances } = getArmyTrainJuDian(trainId);
|
||||
let flag = false;
|
||||
let boxRewards = [];
|
||||
trainInstances.map(({hid, progress, endTime, trainBoxs})=>{
|
||||
trainInstances.map(({ hid, progress, endTime, trainBoxs }) => {
|
||||
let isComplete = false;
|
||||
let instance = findWhere(instances, { hid });
|
||||
if ( progress >= instance.progress) {
|
||||
if (progress >= instance.progress) {
|
||||
isComplete = true;
|
||||
if (endTime > nowSeconds())
|
||||
if (endTime > nowSeconds())
|
||||
flag = true;
|
||||
}
|
||||
boxRewards.push({hid, recordBoxs: trainBoxs, trainId, endTime, isComplete});
|
||||
boxRewards.push({ hid, recordBoxs: trainBoxs, trainId, endTime, isComplete });
|
||||
});
|
||||
if (flag) {
|
||||
resTrainBoxs.push({ trainId, boxRewards });
|
||||
}
|
||||
})
|
||||
return resResult(STATUS.SUCCESS, {trainBoxRewards: resTrainBoxs});
|
||||
return resResult(STATUS.SUCCESS, { trainBoxRewards: resTrainBoxs });
|
||||
}
|
||||
/**
|
||||
* 挑战练兵副本
|
||||
@@ -114,35 +115,35 @@ export class GuildTrainHandler {
|
||||
const roleName = session.get('roleName');
|
||||
const serverId = parseInt(session.get('serverId'));
|
||||
let userGuild = await getUserGuild(roleId, serverId);
|
||||
if (!userGuild)
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
if (userGuild.trainCount <= 0)
|
||||
if (userGuild.trainCount <= 0)
|
||||
return resResult(STATUS.GUILD_TRAIN_BATTLE_COUNT_NOT_ENOUGH);
|
||||
let { trainId: curTeainId } = await GuildModel.findGuild(code, serverId, 'trainId');
|
||||
if (curTeainId !== trainId)
|
||||
if (curTeainId !== trainId)
|
||||
return resResult(STATUS.GUILD_TRAIN_LEVEL_IS_COMPLETE);
|
||||
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId, 'trainId isComplete trainInstances');
|
||||
if (!guildTrain && guildTrain.isComplete)
|
||||
if (!guildTrain && guildTrain.isComplete)
|
||||
return resResult(STATUS.GUILD_TRAIN_SCRIPT_NOT_OPENED);
|
||||
let { trainInstances } = getArmyTrainJuDian(trainId);
|
||||
let instance = findWhere(trainInstances, { hid });
|
||||
if (!instance)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let trainInstance = findWhere(guildTrain.trainInstances, { hid });
|
||||
if (!trainInstance)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
if (!trainInstance)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
if (trainInstance.progress >= instance.progress) {
|
||||
return resResult(STATUS.GUILD_TRAIN_IS_COMPLETE);
|
||||
}
|
||||
return resResult(STATUS.GUILD_TRAIN_IS_COMPLETE);
|
||||
}
|
||||
const battleCode = genCode(8); // 关卡唯一值
|
||||
await BattleRecordModel.updateBattleRecordByCode(battleCode, {
|
||||
$set: {
|
||||
roleId, roleName, battleId: instance.warId,
|
||||
status: 0,
|
||||
record: { heroes:[], trainId, hid, guildCode: code, difficulty},
|
||||
record: { heroes: [], trainId, hid, guildCode: code, difficulty },
|
||||
}
|
||||
}, true);
|
||||
}, true);
|
||||
return resResult(STATUS.SUCCESS, { battleCode });
|
||||
}
|
||||
/**
|
||||
@@ -150,7 +151,7 @@ export class GuildTrainHandler {
|
||||
* @param msg
|
||||
* @param session
|
||||
*/
|
||||
async trainBattleEnd(msg: { battleCode: string, isSuccess: boolean}, session: BackendSession) {
|
||||
async trainBattleEnd(msg: { battleCode: string, isSuccess: boolean }, session: BackendSession) {
|
||||
const { battleCode, isSuccess } = msg;
|
||||
const roleId: string = session.get('roleId');
|
||||
const serverId: number = parseInt(session.get('serverId'));
|
||||
@@ -158,33 +159,33 @@ export class GuildTrainHandler {
|
||||
const sid: string = session.get('sid');
|
||||
const funcs: number[] = session.get('funcs');
|
||||
let userGuild = await getUserGuild(roleId, serverId);
|
||||
if (!userGuild)
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
const battleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode, true);
|
||||
if (!battleRecord || battleRecord.status != 0 || roleId != battleRecord.roleId || battleRecord.record.guildCode != code) {
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
}
|
||||
let time = Math.floor(battleRecord.createdAt.getTime()/1000);
|
||||
}
|
||||
let time = Math.floor(battleRecord.createdAt.getTime() / 1000);
|
||||
if (userGuild.trainCount - 1 < 0) {
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
}
|
||||
|
||||
if (time < getCurHourPoint(REFRESH_HOUR) && nowSeconds() > getCurHourPoint(REFRESH_HOUR)) {
|
||||
}
|
||||
|
||||
if (time < getCurHourPoint(REFRESH_HOUR) && nowSeconds() > getCurHourPoint(REFRESH_HOUR)) {
|
||||
return resResult(STATUS.GUILD_TRAIN_IS_RESETED);//重置前进入战斗,重置后回调该接口
|
||||
}
|
||||
if (time > getHourPoint(REFRESH_HOUR)) {
|
||||
userGuild = await UserGuildModel.updateInfo(roleId, {}, { trainCount: -1 });//扣除一次挑战次数
|
||||
}
|
||||
await BattleRecordModel.updateBattleRecordByCode(battleCode, {
|
||||
$set: { status: isSuccess?1:2 }
|
||||
$set: { status: isSuccess ? 1 : 2 }
|
||||
}, true);//设置战斗状态
|
||||
|
||||
|
||||
let trainId = battleRecord.record.trainId;
|
||||
let hid = battleRecord.record.hid;
|
||||
let res:any = await lockData(serverId, DATA_NAME.TRAIN, code + '_' + trainId);//加锁
|
||||
if (!!res.err)
|
||||
return resResult(STATUS.REDLOCK_ERR);
|
||||
let res: any = await lockData(serverId, DATA_NAME.TRAIN, code + '_' + trainId);//加锁
|
||||
if (!!res.err)
|
||||
return resResult(STATUS.REDLOCK_ERR);
|
||||
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId);
|
||||
if (!guildTrain) {
|
||||
res.releaseCallback();//解锁
|
||||
@@ -193,7 +194,7 @@ export class GuildTrainHandler {
|
||||
let trainInstance = findWhere(guildTrain.trainInstances, { hid });
|
||||
if (!trainInstance) {
|
||||
res.releaseCallback();//解锁
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
}
|
||||
|
||||
let { trainInstances, soloRewardRatio } = getArmyTrainJuDian(trainId);
|
||||
@@ -205,28 +206,28 @@ export class GuildTrainHandler {
|
||||
let trainSoloReward = getTrainSoloReward(battleRecord.record.difficulty);
|
||||
if (!trainSoloReward) {//获得个人奖励信息
|
||||
res.releaseCallback();//解锁
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
}
|
||||
let addScore = Math.floor((isSuccess?trainSoloReward.winScore:trainSoloReward.failScore));//个人获得积分,也是压制进度
|
||||
let addScore = Math.floor((isSuccess ? trainSoloReward.winScore : trainSoloReward.failScore));//个人获得积分,也是压制进度
|
||||
//个人功勋奖励
|
||||
let goods = await addItems(roleId, roleName, sid, [{id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.HONOUR), count: Math.floor((isSuccess?trainSoloReward.winHonour:trainSoloReward.failHonour) * (soloRewardRatio + 100 ) / 100)}]);
|
||||
let goods = await addItems(roleId, roleName, sid, [{ id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.HONOUR), count: Math.floor((isSuccess ? trainSoloReward.winHonour : trainSoloReward.failHonour) * (soloRewardRatio + 100) / 100) }]);
|
||||
let { isComplete, ranks } = guildTrain;
|
||||
let reports = [];
|
||||
let index = findIndex(ranks, {roleId});
|
||||
let index = findIndex(ranks, { roleId });
|
||||
if (index !== -1) {
|
||||
ranks[index].score += addScore;//更新原有的排名信息
|
||||
} else {
|
||||
ranks.push({score: addScore, roleId});//新增排名
|
||||
ranks.push({ score: addScore, roleId });//新增排名
|
||||
}
|
||||
let needLockNext = false;
|
||||
let report = {roleName, trainId, hid, score: addScore, time: nowSeconds(), type: isSuccess?2:1, difficulty: battleRecord.record.difficulty};//type 1:失败, 2:成功,3:表示系统战报即:被成功压制
|
||||
let report = { roleName, trainId, hid, score: addScore, time: nowSeconds(), type: isSuccess ? 2 : 1, difficulty: battleRecord.record.difficulty };//type 1:失败, 2:成功,3:表示系统战报即:被成功压制
|
||||
reports.push(report);
|
||||
if (trainInstance.progress < instance.progress ) {
|
||||
if (trainInstance.progress < instance.progress) {
|
||||
if (trainInstance.progress + addScore >= instance.progress) {
|
||||
//压制成功
|
||||
if (!isComplete) {
|
||||
isComplete = true;
|
||||
guildTrain.trainInstances.forEach(({hid: otherHid, progress})=>{
|
||||
guildTrain.trainInstances.forEach(({ hid: otherHid, progress }) => {
|
||||
if (hid != otherHid && progress != instance.progress) {
|
||||
isComplete = false;
|
||||
}
|
||||
@@ -237,12 +238,12 @@ export class GuildTrainHandler {
|
||||
}
|
||||
let progress = instance.progress;
|
||||
guildTrain = await GuildTrainModel.updateGuildTrainProgress(code, trainId, hid, progress, ranks, isComplete);
|
||||
|
||||
|
||||
//type 1:失败, 2:成功,3:表示系统战报即:被成功压制
|
||||
reports.push({ type: 3, time:nowSeconds(), score: addScore, roleName, trainId, hid, difficulty: battleRecord.record.difficulty });
|
||||
reports.push({ type: 3, time: nowSeconds(), score: addScore, roleName, trainId, hid, difficulty: battleRecord.record.difficulty });
|
||||
pushGuildTrainSucMsg(roleId, roleName, code, hid);
|
||||
|
||||
if (needLockNext) {
|
||||
|
||||
if (needLockNext) {
|
||||
guildTrain = await unlockTrain(code, trainId + 1);
|
||||
}
|
||||
res.releaseCallback();//解锁
|
||||
@@ -254,20 +255,22 @@ export class GuildTrainHandler {
|
||||
}
|
||||
} else {
|
||||
//玩家结算前已经完成进度,修改玩家的排名
|
||||
guildTrain = await GuildTrainModel.updateGuildTrain(code, trainId, { ranks});
|
||||
guildTrain = await GuildTrainModel.updateGuildTrain(code, trainId, { ranks });
|
||||
res.releaseCallback();//解锁
|
||||
}
|
||||
await GuildTrainReportModel.pushGuildTrainReports(code, trainId, reports);//增加战报
|
||||
let { trainCount, trainRewards } = userGuild;
|
||||
let result:any = getGuildTrainInfo(guildTrain, roleId, trainCount, trainRewards);//战斗后更新练兵场信息
|
||||
let result: any = getGuildTrainInfo(guildTrain, roleId, trainCount, trainRewards);//战斗后更新练兵场信息
|
||||
result.battleGoods = goods;
|
||||
await addActive(roleId, serverId, GUILD_POINT_WAYS.TRAIN);
|
||||
|
||||
// 任务
|
||||
if(isSuccess) {
|
||||
if (isSuccess) {
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_TRAIN_SUCESS, 1, true, {});
|
||||
}
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_TRAIN, 1, true, {});
|
||||
//成长任务
|
||||
await accomplishTask(roleId, TASK_TYPE.GUILD_TRAIN, 1)
|
||||
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
@@ -276,19 +279,19 @@ export class GuildTrainHandler {
|
||||
* @param msg
|
||||
* @param session
|
||||
*/
|
||||
async getTrainInstanceBox(msg: { trainId: number , hid: number, index: number}, session: BackendSession) {
|
||||
async getTrainInstanceBox(msg: { trainId: number, hid: number, index: number }, session: BackendSession) {
|
||||
let { trainId, hid, index } = msg;
|
||||
const roleId: string = session.get('roleId');
|
||||
const serverId: number = parseInt(session.get('serverId'));
|
||||
const roleName: string = session.get('roleName');
|
||||
const sid = session.get('sid');
|
||||
let userGuild = await getUserGuild(roleId, serverId);
|
||||
if (!userGuild)
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
let { trainLv } = await GuildModel.findGuild(code, serverId, 'trainLv');
|
||||
let res:any = await lockData(serverId, DATA_NAME.TRAIN_BOX, code + '_' + trainId + '_' + index);//加锁
|
||||
if (!!res.err)
|
||||
let res: any = await lockData(serverId, DATA_NAME.TRAIN_BOX, code + '_' + trainId + '_' + index);//加锁
|
||||
if (!!res.err)
|
||||
return resResult(STATUS.REDLOCK_ERR);
|
||||
|
||||
let { shilianRewardRatio } = getTrainBaseByLv(trainLv);
|
||||
@@ -317,16 +320,16 @@ export class GuildTrainHandler {
|
||||
return resResult(STATUS.GUILD_TRAIN_BOX_IS_GOT);
|
||||
}
|
||||
let good = getRandomByLen(heroRewards);
|
||||
good.count = Math.floor((100 + shilianRewardRatio) * good.count/100);
|
||||
good.count = Math.floor((100 + shilianRewardRatio) * good.count / 100);
|
||||
let goods = await addItems(roleId, roleName, sid, [good]);
|
||||
|
||||
let resGuildTrain = await GuildTrainModel.receiveBoxByIndex(code, roleId, trainId, hid, index, good);
|
||||
res.releaseCallback();//解锁
|
||||
|
||||
|
||||
if (!resGuildTrain) {
|
||||
return resResult(STATUS.GUILD_GET_TRAIN_BOX_FAIL);
|
||||
}
|
||||
let result:any = getGuildTrainRewards(resGuildTrain);
|
||||
let result: any = getGuildTrainRewards(resGuildTrain);
|
||||
|
||||
result.goods = goods;
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
@@ -336,22 +339,22 @@ export class GuildTrainHandler {
|
||||
* @param msg
|
||||
* @param session
|
||||
*/
|
||||
async getTrainLvUpRewards(msg: {trainId: number }, session: BackendSession) {
|
||||
async getTrainLvUpRewards(msg: { trainId: number }, session: BackendSession) {
|
||||
let { trainId } = msg;
|
||||
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)
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId);
|
||||
if (!guildTrain||!guildTrain.isComplete)
|
||||
if (!guildTrain || !guildTrain.isComplete)
|
||||
return resResult(STATUS.GUILD_TRAIN_IS_NOT_COMPLETE);
|
||||
let { jinjieReward } = getArmyTrainJuDian(trainId);
|
||||
if (userGuild.trainRewards.indexOf(trainId) != -1)
|
||||
return resResult(STATUS.GUILD_TRAIN_QUALITY_REWARD_IS_GOT);
|
||||
return resResult(STATUS.GUILD_TRAIN_QUALITY_REWARD_IS_GOT);
|
||||
userGuild = await UserGuildModel.receiveTrainRewards(roleId, trainId);
|
||||
if (!userGuild) {
|
||||
return resResult(STATUS.INTERNAL_ERR);
|
||||
@@ -360,20 +363,20 @@ export class GuildTrainHandler {
|
||||
let { trainRewards } = userGuild;
|
||||
return resResult(STATUS.SUCCESS, { trainRewards, goods });
|
||||
}
|
||||
|
||||
|
||||
//购买挑战次数
|
||||
async purchaseTrainCount(msg: {count: number}, session: BackendSession) {
|
||||
async purchaseTrainCount(msg: { count: number }, session: BackendSession) {
|
||||
let { count } = msg;
|
||||
const roleId:string = session.get('roleId');
|
||||
const roleId: string = session.get('roleId');
|
||||
const serverId: number = parseInt(session.get('serverId'));
|
||||
const sid:string = session.get('sid');
|
||||
const sid: string = session.get('sid');
|
||||
let userGuild = await getUserGuild(roleId, serverId);
|
||||
if (!userGuild)
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
if (userGuild.buyTrainCount >= ARMY.ARMY_TRAIN_BUYTIMES)
|
||||
return resResult(STATUS.GUILD_BUY_TRAIN_COUNT_REACH_MAX);
|
||||
let result = await handleCost(roleId, sid, [{id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD), count: ARMY.ARMY_TRAIN_TIMESCOST}]);
|
||||
if(!result)
|
||||
let result = await handleCost(roleId, sid, [{ id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD), count: ARMY.ARMY_TRAIN_TIMESCOST }]);
|
||||
if (!result)
|
||||
return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
let { trainCount, buyTrainCount } = await UserGuildModel.addTrainCount(roleId, count);
|
||||
return resResult(STATUS.SUCCESS, { trainCount, buyTrainCount });
|
||||
|
||||
@@ -2,9 +2,9 @@ import { STATUS } from './../../../consts/statusCode';
|
||||
import { EquipModel } from './../../../db/Equip';
|
||||
import { RoleModel } from './../../../db/Role';
|
||||
import { UserModel } from '../../../db/User';
|
||||
import { GMUserModel } from '../../../db/GMUser';
|
||||
import { GMUserModel } from '../../../db/GMUser';
|
||||
import { Application } from 'pinus';
|
||||
import {FrontendSession} from 'pinus';
|
||||
import { FrontendSession } from 'pinus';
|
||||
import { HeroModel } from './../../../db/Hero';
|
||||
import { resResult } from '../../../pubUtils/util';
|
||||
import { COM_BTL_QUALITY, ROLE_SELECT, HERO_SELECT, GUILD_SELECT, USER_GUILD_SELECT, DEBUG_MAGIC_WORD, REDIS_KEY, TASK_TYPE } from '../../../consts';
|
||||
@@ -57,27 +57,27 @@ export class EntryHandler {
|
||||
if (connect.isOnline) { // 多地登陆踢下线
|
||||
await self.app.rpc.connector.connectorRemote.remoteLogin.toServer(connect.sid, role.roleId);
|
||||
}
|
||||
let serverName = this.app.getServerId();
|
||||
await roleLogin(role.roleId, user.userCode, serverName, user.pkgName, role.funcs||[]); // 保存在线用户
|
||||
let serverName = this.app.getServerId();
|
||||
await roleLogin(role.roleId, user.userCode, serverName, user.pkgName, role.funcs || []); // 保存在线用户
|
||||
await session.abind(role.roleId);
|
||||
session.set('uid', role.roleId);
|
||||
session.set('roleId', role.roleId);
|
||||
let updatedMailAt = role.updatedMailAt?role.updatedMailAt:0;
|
||||
let updatedMailAt = role.updatedMailAt ? role.updatedMailAt : 0;
|
||||
session.set('updatedMailAt', updatedMailAt);
|
||||
session.set('roleName', role.roleName);
|
||||
session.set('eventStatus', role.eventStatus);
|
||||
session.set('sid', self.app.get('serverId'));
|
||||
session.set('serverId', role.serverId);
|
||||
session.set('funcs', role.funcs||[]);
|
||||
session.set('funcs', role.funcs || []);
|
||||
session.set('guildCode', role.guildCode);
|
||||
session.push('sid', () => {});
|
||||
session.push('roleId', () => {});
|
||||
session.push('roleName', () => {});
|
||||
session.push('eventStatus', () => {});
|
||||
session.push('serverId', () => {});
|
||||
session.push('funcs', () => {});
|
||||
session.push('updatedMailAt', () => {});
|
||||
session.push('guildCode', () => {});
|
||||
session.push('sid', () => { });
|
||||
session.push('roleId', () => { });
|
||||
session.push('roleName', () => { });
|
||||
session.push('eventStatus', () => { });
|
||||
session.push('serverId', () => { });
|
||||
session.push('funcs', () => { });
|
||||
session.push('updatedMailAt', () => { });
|
||||
session.push('guildCode', () => { });
|
||||
console.log(role.guildCode)
|
||||
// session.push('rid', function (err) {
|
||||
// if (err) {
|
||||
@@ -101,7 +101,7 @@ export class EntryHandler {
|
||||
let heros = await HeroModel.findByRole(role.roleId, [], HERO_SELECT.ENTRY, true);
|
||||
let equips = await EquipModel.findbyRole(role.roleId);
|
||||
let items = await ItemModel.findbyRole(role.roleId);
|
||||
let mails = await getMails(role.roleId, serverId)
|
||||
let mails = await getMails(role.roleId, serverId)
|
||||
await chackFunOpenWhenLogin(role, session);
|
||||
await loginRefresh(role.roleId);
|
||||
reportOneOnline(role.roleId, user.userCode, self.app.get('serverId'), user.pkgName);
|
||||
@@ -121,7 +121,7 @@ export class EntryHandler {
|
||||
let apJson = await getAp(Date.now(), role.roleId);
|
||||
role['apJson'] = apJson;
|
||||
role['mails'] = mails;
|
||||
if(!role.showLineup) role.showLineup = role.topLineup.map(cur => cur.hid);
|
||||
if (!role.showLineup) role.showLineup = role.topLineup.map(cur => cur.hid);
|
||||
role.heads = role.heads.filter(cur => cur.status);
|
||||
role.frames = role.frames.filter(cur => cur.status);
|
||||
role.spines = role.spines.filter(cur => cur.status);
|
||||
@@ -133,18 +133,18 @@ export class EntryHandler {
|
||||
role['worldMsgs'] = await recentWorldMsgs(role.serverId);
|
||||
role['sysMsgs'] = await recentSysMsgs(role.serverId);
|
||||
|
||||
if(role.hasGuild) {
|
||||
let userGuild = await UserGuildModel.getMyGuild(role.roleId, USER_GUILD_SELECT.ENTRY );
|
||||
if(userGuild) {
|
||||
if (role.hasGuild) {
|
||||
let userGuild = await UserGuildModel.getMyGuild(role.roleId, USER_GUILD_SELECT.ENTRY);
|
||||
if (userGuild) {
|
||||
let guild = await GuildModel.findGuild(userGuild.guildCode, role.serverId, GUILD_SELECT.ENTRY);
|
||||
if(guild) {
|
||||
if (guild) {
|
||||
addRoleToGuildChannel(role.roleId, self.app.get('serverId'), userGuild.guildCode);
|
||||
role['guildMsgs'] = await recentGuildMsgs(userGuild.guildCode);
|
||||
role['guildAuth'] = userGuild.auth;
|
||||
role['guildCode'] = userGuild.guildCode;
|
||||
let {lv: guildLv, memberCnt} = guild;
|
||||
let { lv: guildLv, memberCnt } = guild;
|
||||
let dicGuild = gameData.centerBase.get(guildLv);
|
||||
if(dicGuild && memberCnt >= dicGuild.peopleNum) {
|
||||
if (dicGuild && memberCnt >= dicGuild.peopleNum) {
|
||||
role['guildMemberMax'] = true;
|
||||
} else {
|
||||
role['guildMemberMax'] = false;
|
||||
@@ -176,8 +176,8 @@ export class EntryHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let sid = session.get('sid');
|
||||
let serverId = session.get('serverId');
|
||||
roleLeave(roleId).then(function(roleInfo) {
|
||||
if(roleInfo.isOnline) {
|
||||
roleLeave(roleId).then(function (roleInfo) {
|
||||
if (roleInfo.isOnline) {
|
||||
reportOneOnline(roleId, roleInfo.userCode, sid, roleInfo.pkgName);
|
||||
}
|
||||
});
|
||||
@@ -201,7 +201,7 @@ export class EntryHandler {
|
||||
* @param {Object} session current session object
|
||||
*/
|
||||
async gmEnter(msg: { token: string, serverId: number }, session: FrontendSession) {
|
||||
|
||||
|
||||
let self = this;
|
||||
|
||||
let user = await GMUserModel.getGmAccountByToken(msg.token);
|
||||
@@ -217,10 +217,10 @@ export class EntryHandler {
|
||||
session.set('roleName', user.name);
|
||||
session.set('eventStatus', 0);
|
||||
session.set('sid', self.app.get('serverId'));
|
||||
session.push('sid', () => {});
|
||||
session.push('roleId', () => {});
|
||||
session.push('roleName', () => {});
|
||||
session.push('eventStatus', () => {});
|
||||
session.push('sid', () => { });
|
||||
session.push('roleId', () => { });
|
||||
session.push('roleName', () => { });
|
||||
session.push('eventStatus', () => { });
|
||||
// session.push('rid', function (err) {
|
||||
// if (err) {
|
||||
// console.error('set rid for session service failed! error is : %j', err.stack);
|
||||
|
||||
@@ -15,6 +15,7 @@ import { handleCost } from "../../../services/rewardService";
|
||||
import { addActive } from "../../../services/guildService";
|
||||
import { Rank } from "../../../services/rankService";
|
||||
import { checkTask } from "../../../services/taskService";
|
||||
import { accomplishTask } from "../../../pubUtils/taskUtil";
|
||||
|
||||
export default function (app: Application) {
|
||||
return new CityActivityHandler(app);
|
||||
@@ -37,10 +38,10 @@ export class CityActivityHandler {
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
const dbCities = await GuildActivityCityModel.getAllCities(serverId);
|
||||
let cities = getCities(guildCode, dbCities);
|
||||
let cities = getCities(guildCode, dbCities);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
...statusResult,
|
||||
@@ -60,33 +61,33 @@ export class CityActivityHandler {
|
||||
const { cityId } = msg;
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let dicCity = gameData.cityActivity.get(cityId);
|
||||
if(!dicCity) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!dicCity) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let obj = getCityActivityObj();
|
||||
let gateHp = obj.getGateHpAndInc(serverId, cityId, dicCity.hp);
|
||||
|
||||
let myGuildActivityRec = await UserGuildActivityRecModel.findByRoleId(roleId, this.aid);
|
||||
let challengeTime = 0;
|
||||
if(myGuildActivityRec) {
|
||||
if (myGuildActivityRec) {
|
||||
challengeTime = myGuildActivityRec.challengeTime;
|
||||
}
|
||||
|
||||
const dbCities = await GuildActivityCityModel.getAllCities(serverId);
|
||||
let cityStatus = pubGetCityStatus(guildCode, cityId, dicCity, dbCities);
|
||||
if(cityStatus == CITY_STATUS.DECLARED) {
|
||||
if (cityStatus == CITY_STATUS.DECLARED) {
|
||||
obj.pushGuild(guildCode, serverId, cityId);
|
||||
}
|
||||
|
||||
let historyCity = obj.getHistoryCity(roleId);
|
||||
if(historyCity) {
|
||||
if (historyCity) {
|
||||
await leaveCityChannel(roleId, sid, historyCity);
|
||||
}
|
||||
await addRoleToCityChannel(roleId, sid, cityId);
|
||||
obj.setHistoryCity(roleId, cityId);
|
||||
|
||||
|
||||
|
||||
let ranks = await getCityActivityRank(guildCode, serverId, cityId, roleId, roleName);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
@@ -110,12 +111,12 @@ export class CityActivityHandler {
|
||||
|
||||
let { cityId } = msg;
|
||||
let dicCity = gameData.cityActivity.get(cityId);
|
||||
if(dicCity.preCity.length > 0) return resResult(STATUS.CAN_NOT_DECLARE);
|
||||
if (dicCity.preCity.length > 0) return resResult(STATUS.CAN_NOT_DECLARE);
|
||||
|
||||
let checkResult = await GuildActivityCityModel.checkDeclartion(serverId, guildCode);
|
||||
if(!!checkResult) return resResult(STATUS.HAS_DECLARED);
|
||||
if (!!checkResult) return resResult(STATUS.HAS_DECLARED);
|
||||
let curCity = await GuildActivityCityModel.getCity(serverId, cityId);
|
||||
if(curCity && curCity.guardGuildCode) {
|
||||
if (curCity && curCity.guardGuildCode) {
|
||||
return resResult(STATUS.CITY_IS_GUARD);
|
||||
}
|
||||
|
||||
@@ -128,67 +129,67 @@ export class CityActivityHandler {
|
||||
obj.pushGuild(guildCode, serverId, cityId);
|
||||
|
||||
const dbCities = await GuildActivityCityModel.getAllCities(serverId);
|
||||
let cities = getCities(guildCode, dbCities);
|
||||
let cities = getCities(guildCode, dbCities);
|
||||
return resResult(STATUS.SUCCESS, { cities });
|
||||
}
|
||||
|
||||
// 开始挑战
|
||||
async checkBattle(msg: {cityId: number, costGold: boolean, heroes: number[]}, session: BackendSession) {
|
||||
async checkBattle(msg: { cityId: number, costGold: boolean, heroes: number[] }, session: BackendSession) {
|
||||
let { cityId, costGold, heroes } = msg;
|
||||
if(!heroes || heroes.length <= 0) return resResult(STATUS.WRONG_PARMS);
|
||||
if (!heroes || heroes.length <= 0) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
const sid = session.get('sid');
|
||||
|
||||
if(!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
if (!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
let checkResult = await GuildActivityCityModel.checkDeclartion(serverId, guildCode);
|
||||
if(!checkResult) return resResult(STATUS.HAS_NOT_DECLARED);
|
||||
if (!checkResult) return resResult(STATUS.HAS_NOT_DECLARED);
|
||||
|
||||
let obj = getCityActivityObj();
|
||||
|
||||
const dicCity = gameData.cityActivity.get(cityId);
|
||||
|
||||
let gateHp = obj.getGateHpAndInc(serverId, cityId, dicCity.hp);
|
||||
if(gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
// TODO 测试完成后去掉这条判断
|
||||
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId, 'job');
|
||||
|
||||
let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, this.aid);
|
||||
if(!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
if (!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
|
||||
let { code: sourceCode } = guildActivityRec;
|
||||
|
||||
|
||||
let myGuildActivityRec = await UserGuildActivityRecModel.getRecord(roleId, roleName, guildCode, serverId, sourceCode, this.aid);
|
||||
if(costGold) {
|
||||
if (costGold) {
|
||||
let goldObj = getGoldObject(GUILDACTIVITY.CITYACTIVITY_CD_COST);
|
||||
const costRes = await handleCost(roleId, sid, [goldObj]);
|
||||
if (!costRes) {
|
||||
return resResult(STATUS.BATTLE_GOLD_NOT_ENOUGH);
|
||||
}
|
||||
} else {
|
||||
if(myGuildActivityRec.challengeTime > nowSeconds()) {
|
||||
if (myGuildActivityRec.challengeTime > nowSeconds()) {
|
||||
return resResult(STATUS.CHALLENGE_TIME_NOT_REACH);
|
||||
}
|
||||
}
|
||||
myGuildActivityRec = await UserGuildActivityRecModel.incChallengeCnt(myGuildActivityRec.code, heroes);
|
||||
|
||||
let { code } = myGuildActivityRec;
|
||||
let { code } = myGuildActivityRec;
|
||||
|
||||
// 更新公会参与的玩家
|
||||
obj.pushMembers(guildCode, roleId, userGuild.job);
|
||||
|
||||
// 返回当前军团总军功
|
||||
let r = new Rank(REDIS_KEY.CITY_ACTIVITY, { serverId, cityId }, true);
|
||||
let guildScore = await r.getMyScore({guildCode});
|
||||
let guildScore = await r.getMyScore({ guildCode });
|
||||
|
||||
const dbCities = await GuildActivityCityModel.getAllCities(serverId);
|
||||
let cityStatus = pubGetCityStatus(guildCode, cityId, dicCity, dbCities);
|
||||
@@ -217,32 +218,32 @@ export class CityActivityHandler {
|
||||
const sid = session.get('sid');
|
||||
|
||||
let { cityId, code, damage, hid, round } = msg;
|
||||
if(!damage || damage < 0) return resResult(STATUS.WRONG_PARMS);
|
||||
if (!damage || damage < 0) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
const dicCity = gameData.cityActivity.get(cityId);
|
||||
let obj = getCityActivityObj();
|
||||
let gateHp = obj.getGateHpAndInc(serverId, cityId, dicCity.hp);
|
||||
if(gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
// TODO 测试完成后去掉这条判断
|
||||
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
|
||||
let pushResult = await UserGuildActivityRecModel.pushCityRecord(code, { round, hid, damage });
|
||||
if(!pushResult) return resResult(STATUS.WRONG_PARMS);
|
||||
if (!pushResult) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
// 更新redis数据
|
||||
let myR = new Rank(REDIS_KEY.USER_CITY_ACTIVITY, { serverId, guildCode });
|
||||
let myScore = await myR.setRankWithRoleInfo(roleId, damage, Date.now(), null, true);
|
||||
await myR.setExpire(getNextHourPoint(5));
|
||||
|
||||
let r = new Rank(REDIS_KEY.CITY_ACTIVITY, { serverId, cityId }, true );
|
||||
let r = new Rank(REDIS_KEY.CITY_ACTIVITY, { serverId, cityId }, true);
|
||||
let guildScore = await r.setRankWithGuildInfo(guildCode, damage, Date.now(), null, true);
|
||||
await r.setExpire(getNextHourPoint(5));
|
||||
|
||||
gateHp = obj.getGateHpAndInc(serverId, cityId, dicCity.hp, -1 * damage);
|
||||
if(gateHp <= 0) {
|
||||
if (gateHp <= 0) {
|
||||
// 推送 停止活动并结算奖励
|
||||
await sendSingleCityActEndMsg(cityId, serverId);
|
||||
}
|
||||
@@ -269,29 +270,31 @@ export class CityActivityHandler {
|
||||
|
||||
let { cityId, code, isSuccess } = msg;
|
||||
let obj = getCityActivityObj();
|
||||
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let dicCity = gameData.cityActivity.get(cityId);
|
||||
if(!dicCity) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!dicCity) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
// 更新userGuildActivityRecord
|
||||
let challengeTime = getBeforeSeconds(-1 * GUILDACTIVITY.CITYACTIVITY_CHALLENGE_CD);
|
||||
let challengeTime = getBeforeSeconds(-1 * GUILDACTIVITY.CITYACTIVITY_CHALLENGE_CD);
|
||||
let myGuildActivityRec = await UserGuildActivityRecModel.updateInfo(code, { isSuccess, isCompleted: true, cityId, challengeTime });
|
||||
if(!myGuildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
if (!myGuildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
|
||||
// 发放活跃
|
||||
await addActive(roleId, serverId, GUILD_POINT_WAYS.ACTIVITY); //获得活跃值
|
||||
// 返回当前军团总军功
|
||||
let myR = new Rank(REDIS_KEY.USER_CITY_ACTIVITY, { serverId, guildCode });
|
||||
let myScore = await myR.getMyScore({roleId});
|
||||
let myScore = await myR.getMyScore({ roleId });
|
||||
let r = new Rank(REDIS_KEY.CITY_ACTIVITY, { serverId, cityId }, true);
|
||||
let guildScore = await r.getMyScore({guildCode});
|
||||
let guildScore = await r.getMyScore({ guildCode });
|
||||
let gateHp = obj.getGateHpAndInc(serverId, cityId, dicCity.hp);
|
||||
|
||||
// 任务
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid });
|
||||
//成长任务
|
||||
await accomplishTask(roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid })
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
isSuccess,
|
||||
|
||||
@@ -15,6 +15,7 @@ import { GuildActivityCityModel } from "../../../db/GuildActivityCity";
|
||||
import { Rank } from "../../../services/rankService";
|
||||
import { getNextHourPoint } from "../../../pubUtils/timeUtil";
|
||||
import { checkTask } from "../../../services/taskService";
|
||||
import { accomplishTask } from "../../../pubUtils/taskUtil";
|
||||
|
||||
export default function (app: Application) {
|
||||
return new GateActivityHandler(app);
|
||||
@@ -35,17 +36,17 @@ export class GateActivityHandler {
|
||||
const roleName = session.get('roleName');
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
if(!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
if (!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, this.aid);
|
||||
if(!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
if (!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
|
||||
let { code: sourceCode } = guildActivityRec;
|
||||
let myGuildActivityRec = await UserGuildActivityRecModel.getRecord(roleId, roleName, guildCode, serverId, sourceCode, this.aid);
|
||||
let { challengeCnt } = myGuildActivityRec;
|
||||
let { challengeCnt } = myGuildActivityRec;
|
||||
|
||||
let ranks = await getGateActivityRank(guildCode, serverId, roleId, roleName);
|
||||
|
||||
@@ -62,50 +63,50 @@ export class GateActivityHandler {
|
||||
// 开启挑战
|
||||
async checkBattle(msg: { heroes: number[] }, session: BackendSession) {
|
||||
let { heroes } = msg;
|
||||
if(!heroes || heroes.length <= 0) return resResult(STATUS.WRONG_PARMS);
|
||||
if (!heroes || heroes.length <= 0) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
if(!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
if (!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
let obj = getGateActivityObj();
|
||||
|
||||
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||
if(gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
// TODO 测试完成后去掉这条判断
|
||||
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId, 'job');
|
||||
|
||||
let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, this.aid);
|
||||
if(!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
if (!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
|
||||
let { code: sourceCode } = guildActivityRec;
|
||||
let myGuildActivityRec = await UserGuildActivityRecModel.getRecord(roleId, roleName, guildCode, serverId, sourceCode, this.aid);
|
||||
if(myGuildActivityRec.challengeCnt > 0) {
|
||||
if (myGuildActivityRec.challengeCnt > 0) {
|
||||
return resResult(STATUS.CHALLENGE_CNT_NOT_ENOUGH);
|
||||
}
|
||||
myGuildActivityRec = await UserGuildActivityRecModel.incChallengeCnt(myGuildActivityRec.code, heroes);
|
||||
let { code, challengeCnt } = myGuildActivityRec;
|
||||
let { code, challengeCnt } = myGuildActivityRec;
|
||||
|
||||
// 更新公会参与的玩家
|
||||
obj.pushMembers(guildCode, serverId, roleId, userGuild.job);
|
||||
|
||||
// 返回当前军团总军功
|
||||
let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true);
|
||||
let guildScore = await r.getMyScore({guildCode});
|
||||
let guildScore = await r.getMyScore({ guildCode });
|
||||
|
||||
// 前一天中位数战力
|
||||
let medianCe = await getMedianCe(serverId);
|
||||
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
code,
|
||||
...statusResult,
|
||||
guildScore: guildScore||0,
|
||||
guildScore: guildScore || 0,
|
||||
myScore: 0,
|
||||
gateHp,
|
||||
challengeCnt: GUILDACTIVITY.GATEACTIVITY_CHALLENGE_TIMES - challengeCnt,
|
||||
@@ -124,17 +125,17 @@ export class GateActivityHandler {
|
||||
let obj = getGateActivityObj();
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
// TODO 测试完成后去掉这条判断
|
||||
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
|
||||
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||
if(gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
|
||||
// 计算record内得分
|
||||
let memberRecord = obj.getMemberRecord(code, roleId);
|
||||
let scoreResult = getRecordScore(this.aid, round, record, memberRecord);
|
||||
if(!scoreResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!scoreResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let { score, newRecords, memberRecord: newMemberRecord } = scoreResult;
|
||||
obj.setMemberRecord(code, newMemberRecord);
|
||||
|
||||
@@ -153,8 +154,8 @@ export class GateActivityHandler {
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
code: rec.code,
|
||||
...statusResult,
|
||||
guildScore: guildScore||0,
|
||||
myScore: myScore||0,
|
||||
guildScore: guildScore || 0,
|
||||
myScore: myScore || 0,
|
||||
gateHp
|
||||
});
|
||||
}
|
||||
@@ -168,15 +169,15 @@ export class GateActivityHandler {
|
||||
let { code, damage } = msg;
|
||||
let obj = getGateActivityObj();
|
||||
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||
if(gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
// TODO 测试完成后去掉这条判断
|
||||
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
|
||||
gateHp = obj.getGateHpAndInc(guildCode, -1 * damage);
|
||||
if(gateHp <= 0) {
|
||||
if (gateHp <= 0) {
|
||||
// 推送 停止活动并结算奖励
|
||||
await sendSingleGateActEndMsg(guildCode, serverId);
|
||||
}
|
||||
@@ -186,10 +187,10 @@ export class GateActivityHandler {
|
||||
|
||||
// 返回当前军团总军功
|
||||
let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode });
|
||||
let myScore = await myR.getMyScore({roleId});
|
||||
let myScore = await myR.getMyScore({ roleId });
|
||||
let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true);
|
||||
let guildScore = await r.getMyScore({guildCode});
|
||||
|
||||
let guildScore = await r.getMyScore({ guildCode });
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
code,
|
||||
...statusResult,
|
||||
@@ -209,53 +210,55 @@ export class GateActivityHandler {
|
||||
|
||||
let { code, isSuccess } = msg;
|
||||
let obj = getGateActivityObj();
|
||||
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
// 更新userGuildActivityRecord
|
||||
let myGuildActivityRec = await UserGuildActivityRecModel.updateInfo(code, { isSuccess, isCompleted: true });
|
||||
if(!myGuildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
if (!myGuildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
|
||||
// 功劳簿计算
|
||||
let { record, round } = myGuildActivityRec;
|
||||
let enemyCnt = 0, littleBossCnt = 0, bossCnt = 0;
|
||||
for(let { enemyType, round: r } of record) {
|
||||
if(enemyType == ENEMIES_TYPE.ENEMY || enemyType == ENEMIES_TYPE.ELITE_ENEMY ) {
|
||||
enemyCnt ++;
|
||||
for (let { enemyType, round: r } of record) {
|
||||
if (enemyType == ENEMIES_TYPE.ENEMY || enemyType == ENEMIES_TYPE.ELITE_ENEMY) {
|
||||
enemyCnt++;
|
||||
} else if (enemyType == ENEMIES_TYPE.LITTLE_BOSS) {
|
||||
littleBossCnt ++;
|
||||
littleBossCnt++;
|
||||
} else if (enemyType == ENEMIES_TYPE.BOSS) {
|
||||
bossCnt ++;
|
||||
bossCnt++;
|
||||
}
|
||||
}
|
||||
|
||||
let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode });
|
||||
let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true);
|
||||
if(isSuccess) {
|
||||
if (isSuccess) {
|
||||
let score = gameData.gateActivityPoint.get(GET_POINT_WAYS.DEFENSE_SUCCESS);
|
||||
// 更新redis数据
|
||||
await myR.setRank({roleId}, score, Date.now(), true);
|
||||
await myR.setRank({ roleId }, score, Date.now(), true);
|
||||
|
||||
await r.setRank({guildCode}, score, Date.now(), true);
|
||||
await r.setRank({ guildCode }, score, Date.now(), true);
|
||||
}
|
||||
|
||||
// 发放活跃
|
||||
await addActive(roleId, serverId, GUILD_POINT_WAYS.ACTIVITY); //获得活跃值
|
||||
// 返回当前军团总军功
|
||||
let guildScore = await r.getMyScore({guildCode});
|
||||
let myScore = await myR.getMyScore({roleId});
|
||||
let guildScore = await r.getMyScore({ guildCode });
|
||||
let myScore = await myR.getMyScore({ roleId });
|
||||
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||
|
||||
obj.delMemberRecord(code);
|
||||
let info = {
|
||||
round,
|
||||
enemyCnt, littleBossCnt, bossCnt,
|
||||
enemyCnt, littleBossCnt, bossCnt,
|
||||
isSuccess
|
||||
}
|
||||
|
||||
// 任务
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid });
|
||||
//成长任务
|
||||
await accomplishTask(roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid })
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
code,
|
||||
...statusResult,
|
||||
@@ -267,7 +270,7 @@ export class GateActivityHandler {
|
||||
}
|
||||
|
||||
// ! 测试接口
|
||||
async debugGetPrivate(msg: { }, session: BackendSession) {
|
||||
async debugGetPrivate(msg: {}, session: BackendSession) {
|
||||
let guildCode = session.get('guildCode');
|
||||
// console.log(guildCode);
|
||||
let serverId = session.get('serverId');
|
||||
@@ -281,7 +284,7 @@ export class GateActivityHandler {
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
// await GuildActivityCityModel.declare(serverId, 1, guildCode);
|
||||
let {sourceType, sourceCode} = msg;
|
||||
let { sourceType, sourceCode } = msg;
|
||||
let result = await participants(guildCode, sourceType, sourceCode);
|
||||
return result;
|
||||
|
||||
@@ -290,27 +293,27 @@ export class GateActivityHandler {
|
||||
}
|
||||
|
||||
// ! 测试接口
|
||||
async debugIncChallengeCnt(msg: { }, session: BackendSession) {
|
||||
async debugIncChallengeCnt(msg: {}, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let res = await UserGuildActivityRecModel.updateInfoByRoleId(roleId, { challengeCnt: -100 });
|
||||
|
||||
return resResult(STATUS.SUCCESS, { challengeCnt: GUILDACTIVITY.GATEACTIVITY_CHALLENGE_TIMES - (res?.challengeCnt||0) });
|
||||
return resResult(STATUS.SUCCESS, { challengeCnt: GUILDACTIVITY.GATEACTIVITY_CHALLENGE_TIMES - (res?.challengeCnt || 0) });
|
||||
}
|
||||
|
||||
// ! 测试接口
|
||||
async debugStartActivity(msg: { aid: number }, session: BackendSession) {
|
||||
let { aid } = msg;
|
||||
let dic = gameData.guildActivity.get(aid);
|
||||
if(!dic) return resResult(STATUS.WRONG_PARMS);
|
||||
if (!dic) return resResult(STATUS.WRONG_PARMS);
|
||||
let result = await pinus.app.rpc.systimer.systimerRemote.guildActivityStart.toServer('systimer-server-1', dic);
|
||||
if(!result) {
|
||||
if (!result) {
|
||||
return resResult(STATUS.GUILD_ACTIVITY_IS_OPEN)
|
||||
}
|
||||
|
||||
// !! 注意,这条函数会改变内存中的字典表,仅用于测试中使用
|
||||
let now = new Date();
|
||||
let guildServers = pinus.app.getServersByType('guild');
|
||||
for(let server of guildServers) {
|
||||
for (let server of guildServers) {
|
||||
pinus.app.rpc.guild.guildActivityRemote.updateGuildActivityData.toServer(server.id, aid, true);
|
||||
}
|
||||
|
||||
@@ -320,10 +323,10 @@ export class GateActivityHandler {
|
||||
// ! 测试接口
|
||||
async debugSetDay(msg: { week: number }, session: BackendSession) {
|
||||
let guildServers = pinus.app.getServersByType('guild');
|
||||
for(let server of guildServers) {
|
||||
for (let server of guildServers) {
|
||||
pinus.app.rpc.guild.guildActivityRemote.setDay.toServer(server.id, msg.week);
|
||||
}
|
||||
if(msg.week <= 2) {
|
||||
if (msg.week <= 2) {
|
||||
await GuildActivityCityModel.deleteMany({});
|
||||
}
|
||||
return resResult(STATUS.SUCCESS);
|
||||
@@ -332,7 +335,7 @@ export class GateActivityHandler {
|
||||
// ! 测试接口
|
||||
async debugEndActivity(msg: { aid: number }, session: BackendSession) {
|
||||
let { aid } = msg;
|
||||
if(aid == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) {
|
||||
if (aid == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) {
|
||||
await pinus.app.rpc.systimer.systimerRemote.gateActivityEnd.toServer('systimer-server-1');
|
||||
} else if (aid == GUILD_ACTIVITY_TYPE.CITY_ACTIVITY) {
|
||||
await pinus.app.rpc.systimer.systimerRemote.cityActivityEnd.toServer('systimer-server-1');
|
||||
@@ -345,7 +348,7 @@ export class GateActivityHandler {
|
||||
// !! 注意,这条函数会改变内存中的字典表,仅用于测试中使用
|
||||
let now = new Date();
|
||||
let guildServers = pinus.app.getServersByType('guild');
|
||||
for(let server of guildServers) {
|
||||
for (let server of guildServers) {
|
||||
pinus.app.rpc.guild.guildActivityRemote.updateGuildActivityData.toServer(server.id, aid, false);
|
||||
}
|
||||
return resResult(STATUS.SUCCESS);
|
||||
@@ -360,13 +363,13 @@ export class GateActivityHandler {
|
||||
async debugAddParticipants(msg: { aid: number }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let guildCode = session.get('guildCode');
|
||||
if(!guildCode) return resResult(STATUS.GUILD_NOT_FOUND);
|
||||
if (!guildCode) return resResult(STATUS.GUILD_NOT_FOUND);
|
||||
let serverId = session.get('serverId');
|
||||
let { aid } = msg;
|
||||
await GuildActivityRecordModel.getRecord(guildCode, serverId, aid);
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId);
|
||||
let result = await GuildActivityRecordModel.updateInfo(guildCode, { memberCnt: 1, members: [{ roleId, job: userGuild.job }], auctionType: aid + 1 });
|
||||
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
sourceType: result.auctionType,
|
||||
sourceCode: result.code
|
||||
|
||||
@@ -8,6 +8,7 @@ import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec";
|
||||
import { addActive } from "../../../services/guildService";
|
||||
import { Rank } from "../../../services/rankService";
|
||||
import { checkTask } from "../../../services/taskService";
|
||||
import { accomplishTask } from "../../../pubUtils/taskUtil";
|
||||
|
||||
export default function (app: Application) {
|
||||
return new RaceActivityHandler(app);
|
||||
@@ -28,14 +29,14 @@ export class RaceActivityHandler {
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
if(!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
if (!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let obj = getRaceActivityObj();
|
||||
let woodenHorse = await obj.getWoodenHorse(guildCode, serverId);
|
||||
if(!woodenHorse) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
if (!woodenHorse) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
let events = obj.getEvents(guildCode, woodenHorse.distance);
|
||||
let ranks = await getRaceActivityRank(guildCode, serverId);
|
||||
@@ -49,7 +50,7 @@ export class RaceActivityHandler {
|
||||
events
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 加入木马
|
||||
async join(msg: {}, session: BackendSession) {
|
||||
|
||||
@@ -58,28 +59,28 @@ export class RaceActivityHandler {
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
const sid = session.get('sid');
|
||||
if(!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
if (!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let obj = getRaceActivityObj();
|
||||
|
||||
let hasJoin = obj.hasJoin(guildCode, roleId);
|
||||
if(hasJoin) {
|
||||
if (hasJoin) {
|
||||
return resResult(STATUS.RACE_HAS_JOIN);
|
||||
}
|
||||
|
||||
|
||||
let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, this.aid, obj.getEvents(guildCode, 0));
|
||||
if(!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
if (!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
|
||||
let { code: sourceCode } = guildActivityRec;
|
||||
let myGuildActivityRec = await UserGuildActivityRecModel.getRecord(roleId, roleName, guildCode, serverId, sourceCode, this.aid);
|
||||
|
||||
let myGuild = await UserGuildModel.getMyGuild(roleId, 'job');
|
||||
let woodenHorse = await obj.joinWoodenHorse(guildCode, roleId, roleName, serverId, sid, myGuild.job);
|
||||
if(!woodenHorse) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
if (!woodenHorse) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
let events = obj.getEvents(guildCode, woodenHorse.distance);
|
||||
|
||||
@@ -91,7 +92,7 @@ export class RaceActivityHandler {
|
||||
events
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 打开竞赛页面
|
||||
async getRace(msg: {}, session: BackendSession) {
|
||||
|
||||
@@ -99,17 +100,17 @@ export class RaceActivityHandler {
|
||||
const roleName = session.get('roleName');
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
if(!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
if (!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if(statusResult.status != GUILD_ACTIVITY_STATUS.START) {
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (statusResult.status != GUILD_ACTIVITY_STATUS.START) {
|
||||
return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
}
|
||||
|
||||
let obj = getRaceActivityObj();
|
||||
let woodenHorse = await obj.getWoodenHorse(guildCode, serverId);
|
||||
if(!woodenHorse) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
if (!woodenHorse) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
let events = obj.getEvents(guildCode, woodenHorse.distance);
|
||||
let hasJoin = obj.hasJoin(guildCode, roleId);
|
||||
@@ -133,15 +134,15 @@ export class RaceActivityHandler {
|
||||
let serverId = session.get('serverId');
|
||||
let guildCode = session.get('guildCode');
|
||||
let sid = session.get('sid');
|
||||
|
||||
let {id, count, toGuild} = msg;
|
||||
if(!count || count < 0) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
let { id, count, toGuild } = msg;
|
||||
if (!count || count < 0) return resResult(STATUS.WRONG_PARMS);
|
||||
let obj = getRaceActivityObj();
|
||||
let woodenHorse = obj.getWoodenHorse(toGuild, serverId);
|
||||
if(!woodenHorse) return resResult(STATUS.WRONG_PARMS);
|
||||
if (!woodenHorse) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
let event = await obj.useItem(roleId, sid, guildCode, toGuild, id, count);
|
||||
if(!event) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
if (!event) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
|
||||
await GuildActivityRecordModel.pushEvent(guildCode, event);
|
||||
|
||||
@@ -162,21 +163,23 @@ export class RaceActivityHandler {
|
||||
let { code, isSuccess } = msg;
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
// 更新userGuildActivityRecord
|
||||
let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, this.aid);
|
||||
let myGuildActivityRec = await UserGuildActivityRecModel.updateInfo(code, { isSuccess, isCompleted: true });
|
||||
if(!guildActivityRec || !myGuildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
if (!guildActivityRec || !myGuildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
|
||||
// 发放活跃
|
||||
await addActive(roleId, serverId, GUILD_POINT_WAYS.ACTIVITY); //获得活跃值
|
||||
// 返回当前军团总军功
|
||||
let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId });
|
||||
let myGuildRank = await r.getMyRank({guildCode});
|
||||
let myGuildRank = await r.getMyRank({ guildCode });
|
||||
|
||||
// 任务
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid });
|
||||
//成长任务
|
||||
await accomplishTask(roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid })
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
timestamp: Date.now(),
|
||||
woodenHorse: guildActivityRec.woodenHorse,
|
||||
@@ -189,7 +192,7 @@ export class RaceActivityHandler {
|
||||
let serverId = session.get('serverId');
|
||||
let obj = getRaceActivityObj();
|
||||
let woodenHorse = await obj.getWoodenHorse(guildCode, serverId);
|
||||
if(woodenHorse) {
|
||||
if (woodenHorse) {
|
||||
await raceActivitySettleReward(guildCode, woodenHorse)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Application, BackendSession } from "pinus";
|
||||
import { STATUS, EQUIP_STRENGTHEN_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, HERO_SYSTEM_TYPE, CONSUME_TYPE, HERO_GROW_MAX, MSG_SOURCE, JEWEL_PUSH_LV, TASK_TYPE } from "../../../consts";
|
||||
import { ItemInter } from "../../../pubUtils/interface";
|
||||
|
||||
import { resResult, parseGoodStr, getRandValueByMinMax, getRandEelm } from "../../../pubUtils/util";
|
||||
import { resResult, parseGoodStr, getRandValueByMinMax, getRandEelm } from "../../../pubUtils/util";
|
||||
import { addItems, handleCost, decreaseItems } from "../../../services/rewardService";
|
||||
import { EquipModel, EquipType } from "../../../db/Equip";
|
||||
import { HeroModel, EPlace } from "../../../db/Hero";
|
||||
@@ -16,6 +16,7 @@ import { changeEquip, dressEquip, checkMaterialEnough, takeOffEquipAndCalPlayerC
|
||||
import { indexOf, findIndex } from 'underscore';
|
||||
import { pushEquipRefineSucMsg, pushNormalEquipMsg, pushNormalItemMsg } from "../../../services/chatService";
|
||||
import { checkTaskWithHero, checkTaskWithEquip, checkTask, checkTaskWithArgs } from "../../../services/taskService";
|
||||
import { accomplishTask } from "../../../pubUtils/taskUtil";
|
||||
|
||||
export default function (app: Application) {
|
||||
return new EquipHandler(app);
|
||||
@@ -98,6 +99,8 @@ export class EquipHandler {
|
||||
let hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);
|
||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
|
||||
|
||||
let changeData = [];//变化的等级数据
|
||||
let { ePlace, lv: playerLv } = hero; // 装备栏
|
||||
let oldLvs = ePlace.map(cur => cur.lv);
|
||||
let strengthenArr = new Array<EPlace>();
|
||||
@@ -110,7 +113,13 @@ export class EquipHandler {
|
||||
return resResult(STATUS.ROLE_EQUIP_PLACE_NOT_ENOUGH);
|
||||
}
|
||||
let minLv = strengthenArr[0].lv; // 从最低装备的等级开始
|
||||
for (let { lv } of strengthenArr) {
|
||||
for (let { lv, id } of strengthenArr) {
|
||||
changeData.push({
|
||||
hid: hid,
|
||||
id: id,
|
||||
oldLv: lv,
|
||||
lv: lv,
|
||||
})
|
||||
if (lv < minLv) minLv = lv;
|
||||
}
|
||||
|
||||
@@ -129,8 +138,13 @@ export class EquipHandler {
|
||||
if (!cost) { flag = true; break; }
|
||||
if (coin < costCoin + cost) { flag = true; break; }
|
||||
costCoin += cost;
|
||||
|
||||
s.lv++;
|
||||
{//记录等级变化
|
||||
let index = changeData.findIndex(obj => { return obj && obj.id == s.id })
|
||||
if (index != -1) {
|
||||
changeData[index].lv = s.lv;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (flag) break;
|
||||
@@ -152,8 +166,10 @@ export class EquipHandler {
|
||||
|
||||
// 任务
|
||||
await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.EQUIP_STRENGTHEN, hero, oldLvs);
|
||||
//成长任务
|
||||
await accomplishTask(roleId, TASK_TYPE.EQUIP_STRENGTHEN, 1, changeData)
|
||||
|
||||
const curHero = {
|
||||
const curHero = {
|
||||
hid,
|
||||
ePlace: strengthenArr
|
||||
}
|
||||
@@ -168,6 +184,7 @@ export class EquipHandler {
|
||||
let sid: string = session.get('sid');
|
||||
let funcs: number[] = session.get('funcs');
|
||||
|
||||
let changeData = [];//变化的等级数据
|
||||
let { hid, lv: maxLv } = msg; // lv: 升到哪一级
|
||||
let hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);
|
||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
@@ -175,13 +192,20 @@ export class EquipHandler {
|
||||
let { ePlace, lv: playerLv } = hero; // 装备栏
|
||||
let oldLvs = ePlace.map(cur => cur.lv);
|
||||
let strengthenArr = ePlace.filter(cur => cur.equip);
|
||||
|
||||
|
||||
if (strengthenArr.length <= 0) {
|
||||
return resResult(STATUS.ROLE_EQUIP_PLACE_NOT_ENOUGH);
|
||||
}
|
||||
let minLv = strengthenArr[0].lv; // 从最低装备的等级开始
|
||||
for (let { lv } of strengthenArr) {
|
||||
for (let { lv, id } of strengthenArr) {
|
||||
changeData.push({
|
||||
hid: hid,
|
||||
id: id,
|
||||
oldLv: lv,
|
||||
lv: lv,
|
||||
})
|
||||
if (lv < minLv) minLv = lv;
|
||||
|
||||
}
|
||||
|
||||
let { coin } = await Role.findByRoleId(roleId);
|
||||
@@ -197,11 +221,17 @@ export class EquipHandler {
|
||||
costCoin += cost;
|
||||
|
||||
s.lv++;
|
||||
{//记录等级变化
|
||||
let index = changeData.findIndex(obj => { return obj && obj.id == s.id })
|
||||
if (index != -1) {
|
||||
changeData[index].lv = s.lv;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (costCoin > coin) {
|
||||
if (costCoin > coin) {
|
||||
return resResult(STATUS.ROLE_COIN_NOT_ENOUGH);
|
||||
}
|
||||
|
||||
@@ -217,8 +247,10 @@ export class EquipHandler {
|
||||
|
||||
// 任务
|
||||
await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.EQUIP_STRENGTHEN, hero, oldLvs);
|
||||
//成长任务
|
||||
await accomplishTask(roleId, TASK_TYPE.EQUIP_STRENGTHEN, 1, changeData)
|
||||
|
||||
const curHero = {
|
||||
const curHero = {
|
||||
hid,
|
||||
ePlace: strengthenArr
|
||||
}
|
||||
@@ -292,7 +324,7 @@ export class EquipHandler {
|
||||
|
||||
if (isSuccess) {
|
||||
let curEquip = <EquipType>equip;
|
||||
pushEquipRefineSucMsg(roleId, roleName, serverId, curEplace, curEquip?curEquip.quality: 0);
|
||||
pushEquipRefineSucMsg(roleId, roleName, serverId, curEplace, curEquip ? curEquip.quality : 0);
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_REFINE, 1, true, {});
|
||||
}
|
||||
return resResult(STATUS.SUCCESS, { isSuccess, curHero });
|
||||
@@ -313,7 +345,7 @@ export class EquipHandler {
|
||||
return resResult(STATUS.ROLE_EQUIP_HAVE_NO_RANDSE);
|
||||
}
|
||||
let curSe = randSe.find(cur => cur.id == id);
|
||||
if(!curSe || lock == curSe.locked) {
|
||||
if (!curSe || lock == curSe.locked) {
|
||||
return resResult(STATUS.ROLE_EQUIP_DUPLICATE_LOCK);
|
||||
}
|
||||
|
||||
@@ -352,8 +384,8 @@ export class EquipHandler {
|
||||
let equip = await EquipModel.findbySeqId(eid);
|
||||
if (!equip) return resResult(STATUS.EQUIP_NOT_FIND);
|
||||
|
||||
let {id, randSe, hid, ePlaceId } = equip;
|
||||
if(!randSe || randSe.length <= 0 ) {
|
||||
let { id, randSe, hid, ePlaceId } = equip;
|
||||
if (!randSe || randSe.length <= 0) {
|
||||
return resResult(STATUS.ROLE_EQUIP_HAVE_NO_RANDSE);
|
||||
}
|
||||
|
||||
@@ -366,13 +398,13 @@ export class EquipHandler {
|
||||
|
||||
let lockNum = 0;
|
||||
let removeSeidList = new Array<number>(); // 原装备上的seid [seid, rand, ...]
|
||||
|
||||
for(let i = 0; i < randSe.length; i++) {
|
||||
|
||||
for (let i = 0; i < randSe.length; i++) {
|
||||
removeSeidList.push(randSe[i].seid, randSe[i].rand);
|
||||
|
||||
if(!randSe[i].locked) {
|
||||
if (!randSe[i].locked) {
|
||||
let random = gameData.randomEffectPool.get(randomResult[i]);
|
||||
if (!random) break ;
|
||||
if (!random) break;
|
||||
let rand = 0;
|
||||
if (random.id > 0) rand = getRandValueByMinMax(random.Min, random.Max, 0);
|
||||
randSe[i].seid = random.id;
|
||||
@@ -381,7 +413,7 @@ export class EquipHandler {
|
||||
lockNum++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (lockNum >= randSe.length) {
|
||||
return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN);
|
||||
}
|
||||
@@ -413,7 +445,7 @@ export class EquipHandler {
|
||||
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.RESTRENGTHEN, sid, roleId, hero, {}, [ePlaceId, ...removeSeidList]);
|
||||
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_RESTRENGTHEN, 1, true, {});
|
||||
return resResult(STATUS.SUCCESS,{curEquip});
|
||||
return resResult(STATUS.SUCCESS, { curEquip });
|
||||
|
||||
}
|
||||
|
||||
@@ -433,11 +465,11 @@ export class EquipHandler {
|
||||
let goodInfo = getGoodById(equip.id);
|
||||
if (!goodInfo)
|
||||
return resResult(STATUS.EQUIP_NOT_FIND);
|
||||
goods = goods.concat(goodInfo.decomposeItem);
|
||||
goods = goods.concat(goodInfo.decomposeItem);
|
||||
}
|
||||
let uids = [{ uid: roleId, sid }];
|
||||
await EquipModel.deleteEquips(originalEquip);
|
||||
this.app.get('channelService').pushMessageByUids('onEquipDel', resResult(STATUS.SUCCESS, {equips:originalEquip}), uids);
|
||||
this.app.get('channelService').pushMessageByUids('onEquipDel', resResult(STATUS.SUCCESS, { equips: originalEquip }), uids);
|
||||
let result = await addItems(roleId, roleName, sid, goods);
|
||||
return resResult(STATUS.SUCCESS, { goods: result });
|
||||
}
|
||||
@@ -452,7 +484,7 @@ export class EquipHandler {
|
||||
let goodInfo = getGoodById(equip.id);
|
||||
let obj = ITID.get(goodInfo.itid);
|
||||
let id = obj.type;
|
||||
let curEquips: Array<{ seqId: number, hid: number}> = [];
|
||||
let curEquips: Array<{ seqId: number, hid: number }> = [];
|
||||
let hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);
|
||||
if (!hero)
|
||||
return resResult(STATUS.HERO_NOT_FIND);
|
||||
@@ -471,10 +503,10 @@ export class EquipHandler {
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let equipOffInfo = <EquipType>hero.ePlace[index].equip;
|
||||
let curEquip = await changeEquip(roleId, sid, equipOffInfo, equip.hid, id, equip, funcs);
|
||||
if (!!curEquip)
|
||||
if (!!curEquip)
|
||||
curEquips.push(curEquip);
|
||||
curEquip = await dressEquip(roleId, sid, hero, equip, funcs);
|
||||
if (!!curEquip)
|
||||
if (!!curEquip)
|
||||
curEquips.push(curEquip);
|
||||
} else if (type == 2) {
|
||||
if (!equip.hid)
|
||||
@@ -524,9 +556,9 @@ export class EquipHandler {
|
||||
let oldJewelCount = equip.holes.filter(cur => cur.jewel > 0).length;
|
||||
|
||||
let { itid } = getGoodById(equip.id);
|
||||
let {equipJewel} = ITID.get(itid);
|
||||
let { equipJewel } = ITID.get(itid);
|
||||
let jewelInfo = getGoodById(jewel);
|
||||
if (jewelInfo.itid != equipJewel)
|
||||
if (jewelInfo.itid != equipJewel)
|
||||
return resResult(STATUS.EQUIP_NOT_MATCH_JEWEL);
|
||||
let index = findIndex(equip.holes, { id });
|
||||
if (index < 0)
|
||||
@@ -535,7 +567,7 @@ export class EquipHandler {
|
||||
return resResult(STATUS.EQUIP_HOLE_IS_NOT_DUG);
|
||||
let oldJewel = equip.holes[index].jewel;
|
||||
if (!!oldJewel)
|
||||
goods.push({id: oldJewel, count:1});
|
||||
goods.push({ id: oldJewel, count: 1 });
|
||||
consumes.push({ id: jewel, count: 1 });
|
||||
let result = await handleCost(roleId, sid, consumes);
|
||||
if (!result)
|
||||
@@ -554,13 +586,15 @@ export class EquipHandler {
|
||||
await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL, equip, [oldJewelCount]);
|
||||
await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_STAGE, [jewel, oldJewel]);
|
||||
await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_SUM, equip, [oldJewelCount]);
|
||||
//成长任务
|
||||
await accomplishTask(roleId, TASK_TYPE.EQUIP_JEWEL_SUM, 1)
|
||||
|
||||
return resResult(STATUS.SUCCESS, { curEquip: { seqId: eid, holes: equip.holes } });
|
||||
}
|
||||
|
||||
//宝石合成(一键放入type:1, 合成type:2)
|
||||
public async composeJewel(msg: { jewel: number, count: number, consumes: Array<{ id: number, count: number }>, type: number }, session: BackendSession) {
|
||||
let { count, consumes, jewel, type } = msg;
|
||||
let { count, consumes, jewel, type } = msg;
|
||||
let roleId: string = session.get('roleId');
|
||||
let roleName: string = session.get('roleName');
|
||||
let serverId: number = session.get('serverId');
|
||||
@@ -570,19 +604,19 @@ export class EquipHandler {
|
||||
if (good.type != CONSUME_TYPE.JEWEL)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let needConsumes = checkMaterialEnough(consumes, jewel, count);//检查是否可以合成,并返回最终需要消耗的材料
|
||||
if (!needConsumes)
|
||||
if (!needConsumes)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let res = await handleCost(roleId, sid, needConsumes);
|
||||
if (!res)
|
||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
let result = await addItems(roleId, roleName, sid, [{ id: jewel, count: count }]);
|
||||
|
||||
|
||||
if (goodInfo.lvLimited >= JEWEL_PUSH_LV) {
|
||||
pushNormalItemMsg(roleId, roleName, serverId, MSG_SOURCE.JEWEL_COMPOSE, jewel, goodInfo.name);
|
||||
}
|
||||
if (type == 1)
|
||||
if (type == 1)
|
||||
return resResult(STATUS.SUCCESS, { goods: result });
|
||||
|
||||
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
@@ -619,7 +653,7 @@ export class EquipHandler {
|
||||
}
|
||||
|
||||
//宝石购买并合成
|
||||
public async composeAndPurchaseJewel(msg: { jewel: number, count: number, consumes: Array<{ id: number, count: number }>, purchaseGoods: Array<{ id: number, count: number }>}, session: BackendSession) {
|
||||
public async composeAndPurchaseJewel(msg: { jewel: number, count: number, consumes: Array<{ id: number, count: number }>, purchaseGoods: Array<{ id: number, count: number }> }, session: BackendSession) {
|
||||
let { count, consumes, jewel, purchaseGoods } = msg;
|
||||
let roleId: string = session.get('roleId');
|
||||
let roleName: string = session.get('roleName');
|
||||
@@ -634,12 +668,12 @@ export class EquipHandler {
|
||||
if (!consumes)
|
||||
consumes = [];
|
||||
let needConsumes = checkMaterialEnough(consumes.concat(purchaseGoods), jewel, count);//检查是否可以合成,并返回最终需要消耗的材料
|
||||
if (!needConsumes)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let items:Array<{id: number, count: number, ratio?:number}> = [];
|
||||
if (!needConsumes)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let items: Array<{ id: number, count: number, ratio?: number }> = [];
|
||||
for (let item of purchaseGoods) {
|
||||
items.push({id: item.id, count: item.count, ratio: 1})//加上购买的数量
|
||||
}
|
||||
items.push({ id: item.id, count: item.count, ratio: 1 })//加上购买的数量
|
||||
}
|
||||
items = items.concat(needConsumes);
|
||||
let hasError = await decreaseItems(roleId, sid, items);//合并消耗是否足够
|
||||
if (!!hasError)
|
||||
@@ -655,13 +689,13 @@ export class EquipHandler {
|
||||
* @param msg
|
||||
* @param session
|
||||
*/
|
||||
public async purchaseGoods(msg: { purchaseGoods: Array<{ id: number, count: number }>}, session: BackendSession) {
|
||||
public async purchaseGoods(msg: { purchaseGoods: Array<{ id: number, count: number }> }, session: BackendSession) {
|
||||
let { purchaseGoods } = msg;
|
||||
let roleId: string = session.get('roleId');
|
||||
let roleName: string = session.get('roleName');
|
||||
let sid: string = session.get('sid');
|
||||
let result = await addItems(roleId, roleName, sid, purchaseGoods );
|
||||
if(!result) {
|
||||
let result = await addItems(roleId, roleName, sid, purchaseGoods);
|
||||
if (!result) {
|
||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
}
|
||||
return resResult(STATUS.SUCCESS);
|
||||
@@ -682,26 +716,26 @@ export class EquipHandler {
|
||||
let good = ITID.get(goodInfo.itid);
|
||||
let needUpdate = false;
|
||||
let oldJewel: number;
|
||||
let consumes: Array<{id: number, count: number, ratio?: number}> = [];
|
||||
let consumes: Array<{ id: number, count: number, ratio?: number }> = [];
|
||||
if (good.type != CONSUME_TYPE.JEWEL || !eid || eid < 0)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let equip = await EquipModel.getEquip(eid);
|
||||
if(!equip) return resResult(STATUS.EQUIP_NOT_FIND);
|
||||
if (!equip) return resResult(STATUS.EQUIP_NOT_FIND);
|
||||
|
||||
let oldJewelCount = equip.holes.filter(cur => cur.jewel > 0).length;
|
||||
|
||||
let index = findIndex(equip.holes,{id});
|
||||
let index = findIndex(equip.holes, { id });
|
||||
//装备上该位置有穿戴该宝石,且在合成的材料中
|
||||
if (!!equip.holes[index] && equip.holes[index].jewel == goodInfo.composeMaterial[0].id) {
|
||||
oldJewel = equip.holes[index].jewel;
|
||||
equip.holes[index].jewel = jewel;//合成后的新宝石穿戴到装备上
|
||||
needUpdate = true;
|
||||
consumes.push({id: goodInfo.composeMaterial[0].id, count: 1, ratio: 1});//ratio:1表示可以释放掉一颗宝石
|
||||
consumes.push({ id: goodInfo.composeMaterial[0].id, count: 1, ratio: 1 });//ratio:1表示可以释放掉一颗宝石
|
||||
}
|
||||
|
||||
consumes = consumes.concat(goodInfo.composeMaterial);
|
||||
if (goodInfo.specialMaterial.count) {
|
||||
consumes.push({id: goodInfo.specialMaterial.ids[0], count: goodInfo.specialMaterial.count})
|
||||
consumes.push({ id: goodInfo.specialMaterial.ids[0], count: goodInfo.specialMaterial.count })
|
||||
}
|
||||
let hasError = await decreaseItems(roleId, sid, consumes);//检查是消耗是否足够
|
||||
if (!!hasError)
|
||||
@@ -724,11 +758,13 @@ export class EquipHandler {
|
||||
await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL, equip, [oldJewelCount]);
|
||||
await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_STAGE, [jewel, oldJewel]);
|
||||
await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_SUM, equip, [oldJewelCount]);
|
||||
//成长任务
|
||||
await accomplishTask(roleId, TASK_TYPE.EQUIP_JEWEL_SUM, 1)
|
||||
|
||||
return resResult(STATUS.SUCCESS, { curEquip: { seqId: eid, holes: equip.holes } });
|
||||
} else {
|
||||
result = await addItems(roleId, roleName, sid, [{ id: jewel, count: count }]);
|
||||
return resResult(STATUS.SUCCESS, { goods: [{id: jewel, count}] });
|
||||
return resResult(STATUS.SUCCESS, { goods: [{ id: jewel, count }] });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ import { STATUS } from '../../../consts/statusCode';
|
||||
import { RoleModel } from './../../../db/Role';
|
||||
import { HeroModel } from '../../../db/Hero';
|
||||
import { resResult, decodeIdCntArrayStr, parseGoodStr } from '../../../pubUtils/util';
|
||||
import {Application, BackendSession, pinus} from 'pinus';
|
||||
import { Application, BackendSession, pinus } from 'pinus';
|
||||
import { handleCost } from '../../../services/rewardService';
|
||||
import { getTitle, getTeraph, gameData, getScollByStar, getFriendLvByExp } from '../../../pubUtils/data';
|
||||
import { SCHOOL, SCROLL, EXTERIOR } from '../../../pubUtils/dicParam';
|
||||
@@ -17,8 +17,9 @@ import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
|
||||
import { Rank } from '../../../services/rankService';
|
||||
import { updateUserInfo } from '../../../services/redisService';
|
||||
import { checkTaskWithHero, checkTask, checkTaskWithArgs } from '../../../services/taskService';
|
||||
import { accomplishTask } from '../../../pubUtils/taskUtil';
|
||||
|
||||
export default function(app: Application) {
|
||||
export default function (app: Application) {
|
||||
return new RoleHandler(app);
|
||||
}
|
||||
|
||||
@@ -51,12 +52,12 @@ export class RoleHandler {
|
||||
job: 1,
|
||||
star: 0,
|
||||
serverId: 1,
|
||||
skins:[{id: 41001, enable: true}]
|
||||
skins: [{ id: 41001, enable: true }]
|
||||
}
|
||||
await HeroModel.createHero(heroInfo);
|
||||
}
|
||||
|
||||
async initRole(msg: {content: string , target: string}, session: BackendSession) {
|
||||
async initRole(msg: { content: string, target: string }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let roleName = session.get('roleName');
|
||||
console.log('role in initRole: ', roleId, roleName);
|
||||
@@ -68,20 +69,20 @@ export class RoleHandler {
|
||||
|
||||
// let equips = await EquipModel.findbyRole(roleId);
|
||||
// if (!equips || equips.length === 0) {
|
||||
await this.initEquips(roleId, roleName);
|
||||
await this.initEquips(roleId, roleName);
|
||||
// }
|
||||
|
||||
console.log('initRole finish');
|
||||
}
|
||||
|
||||
async getRoleInfo(msg: {targetRoleId: string}, session: BackendSession) {
|
||||
async getRoleInfo(msg: { targetRoleId: string }, session: BackendSession) {
|
||||
let { targetRoleId } = msg;
|
||||
let { roleId, roleName, head = EXTERIOR.EXTERIOR_FACE, frame = EXTERIOR.EXTERIOR_FACECASE, spine = EXTERIOR.EXTERIOR_APPEARANCE, ce = 0, topLineup, topLineupCe = 0 } = await RoleModel.findByRoleId(targetRoleId);
|
||||
return resResult(STATUS.SUCCESS, { roleId, roleName, head, frame, spine, ce, topLineup, topLineupCe });
|
||||
}
|
||||
|
||||
//爵位
|
||||
async roleTitleLevelUp(msg: {}, session: BackendSession){
|
||||
async roleTitleLevelUp(msg: {}, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let sid: string = session.get('sid');
|
||||
let funcs: number[] = session.get('funcs');
|
||||
@@ -92,11 +93,11 @@ export class RoleHandler {
|
||||
let titleInfo = getTitle(title + 1);
|
||||
if (!titleInfo)
|
||||
return resResult(STATUS.DIC_DATA_NOT_FOUND)
|
||||
if (titleInfo.lvLimited > role.lv)
|
||||
if (titleInfo.lvLimited > role.lv)
|
||||
return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH)
|
||||
let consumes = titleInfo.material;
|
||||
let result = await handleCost(roleId, sid, consumes);
|
||||
if (!result)
|
||||
if (!result)
|
||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
|
||||
let update = { title: title + 1 }
|
||||
@@ -104,43 +105,45 @@ export class RoleHandler {
|
||||
|
||||
// 任务
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_TITLE, 1, false, { title });
|
||||
//成长任务
|
||||
await accomplishTask(roleId, TASK_TYPE.ROLE_TITLE, update.title)
|
||||
|
||||
return resResult(STATUS.SUCCESS, { roleId, title: role.title });
|
||||
}
|
||||
|
||||
//神像强化
|
||||
async roleTeraphStrengthen(msg: {id: number, count: number}, session: BackendSession){
|
||||
let {id, count} = msg;
|
||||
async roleTeraphStrengthen(msg: { id: number, count: number }, session: BackendSession) {
|
||||
let { id, count } = msg;
|
||||
let roleId = session.get('roleId');
|
||||
let sid: string = session.get('sid');
|
||||
let funcs: number[] = session.get('funcs');
|
||||
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
let teraphs = role.teraphs;
|
||||
let index = findIndex(teraphs, {id});
|
||||
let index = findIndex(teraphs, { id });
|
||||
if (index < 0)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let teraph = teraphs[index];
|
||||
let dicTeraph = getTeraph(id, teraph.grade);
|
||||
if (!dicTeraph)
|
||||
return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
|
||||
let attrs = new Array<number>(); // 可以强化的属性
|
||||
dicTeraph.mainAttrMax.forEach(( max, id) => {
|
||||
dicTeraph.mainAttrMax.forEach((max, id) => {
|
||||
let attrName = getAtrrNameById(id);
|
||||
if (teraph[attrName] < max) {
|
||||
attrs.push(id);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
if (!attrs.length)
|
||||
return resResult(STATUS.ROLE_TERAPH_NOT_STRENGTHEN);
|
||||
return resResult(STATUS.ROLE_TERAPH_NOT_STRENGTHEN);
|
||||
|
||||
// 随机神像中的一条属性并检查道具是否足够,以及更新teraph
|
||||
let { consumes} = checkTeraphMaterialEnough(count, attrs, dicTeraph, teraph);
|
||||
let { consumes } = checkTeraphMaterialEnough(count, attrs, dicTeraph, teraph);
|
||||
|
||||
let result = await handleCost(roleId, sid, consumes);
|
||||
if (!result)
|
||||
if (!result)
|
||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
|
||||
role = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH, sid, roleId, { teraphs }, [id]);
|
||||
@@ -152,14 +155,14 @@ export class RoleHandler {
|
||||
}
|
||||
|
||||
//神像进阶
|
||||
async roleTeraphQualityUp(msg: {id: number}, session: BackendSession){
|
||||
let {id} = msg;
|
||||
async roleTeraphQualityUp(msg: { id: number }, session: BackendSession) {
|
||||
let { id } = msg;
|
||||
let roleId = session.get('roleId');
|
||||
let sid: string = session.get('sid');
|
||||
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
let teraphs = role.teraphs;
|
||||
let index = findIndex(teraphs, {id});
|
||||
let index = findIndex(teraphs, { id });
|
||||
if (index < 0)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let teraph = teraphs[index];
|
||||
@@ -167,13 +170,13 @@ export class RoleHandler {
|
||||
if (!teraphInfo)
|
||||
return resResult(STATUS.DIC_DATA_NOT_FOUND)
|
||||
|
||||
for(let [attrId, val] of teraph.attr) {
|
||||
for (let [attrId, val] of teraph.attr) {
|
||||
if (val < teraphInfo.mainAttrMax.get(attrId))
|
||||
return resResult(STATUS.ROLE_TERAPH_NOT_QUILITY);
|
||||
|
||||
|
||||
teraph.attr.set(attrId, 0);
|
||||
}
|
||||
teraph.grade ++;
|
||||
teraph.grade++;
|
||||
|
||||
|
||||
let nextTeraphInfo = getTeraph(id, teraph.grade)
|
||||
@@ -182,13 +185,13 @@ export class RoleHandler {
|
||||
|
||||
let consumes = teraphInfo.upGradeMaterial;
|
||||
let result = await handleCost(roleId, sid, consumes);
|
||||
if (!result)
|
||||
if (!result)
|
||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
|
||||
role = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH_UP, sid, roleId, { teraphs }, [id]);
|
||||
return resResult(STATUS.SUCCESS, { roleId, teraphs: role.teraphs });
|
||||
}
|
||||
|
||||
|
||||
// 获得百家学宫
|
||||
async getSchoolList(msg: {}, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
@@ -245,7 +248,7 @@ export class RoleHandler {
|
||||
}
|
||||
let isOpen = !!dicPosition.get(positionId.toString()); // 该位置是否解锁
|
||||
|
||||
if(hid > 0) {
|
||||
if (hid > 0) {
|
||||
let findHero = await SchoolModel.findByHid(roleId, hid);
|
||||
if (!!findHero) {
|
||||
return resResult(STATUS.ROLE_SCHOOL_HERO_USED);
|
||||
@@ -254,7 +257,7 @@ export class RoleHandler {
|
||||
let curHero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if (!curHero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
}
|
||||
|
||||
|
||||
let curSchool = await SchoolModel.findBySclAndPos(roleId, schoolId, positionId);
|
||||
let preHid = 0; // 原先在该位置上的武将
|
||||
if (curSchool) {
|
||||
@@ -271,7 +274,11 @@ export class RoleHandler {
|
||||
await calAllHeroCe(HERO_SYSTEM_TYPE.SCHOOL, sid, roleId, {}, [schoolId, hid, preHid]);
|
||||
|
||||
// 任务
|
||||
await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.ROLE_SCHOOL_UNLOCK, [ hid, preHid ]);
|
||||
await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.ROLE_SCHOOL_UNLOCK, [hid, preHid]);
|
||||
if (hid > 0) {
|
||||
//成长任务
|
||||
await accomplishTask(roleId, TASK_TYPE.ROLE_SCHOOL_PUT_HERO, 1)
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
schoolId, positionId, hid, preHid, isOpen
|
||||
@@ -351,7 +358,7 @@ export class RoleHandler {
|
||||
} else {
|
||||
if (star > scrollStar) { // 可以升星
|
||||
update.scrollStar++;
|
||||
} else if (quality > scrollQuality ) { // 可以升品
|
||||
} else if (quality > scrollQuality) { // 可以升品
|
||||
update.scrollQuality++;
|
||||
} else if (colorStar > scrollColorStar) { // 可以升彩星
|
||||
update.scrollColorStar++;
|
||||
@@ -362,14 +369,14 @@ export class RoleHandler {
|
||||
}
|
||||
|
||||
let dicHeroScroll = getScollByStar(dicHero.quality, update.scrollStar, update.scrollQuality, update.scrollColorStar);
|
||||
update.scrollId = dicHeroScroll?dicHeroScroll.id: 0;
|
||||
update.scrollId = dicHeroScroll ? dicHeroScroll.id : 0;
|
||||
|
||||
let hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.SCROLL, sid, roleId, curHero, update); // 更新单个武将战力
|
||||
calAllHeroCe(HERO_SYSTEM_TYPE.SCROLL, sid, roleId, {}, [hid]); // 全局增加战力
|
||||
|
||||
// 任务
|
||||
if(favourLv != hero.favourLv) await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_FAVOUR_LV, hero);
|
||||
if(!scrollActive) await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_SCROLL_ACTIVE, 1, true, {});
|
||||
if (favourLv != hero.favourLv) await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_FAVOUR_LV, hero);
|
||||
if (!scrollActive) await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_SCROLL_ACTIVE, 1, true, {});
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
curHero: {
|
||||
@@ -381,7 +388,7 @@ export class RoleHandler {
|
||||
scrollQuality: hero.scrollQuality,
|
||||
favour: hero.favour,
|
||||
favourLv: hero.favourLv,
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -391,7 +398,7 @@ export class RoleHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let sid = session.get('sid');
|
||||
|
||||
if(type == 1) {
|
||||
if (type == 1) {
|
||||
pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, {
|
||||
isGuest: true,
|
||||
guestTime: 60 * 60, // 游客已体验时间
|
||||
@@ -399,7 +406,7 @@ export class RoleHandler {
|
||||
isAdult: false, // 是否已成年
|
||||
todayPlayTime: 60 * 60, // 今天已游戏时长
|
||||
type: 1
|
||||
} ), [{uid: roleId, sid: sid}]);
|
||||
}), [{ uid: roleId, sid: sid }]);
|
||||
} else if (type == 2) {
|
||||
pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, {
|
||||
isGuest: false,
|
||||
@@ -408,7 +415,7 @@ export class RoleHandler {
|
||||
isAdult: false, // 是否已成年
|
||||
todayPlayTime: 60 * 60, // 今天已游戏时长
|
||||
type: 2
|
||||
} ), [{uid: roleId, sid: sid}]);
|
||||
}), [{ uid: roleId, sid: sid }]);
|
||||
} else if (type == 3) {
|
||||
pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, {
|
||||
isGuest: false,
|
||||
@@ -417,7 +424,7 @@ export class RoleHandler {
|
||||
isAdult: false, // 是否已成年
|
||||
todayPlayTime: 3 * 60 * 60, // 今天已游戏时长
|
||||
type: 3
|
||||
} ), [{uid: roleId, sid: sid}]);
|
||||
}), [{ uid: roleId, sid: sid }]);
|
||||
} else if (type == 4) {
|
||||
pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, {
|
||||
isGuest: false,
|
||||
@@ -426,8 +433,8 @@ export class RoleHandler {
|
||||
isAdult: false, // 是否已成年
|
||||
todayPlayTime: 1.5 * 60 * 60, // 今天已游戏时长
|
||||
type: 4
|
||||
} ), [{uid: roleId, sid: sid}]);
|
||||
}
|
||||
}), [{ uid: roleId, sid: sid }]);
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
@@ -439,9 +446,9 @@ export class RoleHandler {
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
let checkHeroes = await checkBattleHeroesByHid(roleId, showLineup);
|
||||
if(showLineup.length > 0 && !checkHeroes) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
|
||||
if (showLineup.length > 0 && !checkHeroes) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
|
||||
|
||||
if(showLineup.length > LINEUP_NUM) {
|
||||
if (showLineup.length > LINEUP_NUM) {
|
||||
return resResult(STATUS.LINEUP_MAX);
|
||||
}
|
||||
|
||||
@@ -457,16 +464,16 @@ export class RoleHandler {
|
||||
let { id } = msg;
|
||||
let roleId = session.get('roleId');
|
||||
let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS);
|
||||
if(!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||
if (!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||
|
||||
let { heads } = role;
|
||||
let curHead = heads.find(cur => cur.id == id);
|
||||
if(!curHead) return resResult(STATUS.HEAD_NOT_FOUND);
|
||||
if(curHead.enable) return resResult(STATUS.HEAD_IS_WEARING);
|
||||
if(!curHead.status) return resResult(STATUS.HEAD_IS_LOCKED);
|
||||
if (!curHead) return resResult(STATUS.HEAD_NOT_FOUND);
|
||||
if (curHead.enable) return resResult(STATUS.HEAD_IS_WEARING);
|
||||
if (!curHead.status) return resResult(STATUS.HEAD_IS_LOCKED);
|
||||
|
||||
let oldHead = heads.find(cur => cur.enable); // 穿戴中的头像
|
||||
if(oldHead) {
|
||||
if (oldHead) {
|
||||
oldHead.enable = false;
|
||||
}
|
||||
curHead.enable = true;
|
||||
@@ -482,16 +489,16 @@ export class RoleHandler {
|
||||
let { id } = msg;
|
||||
let roleId = session.get('roleId');
|
||||
let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS);
|
||||
if(!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||
if (!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||
|
||||
let { frames } = role;
|
||||
let curFrame = frames.find(cur => cur.id == id);
|
||||
if(!curFrame) return resResult(STATUS.FRAME_NOT_FOUND);
|
||||
if(curFrame.enable) return resResult(STATUS.FRAME_IS_WEARING);
|
||||
if(!curFrame.status) return resResult(STATUS.FRAME_IS_LOCKED);
|
||||
if (!curFrame) return resResult(STATUS.FRAME_NOT_FOUND);
|
||||
if (curFrame.enable) return resResult(STATUS.FRAME_IS_WEARING);
|
||||
if (!curFrame.status) return resResult(STATUS.FRAME_IS_LOCKED);
|
||||
|
||||
let oldHead = frames.find(cur => cur.enable); // 穿戴中的头像
|
||||
if(oldHead) {
|
||||
if (oldHead) {
|
||||
oldHead.enable = false;
|
||||
}
|
||||
curFrame.enable = true;
|
||||
@@ -507,16 +514,16 @@ export class RoleHandler {
|
||||
let { id } = msg;
|
||||
let roleId = session.get('roleId');
|
||||
let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS);
|
||||
if(!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||
if (!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||
|
||||
let { spines } = role;
|
||||
let curSpine = spines.find(cur => cur.id == id);
|
||||
if(!curSpine) return resResult(STATUS.SPINE_NOT_FOUND);
|
||||
if(curSpine.enable) return resResult(STATUS.SPINE_IS_WEARING);
|
||||
if(!curSpine.status) return resResult(STATUS.SPINE_IS_LOCKED);
|
||||
if (!curSpine) return resResult(STATUS.SPINE_NOT_FOUND);
|
||||
if (curSpine.enable) return resResult(STATUS.SPINE_IS_WEARING);
|
||||
if (!curSpine.status) return resResult(STATUS.SPINE_IS_LOCKED);
|
||||
|
||||
let oldHead = spines.find(cur => cur.enable); // 穿戴中的头像
|
||||
if(oldHead) {
|
||||
if (oldHead) {
|
||||
oldHead.enable = false;
|
||||
}
|
||||
curSpine.enable = true;
|
||||
@@ -532,16 +539,16 @@ export class RoleHandler {
|
||||
let { roleName } = msg;
|
||||
let roleId = session.get('roleId');
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
|
||||
let checkName = await RoleModel.checkName(roleName, serverId);
|
||||
if(checkName) return resResult(STATUS.NAME_HAS_USED);
|
||||
if (checkName) return resResult(STATUS.NAME_HAS_USED);
|
||||
|
||||
let role = await RoleModel.updateRoleInfo(roleId, { roleName });
|
||||
session.set('roleName', role.roleName);
|
||||
session.push('roleName', () => {});
|
||||
session.push('roleName', () => { });
|
||||
await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'roleName', value: roleName }]);
|
||||
|
||||
return resResult(STATUS.SUCCESS, { roleName: role.roleName });
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ActivityModel, ActivityModelType } from '../db/Activity';
|
||||
import { ActivityGrowthModel, ActivityGrowthModelType } from '../db/ActivityGrowth';
|
||||
import { GrowthData } from '../domain/activityField/growthField';
|
||||
import { GrowthData, GrowthItem } from '../domain/activityField/growthField';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
@@ -30,8 +30,7 @@ export async function getPlayerGrowthData(activityId: number, serverId: number,
|
||||
let playerData = new GrowthData(activityData);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
|
||||
return { data: playerData };
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import { sendMail } from "./mailService";
|
||||
import { initSingleRank, getRoleOnlineInfo, updateUserInfo } from "./redisService";
|
||||
import { GuildRankParam, GuildLeader } from "../domain/rank";
|
||||
import { lockData, lockDataNoRetry } from '../services/redLockService';
|
||||
import { ErrLogModel } from '../db/ErrLog';
|
||||
import { ErrLogModel } from '../db/ErrLog';
|
||||
import { MailType, MailModel } from '../db/Mail';
|
||||
import { pushMail } from '../pubUtils/interface';
|
||||
import { getMailContent } from '../services/mailService';
|
||||
@@ -21,6 +21,7 @@ import { DATA_NAME } from '../consts/dataName';
|
||||
import { addRoleToGuildChannel } from "./chatService";
|
||||
import { Rank } from "./rankService";
|
||||
import { checkTask } from "./taskService";
|
||||
import { accomplishTask } from "../pubUtils/taskUtil";
|
||||
|
||||
/**
|
||||
* @description 检查该玩家是否有权限做操作
|
||||
@@ -31,7 +32,7 @@ export async function checkAuth(func: number, roleId: string, code?: string, use
|
||||
const auth = await UserGuildModel.getMyAuth(roleId, code, userGuild);
|
||||
const dicGuildAuth = gameData.guildAuth.get(func);
|
||||
// console.log('*checkAuth*', auth, dicGuildAuth)
|
||||
if(!dicGuildAuth) return false;
|
||||
if (!dicGuildAuth) return false;
|
||||
|
||||
return dicGuildAuth.includes(auth);
|
||||
}
|
||||
@@ -46,30 +47,30 @@ export async function joinGuild(code: string, guildName: string, lv: number, rol
|
||||
|
||||
// 周结算锁
|
||||
let weeklySumLock = await lockDataNoRetry(serverId, DATA_NAME.WEEKLY_GUILD_SUM, code);
|
||||
if(!!weeklySumLock.err) {
|
||||
if (!!weeklySumLock.err) {
|
||||
weeklySumLock.releaseCallback();
|
||||
return { status: -1, resResult: resResult(STATUS.GUILD_WEEKLY_SUM) };
|
||||
}
|
||||
weeklySumLock.releaseCallback();
|
||||
|
||||
// 人数锁
|
||||
let res:any = await lockData(serverId, DATA_NAME.JOIN_GUILD, code);// 加锁
|
||||
let res: any = await lockData(serverId, DATA_NAME.JOIN_GUILD, code);// 加锁
|
||||
if (!!res.err) return { status: -1, resResult: resResult(STATUS.REDLOCK_ERR) };
|
||||
|
||||
|
||||
const result = await RoleModel.joinGuild(roleId, code, guildName);
|
||||
if(!result) {
|
||||
if (!result) {
|
||||
res.releaseCallback();//解锁
|
||||
return { status: -1, resResult: resResult(STATUS.GUILD_HAS_JOIN) };
|
||||
}
|
||||
|
||||
const dicCenterBase = gameData.centerBase.get(lv);
|
||||
if(!dicCenterBase) {
|
||||
if (!dicCenterBase) {
|
||||
res.releaseCallback();//解锁
|
||||
return { status: -1, resResult: resResult(STATUS.DIC_DATA_NOT_FOUND) };
|
||||
}
|
||||
const maxMemberCnt = dicCenterBase.peopleNum;
|
||||
const guild = await GuildModel.addMember(code, roleId, maxMemberCnt, serverId, result.ce);
|
||||
if(!guild) {
|
||||
if (!guild) {
|
||||
res.releaseCallback();//解锁
|
||||
return { status: -1, resResult: resResult(STATUS.GUILD_MEMBER_MAX) };
|
||||
} else {
|
||||
@@ -78,7 +79,7 @@ export async function joinGuild(code: string, guildName: string, lv: number, rol
|
||||
|
||||
const role = await RoleModel.findByRoleId(roleId);
|
||||
const userGuild = await UserGuildModel.createUserGuild(guild.code, role, false);
|
||||
if(!userGuild) {
|
||||
if (!userGuild) {
|
||||
res.releaseCallback();//解锁
|
||||
return { status: -1, resResult: resResult(STATUS.GUILD_CREATE_ERROR) };
|
||||
}
|
||||
@@ -91,8 +92,11 @@ export async function joinGuild(code: string, guildName: string, lv: number, rol
|
||||
await addRoleToGuildChannel(roleId, sid, code);
|
||||
}
|
||||
|
||||
//成长任务-加入军团
|
||||
await accomplishTask(roleId, TASK_TYPE.GUILD_JOIN, 1);
|
||||
|
||||
session.set('guildCode', code);
|
||||
session.push('guildCode', () => {});
|
||||
session.push('guildCode', () => { });
|
||||
return { status: 0, guild, userGuild, roleName: role.roleName, memberCnt: guild.memberCnt, guildCe: guild.guildCe }
|
||||
}
|
||||
|
||||
@@ -102,21 +106,21 @@ export async function joinGuild(code: string, guildName: string, lv: number, rol
|
||||
* @param serverId 区
|
||||
*/
|
||||
export async function getGuildWithRefActive(guildCode: string, serverId: number) {
|
||||
|
||||
let res:any = await lockData(serverId, DATA_NAME.REFRESH_ACTIVE, guildCode);// 加锁
|
||||
|
||||
let res: any = await lockData(serverId, DATA_NAME.REFRESH_ACTIVE, guildCode);// 加锁
|
||||
if (!!res.err) return false;
|
||||
|
||||
let guild = await GuildModel.findByCode(guildCode, serverId, '+refTimeDaily');
|
||||
if(!guild) {
|
||||
if (!guild) {
|
||||
res.releaseCallback();//解锁
|
||||
return false;
|
||||
}
|
||||
|
||||
const now = new Date();
|
||||
let { activeDaily, refTimeDaily} = guild;
|
||||
let { activeDaily, refTimeDaily } = guild;
|
||||
|
||||
let isRefDaily = shouldRefresh(refTimeDaily, now, 0);
|
||||
if(isRefDaily) {
|
||||
if (isRefDaily) {
|
||||
activeDaily = 0; refTimeDaily = now;
|
||||
guild = await GuildModel.updateInfoWithLeader(guildCode, { activeDaily, refTimeDaily }, {});
|
||||
}
|
||||
@@ -136,45 +140,45 @@ export async function getGuildWithRefActive(guildCode: string, serverId: number)
|
||||
export async function addActive(roleId: string, serverId: number, id: number, type: number = 1, active?: number) {
|
||||
|
||||
let dicActiveWay = gameData.guildActiveWays.get(id);
|
||||
if(id && !dicActiveWay) {
|
||||
if (id && !dicActiveWay) {
|
||||
return { status: 0, resResult: resResult(STATUS.DIC_DATA_NOT_FOUND) };
|
||||
}
|
||||
if(!active) {
|
||||
if (!active) {
|
||||
active = getGuildActiveByIdAndType(id, type);
|
||||
}
|
||||
|
||||
let userGuild = await getUserGuildWithRefActive(roleId, 'activeRecord receivedActive activeDaily activeWeekly guildCode');
|
||||
if(!userGuild) return { status: 0, resResult: resResult(STATUS.GUILD_NOT_FOUND) };
|
||||
if (!userGuild) return { status: 0, resResult: resResult(STATUS.GUILD_NOT_FOUND) };
|
||||
|
||||
let guildCode = userGuild.guildCode;
|
||||
let guild = await getGuildWithRefActive(guildCode, serverId);
|
||||
if(!guild) return { status: 0, resResult: resResult(STATUS.GUILD_NOT_FOUND) };
|
||||
if (!guild) return { status: 0, resResult: resResult(STATUS.GUILD_NOT_FOUND) };
|
||||
|
||||
// 周结算锁
|
||||
let weeklySumLock = await lockDataNoRetry(serverId, DATA_NAME.WEEKLY_GUILD_SUM, guildCode);
|
||||
if(!!weeklySumLock.err) {
|
||||
if (!!weeklySumLock.err) {
|
||||
weeklySumLock.releaseCallback();
|
||||
return { status: 0, resResult: resResult(STATUS.GUILD_WEEKLY_SUM) };
|
||||
}
|
||||
weeklySumLock.releaseCallback();
|
||||
|
||||
let {activeRecord} = userGuild;
|
||||
if(id != 0) { // 用于debug,传0时直接增加活跃
|
||||
let { activeRecord } = userGuild;
|
||||
if (id != 0) { // 用于debug,传0时直接增加活跃
|
||||
let curActiveRecord = activeRecord.find(cur => cur.id == id);
|
||||
if( curActiveRecord ) {
|
||||
curActiveRecord.count ++;
|
||||
if (curActiveRecord) {
|
||||
curActiveRecord.count++;
|
||||
} else {
|
||||
curActiveRecord = {id, count: 1};
|
||||
curActiveRecord = { id, count: 1 };
|
||||
activeRecord.push(curActiveRecord);
|
||||
}
|
||||
if(curActiveRecord.count > dicActiveWay.count) { // 次数超过时,不增加活跃
|
||||
if (curActiveRecord.count > dicActiveWay.count) { // 次数超过时,不增加活跃
|
||||
active = 0;
|
||||
}
|
||||
}
|
||||
userGuild = await UserGuildModel.updateInfo(roleId, { activeRecord, activeUpdateTime: nowSeconds() }, { activeDaily: active, activeWeekly: active });
|
||||
|
||||
guild = await GuildModel.updateInfo(guildCode, { activeUpdateTime: nowSeconds() }, { activeDaily: active, activeWeekly: active });
|
||||
|
||||
|
||||
// 排行榜更新
|
||||
let r = new Rank(REDIS_KEY.GUILD_ACTIVE_RANK, { serverId });
|
||||
await r.setRankWithGuildInfo(guildCode, guild.activeWeekly, guild.activeUpdateTime, guild);
|
||||
@@ -188,37 +192,37 @@ export async function addActive(roleId: string, serverId: number, id: number, ty
|
||||
* @param select 筛选字段
|
||||
*/
|
||||
export async function getUserGuildWithRefActive(roleId: string, select: string, notPush?: boolean) {
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId, select? select + ' wishGoods +refTimeDaily': '+refTimeDaily');
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId, select ? select + ' wishGoods +refTimeDaily' : '+refTimeDaily');
|
||||
// console.log(JSON.stringify(userGuild))
|
||||
if(!userGuild) return false;
|
||||
if (!userGuild) return false;
|
||||
let { receivedActive, refTimeDaily, activeDaily, activeRecord, wishGoods } = userGuild;
|
||||
|
||||
const now = new Date();
|
||||
let isRefDaily = shouldRefresh(refTimeDaily, now, 0);
|
||||
if(isRefDaily) {
|
||||
if (isRefDaily) {
|
||||
let mails = new Array<MailType>();
|
||||
let pushMessage = new Array<pushMail>();
|
||||
wishGoods.map(async function ({donateNames, goodId, drawCnt}) {
|
||||
wishGoods.map(async function ({ donateNames, goodId, drawCnt }) {
|
||||
let goodInfo = getGoodById(goodId)
|
||||
if (!goodInfo)
|
||||
if (!goodInfo)
|
||||
return;
|
||||
for (let i = 0; i < drawCnt; i++ ) {
|
||||
for (let i = 0; i < drawCnt; i++) {
|
||||
let donateName = donateNames[donateNames.length - i - 1];
|
||||
await getMailContent(roleId, MAIL_TYPE.WISH_POOL_REWARD, [donateName, goodInfo.name], [{id: goodId, count: drawCnt}], mails, pushMessage);
|
||||
await getMailContent(roleId, MAIL_TYPE.WISH_POOL_REWARD, [donateName, goodInfo.name], [{ id: goodId, count: drawCnt }], mails, pushMessage);
|
||||
}
|
||||
});
|
||||
if (!!mails.length) {
|
||||
await MailModel.addMails(mails);
|
||||
if (!notPush) {
|
||||
pushMessage.forEach(({route, data, uids })=>{
|
||||
pinus.app.channelService.pushMessageByUids(route, resResult(STATUS.SUCCESS, { mails:data }), uids);
|
||||
pushMessage.forEach(({ route, data, uids }) => {
|
||||
pinus.app.channelService.pushMessageByUids(route, resResult(STATUS.SUCCESS, { mails: data }), uids);
|
||||
});
|
||||
}
|
||||
}
|
||||
receivedActive = []; refTimeDaily = now; activeDaily = 0; activeRecord = []; wishGoods = [];
|
||||
let receiveBoxs = [], wishDntCnt = 0, donateCnt = 0;
|
||||
userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive, refTimeDaily, activeDaily, activeRecord, wishGoods, receiveBoxs, wishDntCnt, donateCnt }, {}, select);
|
||||
if(!userGuild) return false;
|
||||
if (!userGuild) return false;
|
||||
}
|
||||
|
||||
return userGuild;
|
||||
@@ -233,8 +237,8 @@ export async function settleGuildWeekly() {
|
||||
const guildList = await GuildModel.findAllGuild('code activeWeekly memberCnt serverId');
|
||||
|
||||
// 周结算时,1. 不能变动memberCnt 2.玩家activeWeekly不能变动 3.公会activeWeekly不能变动
|
||||
for(let { code, memberCnt, serverId } of guildList) {
|
||||
let res:any = await lockDataNoRetry(serverId, DATA_NAME.WEEKLY_GUILD_SUM, code);//加锁
|
||||
for (let { code, memberCnt, serverId } of guildList) {
|
||||
let res: any = await lockDataNoRetry(serverId, DATA_NAME.WEEKLY_GUILD_SUM, code);//加锁
|
||||
if (!!res.err) {
|
||||
await ErrLogModel.create(`settle guild lock data error: ${res.err}`)
|
||||
}
|
||||
@@ -243,33 +247,33 @@ export async function settleGuildWeekly() {
|
||||
let otherMemberCnt = 0; // 除了大将军以外从活跃高到底成员人数,用户计算活跃排名百分比
|
||||
let members = new Map<string, number>();
|
||||
|
||||
for(let {roleId, auth, activeWeekly} of userGuildList) {
|
||||
for (let { roleId, auth, activeWeekly } of userGuildList) {
|
||||
let job = 0;
|
||||
|
||||
if(auth == GUILD_AUTH.LEADER) {
|
||||
|
||||
if (auth == GUILD_AUTH.LEADER) {
|
||||
job = GUILD_JOB.DAJIANGJUN;
|
||||
} else if (activeWeekly <= ARMY.ARMY_WEEKHONOUR_LIMIT) {
|
||||
job = GUILD_JOB.SHIBING;
|
||||
} else {
|
||||
otherMemberCnt++;
|
||||
for(let [id, {rankProportion}] of gameData.guildPosition) {
|
||||
for (let [id, { rankProportion }] of gameData.guildPosition) {
|
||||
let rankCnt = Math.ceil(memberCnt * rankProportion / 100);
|
||||
job = id;
|
||||
if(otherMemberCnt <= rankCnt) break;
|
||||
if (otherMemberCnt <= rankCnt) break;
|
||||
}
|
||||
}
|
||||
await UserGuildModel.updateInfo(roleId, { job, activeWeekly: 0 }, {});
|
||||
|
||||
if(activeWeekly > ARMY.ARMY_WEEKHONOUR_LIMIT) { // 低于一定不发奖励
|
||||
if (activeWeekly > ARMY.ARMY_WEEKHONOUR_LIMIT) { // 低于一定不发奖励
|
||||
members.set(roleId, job);
|
||||
}
|
||||
}
|
||||
|
||||
// 转换周活跃奖励
|
||||
let r = new Rank(REDIS_KEY.GUILD_ACTIVE_RANK, { serverId });
|
||||
let rank = await r.getMyRank({guildCode: code});
|
||||
let rank = await r.getMyRank({ guildCode: code });
|
||||
let allWeeklyReward = getGuildActiveWeekReward(rank);
|
||||
for(let [roleId, job] of members) {
|
||||
for (let [roleId, job] of members) {
|
||||
let jobActiveRatio = gameData.guildPosition.get(job).activeRatio;
|
||||
let reward = allWeeklyReward.map(cur => {
|
||||
return {
|
||||
@@ -286,6 +290,6 @@ export async function settleGuildWeekly() {
|
||||
res.releaseCallback();//解锁
|
||||
}
|
||||
await initSingleRank(REDIS_KEY.GUILD_ACTIVE_RANK);
|
||||
await SystemConfigModel.updateSystemConfig({settleGuildWeeklyTime: nowSeconds()}); // 记录一下
|
||||
await SystemConfigModel.updateSystemConfig({ settleGuildWeeklyTime: nowSeconds() }); // 记录一下
|
||||
console.log('————— settleGuildWeekly结束 —————');
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
import { HeroModel } from '../db/Hero';
|
||||
import { HeroModel } from '../db/Hero';
|
||||
import Role, { RoleModel } from '../db/Role'
|
||||
import { getLvByExp, getExpByLv, gameData } from '../pubUtils/data';
|
||||
import { updateUserInfo } from './redisService';
|
||||
@@ -9,12 +9,13 @@ import { BackendSession } from 'pinus';
|
||||
import { REDIS_KEY } from '../consts';
|
||||
import { Rank } from './rankService';
|
||||
import { checkTask } from './taskService';
|
||||
import { accomplishTask } from '../pubUtils/taskUtil';
|
||||
|
||||
export async function roleLevelup(roleId: string, kingExp: number, session: BackendSession) {
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
let {lv = 1, exp = 0} = role;
|
||||
let { lv = 1, exp = 0 } = role;
|
||||
let canGetExp = lv < gameData.maxPlayerLv; // 当主公超过最大级后,挑战结算不再获得经验值
|
||||
let newExp = canGetExp? exp + kingExp: exp;
|
||||
let newExp = canGetExp ? exp + kingExp : exp;
|
||||
let newLv = getLvByExp(newExp);
|
||||
// 等级超过最高级之后,经验依然可以稍微溢出一些,以备下一次提升等级
|
||||
// let nextExpObj = getExpByLv(newLv + 1);
|
||||
@@ -22,50 +23,53 @@ export async function roleLevelup(roleId: string, kingExp: number, session: Back
|
||||
// if(curExpObj && !nextExpObj && newExp > curExpObj.sum) {
|
||||
// newExp = curExpObj.sum;
|
||||
// }
|
||||
|
||||
|
||||
role = await RoleModel.levelup(roleId, newLv, newExp);
|
||||
if(newLv > lv) { // 升级
|
||||
await switchOnFunc(roleId, FUNC_OPT_TYPE.LEVEL_UP, newLv, session);
|
||||
await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{field: 'lv', value: newLv}]);
|
||||
if (newLv > lv) { // 升级
|
||||
await switchOnFunc(roleId, FUNC_OPT_TYPE.LEVEL_UP, newLv, session);
|
||||
await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'lv', value: newLv }]);
|
||||
|
||||
let r = new Rank(REDIS_KEY.USER_LV, { serverId: role.serverId });
|
||||
await r.setRankWithRoleInfo(roleId, newLv, Date.now(), role);
|
||||
|
||||
// 任务
|
||||
await checkTask(roleId, session.get('sid'), session.get('funcs'), TASK_TYPE.ROLE_LV, newLv, false, {});
|
||||
//成长任务
|
||||
await accomplishTask(roleId, TASK_TYPE.ROLE_LV, newLv);
|
||||
|
||||
}
|
||||
let actordata = [];
|
||||
for(let i = lv; i <= newLv; i++) {
|
||||
for (let i = lv; i <= newLv; i++) {
|
||||
let lvObj = getExpByLv(i);
|
||||
|
||||
if(!lvObj) break;
|
||||
let {sum, cur} = lvObj;
|
||||
if (!lvObj) break;
|
||||
let { sum, cur } = lvObj;
|
||||
let lastSum = sum - cur;
|
||||
// console.log(sum, cur, lastSum, exp, newExp);
|
||||
|
||||
let startExp = exp > lastSum? exp - lastSum: 0;
|
||||
let getExp = newExp > sum? cur - startExp: newExp - lastSum - startExp;
|
||||
let startExp = exp > lastSum ? exp - lastSum : 0;
|
||||
let getExp = newExp > sum ? cur - startExp : newExp - lastSum - startExp;
|
||||
actordata.push({
|
||||
lv : i,
|
||||
exp : startExp, // 升级前经验
|
||||
getExp : getExp > 0? getExp: 0, // 获得的经验
|
||||
mostExp : cur
|
||||
lv: i,
|
||||
exp: startExp, // 升级前经验
|
||||
getExp: getExp > 0 ? getExp : 0, // 获得的经验
|
||||
mostExp: cur
|
||||
});
|
||||
}
|
||||
return {actordata, lv: newLv, exp: newExp, kingExp: newExp - exp};
|
||||
return { actordata, lv: newLv, exp: newExp, kingExp: newExp - exp };
|
||||
}
|
||||
|
||||
|
||||
export async function checkBattleHeroes(roleId: string, seqIds: Array<number>) {
|
||||
let heroes: number[] = [];
|
||||
let flag = true;
|
||||
if(seqIds.length <= 0) flag = false;
|
||||
if (seqIds.length <= 0) flag = false;
|
||||
|
||||
const findHeroes = await HeroModel.findBySeqIdRange(seqIds, roleId);
|
||||
if(findHeroes.length != seqIds.length) flag = false;
|
||||
for(let seqId of seqIds) {
|
||||
if (findHeroes.length != seqIds.length) flag = false;
|
||||
for (let seqId of seqIds) {
|
||||
let hero = findHeroes.find(cur => cur.seqId == seqId);
|
||||
if(!hero) {
|
||||
if (!hero) {
|
||||
flag = false; break;
|
||||
}
|
||||
heroes.push(hero.hid);
|
||||
@@ -75,24 +79,24 @@ export async function checkBattleHeroes(roleId: string, seqIds: Array<number>) {
|
||||
|
||||
export async function checkBattleHeroesByHid(roleId: string, heroes: Array<number>) {
|
||||
let flag = true;
|
||||
if(heroes.length <= 0) flag = false;
|
||||
if (heroes.length <= 0) flag = false;
|
||||
|
||||
const findHeroes = await HeroModel.findByHidRange(heroes, roleId);
|
||||
if(findHeroes.length != heroes.length) flag = false;
|
||||
for(let hid of heroes) {
|
||||
if (findHeroes.length != heroes.length) flag = false;
|
||||
for (let hid of heroes) {
|
||||
let hero = findHeroes.find(cur => cur.hid == hid);
|
||||
if(!hero) flag = false;
|
||||
if (!hero) flag = false;
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
export async function updateWarStar(roleId: string, battleId: number, warType: number, star: number) {
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
let { warStar = new Array<{id: number, warType: number, star: number}>() } = role;
|
||||
let { warStar = new Array<{ id: number, warType: number, star: number }>() } = role;
|
||||
let curStar = warStar.find(cur => cur.id == battleId);
|
||||
let result: Role;
|
||||
if(curStar) {
|
||||
if(star > curStar.star) {
|
||||
if (curStar) {
|
||||
if (star > curStar.star) {
|
||||
result = await Role.updateWarStar(roleId, battleId, star);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -16,9 +16,9 @@ import { gameData } from '../pubUtils/data';
|
||||
import { getCurWeekDate, getSeconds } from '../pubUtils/timeUtil';
|
||||
|
||||
export async function checkTaskWithRoles(roleId: string, sid: string, funcs: number[], taskType: number, roles: RoleType[]) {
|
||||
for(let role of roles) {
|
||||
if(role) {
|
||||
await checkTaskWithRole(role.roleId, role.roleId == roleId? sid: null, role.roleId == roleId? funcs: null, taskType, role);
|
||||
for (let role of roles) {
|
||||
if (role) {
|
||||
await checkTaskWithRole(role.roleId, role.roleId == roleId ? sid : null, role.roleId == roleId ? funcs : null, taskType, role);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -59,14 +59,14 @@ export async function checkTask(roleId: string, sid: string, funcs: number[], ta
|
||||
}
|
||||
|
||||
export async function pushTaskUpdate(roleId: string, sid: string, funcs: number[], pushMessage: TaskListReturn[]) {
|
||||
if(pushMessage.length > 0) {
|
||||
if(!sid || !funcs) {
|
||||
if (pushMessage.length > 0) {
|
||||
if (!sid || !funcs) {
|
||||
let onlineUser = await getRoleOnlineInfo(roleId);
|
||||
sid = onlineUser.sid;
|
||||
funcs = onlineUser.funcs||[];
|
||||
funcs = onlineUser.funcs || [];
|
||||
}
|
||||
if(!!sid) {
|
||||
let uids = [{uid: roleId, sid}];
|
||||
if (!!sid) {
|
||||
let uids = [{ uid: roleId, sid }];
|
||||
pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, pushMessage), uids);
|
||||
}
|
||||
}
|
||||
@@ -86,12 +86,14 @@ export async function checkTaskInBattleEnd(roleId: string, sid: string, funcs: n
|
||||
await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_TOWER, battleId, heroes, 1, star);
|
||||
await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_VESTIGE, battleId, heroes, 1, star);
|
||||
await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_EXPEDITION, battleId, heroes, 1, star);
|
||||
//成长任务
|
||||
await taskUtil.accomplishTask(roleId, TASK_TYPE.BATTLE_MAIN, 1, { warId: battleId })
|
||||
|
||||
}
|
||||
|
||||
export async function checkTaskInComBattleEnd(roleIds: string[], capId: string, quality: number) {
|
||||
for(let roleId of roleIds) {
|
||||
if(roleId == capId && roleIds.length > 1) { // 招募队友
|
||||
for (let roleId of roleIds) {
|
||||
if (roleId == capId && roleIds.length > 1) { // 招募队友
|
||||
await checkTask(roleId, null, null, TASK_TYPE.COM_BATTLE_CREATE_TEAM, 1, true, {});
|
||||
} else if (roleId !== capId) { // 协助寻宝
|
||||
await checkTask(roleId, null, null, TASK_TYPE.COM_BATTLE_ASSIST_TEAM, 1, true, {});
|
||||
@@ -103,7 +105,7 @@ export async function checkTaskInComBattleEnd(roleIds: string[], capId: string,
|
||||
|
||||
export async function checkTaskInPvpEnd(roleId: string, sid: string, funcs: number[], isSuccess: boolean, heroScores: HeroScores[]) {
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.PVP, 1, true, {});
|
||||
if(isSuccess) {
|
||||
if (isSuccess) {
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.PVP_WIN, 1, true, {});
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.PVP_WIN_SERIES, 1, true, {});
|
||||
} else {
|
||||
@@ -120,19 +122,19 @@ export async function getCurTask(roleId: string, session: FrontendOrBackendSessi
|
||||
|
||||
let { dailyTaskRefWeekly, dailyTaskRef } = userTask;
|
||||
let curWeekStart = getCurWeekDate(1, 5);
|
||||
if(dailyTaskRefWeekly < curWeekStart) { // 刷新周宝箱
|
||||
if (dailyTaskRefWeekly < curWeekStart) { // 刷新周宝箱
|
||||
dailyTaskRefWeekly = curWeekStart;
|
||||
}
|
||||
session.set('refWeekly', getSeconds(dailyTaskRefWeekly));
|
||||
session.push('refWeekly', ()=> {});
|
||||
|
||||
if(shouldRefresh(dailyTaskRef, new Date(), 5)) {
|
||||
session.push('refWeekly', () => { });
|
||||
|
||||
if (shouldRefresh(dailyTaskRef, new Date(), 5)) {
|
||||
dailyTaskRef = new Date();
|
||||
userTask = await UserTaskModel.updateInfo(roleId, { dailyTaskRef });
|
||||
await removeHistoryTask(roleId, TASK_FUN_TYPE.DAILY);
|
||||
}
|
||||
session.set('refDaily', getSeconds(dailyTaskRef));
|
||||
session.push('refDaily', ()=> {});
|
||||
session.push('refDaily', () => { });
|
||||
|
||||
let mainTask = await getMainTask(roleId, userTask);
|
||||
let dailyTask = await getDailyTask(roleId, userTask);
|
||||
@@ -146,10 +148,10 @@ export async function getMainTask(roleId: string, userTask: UserTaskType) {
|
||||
let recMap = await UserTaskRecModel.findByRoleAndType(roleId, type); // group=>userTaskRec
|
||||
|
||||
let taskList: TaskListReturn[] = [];
|
||||
for(let [id, dic] of gameData.mainTask) {
|
||||
if(dic.taskStage == stage) {
|
||||
for (let [id, dic] of gameData.mainTask) {
|
||||
if (dic.taskStage == stage) {
|
||||
let dbRec = recMap.get(dic.taskType)?.get(dic.group);
|
||||
if(dbRec) {
|
||||
if (dbRec) {
|
||||
taskList.push({ type, id, count: dbRec.count, received: dbRec.received.includes(id) });
|
||||
} else {
|
||||
taskList.push({ type, id, count: 0, received: false });
|
||||
@@ -163,7 +165,7 @@ export async function getDailyTask(roleId: string, userTask: UserTaskType) {
|
||||
let type = TASK_FUN_TYPE.DAILY;
|
||||
let { dailyTaskPoint: point, dailyTaskRefWeekly, dailyTaskPointWeekly: weeklyPoint, dailyTaskBox: box } = userTask;
|
||||
let curWeekStart = getCurWeekDate(1, 5);
|
||||
if(dailyTaskRefWeekly < curWeekStart) { // 刷新
|
||||
if (dailyTaskRefWeekly < curWeekStart) { // 刷新
|
||||
dailyTaskRefWeekly = curWeekStart;
|
||||
weeklyPoint = 0;
|
||||
box = [];
|
||||
@@ -171,9 +173,9 @@ export async function getDailyTask(roleId: string, userTask: UserTaskType) {
|
||||
let recMap = await UserTaskRecModel.findByRoleAndType(roleId, type); // group=>userTaskRec
|
||||
|
||||
let taskList: TaskListReturn[] = [];
|
||||
for(let [id, dic] of gameData.dailyTask) {
|
||||
for (let [id, dic] of gameData.dailyTask) {
|
||||
let dbRec = recMap.get(dic.taskType)?.get(dic.group);
|
||||
if(dbRec) {
|
||||
if (dbRec) {
|
||||
taskList.push({ type, id, count: dbRec.count, received: dbRec.received.includes(id) });
|
||||
} else {
|
||||
taskList.push({ type, id, count: 0, received: false });
|
||||
@@ -188,9 +190,9 @@ export async function getAchievement(roleId: string, userTask: UserTaskType) {
|
||||
let recMap = await UserTaskRecModel.findByRoleAndType(roleId, type); // group=>userTaskRec
|
||||
|
||||
let taskList: TaskListReturn[] = [];
|
||||
for(let [id, dic] of gameData.achievement) {
|
||||
for (let [id, dic] of gameData.achievement) {
|
||||
let dbRec = recMap.get(dic.taskType)?.get(dic.group);
|
||||
if(dbRec) {
|
||||
if (dbRec) {
|
||||
taskList.push({ type, id, count: dbRec.count, received: dbRec.received.includes(id) });
|
||||
} else {
|
||||
taskList.push({ type, id, count: 0, received: false });
|
||||
@@ -207,7 +209,7 @@ export async function refDailyTask(roleId: string, sid: string) {
|
||||
// 转移每日任务
|
||||
await removeHistoryTask(roleId, TASK_FUN_TYPE.DAILY);
|
||||
|
||||
let uids = [{uid: roleId, sid}];
|
||||
let uids = [{ uid: roleId, sid }];
|
||||
pinus.app.get('channelService').pushMessageByUids('onDailyTaskRefresh', resResult(STATUS.SUCCESS, { taskList }), uids);
|
||||
|
||||
}
|
||||
@@ -216,21 +218,21 @@ export async function removeHistoryTask(roleId: string, type: number, today?: Da
|
||||
|
||||
// 转移每日任务
|
||||
let history = await UserTaskRecModel.getHistoryRec(roleId, type, today);
|
||||
if(history.length > 0) {
|
||||
if (history.length > 0) {
|
||||
await UserTaskHistoryModel.pushUserTask(roleId, history);
|
||||
await UserTaskRecModel.deleteHistory(history);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 刷新每日宝箱数量
|
||||
export async function refDailyTaskBox(roleId: string, sid: string, debug = false) {
|
||||
let userTask = await UserTaskModel.refreshWeekly(roleId, debug);
|
||||
if(userTask) {
|
||||
if (userTask) {
|
||||
let { dailyTaskPoint: point, dailyTaskPointWeekly: weeklyPoint, dailyTaskBox: box } = userTask;
|
||||
let uids = [{uid: roleId, sid}];
|
||||
pinus.app.get('channelService').pushMessageByUids('onTaskBoxRefresh', resResult(STATUS.SUCCESS, {
|
||||
let uids = [{ uid: roleId, sid }];
|
||||
pinus.app.get('channelService').pushMessageByUids('onTaskBoxRefresh', resResult(STATUS.SUCCESS, {
|
||||
type: TASK_FUN_TYPE.DAILY,
|
||||
point, weeklyPoint, box
|
||||
}), uids);
|
||||
}), uids);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user