✨ feat(gvg): 农庄
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { Application, BackendSession, ChannelService, HandlerService, pinus } from "pinus";
|
||||
import { BATTLE_FEAT_ID, DATA_NAME, GVG_ACTIVE_TYPE, GVG_PERIOD, GVG_SERVER_TYPE, ITEM_CHANGE_REASON, LEAGUE_JOB, LEAGUE_MANAGE_TYPE, STATUS } from "../../../consts";
|
||||
import { GVG_ITEM, DATA_NAME, GVG_ACTIVE_TYPE, GVG_PERIOD, GVG_SERVER_TYPE, ITEM_CHANGE_REASON, LEAGUE_JOB, LEAGUE_MANAGE_TYPE, STATUS } from "../../../consts";
|
||||
import { GVGLeagueModel } from "../../../db/GVGLeague";
|
||||
import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare";
|
||||
import { GVGMainData, LeagueDistributeInfo, LeagueMemberDistributeInfo, LeagueMemberListInfo } from "../../../domain/gvgField/returnData";
|
||||
@@ -12,13 +12,13 @@ import { GVGUserItemModel } from "../../../db/GVGUserItem";
|
||||
import { GVGUserTaskModel } from "../../../db/GVGUserTask";
|
||||
import { GVG } from "../../../pubUtils/dicParam";
|
||||
import { RoleModel } from "../../../db/Role";
|
||||
import { addGVGActive, addGVGTechActive, calProduce, checkPreTech, checkTechIsIng, getDailyLoginReward, getGVGDailyItems } from "../../../services/gvg/gvgPrepareService";
|
||||
import { addGVGTechActive, calProduce, checkPreTech, checkTechIsIng, getDailyLoginReward, getMyDistribute } from "../../../services/gvg/gvgPrepareService";
|
||||
import { GVGUserDailyDataModel } from "../../../db/GVGUserDailyData";
|
||||
import { gameData } from "../../../pubUtils/data";
|
||||
import { lockLeagueData } from "../../../services/redLockService";
|
||||
import { addGVGReward, handleGVGCost } from "../../../services/gvg/gvgItemService";
|
||||
import { RewardInter } from "../../../pubUtils/interface";
|
||||
import { GuildModel } from "../../../db/Guild";
|
||||
import { getGVGCities } from "../../../services/gvg/gvgBattleService";
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -61,10 +61,13 @@ export class GVGHandler {
|
||||
let tasks = await GVGUserTaskModel.findByRole(configId, league.leagueCode, roleId);
|
||||
data.setPlayerInfo(userData, getMyAuth(league, roleId), await checkCanPrepare(roleId), checkCanChooseJob(userData?.job, leaguePrepare), items, tasks);
|
||||
|
||||
let { reward: dailyReward } = await getDailyLoginReward(roleId, roleName, sid, league.leagueCode, userData?.job);
|
||||
if(dailyReward) data.setFistLogin(dailyReward);
|
||||
let dailyReward = await getDailyLoginReward(roleId, roleName, sid, league.leagueCode, userData?.job);
|
||||
if(dailyReward) data.setFistLogin(dailyReward.reward);
|
||||
|
||||
data.setLeagueCe(await calLeagueCe(league));
|
||||
|
||||
let cities = await getGVGCities(league);
|
||||
data.setCities(cities);
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, data)
|
||||
@@ -107,14 +110,14 @@ export class GVGHandler {
|
||||
myUserData = await GVGUserDataModel.chooseJob(configId, myLeague.leagueCode, roleId, job);
|
||||
// 更新prepare
|
||||
leaguePrepare = await GVGLeaguePrepareModel.chooseJob(configId, myLeague.leagueCode, job);
|
||||
let { reward: dailyReward } = await getDailyLoginReward(roleId, roleName, sid, myLeague.leagueCode, myUserData?.job);
|
||||
let dailyReward = await getDailyLoginReward(roleId, roleName, sid, myLeague.leagueCode, myUserData?.job);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
leagueCode: myLeague.leagueCode,
|
||||
job: myUserData.job,
|
||||
producerCnt: leaguePrepare.producerCnt,
|
||||
fighterCnt: leaguePrepare.fighterCnt,
|
||||
leagueGoods: dailyReward? dailyReward: []
|
||||
leagueGoods: dailyReward? dailyReward.reward: []
|
||||
});
|
||||
}
|
||||
|
||||
@@ -161,15 +164,10 @@ export class GVGHandler {
|
||||
result.push(disObj)
|
||||
}
|
||||
|
||||
const myDistribute = await GVGUserDailyDataModel.findByRole(configId, myLeague.leagueCode, roleId);
|
||||
const userDailyData = await GVGUserDailyDataModel.findByRole(configId, myLeague.leagueCode, roleId);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
myDistribute: {
|
||||
food: myDistribute?.food||0,
|
||||
mineral: myDistribute?.mineral||0,
|
||||
wood: myDistribute?.wood||0,
|
||||
score: myDistribute?.score||0,
|
||||
},
|
||||
myDistribute: getMyDistribute(userDailyData),
|
||||
list: result
|
||||
});
|
||||
}
|
||||
@@ -269,7 +267,7 @@ export class GVGHandler {
|
||||
}
|
||||
|
||||
// 扣战功
|
||||
const costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, [{ id: BATTLE_FEAT_ID, count: battleFeats }], [], ITEM_CHANGE_REASON.GVG_ACTIVE_TECH);
|
||||
const costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, [{ id: GVG_ITEM.BATTLE_FEAT, count: battleFeats }], [], ITEM_CHANGE_REASON.GVG_ACTIVE_TECH);
|
||||
if(!costResult) return resResult(STATUS.GVG_BATTLE_FEAT_NOT_ENOUGH);
|
||||
|
||||
leaguePrepare = await GVGLeaguePrepareModel.addProgress(configId, myLeague.leagueCode, techId, battleFeats);
|
||||
|
||||
@@ -5,7 +5,7 @@ import { GuildModel, GuildType } from "../../../db/Guild";
|
||||
import { UserGuildModel } from "../../../db/UserGuild";
|
||||
import { GVGLeagueModel, GVGLeagueType } from "../../../db/GVGLeague";
|
||||
import { GVGLeagueApplyModel } from "../../../db/GVGLeagueApply";
|
||||
import { calLeagueCe, getGroupIdOfServer, getGVGPeriodData, getGVGServerType, getServersOfSameGroup } from "../../../services/gvg/gvgService";
|
||||
import { calLeagueCe, getGroupIdOfServer, getGVGConfig, getGVGPeriodData, getGVGServerType, getServersOfSameGroup } from "../../../services/gvg/gvgService";
|
||||
import { checkCanManage, checkGuildLeader, checkLeagueAuth, createLeague, getLeagueApplyData, getLeagueInviteData, getMyAuth, joinGuildToLeague } from "../../../services/gvg/gvgTeamService";
|
||||
import { LeagueGuildInfo, LeagueListInfo, LeagueMemberListInfo, LeagueSimpleInfo } from "../../../domain/gvgField/returnData";
|
||||
import { getAllServerName, getServerName } from "../../../services/redisService";
|
||||
@@ -16,6 +16,7 @@ import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from "../../../se
|
||||
import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare";
|
||||
import { createGroupMsg, pushGroupMsgToRoom } from "../../../services/chatService";
|
||||
import { sendMailToGuildByContent } from "../../../services/mailService";
|
||||
import { getGVGCities } from "../../../services/gvg/gvgBattleService";
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -94,6 +95,9 @@ export class GVGManageHandler {
|
||||
result.setHasApply(hasApply);
|
||||
|
||||
// TODO 占领城池
|
||||
const cities = await getGVGCities(league);
|
||||
result.setCities(cities);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
league: result
|
||||
} );
|
||||
@@ -323,7 +327,7 @@ export class GVGManageHandler {
|
||||
const league = await GVGLeagueModel.findByCode(targetLeagueCode);
|
||||
if(!league) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
let { configId } = getGVGPeriodData();
|
||||
let { configId } = getGVGConfig();
|
||||
const guilds = await GuildModel.findByCodes(league.guildCodes);
|
||||
const members = league.members||[];
|
||||
let roleIds = members.map(member => member.roleId);
|
||||
@@ -355,7 +359,7 @@ export class GVGManageHandler {
|
||||
const league = await GVGLeagueModel.findByCode(targetLeagueCode);
|
||||
if(!league) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
let { configId } = getGVGPeriodData();
|
||||
let { configId } = getGVGConfig();
|
||||
|
||||
const members = league.members||[];
|
||||
let roleIds = members.map(member => member.roleId);
|
||||
@@ -499,7 +503,7 @@ export class GVGManageHandler {
|
||||
const checkAuth = await checkLeagueAuth(roleId, myLeague, LEAGUE_MANAGE_TYPE.ABDICATE);
|
||||
if(!checkAuth) return resResult(STATUS.GVG_HAS_NO_AUTH);
|
||||
|
||||
let { configId } = getGVGPeriodData();
|
||||
let { configId } = getGVGConfig();
|
||||
|
||||
const members = myLeague.members||[];
|
||||
const candidates = members.filter(cur => cur.auth == LEAGUE_AUTH.SUB_LEADER);
|
||||
|
||||
296
game-server/app/servers/guild/handler/gvgProduceHandler.ts
Normal file
296
game-server/app/servers/guild/handler/gvgProduceHandler.ts
Normal file
@@ -0,0 +1,296 @@
|
||||
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 { GVGLeagueModel } from "../../../db/GVGLeague";
|
||||
import { GVGLeagueFarmModel, GVGLeagueFarmType } from "../../../db/GVGLeagueFarm";
|
||||
import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare";
|
||||
import { RoleModel } from "../../../db/Role";
|
||||
import { LeagueFarmListInfo, LeagueFarmMember, LeagueField } from "../../../domain/gvgField/returnData";
|
||||
import { gameData, getGVGResourceBasesByType } from "../../../pubUtils/data";
|
||||
import { ItemInter, RewardInter } from "../../../pubUtils/interface";
|
||||
import { nowSeconds } from "../../../pubUtils/timeUtil";
|
||||
import { resResult } from "../../../pubUtils/util";
|
||||
import { addGVGReward, getProduceCoinCnt, handleGVGCost } from "../../../services/gvg/gvgItemService";
|
||||
import { addGVGActive, addResource, calFarmOutputs, getCostSeedReward, getItemIdOfSeedType, getLeagueFarmShowResult, getLockFieldCnt, getmyDistributeRank, rollbackUnPlantFields, unlockField } from "../../../services/gvg/gvgPrepareService";
|
||||
import { getGVGConfig, getGVGPeriodData } from "../../../services/gvg/gvgService";
|
||||
import { sendMailByContent } from "../../../services/mailService";
|
||||
import { getAllServerName, getRoleOnlineInfo } from "../../../services/redisService";
|
||||
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
return new GVGProduceHandler(app);
|
||||
}
|
||||
|
||||
export class GVGProduceHandler {
|
||||
channelService: ChannelService;
|
||||
constructor(private app: Application) {
|
||||
this.channelService = app.get('channelService');
|
||||
}
|
||||
|
||||
// 内政令兑换
|
||||
async exchangeItem(msg: { id: number, count: number }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const sid = session.get('sid');
|
||||
const guildCode = session.get('guildCode');
|
||||
const { id, count } = msg;
|
||||
|
||||
const dicGVGItem = gameData.gvgItem.get(id);
|
||||
if(!dicGVGItem) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if(dicGVGItem.type != GVG_ITEM_TYPE.SEED && dicGVGItem.type != GVG_ITEM_TYPE.SCOOP && dicGVGItem.type != GVG_ITEM_TYPE.AXE) {
|
||||
return resResult(STATUS.GVG_ITEMS_NOT_PRODUCE);
|
||||
}
|
||||
|
||||
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
const leagueItems = dicGVGItem.leagueConsume.map(cur => ({ id: cur.id, count: cur.count * count }));
|
||||
const items = dicGVGItem.consume.map(cur => ({ id: cur.id, count: cur.count * count }));
|
||||
|
||||
const costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, leagueItems, items, ITEM_CHANGE_REASON.GVG_EXCHANGE_SEEDS);
|
||||
if(!costResult) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
|
||||
|
||||
const leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, [{ id, count }], [], ITEM_CHANGE_REASON.GVG_EXCHANGE_SEEDS);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
leagueGoods
|
||||
});
|
||||
}
|
||||
|
||||
// 获取农场/矿山/林场状态
|
||||
async getProduceList(msg: { type: number }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
const { type } = msg;
|
||||
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
const leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, myLeague.leagueCode);
|
||||
const leagueLv = leaguePrepare?.lv||0;
|
||||
|
||||
const leagueFarms = await GVGLeagueFarmModel.findByType(configId, myLeague.leagueCode, type);
|
||||
|
||||
const dicFarms = getGVGResourceBasesByType(type);
|
||||
const result: LeagueFarmListInfo[] = [];
|
||||
for(let { id, lv } of dicFarms) {
|
||||
if(lv > leagueLv) continue;
|
||||
const leagueFarm = leagueFarms.filter(cur => cur.farmId == id && cur.unlockTime >= nowSeconds()); // 已种植单位
|
||||
const canHarvestFarms = leagueFarms.filter(cur => cur.farmId == id && cur.lockRoleId == roleId && cur.harvestTime > 0 && cur.harvestTime <= nowSeconds());
|
||||
let obj = new LeagueFarmListInfo(id, leagueFarm.length, canHarvestFarms.length > 0);
|
||||
result.push(obj);
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
type,
|
||||
list: result
|
||||
});
|
||||
}
|
||||
|
||||
// 不能进的农场,获取其他人的状态
|
||||
async getOtherFarms(msg: { farmId: number }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const guildCode = session.get('guildCode');
|
||||
const { farmId } = msg;
|
||||
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
const leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, myLeague.leagueCode);
|
||||
|
||||
const fields = await GVGLeagueFarmModel.findPlantedByFarmId(configId, myLeague.leagueCode, farmId);
|
||||
const roleIds: string[] = [], fieldByRoleId = new Map<string, GVGLeagueFarmType[]>();
|
||||
for(let field of fields) {
|
||||
if(roleIds.indexOf(field.lockRoleId) == -1) {
|
||||
roleIds.push(field.lockRoleId);
|
||||
fieldByRoleId.set(field.lockRoleId, []);
|
||||
}
|
||||
fieldByRoleId.get(field.lockRoleId).push(field);
|
||||
}
|
||||
|
||||
const serverNames = await getAllServerName();
|
||||
const roles = await RoleModel.findByRoleIds(roleIds);
|
||||
const result: LeagueFarmMember[] = [];
|
||||
for(let role of roles) {
|
||||
let obj = new LeagueFarmMember(role, serverNames);
|
||||
let myFields = fieldByRoleId.get(role.roleId)||[]
|
||||
obj.setByFields(myFields);
|
||||
const { foodSum } = await calFarmOutputs(myFields, myLeague, leaguePrepare);
|
||||
obj.setOutput(foodSum);
|
||||
result.push(obj);
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
...await getLeagueFarmShowResult(myLeague.leagueCode, roleId, farmId, false),
|
||||
members: result
|
||||
});
|
||||
}
|
||||
|
||||
// 小游戏界面
|
||||
async getMyFarm(msg: { farmId: number }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
const { farmId } = msg;
|
||||
|
||||
let { period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
await unlockField(myLeague.leagueCode, roleId, farmId);
|
||||
const myRank = await getmyDistributeRank(myLeague.leagueCode, myLeague.members, roleId);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
...await getLeagueFarmShowResult(myLeague.leagueCode, roleId, farmId),
|
||||
myRank,
|
||||
});
|
||||
}
|
||||
|
||||
// 种田
|
||||
async plant(msg: { farmId: number, results: { fieldId: number, seedType: number }[] }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const guildCode = session.get('guildCode');
|
||||
const sid = session.get('sid');
|
||||
|
||||
const { farmId, results } = msg;
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
const cost: RewardInter[] = [], updateFields: { fieldId: number, seedType: number, time: number }[] = [];
|
||||
for(let { fieldId, seedType } of results) {
|
||||
let itemId = getItemIdOfSeedType(seedType);
|
||||
let dicItem = gameData.gvgItem.get(itemId);
|
||||
updateFields.push({ fieldId, seedType, time: dicItem.ripeTime });
|
||||
// 算消耗的种子
|
||||
let costObj = cost.find(({ id }) => id == itemId);
|
||||
costObj? costObj.count++: cost.push({ id: itemId, count: 1 });
|
||||
}
|
||||
const costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, cost, [], ITEM_CHANGE_REASON.PLANT)
|
||||
if(!costResult) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
|
||||
|
||||
const plantResult = await GVGLeagueFarmModel.plant(configId, myLeague.leagueCode, farmId, updateFields, roleId);
|
||||
await rollbackUnPlantFields(cost, plantResult, session, myLeague.leagueCode); // 可能会有田已经被其他人占领的情况,将种子还回去
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
...await getLeagueFarmShowResult(myLeague.leagueCode, roleId, farmId)
|
||||
});
|
||||
}
|
||||
|
||||
// 收获
|
||||
async harvest(msg: { farmId: number, fieldIds: number[] }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const sid = session.get('sid');
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
const { farmId, fieldIds } = msg;
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
const leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, myLeague.leagueCode);
|
||||
|
||||
const myResultFields = await GVGLeagueFarmModel.harvest(configId, myLeague.leagueCode, farmId, fieldIds, roleId); // 解锁
|
||||
if(myResultFields.length <= 0) return resResult(STATUS.GVG_CANNOT_HARVEST);
|
||||
// 计算产量
|
||||
const { foodSum, rewardSum, leagueRewardSum, activeSum } = await calFarmOutputs(myResultFields, myLeague, leaguePrepare);
|
||||
// 资源
|
||||
let resourceResult = await addResource(myLeague.leagueCode, roleId, GVG_RESOURCE_TYPE.FOOD, foodSum)||{};
|
||||
// 相关物品
|
||||
let leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueRewardSum, rewardSum, ITEM_CHANGE_REASON.HARVEST)
|
||||
// 活跃
|
||||
const active = await addGVGActive(myLeague.leagueCode, roleId, GVG_ACTIVE_TYPE.COST_PRODUCE_COIN, activeSum);
|
||||
// 收获后再次预锁定一批田
|
||||
await unlockField(myLeague.leagueCode, roleId, farmId);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
...await getLeagueFarmShowResult(myLeague.leagueCode, roleId, farmId),
|
||||
leagueGoods,
|
||||
active,
|
||||
...resourceResult
|
||||
});
|
||||
}
|
||||
|
||||
// 关闭页面
|
||||
async plantEnd(msg: { farmId: number }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
const { farmId } = msg;
|
||||
let { configId } = getGVGConfig();
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
await GVGLeagueFarmModel.releaseLock(configId, myLeague.leagueCode, farmId, roleId);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
...await getLeagueFarmShowResult(myLeague.leagueCode, roleId, farmId),
|
||||
});
|
||||
}
|
||||
|
||||
// 帮收
|
||||
async helpHarvest(msg: { farmId: number, fieldId: number }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
const { farmId, fieldId } = msg;
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
const leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, myLeague.leagueCode);
|
||||
|
||||
const resultField = await GVGLeagueFarmModel.helpHarvest(configId, myLeague.leagueCode, farmId, fieldId); // 解锁
|
||||
if(!resultField) return resResult(STATUS.GVG_CANNOT_HARVEST);
|
||||
|
||||
let targetRoleId = resultField.lockRoleId;
|
||||
let targetOnlineInfo = await getRoleOnlineInfo(targetRoleId);
|
||||
|
||||
// 计算产量
|
||||
const { foodSum, rewardSum, leagueRewardSum, activeSum } = await calFarmOutputs([resultField], myLeague, leaguePrepare);
|
||||
// 资源
|
||||
await addResource(myLeague.leagueCode, targetRoleId, GVG_RESOURCE_TYPE.FOOD, foodSum)||{};
|
||||
await sendMailByContent(MAIL_TYPE.HELP_HARVEST, targetRoleId, { sendName: roleName, goods: rewardSum });
|
||||
// 相关物品
|
||||
await addGVGReward(targetRoleId, roleName, myLeague.leagueCode, targetOnlineInfo.sid, leagueRewardSum, [], ITEM_CHANGE_REASON.HARVEST)
|
||||
// 活跃
|
||||
await addGVGActive(myLeague.leagueCode, targetRoleId, GVG_ACTIVE_TYPE.COST_PRODUCE_COIN, activeSum);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
...await getLeagueFarmShowResult(myLeague.leagueCode, roleId, farmId),
|
||||
});
|
||||
}
|
||||
|
||||
// 获取资源
|
||||
async debugAddResource(msg: { type: number, count: number }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const guildCode = session.get('guildCode');
|
||||
const { type, count } = msg;
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
let resourceResult = await addResource(myLeague.leagueCode, roleId, type, count);
|
||||
if(!resourceResult) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
return resResult(STATUS.SUCCESS, resourceResult);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user