装备:升星
This commit is contained in:
@@ -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 武将
|
||||
|
||||
Reference in New Issue
Block a user