羁绊:升级方法修改,使用点击升级的方案
This commit is contained in:
@@ -6,7 +6,7 @@ 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, getConnectLvByExp, getEquipByJobClassAndEPlace, getScollByStar, getExpByLv, hasCurConnect } from '../../../pubUtils/data';
|
||||
import { gameData, getHeroExpByLv, getHeroStarByQuality, getHeroWakeByQuality, getHeroLvByExp, getMaxGradeByjobClass, getJobByGradeAndClass, getConnectLvByExp, getEquipByJobClassAndEPlace, getScollByStar, getExpByLv, hasCurConnect, getConnectMaxLv, getFriendShipByIdAndLv } from '../../../pubUtils/data';
|
||||
import { ItemInter, RewardInter } from '../../../pubUtils/interface';
|
||||
import { getDropItems, FIGURE_UNLOCK_CONDITION, ITID } from '../../../consts/constModules/itemConst'
|
||||
import { pushComposeOrangeHero, pushHeroQualityUpMsg, pushHeroStarMax, pushHeroWakeUp } from '../../../services/chatService';
|
||||
@@ -409,12 +409,12 @@ export class HeroHandler {
|
||||
}
|
||||
|
||||
//赠送(包括一键赠送)
|
||||
async heroGiveFavor(msg: { hid: number, shipId: number, items: [{id: number, count: number}] }, session: BackendSession) {
|
||||
async heroGiveFavor(msg: { hid: number, shipId: number, type: number }, session: BackendSession) {
|
||||
let roleId: string = session.get('roleId');
|
||||
let sid: string = session.get('sid');
|
||||
let serverId: number = session.get('serverId');
|
||||
|
||||
let { hid, shipId, items } = msg;
|
||||
let { hid, shipId, type } = msg;
|
||||
|
||||
if(!hasCurConnect(hid, shipId)) return resResult(STATUS.WRONG_PARMS);
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
@@ -422,40 +422,63 @@ export class HeroHandler {
|
||||
|
||||
let { connections } = hero;
|
||||
let curConnect = connections.find(cur => cur.shipId == shipId);
|
||||
let { level = 0, exp = 0 } = curConnect||{};
|
||||
let { level: oldLv = 0, exp: oldExp = 0 } = curConnect||{};
|
||||
|
||||
let newLevel = level;
|
||||
// 计算得材料可转换的经验
|
||||
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 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;
|
||||
let addLv = 0;
|
||||
if (type == 1) {
|
||||
addLv = 1;
|
||||
} else if (type == 5) {
|
||||
addLv = 5;
|
||||
} else {
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
}
|
||||
|
||||
let material = check.getConsume();
|
||||
let result = await handleCost(roleId, sid, items, ITEM_CHANGE_REASON.HERO_GIVE_FAVOR);
|
||||
let maxLv = getConnectMaxLv(hid, shipId); // 好感度最大等级
|
||||
if (maxLv <= oldLv)
|
||||
return resResult(STATUS.HERO_FAVOUR_LEVEL_REACH_MAXT);
|
||||
|
||||
// 计算武将可以升的级数
|
||||
if (oldLv + addLv > maxLv) addLv = maxLv - oldLv;
|
||||
|
||||
console.log('#####maxLv', oldLv + addLv)
|
||||
let nextObj = getFriendShipByIdAndLv(hid, shipId, oldLv + addLv);
|
||||
if (!nextObj) return resResult(STATUS.HERO_FAVOUR_LEVEL_REACH_MAXT);
|
||||
let nextExp = nextObj.shipExp;
|
||||
let needExp = nextExp - oldExp;
|
||||
let newExp = oldExp;
|
||||
|
||||
// 计算得材料可转换的经验
|
||||
let originalConsumes = await ItemModel.findByRoleAndType(roleId, CONSUME_TYPE.FAVOUR);
|
||||
let material = new Array<RewardInter>();
|
||||
for (let { id, count } of originalConsumes) {
|
||||
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;
|
||||
}
|
||||
|
||||
if (newExp == oldExp) {
|
||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
}
|
||||
|
||||
let newLevel = getConnectLvByExp(hid, shipId, newExp);
|
||||
|
||||
let result = await handleCost(roleId, sid, material, ITEM_CHANGE_REASON.HERO_GIVE_FAVOR);
|
||||
if (!result) {
|
||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
}
|
||||
|
||||
let updateConsume = addConsumeToHero(hero.consumes, material);
|
||||
let update = {
|
||||
connections: addConnect(connections, { shipId, level: newLevel, exp }),
|
||||
connections: addConnect(connections, { shipId, level: newLevel, exp: newExp }),
|
||||
consumes: updateConsume
|
||||
}
|
||||
|
||||
let isLv = level != newLevel;
|
||||
let isLv = oldLv != 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 }]);
|
||||
|
||||
@@ -15,7 +15,7 @@ import { dicWar, dicWarPvp, dicDailyWarByType, loadWar, dicHeroIdByWar } from ".
|
||||
import { dicWarJson, loadWarJson } from "./dictionary/DicWarJson";
|
||||
import { AUCTION_TIME } from "../consts";
|
||||
import { dicFashions, dicFashionsByHeroId, loadFashions } from "./dictionary/DicFashions";
|
||||
import { friendShips, friendShipsByLv, loadFriendShip } from "./dictionary/DicFriendShip";
|
||||
import { friendShips, friendShipsByLv, friendShipsMax, loadFriendShip } from "./dictionary/DicFriendShip";
|
||||
import { dicHeroQualityUp, loadHeroQualityUp } from "./dictionary/DicHeroQualityUp";
|
||||
import { dicHeroStar, loadHeroStar } from "./dictionary/DicHeroStar";
|
||||
import { dicHeroWake, loadHeroWake } from "./dictionary/DicHeroWake";
|
||||
@@ -139,6 +139,7 @@ export const gameData = {
|
||||
fashionBySkinId: dicFashionsByHeroId,
|
||||
friendShips: friendShips,
|
||||
friendShipsByLv: friendShipsByLv,
|
||||
friendShipsMax: friendShipsMax,
|
||||
randomEffectPool: dicRandomEffectPool,
|
||||
randomEffectPoolByGroupAndLv: dicRandomEffectPoolByGroupAndLv,
|
||||
title: dicTitle,
|
||||
@@ -322,6 +323,10 @@ export function hasCurConnect(actorId: number, shipId: number) {
|
||||
return gameData.friendShips.has(`${actorId}_${shipId}`);
|
||||
}
|
||||
|
||||
export function getConnectMaxLv(actorId: number, shipId: number) {
|
||||
return gameData.friendShipsMax.get(`${actorId}_${shipId}`)||0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据武将当前好感获得好感等级
|
||||
* @param exp 累积经验
|
||||
@@ -329,12 +334,11 @@ export function hasCurConnect(actorId: number, shipId: number) {
|
||||
export function getConnectLvByExp(actorId: number, shipId: number, newExp: number) {
|
||||
let exps = gameData.friendShips.get(`${actorId}_${shipId}`)||[];
|
||||
exps.sort((a, b) => a.level - b.level);
|
||||
let newLv = 0, maxLv = 0;
|
||||
let newLv = 0;
|
||||
for(let { level, shipExp } of exps) {
|
||||
if(newExp >= shipExp) newLv = level;
|
||||
if(maxLv < level) maxLv = level
|
||||
}
|
||||
return { newLv, maxLv }
|
||||
return newLv
|
||||
}
|
||||
|
||||
export function getBossHpByWarId(warId: number) {
|
||||
|
||||
@@ -23,6 +23,7 @@ export interface DicFriendShip {
|
||||
|
||||
export const friendShips = new Map<string, { level: number, shipExp: number }[]>();
|
||||
export const friendShipsByLv = new Map<string, DicFriendShip>();
|
||||
export const friendShipsMax = new Map<string, number>();
|
||||
export function loadFriendShip() {
|
||||
friendShips.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_FRIEND_SHIP);
|
||||
@@ -39,6 +40,10 @@ export function loadFriendShip() {
|
||||
shipSumValue += o.shipExp;
|
||||
friendShips.get(key1).push({ level: o.level, shipExp: shipSumValue });
|
||||
|
||||
if(!friendShipsMax.has(key1) || friendShipsMax.get(key1) < o.level) {
|
||||
friendShipsMax.set(key1, o.level);
|
||||
}
|
||||
|
||||
let key2 = `${o.actorId}_${o.shipId}_${o.level}`;
|
||||
friendShipsByLv.set(key2, o);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user