🐞 fix(gvg): 内政帮收改为按玩家收获

This commit is contained in:
luying
2023-02-09 16:55:21 +08:00
parent e1004d4960
commit 83cf8db9fe
4 changed files with 19 additions and 14 deletions

View File

@@ -262,28 +262,27 @@ export class GVGProduceHandler {
}
// 帮收
async helpHarvest(msg: { farmId: number, fieldId: number }, session: BackendSession) {
async helpHarvest(msg: { farmId: number, roleId: string }, session: BackendSession) {
const roleId = session.get('roleId');
const roleName = session.get('roleName');
const guildCode = session.get('guildCode');
const { farmId, fieldId } = msg;
const { farmId, roleId: targetRoleId } = 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 resultField = await GVGLeagueFarmModel.helpHarvest(configId, myLeague.leagueCode, farmId, fieldId); // 解锁
if(!resultField) return resResult(STATUS.GVG_CANNOT_HARVEST);
const resultField = await GVGLeagueFarmModel.helpHarvest(configId, myLeague.leagueCode, farmId, targetRoleId); // 解锁
if(!resultField || resultField.length == 0) return resResult(STATUS.GVG_CANNOT_HARVEST);
let targetRoleId = resultField.lockRoleId;
let targetOnlineInfo = await getRoleOnlineInfo(targetRoleId);
// 计算产量
const { foodSum, rewardSum, leagueRewardSum, activeSum } = await sumOutputByResults([resultField]);
const { foodSum, rewardSum, leagueRewardSum, activeSum } = await sumOutputByResults(resultField);
// 资源
await addResource(myLeague.leagueCode, targetRoleId, resultField.lockRoleName, GVG_RESOURCE_TYPE.FOOD, foodSum)||{};
await addResource(myLeague.leagueCode, targetRoleId, resultField[0].lockRoleName, 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)

View File

@@ -1375,7 +1375,8 @@ export function checkRouteParam(route: string, msg: any) {
}
case "guild.gvgProduceHandler.helpHarvest":
{
if(!checkNaturalNumbers(msg.farmId, msg.fieldId)) return false;
if(!checkNaturalNumbers(msg.farmId)) return false;
if(!checkNaturalStrings(msg.roleId)) return false;
break;
}
case "guild.gvgProduceHandler.mineStart":

View File

@@ -139,15 +139,18 @@ export default class GVGLeagueFarm extends BaseModel {
}));
if(result.modifiedCount == 0) return [];
const fieldResult: GVGLeagueFarmType[] = await GVGLeagueFarmModel.find({ batchCode }).sort({ fieldId: 1 }).select('-_id -createdAt -updatedAt -__v -configId -leagueCode').lean();
await GVGLeagueFarmModel.updateMany({ batchCode }, { $set: { seedType: 0 } })
await GVGLeagueFarmModel.updateMany({ batchCode }, { $set: { seedType: 0 } });
return fieldResult;
}
public static async helpHarvest(configId: number, leagueCode: string, farmId: number, fieldId: number) {
const result: GVGLeagueFarmType = await GVGLeagueFarmModel.findOneAndUpdate(
{ configId, leagueCode, farmId, fieldId, harvestTime: { $lt: nowSeconds() }, unlockTime: { $gt: nowSeconds() } },
{ $set: { unlockTime: 0, harvestTime: 0, lockRoleId: '', lockRoleName: '' }}, { new: true }).lean();
return result
public static async helpHarvest(configId: number, leagueCode: string, farmId: number, roleId: string) {
const batchCode = genCode(10);
const result = await GVGLeagueFarmModel.updateMany({ configId, leagueCode, farmId, lockRoleId: roleId, harvestTime: { $lt: nowSeconds() } },
{ $set: { unlockTime: 0, harvestTime: 0, lockRoleId: '', lockRoleName: '', batchCode }}, { new: true });
if(result.modifiedCount == 0) return [];
const fieldResult: GVGLeagueFarmType[] = await GVGLeagueFarmModel.find({ batchCode }).lean();
await GVGLeagueFarmModel.updateMany({ batchCode }, { $set: { seedType: 0 } });
return fieldResult
}
public static async releaseLock(configId: number, leagueCode: string, farmId: number, roleId: string) {

View File

@@ -329,6 +329,7 @@ export class LeagueField {
harvestTime: number; // 收获时间, 10位时间戳
unlockTime: number; // 锁定时间,会按照内政令的数量给玩家预锁定一批填,超过时间限制就不锁给他了也会分给其他人了
index: number = 0; // 位置
output: number = 0; // 产量
constructor(leagueFarm: GVGLeagueFarmType) {
if(!leagueFarm) return;
@@ -338,6 +339,7 @@ export class LeagueField {
this.harvestTime = leagueFarm.harvestTime;
this.unlockTime = leagueFarm.unlockTime;
this.index = leagueFarm.index||0;
this.output = leagueFarm.output;
}
}