✨ feat(重生): 重生不重置星级
This commit is contained in:
@@ -3,7 +3,7 @@ import { handleCost, addItems, unlockFigure, getCoinObject, getGoldObject } from
|
|||||||
import { resResult, deepCopy, parseGoodStr } from '../../../pubUtils/util';
|
import { resResult, deepCopy, parseGoodStr } from '../../../pubUtils/util';
|
||||||
import { STATUS } from '../../../consts/statusCode';
|
import { STATUS } from '../../../consts/statusCode';
|
||||||
import { HeroModel, Connect, HeroSkin, HeroUpdate, EPlace, Talent } from '../../../db/Hero';
|
import { HeroModel, Connect, HeroSkin, HeroUpdate, EPlace, Talent } from '../../../db/Hero';
|
||||||
import { CURRENCY_BY_TYPE, CURRENCY_TYPE, CONSUME_TYPE, HERO_GROW_MAX, HERO_SYSTEM_TYPE, ABI_STAGE, DEBUG_MAGIC_WORD, HERO_INITIAL_QUALITY, REDIS_KEY, TASK_TYPE, ITEM_CHANGE_REASON } from '../../../consts';
|
import { CURRENCY_BY_TYPE, CURRENCY_TYPE, CONSUME_TYPE, HERO_GROW_MAX, HERO_SYSTEM_TYPE, ABI_STAGE, DEBUG_MAGIC_WORD, HERO_INITIAL_QUALITY, REDIS_KEY, TASK_TYPE, ITEM_CHANGE_REASON, CHECK_HERO_CONSUME } from '../../../consts';
|
||||||
import { RoleModel } from '../../../db/Role';
|
import { RoleModel } from '../../../db/Role';
|
||||||
import { ItemModel } from '../../../db/Item';
|
import { ItemModel } from '../../../db/Item';
|
||||||
import { gameData, getHeroExpByLv, getHeroStarByQuality, getHeroWakeByQuality, getHeroLvByExp, getMaxGradeByjobClass, getJobByGradeAndClass, getConnectLvByExp, getEquipByJobClassAndEPlace, getScollByStar, getExpByLv, getConnectMaxLv, getFriendShipByIdAndLv } from '../../../pubUtils/data';
|
import { gameData, getHeroExpByLv, getHeroStarByQuality, getHeroWakeByQuality, getHeroLvByExp, getMaxGradeByjobClass, getJobByGradeAndClass, getConnectLvByExp, getEquipByJobClassAndEPlace, getScollByStar, getExpByLv, getConnectMaxLv, getFriendShipByIdAndLv } from '../../../pubUtils/data';
|
||||||
@@ -14,7 +14,7 @@ import { PvpDefenseModel } from '../../../db/PvpDefense';
|
|||||||
import { checkTask, checkTaskInHeroGiveFavor, checkTaskInHeroQUalityUp, checkTaskInHeroStarUp, checkTaskInHeroTrain, checkTaskInHeroWakeUp } from '../../../services/task/taskService';
|
import { checkTask, checkTaskInHeroGiveFavor, checkTaskInHeroQUalityUp, checkTaskInHeroStarUp, checkTaskInHeroTrain, checkTaskInHeroWakeUp } from '../../../services/task/taskService';
|
||||||
import { isNumber, pick } from 'underscore';
|
import { isNumber, pick } from 'underscore';
|
||||||
import { updateEplaces } from '../../../services/equipService';
|
import { updateEplaces } from '../../../services/equipService';
|
||||||
import { addConnect, addConsumeToHero, checkUnlockTalentCondition, initSkinTalent, updateSkinTalent } from '../../../services/roleService';
|
import { addConnect, addConsumeToHero, calStarUpConsume, checkUnlockTalentCondition, initSkinTalent, updateSkinTalent } from '../../../services/roleService';
|
||||||
import { JewelModel, jewelUpdate } from '../../../db/Jewel';
|
import { JewelModel, jewelUpdate } from '../../../db/Jewel';
|
||||||
import { HERO, REBORN } from '../../../pubUtils/dicParam';
|
import { HERO, REBORN } from '../../../pubUtils/dicParam';
|
||||||
import { createHero, createHeroes } from '../../../services/role/createHero';
|
import { createHero, createHeroes } from '../../../services/role/createHero';
|
||||||
@@ -187,7 +187,9 @@ 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)
|
}
|
||||||
|
if(CHECK_HERO_CONSUME) {
|
||||||
|
update['consumes'] = addConsumeToHero(hero.consumes, consumes)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -237,7 +239,9 @@ export class HeroHandler {
|
|||||||
|
|
||||||
let update = {
|
let update = {
|
||||||
quality: hero.quality + 1,
|
quality: hero.quality + 1,
|
||||||
consumes: addConsumeToHero(hero.consumes, material)
|
}
|
||||||
|
if(CHECK_HERO_CONSUME) {
|
||||||
|
update['consumes'] = addConsumeToHero(hero.consumes, material)
|
||||||
}
|
}
|
||||||
|
|
||||||
await SchoolModel.updateByHid(roleId, hid, { hid, star: update.quality });
|
await SchoolModel.updateByHid(roleId, hid, { hid, star: update.quality });
|
||||||
@@ -556,9 +560,9 @@ export class HeroHandler {
|
|||||||
let roleId: string = session.get('roleId');
|
let roleId: string = session.get('roleId');
|
||||||
let { hid } = msg;
|
let { hid } = msg;
|
||||||
|
|
||||||
let hero = await HeroModel.findByHidAndRole(hid, roleId, 'consumes');
|
let hero = await HeroModel.findByHidAndRole(hid, roleId, 'hid consumes star starStage quality');
|
||||||
if(!hero) return resResult(STATUS.HERO_NOT_FIND);
|
if(!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||||
let consumes = hero.consumes||[];
|
let { consumes} = calStarUpConsume(hero);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { previewGoods: consumes.filter(consume => consume.count > 0) });
|
return resResult(STATUS.SUCCESS, { previewGoods: consumes.filter(consume => consume.count > 0) });
|
||||||
}
|
}
|
||||||
@@ -584,19 +588,24 @@ export class HeroHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 皮肤处理
|
// 皮肤处理
|
||||||
let { skins, skinId, consumes, ce, scrollActive } = hero;
|
let { skins, skinId, ce, scrollActive, quality, star, starStage } = hero;
|
||||||
let dicHero = gameData.hero.get(skinId);
|
let dicHero = gameData.hero.get(skinId);
|
||||||
let dicJob = getJobByGradeAndClass(dicHero.jobClass, 0);
|
let dicJob = getJobByGradeAndClass(dicHero.jobClass, 0);
|
||||||
|
|
||||||
|
let { consumes: consumesResult, newConsumes } = calStarUpConsume(hero);
|
||||||
|
|
||||||
let newSkins = initSkinTalent(skins);
|
let newSkins = initSkinTalent(skins);
|
||||||
let dicHeroScroll = getScollByStar(dicHero.quality, dicHero.initialStar, dicHero.quality, dicHero.initialColorStar);
|
let newQuality = quality >= 3? ( dicHero.quality >= 3? dicHero.quality: 3 ): quality;
|
||||||
|
let dicHeroScroll = getScollByStar(dicHero.quality, star, newQuality, dicHero.initialColorStar);
|
||||||
let initInfo = HeroModel.getInitInfo(hid, {
|
let initInfo = HeroModel.getInitInfo(hid, {
|
||||||
job: dicJob.jobid, skins: newSkins, skinId, ce,
|
job: dicJob.jobid, skins: newSkins, skinId, ce,
|
||||||
|
star, starStage, colorStar: dicHero.initialColorStar, colorStarStage: 0, quality: newQuality,
|
||||||
scrollActive: scrollActive,
|
scrollActive: scrollActive,
|
||||||
scrollId: scrollActive? dicHeroScroll.id: 0,
|
scrollId: scrollActive? dicHeroScroll.id: 0,
|
||||||
scrollStar: scrollActive? dicHeroScroll.stars: 0,
|
scrollStar: scrollActive? dicHeroScroll.stars: 0,
|
||||||
scrollQuality: scrollActive? dicHeroScroll.quality: 0,
|
scrollQuality: scrollActive? dicHeroScroll.quality: 0,
|
||||||
scrollColorStar: scrollActive? dicHeroScroll.colorstars: 0,
|
scrollColorStar: scrollActive? dicHeroScroll.colorstars: 0,
|
||||||
|
consumes: newConsumes
|
||||||
});
|
});
|
||||||
|
|
||||||
// 天晶石
|
// 天晶石
|
||||||
@@ -614,7 +623,7 @@ export class HeroHandler {
|
|||||||
|
|
||||||
let school = await SchoolModel.findByHid(roleId, hid);
|
let school = await SchoolModel.findByHid(roleId, hid);
|
||||||
let { curHero } = await calculateCeWithHero(HERO_SYSTEM_TYPE.REBIRTH, roleId, serverId, sid, hid, initInfo, { schoolId: school?.schoolId });
|
let { curHero } = await calculateCeWithHero(HERO_SYSTEM_TYPE.REBIRTH, roleId, serverId, sid, hid, initInfo, { schoolId: school?.schoolId });
|
||||||
let goods = await addItems(roleId, roleName, sid, consumes, ITEM_CHANGE_REASON.REBIRTH);
|
let goods = await addItems(roleId, roleName, sid, consumesResult, ITEM_CHANGE_REASON.REBIRTH);
|
||||||
saveRebirthLog(session, hero);
|
saveRebirthLog(session, hero);
|
||||||
|
|
||||||
const heroResult = new HeroParam(curHero);
|
const heroResult = new HeroParam(curHero);
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import { Channel, pinus } from 'pinus';
|
import { Channel, pinus } from 'pinus';
|
||||||
import { getRandValueByMinMax, getRandEelm, decodeIdCntArrayStr } from '../pubUtils/util';
|
import { getRandValueByMinMax, getRandEelm, decodeIdCntArrayStr } from '../pubUtils/util';
|
||||||
import { DEFAULT_HEROES, LINEUP_NUM, ROLE_SELECT, TALENT_RELATION_TYPE, TERAPH_RANDOM, SYSTEM_OPEN_ID, GuideUnloadNum } from "../consts";
|
import { DEFAULT_HEROES, LINEUP_NUM, ROLE_SELECT, TALENT_RELATION_TYPE, TERAPH_RANDOM, SYSTEM_OPEN_ID, GuideUnloadNum, CHECK_HERO_CONSUME, ABI_STAGE } from "../consts";
|
||||||
import { DicTeraph } from '../pubUtils/dictionary/DicTeraph';
|
import { DicTeraph } from '../pubUtils/dictionary/DicTeraph';
|
||||||
import { Teraph, RoleModel, RoleType, RoleUpdate } from '../db/Role';
|
import { Teraph, RoleModel, RoleType, RoleUpdate } from '../db/Role';
|
||||||
import { SCHOOL } from '../pubUtils/dicParam';
|
import { SCHOOL } from '../pubUtils/dicParam';
|
||||||
import { gameData, getHeroInitTalent } from '../pubUtils/data';
|
import { gameData, getHeroInitTalent, getHeroStarByQuality } from '../pubUtils/data';
|
||||||
import { SchoolModel } from '../db/School';
|
import { SchoolModel } from '../db/School';
|
||||||
import { SclResultInter, SclPosInter, RewardInter, ItemInter } from '../pubUtils/interface';
|
import { SclResultInter, SclPosInter, RewardInter, ItemInter } from '../pubUtils/interface';
|
||||||
import { Connect, HeroModel, HeroSkin, HeroUpdate, Talent } from '../db/Hero';
|
import { Connect, HeroModel, HeroSkin, HeroType, HeroUpdate, Talent } from '../db/Hero';
|
||||||
import { SkinUpdate } from '../db/Skin';
|
import { SkinUpdate } from '../db/Skin';
|
||||||
import { Figure } from '../domain/dbGeneral';
|
import { Figure } from '../domain/dbGeneral';
|
||||||
import { pick } from 'underscore';
|
import { pick } from 'underscore';
|
||||||
@@ -314,3 +314,44 @@ export async function checkServerIsOpen(serverId: number, ip: string, uid: numbe
|
|||||||
let serverTime = await getServerCreateTime(serverId);
|
let serverTime = await getServerCreateTime(serverId);
|
||||||
return serverTime <= nowSeconds();
|
return serverTime <= nowSeconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function calStarUpConsume(hero: HeroType) {
|
||||||
|
let originConsumes = hero.consumes||[];
|
||||||
|
if(CHECK_HERO_CONSUME) {
|
||||||
|
let dicHero = gameData.hero.get(hero.hid);
|
||||||
|
let dicJob = gameData.job.get(dicHero?.jobid);
|
||||||
|
if(dicHero && dicJob) {
|
||||||
|
let decrease = 0;
|
||||||
|
for(let star = dicHero.initialStar; star < hero.star; star++) {
|
||||||
|
let curDicHeroStar = getHeroStarByQuality(dicJob.job_class, dicHero.quality, star);
|
||||||
|
if(!curDicHeroStar) continue;
|
||||||
|
let max = star == hero.star ? hero.starStage: ABI_STAGE.END;
|
||||||
|
for (let i = 0; i < max; i++) {
|
||||||
|
decrease += curDicHeroStar.advanceUpFragmentNum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(let quality = dicHero.quality; quality < hero.quality; quality++) {
|
||||||
|
let curDicHeroQualityUp = gameData.heroQualityUp.get(quality);
|
||||||
|
if (!curDicHeroQualityUp) continue;
|
||||||
|
decrease += curDicHeroQualityUp.fragmentNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
return decreaseConsume(originConsumes, dicHero.pieceId, decrease);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { consumes: originConsumes, newConsumes: [] };
|
||||||
|
}
|
||||||
|
|
||||||
|
// 从原始消耗里减去消耗
|
||||||
|
function decreaseConsume(origin: Reward[], pieceId: number, decrease: number) {
|
||||||
|
let consumes: Reward[] = [], newConsumes: Reward[] = [];
|
||||||
|
for(let { id, count } of origin) {
|
||||||
|
if(id == pieceId) {
|
||||||
|
consumes.push({ id, count: count - decrease > 0? count - decrease: 0 });
|
||||||
|
newConsumes.push({ id, count: decrease });
|
||||||
|
} else {
|
||||||
|
consumes.push({ id, count });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { consumes, newConsumes };
|
||||||
|
}
|
||||||
@@ -58,3 +58,5 @@ export const HERO_INITIAL_QUALITY = {
|
|||||||
PURPLE: 2,
|
PURPLE: 2,
|
||||||
ORANGE: 3
|
ORANGE: 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const CHECK_HERO_CONSUME = true;
|
||||||
Reference in New Issue
Block a user