🐞 fix(gvg): 修复农田特殊种子加成逻辑
This commit is contained in:
@@ -126,7 +126,7 @@ export async function addResource(leagueCode: string, roleId: string, roleName:
|
||||
let myDistribute = getMyDistribute(userDailyData);
|
||||
addResourceRecord(roleId, roleName, leagueCode, resourceType, count);
|
||||
|
||||
return { resource: league.resources, lv: league.lv, myDistribute }
|
||||
return { resource: league.resources, leagueLv: league.lv, myDistribute }
|
||||
}
|
||||
|
||||
function getResourceCnt(resourceType: GVG_RESOURCE_TYPE, count: number) {
|
||||
@@ -144,6 +144,7 @@ export async function lockField(leagueCode: string, roleId: string, roleName: st
|
||||
let { configId } = getGVGConfig();
|
||||
const produceCoinCnt = await getLockFieldCnt(leagueCode, roleId);
|
||||
if(produceCoinCnt == 0) return
|
||||
|
||||
const leagueFarms = await GVGLeagueFarmModel.findByFarmId(configId, leagueCode, farmId);
|
||||
// 查询现有的田
|
||||
let { maxAddTypeCntMap, myAddTypeCntMap, allLands, myFieldCnt, myLockField } = calCntFromFarms(farmId, leagueFarms, roleId);
|
||||
@@ -175,19 +176,21 @@ function calCntFromFarms(farmId: number, leagueFarms: GVGLeagueFarmType[], roleI
|
||||
let myLockField = 0; // 玩家没有种只是锁住了的田
|
||||
let allLands = getArrayOfNumber(gameData.gvgResource.get(farmId)?.sum??0); // 全部可使用的田
|
||||
for(let leagueFarm of leagueFarms) {
|
||||
// 全联军
|
||||
if(leagueFarm.addType) maxAddTypeCntMap.set(leagueFarm.addType, maxAddTypeCntMap.get(leagueFarm.addType) - 1);
|
||||
// 加成
|
||||
for(let {addType, roleId: addTypeRoleId} of leagueFarm.addTypes) {
|
||||
maxAddTypeCntMap.set(addType, maxAddTypeCntMap.get(addType) - 1);
|
||||
if(addTypeRoleId == roleId) {
|
||||
if(!myAddTypeCntMap.has(addType)) myAddTypeCntMap.set(addType, 0);
|
||||
myAddTypeCntMap.set(addType, myAddTypeCntMap.get(addType) + 1);
|
||||
}
|
||||
}
|
||||
if(leagueFarm.unlockTime >= nowSeconds()) {
|
||||
let index = allLands.indexOf(leagueFarm.fieldId);
|
||||
if(index > -1) allLands.splice(index);
|
||||
if(index > -1) allLands.splice(index, 1);
|
||||
}
|
||||
|
||||
// 玩家数据
|
||||
if(leagueFarm.lockRoleId == roleId && leagueFarm.unlockTime >= nowSeconds()) {
|
||||
if(leagueFarm.addType) {
|
||||
if(!myAddTypeCntMap.has(leagueFarm.addType)) myAddTypeCntMap.set(leagueFarm.addType, 0);
|
||||
myAddTypeCntMap.set(leagueFarm.addType, myAddTypeCntMap.get(leagueFarm.addType) + 1);
|
||||
}
|
||||
myFieldCnt++;
|
||||
if(leagueFarm.harvestTime == 0) myLockField++;
|
||||
}
|
||||
@@ -205,36 +208,18 @@ function calCntFromFarms(farmId: number, leagueFarms: GVGLeagueFarmType[], roleI
|
||||
*/
|
||||
function calAddType(myFieldCnt: number, myAddTypeCntMap: Map<number, number>, maxAddTypeCntMap: Map<number, number>, count: number) {
|
||||
let result = new Map<number, number>(); // 加成类型, 数量
|
||||
let minSpField = Math.floor((myFieldCnt + count) * gameData.gvgSpFieldRatio.min / 100); // 最少需要这么多个特殊田
|
||||
let maxSpField = Math.floor((myFieldCnt + count) * gameData.gvgSpFieldRatio.max / 100); // 最多可以有这么多个特殊田
|
||||
let myAllAddFieldCnt = 0;
|
||||
for(let [_, cnt] of myAddTypeCntMap) myAllAddFieldCnt += cnt;
|
||||
if(myAllAddFieldCnt >= maxSpField) return result;
|
||||
|
||||
let randCnt = getRandValueByMinMax(minSpField, maxSpField);
|
||||
|
||||
for(let [addType, ratio] of gameData.gvgFieldAddType) { // 按比例加田
|
||||
for(let [addType, ratio] of gameData.gvgPlayerFieldAddType) { // 按比例加田
|
||||
let maxCnt = maxAddTypeCntMap.get(addType)||0;
|
||||
if(maxCnt == 0) continue;
|
||||
let cnt = Math.ceil(randCnt * ratio / 100);
|
||||
let resultCnt = maxCnt > cnt? cnt: maxCnt;
|
||||
myAllAddFieldCnt += resultCnt;
|
||||
maxAddTypeCntMap.set(addType, maxAddTypeCntMap.get(addType) - 1);
|
||||
let needCnt = Math.floor((myFieldCnt + count) * ratio / 100); // 玩家按照比例需要的加成数量
|
||||
let cnt = myAddTypeCntMap.get(addType)||0; // 我当前的加成数量
|
||||
let resultCnt = needCnt - cnt;
|
||||
if(resultCnt < 0) resultCnt = 0;
|
||||
if(resultCnt > maxCnt) resultCnt = maxCnt;
|
||||
maxAddTypeCntMap.set(addType, maxAddTypeCntMap.get(addType) - resultCnt);
|
||||
result.set(addType, resultCnt);
|
||||
}
|
||||
if(myAllAddFieldCnt < minSpField) {
|
||||
for(let [addType, addCnt] of result) { // 如果还有多的塞一塞
|
||||
let maxCnt = maxAddTypeCntMap.get(addType)||0;
|
||||
if(maxCnt > addCnt) {
|
||||
let inc = maxCnt - addCnt > minSpField - myAllAddFieldCnt? minSpField - myAllAddFieldCnt: maxCnt - addCnt;
|
||||
result.set(addType, count + inc);
|
||||
myAllAddFieldCnt += inc;
|
||||
if(myAllAddFieldCnt >= minSpField) break;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user