✨ feat(gvg): 宝箱奖励和等级奖励
This commit is contained in:
@@ -12,7 +12,7 @@ import { GVGUserItemModel } from "../../../db/GVGUserItem";
|
||||
import { GVGUserTaskModel } from "../../../db/GVGUserTask";
|
||||
import { GVG } from "../../../pubUtils/dicParam";
|
||||
import { RoleModel } from "../../../db/Role";
|
||||
import { addGVGTechActive, calProduce, checkPreTech, checkTechIsIng, getDailyLoginReward, getMyDistribute } from "../../../services/gvg/gvgPrepareService";
|
||||
import { addGVGTechActive, calFighterDistribute, calProducerDistribute, checkPreTech, checkTechIsIng, getDailyLoginReward, getMyDistribute } from "../../../services/gvg/gvgPrepareService";
|
||||
import { GVGUserDailyDataModel } from "../../../db/GVGUserDailyData";
|
||||
import { gameData } from "../../../pubUtils/data";
|
||||
import { lockLeagueData } from "../../../services/redLockService";
|
||||
@@ -149,17 +149,21 @@ export class GVGHandler {
|
||||
if(!role) continue;
|
||||
let userData = userDatas.find(userData => userData.roleId == member.roleId);
|
||||
let obj = new LeagueMemberDistributeInfo(role, serverNames);
|
||||
obj.setAuth(member.auth);
|
||||
obj.setByUserData(userData);
|
||||
if(curJob == LEAGUE_JOB.PRODUCER && calProduce(obj) > 0) memberResult.push(obj);
|
||||
if(curJob == LEAGUE_JOB.PRODUCER && calProducerDistribute(obj) > 0) memberResult.push(obj);
|
||||
if(curJob == LEAGUE_JOB.FIGHTER && obj.score > 0) memberResult.push(obj);
|
||||
}
|
||||
|
||||
memberResult.sort((a, b) => {
|
||||
return curJob == LEAGUE_JOB.PRODUCER? calProduce(b) - calProduce(a): b.score - a.score;
|
||||
return curJob == LEAGUE_JOB.PRODUCER? calProducerDistribute(b) - calProducerDistribute(a): calFighterDistribute(b) - calFighterDistribute(a);
|
||||
});
|
||||
let sumDistribute = curJob == LEAGUE_JOB.FIGHTER? calProduce(distribute): distribute.score;
|
||||
let curBox = box.find(cur => cur.job == curJob);
|
||||
let disObj = new LeagueDistributeInfo(curJob, sumDistribute, curBox?.received||[] );
|
||||
let sumDistribute = curJob == LEAGUE_JOB.PRODUCER? calProducerDistribute(distribute): calFighterDistribute(distribute);
|
||||
let boxReceived = box.filter(boxId => {
|
||||
let dicBox = gameData.gvgContributeBox.get(boxId);
|
||||
return dicBox.job == curJob;
|
||||
});
|
||||
let disObj = new LeagueDistributeInfo(curJob, sumDistribute, boxReceived);
|
||||
disObj.setMembers(memberResult);
|
||||
result.push(disObj)
|
||||
}
|
||||
@@ -172,6 +176,74 @@ export class GVGHandler {
|
||||
});
|
||||
}
|
||||
|
||||
// 领取宝箱
|
||||
async receiveBox(msg: { boxId: number }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const sid = session.get('sid');
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
const { boxId } = msg;
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
let dicBox = gameData.gvgContributeBox.get(boxId);
|
||||
if(!dicBox) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let myUserData = await GVGUserDataModel.findByRole(configId, myLeague.leagueCode, roleId);
|
||||
let { distribute = new Distribute(), box = [] } = myUserData||{};
|
||||
|
||||
if(box.indexOf(boxId) != -1) return resResult(STATUS.GVG_BOX_HAS_RECEIVED)
|
||||
let sumDistribute = dicBox.job == LEAGUE_JOB.PRODUCER? calProducerDistribute(distribute): calFighterDistribute(distribute);
|
||||
if(sumDistribute < dicBox.boxPoint) return resResult(STATUS.GVG_BOX_POINT_NOT_ENOUGH);
|
||||
|
||||
const leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, dicBox.boxLeagueReward, dicBox.boxReward, ITEM_CHANGE_REASON.GVG_RECEIVE_BOX);
|
||||
myUserData = await GVGUserDataModel.receiveBox(configId, myLeague.leagueCode, roleId, boxId);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
sumDistribute,
|
||||
receivedBox: myUserData.box,
|
||||
leagueGoods
|
||||
});
|
||||
}
|
||||
|
||||
// 领取升级奖励
|
||||
async receiveLvReward(msg: { lv: number }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const sid = session.get('sid');
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
const { lv } = msg;
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let dicGVGLeagueLv = gameData.gvgLeagueLv.get(lv);
|
||||
if(!dicGVGLeagueLv) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
const leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, myLeague.leagueCode);
|
||||
|
||||
if(!leaguePrepare || leaguePrepare.lv < lv) return resResult(STATUS.GVG_LV_NOT_ENOUGH);
|
||||
|
||||
let myUserData = await GVGUserDataModel.findByRole(configId, myLeague.leagueCode, roleId);
|
||||
let { receivedLv } = myUserData||{};
|
||||
if(lv != 1 && receivedLv != lv + 1) return resResult(STATUS.GVG_LV_REWARD_NOT_REACH);
|
||||
if(receivedLv >= lv) return resResult(STATUS.GVG_LV_REWARD_HAS_RECEIVED);
|
||||
|
||||
const leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, [], dicGVGLeagueLv.reward, ITEM_CHANGE_REASON.GVG_RECEIVE_LV);
|
||||
myUserData = await GVGUserDataModel.receiveLv(configId, myLeague.leagueCode, roleId, lv);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
receivedLv: myUserData.receivedLv,
|
||||
leagueGoods
|
||||
});
|
||||
}
|
||||
|
||||
// 千机阁数据
|
||||
async getTech(msg: {}, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
|
||||
Reference in New Issue
Block a user