装备:升品
This commit is contained in:
@@ -103,6 +103,7 @@ import _ = require("underscore");
|
||||
import { dicEquipById, dicEquipIdByJobClassAndEplace, loadEquip } from "./dictionary/DicEquip";
|
||||
import { dicJewel, loadJewel } from "./dictionary/DicJewel";
|
||||
import { dicEquipStrength, loadEquipStrength } from "./dictionary/DicEquipStrength";
|
||||
import { dicEquipQuality, dicEquipQualityIdByEquipIdAndPoint, loadEquipQuality } from "./dictionary/DicEquipQuality";
|
||||
|
||||
export const gameData = {
|
||||
blurprtCompose: dicBlueprtCompose,
|
||||
@@ -255,6 +256,8 @@ export const gameData = {
|
||||
equipIdByJobAndEPlace: dicEquipIdByJobClassAndEplace,
|
||||
jewel: dicJewel,
|
||||
equipStrengthenCost: dicEquipStrength,
|
||||
equipQuality: dicEquipQuality,
|
||||
equipQualityIdByEquipIdAndPoint: dicEquipQualityIdByEquipIdAndPoint,
|
||||
};
|
||||
|
||||
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
||||
@@ -841,6 +844,24 @@ export function getEquipByJobClassAndEPlace(jobClass: number, eplaceId: number)
|
||||
return gameData.equipById.get(equipId);
|
||||
}
|
||||
|
||||
export function getEquipQualityIdByEquipIdAndPoint(equipId: number, quality: number, point: number) {
|
||||
let equipQualityId = gameData.equipQualityIdByEquipIdAndPoint.get(`${equipId}_${quality}_${point}`);
|
||||
return equipQualityId?gameData.equipQuality.get(equipQualityId): null;
|
||||
}
|
||||
|
||||
export function getNextEquipQuality(equipId: number, quality: number, point: number) {
|
||||
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
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
// 初始加载
|
||||
function initDatas() {
|
||||
parseDicParam();
|
||||
@@ -1008,6 +1029,7 @@ function loadDatas() {
|
||||
loadServerConst();
|
||||
loadEquip();
|
||||
loadEquipStrength();
|
||||
loadEquipQuality();
|
||||
loadJewel();
|
||||
}
|
||||
|
||||
|
||||
56
shared/pubUtils/dictionary/DicEquipQuality.ts
Normal file
56
shared/pubUtils/dictionary/DicEquipQuality.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
// 装备升品表
|
||||
import { readFileAndParse, parseGoodStr, decodeArrayListStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicEquipQuality {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 装备id
|
||||
readonly equipId: number;
|
||||
// 装备品质
|
||||
readonly quality: number;
|
||||
// 装备的武将职业大类
|
||||
readonly jobClass: number;
|
||||
// 装备栏id
|
||||
readonly eplaceId: number;
|
||||
// 升星的点
|
||||
readonly point: number;
|
||||
// 一共有多少点
|
||||
readonly count: number;
|
||||
// 消耗
|
||||
readonly consume: RewardInter[];
|
||||
// 属性提升
|
||||
readonly attribute: {id: number, num: number}[];
|
||||
|
||||
}
|
||||
|
||||
export const dicEquipQuality = new Map<number, DicEquipQuality>();
|
||||
export const dicEquipQualityIdByEquipIdAndPoint = new Map<string, number>(); // equipId&point => id
|
||||
|
||||
export function loadEquipQuality() {
|
||||
dicEquipQuality.clear();
|
||||
dicEquipQualityIdByEquipIdAndPoint.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_EQUIP_QUALITY);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.consume = parseGoodStr(o.consume);
|
||||
o.attribute = parseAttr(o.attribute);
|
||||
dicEquipQualityIdByEquipIdAndPoint.set(`${o.equipId}_${o.quality}_${o.point}`, o.id);
|
||||
dicEquipQuality.set(o.id, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
@@ -170,6 +170,9 @@ export function calPlayerCe(hero: HeroType, update: HeroUpdate, type: number, ar
|
||||
case HERO_SYSTEM_TYPE.EQUIP_STRENGTH:
|
||||
heroAttrs = calEquipStrengthIncAttr(hero, update, args);
|
||||
break;
|
||||
case HERO_SYSTEM_TYPE.EQUIP_QUALITY:
|
||||
heroAttrs = calEquipQualityIncAttr(hero, update, args);
|
||||
break;
|
||||
case HERO_SYSTEM_TYPE.EQUIP: //
|
||||
heroAttrs = calEquipPutOnOffIncAttr(hero, args, addSeidList, removeSeidList);
|
||||
break;
|
||||
@@ -635,6 +638,26 @@ export function calEquipStrengthIncAttr(hero: HeroType, update: HeroUpdate, epla
|
||||
return heroAttrs
|
||||
}
|
||||
|
||||
export function calEquipQualityIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[]) {
|
||||
let { 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 dicOldEquipQuality = gameData.equipQuality.get(oldEquip.equipId);
|
||||
let dicNewEquipQuality = gameData.equipQuality.get(oldEquip.equipId);
|
||||
for(let attr of dicOldEquipQuality.attribute) {
|
||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } });
|
||||
}
|
||||
for(let attr of dicNewEquipQuality.attribute) {
|
||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } });
|
||||
}
|
||||
}
|
||||
}
|
||||
return heroAttrs
|
||||
}
|
||||
|
||||
/**
|
||||
* 穿脱, removeSeidList原来身上穿着的所有装备的seid,包括套装的
|
||||
* @param {HeroType} hero 武将
|
||||
|
||||
Reference in New Issue
Block a user