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:
@@ -1,13 +1,13 @@
|
||||
import { getHeroInfoById, getStarRatio, getHeroSkillById, getSeidById, getOlySeidByType, getGoodById } from "./gamedata";
|
||||
import { ABI_TYPE, SEID_TYPE } from "../consts/abilityConst";
|
||||
import { WAR_JSON_ATTRIBUTE_TYPE, EXPRESSION } from '../consts/consts';
|
||||
import { getHeroInfoById, getStarRatio, /*getHeroSkillById,*/ getSeidById, getOlySeidByType, getGoodById } from "./gamedata";
|
||||
import { getAtrrNameById, ABI_TYPE, SEID_TYPE } from "../consts/abilityConst";
|
||||
import { EXPRESSION } from '../consts/consts';
|
||||
|
||||
export default class Actor {
|
||||
private hid: number = 0;
|
||||
private lv: number = 0;
|
||||
private oldCe: number = 0;
|
||||
private star: number = 0;
|
||||
private fire: number = 0;
|
||||
private colorStar: number = 0;
|
||||
private equips: Array<any> = [];
|
||||
private conections: Array<{id: number;name: string;valid: boolean;}> = [];
|
||||
/**被动技能 */
|
||||
@@ -19,9 +19,9 @@ export default class Actor {
|
||||
this.lv = hero.lv;
|
||||
this.oldCe = hero.ce;
|
||||
this.star = hero.star;
|
||||
this.fire = hero.fire;
|
||||
this.colorStar = hero.colorStar;
|
||||
this.equips = hero.equips;
|
||||
console.log(this.hid, this.lv, this.oldCe, this.star, this.fire, this.conections);
|
||||
console.log(this.hid, this.lv, this.oldCe, this.star, this.colorStar, this.conections);
|
||||
this.updateActorEffect();
|
||||
}
|
||||
|
||||
@@ -47,21 +47,21 @@ export default class Actor {
|
||||
|
||||
/**更新武将的被动技能 */
|
||||
updateSkillInfo(){
|
||||
let dicHero = getHeroInfoById(this.hid);
|
||||
// let dicHero = getHeroInfoById(this.hid);
|
||||
// console.log('updateSkillInfo', dicHero.skill, getHeroSkillById(dicHero.skill))
|
||||
//被动技能
|
||||
if(dicHero.skill){
|
||||
let {seidLvUpArr} = getHeroSkillById(dicHero.skill);
|
||||
for(let ii = 0;ii < seidLvUpArr.length;ii+=2){
|
||||
if(this.lv >= seidLvUpArr[ii + 1]){
|
||||
let dicSeid = getSeidById(seidLvUpArr[ii]);
|
||||
// console.log('updateSkillInfo*', seidLvUpArr[ii], dicSeid)
|
||||
if(dicSeid){
|
||||
this.seidList[Math.floor(ii/2)] = dicSeid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if(dicHero.skill){
|
||||
// let {seidLvUpArr} = getHeroSkillById(dicHero.skill);
|
||||
// for(let ii = 0;ii < seidLvUpArr.length;ii+=2){
|
||||
// if(this.lv >= seidLvUpArr[ii + 1]){
|
||||
// let dicSeid = getSeidById(seidLvUpArr[ii]);
|
||||
// // console.log('updateSkillInfo*', seidLvUpArr[ii], dicSeid)
|
||||
// if(dicSeid){
|
||||
// this.seidList[Math.floor(ii/2)] = dicSeid;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
addSeidEffect(seidId:number, seidValue?:Array<number>){
|
||||
@@ -260,7 +260,7 @@ export default class Actor {
|
||||
let json = {hp: 0, atk: 0, matk: 0, def: 0, mdef: 0, agi: 0, speed: 0, luk: 0, hit: 0, cri: 0, flee: 0, antCri: 0, damageIncrease: 0, damageDecrease: 0, defIngnore: 0, bloodSuck: 0};
|
||||
|
||||
for(let i = ABI_TYPE.ABI_HP;i < ABI_TYPE.ABI_MAX;i++){
|
||||
let field = WAR_JSON_ATTRIBUTE_TYPE[i];
|
||||
let field = getAtrrNameById(i);
|
||||
json[field] = this.getRealAbility(i);
|
||||
}
|
||||
return json
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -104,6 +104,12 @@ const moment = require('moment');
|
||||
result = { id: parseInt(id), weight: parseInt(weight) };
|
||||
break;
|
||||
}
|
||||
case 'cost': {
|
||||
let [id, count] = arr;
|
||||
if(isNaN(id) || isNaN(count)) throw new Error('data table format wrong');
|
||||
result = { id: parseInt(id), count: parseInt(count)};
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
@@ -391,4 +397,17 @@ export function ratioReward(rewardStr: string, ratio: number): string {
|
||||
res += `${k}&${v}|`;
|
||||
}
|
||||
return res.substring(0, res.length - 1);
|
||||
}
|
||||
|
||||
export function getItems(str:string) {
|
||||
let arr = new Array<{id: number, count: number}>();
|
||||
let strArr = str.split('|');
|
||||
for (let item of strArr) {
|
||||
var itemArr = item.split('&');
|
||||
arr.push({
|
||||
id : parseInt(itemArr[0]),
|
||||
count : parseInt(itemArr[1])
|
||||
});
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
Reference in New Issue
Block a user