This commit is contained in:
luying
2021-03-04 16:36:37 +08:00
parent 12d0395c63
commit 53c0835b2b
2 changed files with 84 additions and 61 deletions
@@ -681,12 +681,12 @@ export class FriendHandler {
if(heroList.length <= 0) return resResult(STATUS.HERO_NOT_FIND); if(heroList.length <= 0) return resResult(STATUS.HERO_NOT_FIND);
let list = new Array(); let list = new Array();
for(let {roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job, skins, ceAttr} of heroList) { for(let {roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job, skins, attr: heroAttrs} of heroList) {
let curSkin = skins.find(cur => cur.enable); let curSkin = skins.find(cur => cur.enable);
let equips = await EquipModel.findListByHidAndRole(hisRoleId, hid, EQUIP_SELECT.HERO_DETAIL); let equips = await EquipModel.findListByHidAndRole(hisRoleId, hid, EQUIP_SELECT.HERO_DETAIL);
let attributes = getPlayerMainAttribute(ceAttr, role.globalCeAttr); let attributes = getPlayerMainAttribute(heroAttrs, role.attr);
list.push({ list.push({
roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job, roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job,
@@ -1,9 +1,9 @@
import {Application, BackendSession, ChannelService} from 'pinus'; import {Application, BackendSession, ChannelService} from 'pinus';
import { handleCost, addItems } from '../../../services/rewardService'; import { handleCost, addItems } from '../../../services/rewardService';
import { calPlayerCeAndSave } from '../../../services/playerCeService'; import { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService';
import { resResult, returnHeroCeRatio } from '../../../pubUtils/util'; import { resResult, returnHeroCeRatio, deepCopy } from '../../../pubUtils/util';
import { STATUS } from '../../../consts/statusCode'; import { STATUS } from '../../../consts/statusCode';
import {HeroModel} from '../../../db/Hero'; import { HeroModel, Connect } from '../../../db/Hero';
import {CURRENCY_BY_TYPE, CURRENCY_TYPE, CONSUME_TYPE, HERO_GROW_MAX, HERO_SYSTEM_TYPE, ITID, ABI_STAGE, HERO_CE_RATIO} from '../../../consts'; import {CURRENCY_BY_TYPE, CURRENCY_TYPE, CONSUME_TYPE, HERO_GROW_MAX, HERO_SYSTEM_TYPE, ITID, ABI_STAGE, HERO_CE_RATIO} from '../../../consts';
import { RoleModel } from '../../../db/Role'; import { RoleModel } from '../../../db/Role';
import { ItemModel } from '../../../db/Item'; import { ItemModel } from '../../../db/Item';
@@ -81,8 +81,9 @@ export class HeroHandler {
let curHero = await HeroModel.createHero({ let curHero = await HeroModel.createHero({
roleId, serverId, roleName, hid, hName, star, quality, job, skins:[{id: initialSkin, enable: true}] roleId, serverId, roleName, hid, hName, star, quality, job, skins:[{id: initialSkin, enable: true}]
}); });
await calPlayerCeAndSave(sid, roleId, [curHero], HERO_SYSTEM_TYPE.INIT); let hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.INIT, sid, roleId, curHero, {});
return resResult(STATUS.SUCCESS, {curHero: returnHeroCeRatio(curHero)}); await calAllHeroCe(HERO_SYSTEM_TYPE.ADD_SKIN, sid, roleId, {}, [initialSkin])
return resResult(STATUS.SUCCESS, {curHero: returnHeroCeRatio(hero)});
} }
// 武将升级 // 武将升级
@@ -138,12 +139,14 @@ export class HeroHandler {
let costResult = await handleCost(roleId, sid, material); let costResult = await handleCost(roleId, sid, material);
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
hero.lv = playerLv > newLv?newLv: playerLv; let update = {
hero.exp = newExp; lv: playerLv > newLv?newLv: playerLv,
exp: newExp
}
let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.LVUP, [hid]); hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.LVUP, sid, roleId, hero, update);
const curHero = { const curHero = {
hid, lv : heros[0].lv, exp : heros[0].exp hid, lv : hero.lv, exp : hero.exp
} }
return resResult(STATUS.SUCCESS, { curHero }); return resResult(STATUS.SUCCESS, { curHero });
@@ -178,16 +181,20 @@ export class HeroHandler {
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
let isUpStar = oldStarStage + 1 == ABI_STAGE.END; let isUpStar = oldStarStage + 1 == ABI_STAGE.END;
hero.star = isUpStar? oldStar + 1: oldStar;
hero.starStage = isUpStar? ABI_STAGE.START: oldStarStage + 1;
let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.STAR, [hid, isUpStar?1:0]); let update = {
star: isUpStar? oldStar + 1: oldStar,
starStage: isUpStar? ABI_STAGE.START: oldStarStage + 1
}
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAR, sid, roleId, hero, update);
if(isUpStar) await calAllHeroCe(HERO_SYSTEM_TYPE.STAR, sid, roleId, {}, [hid, isUpStar?1:0]); // 升星可能影响到百家学院全局加成
const curHero = { const curHero = {
hid, hid,
star : heros[0].star, star : hero.star,
starStage : heros[0].starStage, starStage : hero.starStage,
colorStar: heros[0].colorStar, colorStar: hero.colorStar,
colorStarStage: heros[0].colorStarStage colorStarStage: hero.colorStarStage
} }
return resResult(STATUS.SUCCESS, {isUpStar, curHero}); return resResult(STATUS.SUCCESS, {isUpStar, curHero});
} }
@@ -224,11 +231,14 @@ export class HeroHandler {
let costResult = await handleCost(roleId, sid, [{id: pieceId, count: fragmentNum}]); let costResult = await handleCost(roleId, sid, [{id: pieceId, count: fragmentNum}]);
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
hero.quality ++; hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, hero, {
let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.QUALITY, [hid]); quality: hero.quality + 1
});
await calAllHeroCe(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, {}, [hid, 0]); // 升品可能影响到百家学院全局加成
const curHero = { const curHero = {
hid, hid,
quality : heros[0].quality quality : hero.quality
} }
return resResult(STATUS.SUCCESS, {curHero}); return resResult(STATUS.SUCCESS, {curHero});
} }
@@ -270,16 +280,21 @@ export class HeroHandler {
let isWakeUp = oldColorStar == 0; let isWakeUp = oldColorStar == 0;
let isUpStar = isWakeUp || oldColorStarStage + 1 == ABI_STAGE.END; let isUpStar = isWakeUp || oldColorStarStage + 1 == ABI_STAGE.END;
hero.colorStar = isUpStar? oldColorStar + 1: oldColorStar;
hero.colorStarStage = isUpStar? ABI_STAGE.START: oldColorStarStage + 1;
let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.COLORSTAR, [hid, isUpStar?1:0, isWakeUp?1:0]); let update = {
colorStar: isUpStar? oldColorStar + 1: oldColorStar,
colorStarStage: isUpStar? ABI_STAGE.START: oldColorStarStage + 1
}
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, hero, update);
if(isUpStar) await calAllHeroCe(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, {}, [hid, isUpStar?1:0]); // 升星可能影响到百家学院全局加成
const curHero = { const curHero = {
hid, hid,
star : heros[0].star, star : hero.star,
starStage : heros[0].starStage, starStage : hero.starStage,
colorStar: heros[0].colorStar, colorStar: hero.colorStar,
colorStarStage: heros[0].colorStarStage colorStarStage: hero.colorStarStage
} }
return resResult(STATUS.SUCCESS, {isUpStar, curHero}); return resResult(STATUS.SUCCESS, {isUpStar, curHero});
} }
@@ -290,26 +305,30 @@ export class HeroHandler {
let sid: string = session.get('sid'); let sid: string = session.get('sid');
let { hid } = msg; let { hid } = msg;
let hero = await HeroModel.findByHidAndRole(hid, roleId); let hero = await HeroModel.findByHidAndRole(hid, roleId);
if (!hero) if (!hero) return resResult(STATUS.HERO_NOT_FIND);
return resResult(STATUS.HERO_NOT_FIND);
let heroJob = gameData.job.get(hero.job); let dicJob = gameData.job.get(hero.job);
if (hero.jobStage >= 6) if(!dicJob) return resResult(STATUS.DIC_DATA_NOT_FOUND);
if (hero.jobStage >= ABI_STAGE.END)
return resResult(STATUS.HERO_JOB_STAGE_REACH_MAX_STAGE); return resResult(STATUS.HERO_JOB_STAGE_REACH_MAX_STAGE);
if (hero.job >= getMaxGradeByjobClass(heroJob.job_class)) if (hero.job >= getMaxGradeByjobClass(dicJob.job_class))
return resResult(STATUS.HERO_JOB_REACH_MAX_STAGE); return resResult(STATUS.HERO_JOB_REACH_MAX_STAGE);
let consume = new Array<RewardInter>(); let consume = new Array<RewardInter>();
if(heroJob.trainingConsume[hero.jobStage]) { if(dicJob.trainingConsume[hero.jobStage]) {
consume.push(heroJob.trainingConsume[hero.jobStage]); consume.push(dicJob.trainingConsume[hero.jobStage]);
} }
let result = await handleCost(roleId, sid, consume); let result = await handleCost(roleId, sid, consume);
if(!result) { if(!result) {
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
} }
hero.jobStage = hero.jobStage +1;
//重算战力并下发 //重算战力并下发
let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.TRAIN); hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TRAIN, sid, roleId, hero, {
return resResult(STATUS.SUCCESS, { curHero: {hid : heros[0].hid, job : heros[0].job, jobStage: heros[0].jobStage}}); jobStage: hero.jobStage + 1
});
return resResult(STATUS.SUCCESS, { curHero: {hid : hero.hid, job : hero.job, jobStage: hero.jobStage}});
} }
//进阶 //进阶
@@ -331,27 +350,30 @@ export class HeroHandler {
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
} }
let nextHeroJob = getJobByGradeAndClass(heroJob.job_class, heroJob.grade + 1); let nextHeroJob = getJobByGradeAndClass(heroJob.job_class, heroJob.grade + 1);
hero.job = nextHeroJob.jobid;
hero.jobStage = 0;
//重算战力并下发 //重算战力并下发
let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.STAGEUP, [curJob]); let update = {
return resResult(STATUS.SUCCESS, { curHero: {hid : heros[0].hid, job : heros[0].job, jobStage : heros[0].jobStage}}); job: nextHeroJob.jobid,
jobStage: 0
}
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAGEUP, sid, roleId, hero, update);
return resResult(STATUS.SUCCESS, { curHero: {hid : hero.hid, job : hero.job, jobStage : hero.jobStage}});
} }
//激活羁绊 //激活羁绊
async heroConectionActivate(msg: {shipId: number}, session: BackendSession) { async heroConectionActivate(msg: { shipId: number }, session: BackendSession) {
let roleId: string = session.get('roleId'); let roleId: string = session.get('roleId');
let sid: string = session.get('sid'); let sid: string = session.get('sid');
let { shipId } = msg; let { shipId } = msg;
let shipHidAndLevel = gameData.friendShipHidAandIds.get(shipId); let shipHidAndLevel = gameData.friendShipHidAandIds.get(shipId);
if (!shipHidAndLevel) if (!shipHidAndLevel) return resResult(STATUS.HERO_CONECTION_IS_NOT_EXIT);
return resResult(STATUS.HERO_CONECTION_IS_NOT_EXIT);
let hero = await HeroModel.findByHidAndRole(shipHidAndLevel.actorId, roleId); let hero = await HeroModel.findByHidAndRole(shipHidAndLevel.actorId, roleId);
if (!hero) if (!hero) return resResult(STATUS.HERO_NOT_FIND);
return resResult(STATUS.HERO_NOT_FIND);
let heroConnections: Connect[] = deepCopy(hero.connections);
let flag = true; let flag = true;
let level = 1; let level = 1;
for (let conection of hero.connections) { for (let conection of heroConnections) {
if (conection.shipId == shipId ) { if (conection.shipId == shipId ) {
if (conection.level >= shipHidAndLevel.level) { if (conection.level >= shipHidAndLevel.level) {
return resResult(STATUS.HERO_CONECTION_IS_MAX_LEVEL); return resResult(STATUS.HERO_CONECTION_IS_MAX_LEVEL);
@@ -363,7 +385,7 @@ export class HeroHandler {
} }
} }
if (!!flag) { if (!!flag) {
hero.connections.push({shipId, level}); heroConnections.push({shipId, level});
} }
let friendShip = getFriendShipById(shipId, level); let friendShip = getFriendShipById(shipId, level);
if (hero.star < friendShip.level) if (hero.star < friendShip.level)
@@ -383,8 +405,8 @@ export class HeroHandler {
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
} }
//重算战力并下发 //重算战力并下发
let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.CONNECT, [shipId, level]); hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.CONNECT, sid, roleId, hero, { connections: heroConnections }, [shipId]);
return resResult(STATUS.SUCCESS, { curHero: {hid : heros[0].hid, connections : heros[0].connections}}); return resResult(STATUS.SUCCESS, { curHero: {hid : hero.hid, connections : hero.connections}});
} }
//赠送(包括一键赠送) //赠送(包括一键赠送)
@@ -442,8 +464,6 @@ export class HeroHandler {
} }
let newLv = getFavourLvByExp(newExp); let newLv = getFavourLvByExp(newExp);
hero.favour = newExp;
hero.favourLv = newLv;
let result = await handleCost(roleId, sid, material); let result = await handleCost(roleId, sid, material);
if(!result) { if(!result) {
@@ -451,11 +471,13 @@ export class HeroHandler {
} }
//重算战力并下发 //重算战力并下发
if (oldLv != hero.favourLv) { if (oldLv != hero.favourLv) {
await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.FAVOUR, [oldLv]); await calPlayerCeAndSave(HERO_SYSTEM_TYPE.FAVOUR, sid, roleId, hero, {
favour: newExp, favourLv: newLv
}, [oldLv]);
} else { } else {
await HeroModel.updateHeroInfo(roleId, hero.hid, hero); await HeroModel.updateHeroInfo(roleId, hero.hid, hero);
} }
return resResult(STATUS.SUCCESS, { curHero: {hid : hero.hid, favour : hero.favour, favourLv : hero.favourLv}}); return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, favour: hero.favour, favourLv: hero.favourLv } });
} }
//穿带时装 //穿带时装
@@ -464,14 +486,15 @@ export class HeroHandler {
let sid: string = session.get('sid'); let sid: string = session.get('sid');
let { id } = msg; let { id } = msg;
let skinInfo = gameData.fashion.get(id); let skinInfo = gameData.fashion.get(id);
if (!skinInfo) if (!skinInfo) return resResult(STATUS.HERO_SKIN_NOT_FIND);
return resResult(STATUS.HERO_SKIN_NOT_FIND);
let hero = await HeroModel.findByHidAndRole(skinInfo.actorId, roleId); let hero = await HeroModel.findByHidAndRole(skinInfo.actorId, roleId);
if (!hero) if (!hero) return resResult(STATUS.HERO_NOT_FIND);
return resResult(STATUS.HERO_NOT_FIND);
let heroSkins = deepCopy(hero.skins);
let result = false; let result = false;
let lastSkinId: number; let lastSkinId: number;
for (let skin of hero.skins) { for (let skin of heroSkins) {
if (skin.id == id) { if (skin.id == id) {
if (!!skin.enable) { if (!!skin.enable) {
return resResult(STATUS.HERO_SKIN_IS_EQUIPED); return resResult(STATUS.HERO_SKIN_IS_EQUIPED);
@@ -488,7 +511,7 @@ export class HeroHandler {
if (!result) { if (!result) {
return resResult(STATUS.HERO_SKIN_NOT_FIND); return resResult(STATUS.HERO_SKIN_NOT_FIND);
} }
await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.SKIN, [id, lastSkinId]); await calPlayerCeAndSave(HERO_SYSTEM_TYPE.SKIN, sid, roleId, hero, { skins: heroSkins }, [id, lastSkinId]);
return resResult(STATUS.SUCCESS, {curHero: {hid : hero.hid, skins : hero.skins} }); return resResult(STATUS.SUCCESS, {curHero: {hid : hero.hid, skins : hero.skins} });
} }
} }