feat(gvg): 任务

This commit is contained in:
luying
2023-01-18 10:02:31 +08:00
parent aab08f7ed5
commit 6619e33995
16 changed files with 332 additions and 31 deletions

View File

@@ -1,5 +1,5 @@
import { Application, BackendSession, ChannelService, HandlerService, pinus } from "pinus";
import { GVG_ITEM, DATA_NAME, GVG_ACTIVE_TYPE, GVG_PERIOD, GVG_SERVER_TYPE, ITEM_CHANGE_REASON, LEAGUE_JOB, LEAGUE_MANAGE_TYPE, STATUS, GVG_REC_TYPE } from "../../../consts";
import { GVG_ITEM, DATA_NAME, GVG_ACTIVE_TYPE, GVG_PERIOD, GVG_SERVER_TYPE, ITEM_CHANGE_REASON, LEAGUE_JOB, LEAGUE_MANAGE_TYPE, STATUS, GVG_REC_TYPE, TASK_TYPE } from "../../../consts";
import { GVGLeagueModel } from "../../../db/GVGLeague";
import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare";
import { GVGMainData, LeagueDistributeInfo, LeagueMemberDistributeInfo, LeagueMemberListInfo } from "../../../domain/gvgField/returnData";
@@ -20,6 +20,7 @@ import { addGVGReward, handleGVGCost } from "../../../services/gvg/gvgItemServic
import { RewardInter } from "../../../pubUtils/interface";
import { getGVGCities } from "../../../services/gvg/gvgBattleService";
import { GVGRecModel } from "../../../db/GVGRec";
import { checkGVGTask } from "../../../services/task/taskService";
export default function (app: Application) {
new HandlerService(app, {});
@@ -250,6 +251,38 @@ export class GVGHandler {
});
}
// 领取任务奖励
async receiveTask(msg: { taskId: number }, session: BackendSession) {
const roleId: string = session.get('roleId');
const guildCode: string = session.get('guildCode');
const roleName: string = session.get('roleName');
const sid: string = session.get('sid');
const { taskId } = msg;
let dicGVGTask = gameData.gvgTask.get(taskId);
if(!dicGVGTask) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let { configId } = getGVGConfig();
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
// 检查
let rec = await GVGUserTaskModel.findByTaskId(configId, myLeague.leagueCode, roleId, taskId);
if(!rec || rec.count < dicGVGTask.condition) return resResult(STATUS.GVG_TASK_NOT_ENOUGH);
if(rec.status == 2) return resResult(STATUS.GVG_TASK_HAS_RECEIVED);
rec = await GVGUserTaskModel.receiveTask(configId, myLeague.leagueCode, roleId, taskId);
let leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, dicGVGTask.leagueReward, dicGVGTask.reward, ITEM_CHANGE_REASON.GVG_RECEIVE_TASK);
return resResult(STATUS.SUCCESS, {
curTask: {
id: rec.id,
status: rec.status
},
leagueGoods
});
}
// 千机阁数据
async getTech(msg: {}, session: BackendSession) {
const roleId = session.get('roleId');
@@ -321,6 +354,7 @@ export class GVGHandler {
// 千机阁解锁
async activate(msg: { techId: number, battleFeats: number }, session: BackendSession) {
const serverId = session.get('serverId');
const roleId = session.get('roleId');
const guildCode = session.get('guildCode');
const sid = session.get('sid');
@@ -359,6 +393,7 @@ export class GVGHandler {
// 添加 活跃
let active = await addGVGTechActive(myLeague.leagueCode, roleId);
checkGVGTask(serverId, roleId, sid, configId, myLeague.leagueCode, TASK_TYPE.GVG_TECH, { count: 1 });
return resResult(STATUS.SUCCESS, {
active,

View File

@@ -1,5 +1,5 @@
import { Application, BackendSession, ChannelService, HandlerService } from "pinus";
import { GVG_ACTIVE_TYPE, GVG_ITEM, GVG_ITEM_TYPE, GVG_PERIOD, GVG_RESOURCE_TYPE, ITEM_CHANGE_REASON, MAIL_TYPE, STATUS } from "../../../consts";
import { GVG_ACTIVE_TYPE, GVG_ITEM, GVG_ITEM_TYPE, GVG_PERIOD, GVG_RESOURCE_TYPE, ITEM_CHANGE_REASON, MAIL_TYPE, STATUS, TASK_TYPE } from "../../../consts";
import { GVGLeagueModel } from "../../../db/GVGLeague";
import { GVGLeagueFarmModel, GVGLeagueFarmType } from "../../../db/GVGLeagueFarm";
import { GVGLeagueFarmRecModel } from "../../../db/GVGLeagueFarmRec";
@@ -17,6 +17,7 @@ import { addGVGActive, addResource, getCostSeedReward, getItemIdOfSeedType, getL
import { getGVGConfig, getGVGPeriodData } from "../../../services/gvg/gvgService";
import { sendMailByContent } from "../../../services/mailService";
import { getAllServerName, getRoleOnlineInfo } from "../../../services/redisService";
import { checkGVGTask } from "../../../services/task/taskService";
export default function (app: Application) {
@@ -158,7 +159,7 @@ export class GVGProduceHandler {
// 种田
async plant(msg: { farmId: number, seeds: { fieldId: number, seedType: number }[] }, session: BackendSession) {
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');
@@ -196,6 +197,7 @@ export class GVGProduceHandler {
const plantResult = await GVGLeagueFarmModel.plant(configId, myLeague.leagueCode, farmId, updateFields, roleId);
await rollbackUnPlantFields(cost, plantResult, session, myLeague.leagueCode); // 可能会有田已经被其他人占领的情况,将种子还回去
await GVGLeagueFarmRecModel.insertRecs(plantResult);
checkGVGTask(serverId, roleId, sid, configId, myLeague.leagueCode, TASK_TYPE.GVG_FARM, { count: 1 });
return resResult(STATUS.SUCCESS, {
...await getLeagueFarmShowResult(myLeague.leagueCode, roleId, farmId)
@@ -324,6 +326,7 @@ export class GVGProduceHandler {
const roleName = session.get('roleName');
const guildCode = session.get('guildCode');
const sid = session.get('sid');
const serverId = session.get('serverId');
const { farmId, fieldId, result } = msg;
let { configId, period } = getGVGPeriodData();
@@ -367,6 +370,7 @@ export class GVGProduceHandler {
let leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueReward, reward, ITEM_CHANGE_REASON.HARVEST)
// 活跃
const active = await addGVGActive(myLeague.leagueCode, roleId, GVG_ACTIVE_TYPE.COST_PRODUCE_COIN, produceCoin);
checkGVGTask(serverId, roleId, sid, configId, myLeague.leagueCode, TASK_TYPE.GVG_FARM, { count: 1 });
return resResult(STATUS.SUCCESS, {
...await getLeagueFarmShowResult(myLeague.leagueCode, roleId, farmId, false),
@@ -449,6 +453,7 @@ export class GVGProduceHandler {
const roleName = session.get('roleName');
const guildCode = session.get('guildCode');
const sid = session.get('sid');
const serverId = session.get('serverId');
const { farmId, fieldId, result } = msg;
let { configId, period } = getGVGPeriodData();
@@ -486,6 +491,7 @@ export class GVGProduceHandler {
let leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueReward, reward, ITEM_CHANGE_REASON.HARVEST)
// 活跃
const active = await addGVGActive(myLeague.leagueCode, roleId, GVG_ACTIVE_TYPE.COST_PRODUCE_COIN, produceCoin);
checkGVGTask(serverId, roleId, sid, configId, myLeague.leagueCode, TASK_TYPE.GVG_FARM, { count: 1 });
return resResult(STATUS.SUCCESS, {
...await getLeagueFarmShowResult(myLeague.leagueCode, roleId, farmId, false),