Merge branch 'feature/hero' of gitlab.trgame.cn:zyztech/zyz_server

Conflicts:
	shared/consts/consts.ts
	shared/db/Role.ts
	web-server/app/service/Auth.ts
This commit is contained in:
luying
2020-12-14 11:17:02 +08:00
57 changed files with 18170 additions and 10511 deletions

View File

@@ -1,6 +1,6 @@
import fs = require('fs');
import path = require('path');
import { ABI_TYPE } from '../consts/abilityConst';
import { ABI_TYPE, ABI_STAGE } from '../consts/abilityConst';
import { decodeIdCntArrayStr, getRandEelm } from './util';
import { IT_TYPE } from '../consts/consts';
@@ -11,7 +11,10 @@ const towerInfos = new Map<number, any>();
const towerTaskInfos = new Map<number, any>();
const heroInfos = new Map<number, any>();
const jobInfos = new Map<number, any>();
const jobClassMaxGrades = new Map<number, {grade:number, jobid:number}>();
const jobClassAndgrades = new Map<string, {jobid:number, unlockLevel:number}>();
const levelInfos = new Map<number, {sum: number, cur: number}>();
const heroLevelInfo = new Map<number, number>();
const starRatioInfo = new Map<number, number>();
const heroSkillInfo = new Map<number, any>()
const seidInfo = new Map<number, any>();
@@ -24,6 +27,28 @@ const blueprtToWar = new Map<number, number>();
const goodInfo = new Map<number, any>();
const blueprt = new Map<number, Array<number>>();
const blueprtCompose = new Map<number, any>();
const fiendShips = new Map<string, any>();
const fashions = new Map<number, any>();
const fiendShipHidAandIds = new Map<number, {actorId: number, level:number}>();
const fiendShipLevelMaps = new Map<number, any>();
interface dicStar {
id: number;
quality: number;
star: number;
advanceUpFragmentNum: number;
ceAttr: Map<number, number>
}
const heroStarList = new Map<string, dicStar>();
interface dicWake {
id: number;
quality: number;
star: number;
fragmentNum: number;
consume: string;
ceAttr: Map<number, number>
}
const heroWakeList = new Map<string, dicWake>();
function parseWarData() {
let result = null;
@@ -96,6 +121,11 @@ function parseJobData() {
jobsData.forEach(elem => {
if (elem && elem.jobid) {
jobInfos.set(elem.jobid, elem);
let jobClass = jobClassMaxGrades.get(elem.job_class);
if (!!jobClass && jobClass.grade < elem.grade) {
jobClassMaxGrades.set(elem.job_class, {grade: elem.grade,jobid: elem.jobid});
}
jobClassAndgrades.set(elem.job_class+'_'+elem.grade,{unlockLevel:elem.unlockLevel, jobid:elem.jobid});
}
});
}
@@ -113,6 +143,18 @@ function parseLevelInfo() {
});
}
function parseHeroLevelInfo() {
const jobFile = 'dic_zyz_charexp';
const levelData = gamedata['jsons'][jobFile] || [];
let exp = 0;
levelData.forEach(elem => {
if (elem && elem.level) {
exp += elem.exp;
heroLevelInfo.set(elem.level, exp);
}
});
}
function parseStarRatio() {
const file = 'dic_star_ratio';
const data = gamedata['jsons'][file] || [];
@@ -128,21 +170,23 @@ function parseHeroSkill() {
const data = gamedata['jsons'][file] || [];
data.forEach(elem => {
if (elem && elem.skillid) {
const seidLvUpArr = new Array<number>();
let skillArr = (elem.seid as string).split('&');
let lvUpArr = (elem.selv_up as string).split('&');
let starSeidArr = new Array<{star: number, value: number}>();
let colorStarSeidArr = new Array<{star: number, value: number}>();
(elem.starSeid as string).split('|').forEach(cur => {
if(cur) {
let a = cur.split('&');
starSeidArr.push({star: parseInt(a[0]), value: parseInt(a[1])});
}
});
(elem.colorStarSeid as string).split('|').forEach(cur => {
if(cur) {
let a = cur.split('&');
colorStarSeidArr.push({star: parseInt(a[0]), value: parseInt(a[1])});
}
});
for(let i = 0;i < skillArr.length;i++){
if(skillArr[i]==="") continue;
seidLvUpArr.push(parseInt(skillArr[i]));
if(lvUpArr[i]){
seidLvUpArr.push(parseInt(lvUpArr[i]));
}
else{
seidLvUpArr.push(1000);
}
}
heroSkillInfo.set(elem.skillid, {seidLvUpArr});
heroSkillInfo.set(elem.skillid, {starSeidArr, colorStarSeidArr});
}
});
}
@@ -220,6 +264,50 @@ function parseBlueprtCompose() {
});
}
function parseFashions() {
const file = 'dic_zyz_fashions';
const data = gamedata['jsons'][file] || [];
data.forEach(elem => {
if (elem && elem.id) {
fashions.set(elem.id, elem);
}
});
}
function parseFiendShips() {
const file = 'dic_zyz_friend_ship';
const data = gamedata['jsons'][file] || [];
data.forEach(elem => {
if (elem && elem.id) {
let hids = elem.memberId.split('&');
elem.hids = hids;
delete elem.memberId;
fiendShips.set(elem.shipId + '_' + elem.level, elem);
let fiendShipHidAandId = fiendShipHidAandIds.get(elem.shipId);
if (!fiendShipHidAandId || fiendShipHidAandId.level < elem.level)
fiendShipHidAandIds.set(elem.shipId, {actorId: elem.actorId, level: elem.level});
}
});
}
function parseFiendShipLevels() {
const file = 'dic_zyz_friend_ship_level';
const data = gamedata['jsons'][file] || [];
data.sort(function(a, b) {
return a.level - b.level;
});
}
function parseFiendShipLevelMaps() {
const file = 'dic_zyz_friend_ship_level';
const data = gamedata['jsons'][file] || [];
data.forEach(elem => {
if (elem && elem.id) {
fiendShipLevelMaps.set(elem.level, elem);
}
});
}
function initData (folder: string) {
if(!gamedata.hasOwnProperty(folder)) {
gamedata[folder] = {};
@@ -233,7 +321,7 @@ function initData (folder: string) {
var name = file.split('.')[0];
try {
gamedata[folder][name] = JSON.parse(
fs.readFileSync(path.resolve(__dirname, "../resource/" + folder + "/" + file)).toString()
fs.readFileSync(path.resolve(__dirname, "../resource/" + folder + "/" + file)).toString('utf8').replace(/^\uFEFF/, '')
);
} catch(e) {
console.error(e);
@@ -244,6 +332,43 @@ function initData (folder: string) {
});
}
function parseHeroStar() {
const file = 'dic_zyz_hero_star';
const data = gamedata['jsons'][file] || [];
data.forEach(elem => {
if (elem.id) {
let ceAttr = new Map<number, number>();
ceAttr.set(ABI_STAGE.HP, elem.hp_up);
ceAttr.set(ABI_STAGE.ATK, elem.atk_up);
ceAttr.set(ABI_STAGE.DEF, elem.def_up);
ceAttr.set(ABI_STAGE.MDEF, elem.mdef_up);
ceAttr.set(ABI_STAGE.AGI, elem.agi_up);
ceAttr.set(ABI_STAGE.LUK, elem.luk_up);
heroStarList.set(`${elem.quality}_${elem.star}`,{ceAttr, ...elem});
}
});
}
function parseHeroWake() {
const file = 'dic_zyz_hero_wake';
const data = gamedata['jsons'][file] || [];
data.forEach(elem => {
if (elem.id) {
let ceAttr = new Map<number, number>();
ceAttr.set(ABI_STAGE.HP, elem.hp_up);
ceAttr.set(ABI_STAGE.ATK, elem.atk_up);
ceAttr.set(ABI_STAGE.DEF, elem.def_up);
ceAttr.set(ABI_STAGE.MDEF, elem.mdef_up);
ceAttr.set(ABI_STAGE.AGI, elem.agi_up);
ceAttr.set(ABI_STAGE.LUK, elem.luk_up);
heroWakeList.set(`${elem.quality}_${elem.star}`,{ceAttr, ...elem});
}
});
}
function parseData() {
parseWarData();
parseTowerData();
@@ -251,6 +376,7 @@ function parseData() {
parseHeroData();
parseJobData();
parseLevelInfo();
parseHeroLevelInfo();
parseStarRatio();
parseHeroSkill();
parseSeidList();
@@ -259,6 +385,12 @@ function parseData() {
parseComBtlData();
parseGood();
parseBlueprtCompose();
parseFashions();
parseFiendShips();
parseFiendShipLevels();
parseFiendShipLevelMaps();
parseHeroStar();
parseHeroWake();
}
initData('jsons'); // 加载一般json
@@ -312,6 +444,11 @@ export function getJobInfoById(jid: number) {
return jobInfo;
}
export function getMaxGradeByjobClass(jobClass: number) {
const job = jobClassMaxGrades.get(jobClass);
return job?.jobid;
}
export function getLvByExp(exp: number) {
let curLv = 0;
let entries = levelInfos.entries();
@@ -327,6 +464,21 @@ export function getExpByLv(lv: number) {
return levelInfos.get(lv);
}
export function getHeroLvByExp(exp: number) {
let curLv = 0;
let entries = heroLevelInfo.entries();
for (let [lv, sum] of entries) {
curLv = lv;
if(exp < sum) break;
}
return curLv;
}
export function getHeroExpByLv(lv: number) {
return heroLevelInfo.get(lv);
}
export function getStarRatio(star: number) {
return starRatioInfo.get(star);
}
@@ -411,4 +563,37 @@ export function hasExpeditionById(id: number) {
export function getBlueprtComposeByQuality(quality: number) {
return blueprtCompose.get(quality);
}
export function getFashionsById(id:number) {
return fashions.get(id);
}
export function getFriendShipById(shipId: number, level: number) {
return fiendShips.get(shipId +'_' + level);
}
export function getHidAndLevelByShipId(shipId: number) {
return fiendShipHidAandIds.get(shipId);
}
export function getFriendShipLevels() {
const file = 'dic_zyz_friend_ship_level';
return gamedata['jsons'][file] || [];
}
export function getJobByGradeAndClass(jobClass: number, grade: number) {
return jobClassAndgrades.get(jobClass +'_' + grade);
}
export function getHeroStar(quality: number, star: number) {
return heroStarList.get(`${quality}_${star}`);
}
export function getHeroWake(quality: number, star: number) {
return heroWakeList.get(`${quality}_${star}`);
}
export function getFiendShipLevel(level: number) {
return fiendShipLevelMaps.get(level);
}