装备:升星

This commit is contained in:
luying
2022-02-16 13:19:58 +08:00
parent db31f3344f
commit 862c3f4d65
11 changed files with 1038 additions and 746 deletions

View File

@@ -8,7 +8,7 @@ import { EquipModel, EquipType } from "../../../db/Equip";
import { HeroModel, EPlace, HeroType } from "../../../db/Hero";
import Role from "../../../db/Role";
import { calPlayerCeAndSave } from "../../../services/playerCeService";
import { getGoodById, gameData, getEquipByJobClassAndEPlace, getNextEquipQuality, getEquipQualityIdByEquipIdAndPoint } from "../../../pubUtils/data";
import { getGoodById, gameData, getEquipByJobClassAndEPlace, getNextEquipQuality, getEquipQualityIdByEquipIdAndPoint, getEquipStarIdByEquipId, getNextEquipStar } from "../../../pubUtils/data";
import { BAG, EQUIP } from "../../../pubUtils/dicParam";
import { ITID, QUALITY_TYPE, equipTypeToSortAttr, IT_TYPE, QUENCH_TYPE, REFINE_TYPE } from "../../../consts";
import { checkMaterialEnough, checkEquipCanPut, quenchOnce, checkQuenchMaxByQualityAndGrade, getRandSeResult, refineOnce, checkRefineReachNextLv, calEquipCe, updateEplace, updateEplaces } from "../../../services/equipService";
@@ -106,59 +106,6 @@ export class EquipHandler {
}
// 装备升品
public async qualityUp(msg: { hid: number, eplaceId: number, isOneClick: boolean }, session: BackendSession) {
let roleId: string = session.get('roleId');
// let roleName: string = session.get('roleName');
const serverId = session.get('serverId');
let sid: string = session.get('sid');
let { hid, eplaceId, isOneClick } = msg;
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
let curEquip = hero.ePlace?.find(cur => cur.id == eplaceId);
if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND);
let nextEquipQuality = getNextEquipQuality(curEquip.equipId, curEquip.quality, curEquip.qualityStage);
if(!nextEquipQuality) return resResult(STATUS.EQUIP_QUALITY_MAX);
let update = {
quality: curEquip.quality,
qualityStage: curEquip.qualityStage,
}
let check = new CheckMeterial(roleId);
if(isOneClick) {
while(nextEquipQuality) {
let isEnough = await check.decrease(nextEquipQuality.consume);
if(!isEnough) break; // 消耗不足
update.qualityStage++;
nextEquipQuality = getNextEquipQuality(curEquip.equipId, update.quality, update.qualityStage)
}
} else {
let isEnough = await check.decrease(nextEquipQuality.consume);
if(isEnough) {
update.quality = nextEquipQuality.quality;
update.qualityStage = nextEquipQuality.point;
}
}
if(update.quality == curEquip.quality && update.qualityStage == curEquip.qualityStage) {
return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
}
let { newEplace, updatedEplace } = updateEplace(hero.ePlace, eplaceId, update);
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_QUALITY, sid, roleId, hero, { ePlace: newEplace }, [eplaceId]);
// TODO 任务
const curHero = {
hid,
ePlace: updatedEplace
}
return resResult(STATUS.SUCCESS, { curHero });
}
// 装备栏一键强化至相应等级
public async strengthenAll(msg: { hid: number, lv: number }, session: BackendSession) {
let roleId: string = session.get('roleId');
@@ -208,6 +155,130 @@ export class EquipHandler {
}
// 装备升品
public async qualityUp(msg: { hid: number, eplaceId: number, isOneClick: boolean }, session: BackendSession) {
let roleId: string = session.get('roleId');
// let roleName: string = session.get('roleName');
const serverId = session.get('serverId');
let sid: string = session.get('sid');
let { hid, eplaceId, isOneClick } = msg;
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
let curEquip = hero.ePlace?.find(cur => cur.id == eplaceId);
if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND);
let nextEquipQuality = getNextEquipQuality(curEquip.equipId, curEquip.quality, curEquip.qualityStage);
if(!nextEquipQuality) return resResult(STATUS.EQUIP_QUALITY_MAX);
let update = {
quality: curEquip.quality,
qualityStage: curEquip.qualityStage,
}
let check = new CheckMeterial(roleId);
if(isOneClick) { // 一键升到该品最高点
if(nextEquipQuality.quality != curEquip.quality) {
return resResult(STATUS.EQUIP_QUALITYSTAGE_IS_MAX);
}
while(nextEquipQuality && nextEquipQuality.quality == curEquip.quality) {
let isEnough = await check.decrease(nextEquipQuality.consume);
if(!isEnough) break; // 消耗不足
update.qualityStage++;
nextEquipQuality = getNextEquipQuality(curEquip.equipId, update.quality, update.qualityStage)
}
} else { // 往下一阶,包括满点之后的升品
let isEnough = await check.decrease(nextEquipQuality.consume);
if(isEnough) {
update.quality = nextEquipQuality.quality;
update.qualityStage = nextEquipQuality.point;
}
}
if(update.quality == curEquip.quality && update.qualityStage == curEquip.qualityStage) {
return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
}
let isUpQuality = update.quality != curEquip.quality;
let { newEplace, updatedEplace } = updateEplace(hero.ePlace, eplaceId, update);
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_QUALITY, sid, roleId, hero, { ePlace: newEplace }, [eplaceId]);
// TODO 任务
const curHero = {
hid,
isUpQuality,
ePlace: updatedEplace
}
return resResult(STATUS.SUCCESS, { curHero });
}
// 装备升星
public async starUp(msg: { hid: number, eplaceId: number, isOneClick: boolean }, session: BackendSession) {
let roleId: string = session.get('roleId');
// let roleName: string = session.get('roleName');
const serverId = session.get('serverId');
let sid: string = session.get('sid');
let { hid, eplaceId, isOneClick } = msg;
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
let curEquip = hero.ePlace?.find(cur => cur.id == eplaceId);
if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND);
let update = {
star: curEquip.star,
starStage: curEquip.starStage,
}
let check = new CheckMeterial(roleId);
let dicEquipStar = getEquipStarIdByEquipId(curEquip.equipId, curEquip.star);
if(!dicEquipStar) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let isUpStar = curEquip.starStage == dicEquipStar.count;
if(isUpStar) { // 升星
if(isOneClick) {
return resResult(STATUS.EQUIP_STARSTAGE_IS_MAX);
} else {
let nextEquipStar = getNextEquipStar(curEquip.equipId, curEquip.star);
if(!nextEquipStar) return resResult(STATUS.EQUIP_STAR_MAX);
let dicEquipQualityExtra = gameData.equipQualityExtra.get(curEquip.quality);
if(!dicEquipQualityExtra || dicEquipQualityExtra.star < nextEquipStar.star) {
return resResult(STATUS.EQUIP_QUALITY_NOT_ENOUGH);
}
let isEnough = await check.decrease(nextEquipStar.subConsume);
if(isEnough) {
update.star = nextEquipStar.star;
update.starStage = 0;
}
}
} else { // 升小点,包括一键升到满小点和升一个小点
let toStage = isOneClick? dicEquipStar.count: curEquip.starStage + 1;
for(let stage = curEquip.starStage + 1; stage <= toStage; stage++) {
let isEnough = await check.decrease(dicEquipStar.mainConsume);
if(!isEnough) break; // 消耗不足
update.starStage = stage;
}
}
if(update.star == curEquip.star && update.starStage == curEquip.starStage) {
return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
}
let { newEplace, updatedEplace } = updateEplace(hero.ePlace, eplaceId, update);
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STAR, sid, roleId, hero, { ePlace: newEplace }, [eplaceId]);
// TODO 任务
const curHero = {
hid,
isUpStar,
ePlace: updatedEplace
}
return resResult(STATUS.SUCCESS, { curHero });
}
// // 装备栏精炼
// public async refine(msg: { hid: number, ePlaceId: number, type: REFINE_TYPE }, session: BackendSession) {
// let roleId: string = session.get('roleId');

View File

@@ -24,6 +24,7 @@ export enum HERO_SYSTEM_TYPE {
COMPOSE_EQUIP = 21, // 合成装备
EQUIP_STRENGTH = 22, // 装备强化
EQUIP_QUALITY = 23, // 装备升品
EQUIP_STAR = 24, // 装备升星
};
// 武将上限

View File

@@ -490,6 +490,8 @@ export const FILENAME = {
DIC_EQUIP_SUIT: 'dic_zyz_equipSuit',
DIC_EQUIP_STRENGTH: 'dic_zyz_equipStrength',
DIC_EQUIP_QUALITY: 'dic_zyz_equipQuality',
DIC_EQUIP_STAR: 'dic_zyz_equipStar',
DIC_EQUIP_QUALITY_EXTRA: 'dic_zyz_equipQuality_extra',
DIC_JEWEL: 'dic_jewel',
}

View File

@@ -312,6 +312,10 @@ export const STATUS = {
EQUIP_DECOMPOSE_IS_UPLIMIT: { code: 30516, simStr: '装备分解数量已达上限' },
EQUIP_HAS_COMPOSE: { code: 30517, simStr: '该装备已合成' },
EQUIP_QUALITY_MAX: { code: 30518, simStr: '该装备已升品到最高' },
EQUIP_STAR_MAX: { code: 30519, simStr: '该装备已升星到最高' },
EQUIP_QUALITY_NOT_ENOUGH: { code: 30520, simStr: '该装备品质不足' },
EQUIP_QUALITYSTAGE_IS_MAX: { code: 30521, simStr: '该装备已到该品质下最高,请升品' },
EQUIP_STARSTAGE_IS_MAX: { code: 30522, simStr: '该装备已到该星级下最高,请升星' },
//全局养成30600-30699
ROLE_REACH_MAX_TITLE_LEVEL: { code: 30600, simStr: '玩家已达到最高的爵位' },

View File

@@ -90,7 +90,7 @@ export class EPlace {
@prop({ required: true })
qualityStage: number = 0;
@prop({ required: true })
star: number = 1;
star: number = 0;
@prop({ required: true })
starStage: number = 0;
@prop({ required: true, type: Stone, _id: false })

View File

@@ -104,6 +104,9 @@ import { dicEquipById, dicEquipIdByJobClassAndEplace, loadEquip } from "./dictio
import { dicJewel, loadJewel } from "./dictionary/DicJewel";
import { dicEquipStrength, loadEquipStrength } from "./dictionary/DicEquipStrength";
import { dicEquipQuality, dicEquipQualityIdByEquipIdAndPoint, loadEquipQuality } from "./dictionary/DicEquipQuality";
import { dicEquipStar, dicEquipStarIdByEquipId, loadEquipStar } from './dictionary/DicEquipStar';
import { dicEquipQualityExtra, loadEquipQualityExtra } from './dictionary/DicEquipQualityExtra';
import { dicEquipSuit, dicEquipSuitByJobClass, loadEquipSuit } from "./dictionary/DicEquipSuit";
export const gameData = {
blurprtCompose: dicBlueprtCompose,
@@ -258,6 +261,11 @@ export const gameData = {
equipStrengthenCost: dicEquipStrength,
equipQuality: dicEquipQuality,
equipQualityIdByEquipIdAndPoint: dicEquipQualityIdByEquipIdAndPoint,
equipStar: dicEquipStar,
equipStarIdByEquipId: dicEquipStarIdByEquipId,
equipQualityExtra: dicEquipQualityExtra,
equipSuit: dicEquipSuit,
equipSuitByJobClass: dicEquipSuitByJobClass,
};
// 在此提供一些原先在gamedata中提供的方法以便更方便获取gameData数据
@@ -853,7 +861,6 @@ export function getNextEquipQuality(equipId: number, quality: number, point: num
let equipQuality = getEquipQualityIdByEquipIdAndPoint(equipId, quality, point);
if(equipQuality) {
let nextId = equipQuality.id + 1;
console.log(nextId)
let nextEquipQuality = gameData.equipQuality.get(nextId);
if(nextEquipQuality && nextEquipQuality.equipId == equipQuality.equipId) {
return nextEquipQuality
@@ -862,6 +869,55 @@ export function getNextEquipQuality(equipId: number, quality: number, point: num
return null
}
export function getEquipStarIdByEquipId(equipId: number, star: number) {
let equipStarId = gameData.equipStarIdByEquipId.get(`${equipId}_${star}`);
return equipStarId?gameData.equipStar.get(equipStarId): null;
}
export function getNextEquipStar(equipId: number, star: number) {
let equipStar = getEquipStarIdByEquipId(equipId, star);
if(equipStar) {
let nextId = equipStar.id + 1;
let nextEquipStar = gameData.equipStar.get(nextId);
if(nextEquipStar && nextEquipStar.equipId == equipStar.equipId) {
return nextEquipStar;
}
}
return null;
}
export function getPreEquipStar(equipId: number, star: number) {
let equipStar = getEquipStarIdByEquipId(equipId, star);
if(equipStar) {
let nextId = equipStar.id - 1;
let nextEquipStar = gameData.equipStar.get(nextId);
if(nextEquipStar && nextEquipStar.equipId == equipStar.equipId) {
return nextEquipStar;
}
}
return null;
}
export function getEquipStarMainAttrByStage(equipId: number, star: number, starStage: number) {
if(starStage == 0) {
let preEquipStar = getPreEquipStar(equipId, star);
if(!preEquipStar || preEquipStar.equipId != equipId) {
return [];
} else {
return preEquipStar.mainAttr.get(preEquipStar.count);
}
} else {
let equipStar = getEquipStarIdByEquipId(equipId, star);
return equipStar.mainAttr.get(starStage);
}
}
export function getEquipSuitByHero(hid: number) {
let dicHero = gameData.hero.get(hid);
let equipSuitId = gameData.equipSuitByJobClass.get(dicHero.jobClass);
return gameData.equipSuit.get(equipSuitId);
}
// 初始加载
function initDatas() {
parseDicParam();
@@ -1030,6 +1086,9 @@ function loadDatas() {
loadEquip();
loadEquipStrength();
loadEquipQuality();
loadEquipStar();
loadEquipSuit();
loadEquipQualityExtra();
loadJewel();
}

View File

@@ -0,0 +1,29 @@
// 装备升品表
import { readFileAndParse } from '../util'
import { FILENAME } from '../../consts';
export interface DicEquipQualityExtra {
// id
readonly id: number;
// 品质
readonly quality: number;
// 限制星级
readonly star: number;
// 天晶石
readonly jewelCnt: number;
// 地玉石
readonly stoneCnt: number;
}
export const dicEquipQualityExtra = new Map<number, DicEquipQualityExtra>();
export function loadEquipQualityExtra() {
dicEquipQualityExtra.clear();
let arr = readFileAndParse(FILENAME.DIC_EQUIP_QUALITY_EXTRA);
arr.forEach(o => {
dicEquipQualityExtra.set(o.quality, o);
});
arr = undefined;
}

View File

@@ -0,0 +1,74 @@
// 装备升品表
import { readFileAndParse, parseGoodStr, decodeArrayListStr } from '../util'
import { FILENAME } from '../../consts'
import { RewardInter } from '../interface';
export interface DicEquipStar {
// id
readonly id: number;
// 装备id
readonly equipId: number;
// 装备星级
readonly star: number;
// 装备的武将职业大类
readonly jobClass: number;
// 装备栏id
readonly eplaceId: number;
// 一共有多少点
readonly count: number;
// 主属性
readonly mainAttr: Map<number, {id: number, num: number}[]>;
// 次级属性
readonly subAttr: {id: number, num: number}[];
// 一次升点消耗
readonly mainConsume: RewardInter[];
// 升星消耗
readonly subConsume: RewardInter[];
}
export const dicEquipStar = new Map<number, DicEquipStar>();
export const dicEquipStarIdByEquipId = new Map<string, number>(); // equipId&point => id
export function loadEquipStar() {
dicEquipStar.clear();
dicEquipStarIdByEquipId.clear();
let arr = readFileAndParse(FILENAME.DIC_EQUIP_STAR);
arr.forEach(o => {
o.mainConsume = parseGoodStr(o.mainConsume);
o.subConsume = parseGoodStr(o.subConsume);
o.mainAttr = parseAttrMap(o.mainAttr);
o.subAttr = parseAttr(o.subAttr);
dicEquipStarIdByEquipId.set(`${o.equipId}_${o.star}`, o.id);
dicEquipStar.set(o.id, o);
});
arr = undefined;
}
function parseAttrMap(str: string) {
let result = new Map<number, {id: number, num: number}[]>();
if(!str) return result;
let decodeArr = decodeArrayListStr(str);
for(let i = 0; i < decodeArr.length; i++) {
let [id, num] = decodeArr[i];
if(isNaN(parseInt(id)) || isNaN(parseInt(num))) {
throw new Error('data table format wrong');
}
result.set(i + 1, [{id: parseInt(id), num: parseInt(num)}]);
}
return result
}
function parseAttr(str: string) {
let result = new Array<{id: number, num: number}>();
if(!str) return result;
let decodeArr = decodeArrayListStr(str);
for(let [id, num] of decodeArr) {
if(isNaN(parseInt(id)) || isNaN(parseInt(num))) {
throw new Error('data table format wrong');
}
result.push({id: parseInt(id), num: parseInt(num)});
}
return result
}

View File

@@ -11,34 +11,33 @@ export interface DicEquipSuit {
readonly equips: number[];
// 按星级可解锁的属性
readonly effect: { star: number, seid: number }[];
// 解锁条件索引
readonly effectCondition: Map<number, number>
}
export const dicEquipSuit = new Map<number, DicEquipSuit>();
export const dicEquipSuitByJobClass = new Map<number, number>();
export function loadEquipSuit() {
dicEquipSuit.clear();
let arr = readFileAndParse(FILENAME.DIC_EQUIP);
dicEquipSuitByJobClass.clear();
let arr = readFileAndParse(FILENAME.DIC_EQUIP_SUIT);
arr.forEach(o => {
o.equips = parseNumberList(o.equips);
parseRandomEffect(o, o.effect);
dicEquipSuit.set(o.jobClass, o);
o.effect = parseEffect(o.effect);
dicEquipSuit.set(o.id, o);
dicEquipSuitByJobClass.set(o.jobClass, o.id);
});
arr = undefined;
}
function parseRandomEffect(o: any, str: string) {
if (!str) return null;
function parseEffect(str: string) {
let result = new Array<{star: number, seid: number}>();
if(!str) return result;
let decodeArr = decodeArrayListStr(str);
let effect: number[] = [], effectCondition = new Map<number, number>();
for(let [star, seid] of decodeArr) {
if (isNaN(parseInt(star)) || isNaN(parseFloat(seid))) {
if(isNaN(parseInt(star)) || isNaN(parseInt(seid))) {
throw new Error('data table format wrong');
}
effect.push(parseInt(seid));
effectCondition.set(parseInt(seid), parseInt(star));
result.push({star: parseInt(star), seid: parseInt(seid)});
}
o.effect = effect;
o.effectCondition = effectCondition;
return result
}

View File

@@ -5,11 +5,11 @@
import { HERO_SYSTEM_TYPE, ABI_TYPE, HERO_CE_RATIO, LINEUP_NUM } from '../consts';
import { cal, deepCopy, getAllAttrStage, reduceCe } from './util';
import { HeroModel, HeroType, HeroUpdate, CeAttrData } from '../db/Hero';
import { HeroModel, HeroType, HeroUpdate, CeAttrData, EPlace } from '../db/Hero';
import { RoleModel, RoleType, RoleUpdate, CeAttrDataRole } from '../db/Role';
import { AttributeCal } from '../domain/roleField/attribute';
import { ABI_STAGE, SEID_TYPE } from '../consts';
import { gameData, getJobByGradeAndClass, getHeroWakeByQuality, getHeroStarByQuality, getFriendShipById, getSchoolRateByStar, getScollByStar, getTeraph } from './data';
import { gameData, getJobByGradeAndClass, getHeroWakeByQuality, getHeroStarByQuality, getFriendShipById, getSchoolRateByStar, getScollByStar, getTeraph, getEquipQualityIdByEquipIdAndPoint, getEquipStarIdByEquipId, getEquipSuitByHero, getEquipStarMainAttrByStage } from './data';
import { DicSe } from './dictionary/DicSe';
import { DicRandomEffectPool } from './dictionary/DicRandomEffectPool';
import { SchoolModel } from '../db/School';
@@ -173,6 +173,9 @@ export function calPlayerCe(hero: HeroType, update: HeroUpdate, type: number, ar
case HERO_SYSTEM_TYPE.EQUIP_QUALITY:
heroAttrs = calEquipQualityIncAttr(hero, update, args);
break;
case HERO_SYSTEM_TYPE.EQUIP_STAR:
heroAttrs = calEquipStarIncAttr(hero, update, args, addSeidList, removeSeidList);
break;
case HERO_SYSTEM_TYPE.EQUIP: //
heroAttrs = calEquipPutOnOffIncAttr(hero, args, addSeidList, removeSeidList);
break;
@@ -645,8 +648,8 @@ export function calEquipQualityIncAttr(hero: HeroType, update: HeroUpdate, eplac
let oldEquip = oldEplace.find(cur => cur.id == eplaceId);
let newEquip = newEplace.find(cur => cur.id == eplaceId);
if(newEquip && oldEquip) {
let dicOldEquipQuality = gameData.equipQuality.get(oldEquip.equipId);
let dicNewEquipQuality = gameData.equipQuality.get(oldEquip.equipId);
let dicOldEquipQuality = getEquipQualityIdByEquipIdAndPoint(oldEquip.equipId, oldEquip.quality, oldEquip.qualityStage);
let dicNewEquipQuality = getEquipQualityIdByEquipIdAndPoint(newEquip.equipId, newEquip.quality, newEquip.qualityStage);
for(let attr of dicOldEquipQuality.attribute) {
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } });
}
@@ -658,6 +661,56 @@ export function calEquipQualityIncAttr(hero: HeroType, update: HeroUpdate, eplac
return heroAttrs
}
export function calEquipStarIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[], addSeidList: number[], removeSeidList: number[]) {
// 升星本身的属性加成
let { hid, attr: heroAttrs, ePlace: oldEplace } = hero;
let { ePlace: newEplace } = update;
for(let eplaceId of eplaceIds) {
let oldEquip = oldEplace.find(cur => cur.id == eplaceId);
let newEquip = newEplace.find(cur => cur.id == eplaceId);
if(newEquip && oldEquip) {
let dicOldEquipStar = getEquipStarIdByEquipId(oldEquip.equipId, oldEquip.star);
let dicNewEquipStar = getEquipStarIdByEquipId(newEquip.equipId, newEquip.star);
// 主属性
for(let attr of getEquipStarMainAttrByStage(oldEquip.equipId, oldEquip.star, oldEquip.starStage)) {
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } });
}
for(let attr of getEquipStarMainAttrByStage(newEquip.equipId, newEquip.star, newEquip.starStage)) {
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } });
}
for(let attr of dicOldEquipStar.subAttr) {
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } });
}
for(let attr of dicNewEquipStar.subAttr) {
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } });
}
}
}
// 套装属性
calEquipSuitIncAttr(hid, oldEplace, newEplace, addSeidList, removeSeidList);
return heroAttrs;
}
function calEquipSuitIncAttr(hid: number, oldEplace: EPlace[], newEplace: EPlace[], addSeidList: number[], removeSeidList: number[]) {
let dicEquipSuit = getEquipSuitByHero(hid);
let oldSuitStars: number[] = [], newSuitStars: number[] = [];
for(let equipId of dicEquipSuit.equips) {
let oldEquip = oldEplace.find(cur => cur.equipId == equipId);
oldSuitStars.push(oldEquip? oldEquip.star: 0);
let newEquip = newEplace.find(cur => cur.equipId == equipId);
newSuitStars.push(newEquip? newEquip.star: 0);
}
let oldStar = Math.min(...oldSuitStars);
let newStar = Math.min(...newSuitStars);
for(let { star, seid } of dicEquipSuit.effect) {
if(oldStar >= star) removeSeidList.push(seid);
if(newStar >= star) addSeidList.push(seid);
}
}
/**
* 穿脱, removeSeidList原来身上穿着的所有装备的seid包括套装的
* @param {HeroType} hero 武将

File diff suppressed because it is too large Load Diff