羁绊:修改武将羁绊格式
This commit is contained in:
@@ -6,15 +6,15 @@ import { HeroModel, Connect, HeroSkin, HeroUpdate, EPlace, Talent } from '../../
|
||||
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 { RoleModel } from '../../../db/Role';
|
||||
import { ItemModel } from '../../../db/Item';
|
||||
import { gameData, getHeroExpByLv, getHeroStarByQuality, getHeroWakeByQuality, getHeroLvByExp, getMaxGradeByjobClass, getJobByGradeAndClass, getFriendShipById, getFavourLvByExp, reloadDicParam, getEquipByJobClassAndEPlace, getScollByStar, getExpByLv } from '../../../pubUtils/data';
|
||||
import { gameData, getHeroExpByLv, getHeroStarByQuality, getHeroWakeByQuality, getHeroLvByExp, getMaxGradeByjobClass, getJobByGradeAndClass, getConnectLvByExp, getEquipByJobClassAndEPlace, getScollByStar, getExpByLv, hasCurConnect } from '../../../pubUtils/data';
|
||||
import { ItemInter, RewardInter } from '../../../pubUtils/interface';
|
||||
import { getDropItems, FIGURE_UNLOCK_CONDITION } from '../../../consts/constModules/itemConst'
|
||||
import { getDropItems, FIGURE_UNLOCK_CONDITION, ITID } from '../../../consts/constModules/itemConst'
|
||||
import { pushComposeOrangeHero, pushHeroQualityUpMsg, pushHeroStarMax, pushHeroWakeUp } from '../../../services/chatService';
|
||||
import { PvpDefenseModel } from '../../../db/PvpDefense';
|
||||
import { checkTask, checkTaskInHeroQUalityUp, checkTaskInHeroStarUp, checkTaskInHeroTrain, checkTaskInHeroWakeUp } from '../../../services/task/taskService';
|
||||
import { isNumber, pick } from 'underscore';
|
||||
import { updateEplaces } from '../../../services/equipService';
|
||||
import { addConsumeToHero, checkUnlockTalentCondition, initSkinTalent, updateSkinTalent } from '../../../services/roleService';
|
||||
import { addConnect, addConsumeToHero, checkUnlockTalentCondition, initSkinTalent, updateSkinTalent } from '../../../services/roleService';
|
||||
import { JewelModel, jewelUpdate } from '../../../db/Jewel';
|
||||
import { HERO, REBORN } from '../../../pubUtils/dicParam';
|
||||
import { createHero, createHeroes } from '../../../services/role/createHero';
|
||||
@@ -408,136 +408,60 @@ export class HeroHandler {
|
||||
return resResult(STATUS.SUCCESS, { curHero: {...pick(heroResult, ['hid', 'job', 'jobStage', 'totalTalentPoint']) }});
|
||||
}
|
||||
|
||||
//激活羁绊
|
||||
async heroConectionActivate(msg: { shipId: number }, session: BackendSession) {
|
||||
let roleId: string = session.get('roleId');
|
||||
let sid: string = session.get('sid');
|
||||
let serverId: number = session.get('serverId');
|
||||
|
||||
let { shipId } = msg;
|
||||
let shipHidAndLevel = gameData.friendShipHidAandIds.get(shipId);
|
||||
if (!shipHidAndLevel) return resResult(STATUS.HERO_CONECTION_IS_NOT_EXIT);
|
||||
let hero = await HeroModel.findByHidAndRole(shipHidAndLevel.actorId, roleId);
|
||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
|
||||
let heroConnections: Connect[] = deepCopy(hero.connections);
|
||||
|
||||
let curConnect = heroConnections.find(cur => cur.shipId == shipId);
|
||||
if (!curConnect) {
|
||||
curConnect = { shipId, level: 0 };
|
||||
heroConnections.push(curConnect);
|
||||
}
|
||||
if (curConnect.level >= shipHidAndLevel.level) {
|
||||
return resResult(STATUS.HERO_CONECTION_IS_MAX_LEVEL);
|
||||
}
|
||||
|
||||
curConnect.level++;
|
||||
let level = curConnect.level;
|
||||
|
||||
let friendShip = getFriendShipById(shipId, level);
|
||||
if (hero.star + hero.colorStar < friendShip.level)
|
||||
return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL);
|
||||
let hids = friendShip.hids;
|
||||
for (let hid of hids) {
|
||||
if (hid == shipHidAndLevel.actorId)
|
||||
continue;
|
||||
let member = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if (!member)
|
||||
return resResult(STATUS.ROLE_SHORT_HERO_CONECTION);
|
||||
if (member.star + member.colorStar < friendShip.level)
|
||||
return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL);
|
||||
}
|
||||
let consumes = [getCoinObject(friendShip.costCoin)];
|
||||
let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.HERO_CONNECT_ACTIVE);
|
||||
if (!result) {
|
||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
}
|
||||
let update = {
|
||||
connections: heroConnections,
|
||||
consumes: addConsumeToHero(hero.consumes, consumes)
|
||||
}
|
||||
//重算战力并下发
|
||||
let { curHero } = await calculateCeWithHero(HERO_SYSTEM_TYPE.CONNECT, roleId, serverId, sid, hero.hid, update, { shipId, hero });
|
||||
// 任务
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_CONNECT, { connectLv: level })
|
||||
return resResult(STATUS.SUCCESS, { curHero: pick(curHero, ['hid', 'connections']) });
|
||||
}
|
||||
|
||||
//赠送(包括一键赠送)
|
||||
async heroGiveFavor(msg: { hid: number, type: number }, session: BackendSession) {
|
||||
async heroGiveFavor(msg: { hid: number, shipId: number, items: [{id: number, count: number}] }, session: BackendSession) {
|
||||
let roleId: string = session.get('roleId');
|
||||
let sid: string = session.get('sid');
|
||||
let serverId: number = session.get('serverId');
|
||||
|
||||
let { hid, type } = msg;
|
||||
|
||||
let addLv = 0;
|
||||
if (type == 1) {
|
||||
addLv = 1;
|
||||
} else if (type == 5) {
|
||||
addLv = 5;
|
||||
} else {
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
}
|
||||
let { hid, shipId, items } = msg;
|
||||
|
||||
if(!hasCurConnect(hid, shipId)) return resResult(STATUS.WRONG_PARMS);
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if (!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
|
||||
|
||||
let { favourLv: oldLv, favour: oldExp, lv } = hero;
|
||||
|
||||
let maxLv = lv > gameData.maxFriendShipLv.max ? gameData.maxFriendShipLv.max : lv; // 好感度最大等级
|
||||
if (maxLv <= oldLv)
|
||||
return resResult(STATUS.HERO_FAVOUR_LEVEL_REACH_MAXT);
|
||||
|
||||
// 计算武将可以升的级数
|
||||
if (oldLv + addLv > maxLv) addLv = maxLv - oldLv;
|
||||
|
||||
let nextObj = gameData.friendShipLevelMap.get(oldLv + addLv - 1);
|
||||
if (!nextObj) return resResult(STATUS.HERO_FAVOUR_LEVEL_REACH_MAXT);
|
||||
let nextExp = nextObj.expSum;
|
||||
let needExp = nextExp - oldExp;
|
||||
let newExp = oldExp;
|
||||
let { connections } = hero;
|
||||
let curConnect = connections.find(cur => cur.shipId == shipId);
|
||||
let { level = 0, exp = 0 } = curConnect||{};
|
||||
|
||||
let newLevel = level;
|
||||
// 计算得材料可转换的经验
|
||||
let originalConsumes = await ItemModel.findByRoleAndType(roleId, CONSUME_TYPE.FAVOUR);
|
||||
let material = new Array<RewardInter>();
|
||||
for (let { id, count } of originalConsumes) {
|
||||
let check = new CheckMeterial(roleId);
|
||||
for (let { id, count } of items) {
|
||||
let dicGoods = gameData.goods.get(id);
|
||||
if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let needCount = Math.ceil(needExp / dicGoods.value);
|
||||
if(needCount <= 0) break;
|
||||
if(needCount > count) needCount = count;
|
||||
material.push({ id, count: needCount });
|
||||
newExp += dicGoods.value * needCount;
|
||||
needExp -= dicGoods.value * count;
|
||||
let dicItid = ITID.get(dicGoods.itid);
|
||||
if (!dicItid) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if(dicItid.type != CONSUME_TYPE.FAVOUR) return resResult(STATUS.ROLE_WRONG_ITEM);
|
||||
|
||||
let isEnough = await check.decrease([{ id, count }]);
|
||||
if(!isEnough) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
|
||||
exp += dicGoods.value * count;
|
||||
let { newLv, maxLv } = getConnectLvByExp(hid, shipId, exp);
|
||||
if(newLevel > maxLv) return resResult(STATUS.HERO_CONECTION_IS_MAX_LEVEL);
|
||||
newLevel = newLv;
|
||||
}
|
||||
|
||||
if (newExp == oldExp) {
|
||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
}
|
||||
|
||||
let newLv = getFavourLvByExp(newExp);
|
||||
|
||||
let result = await handleCost(roleId, sid, material, ITEM_CHANGE_REASON.HERO_GIVE_FAVOR);
|
||||
let material = check.getConsume();
|
||||
let result = await handleCost(roleId, sid, items, ITEM_CHANGE_REASON.HERO_GIVE_FAVOR);
|
||||
if (!result) {
|
||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
}
|
||||
|
||||
let updateConsume = addConsumeToHero(hero.consumes, material);
|
||||
let update = {
|
||||
favour: newExp,
|
||||
favourLv: newLv,
|
||||
connections: addConnect(connections, { shipId, level: newLevel, exp }),
|
||||
consumes: updateConsume
|
||||
}
|
||||
|
||||
let isFavourLvUp = oldLv != newLv;
|
||||
|
||||
let { curHero } = await calculateCeWithHero(HERO_SYSTEM_TYPE.FAVOUR, roleId, serverId, sid, hero.hid, update, { isFavourLvUp, hero });
|
||||
if(isFavourLvUp) {
|
||||
await unlockFigure(sid, roleId, [{ type: FIGURE_UNLOCK_CONDITION.HERO_FAVOR, paramHid: curHero.hid, paramFavourLv: curHero.favourLv }]);
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, { hero: curHero, oldFavourLv: oldLv }); // 任务
|
||||
let isLv = level != newLevel;
|
||||
let { curHero } = await calculateCeWithHero(HERO_SYSTEM_TYPE.CONNECT, roleId, serverId, sid, hero.hid, update);
|
||||
if(isLv) {
|
||||
// await unlockFigure(sid, roleId, [{ type: FIGURE_UNLOCK_CONDITION.HERO_FAVOR, paramHid: curHero.hid, paramFavourLv: curHero.favourLv }]);
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_CONNECT, { connectLv: newLevel })
|
||||
}
|
||||
return resResult(STATUS.SUCCESS, { curHero: { ...pick(curHero, ['hid', 'favour', 'favourLv']), cost: material } });
|
||||
return resResult(STATUS.SUCCESS, { curHero: { ...pick(curHero, ['hid', 'connections']), shipId } });
|
||||
}
|
||||
|
||||
//穿带时装
|
||||
|
||||
@@ -288,16 +288,16 @@ export class RoleHandler {
|
||||
|
||||
let { hid } = msg;
|
||||
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId, 'hid lv star colorStar quality scrollId scrollActive scrollStar scrollColorStar scrollQuality favour favourLv connections attr ce');
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId, 'hid lv star colorStar quality scrollId scrollActive scrollStar scrollColorStar scrollQuality connections attr ce');
|
||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let { star, colorStar, quality, scrollId, scrollActive, scrollStar, scrollColorStar, scrollQuality, favour, favourLv } = hero;
|
||||
let { star, colorStar, quality, scrollId, scrollActive, scrollStar, scrollColorStar, scrollQuality } = hero;
|
||||
|
||||
let update = {
|
||||
scrollActive, scrollId, scrollStar, scrollColorStar, scrollQuality, favour, favourLv
|
||||
scrollActive, scrollId, scrollStar, scrollColorStar, scrollQuality
|
||||
};
|
||||
if (!scrollActive) { // 初次激活
|
||||
update.scrollActive = true;
|
||||
@@ -327,7 +327,7 @@ export class RoleHandler {
|
||||
await checkTaskInActiveScroll(serverId, roleId, sid, scrollActive, hero);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
curHero: pick(curHero, ['hid', 'scrollActive', 'scrollId', 'scrollStar', 'scrollColorStar', 'scrollQuality', 'favour', 'favourLv'])
|
||||
curHero: pick(curHero, ['hid', 'scrollActive', 'scrollId', 'scrollStar', 'scrollColorStar', 'scrollQuality'])
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user