武将重生:添加消耗记录
This commit is contained in:
@@ -15,6 +15,7 @@ import { JewelModel } from "../../../db/Jewel";
|
|||||||
import { getJewelRandSe } from "../../../pubUtils/itemUtils";
|
import { getJewelRandSe } from "../../../pubUtils/itemUtils";
|
||||||
import { checkTaskInEquipQualityUp, checkTaskInEquipStarUp, checkTaskInPutJewel, checkTaskInPutStone } from '../../../services/equipService';
|
import { checkTaskInEquipQualityUp, checkTaskInEquipStarUp, checkTaskInPutJewel, checkTaskInPutStone } from '../../../services/equipService';
|
||||||
import { pushEquipQualityMax, pushEquipStarMax } from "../../../services/sysChatService";
|
import { pushEquipQualityMax, pushEquipStarMax } from "../../../services/sysChatService";
|
||||||
|
import { addConsumeToHero } from "../../../services/roleService";
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
new HandlerService(app, {});
|
new HandlerService(app, {});
|
||||||
@@ -95,7 +96,11 @@ export class EquipHandler {
|
|||||||
|
|
||||||
let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, { lv: newLv });
|
let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, { lv: newLv });
|
||||||
|
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId]);
|
let update = {
|
||||||
|
ePlace: newEplace,
|
||||||
|
consumes: addConsumeToHero(hero.consumes, consumes)
|
||||||
|
}
|
||||||
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, sid, roleId, hero, update, [ePlaceId]);
|
||||||
await checkTaskInEquipLvUp(serverId, roleId, sid, oldEplace, newEplace, [ePlaceId]);
|
await checkTaskInEquipLvUp(serverId, roleId, sid, oldEplace, newEplace, [ePlaceId]);
|
||||||
|
|
||||||
const curHero = {
|
const curHero = {
|
||||||
@@ -142,7 +147,11 @@ export class EquipHandler {
|
|||||||
|
|
||||||
let { newEplace, updatedEplace } = updateEplaces(ePlace, eplaceIds);
|
let { newEplace, updatedEplace } = updateEplaces(ePlace, eplaceIds);
|
||||||
|
|
||||||
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, sid, roleId, hero, { ePlace: newEplace }, [...eplaceIds.keys()]);
|
let update = {
|
||||||
|
ePlace: newEplace,
|
||||||
|
consumes: addConsumeToHero(hero.consumes, consumes),
|
||||||
|
}
|
||||||
|
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, sid, roleId, hero, update, [...eplaceIds.keys()]);
|
||||||
await checkTaskInEquipLvUp(serverId, roleId, sid, ePlace, newEplace, [...eplaceIds.keys()]);
|
await checkTaskInEquipLvUp(serverId, roleId, sid, ePlace, newEplace, [...eplaceIds.keys()]);
|
||||||
|
|
||||||
const curHero = {
|
const curHero = {
|
||||||
@@ -172,7 +181,7 @@ export class EquipHandler {
|
|||||||
let nextEquipQuality = getNextEquipQuality(curEquip.equipId, curEquip.quality, curEquip.qualityStage);
|
let nextEquipQuality = getNextEquipQuality(curEquip.equipId, curEquip.quality, curEquip.qualityStage);
|
||||||
if(!nextEquipQuality) return resResult(STATUS.EQUIP_QUALITY_MAX);
|
if(!nextEquipQuality) return resResult(STATUS.EQUIP_QUALITY_MAX);
|
||||||
|
|
||||||
let update = {
|
let equipUpdate = {
|
||||||
quality: curEquip.quality,
|
quality: curEquip.quality,
|
||||||
qualityStage: curEquip.qualityStage,
|
qualityStage: curEquip.qualityStage,
|
||||||
}
|
}
|
||||||
@@ -184,27 +193,32 @@ export class EquipHandler {
|
|||||||
while(nextEquipQuality && nextEquipQuality.quality == curEquip.quality) {
|
while(nextEquipQuality && nextEquipQuality.quality == curEquip.quality) {
|
||||||
let isEnough = await check.decrease(nextEquipQuality.consume);
|
let isEnough = await check.decrease(nextEquipQuality.consume);
|
||||||
if(!isEnough) break; // 消耗不足
|
if(!isEnough) break; // 消耗不足
|
||||||
update.qualityStage++;
|
equipUpdate.qualityStage++;
|
||||||
nextEquipQuality = getNextEquipQuality(curEquip.equipId, update.quality, update.qualityStage)
|
nextEquipQuality = getNextEquipQuality(curEquip.equipId, equipUpdate.quality, equipUpdate.qualityStage)
|
||||||
}
|
}
|
||||||
} else { // 往下一阶,包括满点之后的升品
|
} else { // 往下一阶,包括满点之后的升品
|
||||||
let isEnough = await check.decrease(nextEquipQuality.consume);
|
let isEnough = await check.decrease(nextEquipQuality.consume);
|
||||||
if(isEnough) {
|
if(isEnough) {
|
||||||
update.quality = nextEquipQuality.quality;
|
equipUpdate.quality = nextEquipQuality.quality;
|
||||||
update.qualityStage = nextEquipQuality.point;
|
equipUpdate.qualityStage = nextEquipQuality.point;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(update.quality == curEquip.quality && update.qualityStage == curEquip.qualityStage) {
|
if(equipUpdate.quality == curEquip.quality && equipUpdate.qualityStage == curEquip.qualityStage) {
|
||||||
return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
let consumes = check.getConsume();
|
let consumes = check.getConsume();
|
||||||
let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.EQUIP_QUALITYUP);
|
let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.EQUIP_QUALITYUP);
|
||||||
if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
let isUpQuality = update.quality != curEquip.quality;
|
let isUpQuality = equipUpdate.quality != curEquip.quality;
|
||||||
|
|
||||||
let { newEplace, updatedEplace, newEquip } = updateEplace(oldEplace, ePlaceId, update);
|
let { newEplace, updatedEplace, newEquip } = updateEplace(oldEplace, ePlaceId, equipUpdate);
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_QUALITY, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId]);
|
|
||||||
|
let update = {
|
||||||
|
ePlace: newEplace,
|
||||||
|
consumes: addConsumeToHero(hero.consumes, consumes),
|
||||||
|
}
|
||||||
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_QUALITY, sid, roleId, hero, update, [ePlaceId]);
|
||||||
|
|
||||||
await checkTaskInEquipQualityUp(serverId, roleId, sid, oldEplace, newEplace, ePlaceId, hid, isUpQuality);
|
await checkTaskInEquipQualityUp(serverId, roleId, sid, oldEplace, newEplace, ePlaceId, hid, isUpQuality);
|
||||||
pushEquipQualityMax(roleId, roleName, serverId, hid, newEquip, isUpQuality);
|
pushEquipQualityMax(roleId, roleName, serverId, hid, newEquip, isUpQuality);
|
||||||
@@ -232,7 +246,7 @@ export class EquipHandler {
|
|||||||
let curEquip = oldEplace.find(cur => cur.id == ePlaceId);
|
let curEquip = oldEplace.find(cur => cur.id == ePlaceId);
|
||||||
if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND);
|
if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND);
|
||||||
|
|
||||||
let update = {
|
let equipUpdate = {
|
||||||
star: curEquip.star,
|
star: curEquip.star,
|
||||||
starStage: curEquip.starStage,
|
starStage: curEquip.starStage,
|
||||||
}
|
}
|
||||||
@@ -254,8 +268,8 @@ export class EquipHandler {
|
|||||||
|
|
||||||
let isEnough = await check.decrease(dicEquipStar.subConsume);
|
let isEnough = await check.decrease(dicEquipStar.subConsume);
|
||||||
if(isEnough) {
|
if(isEnough) {
|
||||||
update.star = nextEquipStar.star;
|
equipUpdate.star = nextEquipStar.star;
|
||||||
update.starStage = 0;
|
equipUpdate.starStage = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // 升小点,包括一键升到满小点和升一个小点
|
} else { // 升小点,包括一键升到满小点和升一个小点
|
||||||
@@ -263,19 +277,23 @@ export class EquipHandler {
|
|||||||
for(let stage = curEquip.starStage + 1; stage <= toStage; stage++) {
|
for(let stage = curEquip.starStage + 1; stage <= toStage; stage++) {
|
||||||
let isEnough = await check.decrease(dicEquipStar.mainConsume);
|
let isEnough = await check.decrease(dicEquipStar.mainConsume);
|
||||||
if(!isEnough) break; // 消耗不足
|
if(!isEnough) break; // 消耗不足
|
||||||
update.starStage = stage;
|
equipUpdate.starStage = stage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(update.star == curEquip.star && update.starStage == curEquip.starStage) {
|
if(equipUpdate.star == curEquip.star && equipUpdate.starStage == curEquip.starStage) {
|
||||||
return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
let consumes = check.getConsume();
|
let consumes = check.getConsume();
|
||||||
let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.EQUIP_STARUP);
|
let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.EQUIP_STARUP);
|
||||||
if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
let { newEplace, updatedEplace, newEquip } = updateEplace(oldEplace, ePlaceId, update);
|
let { newEplace, updatedEplace, newEquip } = updateEplace(oldEplace, ePlaceId, equipUpdate);
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STAR, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId]);
|
let update = {
|
||||||
|
ePlace: newEplace,
|
||||||
|
consumes: addConsumeToHero(hero.consumes, consumes)
|
||||||
|
}
|
||||||
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STAR, sid, roleId, hero, update, [ePlaceId]);
|
||||||
|
|
||||||
await checkTaskInEquipStarUp(serverId, roleId, sid, oldEplace, newEplace, ePlaceId, hid, isUpStar);
|
await checkTaskInEquipStarUp(serverId, roleId, sid, oldEplace, newEplace, ePlaceId, hid, isUpStar);
|
||||||
pushEquipStarMax(roleId, roleName, serverId, hid, newEquip, isUpStar);
|
pushEquipStarMax(roleId, roleName, serverId, hid, newEquip, isUpStar);
|
||||||
@@ -395,17 +413,26 @@ export class EquipHandler {
|
|||||||
return resResult(STATUS.STONE_CANNOT_SUIT);
|
return resResult(STATUS.STONE_CANNOT_SUIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let updateConsumes = hero.consumes;
|
||||||
|
if(gid > 0) {
|
||||||
|
addConsumeToHero(updateConsumes, [{ id: gid, count: 1 }]);
|
||||||
let consumeResult = await handleCost(roleId, sid, [{ id: gid, count: 1 }], ITEM_CHANGE_REASON.EQUIP_FILL_HOLE);
|
let consumeResult = await handleCost(roleId, sid, [{ id: gid, count: 1 }], ITEM_CHANGE_REASON.EQUIP_FILL_HOLE);
|
||||||
if (!consumeResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
if (!consumeResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
|
||||||
if(curStone.stone > 0) { // 返回石头
|
if(curStone.stone > 0) { // 返回石头
|
||||||
|
addConsumeToHero(updateConsumes, [{ id: curStone.stone, count: -1 }]);
|
||||||
await addItems(roleId, roleName, sid, [{ id: curStone.stone, count: 1 }], ITEM_CHANGE_REASON.EQUIP_FILL_HOLE);
|
await addItems(roleId, roleName, sid, [{ id: curStone.stone, count: 1 }], ITEM_CHANGE_REASON.EQUIP_FILL_HOLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
let newStone = updateStone(curEquip.stones, stonesId, gid);
|
let newStone = updateStone(curEquip.stones, stonesId, gid);
|
||||||
let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, { stones: newStone });
|
let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, { stones: newStone });
|
||||||
let jewel = await JewelModel.findbySeqId(curEquip.jewel);
|
let jewel = await JewelModel.findbySeqId(curEquip.jewel);
|
||||||
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STONE, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId], { jewel });
|
let update = {
|
||||||
|
ePlace: newEplace,
|
||||||
|
consumes: updateConsumes,
|
||||||
|
}
|
||||||
|
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STONE, sid, roleId, hero, update, [ePlaceId], { jewel });
|
||||||
await checkTaskInPutStone(serverId, roleId, sid, oldEplace, newEplace, ePlaceId, jewel);
|
await checkTaskInPutStone(serverId, roleId, sid, oldEplace, newEplace, ePlaceId, jewel);
|
||||||
|
|
||||||
let curHero = {
|
let curHero = {
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ import { PvpDefenseModel } from '../../../db/PvpDefense';
|
|||||||
import { checkTaskWithHero, checkTask, checkActivityTask } from '../../../services/taskService';
|
import { checkTaskWithHero, checkTask, checkActivityTask } from '../../../services/taskService';
|
||||||
import { pick } from 'underscore';
|
import { pick } from 'underscore';
|
||||||
import { updateEplaces } from '../../../services/equipService';
|
import { updateEplaces } from '../../../services/equipService';
|
||||||
|
import { addConsumeToHero } from '../../../services/roleService';
|
||||||
|
import { getCoinObject } from '../../../pubUtils/itemUtils';
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
new HandlerService(app, {});
|
new HandlerService(app, {});
|
||||||
@@ -116,7 +118,8 @@ export class HeroHandler {
|
|||||||
|
|
||||||
let update = {
|
let update = {
|
||||||
lv: newLv,
|
lv: newLv,
|
||||||
exp: newExp
|
exp: newExp,
|
||||||
|
consumes: addConsumeToHero(hero.consumes, material)
|
||||||
}
|
}
|
||||||
|
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.LVUP, sid, roleId, hero, update);
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.LVUP, sid, roleId, hero, update);
|
||||||
@@ -180,7 +183,8 @@ export class HeroHandler {
|
|||||||
|
|
||||||
let update = {
|
let update = {
|
||||||
star: isUpStar ? oldStar + 1 : oldStar,
|
star: isUpStar ? oldStar + 1 : oldStar,
|
||||||
starStage: isUpStar ? ABI_STAGE.START : newStarStage
|
starStage: isUpStar ? ABI_STAGE.START : newStarStage,
|
||||||
|
consumes: addConsumeToHero(hero.consumes, consumes)
|
||||||
}
|
}
|
||||||
|
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAR, sid, roleId, hero, update);
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAR, sid, roleId, hero, update);
|
||||||
@@ -237,12 +241,15 @@ export class HeroHandler {
|
|||||||
if (!curDicHeroQualityUp) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
if (!curDicHeroQualityUp) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
let { fragmentNum } = curDicHeroQualityUp;
|
let { fragmentNum } = curDicHeroQualityUp;
|
||||||
|
|
||||||
let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: fragmentNum }], ITEM_CHANGE_REASON.HERO_QUALITY_UP);
|
let material = [{ id: pieceId, count: fragmentNum }];
|
||||||
|
let costResult = await handleCost(roleId, sid, material, ITEM_CHANGE_REASON.HERO_QUALITY_UP);
|
||||||
if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, hero, {
|
let update = {
|
||||||
quality: hero.quality + 1
|
quality: hero.quality + 1,
|
||||||
});
|
consumes: addConsumeToHero(hero.consumes, material)
|
||||||
|
}
|
||||||
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, hero, update);
|
||||||
await calAllHeroCe(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, {}, [hid, 0]); // 升品可能影响到百家学院全局加成
|
await calAllHeroCe(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, {}, [hid, 0]); // 升品可能影响到百家学院全局加成
|
||||||
|
|
||||||
// 任务
|
// 任务
|
||||||
@@ -313,7 +320,8 @@ export class HeroHandler {
|
|||||||
let update = {
|
let update = {
|
||||||
quality: isWakeUp? quality + 1: quality,
|
quality: isWakeUp? quality + 1: quality,
|
||||||
colorStar: isUpStar ? oldColorStar + 1 : oldColorStar,
|
colorStar: isUpStar ? oldColorStar + 1 : oldColorStar,
|
||||||
colorStarStage: isUpStar ? ABI_STAGE.START : newColorStarStage
|
colorStarStage: isUpStar ? ABI_STAGE.START : newColorStarStage,
|
||||||
|
consumes: addConsumeToHero(hero.consumes, consumes)
|
||||||
}
|
}
|
||||||
|
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, hero, update);
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, hero, update);
|
||||||
@@ -378,9 +386,11 @@ export class HeroHandler {
|
|||||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
|
|
||||||
//重算战力并下发
|
//重算战力并下发
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TRAIN, sid, roleId, hero, {
|
let update = {
|
||||||
jobStage: newJobStage
|
jobStage: newJobStage,
|
||||||
});
|
consumes: addConsumeToHero(hero.consumes, consumes)
|
||||||
|
}
|
||||||
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TRAIN, sid, roleId, hero, update);
|
||||||
// 任务
|
// 任务
|
||||||
await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_TRAIN, hero, [oldJob, oldJobStage]);
|
await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_TRAIN, hero, [oldJob, oldJobStage]);
|
||||||
await checkTask(roleId, sid, TASK_TYPE.HERO_TRAIN_SUM, newJobStage - oldJobStage, true, {});
|
await checkTask(roleId, sid, TASK_TYPE.HERO_TRAIN_SUM, newJobStage - oldJobStage, true, {});
|
||||||
@@ -407,7 +417,8 @@ export class HeroHandler {
|
|||||||
return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL);
|
return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL);
|
||||||
if (curJob >= getMaxGradeByjobClass(heroJob.job_class))
|
if (curJob >= getMaxGradeByjobClass(heroJob.job_class))
|
||||||
return resResult(STATUS.HERO_JOB_REACH_MAX_STAGE);
|
return resResult(STATUS.HERO_JOB_REACH_MAX_STAGE);
|
||||||
let result = await handleCost(roleId, sid, heroJob.upGradeConsume, ITEM_CHANGE_REASON.HERO_JOB_STAGEUP);
|
let consumes = heroJob.upGradeConsume;
|
||||||
|
let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.HERO_JOB_STAGEUP);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
@@ -417,7 +428,8 @@ export class HeroHandler {
|
|||||||
//重算战力并下发
|
//重算战力并下发
|
||||||
let update = {
|
let update = {
|
||||||
job: nextHeroJob.jobid,
|
job: nextHeroJob.jobid,
|
||||||
jobStage: 0
|
jobStage: 0,
|
||||||
|
consumes: addConsumeToHero(hero.consumes, consumes)
|
||||||
}
|
}
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAGEUP, sid, roleId, hero, update);
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAGEUP, sid, roleId, hero, update);
|
||||||
// 任务
|
// 任务
|
||||||
@@ -465,12 +477,17 @@ export class HeroHandler {
|
|||||||
if (member.star + member.colorStar < friendShip.level)
|
if (member.star + member.colorStar < friendShip.level)
|
||||||
return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL);
|
return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL);
|
||||||
}
|
}
|
||||||
let result = await handleCost(roleId, sid, [{ id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.COIN), count: friendShip.costCoin }], ITEM_CHANGE_REASON.HERO_CONNECT_ACTIVE);
|
let consumes = [getCoinObject(friendShip.costCoin)];
|
||||||
|
let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.HERO_CONNECT_ACTIVE);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
|
let update = {
|
||||||
|
connections: heroConnections,
|
||||||
|
consumes: addConsumeToHero(hero.consumes, consumes)
|
||||||
|
}
|
||||||
//重算战力并下发
|
//重算战力并下发
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.CONNECT, sid, roleId, hero, { connections: heroConnections }, [shipId]);
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.CONNECT, sid, roleId, hero, update, [shipId]);
|
||||||
|
|
||||||
// 任务
|
// 任务
|
||||||
await checkTask(roleId, sid, TASK_TYPE.HERO_CONNECT, 1, true, { connectLv: level })
|
await checkTask(roleId, sid, TASK_TYPE.HERO_CONNECT, 1, true, { connectLv: level })
|
||||||
@@ -540,18 +557,23 @@ export class HeroHandler {
|
|||||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let updateConsume = addConsumeToHero(hero.consumes, material);
|
||||||
|
let update = {
|
||||||
|
favour: newExp,
|
||||||
|
favourLv: newLv,
|
||||||
|
consumes: updateConsume
|
||||||
|
}
|
||||||
|
|
||||||
//重算战力并下发
|
//重算战力并下发
|
||||||
if (oldLv != newLv) {
|
if (oldLv != newLv) {
|
||||||
await unlockFigure(sid, roleId, [{ type: FIGURE_UNLOCK_CONDITION.HERO_FAVOR, paramHid: hero.hid, paramFavourLv: hero.favourLv }]);
|
await unlockFigure(sid, roleId, [{ type: FIGURE_UNLOCK_CONDITION.HERO_FAVOR, paramHid: hero.hid, paramFavourLv: hero.favourLv }]);
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.FAVOUR, sid, roleId, hero, {
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.FAVOUR, sid, roleId, hero, update, [oldLv]);
|
||||||
favour: newExp, favourLv: newLv
|
|
||||||
}, [oldLv]);
|
|
||||||
|
|
||||||
// 任务
|
// 任务
|
||||||
await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, hero, [oldLv]);
|
await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, hero, [oldLv]);
|
||||||
await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_FAVOUR_LV, 1, { lv: newLv, oldLv });
|
await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_FAVOUR_LV, 1, { lv: newLv, oldLv });
|
||||||
} else {
|
} else {
|
||||||
hero = await HeroModel.updateHeroInfo(roleId, hero.hid, { favour: newExp, favourLv: newLv });
|
hero = await HeroModel.updateHeroInfo(roleId, hero.hid, update);
|
||||||
}
|
}
|
||||||
return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, favour: hero.favour, favourLv: hero.favourLv, cost: material } });
|
return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, favour: hero.favour, favourLv: hero.favourLv, cost: material } });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { Teraph, RoleModel, RoleType, RoleUpdate } from '../db/Role';
|
|||||||
import { SCHOOL } from '../pubUtils/dicParam';
|
import { SCHOOL } from '../pubUtils/dicParam';
|
||||||
import { gameData } from '../pubUtils/data';
|
import { gameData } from '../pubUtils/data';
|
||||||
import { SchoolModel } from '../db/School';
|
import { SchoolModel } from '../db/School';
|
||||||
import { SclResultInter, SclPosInter, RewardInter } from '../pubUtils/interface';
|
import { SclResultInter, SclPosInter, RewardInter, ItemInter } from '../pubUtils/interface';
|
||||||
import { CheckMeterial } from './rewardService';
|
import { CheckMeterial } from './rewardService';
|
||||||
import { HeroUpdate } from '../db/Hero';
|
import { HeroUpdate } from '../db/Hero';
|
||||||
import { SkinUpdate } from '../db/Skin';
|
import { SkinUpdate } from '../db/Skin';
|
||||||
@@ -153,9 +153,22 @@ export function getInitHeroById(hid: number) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function addConsumeToHero(oldConsume: Reward[], consumes: RewardInter[]) {
|
export function addConsumeToHero(oldConsume: Reward[] = [], consumes: ItemInter[] = []) {
|
||||||
|
let consumeMap = new Map<number, number>();
|
||||||
|
for(let { id, count = 1 } of consumes) {
|
||||||
|
consumeMap.set(id, count);
|
||||||
|
}
|
||||||
let newConsume: Reward[] = [];
|
let newConsume: Reward[] = [];
|
||||||
for(let {id, count} of oldConsume) {
|
for(let {id, count} of oldConsume) {
|
||||||
|
if(consumeMap.has(id)) {
|
||||||
|
newConsume.push({ id, count: count + consumeMap.get(id)});
|
||||||
|
consumeMap.delete(id);
|
||||||
|
} else {
|
||||||
|
newConsume.push({ id, count });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for(let [id, count] of consumeMap) {
|
||||||
|
newConsume.push({ id, count });
|
||||||
|
}
|
||||||
|
return newConsume;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user