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:
@@ -655,7 +655,7 @@ export class ComBattleHandler {
|
|||||||
// 战斗胜利队长扣减藏宝图
|
// 战斗胜利队长扣减藏宝图
|
||||||
if (result && teamStatus.capId != 'robot') {
|
if (result && teamStatus.capId != 'robot') {
|
||||||
let res = await ItemModel.decreaseItems(teamStatus.capId, [{id: teamStatus.blueprtId, count: 1}]);
|
let res = await ItemModel.decreaseItems(teamStatus.capId, [{id: teamStatus.blueprtId, count: 1}]);
|
||||||
if (!res) return resResult(STATUS.COM_BATTLE_BLUEPRT_NOT_ENOUGH);
|
if (res.hasError) return resResult(STATUS.COM_BATTLE_BLUEPRT_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
channel.pushMessage('onTeamComplete', {teamCode, result});
|
channel.pushMessage('onTeamComplete', {teamCode, result});
|
||||||
this.teamMap.delete(teamCode);
|
this.teamMap.delete(teamCode);
|
||||||
@@ -819,7 +819,7 @@ export class ComBattleHandler {
|
|||||||
});
|
});
|
||||||
// 消耗藏宝图和寻宝币
|
// 消耗藏宝图和寻宝币
|
||||||
const rec = await ItemModel.decreaseItems(roleId, original);
|
const rec = await ItemModel.decreaseItems(roleId, original);
|
||||||
if(!rec) {
|
if(rec.hasError) {
|
||||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import {Application, BackendSession} from 'pinus';
|
import {Application, BackendSession} from 'pinus';
|
||||||
import { HeroModel } from '../../../db/Hero';
|
import { HeroModel } from '../../../db/Hero';
|
||||||
import Actor from '../../../pubUtils/actor';
|
import Actor from '../../../pubUtils/actor';
|
||||||
import { updateCe } from '../../../pubUtils/util';
|
|
||||||
|
|
||||||
export default function(app: Application) {
|
export default function(app: Application) {
|
||||||
return new ChatHandler(app);
|
return new ChatHandler(app);
|
||||||
@@ -11,14 +10,6 @@ export class ChatHandler {
|
|||||||
constructor(private app: Application) {
|
constructor(private app: Application) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async test(msg: {}, session: BackendSession) {
|
|
||||||
let roleId = session.get('roleId')
|
|
||||||
let hero = await HeroModel.find().limit(1000);
|
|
||||||
for(let h of hero) {
|
|
||||||
await updateCe(h.roleId, h);
|
|
||||||
}
|
|
||||||
return 'success'
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Send messages to users
|
* Send messages to users
|
||||||
*
|
*
|
||||||
|
|||||||
435
game-server/app/servers/role/handler/heroHandler.ts
Normal file
435
game-server/app/servers/role/handler/heroHandler.ts
Normal file
@@ -0,0 +1,435 @@
|
|||||||
|
import {Application, BackendSession, createTcpMailBox, ChannelService} from 'pinus';
|
||||||
|
import { handleCost } from '../../../services/rewardService';
|
||||||
|
import { calPlayerCeAndSave, getAllAttrStage } from '../../../services/playerCeService';
|
||||||
|
import { resResult, getItems, decodeStr } from '../../../pubUtils/util';
|
||||||
|
import { STATUS } from '../../../consts/statusCode';
|
||||||
|
import {HeroModel} from '../../../db/Hero';
|
||||||
|
import {CURRENCY_BY_TYPE, CURRENCY_TYPE, ITID, CONSUME_TYPE, HERO_GROW_MAX, HERO_SYSTEM_TYPE} from '../../../consts/consts';
|
||||||
|
import {getJobInfoById, getMaxGradeByjobClass, getHidAndLevelByShipId, getHeroInfoById, getGoodById, getHeroExpByLv, getGamedata, getJobByGradeAndClass, getFriendShipById, getFriendShipLevels, getFashionsById, getHeroLvByExp} from '../../../pubUtils/gamedata';
|
||||||
|
import { ABI_STAGE } from '../../../consts/abilityConst';
|
||||||
|
import { RoleModel } from '../../../db/Role';
|
||||||
|
|
||||||
|
const _ = require('underscore');
|
||||||
|
|
||||||
|
export default function(app: Application) {
|
||||||
|
return new HeroHandler(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class HeroHandler {
|
||||||
|
constructor(private app: Application) {
|
||||||
|
}
|
||||||
|
|
||||||
|
private channelService: ChannelService = this.app.get('channelService');
|
||||||
|
|
||||||
|
public async test(msg: { id: number, count: number}, session: BackendSession) {
|
||||||
|
let roleId: string = session.get('roleId');
|
||||||
|
let roleName: string = session.get('roleName');
|
||||||
|
let sid: string = session.get('sid');
|
||||||
|
|
||||||
|
let {id, count} = msg;
|
||||||
|
|
||||||
|
let result = await handleCost(roleId, sid, [{id, count}] );
|
||||||
|
if(!result) {
|
||||||
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
return resResult(STATUS.SUCCESS);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 武将碎片合成
|
||||||
|
public async compose(msg: { hid: number}, session: BackendSession) {
|
||||||
|
let roleId: string = session.get('roleId');
|
||||||
|
let roleName: string = session.get('roleName');
|
||||||
|
let sid: string = session.get('sid');
|
||||||
|
let serverId: number = session.get('serverId');
|
||||||
|
|
||||||
|
let {hid} = msg;
|
||||||
|
|
||||||
|
// 检查是否存在武将
|
||||||
|
let hasHero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||||
|
if(hasHero) return resResult(STATUS.ROLE_HERO_EXISTS);
|
||||||
|
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||||
|
let dicHero = getHeroInfoById(hid);
|
||||||
|
if(!dicHero) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
|
||||||
|
let {pieceId, quality, initialStars: star, pieceCount, jobid: job, name: hName} = dicHero;
|
||||||
|
// 碎片数量是否足够
|
||||||
|
let costResult = await handleCost(roleId, sid, [{id: pieceId, count: pieceCount}]);
|
||||||
|
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
// createHero
|
||||||
|
let curHero = await HeroModel.createHero({
|
||||||
|
roleId, serverId, roleName, hid, hName, star, quality, job
|
||||||
|
}, false);
|
||||||
|
await calPlayerCeAndSave(sid, roleId, [curHero], HERO_SYSTEM_TYPE.STAR, getAllAttrStage());
|
||||||
|
return resResult(STATUS.SUCCESS, {curHero});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 武将升级
|
||||||
|
public async lvUp(msg: { hid: number, type: number, material: Array<{id: number, count: number}>}, session: BackendSession) {
|
||||||
|
let roleId: string = session.get('roleId');
|
||||||
|
let sid: string = session.get('sid');
|
||||||
|
|
||||||
|
let { hid, type, material } = msg;
|
||||||
|
|
||||||
|
let addLv = 0;
|
||||||
|
if(type == 1) {
|
||||||
|
addLv = 1;
|
||||||
|
} else if(type == 5) {
|
||||||
|
addLv = 5;
|
||||||
|
} else {
|
||||||
|
return resResult(STATUS.ROLE_HERO_LV_TYPE_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算得材料可转换的经验
|
||||||
|
let allExp = 0;
|
||||||
|
for(let {id, count} of material) {
|
||||||
|
let dicGoods = getGoodById(id);
|
||||||
|
if(!dicGoods) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
|
||||||
|
let dicItid = ITID.get(dicGoods.itid);
|
||||||
|
if(!dicItid || dicItid.type != CONSUME_TYPE.EXP) {
|
||||||
|
return resResult(STATUS.ROLE_METERIAL_ERROR);
|
||||||
|
}
|
||||||
|
allExp += count * dicGoods.value;
|
||||||
|
}
|
||||||
|
// 计算武将可以升的级数
|
||||||
|
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
|
||||||
|
if(!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
|
||||||
|
let {lv: playerLv} = await RoleModel.findByRoleId(roleId);
|
||||||
|
let {lv: oldLv, exp: oldExp} = hero;
|
||||||
|
if(oldLv + addLv > playerLv ) return resResult(STATUS.ROLE_HERO_LV_OVER);
|
||||||
|
oldExp += allExp;
|
||||||
|
let newExp = oldExp + allExp; // 加上经验书可以达到的经验
|
||||||
|
let newLv = getHeroLvByExp(newExp);
|
||||||
|
|
||||||
|
if(newLv < oldLv + addLv) {
|
||||||
|
return resResult(STATUS.ROLE_EXP_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
let costResult = await handleCost(roleId, sid, material);
|
||||||
|
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
|
hero.lv = playerLv > newLv?newLv: playerLv;
|
||||||
|
hero.exp = newExp;
|
||||||
|
|
||||||
|
let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.STAR, getAllAttrStage());
|
||||||
|
const curHero = {
|
||||||
|
hid, lv : heros[0].lv, exp : heros[0].exp
|
||||||
|
}
|
||||||
|
return resResult(STATUS.SUCCESS, { curHero });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 武将升星
|
||||||
|
public async starUp(msg: { hid: number, star: number, starStage: number}, session: BackendSession) {
|
||||||
|
let roleId: string = session.get('roleId');
|
||||||
|
let sid: string = session.get('sid');
|
||||||
|
|
||||||
|
let {hid, star, starStage} = msg;
|
||||||
|
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||||
|
let dicHero = getHeroInfoById(hid);
|
||||||
|
if(!dicHero) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
|
||||||
|
let {pieceId} = dicHero;
|
||||||
|
|
||||||
|
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
|
||||||
|
if(!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
|
||||||
|
|
||||||
|
let {star: oldStar, starStage: oldStarStage, quality} = hero;
|
||||||
|
if(oldStar != star || oldStarStage != starStage) {
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
}
|
||||||
|
if(oldStar == HERO_GROW_MAX.STAR) {
|
||||||
|
return resResult(STATUS.ROLE_STAR_REACH_MAX);
|
||||||
|
}
|
||||||
|
// 根据dic_zyz_hero_star 计算需要花的碎片并检查碎片数量
|
||||||
|
const dicHeroStar = getGamedata('dic_zyz_hero_star');
|
||||||
|
const curDicHeroStar = dicHeroStar.find(cur => cur.quality == quality && cur.star && oldStar);
|
||||||
|
if(!curDicHeroStar) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
|
||||||
|
|
||||||
|
let costResult = await handleCost(roleId, sid, [{id: pieceId, count: curDicHeroStar.advanceUpFragmentNum}]);
|
||||||
|
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
|
let isUpStar = oldStarStage + 1 == ABI_STAGE.END;
|
||||||
|
hero.star = isUpStar? oldStar + 1: oldStar;
|
||||||
|
hero.starStage = isUpStar? ABI_STAGE.START: oldStarStage + 1;
|
||||||
|
|
||||||
|
let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.STAR, [isUpStar? ABI_STAGE.END: hero.starStage]);
|
||||||
|
const curHero = {
|
||||||
|
hid,
|
||||||
|
star : heros[0].star,
|
||||||
|
starStage : heros[0].starStage,
|
||||||
|
colorStar: heros[0].colorStar,
|
||||||
|
colorStarStage: heros[0].colorStarStage
|
||||||
|
}
|
||||||
|
return resResult(STATUS.SUCCESS, {isUpStar, curHero});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 武将升品
|
||||||
|
public async qualityUp(msg: { hid: number, quality: number }, session: BackendSession) {
|
||||||
|
let roleId: string = session.get('roleId');
|
||||||
|
let sid: string = session.get('sid');
|
||||||
|
|
||||||
|
let {hid, quality} = msg;
|
||||||
|
let dicHero = getHeroInfoById(hid);
|
||||||
|
if(!dicHero) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
|
||||||
|
// 根据dic_hero 获得 碎片id
|
||||||
|
let {pieceId} = dicHero;
|
||||||
|
|
||||||
|
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
|
||||||
|
if(!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
|
||||||
|
let {quality: oldQuality, star} = hero;
|
||||||
|
if(quality != oldQuality) {
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
}
|
||||||
|
if(oldQuality == HERO_GROW_MAX.QUALITY) {
|
||||||
|
return resResult(STATUS.ROLE_QUALITY_REACH_MAX);
|
||||||
|
}
|
||||||
|
if(star != HERO_GROW_MAX.STAR ) {
|
||||||
|
return resResult(STATUS.ROLE_STAR_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据dic_zyz_hero_quality_up 获得需要的材料
|
||||||
|
let dicHeroQualityUp = getGamedata('dic_zyz_hero_quality_up');
|
||||||
|
const curDicHeroQualityUp = dicHeroQualityUp.find(cur => cur.quality == quality);
|
||||||
|
if(!curDicHeroQualityUp) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
|
||||||
|
let {fragmentNum} = curDicHeroQualityUp;
|
||||||
|
|
||||||
|
let costResult = await handleCost(roleId, sid, [{id: pieceId, count: fragmentNum}]);
|
||||||
|
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
|
hero.quality ++;
|
||||||
|
let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.STAR, getAllAttrStage());
|
||||||
|
const curHero = {
|
||||||
|
hid,
|
||||||
|
quality : heros[0].quality
|
||||||
|
}
|
||||||
|
return resResult(STATUS.SUCCESS, {curHero});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 武将觉醒
|
||||||
|
public async wakeUp(msg: { hid: number, colorStar: number, colorStarStage: number}, session: BackendSession) {
|
||||||
|
|
||||||
|
let roleId: string = session.get('roleId');
|
||||||
|
let sid: string = session.get('sid');
|
||||||
|
|
||||||
|
let {hid, colorStar, colorStarStage} = msg;
|
||||||
|
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||||
|
let dicHero = getHeroInfoById(hid);
|
||||||
|
if(!dicHero) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
|
||||||
|
let {pieceId} = dicHero;
|
||||||
|
|
||||||
|
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
|
||||||
|
if(!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
|
||||||
|
|
||||||
|
let {colorStar: oldColorStar, colorStarStage: oldColorStarStage, star, quality} = hero;
|
||||||
|
if(colorStar != oldColorStar || colorStarStage != oldColorStarStage) {
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
}
|
||||||
|
if(star != HERO_GROW_MAX.STAR) {
|
||||||
|
return resResult(STATUS.ROLE_WAKE_STAR_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
if(quality != HERO_GROW_MAX.QUALITY) {
|
||||||
|
return resResult(STATUS.ROLE_QUALITY_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
// 根据dic_zyz_hero_wake 计算需要花的碎片并检查碎片数量
|
||||||
|
const dicHeroStar = getGamedata('dic_zyz_hero_wake');
|
||||||
|
const curDicHeroStar = dicHeroStar.find(cur => cur.quality == quality && cur.star == oldColorStar);
|
||||||
|
if(!curDicHeroStar) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
|
||||||
|
|
||||||
|
let {fragmentNum, consume} = curDicHeroStar;
|
||||||
|
let consumeArr = decodeStr('cost', consume);
|
||||||
|
|
||||||
|
// console.log(JSON.stringify([{id: pieceId, count: fragmentNum}, ...consumeArr]))
|
||||||
|
let costResult = await handleCost(roleId, sid, [{id: pieceId, count: fragmentNum}, ...consumeArr]);
|
||||||
|
|
||||||
|
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
|
let isUpStar = oldColorStar == 0|| oldColorStarStage + 1 == ABI_STAGE.END;
|
||||||
|
hero.colorStar = isUpStar? oldColorStar + 1: oldColorStar;
|
||||||
|
hero.colorStarStage = isUpStar? ABI_STAGE.START: oldColorStarStage + 1;
|
||||||
|
|
||||||
|
let args = new Array<number>();
|
||||||
|
if(oldColorStarStage + 1 == ABI_STAGE.END) {
|
||||||
|
args = getAllAttrStage();
|
||||||
|
} else {
|
||||||
|
args.push(isUpStar? ABI_STAGE.END: hero.colorStarStage)
|
||||||
|
}
|
||||||
|
|
||||||
|
let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.STAR, args);
|
||||||
|
const curHero = {
|
||||||
|
hid,
|
||||||
|
star : heros[0].star,
|
||||||
|
starStage : heros[0].starStage,
|
||||||
|
colorStar: heros[0].colorStar,
|
||||||
|
colorStarStage: heros[0].colorStarStage
|
||||||
|
}
|
||||||
|
return resResult(STATUS.SUCCESS, {isUpStar, curHero});
|
||||||
|
}
|
||||||
|
|
||||||
|
//训练
|
||||||
|
async heroJobTrain (msg: {hid:number}, session: BackendSession) {
|
||||||
|
let roleId: string = session.get('roleId');
|
||||||
|
let sid: string = session.get('sid');
|
||||||
|
let { hid } = msg;
|
||||||
|
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
|
||||||
|
if (!hero)
|
||||||
|
return resResult(STATUS.HERO_NOT_FIND);
|
||||||
|
let heroJob = getJobInfoById(hero.job);
|
||||||
|
let nextHeroJob = getJobByGradeAndClass(heroJob.job_class, heroJob.grade + 1);
|
||||||
|
if (nextHeroJob.unlockLevel > hero.lv)
|
||||||
|
return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL);
|
||||||
|
if (hero.jobStage >= 6)
|
||||||
|
return resResult(STATUS.HERO_JOB_STAGE_REACH_MAX_STAGE);
|
||||||
|
if (hero.job >= getMaxGradeByjobClass(heroJob.job_class))
|
||||||
|
return resResult(STATUS.HERO_JOB_REACH_MAX_STAGE);
|
||||||
|
let cousumeGoods = getItems(heroJob.trainingConsume);
|
||||||
|
let result = await handleCost(roleId, sid, cousumeGoods);
|
||||||
|
if(!result) {
|
||||||
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
hero.jobStage = hero.jobStage ++;
|
||||||
|
//重算战力并下发
|
||||||
|
let heros = await calPlayerCeAndSave(sid, roleId, [hero]);
|
||||||
|
return resResult(STATUS.SUCCESS, { hid : heros[0].hid, job : heros[0].job, jobStage : heros[0].jobStage});
|
||||||
|
}
|
||||||
|
|
||||||
|
//进阶
|
||||||
|
async heroJobStageUp(msg: {hid:number}, session: BackendSession) {
|
||||||
|
let roleId: string = session.get('roleId');
|
||||||
|
let sid: string = session.get('sid');
|
||||||
|
let { hid } = msg;
|
||||||
|
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
|
||||||
|
if (!hero)
|
||||||
|
return resResult(STATUS.HERO_NOT_FIND);
|
||||||
|
let heroJob = getJobInfoById(hero.job);
|
||||||
|
let nextHeroJob = getJobByGradeAndClass(heroJob.job_class, heroJob.grade + 1);
|
||||||
|
if (nextHeroJob.unlockLevel > hero.lv)
|
||||||
|
return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL);
|
||||||
|
if (hero.job >= getMaxGradeByjobClass(heroJob.job_class))
|
||||||
|
return resResult(STATUS.HERO_JOB_REACH_MAX_STAGE);
|
||||||
|
let cousumeGoods = getItems(heroJob.upGradeConsume);
|
||||||
|
let result = await handleCost(roleId, sid, cousumeGoods);
|
||||||
|
if(!result) {
|
||||||
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
hero.job = nextHeroJob.jobid;
|
||||||
|
hero.jobStage = 0;
|
||||||
|
//重算战力并下发
|
||||||
|
let heros = await calPlayerCeAndSave(sid, roleId, [hero]);
|
||||||
|
return resResult(STATUS.SUCCESS, { hid : heros[0].hid, job : heros[0].job, jobStage : heros[0].jobStage});
|
||||||
|
}
|
||||||
|
|
||||||
|
//激活羁绊
|
||||||
|
async heroConectionActivate(msg: {shipId: number}, session: BackendSession) {
|
||||||
|
let roleId: string = session.get('roleId');
|
||||||
|
let sid: string = session.get('sid');
|
||||||
|
let { shipId } = msg;
|
||||||
|
let shipHidAndLevel = getHidAndLevelByShipId(shipId);
|
||||||
|
if (!shipHidAndLevel)
|
||||||
|
return resResult(STATUS.HERO_CONECTION_IS_NOT_EXIT);
|
||||||
|
let hero = await HeroModel.findByHidAndRole(shipHidAndLevel.actorId, roleId, false);
|
||||||
|
if (!hero)
|
||||||
|
return resResult(STATUS.HERO_NOT_FIND);
|
||||||
|
let flag = true;
|
||||||
|
let level = 1;
|
||||||
|
for (let conection of hero.conections) {
|
||||||
|
if (conection.shipId == shipId ) {
|
||||||
|
if (conection.level >= shipHidAndLevel.level) {
|
||||||
|
return resResult(STATUS.HERO_CONECTION_IS_MAX_LEVEL);
|
||||||
|
} else {
|
||||||
|
flag = false;
|
||||||
|
conection.level++;
|
||||||
|
level = conection.level;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!!flag) {
|
||||||
|
hero.conections.push({shipId,level});
|
||||||
|
}
|
||||||
|
let friendShip = getFriendShipById(shipId, level);
|
||||||
|
if (hero.star < friendShip.level)
|
||||||
|
return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL);
|
||||||
|
let hids = friendShip.hids;
|
||||||
|
for (let hid of hids) {
|
||||||
|
if (hid == shipHidAndLevel.actorId)
|
||||||
|
continue;
|
||||||
|
let member = await HeroModel.findByHidAndRole(hid, roleId, false);
|
||||||
|
if (!member)
|
||||||
|
return resResult(STATUS.ROLE_SHORT_HERO_CONECTION);
|
||||||
|
if (member.star < friendShip.level)
|
||||||
|
return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL);
|
||||||
|
}
|
||||||
|
let result = await handleCost(roleId, sid, [{id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.COIN), count:5000}]);
|
||||||
|
if(!result) {
|
||||||
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
//重算战力并下发
|
||||||
|
let heros = await calPlayerCeAndSave(sid, roleId, [hero]);
|
||||||
|
return resResult(STATUS.SUCCESS, { hid : heros[0].hid, conections : heros[0].conections});
|
||||||
|
}
|
||||||
|
|
||||||
|
//赠送(包括一键赠送)
|
||||||
|
async heroGiveFavor(msg: {hid:number, items:Array<{id : number,count : number}>}, session: BackendSession) {
|
||||||
|
let roleId: string = session.get('roleId');
|
||||||
|
let sid: string = session.get('sid');
|
||||||
|
let { hid, items } = msg;
|
||||||
|
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
|
||||||
|
if (!hero)
|
||||||
|
return resResult(STATUS.HERO_NOT_FIND);
|
||||||
|
let friendShipLevels = getFriendShipLevels();
|
||||||
|
if (friendShipLevels[friendShipLevels.length - 1].level <= hero.favourLv)
|
||||||
|
return resResult(STATUS.HERO_FAVOUR_LEVEL_REACH_MAXT);
|
||||||
|
//计算消耗物品转化的经验
|
||||||
|
let exp:number = 0;
|
||||||
|
for (let item of items) {
|
||||||
|
let itemInfo = getGoodById(item.id);
|
||||||
|
if (itemInfo.itid == CONSUME_TYPE.FAVOUR) {
|
||||||
|
exp += itemInfo.value;
|
||||||
|
} else {
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hero.favour += exp;
|
||||||
|
for (let friendShipLevel of friendShipLevels) {
|
||||||
|
if (friendShipLevel.level < hero.favourLv)
|
||||||
|
continue;
|
||||||
|
if (friendShipLevel.exp > hero.favour)
|
||||||
|
break;
|
||||||
|
hero.favour -= friendShipLevel.exp;
|
||||||
|
hero.favourLv++;
|
||||||
|
}
|
||||||
|
let result = await handleCost(roleId, sid, items);
|
||||||
|
if(!result) {
|
||||||
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
//重算战力并下发
|
||||||
|
let heros = await calPlayerCeAndSave(sid, roleId, [hero]);
|
||||||
|
return resResult(STATUS.SUCCESS, { hid : heros[0].hid, favour : heros[0].favour, favourLv : heros[0].favourLv});
|
||||||
|
}
|
||||||
|
|
||||||
|
//穿带时装
|
||||||
|
async heroWearSkin(msg: {id:number}, session: BackendSession) {
|
||||||
|
let roleId: string = session.get('roleId');
|
||||||
|
let sid: string = session.get('sid');
|
||||||
|
let { id } = msg;
|
||||||
|
let skinInfo = getFashionsById(id);
|
||||||
|
if (!skinInfo)
|
||||||
|
return resResult(STATUS.HERO_SKIN_NOT_FIND);
|
||||||
|
let hero = await HeroModel.findByHidAndRole(skinInfo.actorId, roleId, false);
|
||||||
|
if (!hero)
|
||||||
|
return resResult(STATUS.HERO_NOT_FIND);
|
||||||
|
let result = false;
|
||||||
|
for (let skin of hero.skins) {
|
||||||
|
if (skin.id == id) {
|
||||||
|
skin.enable = true;
|
||||||
|
result = true;
|
||||||
|
} else {
|
||||||
|
skin.enable = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!result) {
|
||||||
|
return resResult(STATUS.HERO_SKIN_NOT_FIND);
|
||||||
|
}
|
||||||
|
await calPlayerCeAndSave(sid, roleId, [hero]);
|
||||||
|
return resResult(STATUS.SUCCESS, { hid : hero.hid, skins : hero.skins});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -30,17 +30,16 @@ export class RoleHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async initHeros(roleId: string, roleName: string) {
|
async initHeros(roleId: string, roleName: string) {
|
||||||
const seqId = await CounterModel.getNewCounter(COUNTER.HID);
|
|
||||||
let ce = calculateCE({hid: 1, lv: 1});
|
|
||||||
|
|
||||||
const heroInfo = {
|
const heroInfo = {
|
||||||
roleId,
|
roleId,
|
||||||
roleName,
|
roleName,
|
||||||
hid: 1,
|
hid: 1,
|
||||||
hName: '曹操',
|
hName: '曹操',
|
||||||
seqId,
|
quality: 1,
|
||||||
|
job: 1,
|
||||||
star: 0,
|
star: 0,
|
||||||
ce
|
serverId: 1
|
||||||
}
|
}
|
||||||
await HeroModel.createHero(heroInfo);
|
await HeroModel.createHero(heroInfo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -204,8 +204,8 @@ async function checkCond(roleId: string, heroes, type: number, param: number, cn
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case 1:
|
case 1:
|
||||||
for(let seqId of heroes) {
|
for(let seqId of heroes) {
|
||||||
const {star, fire} = await HeroModel.findBySeqIdAndRole(seqId, roleId);
|
const {star, colorStar} = await HeroModel.findBySeqIdAndRole(seqId, roleId);
|
||||||
if (star + fire >= param) {
|
if (star + colorStar >= param) {
|
||||||
heroCnt++;
|
heroCnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ import { PvpDefenseModel } from '../db/PvpDefense';
|
|||||||
|
|
||||||
import { getWarJsons, getGamedata, getExpeditionById } from '../pubUtils/gamedata';
|
import { getWarJsons, getGamedata, getExpeditionById } from '../pubUtils/gamedata';
|
||||||
import { decodeStr, resResult, setLocalHours, shouldRefresh } from '../pubUtils/util';
|
import { decodeStr, resResult, setLocalHours, shouldRefresh } from '../pubUtils/util';
|
||||||
import { WAR_JSON_ATTRIBUTE_TYPE, EXPEDITION_CONST } from '../consts/consts';
|
import { EXPEDITION_CONST } from '../consts/consts';
|
||||||
|
import { getAtrrNameById} from '../consts/abilityConst';
|
||||||
import Actor from '../pubUtils/actor';
|
import Actor from '../pubUtils/actor';
|
||||||
import { ExpeditionWarRecordModel } from '../db/ExpeditionWarRecord';
|
import { ExpeditionWarRecordModel } from '../db/ExpeditionWarRecord';
|
||||||
|
|
||||||
@@ -143,7 +144,7 @@ export function decodeWarJsonAttribute(attribute: string) {
|
|||||||
let obj = {hp: 0, atk: 0, matk: 0, def: 0, mdef: 0, speed: 0, agi: 0, luk: 0, hit: 0, cri: 0, flee: 0, antCri: 0, damageIncrease: 0, damageDecrease: 0, defIngnore: 0, bloodSuck: 0}
|
let obj = {hp: 0, atk: 0, matk: 0, def: 0, mdef: 0, speed: 0, agi: 0, luk: 0, hit: 0, cri: 0, flee: 0, antCri: 0, damageIncrease: 0, damageDecrease: 0, defIngnore: 0, bloodSuck: 0}
|
||||||
|
|
||||||
for(let {id, value} of arr) {
|
for(let {id, value} of arr) {
|
||||||
let field = WAR_JSON_ATTRIBUTE_TYPE[id];
|
let field = getAtrrNameById(id);
|
||||||
if(field) {
|
if(field) {
|
||||||
obj[field] = value;
|
obj[field] = value;
|
||||||
}
|
}
|
||||||
|
|||||||
219
game-server/app/services/playerCeService.ts
Normal file
219
game-server/app/services/playerCeService.ts
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
/**
|
||||||
|
* 体力系统
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { HERO_SYSTEM_TYPE } from '../consts/consts';
|
||||||
|
import { pinus } from 'pinus';
|
||||||
|
import { STATUS } from '../consts/statusCode';
|
||||||
|
|
||||||
|
import { resResult } from '../pubUtils/util';
|
||||||
|
import Hero from '../db/Hero';
|
||||||
|
import { RoleModel } from '../db/Role';
|
||||||
|
import { CeAttrData, CeAttr } from '../db/BaseModel';
|
||||||
|
import { getJobInfoById, getJobByGradeAndClass, getHeroInfoById, getHeroStar, getHeroWake, getFiendShipLevel, getFriendShipById, getHeroSkillById, getSeidById } from '../pubUtils/gamedata';
|
||||||
|
import { getAttrNameByJobStage, getAttrCeRatio, getAtrrNameById, ABI_TYPE_TO_STAGE, ABI_STAGE, SEID_TYPE, HERO_ATTR} from '../consts/abilityConst';
|
||||||
|
const HERO_CE_RATIO = 100;
|
||||||
|
//战力计算TODO
|
||||||
|
export function calPlayerCe(hero: any, type: number, args: Array<number>) {
|
||||||
|
let incCe = 0;
|
||||||
|
let incArr = {};
|
||||||
|
let reIncAttr = {}; // {"hp": {"base": number, "fixUp": number, "ratioUp": number}}
|
||||||
|
|
||||||
|
let addSeidList = new Array<number>();
|
||||||
|
let removeSeidList = new Array<number>();
|
||||||
|
|
||||||
|
if (type == HERO_SYSTEM_TYPE.STAR) {
|
||||||
|
reIncAttr = calHeroStarIncAttr(hero, args, addSeidList, removeSeidList); // args: 升的星盘
|
||||||
|
} else if (type == HERO_SYSTEM_TYPE.TRAIN) {
|
||||||
|
reIncAttr = calHeroTrainIncAttr(hero);
|
||||||
|
}
|
||||||
|
|
||||||
|
addSeidEffect(reIncAttr, addSeidList, removeSeidList); // 处理加值
|
||||||
|
if(!hero.ceAttr) hero.ceAttr = new CeAttr();
|
||||||
|
for (let attrName in reIncAttr) {
|
||||||
|
let originalAttrData: CeAttrData = hero.ceAttr[attrName]||new CeAttrData();
|
||||||
|
let oldCe = originalAttrData.fixUp * HERO_CE_RATIO + originalAttrData.base *(HERO_CE_RATIO + originalAttrData.ratioUp)
|
||||||
|
if(!hero.ceAttr[attrName]) hero.ceAttr[attrName] = new CeAttrData();
|
||||||
|
for (let attrKey in reIncAttr[attrName]) {
|
||||||
|
hero.ceAttr[attrName][attrKey] = parseInt(reIncAttr[attrName][attrKey]);
|
||||||
|
}
|
||||||
|
incArr[attrName] = reIncAttr[attrName].fixUp * HERO_CE_RATIO + reIncAttr[attrName].base *(HERO_CE_RATIO + reIncAttr[attrName].ratioUp) - oldCe; //计算属性
|
||||||
|
incCe += incArr[attrName] * getAttrCeRatio(attrName);
|
||||||
|
}
|
||||||
|
hero.ce += incCe;
|
||||||
|
return incCe;
|
||||||
|
}
|
||||||
|
|
||||||
|
//修改并下发战力
|
||||||
|
export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Array<any>, type?: number, args?: Array<number>) {
|
||||||
|
let incPlayerCe = 0;
|
||||||
|
let pushHeros = [];
|
||||||
|
|
||||||
|
for (let hero of heros) {
|
||||||
|
let incHeroCe = calPlayerCe(hero, type, args);
|
||||||
|
incPlayerCe += incHeroCe;
|
||||||
|
await hero.save();
|
||||||
|
pushHeros.push({
|
||||||
|
hid: hero.hid,
|
||||||
|
ce: hero.ce,
|
||||||
|
incHeroCe : incHeroCe,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let role = await RoleModel.findByRoleId(roleId);
|
||||||
|
role.ce += incPlayerCe;
|
||||||
|
await RoleModel.updateRoleInfo(roleId, role);
|
||||||
|
//下发战力
|
||||||
|
let uids = [{ uid: roleId, sid }];
|
||||||
|
pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: role.ce, heros: pushHeros, topFiveCe: 0 }), uids);
|
||||||
|
return heros;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function calHeroStarIncAttr (hero: Hero, args: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number>) {
|
||||||
|
let {star, starStage, quality, colorStar, colorStarStage, ceAttr} = hero;
|
||||||
|
let res = {};
|
||||||
|
const dicHero = getHeroInfoById(hero.hid);
|
||||||
|
|
||||||
|
const isWake = colorStar > 0; // 是否觉醒,只要激活了觉醒,彩星就会 > 1
|
||||||
|
if(isWake) {
|
||||||
|
if(colorStarStage == ABI_STAGE.START) colorStar = colorStar -1;
|
||||||
|
} else {
|
||||||
|
if(starStage == ABI_STAGE.START) star = star -1;
|
||||||
|
}
|
||||||
|
const dicStar = isWake? getHeroWake(quality, colorStar): getHeroStar(quality, star); // 星级表
|
||||||
|
|
||||||
|
for(let stage of args) {
|
||||||
|
|
||||||
|
let targetAttrId = getFieldByStage(stage, hero.job); // 转换为17维的属性id
|
||||||
|
let heroAttr = dicHero.baseAbilityArr[targetAttrId]; // 武将表hp等
|
||||||
|
let heroUpAttr = dicHero.baseAbilityUpArr[targetAttrId]; // 武将表hp_up等
|
||||||
|
|
||||||
|
let starUp = dicStar.ceAttr.get(stage);
|
||||||
|
let newBase = heroAttr + hero.lv * (heroUpAttr + starUp);
|
||||||
|
let field = getAtrrNameById(targetAttrId);
|
||||||
|
let ceAttrData: CeAttrData = ceAttr[field]||new CeAttrData(); // 存表中的属性下的base,fixup,ratioup
|
||||||
|
let {ratioUp = 0, fixUp = 0} = ceAttrData;
|
||||||
|
res[field] = { base: newBase, ratioUp, fixUp}; // base变动,增量为△base * ratio + 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解锁技能
|
||||||
|
if(dicHero.skill){
|
||||||
|
let {starSeidArr, colorStarSeidArr} = getHeroSkillById(dicHero.skill);
|
||||||
|
if(isWake) {
|
||||||
|
for(let {star, value} of starSeidArr){
|
||||||
|
if(hero.star == star){
|
||||||
|
addSeidList.push(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for(let {star, value} of colorStarSeidArr){
|
||||||
|
if(hero.colorStar == star){
|
||||||
|
addSeidList.push(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;//属性增量可以是多个
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getAllAttrStage () {
|
||||||
|
let attrs = new Array<number>(); // 有升级的属性 1-hp 2-atk 3-def 4-mdef 5-agi 6-luk
|
||||||
|
for(let stage = ABI_STAGE.START + 1; stage <= ABI_STAGE.END; stage++) {
|
||||||
|
attrs.push(stage)
|
||||||
|
};
|
||||||
|
return attrs;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function calHeroTrainIncAttr(hero: any) {
|
||||||
|
let res = {};
|
||||||
|
let attrName: string = getAttrNameByJobStage(hero.jobStage);
|
||||||
|
res[attrName] = {fixUp: hero.CeAttr[attrName].fixUp, base: hero.CeAttr[attrName].base, ratioUp: hero.CeAttr[attrName].ratioUp};
|
||||||
|
let currentJob = getJobInfoById(hero.job);
|
||||||
|
if (currentJob.grade > 1) {
|
||||||
|
let jobGradeAndClass = getJobByGradeAndClass(currentJob.job_class, currentJob.grade - 1);
|
||||||
|
let lastJob = getJobInfoById(jobGradeAndClass.jobid);
|
||||||
|
res[attrName].fixUp += (currentJob[attrName] - lastJob[attrName]) * HERO_CE_RATIO;
|
||||||
|
} else {
|
||||||
|
res[attrName].fixUp += currentJob[attrName] * HERO_CE_RATIO;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function calHeroJobStageUpIncAttr(hero: any) {
|
||||||
|
let res = {};
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function calWaerHeroSkinIncAttr(hero: any) {
|
||||||
|
let res = {};
|
||||||
|
let friendShipLevel = getFiendShipLevel(hero.favourLv);
|
||||||
|
hero.conections.forEach(element => {
|
||||||
|
let reFriendShip = getFriendShipById(element.shipId, element.level);
|
||||||
|
if (reFriendShip)
|
||||||
|
getAtrrNameById(reFriendShip);
|
||||||
|
});
|
||||||
|
if (hero.favourLv > 1) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据存在升星表等的stage字段的id对应17维id
|
||||||
|
function getFieldByStage(stage: number, jobid: number) {
|
||||||
|
let targetAttrId = ABI_TYPE_TO_STAGE.get(stage);
|
||||||
|
if(typeof targetAttrId === 'number') {
|
||||||
|
return targetAttrId
|
||||||
|
} else {
|
||||||
|
const dicJob = getJobInfoById(jobid);
|
||||||
|
return targetAttrId(dicJob.type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 添加技能增加的被动属性
|
||||||
|
function addSeidEffect(reIncAttr: CeAttr, addSeidList: Array<number>, removeSeidList: Array<number>) {
|
||||||
|
|
||||||
|
let otiginalSeidList = [
|
||||||
|
{list: addSeidList, multi: 1},
|
||||||
|
{list: removeSeidList, multi: -1}
|
||||||
|
];
|
||||||
|
for(let {list, multi} of otiginalSeidList) {
|
||||||
|
let effectList = new Array<any>(); // any: dic_zyz_se表内容
|
||||||
|
for(let seid of list) {
|
||||||
|
let dicSeid = getSeidById(seid);
|
||||||
|
if(dicSeid && dicSeid.id > 0){
|
||||||
|
addSeid(effectList, dicSeid.id, dicSeid.gainValueArr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(let {type, gainValueArr: [ability, value]} of effectList) {
|
||||||
|
if(!reIncAttr[HERO_ATTR[ability]]) {
|
||||||
|
reIncAttr[HERO_ATTR[ability]] = new CeAttrData();
|
||||||
|
}
|
||||||
|
if(type == SEID_TYPE.TYPE101) { // 加值
|
||||||
|
reIncAttr[HERO_ATTR[ability]].ratioUp += value * multi;
|
||||||
|
} else if (type == SEID_TYPE.TYPE102) { // 加百分比
|
||||||
|
reIncAttr[HERO_ATTR[ability]].fixUp += value * multi;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取dic_zyz_se内容
|
||||||
|
function addSeid(effectList: Array<any>, seidId:number, seidValue = new Array<number>()){
|
||||||
|
// console.log('addSeidEffect', seidId, seidValue)
|
||||||
|
let curSeid = getSeidById(seidId);
|
||||||
|
if(!curSeid) {console.log("seidId not found:"+seidId);return;}
|
||||||
|
if(!seidValue) seidValue = curSeid.gainValueArr;
|
||||||
|
|
||||||
|
if(curSeid.type === 999){
|
||||||
|
for(let i = 0;i < seidValue.length;i++){
|
||||||
|
addSeid(effectList, seidValue[i]);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
effectList.push(curSeid);
|
||||||
|
}
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
import { GOOD_TYPE, ITID, CURRENCY, CURRENCY_TYPE, COUNTER } from './../consts/consts';
|
import { GOOD_TYPE, ITID, CURRENCY, CURRENCY_TYPE, COUNTER } from './../consts/consts';
|
||||||
import { EquipModel } from './../db/Equip';
|
import { EquipModel } from './../db/Equip';
|
||||||
import { CounterModel } from './../db/Counter';
|
import { CounterModel } from './../db/Counter';
|
||||||
import { decodeStr } from '../pubUtils/util';
|
import { decodeStr, resResult } from '../pubUtils/util';
|
||||||
import { getGoodById } from '../pubUtils/gamedata';
|
import { getGoodById } from '../pubUtils/gamedata';
|
||||||
import { RoleModel } from '../db/Role';
|
import { RoleModel } from '../db/Role';
|
||||||
import { setAp } from './actionPointService';
|
import { setAp } from './actionPointService';
|
||||||
import { ItemModel } from '../db/Item';
|
import { ItemModel } from '../db/Item';
|
||||||
|
import { STATUS } from '../consts/statusCode';
|
||||||
|
import { pinus } from 'pinus';
|
||||||
|
|
||||||
export async function handleFixedReward(roleId: string, roleName: string, rewardStr: string, multi: number) {
|
export async function handleFixedReward(roleId: string, roleName: string, rewardStr: string, multi: number) {
|
||||||
let reward = decodeStr('fixReward', rewardStr);
|
let reward = decodeStr('fixReward', rewardStr);
|
||||||
@@ -120,3 +122,57 @@ async function rewardCurrency (roleId: string, dicGood: any, data: {id:number,cn
|
|||||||
});
|
});
|
||||||
return goods;
|
return goods;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function handleCost(roleId: string, sid: string, goods: Array<{id: number, count: number}>) {
|
||||||
|
// 检查道具数量
|
||||||
|
let role, costGold = 0, costCoin = 0, items = new Array<{id: number, count: number}>(), ids = new Array<number>() ;
|
||||||
|
for(let {id, count} of goods) {
|
||||||
|
let goodInfo = getGoodById(id);
|
||||||
|
if(goodInfo.goodType == GOOD_TYPE.CONSUMES|| goodInfo.goodType == GOOD_TYPE.SCRIPT) { // 消耗品
|
||||||
|
let {isCurrency} = ITID.get(goodInfo.itid);
|
||||||
|
if(isCurrency) { // 货币
|
||||||
|
if(!role) role = await RoleModel.findByRoleId(roleId);
|
||||||
|
let dicCurrency = CURRENCY.get(id);
|
||||||
|
if(dicCurrency.type == CURRENCY_TYPE.GOLD) { // 处理元宝
|
||||||
|
if(role.gold < count + costGold) return false;
|
||||||
|
costGold += count;
|
||||||
|
} else if(dicCurrency.type == CURRENCY_TYPE.COIN) { // 处理铜币
|
||||||
|
if(role.coin < count + costCoin) return false;
|
||||||
|
costCoin += count;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let findItem = items.find(cur => cur.id == id);
|
||||||
|
if(findItem) {
|
||||||
|
findItem.count += count;
|
||||||
|
} else {
|
||||||
|
items.push({id, count}); ids.push(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(let {id, count} of items) {
|
||||||
|
let item = await ItemModel.findbyRoleAndGidAndCount(roleId, id, count);
|
||||||
|
if(!item) return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 推送参数
|
||||||
|
let gold = 0, coin = 0, resultGoods = [];
|
||||||
|
if(costGold > 0) {
|
||||||
|
role = await RoleModel.costGold(roleId, costGold);
|
||||||
|
if(role) gold = role.gold;
|
||||||
|
}
|
||||||
|
if(costCoin > 0) {
|
||||||
|
role = await RoleModel.costCoin(roleId, costCoin);
|
||||||
|
if(role) coin = role.coin;
|
||||||
|
}
|
||||||
|
if(items.length > 0) {
|
||||||
|
let {hasError, result} = await ItemModel.decreaseItems(roleId, items);
|
||||||
|
if(hasError) return;
|
||||||
|
resultGoods = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
let uids = [{uid: roleId, sid}];
|
||||||
|
pinus.app.get('channelService').pushMessageByUids('onItemUpdate', resResult(STATUS.SUCCESS, {goods: resultGoods, gold, coin} ), uids);
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@ module.exports = {
|
|||||||
'id': 'connector-server-1',
|
'id': 'connector-server-1',
|
||||||
'host': '127.0.0.1',
|
'host': '127.0.0.1',
|
||||||
'port': 4050,
|
'port': 4050,
|
||||||
'clientHost': 'zyz_web.trgame.cn',
|
'clientHost': 'zyzdev.trgame.cn',
|
||||||
'clientPort': 3050,
|
'clientPort': 3050,
|
||||||
'frontend': true,
|
'frontend': true,
|
||||||
'args': '--inspect=10001'
|
'args': '--inspect=10001'
|
||||||
@@ -29,7 +29,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
'id': 'gate-server-1',
|
'id': 'gate-server-1',
|
||||||
'host': '127.0.0.1',
|
'host': '127.0.0.1',
|
||||||
'clientHost': 'zyz_web.trgame.cn',
|
'clientHost': 'zyzdev.trgame.cn',
|
||||||
'clientPort': 3014,
|
'clientPort': 3014,
|
||||||
'frontend': true,
|
'frontend': true,
|
||||||
'args': '--inspect=10003'
|
'args': '--inspect=10003'
|
||||||
@@ -37,7 +37,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
'id': 'gate-server-2',
|
'id': 'gate-server-2',
|
||||||
'host': '127.0.0.1',
|
'host': '127.0.0.1',
|
||||||
'clientHost': 'zyz_web.trgame.cn',
|
'clientHost': 'zyzdev.trgame.cn',
|
||||||
'clientPort': 3015,
|
'clientPort': 3015,
|
||||||
'frontend': true,
|
'frontend': true,
|
||||||
'args': '--inspect=10008'
|
'args': '--inspect=10008'
|
||||||
@@ -46,9 +46,9 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
'production': {
|
'production': {
|
||||||
'connector': [
|
'connector': [
|
||||||
{'id': 'connector-server-1', 'port': 4050, 'clientHost': 'zyz_web.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true},
|
{'id': 'connector-server-1', 'port': 4050, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true},
|
||||||
{'id': 'connector-server-2', 'port': 4051, 'clientHost': 'zyz_web.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true},
|
{'id': 'connector-server-2', 'port': 4051, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true},
|
||||||
{'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyz_web.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true}
|
{'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true}
|
||||||
],
|
],
|
||||||
'chat': [
|
'chat': [
|
||||||
{'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050},
|
{'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050},
|
||||||
@@ -62,11 +62,11 @@ module.exports = {
|
|||||||
{'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054}
|
{'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054}
|
||||||
],
|
],
|
||||||
'gate': [
|
'gate': [
|
||||||
{'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'zyz_web.trgame.cn', 'clientPort': 3014, 'frontend': true},
|
{'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'zyzdev.trgame.cn', 'clientPort': 3014, 'frontend': true},
|
||||||
{
|
{
|
||||||
'id': 'gate-server-2',
|
'id': 'gate-server-2',
|
||||||
'host': '127.0.0.1',
|
'host': '127.0.0.1',
|
||||||
'clientHost': 'zyz_web.trgame.cn',
|
'clientHost': 'zyzdev.trgame.cn',
|
||||||
'clientPort': 3015,
|
'clientPort': 3015,
|
||||||
'frontend': true
|
'frontend': true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,17 +194,12 @@ export default class GMUsers extends Service {
|
|||||||
for(let hid of hids) {
|
for(let hid of hids) {
|
||||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||||
if(hero) continue;
|
if(hero) continue;
|
||||||
const seqId = await CounterModel.getNewCounter(COUNTER.HID)||-1;
|
|
||||||
let dicHero = ctx.service.utils.getHeroById(hid);
|
let dicHero = ctx.service.utils.getHeroById(hid);
|
||||||
if(!dicHero) continue;
|
if(!dicHero) continue;
|
||||||
|
let {quality, initialStars: star, jobid: job, name: hName} = dicHero;
|
||||||
const heroInfo = {
|
const heroInfo = {
|
||||||
roleId,
|
roleId, roleName: role.roleName, hid, hName, star, quality, job, serverId: role.serverId,
|
||||||
roleName: role.roleName,
|
lv: hlv
|
||||||
hid: hid,
|
|
||||||
hName: dicHero.name,
|
|
||||||
seqId,
|
|
||||||
lv: hlv,
|
|
||||||
star: dicHero.quality
|
|
||||||
}
|
}
|
||||||
heroInfos.push(heroInfo);
|
heroInfos.push(heroInfo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,18 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
if [ $# != 1 ] ; then
|
if [ $# != 1 ] ; then
|
||||||
echo "需要1个参数"
|
echo "需要1个参数"
|
||||||
echo "pro: 同步代码到 pro 服务器上,作为正式服使用"
|
echo "stable: 同步代码到 stable 服务器上,作为正式服使用"
|
||||||
|
echo "alpha: 同步代码到 alpha 服务器上,作为测试服供服务开发使用"
|
||||||
echo "dev: 同步代码到 dev 服务器上,作为测试服供服务开发使用"
|
echo "dev: 同步代码到 dev 服务器上,作为测试服供服务开发使用"
|
||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ${1} == 'pro' ] ; then
|
if [ ${1} == 'stable' ] ; then
|
||||||
destUrl="root@zyz:/root/zyz/"
|
destUrl="root@zyz:/root/zyz/"
|
||||||
|
elif [ ${1} == 'alpha' ] ; then
|
||||||
|
destUrl="root@zyzalpha:/root/zyz/"
|
||||||
elif [ ${1} == 'dev' ] ; then
|
elif [ ${1} == 'dev' ] ; then
|
||||||
destUrl="root@zyztest:/root/zyz/"
|
destUrl="root@zyzdev:/root/zyz/"
|
||||||
else
|
else
|
||||||
echo "需要一个参数指明服务器"
|
echo "需要一个参数指明服务器"
|
||||||
exit 1;
|
exit 1;
|
||||||
|
|||||||
@@ -4,6 +4,9 @@
|
|||||||
* 属性 id
|
* 属性 id
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import { JOB_TYPE } from "./consts";
|
||||||
|
|
||||||
export enum ABI_TYPE{
|
export enum ABI_TYPE{
|
||||||
/**生命 */
|
/**生命 */
|
||||||
ABI_HP = 1,
|
ABI_HP = 1,
|
||||||
@@ -42,13 +45,93 @@ export enum ABI_TYPE{
|
|||||||
ABI_AP = 17,
|
ABI_AP = 17,
|
||||||
|
|
||||||
ABI_MAX,
|
ABI_MAX,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export enum SEID_TYPE{
|
export enum SEID_TYPE {
|
||||||
/**属性固定值加成(数值) */
|
/**属性固定值加成(数值) */
|
||||||
TYPE101 = 101,
|
TYPE101 = 101,
|
||||||
/**属性固定值加成(百分比) */
|
/**属性固定值加成(百分比) */
|
||||||
TYPE102 = 102,
|
TYPE102 = 102,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum ABI_STAGE {
|
||||||
|
START = 0,
|
||||||
|
HP = 1,
|
||||||
|
ATK = 2,
|
||||||
|
DEF = 3,
|
||||||
|
MDEF = 4,
|
||||||
|
AGI = 5,
|
||||||
|
LUK = 6,
|
||||||
|
END = 6
|
||||||
|
}
|
||||||
|
|
||||||
|
export const ATTR = {}
|
||||||
|
//武将训练等级
|
||||||
|
export const HEROTARIN = {
|
||||||
|
1: "hp",
|
||||||
|
2: "atk",
|
||||||
|
3: "def",
|
||||||
|
4: "mdef",
|
||||||
|
5: "agi",
|
||||||
|
6: "luk"
|
||||||
|
};
|
||||||
|
//战力系数
|
||||||
|
export const CE_RATIO = {
|
||||||
|
"hp" : 1,
|
||||||
|
"atk" : 2,
|
||||||
|
"matk": 2,
|
||||||
|
"def": 2,
|
||||||
|
"mdef": 2,
|
||||||
|
"agi": 2,
|
||||||
|
"luk": 0,
|
||||||
|
"hit": 0,
|
||||||
|
"cri": 0,
|
||||||
|
"flee": 0,
|
||||||
|
"antCri": 0,
|
||||||
|
"damageIncrease": 0,
|
||||||
|
"damageDecrease": 0,
|
||||||
|
"defIngnore": 0,
|
||||||
|
"bloodSuck": 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
export const HERO_ATTR = {
|
||||||
|
1: "hp", // 生命
|
||||||
|
2: "atk", // 物攻
|
||||||
|
3: "matk", // 策攻
|
||||||
|
4: "def", // 物防
|
||||||
|
5: "mdef", // 测防
|
||||||
|
6: "agi", // 敏捷
|
||||||
|
7: "luk", // 幸运
|
||||||
|
8: "speed", // 移动
|
||||||
|
9: "hit", // 命中等级
|
||||||
|
10: "cri", // 暴击等级
|
||||||
|
11: "flee", // 格挡等级
|
||||||
|
12: "antCri", // 抗暴等级
|
||||||
|
13: "damageIncrease", // 伤害加深等级
|
||||||
|
14: "damageDecrease", // 伤害减免等级
|
||||||
|
15: "defIngnore", // 忽视防御等级
|
||||||
|
16: "bloodSuck", // 吸血等级
|
||||||
|
17: "ap" // 怒气
|
||||||
|
};
|
||||||
|
|
||||||
|
export const ABI_TYPE_TO_STAGE = new Map<number, number | ((jobType: number) => number)>([
|
||||||
|
[ABI_STAGE.HP, ABI_TYPE.ABI_HP],
|
||||||
|
[ABI_STAGE.ATK, (jobType:number) => { return jobType == JOB_TYPE.PHYSIC?ABI_TYPE.ABI_ATK: ABI_TYPE.ABI_MATK}],
|
||||||
|
[ABI_STAGE.DEF, ABI_TYPE.ABI_DEF],
|
||||||
|
[ABI_STAGE.MDEF, ABI_TYPE.ABI_MDEF],
|
||||||
|
[ABI_STAGE.AGI, ABI_TYPE.ABI_AGI],
|
||||||
|
[ABI_STAGE.LUK, ABI_TYPE.ABI_LUK]
|
||||||
|
]);
|
||||||
|
|
||||||
|
export function getAtrrNameById(attrId: number) {
|
||||||
|
return HERO_ATTR[attrId];
|
||||||
|
};
|
||||||
|
|
||||||
|
export function getAttrCeRatio(attr: string) {
|
||||||
|
return CE_RATIO[attr];
|
||||||
|
};
|
||||||
|
|
||||||
|
export function getAttrNameByJobStage(jobStage: number) {
|
||||||
|
return HEROTARIN[jobStage];
|
||||||
|
};
|
||||||
@@ -21,6 +21,11 @@ export const ACTION_POIN = {
|
|||||||
MAX: 100000,
|
MAX: 100000,
|
||||||
PER: 6 * 60 * 1000
|
PER: 6 * 60 * 1000
|
||||||
};
|
};
|
||||||
|
//武将养成系统分类
|
||||||
|
export const HERO_SYSTEM_TYPE = {
|
||||||
|
STAR: 1,
|
||||||
|
TRAIN: 5,
|
||||||
|
};
|
||||||
|
|
||||||
export const BATTLE_REWARD_TYPE = {
|
export const BATTLE_REWARD_TYPE = {
|
||||||
FIX_REWARD: 1,
|
FIX_REWARD: 1,
|
||||||
@@ -46,7 +51,9 @@ export const CONSUME_TYPE = {
|
|||||||
CONSUME: 1, // 消耗品
|
CONSUME: 1, // 消耗品
|
||||||
SOUL: 2, // 将魂
|
SOUL: 2, // 将魂
|
||||||
BLUEPRT: 3, // 藏宝图
|
BLUEPRT: 3, // 藏宝图
|
||||||
POINT: 4 // 远征币等
|
POINT: 4, // 远征币等
|
||||||
|
EXP: 5, // 经验书
|
||||||
|
FAVOUR: 6 // 好感度道具
|
||||||
};
|
};
|
||||||
|
|
||||||
const itid_array = [
|
const itid_array = [
|
||||||
@@ -72,6 +79,8 @@ const itid_array = [
|
|||||||
{ id: 20, name: '布鞋', goodType: GOOD_TYPE.EQUIP },
|
{ id: 20, name: '布鞋', goodType: GOOD_TYPE.EQUIP },
|
||||||
{ id: 21, name: '饰品', goodType: GOOD_TYPE.EQUIP },
|
{ id: 21, name: '饰品', goodType: GOOD_TYPE.EQUIP },
|
||||||
{ id: 22, name: '消耗类物品(图纸类)', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.CONSUME },
|
{ id: 22, name: '消耗类物品(图纸类)', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.CONSUME },
|
||||||
|
{ id: 35, name: '消耗类物品(经验书)', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.EXP },
|
||||||
|
{ id: 36, name: '消耗类物品(好感道具)', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.FAVOUR },
|
||||||
{ id: 23, name: '消耗类物品(材料类)', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.CONSUME },
|
{ id: 23, name: '消耗类物品(材料类)', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.CONSUME },
|
||||||
{ id: 24, name: '消耗类物品(宝箱类)', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.CONSUME },
|
{ id: 24, name: '消耗类物品(宝箱类)', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.CONSUME },
|
||||||
{ id: 26, name: '武将碎片', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.SOUL },
|
{ id: 26, name: '武将碎片', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.SOUL },
|
||||||
@@ -217,29 +226,9 @@ export const EXPEDITION_CONST = {
|
|||||||
RESET_CNT: 1 // 可以免费重置的次数
|
RESET_CNT: 1 // 可以免费重置的次数
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WAR_JSON_ATTRIBUTE_TYPE = {
|
|
||||||
"1": "hp", // 生命
|
|
||||||
"2": "atk", // 物攻
|
|
||||||
"3": "matk", // 策攻
|
|
||||||
"4": "def", // 物防
|
|
||||||
"5": "mdef", // 测防
|
|
||||||
"6": "agi", // 敏捷
|
|
||||||
"7": "luk", // 幸运
|
|
||||||
"8": "speed", // 移动
|
|
||||||
"9": "hit", // 命中等级
|
|
||||||
"10": "cri", // 暴击等级
|
|
||||||
"11": "flee", // 格挡等级
|
|
||||||
"12": "antCri", // 抗暴等级
|
|
||||||
"13": "damageIncrease", // 伤害加深等级
|
|
||||||
"14": "damageDecrease", // 伤害减免等级
|
|
||||||
"15": "defIngnore", // 忽视防御等级
|
|
||||||
"16": "bloodSuck", // 吸血等级
|
|
||||||
"17": "ap" // 怒气
|
|
||||||
};
|
|
||||||
|
|
||||||
export const EVENT_QUIZ_NUM = 3;
|
export const EVENT_QUIZ_NUM = 3;
|
||||||
|
|
||||||
export const DEFAULT_HEROES = [ 312, 314, 311, 309, 315];
|
export const DEFAULT_HEROES = [ 12, 14, 11, 9, 15];
|
||||||
export const DEFAULT_ITEMS = [
|
export const DEFAULT_ITEMS = [
|
||||||
{id: 33106, count: 200},
|
{id: 33106, count: 200},
|
||||||
{id: 33107, count: 200},
|
{id: 33107, count: 200},
|
||||||
@@ -333,3 +322,16 @@ export const FRIEND_DROP_TYPE = {
|
|||||||
export const FRIEND_DROP_MAX = {
|
export const FRIEND_DROP_MAX = {
|
||||||
COM_BTL: 150
|
COM_BTL: 150
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 武将上限
|
||||||
|
export const HERO_GROW_MAX = {
|
||||||
|
STAR: 6,
|
||||||
|
COLORSTAR: 6,
|
||||||
|
QUALITY: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
export const JOB_TYPE = {
|
||||||
|
PHYSIC: 1,
|
||||||
|
MAGIC: 2
|
||||||
|
}
|
||||||
@@ -111,7 +111,37 @@ export const STATUS = {
|
|||||||
// 秘境 20700 - 20799
|
// 秘境 20700 - 20799
|
||||||
DUNGEON_REFRESH_TIMES_LACK: { code: 20701, simStr: '购买次数不足' },
|
DUNGEON_REFRESH_TIMES_LACK: { code: 20701, simStr: '购买次数不足' },
|
||||||
DUNGEON_TIMES_LACK: { code: 20701, simStr: '挑战次数不足' },
|
DUNGEON_TIMES_LACK: { code: 20701, simStr: '挑战次数不足' },
|
||||||
// 养成相关状态 30000 - 39999
|
|
||||||
|
// 通用 30000 - 30099
|
||||||
|
ROLE_INFO_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
|
||||||
|
ROLE_MATERIAL_NOT_ENOUGH: { code: 30001, simStr: '材料数量不足' },
|
||||||
|
// 武将养成通用 30100 - 30199
|
||||||
|
|
||||||
|
// 武将合成,升级,升星,升品相关 30200 - 30299
|
||||||
|
ROLE_HERO_EXISTS: {code: 30200, simStr: '已存在武将不可合成' },
|
||||||
|
ROLE_METERIAL_ERROR: {code: 30201, simStr: '材料错误' },
|
||||||
|
ROLE_HERO_NOT_EXISTS: {code: 30202, simStr: '未找到该武将' },
|
||||||
|
ROLE_HERO_LV_OVER: {code: 30203, simStr: '武将等级不可超过主公等级' },
|
||||||
|
ROLE_HERO_LV_TYPE_ERROR: {code: 30204, simStr: '只可选择升1级或升5级' },
|
||||||
|
ROLE_EXP_NOT_ENOUGH: {code: 30205, simStr: '材料经验不足' },
|
||||||
|
ROLE_STAR_STAGE_NOT_ENOUGH: {code: 30206, simStr: '请先点亮前面的星盘' },
|
||||||
|
ROLE_STAR_REACH_MAX: {code: 30207, simStr: '已升满星,请先觉醒' },
|
||||||
|
ROLE_STAR_NOT_ENOUGH: {code: 30208, simStr: '未升满星,不可升品' },
|
||||||
|
ROLE_QUALITY_REACH_MAX: {code: 30209, simStr: '品质已升满' },
|
||||||
|
ROLE_WAKE_STAR_NOT_ENOUGH: {code: 30210, simStr: '未升满星,不可觉醒' },
|
||||||
|
ROLE_QUALITY_NOT_ENOUGH: {code: 30211, simStr: '品质未升满,不可觉醒' },
|
||||||
|
|
||||||
|
// 武将训练,好感度,羁绊,时装相关 30300 - 30399
|
||||||
|
HERO_NOT_FIND: {code: 30300, simStr: '武将不存在' },
|
||||||
|
HERO_JOB_REACH_MAX_STAGE: {code: 30300, simStr: '武将已达到最大的职业阶级'},
|
||||||
|
HERO_JOB_STAGE_REACH_MAX_STAGE: {code: 30301, simStr: '武将已训练到最大阶段'},
|
||||||
|
NOT_REACH_UNLOCK_LEVEL: {code: 30302, simStr: '未达到解锁等级'},
|
||||||
|
HERO_SKIN_NOT_FIND: {code: 30303, simStr: '时装不存在'},
|
||||||
|
HERO_SKIN_IS_EXIST: {code: 30304, simStr: '时装已存在'},
|
||||||
|
HERO_CONECTION_IS_MAX_LEVEL: {code: 30306, simStr: '羁绊已达到最大等级'},
|
||||||
|
HERO_CONECTION_IS_NOT_EXIT: {code: 30307, simStr: '羁绊不存在'},
|
||||||
|
ROLE_SHORT_HERO_CONECTION:{code: 30308, simStr: '未拥有羁绊武将'},
|
||||||
|
HERO_FAVOUR_LEVEL_REACH_MAXT:{code: 30308, simStr: '武将好感等级以达到最大'},
|
||||||
// 社交相关状态 40000 - 49999
|
// 社交相关状态 40000 - 49999
|
||||||
// 运营模块相关状态 50000 - 59999
|
// 运营模块相关状态 50000 - 59999
|
||||||
// GM后台相关状态 60000 - 69999
|
// GM后台相关状态 60000 - 69999
|
||||||
@@ -129,4 +159,5 @@ export const STATUS = {
|
|||||||
GM_PVP_DEFENSE_NOT_FOUND: { code: 60012, simStr: '该玩家未保存防守阵' },
|
GM_PVP_DEFENSE_NOT_FOUND: { code: 60012, simStr: '该玩家未保存防守阵' },
|
||||||
GM_PVP_DEFENSE_HERO_NOT_FOUND: { code: 60013, simStr: '该守阵没有该武将' },
|
GM_PVP_DEFENSE_HERO_NOT_FOUND: { code: 60013, simStr: '该守阵没有该武将' },
|
||||||
GM_JSON_FORMAT_ERR: { code: 60005, simStr: 'json格式错误' }
|
GM_JSON_FORMAT_ERR: { code: 60005, simStr: 'json格式错误' }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,3 +23,45 @@ export default class BaseModel extends TimeStamps {
|
|||||||
@prop()
|
@prop()
|
||||||
updatedAt: Date
|
updatedAt: Date
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class CeAttrData {
|
||||||
|
@prop({ required: true })
|
||||||
|
base?: number = 0;
|
||||||
|
@prop({ required: true })
|
||||||
|
ratioUp: number = 0;
|
||||||
|
@prop({ required: true })
|
||||||
|
fixUp: number = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class CeAttr {
|
||||||
|
@prop({ required: false })
|
||||||
|
hp?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
atk?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
matk?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
def?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
mdef?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
agi?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
luk?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
hit?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
cri?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
flee?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
antCri?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
damageIncrease?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
damageDecrease?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
defIngnore?: CeAttrData;
|
||||||
|
@prop({ required: false })
|
||||||
|
bloodSuck?: CeAttrData;
|
||||||
|
}
|
||||||
@@ -1,7 +1,19 @@
|
|||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
||||||
|
|
||||||
|
class RandSe {
|
||||||
|
@prop({ required: true })
|
||||||
|
seType: number; // 属性类型
|
||||||
|
@prop({ required: true })
|
||||||
|
value: number; // 属性数值
|
||||||
|
}
|
||||||
|
|
||||||
|
class Holes {
|
||||||
|
@prop({ required: true })
|
||||||
|
id: number; // 宝石 id,待定,也可能是 type + lv
|
||||||
|
@prop({ required: true })
|
||||||
|
lv: number; // 宝石等级
|
||||||
|
}
|
||||||
@index({ roleId: 1, hid: 1, id: 1 })
|
@index({ roleId: 1, hid: 1, id: 1 })
|
||||||
@index({ seqId: 1 })
|
@index({ seqId: 1 })
|
||||||
export default class Equip extends BaseModel {
|
export default class Equip extends BaseModel {
|
||||||
@@ -27,21 +39,15 @@ export default class Equip extends BaseModel {
|
|||||||
quality: number; // 品质
|
quality: number; // 品质
|
||||||
@prop({ required: true, default: 1 })
|
@prop({ required: true, default: 1 })
|
||||||
lv: number; // 强化等级
|
lv: number; // 强化等级
|
||||||
@prop({ required: false, default: [] })
|
@prop({ required: false, type: RandSe, default: [] })
|
||||||
randSe: [{ // 强化随机属性
|
randSe: RandSe[]; // 强化随机属性
|
||||||
seType: number; // 属性类型
|
|
||||||
value: number; // 属性数值
|
|
||||||
}];
|
|
||||||
|
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
randRange: number; // 物攻策攻数值浮动上下限变化率,浮点数
|
randRange: number; // 物攻策攻数值浮动上下限变化率,浮点数
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
initHoleCnt: number; // 初始珠宝孔位个数
|
initHoleCnt: number; // 初始珠宝孔位个数
|
||||||
@prop({ required: true, default: [] })
|
@prop({ required: true, type: Holes, default: [] })
|
||||||
holes: [{
|
holes: Holes[];
|
||||||
id: number; // 宝石 id,待定,也可能是 type + lv
|
|
||||||
lv: number; // 宝石等级
|
|
||||||
}];
|
|
||||||
|
|
||||||
public static async findbyRole(roleId: string, lean = true) {
|
public static async findbyRole(roleId: string, lean = true) {
|
||||||
const equips = await EquipModel.find({ roleId }).lean(lean);
|
const equips = await EquipModel.find({ roleId }).lean(lean);
|
||||||
|
|||||||
@@ -1,134 +1,179 @@
|
|||||||
import BaseModel from './BaseModel';
|
import BaseModel, { CeAttr } from './BaseModel';
|
||||||
import { index, getModelForClass, prop, Ref, mongoose } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, Ref, mongoose } from '@typegoose/typegoose';
|
||||||
import Equip from './Equip';
|
import Equip from './Equip';
|
||||||
import { updateCe } from '../pubUtils/util';
|
import { CounterModel } from './Counter';
|
||||||
|
import { COUNTER } from '../consts/consts';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 英雄表
|
* 英雄表
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
class Connect {
|
||||||
|
@prop({ required: true })
|
||||||
|
shipId: number;
|
||||||
|
@prop({ required: true })
|
||||||
|
level: number;
|
||||||
|
}
|
||||||
|
class Skin {
|
||||||
|
@prop({ required: true })
|
||||||
|
id: number;
|
||||||
|
@prop({ required: true })
|
||||||
|
enable: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface heroUpdate {
|
||||||
|
exp?: number;
|
||||||
|
lv?: number;
|
||||||
|
ce?: number;
|
||||||
|
star?: number;
|
||||||
|
starStage?: number;
|
||||||
|
colorStar?: number;
|
||||||
|
colorStarStage?: number;
|
||||||
|
quality?: number;
|
||||||
|
job?:number;
|
||||||
|
jobStage?:number;
|
||||||
|
favour?:number;
|
||||||
|
favourLv?:number;
|
||||||
|
skins?: Skin[];
|
||||||
|
conections?: Connect[];
|
||||||
|
_id?:number;
|
||||||
|
}
|
||||||
|
|
||||||
@index({ roleId: 1, hid: 1 })
|
@index({ roleId: 1, hid: 1 })
|
||||||
@index({ roleId: 1, seqId: 1 })
|
@index({ roleId: 1, seqId: 1 })
|
||||||
export default class Hero extends BaseModel {
|
export default class Hero extends BaseModel {
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
roleId: string; // 角色 id
|
roleId: string; // 角色 id
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
roleName: string; // 角色名称
|
roleName: string; // 角色名称
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
serverId: number; // 区服 id
|
serverId: number; // 区服 id
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
hid: number; // 武将 id
|
hid: number; // 武将 id
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
hName: string; // 武将名
|
hName: string; // 武将名
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
seqId: number; // 武将表自增 id
|
seqId: number; // 武将表自增 id
|
||||||
|
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
exp: number; // 经验值
|
exp: number; // 经验值
|
||||||
@prop({ required: true, default: 1 })
|
@prop({ required: true, default: 1 })
|
||||||
lv: number; // 武将等级
|
lv: number; // 武将等级
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
ce: number; // 武将战力
|
ce: number; // 武将战力
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
historyCe: number; // 武将历史最高战力
|
historyCe: number; // 武将历史最高战力
|
||||||
|
@prop({required: true, default: new CeAttr() })
|
||||||
|
ceAttr: CeAttr; // 影响战力的属性
|
||||||
|
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 1 })
|
||||||
star: number; // 星级
|
star: number; // 星级
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
fire: number; // 觉醒的火,在满星了之后会继续进行觉醒,显示类似6星1火
|
starStage: number; // 星级六维阶段
|
||||||
@prop({ required: true, default: 1 })
|
@prop({ required: true, default: 0 })
|
||||||
rank: number; // 阶数
|
colorStar: number; // 觉醒, 彩星
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
favour: number; // 好感度
|
colorStarStage: number; // 觉醒六维阶段
|
||||||
@prop({ required: true, default: 1 })
|
|
||||||
favourLv: number; // 好感等级
|
|
||||||
@prop({ required: true, default: [] })
|
|
||||||
conections: [{ // 羁绊
|
|
||||||
id: number; // 羁绊编号
|
|
||||||
name: string; // 羁绊名称
|
|
||||||
valid: boolean; // 是否开启
|
|
||||||
}];
|
|
||||||
@prop({ required: true, default: [] })
|
|
||||||
skins: [{ // 皮肤
|
|
||||||
id: number; // id
|
|
||||||
enable: boolean; // 是否装备
|
|
||||||
}]
|
|
||||||
|
|
||||||
@prop({ ref: Equip, type: mongoose.Schema.Types.ObjectId })
|
@prop({ required: true, default: 0 })
|
||||||
equips: Ref<Equip>[]; // 武将装备引用数组
|
quality: number; // 品质
|
||||||
|
|
||||||
public static async findByRole(roleId: string, lean = true) {
|
@prop({ required: true, default: 0 })
|
||||||
const heros = await HeroModel.find({ roleId }).populate('equips').lean(lean);
|
job: number; // 职业
|
||||||
return heros || [];
|
@prop({ required: true, default: 0 })
|
||||||
}
|
jobStage: number; // 职阶
|
||||||
|
|
||||||
public static async findBySeqIdRange(seqIds: Array<number>, roleId: string, lean = true) {
|
@prop({ required: true, default: 0 })
|
||||||
const hero = await HeroModel.find({ seqId: {$in: seqIds}, roleId }).lean(lean);
|
favour: number; // 好感度
|
||||||
return hero;
|
@prop({ required: true, default: 1 })
|
||||||
}
|
favourLv: number; // 好感等级
|
||||||
public static async findBySeqIdAndRole(seqId: number, roleId: string, lean = true) {
|
@prop({ required: true, type:Connect, default: [] })
|
||||||
const hero = await HeroModel.findOne({ seqId, roleId }).lean(lean);
|
conections: Connect[]; // 羁绊
|
||||||
return hero;
|
@prop({ required: true, default: [] })
|
||||||
}
|
skins: Skin[]; // 皮肤
|
||||||
public static async findByHidAndRole(hid: number, roleId: string, lean = true) {
|
|
||||||
const hero = await HeroModel.findOne({ hid, roleId }).lean(lean);
|
|
||||||
return hero;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async addEquip(roleId: string, hid: number, equipId: string, lean = true) {
|
@prop({ ref: Equip, type: mongoose.Schema.Types.ObjectId })
|
||||||
const hero = await HeroModel.findOneAndUpdate({ roleId, hid }, {$push: {equips: equipId}}, {new: true}).lean(lean);
|
equips: Ref<Equip>[]; // 武将装备引用数组
|
||||||
if (hero) {
|
|
||||||
await Equip.putOn(hero.hid, equipId);
|
public static async findByRole(roleId: string, lean = true) {
|
||||||
await updateCe(roleId, hero )
|
const heros = await HeroModel.find({ roleId }).populate('equips').lean(lean);
|
||||||
|
return heros || [];
|
||||||
}
|
}
|
||||||
return hero;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async createHero(heroInfo: {roleId: string, roleName: string, hid: number, star: number, hName: string, seqId: number, lv?:number, ce: number}, lean = true) {
|
public static async findBySeqIdRange(seqIds: Array<number>, roleId: string, lean = true) {
|
||||||
const doc = new HeroModel();
|
const hero = await HeroModel.find({ seqId: {$in: seqIds}, roleId }).lean(lean);
|
||||||
const update = Object.assign(doc.toJSON(), heroInfo);
|
return hero;
|
||||||
delete update._id;
|
}
|
||||||
const hero = await HeroModel.findOneAndUpdate({roleId: heroInfo.roleId, hid: heroInfo.hid}, update, {upsert: true, new: true}).lean(lean);
|
public static async findBySeqIdAndRole(seqId: number, roleId: string, lean = true) {
|
||||||
await updateCe(heroInfo.roleId, hero);
|
const hero = await HeroModel.findOne({ seqId, roleId }).lean(lean);
|
||||||
return hero;
|
return hero;
|
||||||
}
|
}
|
||||||
|
public static async findByHidAndRole(hid: number, roleId: string, lean = true) {
|
||||||
|
const hero = await HeroModel.findOne({ hid, roleId }).lean(lean);
|
||||||
|
return hero;
|
||||||
|
}
|
||||||
|
|
||||||
public static async sumTopHeroCe(roleId: string, num: number) {
|
public static async addEquip(roleId: string, hid: number, equipId: string, lean = true) {
|
||||||
let ce = await HeroModel.aggregate([
|
const hero = await HeroModel.findOneAndUpdate({ roleId, hid }, {$push: {equips: equipId}}, {new: true}).lean(lean);
|
||||||
{ $match : { roleId } },
|
if (hero) {
|
||||||
{ $sort: {historyCe: -1} },
|
await Equip.putOn(hero.hid, equipId);
|
||||||
{ $limit: num },
|
}
|
||||||
{ $group: { _id: null, historyCe: { $sum: '$historyCe' } } }
|
return hero;
|
||||||
]);
|
}
|
||||||
return ce.length > 0?ce[0].historyCe:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async sumHeroCe(roleId: string) {
|
public static async createHero(heroInfo: {roleId: string, serverId: number, roleName: string, hid: number, hName: string, star: number, quality: number, job: number, lv?: number }, lean = true) {
|
||||||
let ce = await HeroModel.aggregate([
|
const doc = new HeroModel();
|
||||||
{ $match : { roleId } },
|
const seqId = await CounterModel.getNewCounter(COUNTER.HID)||-1;
|
||||||
{ $group: { _id: null, ce: { $sum: '$ce' } } }
|
const update = Object.assign(doc.toJSON(), heroInfo, {seqId});
|
||||||
]);
|
delete update._id;
|
||||||
return ce.length > 0?ce[0].ce:0;
|
const hero = await HeroModel.findOneAndUpdate({roleId: heroInfo.roleId, hid: heroInfo.hid}, update, {upsert: true, new: true}).select('hid hName lv exp star starStage colorStar colorStarStage quality job jobStage conections favour favourLv skins equips ce ceAttr').lean(lean);
|
||||||
}
|
return hero;
|
||||||
|
}
|
||||||
|
|
||||||
public static async getTopHero(roleId: string, num: number, lean = true) {
|
public static async sumTopHeroCe(roleId: string, num: number) {
|
||||||
const heroes = await HeroModel.find({roleId}).limit(num).sort({ce: -1}).lean(lean);
|
let ce = await HeroModel.aggregate([
|
||||||
return heroes;
|
{ $match : { roleId } },
|
||||||
}
|
{ $sort: {historyCe: -1} },
|
||||||
|
{ $limit: num },
|
||||||
|
{ $group: { _id: null, historyCe: { $sum: '$historyCe' } } }
|
||||||
|
]);
|
||||||
|
return ce.length > 0?ce[0].historyCe:0;
|
||||||
|
}
|
||||||
|
|
||||||
public static async updateCe(roleId: string, hid: number, ce: number, oldCe: number, historyCe: number, lean = true) {
|
public static async sumHeroCe(roleId: string) {
|
||||||
let distance = ce - oldCe;
|
let ce = await HeroModel.aggregate([
|
||||||
let historyDistance = ce > historyCe ?ce - historyCe: 0;
|
{ $match : { roleId } },
|
||||||
let result = await HeroModel.findOneAndUpdate({roleId, hid}, {$inc:{ce: distance, historyCe: historyDistance}}).lean(lean);
|
{ $group: { _id: null, ce: { $sum: '$ce' } } }
|
||||||
return result||{};
|
]);
|
||||||
}
|
return ce.length > 0?ce[0].ce:0;
|
||||||
|
}
|
||||||
|
|
||||||
public static async deleteAccount(roleId: string, lean = true) {
|
public static async getTopHero(roleId: string, num: number, lean = true) {
|
||||||
let result = await HeroModel.deleteMany({roleId}).lean(lean);
|
const heroes = await HeroModel.find({roleId}).limit(num).sort({ce: -1}).lean(lean);
|
||||||
return result||{};
|
return heroes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async updateCe(roleId: string, hid: number, ce: number, oldCe: number, historyCe: number, lean = true) {
|
||||||
|
let distance = ce - oldCe;
|
||||||
|
let historyDistance = ce > historyCe ?ce - historyCe: 0;
|
||||||
|
let result = await HeroModel.findOneAndUpdate({roleId, hid}, {$inc:{ce: distance, historyCe: historyDistance}}).lean(lean);
|
||||||
|
return result||{};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async deleteAccount(roleId: string, lean = true) {
|
||||||
|
let result = await HeroModel.deleteMany({roleId}).lean(lean);
|
||||||
|
return result||{};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async updateHeroInfo(roleId: string, hid:number, heroUpdate:heroUpdate, lean = true) {
|
||||||
|
delete heroUpdate._id;
|
||||||
|
let result = await HeroModel.findOneAndUpdate({roleId, hid}, {$set:heroUpdate}).lean(lean);
|
||||||
|
return result||{};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const HeroModel = getModelForClass(Hero);
|
export const HeroModel = getModelForClass(Hero);
|
||||||
|
|
||||||
@@ -49,10 +49,11 @@ export default class Item extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static async decreaseItems(roleId: string, items: Array<{id: number, count: number}>, lean = true) {
|
public static async decreaseItems(roleId: string, items: Array<{id: number, count: number}>, lean = true) {
|
||||||
let updateItems = new Array<{id: number, count: number}>(), hasError: boolean = false;
|
let updateItems = new Array<{id: number, count: number}>(), hasError: boolean = false, result = new Array();
|
||||||
for(let {id, count} of items) {
|
for(let {id, count} of items) {
|
||||||
const rec = await ItemModel.findOneAndUpdate({roleId, id, count: {$gte: count} },{ $inc: { count: -1 * count }}, {new: true}).lean(lean);
|
const rec = await ItemModel.findOneAndUpdate({roleId, id, count: {$gte: count} },{ $inc: { count: -1 * count }}, {new: true}).lean(lean);
|
||||||
if(rec) {
|
if(rec) {
|
||||||
|
result.push(rec);
|
||||||
updateItems.push({id, count});
|
updateItems.push({id, count});
|
||||||
} else {
|
} else {
|
||||||
hasError = true; break;
|
hasError = true; break;
|
||||||
@@ -62,9 +63,9 @@ export default class Item extends BaseModel {
|
|||||||
for(let {id, count} of updateItems) {
|
for(let {id, count} of updateItems) {
|
||||||
await ItemModel.findOneAndUpdate({roleId, id },{ $inc: { count }}, {new: true}).lean(lean);
|
await ItemModel.findOneAndUpdate({roleId, id },{ $inc: { count }}, {new: true}).lean(lean);
|
||||||
}
|
}
|
||||||
return false
|
return {hasError: true}
|
||||||
} else {
|
} else {
|
||||||
return true
|
return {hasError: false, result}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
import { HANG_UP_CONSTS } from './../consts/consts';
|
import { HANG_UP_CONSTS } from './../consts/consts';
|
||||||
import BaseModel from './BaseModel';
|
import BaseModel, { CeAttr } from './BaseModel';
|
||||||
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
||||||
import User from './User';
|
import User from './User';
|
||||||
import { shouldRefresh } from '../pubUtils/util';
|
import { shouldRefresh } from '../pubUtils/util';
|
||||||
import { HeroModel } from './Hero';
|
import { HeroModel } from './Hero';
|
||||||
|
interface roleUpdate {
|
||||||
|
ce?: number;
|
||||||
|
_id?:number;
|
||||||
|
}
|
||||||
class TopHero {
|
class TopHero {
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
hid: number; // 武将id
|
hid: number; // 武将id
|
||||||
@@ -19,6 +22,23 @@ class DungeonHero {
|
|||||||
@prop({ required: true, type: Number, default:[] })
|
@prop({ required: true, type: Number, default:[] })
|
||||||
heroes: Array<number>; // 武将id
|
heroes: Array<number>; // 武将id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class PayRecord {
|
||||||
|
@prop({ required: true })
|
||||||
|
id: string; // 购买项 product id
|
||||||
|
@prop({ required: true })
|
||||||
|
cnt: number; // 购买次数
|
||||||
|
}
|
||||||
|
|
||||||
|
class WarStar {
|
||||||
|
@prop({ required: true })
|
||||||
|
id: number; // 关卡 id
|
||||||
|
@prop({ required: true })
|
||||||
|
warType: number; // 关卡类型
|
||||||
|
@prop({ required: true })
|
||||||
|
star: number; // 星级
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 角色字段接口
|
* 角色字段接口
|
||||||
*/
|
*/
|
||||||
@@ -28,353 +48,343 @@ class DungeonHero {
|
|||||||
// @index({ userInfo.uid: 1, serverId: 1 })
|
// @index({ userInfo.uid: 1, serverId: 1 })
|
||||||
export default class Role extends BaseModel {
|
export default class Role extends BaseModel {
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
userInfo: User;
|
userInfo: User;
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
seqId: number;
|
seqId: number;
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
roleId: string; // 角色 id,生成编码
|
roleId: string; // 角色 id,生成编码
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
roleName: string; // 角色名
|
roleName: string; // 角色名
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
serverType: string; // 服务器类型
|
serverType: string; // 服务器类型
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
serverId: number; // 区服 id
|
serverId: number; // 区服 id
|
||||||
@prop({ required: true, default: false })
|
@prop({ required: true, default: false })
|
||||||
blocked: boolean; // 是否屏蔽
|
blocked: boolean; // 是否屏蔽
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
code: string; // 邀请码
|
code: string; // 邀请码
|
||||||
@prop({ required: true, default: 19 })
|
@prop({ required: true, default: 19 })
|
||||||
headHid: number; // 头像所用武将 Id,默认赵云
|
headHid: number; // 头像所用武将 Id,默认赵云
|
||||||
@prop({ required: true, default: 19 })
|
@prop({ required: true, default: 19 })
|
||||||
sHid: number; // 形象所用武将 Id,默认赵云
|
sHid: number; // 形象所用武将 Id,默认赵云
|
||||||
|
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
exp: number; // 经验值
|
exp: number; // 经验值
|
||||||
@prop({ required: true, default: 1 })
|
@prop({ required: true, default: 1 })
|
||||||
lv: number; // 主公等级
|
lv: number; // 主公等级
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
ce: number; // 总战力
|
ce: number; // 总战力
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: new CeAttr() })
|
||||||
topFiveCe: number; // 最强5人战力
|
globalCeAttr: CeAttr; // 总战力
|
||||||
@prop({ required: true, type: TopHero, default: [] })
|
@prop({ required: true, default: 0 })
|
||||||
topFive: Array<TopHero>; // 总战力
|
topFiveCe: number; // 最强5人战力
|
||||||
@prop({ required: true, default: 100 })
|
@prop({ required: true, type: TopHero, default: [] })
|
||||||
tili: number; // 体力值
|
topFive: Array<TopHero>; // 总战力
|
||||||
|
@prop({ required: true, default: 100 })
|
||||||
|
tili: number; // 体力值
|
||||||
|
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
vLv: number; // VIP 等级
|
vLv: number; // VIP 等级
|
||||||
@prop({ required: true, default: 100 })
|
@prop({ required: true, default: 100 })
|
||||||
gold: number; // 总金币
|
gold: number; // 总金币
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
paidGold: number; // 支付所得金币
|
paidGold: number; // 支付所得金币
|
||||||
@prop({ required: true, default: 100 })
|
@prop({ required: true, default: 100 })
|
||||||
giftGold: number; // 赠送所得金币
|
giftGold: number; // 赠送所得金币
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
totalPay: number; // 总支付金额
|
totalPay: number; // 总支付金额
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
totalBuy: number; // 总金币购买
|
totalBuy: number; // 总金币购买
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
totalCost: number; // 金币总花费
|
totalCost: number; // 金币总花费
|
||||||
@prop({ required: true, default: [] })
|
@prop({ required: true, default: [] })
|
||||||
payRecord: [{ // 支付记录
|
payRecord: PayRecord[]; // 支付记录
|
||||||
id: string; // 购买项 product id
|
|
||||||
cnt: number; // 购买次数
|
|
||||||
}];
|
|
||||||
|
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
coin: number; // 总铜钱
|
coin: number; // 总铜钱
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
frdCnt: number; // 情谊点
|
frdCnt: number; // 情谊点
|
||||||
|
|
||||||
@prop({ required: true, default: [] })
|
@prop({ required: true, type: WarStar, default: [] })
|
||||||
souls: [{ // 将魂
|
warStar: WarStar[]; // 关卡星级
|
||||||
id: number; // 武将 id
|
|
||||||
count: number; // 数量
|
|
||||||
}];
|
|
||||||
@prop({ required: true, default: [] })
|
|
||||||
pieces: [{ // 装备碎片
|
|
||||||
id: number; // 装备 id
|
|
||||||
count: number; // 数量
|
|
||||||
}];
|
|
||||||
@prop({ required: true, default: [] })
|
|
||||||
jewels: [{ // 珠宝
|
|
||||||
id: number; // 待定,也可能是 type + lv
|
|
||||||
count: number; // 数量
|
|
||||||
}];
|
|
||||||
|
|
||||||
@prop({ required: true, default: [] })
|
@prop({ required: true, default: 1 })
|
||||||
warStar: [{ // 关卡星级
|
loginCnt: number; // 登录次数
|
||||||
id: number; // 关卡 id
|
@prop({ required: true })
|
||||||
warType: number; // 关卡类型
|
createTime: Date; // 创建时间
|
||||||
star: number; // 星级
|
@prop({ required: true })
|
||||||
}];
|
loginTime: Date; // 更新 / 登录时间
|
||||||
|
|
||||||
@prop({ required: true, default: 1 })
|
@prop({ required: true, type: Number, default: [] })
|
||||||
loginCnt: number; // 登录次数
|
funcs: Array<number>; // 开启了的功能
|
||||||
@prop({ required: true })
|
|
||||||
createTime: Date; // 创建时间
|
|
||||||
@prop({ required: true })
|
|
||||||
loginTime: Date; // 更新 / 登录时间
|
|
||||||
|
|
||||||
@prop({ required: true, type: Number, default: [] })
|
// 天梯相关
|
||||||
funcs: Array<number>; // 开启了的功能
|
@prop({ required: true, default: 1 })
|
||||||
|
towerLv: number; // 天梯当前层数
|
||||||
|
@prop({ required: true, default: new Date() })
|
||||||
|
towerUpTime: Date; // 天梯爬到这一层的时间
|
||||||
|
|
||||||
// 天梯相关
|
@prop({ required: true, default: HANG_UP_CONSTS.MAX_SPD_UP_CNT})
|
||||||
@prop({ required: true, default: 1 })
|
hangUpSpdUpCnt: number; // 挂机加速次数
|
||||||
towerLv: number; // 天梯当前层数
|
@prop({ required: true, default: new Date()})
|
||||||
@prop({ required: true, default: new Date() })
|
lastSpdUpTime: Date; // 最后一次挂机加速时间
|
||||||
towerUpTime: Date; // 天梯爬到这一层的时间
|
|
||||||
|
|
||||||
@prop({ required: true, default: HANG_UP_CONSTS.MAX_SPD_UP_CNT})
|
@prop({ required: true, default: 0})
|
||||||
hangUpSpdUpCnt: number; // 挂机加速次数
|
towerTaskCnt: number; // 刷新派遣任务的次数,向上累加,每天8个
|
||||||
@prop({ required: true, default: new Date()})
|
@prop({ required: false})
|
||||||
lastSpdUpTime: Date; // 最后一次挂机加速时间
|
towerTaskRefTime: Date; // 刷新派遣任务的时间
|
||||||
|
@prop({ required: true, default: 0})
|
||||||
|
towerTaskReCnt: number; // 刷新派遣任务刷新次数
|
||||||
|
|
||||||
@prop({ required: true, default: 0})
|
// 奇遇事件相关
|
||||||
towerTaskCnt: number; // 刷新派遣任务的次数,向上累加,每天8个
|
@prop({ required: true, default: 0 })
|
||||||
@prop({ required: false})
|
eventStatus: number; // 奇遇开启状态, 0-未开启 1-开启了第一场事件 2-完全开启
|
||||||
towerTaskRefTime: Date; // 刷新派遣任务的时间
|
|
||||||
@prop({ required: true, default: 0})
|
|
||||||
towerTaskReCnt: number; // 刷新派遣任务刷新次数
|
|
||||||
|
|
||||||
// 奇遇事件相关
|
// 远征相关
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
eventStatus: number; // 奇遇开启状态, 0-未开启 1-开启了第一场事件 2-完全开启
|
expeditionPoint: number; // 远征点数
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
expeditionResetCnt: number; // 远征重置次数
|
||||||
|
@prop({ required: true, default: new Date() })
|
||||||
|
expeditionResetRefTime: Date; // 远征重置次数刷新时间
|
||||||
|
|
||||||
// 远征相关
|
// 秘境相关
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
expeditionPoint: number; // 远征点数
|
dungeonCnt: number; // 秘境挑战次数
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
expeditionResetCnt: number; // 远征重置次数
|
dungeonBuyCnt: number; // 秘境购买次数
|
||||||
@prop({ required: true, default: new Date() })
|
@prop({ required: true, default: new Date() })
|
||||||
expeditionResetRefTime: Date; // 远征重置次数刷新时间
|
dungeonRefTime: Date; // 秘境刷新时间
|
||||||
|
@prop({ required: true, type: DungeonHero, default: [] })
|
||||||
|
dungeonHeroes: Array<DungeonHero>; // 秘境首通使用的武将
|
||||||
|
|
||||||
// 秘境相关
|
public static async findByUid(uid: number, serverId: number, lean = true) {
|
||||||
@prop({ required: true, default: 0 })
|
const role = await RoleModel.findOne({ 'userInfo.uid': uid, serverId }).lean(lean);
|
||||||
dungeonCnt: number; // 秘境挑战次数
|
return role;
|
||||||
@prop({ required: true, default: 0 })
|
|
||||||
dungeonBuyCnt: number; // 秘境购买次数
|
|
||||||
@prop({ required: true, default: new Date() })
|
|
||||||
dungeonRefTime: Date; // 秘境刷新时间
|
|
||||||
@prop({ required: true, type: DungeonHero, default: [] })
|
|
||||||
dungeonHeroes: Array<DungeonHero>; // 秘境首通使用的武将
|
|
||||||
|
|
||||||
public static async findByUid(uid: number, serverId: number, lean = true) {
|
|
||||||
const role = await RoleModel.findOne({ 'userInfo.uid': uid, serverId }).lean(lean);
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async findByRoleId(roleId: string, lean = true) {
|
|
||||||
const role = await RoleModel.findOne({ roleId }).lean(lean);
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async createRole(uid: number, serverId: number, roleInfo: {roleId: string; roleName: string; seqId: number; code: string, lv?:number, exp?:number}, lean = true) {
|
|
||||||
const user = await User.findUserByUid(uid);
|
|
||||||
if (!user) return null;
|
|
||||||
const doc = new RoleModel();
|
|
||||||
const update = Object.assign(doc.toJSON(), roleInfo, { userInfo: user, serverType: user.serverType, serverId });
|
|
||||||
const role = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, update, { upsert: true, new: true }).lean(lean);
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async findRoleByField(field: string, value?: Array<number|string>, lean = true) {
|
|
||||||
let searchObj = {};
|
|
||||||
if(field != 'all') {
|
|
||||||
searchObj[field] = {
|
|
||||||
$in: value
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
//.select('uid tel username')
|
|
||||||
const user = await RoleModel.find(searchObj).lean(lean);
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public static async findByRoleId(roleId: string, lean = true) {
|
||||||
public static async setEventStatus(roleId: string, eventStatus: number, lean = true) {
|
const role = await RoleModel.findOne({ roleId }).lean(lean);
|
||||||
await RoleModel.findOneAndUpdate({ roleId }, { eventStatus }, {new: true}).lean(lean);
|
return role;
|
||||||
}
|
|
||||||
|
|
||||||
public static async towerLvUp(roleId: string, lean = true) {
|
|
||||||
let role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerLv: 1}, towerUpTime: new Date()}, {new: true}).lean(lean);
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async hangUpSpdUp(roleId: string, cnt: number, curTime: Date, lean = true) {
|
|
||||||
if (cnt < 0) return null;
|
|
||||||
|
|
||||||
const result = await RoleModel.findOne({roleId}).lean(lean);
|
|
||||||
const lastSpdUpTime = result?.lastSpdUpTime;
|
|
||||||
let role = null;
|
|
||||||
if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime, HANG_UP_CONSTS.REFRESH_TIME, 1) && cnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) {
|
|
||||||
role = await RoleModel.findOneAndUpdate({roleId}, {hangUpSpdUpCnt: HANG_UP_CONSTS.MAX_SPD_UP_CNT - cnt, lastSpdUpTime: curTime}, {new: true}).lean(lean);
|
|
||||||
} else {
|
|
||||||
role = await RoleModel.findOneAndUpdate({roleId, hangUpSpdUpCnt: {$gte: cnt}}, {$inc: {hangUpSpdUpCnt: -cnt}, lastSpdUpTime: curTime}, {new: true}).lean(lean);
|
|
||||||
}
|
}
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async increaseExpeditionPoint(roleId: string, point: number, lean = true) {
|
public static async createRole(uid: number, serverId: number, roleInfo: {roleId: string; roleName: string; seqId: number; code: string}, lean = true) {
|
||||||
let role = await RoleModel.findOneAndUpdate({roleId}, {$inc: { expeditionPoint: point }}, {new: true}).lean(lean);
|
const user = await User.findUserByUid(uid);
|
||||||
return role;
|
if (!user) return null;
|
||||||
}
|
const doc = new RoleModel();
|
||||||
|
const update = Object.assign(doc.toJSON(), roleInfo, { userInfo: user, serverType: user.serverType, serverId });
|
||||||
public static async levelup(roleId: string, lv: number, exp: number, lean = true) {
|
const role = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, update, { upsert: true, new: true }).lean(lean);
|
||||||
let role = await RoleModel.findOneAndUpdate({roleId}, {$set: { exp, lv }}, {new: true}).lean(lean);
|
return role;
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async deleteAccount(roleId: string, lean = true) {
|
|
||||||
let result = await RoleModel.deleteMany({roleId}).lean(lean);
|
|
||||||
return result||{};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async addCoin(roleId: string, cnt: number, lean = true) {
|
|
||||||
let result = await RoleModel.findOneAndUpdate({roleId}, { $inc: {coin: cnt} }, { "new": true, "upsert": true}).lean(lean);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async addGoldFree(roleId: string, cnt: number, lean = true) {
|
|
||||||
let result = await RoleModel.findOneAndUpdate({roleId}, { $inc: { gold: cnt, giftGold: cnt } }, { "new": true, "upsert": true}).lean(lean);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async costGold(roleId: string, cnt: number, lean = true) {
|
|
||||||
let result = await RoleModel.findOneAndUpdate({roleId, gold: {$gte: cnt}}, { $inc: { gold: -cnt, totalCost: cnt } }, { "new": true}).lean(lean);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async pushWarStar(roleId: string, battleId: number, warType: number, star: number, lean = true) {
|
|
||||||
let result = await RoleModel.findOneAndUpdate({roleId}, { $addToSet: { warStar: {id: battleId, warType, star }} }, { "new": true, "upsert": true}).lean(lean);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async updateWarStar(roleId: string, battleId: number, star: number, lean = true) {
|
|
||||||
let result = await RoleModel.findOneAndUpdate(
|
|
||||||
{roleId, 'warStar.id': battleId},
|
|
||||||
{ $set: { 'warStar.$.star': star } },
|
|
||||||
{ "new": true, "upsert": true}
|
|
||||||
).lean(lean);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 重置派遣次数
|
|
||||||
public static async resetTowerCnt(roleId: string, curTime: Date, lean = true) {
|
|
||||||
const role = await RoleModel.findOneAndUpdate({roleId}, {towerTaskCnt: 0, towerTaskRefTime: curTime, towerTaskReCnt: 0}, {new: true}).lean(lean);
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
// 刷新派遣任务次数增长
|
|
||||||
public static async increaseTowerCnt(roleId: string, num: number, lean = true) {
|
|
||||||
const role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerTaskCnt: num}}, {new: true}).lean(lean);
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
// 派遣任务增加刷新次数
|
|
||||||
public static async increaseTowerRefCnt(roleId: string, num: number, lean = true) {
|
|
||||||
const role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerTaskReCnt: num}}, {new: true}).lean(lean);
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 刷新远征重置次数
|
|
||||||
public static async increaseExpeditionResetCnt(roleId: string, needRefresh: boolean, curTime: Date, lean = true) {
|
|
||||||
|
|
||||||
let role = null;
|
|
||||||
if (needRefresh) {
|
|
||||||
role = await RoleModel.findOneAndUpdate({roleId}, {expeditionResetCnt: 1, expeditionResetRefTime: curTime}, {new: true}).lean(lean);
|
|
||||||
} else {
|
|
||||||
role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {expeditionResetCnt: 1}}, {new: true}).lean(lean);
|
|
||||||
}
|
}
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public static async findRoleByField(field: string, value?: Array<number|string>, lean = true) {
|
||||||
// 购买次数
|
let searchObj = {};
|
||||||
public static async buyCnt(roleId: string, needRefresh: boolean, inc: number, curTime: Date, lean = true) { console.log('&*&*&*&*&')
|
if(field != 'all') {
|
||||||
|
searchObj[field] = {
|
||||||
let role = null;
|
$in: value
|
||||||
if (needRefresh) {
|
};
|
||||||
role = await RoleModel.findOneAndUpdate({roleId}, {dungeonCnt: 0, dungeonRefTime: curTime, dungeonBuyCnt: inc}, {new: true}).lean(lean);
|
|
||||||
} else {
|
|
||||||
role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {dungeonBuyCnt: inc}}, {new: true}).lean(lean);
|
|
||||||
}
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 增加次数
|
|
||||||
public static async increaseDungeonCnt(roleId: string, needRefresh: boolean, inc: number, curTime: Date, lean = true) {
|
|
||||||
let role = null;
|
|
||||||
if (needRefresh) {
|
|
||||||
role = await RoleModel.findOneAndUpdate({roleId}, {dungeonCnt: inc, dungeonRefTime: curTime, dungeonBuyCnt: 0}, {new: true}).lean(lean);
|
|
||||||
} else {
|
|
||||||
role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {dungeonCnt: inc}}, {new: true}).lean(lean);
|
|
||||||
}
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取排行榜
|
|
||||||
public static async getRank(type: string, serverId: number, fields: Array<string>, page = 1, limit = 100, lean = true) {
|
|
||||||
let sortBy = {};
|
|
||||||
if(type == 'tower') {
|
|
||||||
sortBy['towerLv'] = -1;
|
|
||||||
sortBy['towerUpTime'] = 1;
|
|
||||||
}
|
|
||||||
const ranks = await RoleModel.find({serverId}).select(fields.join(' ')).sort(sortBy).limit(limit).skip((page - 1) * limit).lean(lean);
|
|
||||||
return ranks;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async updateSumCe(roleId: string, hid: number, ce: number, oldCe: number, lean = true) {
|
|
||||||
|
|
||||||
let role = await RoleModel.findByRoleId(roleId);
|
|
||||||
let topFive = role?.topFive||new Array();
|
|
||||||
let distance = ce - oldCe;
|
|
||||||
|
|
||||||
topFive.sort((a, b) => {return b.ce - a.ce}); // 0-5,最大-最小
|
|
||||||
let index = topFive.findIndex(cur => cur.hid == hid);
|
|
||||||
if(index == -1) { // 不在最强列表
|
|
||||||
if(topFive.length < 5) { // 不满5人
|
|
||||||
topFive.push({hid, ce});
|
|
||||||
} else if(topFive.length == 5){
|
|
||||||
if(ce > topFive[topFive.length - 1].ce) { // 跻身最强5人
|
|
||||||
topFive.pop();
|
|
||||||
topFive.push({hid, ce});
|
|
||||||
}
|
}
|
||||||
} else {
|
//.select('uid tel username')
|
||||||
topFive.splice(5, topFive.length - 5);
|
const user = await RoleModel.find(searchObj).lean(lean);
|
||||||
}
|
return user;
|
||||||
} else { // 原来就是最强5人
|
|
||||||
if(ce < topFive[topFive.length - 1].ce) { // 滑出最强
|
|
||||||
let heroes = await HeroModel.getTopHero(roleId, 5);
|
|
||||||
topFive = heroes.map(cur => {return {hid: cur.hid, ce: cur.ce}});
|
|
||||||
} else {
|
|
||||||
topFive[index].ce = ce;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let topFiveCe = topFive.reduce((pre, cur) => {
|
|
||||||
return pre + cur.ce
|
|
||||||
}, 0);
|
|
||||||
await RoleModel.findOneAndUpdate({roleId}, { topFive, topFiveCe, $inc: {ce: distance} }).lean(lean);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 保存秘境首通队伍
|
public static async setEventStatus(roleId: string, eventStatus: number, lean = true) {
|
||||||
public static async saveDungeonHero(roleId: string, battleId: number, heroes: Array<number>, isSuccess: boolean) {
|
await RoleModel.findOneAndUpdate({ roleId }, { eventStatus }, {new: true}).lean(lean);
|
||||||
if(isSuccess) {
|
|
||||||
const role = await Role.findByRoleId(roleId);
|
|
||||||
let dungeonHeroes = role && role.dungeonHeroes;
|
|
||||||
let hasHero = dungeonHeroes&&dungeonHeroes.find(cur => cur.battleId == battleId);
|
|
||||||
if(!dungeonHeroes || !hasHero) {
|
|
||||||
await RoleModel.findOneAndUpdate({roleId}, {$push:{dungeonHeroes: {battleId, heroes}}})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 保存开启功能
|
public static async towerLvUp(roleId: string, lean = true) {
|
||||||
public static async pushFuncs(roleId: string, funcs: Array<number>, lean = true) {
|
let role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerLv: 1}, towerUpTime: new Date()}, {new: true}).lean(lean);
|
||||||
const recs = await RoleModel.findOneAndUpdate({roleId}, {$push: {funcs: {$each: funcs}}}, {new: true}).lean(lean);
|
return role;
|
||||||
return recs
|
}
|
||||||
}
|
|
||||||
|
public static async hangUpSpdUp(roleId: string, cnt: number, curTime: Date, lean = true) {
|
||||||
|
if (cnt < 0) return null;
|
||||||
|
|
||||||
|
const result = await RoleModel.findOne({roleId}).lean(lean);
|
||||||
|
const lastSpdUpTime = result?.lastSpdUpTime;
|
||||||
|
let role = null;
|
||||||
|
if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime, HANG_UP_CONSTS.REFRESH_TIME, 1) && cnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) {
|
||||||
|
role = await RoleModel.findOneAndUpdate({roleId}, {hangUpSpdUpCnt: HANG_UP_CONSTS.MAX_SPD_UP_CNT - cnt, lastSpdUpTime: curTime}, {new: true}).lean(lean);
|
||||||
|
} else {
|
||||||
|
role = await RoleModel.findOneAndUpdate({roleId, hangUpSpdUpCnt: {$gte: cnt}}, {$inc: {hangUpSpdUpCnt: -cnt}, lastSpdUpTime: curTime}, {new: true}).lean(lean);
|
||||||
|
}
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async increaseExpeditionPoint(roleId: string, point: number, lean = true) {
|
||||||
|
let role = await RoleModel.findOneAndUpdate({roleId}, {$inc: { expeditionPoint: point }}, {new: true}).lean(lean);
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async levelup(roleId: string, lv: number, exp: number, lean = true) {
|
||||||
|
let role = await RoleModel.findOneAndUpdate({roleId}, {$set: { exp, lv }}, {new: true}).lean(lean);
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async deleteAccount(roleId: string, lean = true) {
|
||||||
|
let result = await RoleModel.deleteMany({roleId}).lean(lean);
|
||||||
|
return result||{};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async addCoin(roleId: string, cnt: number, lean = true) {
|
||||||
|
let result = await RoleModel.findOneAndUpdate({roleId}, { $inc: {coin: cnt} }, { "new": true, "upsert": true}).lean(lean);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async addGoldFree(roleId: string, cnt: number, lean = true) {
|
||||||
|
let result = await RoleModel.findOneAndUpdate({roleId}, { $inc: { gold: cnt, giftGold: cnt } }, { "new": true, "upsert": true}).lean(lean);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async costCoin(roleId: string, cnt: number, lean = true) {
|
||||||
|
let result = await RoleModel.findOneAndUpdate({roleId, coin: {$gte: cnt}}, { $inc: { coin: -cnt } }, { "new": true}).lean(lean);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async costGold(roleId: string, cnt: number, lean = true) {
|
||||||
|
let result = await RoleModel.findOneAndUpdate({roleId, gold: {$gte: cnt}}, { $inc: { gold: -cnt, totalCost: cnt } }, { "new": true}).lean(lean);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async pushWarStar(roleId: string, battleId: number, warType: number, star: number, lean = true) {
|
||||||
|
let result = await RoleModel.findOneAndUpdate({roleId}, { $addToSet: { warStar: {id: battleId, warType, star }} }, { "new": true, "upsert": true}).lean(lean);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async updateWarStar(roleId: string, battleId: number, star: number, lean = true) {
|
||||||
|
let result = await RoleModel.findOneAndUpdate(
|
||||||
|
{roleId, 'warStar.id': battleId},
|
||||||
|
{ $set: { 'warStar.$.star': star } },
|
||||||
|
{ "new": true, "upsert": true}
|
||||||
|
).lean(lean);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重置派遣次数
|
||||||
|
public static async resetTowerCnt(roleId: string, curTime: Date, lean = true) {
|
||||||
|
const role = await RoleModel.findOneAndUpdate({roleId}, {towerTaskCnt: 0, towerTaskRefTime: curTime, towerTaskReCnt: 0}, {new: true}).lean(lean);
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
// 刷新派遣任务次数增长
|
||||||
|
public static async increaseTowerCnt(roleId: string, num: number, lean = true) {
|
||||||
|
const role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerTaskCnt: num}}, {new: true}).lean(lean);
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
// 派遣任务增加刷新次数
|
||||||
|
public static async increaseTowerRefCnt(roleId: string, num: number, lean = true) {
|
||||||
|
const role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerTaskReCnt: num}}, {new: true}).lean(lean);
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 刷新远征重置次数
|
||||||
|
public static async increaseExpeditionResetCnt(roleId: string, needRefresh: boolean, curTime: Date, lean = true) {
|
||||||
|
|
||||||
|
let role = null;
|
||||||
|
if (needRefresh) {
|
||||||
|
role = await RoleModel.findOneAndUpdate({roleId}, {expeditionResetCnt: 1, expeditionResetRefTime: curTime}, {new: true}).lean(lean);
|
||||||
|
} else {
|
||||||
|
role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {expeditionResetCnt: 1}}, {new: true}).lean(lean);
|
||||||
|
}
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 购买次数
|
||||||
|
public static async buyCnt(roleId: string, needRefresh: boolean, inc: number, curTime: Date, lean = true) { console.log('&*&*&*&*&')
|
||||||
|
|
||||||
|
let role = null;
|
||||||
|
if (needRefresh) {
|
||||||
|
role = await RoleModel.findOneAndUpdate({roleId}, {dungeonCnt: 0, dungeonRefTime: curTime, dungeonBuyCnt: inc}, {new: true}).lean(lean);
|
||||||
|
} else {
|
||||||
|
role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {dungeonBuyCnt: inc}}, {new: true}).lean(lean);
|
||||||
|
}
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 增加次数
|
||||||
|
public static async increaseDungeonCnt(roleId: string, needRefresh: boolean, inc: number, curTime: Date, lean = true) {
|
||||||
|
let role = null;
|
||||||
|
if (needRefresh) {
|
||||||
|
role = await RoleModel.findOneAndUpdate({roleId}, {dungeonCnt: inc, dungeonRefTime: curTime, dungeonBuyCnt: 0}, {new: true}).lean(lean);
|
||||||
|
} else {
|
||||||
|
role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {dungeonCnt: inc}}, {new: true}).lean(lean);
|
||||||
|
}
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取排行榜
|
||||||
|
public static async getRank(type: string, serverId: number, fields: Array<string>, page = 1, limit = 100, lean = true) {
|
||||||
|
let sortBy = {};
|
||||||
|
if(type == 'tower') {
|
||||||
|
sortBy['towerLv'] = -1;
|
||||||
|
sortBy['towerUpTime'] = 1;
|
||||||
|
}
|
||||||
|
const ranks = await RoleModel.find({serverId}).select(fields.join(' ')).sort(sortBy).limit(limit).skip((page - 1) * limit).lean(lean);
|
||||||
|
return ranks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async updateSumCe(roleId: string, hid: number, ce: number, oldCe: number, lean = true) {
|
||||||
|
|
||||||
|
let role = await RoleModel.findByRoleId(roleId);
|
||||||
|
let topFive = role?.topFive||new Array();
|
||||||
|
let distance = ce - oldCe;
|
||||||
|
|
||||||
|
topFive.sort((a, b) => {return b.ce - a.ce}); // 0-5,最大-最小
|
||||||
|
let index = topFive.findIndex(cur => cur.hid == hid);
|
||||||
|
if(index == -1) { // 不在最强列表
|
||||||
|
if(topFive.length < 5) { // 不满5人
|
||||||
|
topFive.push({hid, ce});
|
||||||
|
} else if(topFive.length == 5){
|
||||||
|
if(ce > topFive[topFive.length - 1].ce) { // 跻身最强5人
|
||||||
|
topFive.pop();
|
||||||
|
topFive.push({hid, ce});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
topFive.splice(5, topFive.length - 5);
|
||||||
|
}
|
||||||
|
} else { // 原来就是最强5人
|
||||||
|
if(ce < topFive[topFive.length - 1].ce) { // 滑出最强
|
||||||
|
let heroes = await HeroModel.getTopHero(roleId, 5);
|
||||||
|
topFive = heroes.map(cur => {return {hid: cur.hid, ce: cur.ce}});
|
||||||
|
} else {
|
||||||
|
topFive[index].ce = ce;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let topFiveCe = topFive.reduce((pre, cur) => {
|
||||||
|
return pre + cur.ce
|
||||||
|
}, 0);
|
||||||
|
await RoleModel.findOneAndUpdate({roleId}, { topFive, topFiveCe, $inc: {ce: distance} }).lean(lean);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存秘境首通队伍
|
||||||
|
public static async saveDungeonHero(roleId: string, battleId: number, heroes: Array<number>, isSuccess: boolean) {
|
||||||
|
if(isSuccess) {
|
||||||
|
const role = await Role.findByRoleId(roleId);
|
||||||
|
let dungeonHeroes = role && role.dungeonHeroes;
|
||||||
|
let hasHero = dungeonHeroes&&dungeonHeroes.find(cur => cur.battleId == battleId);
|
||||||
|
if(!dungeonHeroes || !hasHero) {
|
||||||
|
await RoleModel.findOneAndUpdate({roleId}, {$push:{dungeonHeroes: {battleId, heroes}}})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存开启功能
|
||||||
|
public static async pushFuncs(roleId: string, funcs: Array<number>, lean = true) {
|
||||||
|
const recs = await RoleModel.findOneAndUpdate({roleId}, {$push: {funcs: {$each: funcs}}}, {new: true}).lean(lean);
|
||||||
|
return recs
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async updateRoleInfo(roleId: string, roleUpdate:roleUpdate, lean = true) {
|
||||||
|
delete roleUpdate._id;
|
||||||
|
let result = await HeroModel.findOneAndUpdate({roleId}, {$set:roleUpdate}).lean(lean);
|
||||||
|
return result||{};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const RoleModel = getModelForClass(Role);
|
export const RoleModel = getModelForClass(Role);
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import { getHeroInfoById, getStarRatio, getHeroSkillById, getSeidById, getOlySeidByType, getGoodById } from "./gamedata";
|
import { getHeroInfoById, getStarRatio, /*getHeroSkillById,*/ getSeidById, getOlySeidByType, getGoodById } from "./gamedata";
|
||||||
import { ABI_TYPE, SEID_TYPE } from "../consts/abilityConst";
|
import { getAtrrNameById, ABI_TYPE, SEID_TYPE } from "../consts/abilityConst";
|
||||||
import { WAR_JSON_ATTRIBUTE_TYPE, EXPRESSION } from '../consts/consts';
|
import { EXPRESSION } from '../consts/consts';
|
||||||
|
|
||||||
export default class Actor {
|
export default class Actor {
|
||||||
private hid: number = 0;
|
private hid: number = 0;
|
||||||
private lv: number = 0;
|
private lv: number = 0;
|
||||||
private oldCe: number = 0;
|
private oldCe: number = 0;
|
||||||
private star: number = 0;
|
private star: number = 0;
|
||||||
private fire: number = 0;
|
private colorStar: number = 0;
|
||||||
private equips: Array<any> = [];
|
private equips: Array<any> = [];
|
||||||
private conections: Array<{id: number;name: string;valid: boolean;}> = [];
|
private conections: Array<{id: number;name: string;valid: boolean;}> = [];
|
||||||
/**被动技能 */
|
/**被动技能 */
|
||||||
@@ -19,9 +19,9 @@ export default class Actor {
|
|||||||
this.lv = hero.lv;
|
this.lv = hero.lv;
|
||||||
this.oldCe = hero.ce;
|
this.oldCe = hero.ce;
|
||||||
this.star = hero.star;
|
this.star = hero.star;
|
||||||
this.fire = hero.fire;
|
this.colorStar = hero.colorStar;
|
||||||
this.equips = hero.equips;
|
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();
|
this.updateActorEffect();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,21 +47,21 @@ export default class Actor {
|
|||||||
|
|
||||||
/**更新武将的被动技能 */
|
/**更新武将的被动技能 */
|
||||||
updateSkillInfo(){
|
updateSkillInfo(){
|
||||||
let dicHero = getHeroInfoById(this.hid);
|
// let dicHero = getHeroInfoById(this.hid);
|
||||||
// console.log('updateSkillInfo', dicHero.skill, getHeroSkillById(dicHero.skill))
|
// console.log('updateSkillInfo', dicHero.skill, getHeroSkillById(dicHero.skill))
|
||||||
//被动技能
|
//被动技能
|
||||||
if(dicHero.skill){
|
// if(dicHero.skill){
|
||||||
let {seidLvUpArr} = getHeroSkillById(dicHero.skill);
|
// let {seidLvUpArr} = getHeroSkillById(dicHero.skill);
|
||||||
for(let ii = 0;ii < seidLvUpArr.length;ii+=2){
|
// for(let ii = 0;ii < seidLvUpArr.length;ii+=2){
|
||||||
if(this.lv >= seidLvUpArr[ii + 1]){
|
// if(this.lv >= seidLvUpArr[ii + 1]){
|
||||||
let dicSeid = getSeidById(seidLvUpArr[ii]);
|
// let dicSeid = getSeidById(seidLvUpArr[ii]);
|
||||||
// console.log('updateSkillInfo*', seidLvUpArr[ii], dicSeid)
|
// // console.log('updateSkillInfo*', seidLvUpArr[ii], dicSeid)
|
||||||
if(dicSeid){
|
// if(dicSeid){
|
||||||
this.seidList[Math.floor(ii/2)] = dicSeid;
|
// this.seidList[Math.floor(ii/2)] = dicSeid;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
addSeidEffect(seidId:number, seidValue?:Array<number>){
|
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};
|
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++){
|
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);
|
json[field] = this.getRealAbility(i);
|
||||||
}
|
}
|
||||||
return json
|
return json
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import fs = require('fs');
|
import fs = require('fs');
|
||||||
import path = require('path');
|
import path = require('path');
|
||||||
import { ABI_TYPE } from '../consts/abilityConst';
|
import { ABI_TYPE, ABI_STAGE } from '../consts/abilityConst';
|
||||||
import { decodeIdCntArrayStr, getRandEelm } from './util';
|
import { decodeIdCntArrayStr, getRandEelm } from './util';
|
||||||
import { IT_TYPE } from '../consts/consts';
|
import { IT_TYPE } from '../consts/consts';
|
||||||
|
|
||||||
@@ -11,7 +11,10 @@ const towerInfos = new Map<number, any>();
|
|||||||
const towerTaskInfos = new Map<number, any>();
|
const towerTaskInfos = new Map<number, any>();
|
||||||
const heroInfos = new Map<number, any>();
|
const heroInfos = new Map<number, any>();
|
||||||
const jobInfos = 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 levelInfos = new Map<number, {sum: number, cur: number}>();
|
||||||
|
const heroLevelInfo = new Map<number, number>();
|
||||||
const starRatioInfo = new Map<number, number>();
|
const starRatioInfo = new Map<number, number>();
|
||||||
const heroSkillInfo = new Map<number, any>()
|
const heroSkillInfo = new Map<number, any>()
|
||||||
const seidInfo = 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 goodInfo = new Map<number, any>();
|
||||||
const blueprt = new Map<number, Array<number>>();
|
const blueprt = new Map<number, Array<number>>();
|
||||||
const blueprtCompose = new Map<number, any>();
|
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() {
|
function parseWarData() {
|
||||||
let result = null;
|
let result = null;
|
||||||
@@ -96,6 +121,11 @@ function parseJobData() {
|
|||||||
jobsData.forEach(elem => {
|
jobsData.forEach(elem => {
|
||||||
if (elem && elem.jobid) {
|
if (elem && elem.jobid) {
|
||||||
jobInfos.set(elem.jobid, elem);
|
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() {
|
function parseStarRatio() {
|
||||||
const file = 'dic_star_ratio';
|
const file = 'dic_star_ratio';
|
||||||
const data = gamedata['jsons'][file] || [];
|
const data = gamedata['jsons'][file] || [];
|
||||||
@@ -128,21 +170,23 @@ function parseHeroSkill() {
|
|||||||
const data = gamedata['jsons'][file] || [];
|
const data = gamedata['jsons'][file] || [];
|
||||||
data.forEach(elem => {
|
data.forEach(elem => {
|
||||||
if (elem && elem.skillid) {
|
if (elem && elem.skillid) {
|
||||||
const seidLvUpArr = new Array<number>();
|
let starSeidArr = new Array<{star: number, value: number}>();
|
||||||
let skillArr = (elem.seid as string).split('&');
|
let colorStarSeidArr = new Array<{star: number, value: number}>();
|
||||||
let lvUpArr = (elem.selv_up as string).split('&');
|
|
||||||
|
|
||||||
for(let i = 0;i < skillArr.length;i++){
|
(elem.starSeid as string).split('|').forEach(cur => {
|
||||||
if(skillArr[i]==="") continue;
|
if(cur) {
|
||||||
seidLvUpArr.push(parseInt(skillArr[i]));
|
let a = cur.split('&');
|
||||||
if(lvUpArr[i]){
|
starSeidArr.push({star: parseInt(a[0]), value: parseInt(a[1])});
|
||||||
seidLvUpArr.push(parseInt(lvUpArr[i]));
|
|
||||||
}
|
}
|
||||||
else{
|
});
|
||||||
seidLvUpArr.push(1000);
|
(elem.colorStarSeid as string).split('|').forEach(cur => {
|
||||||
|
if(cur) {
|
||||||
|
let a = cur.split('&');
|
||||||
|
colorStarSeidArr.push({star: parseInt(a[0]), value: parseInt(a[1])});
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
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) {
|
function initData (folder: string) {
|
||||||
if(!gamedata.hasOwnProperty(folder)) {
|
if(!gamedata.hasOwnProperty(folder)) {
|
||||||
gamedata[folder] = {};
|
gamedata[folder] = {};
|
||||||
@@ -233,7 +321,7 @@ function initData (folder: string) {
|
|||||||
var name = file.split('.')[0];
|
var name = file.split('.')[0];
|
||||||
try {
|
try {
|
||||||
gamedata[folder][name] = JSON.parse(
|
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) {
|
} catch(e) {
|
||||||
console.error(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() {
|
function parseData() {
|
||||||
parseWarData();
|
parseWarData();
|
||||||
parseTowerData();
|
parseTowerData();
|
||||||
@@ -251,6 +376,7 @@ function parseData() {
|
|||||||
parseHeroData();
|
parseHeroData();
|
||||||
parseJobData();
|
parseJobData();
|
||||||
parseLevelInfo();
|
parseLevelInfo();
|
||||||
|
parseHeroLevelInfo();
|
||||||
parseStarRatio();
|
parseStarRatio();
|
||||||
parseHeroSkill();
|
parseHeroSkill();
|
||||||
parseSeidList();
|
parseSeidList();
|
||||||
@@ -259,6 +385,12 @@ function parseData() {
|
|||||||
parseComBtlData();
|
parseComBtlData();
|
||||||
parseGood();
|
parseGood();
|
||||||
parseBlueprtCompose();
|
parseBlueprtCompose();
|
||||||
|
parseFashions();
|
||||||
|
parseFiendShips();
|
||||||
|
parseFiendShipLevels();
|
||||||
|
parseFiendShipLevelMaps();
|
||||||
|
parseHeroStar();
|
||||||
|
parseHeroWake();
|
||||||
}
|
}
|
||||||
|
|
||||||
initData('jsons'); // 加载一般json
|
initData('jsons'); // 加载一般json
|
||||||
@@ -312,6 +444,11 @@ export function getJobInfoById(jid: number) {
|
|||||||
return jobInfo;
|
return jobInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getMaxGradeByjobClass(jobClass: number) {
|
||||||
|
const job = jobClassMaxGrades.get(jobClass);
|
||||||
|
return job?.jobid;
|
||||||
|
}
|
||||||
|
|
||||||
export function getLvByExp(exp: number) {
|
export function getLvByExp(exp: number) {
|
||||||
let curLv = 0;
|
let curLv = 0;
|
||||||
let entries = levelInfos.entries();
|
let entries = levelInfos.entries();
|
||||||
@@ -327,6 +464,21 @@ export function getExpByLv(lv: number) {
|
|||||||
return levelInfos.get(lv);
|
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) {
|
export function getStarRatio(star: number) {
|
||||||
return starRatioInfo.get(star);
|
return starRatioInfo.get(star);
|
||||||
}
|
}
|
||||||
@@ -412,3 +564,36 @@ export function hasExpeditionById(id: number) {
|
|||||||
export function getBlueprtComposeByQuality(quality: number) {
|
export function getBlueprtComposeByQuality(quality: number) {
|
||||||
return blueprtCompose.get(quality);
|
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) };
|
result = { id: parseInt(id), weight: parseInt(weight) };
|
||||||
break;
|
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;
|
return result;
|
||||||
};
|
};
|
||||||
@@ -392,3 +398,16 @@ export function ratioReward(rewardStr: string, ratio: number): string {
|
|||||||
}
|
}
|
||||||
return res.substring(0, res.length - 1);
|
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;
|
||||||
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"IsTestService":true,
|
"IsTestService":true,
|
||||||
"OpenIosAliPay":false,
|
"OpenIosAliPay":false,
|
||||||
"GuideSwitch":true,
|
"GuideSwitch":true,
|
||||||
"GENERAL_EQUIPMENT_DEFAULT_LEVEL":7,
|
"GENERAL_EQUIPMENT_DEFAULT_LEVEL":7,
|
||||||
"ServiceSign":"guanfu"
|
"ServiceSign":"guanfu"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"min": 40,
|
"min": 40,
|
||||||
"max": 69,
|
"max": 59,
|
||||||
"possibility": "1&70|2&30"
|
"possibility": "1&70|2&30"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,658 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"jobid": 1,
|
|
||||||
"name": "短剑步兵",
|
|
||||||
"grade": 1,
|
|
||||||
"training": 20,
|
|
||||||
"job_class": 1,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 2,
|
|
||||||
"spe": 4,
|
|
||||||
"atkid": 2,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_503",
|
|
||||||
"info": "步兵系1级。擅长防御的步兵部队。适合守卫城。虽然优于远距离攻击部队,但却劣于骑兵部队。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 2,
|
|
||||||
"name": "长剑步兵",
|
|
||||||
"grade": 2,
|
|
||||||
"training": 40,
|
|
||||||
"job_class": 1,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 2,
|
|
||||||
"spe": 4,
|
|
||||||
"atkid": 2,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_503",
|
|
||||||
"info": "步兵系2级。擅长防御的步兵部队。比起上一阶段防御增强,有着很强的守卫能力。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 3,
|
|
||||||
"name": "强剑步兵",
|
|
||||||
"grade": 3,
|
|
||||||
"training": 60,
|
|
||||||
"job_class": 1,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 3,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 2,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_503",
|
|
||||||
"info": "步兵系3级。擅长防御的步兵部队。比起上一阶段移动力增强,能更妥善运用。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 4,
|
|
||||||
"name": "近卫兵",
|
|
||||||
"grade": 4,
|
|
||||||
"training": 80,
|
|
||||||
"job_class": 1,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 3,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 2,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_502",
|
|
||||||
"info": "步兵系4级。擅长防御的步兵部队。比起上一阶段对间接攻击的防御增强,防御能力更强。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 5,
|
|
||||||
"name": "御林军",
|
|
||||||
"grade": 5,
|
|
||||||
"training": 99,
|
|
||||||
"job_class": 1,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 4,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 2,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_501",
|
|
||||||
"info": "步兵系5级。擅长防御的步兵部队。比起上一阶段攻击力增强许多,可全方位活用攻击与防御。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 6,
|
|
||||||
"name": "短枪兵",
|
|
||||||
"grade": 1,
|
|
||||||
"training": 20,
|
|
||||||
"job_class": 2,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 5,
|
|
||||||
"spe": 4,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "枪兵系1级。擅长攻击的步兵部队。在城内与森林较有优势。与步兵系类似,但是在与骑兵部队战斗时较有优势。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 7,
|
|
||||||
"name": "长枪兵",
|
|
||||||
"grade": 2,
|
|
||||||
"training": 40,
|
|
||||||
"job_class": 2,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 5,
|
|
||||||
"spe": 4,
|
|
||||||
"atkid": 6,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_504",
|
|
||||||
"info": "枪兵系2级。擅长攻击的步兵部队。比起上一阶段攻击范围增加,可让敌人的反击无效。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 8,
|
|
||||||
"name": "强枪兵",
|
|
||||||
"grade": 3,
|
|
||||||
"training": 60,
|
|
||||||
"job_class": 2,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 6,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 6,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "枪兵系3级。擅长攻击的步兵部队。比起上一阶段移动力增强,可快速追击敌人。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 9,
|
|
||||||
"name": "斩马队",
|
|
||||||
"grade": 4,
|
|
||||||
"training": 80,
|
|
||||||
"job_class": 2,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 6,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 6,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "枪兵系4级。擅长攻击的步兵部队。比起上一阶段对于骑兵的伤害加强,可以迅速的消灭骑兵部队。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 10,
|
|
||||||
"name": "白耳兵",
|
|
||||||
"grade": 5,
|
|
||||||
"training": 99,
|
|
||||||
"job_class": 2,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 7,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 6,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_505",
|
|
||||||
"info": "枪兵系5级。擅长攻击的步兵部队。比起上一阶段攻击力增强许多,是消灭骑兵的杀手。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 11,
|
|
||||||
"name": "短枪骑兵",
|
|
||||||
"grade": 1,
|
|
||||||
"training": 20,
|
|
||||||
"job_class": 3,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 14,
|
|
||||||
"spe": 6,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 2,
|
|
||||||
"music": 2,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "轻骑兵系1级。移动力优秀的骑兵部队。不擅长艰险的地形,对步兵部队的攻击较强,但对远距离攻击部队较弱。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 12,
|
|
||||||
"name": "长枪骑兵",
|
|
||||||
"grade": 2,
|
|
||||||
"training": 40,
|
|
||||||
"job_class": 3,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 14,
|
|
||||||
"spe": 6,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 2,
|
|
||||||
"music": 2,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "轻骑兵系2级。移动力优秀的骑兵部队。比起上一阶段攻击力增强,更有威胁性。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 13,
|
|
||||||
"name": "强枪骑兵",
|
|
||||||
"grade": 3,
|
|
||||||
"training": 60,
|
|
||||||
"job_class": 3,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 15,
|
|
||||||
"spe": 7,
|
|
||||||
"atkid": 6,
|
|
||||||
"move": 2,
|
|
||||||
"music": 2,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "轻骑兵系3级。移动力优秀的骑兵部队。比起上一阶段攻击范围与移动力增强,活用性与运用性较好。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 14,
|
|
||||||
"name": "禁卫队",
|
|
||||||
"grade": 4,
|
|
||||||
"training": 80,
|
|
||||||
"job_class": 3,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 15,
|
|
||||||
"spe": 7,
|
|
||||||
"atkid": 6,
|
|
||||||
"move": 2,
|
|
||||||
"music": 2,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "轻骑兵系4级。移动力优秀的骑兵部队。比起上一阶段强化了攻击力,平原战的主力。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 15,
|
|
||||||
"name": "疾风骑",
|
|
||||||
"grade": 5,
|
|
||||||
"training": 99,
|
|
||||||
"job_class": 3,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 16,
|
|
||||||
"spe": 7,
|
|
||||||
"atkid": 6,
|
|
||||||
"move": 2,
|
|
||||||
"music": 2,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "轻骑兵系5级。移动力优秀的骑兵部队。比起上一阶段战斗力进一步强化,是可以依赖的主力部队。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 16,
|
|
||||||
"name": "短弓兵",
|
|
||||||
"grade": 1,
|
|
||||||
"training": 20,
|
|
||||||
"job_class": 4,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 8,
|
|
||||||
"spe": 4,
|
|
||||||
"atkid": 3,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_505",
|
|
||||||
"info": "弓兵系1级。命中率高的远距离攻击部队。以远距离攻击为特征,虽然优于骑兵部队,但却劣于步兵。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 17,
|
|
||||||
"name": "长弓兵",
|
|
||||||
"grade": 2,
|
|
||||||
"training": 40,
|
|
||||||
"job_class": 4,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 8,
|
|
||||||
"spe": 4,
|
|
||||||
"atkid": 4,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "弓兵系2级。命中率高的远距离攻击部队。比起上一阶段增强了爆发力,拥有更高的命中率。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 18,
|
|
||||||
"name": "强弓兵",
|
|
||||||
"grade": 3,
|
|
||||||
"training": 60,
|
|
||||||
"job_class": 4,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 9,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 5,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_504",
|
|
||||||
"info": "弓兵系3级。命中率高的远距离攻击部队。比起上一阶段增加了攻击范围,移动力也增强,因此也可在艰险的地形使用。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 19,
|
|
||||||
"name": "远射队",
|
|
||||||
"grade": 4,
|
|
||||||
"training": 80,
|
|
||||||
"job_class": 4,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 9,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 5,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_505",
|
|
||||||
"info": "弓兵系4级。命中率高的远距离攻击部队。比起上一阶段加强了物理攻击,可给予敌人大伤害。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 20,
|
|
||||||
"name": "弓将",
|
|
||||||
"grade": 5,
|
|
||||||
"training": 99,
|
|
||||||
"job_class": 4,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 10,
|
|
||||||
"spe": 6,
|
|
||||||
"atkid": 5,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_505",
|
|
||||||
"info": "弓兵系5级。命中率高的远距离攻击部队。比起上一阶段加强了物理攻击。可趁敌人接近前击杀。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 21,
|
|
||||||
"name": "武斗家",
|
|
||||||
"grade": 1,
|
|
||||||
"training": 20,
|
|
||||||
"job_class": 5,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 22,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "武斗家系1级。爆发力强的特殊部队,也能使用妨害系的策略。虽然比起步兵部队防御力较弱,但是敏捷性与攻击力较高。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 22,
|
|
||||||
"name": "力士",
|
|
||||||
"grade": 2,
|
|
||||||
"training": 40,
|
|
||||||
"job_class": 5,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 22,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 2,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "武斗家系2级。爆发力强的特殊部队,比起上一阶段提升了物理攻击的防御率,是近身肉搏的高手。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 23,
|
|
||||||
"name": "斗士",
|
|
||||||
"grade": 3,
|
|
||||||
"training": 60,
|
|
||||||
"job_class": 5,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 23,
|
|
||||||
"spe": 6,
|
|
||||||
"atkid": 2,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "武斗家系3级。爆发力强的特殊部队,比起上一阶段移动力增强,适合当战斗的前锋。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 24,
|
|
||||||
"name": "拳士",
|
|
||||||
"grade": 4,
|
|
||||||
"training": 80,
|
|
||||||
"job_class": 5,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 23,
|
|
||||||
"spe": 6,
|
|
||||||
"atkid": 2,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "武斗家系4级。爆发力强的特殊部队,比起上一阶段全防御率进一步提升,是我军的中坚力量。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 25,
|
|
||||||
"name": "拳圣",
|
|
||||||
"grade": 5,
|
|
||||||
"training": 99,
|
|
||||||
"job_class": 5,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 24,
|
|
||||||
"spe": 6,
|
|
||||||
"atkid": 2,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "武斗家系5级。爆发力强的特殊部队。比起上一阶段妨害系策略变强,战斗时可站在前锋或在后方支援。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 26,
|
|
||||||
"name": "策士",
|
|
||||||
"grade": 1,
|
|
||||||
"training": 20,
|
|
||||||
"job_class": 6,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 39,
|
|
||||||
"spe": 4,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "策士系1级。使用攻击策略的文官部队。火系、水系、地系等策略是其专长。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 27,
|
|
||||||
"name": "参谋",
|
|
||||||
"grade": 2,
|
|
||||||
"training": 40,
|
|
||||||
"job_class": 6,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 39,
|
|
||||||
"spe": 4,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "策士系2级。使用攻击策略的文官部队。比起上一阶段火系策略较强,变得更强悍。对精神力较差的敌人来说是个恐怖的对象。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 28,
|
|
||||||
"name": "军师",
|
|
||||||
"grade": 3,
|
|
||||||
"training": 60,
|
|
||||||
"job_class": 6,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 40,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "策士系3级。使用攻击策略的文官部队。比起上一阶段移动力增强,可快速支援策略。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 29,
|
|
||||||
"name": "大军师",
|
|
||||||
"grade": 4,
|
|
||||||
"training": 80,
|
|
||||||
"job_class": 6,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 40,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "策士系4级。使用攻击策略的文官部队。比起上一阶段精神力增强,用策略给予敌人致命的打击。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 30,
|
|
||||||
"name": "智囊",
|
|
||||||
"grade": 5,
|
|
||||||
"training": 99,
|
|
||||||
"job_class": 6,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 41,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "策士系5级。使用攻击策略的文官部队。比起上一阶段精神力变得更强。达到极限的策略破坏力实际上非常惊人,是个令人恐惧的部队。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 31,
|
|
||||||
"name": "道士",
|
|
||||||
"grade": 1,
|
|
||||||
"training": 20,
|
|
||||||
"job_class": 7,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 45,
|
|
||||||
"spe": 4,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "道士系1级。使用妨害策略的文官部队。不受气候或地形影响,可以使用各种策略。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 32,
|
|
||||||
"name": "才士",
|
|
||||||
"grade": 2,
|
|
||||||
"training": 40,
|
|
||||||
"job_class": 7,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 45,
|
|
||||||
"spe": 4,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "道士系2级。使用妨害策略的文官部队。比起上一阶段妨害系策略增强,可使用更多的策略妨害敌人。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 33,
|
|
||||||
"name": "幻术师",
|
|
||||||
"grade": 3,
|
|
||||||
"training": 60,
|
|
||||||
"job_class": 7,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 46,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "道士系3级。使用妨害策略的文官部队。比起上一阶段HP增强,生存能力得以提高。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 34,
|
|
||||||
"name": "妖术师",
|
|
||||||
"grade": 4,
|
|
||||||
"training": 80,
|
|
||||||
"job_class": 7,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 46,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "道士系4级。使用妨害策略的文官部队。比起上一阶段士气增强,策略的暴击几率得到提高。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 35,
|
|
||||||
"name": "祭司长",
|
|
||||||
"grade": 5,
|
|
||||||
"training": 99,
|
|
||||||
"job_class": 7,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 47,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "道士系5级。使用妨害策略的文官部队。比起上一阶段获得拥有特殊力量的策略,在战场上给敌人制造各种各样的困难。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 36,
|
|
||||||
"name": "风水师",
|
|
||||||
"grade": 1,
|
|
||||||
"training": 20,
|
|
||||||
"job_class": 8,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 42,
|
|
||||||
"spe": 4,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "风水师系1级。使用回复策略的文官部队。后方支援部队,在大战中能大放异彩。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 37,
|
|
||||||
"name": "方术士",
|
|
||||||
"grade": 2,
|
|
||||||
"training": 40,
|
|
||||||
"job_class": 8,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 42,
|
|
||||||
"spe": 5,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "风水师系2级。使用回复策略的文官部队。比起上一阶段移动力增强,可快速提供后方支援。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 38,
|
|
||||||
"name": "仙术士",
|
|
||||||
"grade": 3,
|
|
||||||
"training": 60,
|
|
||||||
"job_class": 8,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 43,
|
|
||||||
"spe": 6,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "风水师系3级。使用回复策略的文官部队。比起上一阶段对间接伤害的防御增强,可快速提供后方支援。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 39,
|
|
||||||
"name": "咒术士",
|
|
||||||
"grade": 4,
|
|
||||||
"training": 80,
|
|
||||||
"job_class": 8,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 43,
|
|
||||||
"spe": 6,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "风水师系4级。使用回复策略的文官部队。比起上一阶段MP增加,可提供更多的支援给我军。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 40,
|
|
||||||
"name": "名医",
|
|
||||||
"grade": 5,
|
|
||||||
"training": 99,
|
|
||||||
"job_class": 8,
|
|
||||||
"type": 2,
|
|
||||||
"imgid": 44,
|
|
||||||
"spe": 6,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "风水师系5级。使用回复策略的文官部队。比起上一阶段学会更多治疗的策略,是我军赖以生存的保障力量。"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"jobid": 41,
|
|
||||||
"name": "野兽",
|
|
||||||
"grade": 1,
|
|
||||||
"training": 99,
|
|
||||||
"job_class": 9,
|
|
||||||
"type": 1,
|
|
||||||
"imgid": 44,
|
|
||||||
"spe": 6,
|
|
||||||
"atkid": 1,
|
|
||||||
"move": 1,
|
|
||||||
"music": 1,
|
|
||||||
"seid": "0&",
|
|
||||||
"effect": "eff_500",
|
|
||||||
"info": "野兽。"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
1402
shared/resource/jsons/dic_treasure_combatnum.json
Normal file
1402
shared/resource/jsons/dic_treasure_combatnum.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3022,5 +3022,95 @@
|
|||||||
"c_type": 106,
|
"c_type": 106,
|
||||||
"data": "10&",
|
"data": "10&",
|
||||||
"describe": "10回合内获得胜利"
|
"describe": "10回合内获得胜利"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 3001,
|
||||||
|
"c_type": 302,
|
||||||
|
"data": "99&",
|
||||||
|
"describe": "取得胜利"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 3001,
|
||||||
|
"c_type": 102,
|
||||||
|
"data": "0&",
|
||||||
|
"describe": "我军全员生存"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 3001,
|
||||||
|
"c_type": 108,
|
||||||
|
"data": "1&",
|
||||||
|
"describe": "友军死亡不超过1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5001,
|
||||||
|
"c_type": 302,
|
||||||
|
"data": "99&",
|
||||||
|
"describe": "取得胜利"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5001,
|
||||||
|
"c_type": 102,
|
||||||
|
"data": "0&",
|
||||||
|
"describe": "我军全员生存"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5001,
|
||||||
|
"c_type": 106,
|
||||||
|
"data": "10&",
|
||||||
|
"describe": "10回合内获得胜利"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5002,
|
||||||
|
"c_type": 302,
|
||||||
|
"data": "99&",
|
||||||
|
"describe": "取得胜利"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5002,
|
||||||
|
"c_type": 102,
|
||||||
|
"data": "0&",
|
||||||
|
"describe": "我军全员生存"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5002,
|
||||||
|
"c_type": 106,
|
||||||
|
"data": "10&",
|
||||||
|
"describe": "10回合内获得胜利"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5501,
|
||||||
|
"c_type": 302,
|
||||||
|
"data": "99&",
|
||||||
|
"describe": "取得胜利"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5501,
|
||||||
|
"c_type": 102,
|
||||||
|
"data": "0&",
|
||||||
|
"describe": "我军全员生存"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5501,
|
||||||
|
"c_type": 106,
|
||||||
|
"data": "10&",
|
||||||
|
"describe": "10回合内获得胜利"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5502,
|
||||||
|
"c_type": 302,
|
||||||
|
"data": "99&",
|
||||||
|
"describe": "取得胜利"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5502,
|
||||||
|
"c_type": 102,
|
||||||
|
"data": "0&",
|
||||||
|
"describe": "我军全员生存"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"warid": 5502,
|
||||||
|
"c_type": 106,
|
||||||
|
"data": "10&",
|
||||||
|
"describe": "10回合内获得胜利"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
26
shared/resource/jsons/dic_zyz_approach.json
Normal file
26
shared/resource/jsons/dic_zyz_approach.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"type": 1,
|
||||||
|
"name": "商店",
|
||||||
|
"icon": 2,
|
||||||
|
"description": "去商店买呀"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 2,
|
||||||
|
"name": "关卡",
|
||||||
|
"icon": 3,
|
||||||
|
"description": "去关卡扫荡"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 3,
|
||||||
|
"name": "招募",
|
||||||
|
"icon": 4,
|
||||||
|
"description": "招募获得"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 4,
|
||||||
|
"name": "活动",
|
||||||
|
"icon": 5,
|
||||||
|
"description": "去活动页面"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,43 +1,74 @@
|
|||||||
[{
|
[
|
||||||
"atkid": 1,
|
{
|
||||||
"name": "近战普通攻击",
|
"atkid": 1,
|
||||||
"cname": "攻击近距8格",
|
"name": "近战普通攻击",
|
||||||
"isFullScene": false,
|
"cname": "攻击近距8格",
|
||||||
"toSelf": false,
|
"isFullScene": false,
|
||||||
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1}]"
|
"toSelf": false,
|
||||||
}, {
|
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1}]"
|
||||||
"atkid": 2,
|
},
|
||||||
"name": "远程普通攻击",
|
{
|
||||||
"cname": "攻击近中距12格",
|
"atkid": 2,
|
||||||
"isFullScene": false,
|
"name": "布衣远程普通攻击",
|
||||||
"toSelf": false,
|
"cname": "攻击近中距12格",
|
||||||
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2}]"
|
"isFullScene": false,
|
||||||
}, {
|
"toSelf": false,
|
||||||
"atkid": 3,
|
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2}]"
|
||||||
"name": "四格攻击",
|
},
|
||||||
"cname": "攻击近距4格",
|
{
|
||||||
"isFullScene": false,
|
"atkid": 3,
|
||||||
"toSelf": false,
|
"name": "骑兵攻击",
|
||||||
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1}]"
|
"cname": "攻击近距4格",
|
||||||
}, {
|
"isFullScene": false,
|
||||||
"atkid": 4,
|
"toSelf": false,
|
||||||
"name": "广域攻击",
|
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1}]"
|
||||||
"cname": "攻击近中距24格",
|
},
|
||||||
"isFullScene": false,
|
{
|
||||||
"toSelf": false,
|
"atkid": 4,
|
||||||
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2},\n{\"x\":-2,\"y\":-1},{\"x\":2,\"y\":-1},{\"x\":-2,\"y\":1},{\"x\":2,\"y\":1},{\"x\":-1,\"y\":-2},{\"x\":1,\"y\":-2},{\"x\":-1,\"y\":2},{\"x\":1,\"y\":2},{\"x\":-3,\"y\":0},{\"x\":3,\"y\":0},{\"x\":0,\"y\":-3},{\"x\":0,\"y\":3}]"
|
"name": "广域攻击",
|
||||||
}, {
|
"cname": "攻击近中距24格",
|
||||||
"atkid": 5,
|
"isFullScene": false,
|
||||||
"name": "对自己释放",
|
"toSelf": false,
|
||||||
"cname": "以自身为中心",
|
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2},\r\n{\"x\":-2,\"y\":-1},{\"x\":2,\"y\":-1},{\"x\":-2,\"y\":1},{\"x\":2,\"y\":1},{\"x\":-1,\"y\":-2},{\"x\":1,\"y\":-2},{\"x\":-1,\"y\":2},{\"x\":1,\"y\":2},{\"x\":-3,\"y\":0},{\"x\":3,\"y\":0},{\"x\":0,\"y\":-3},{\"x\":0,\"y\":3}]"
|
||||||
"isFullScene": false,
|
},
|
||||||
"toSelf": false,
|
{
|
||||||
"json": "[{\"x\":995,\"y\":995}]"
|
"atkid": 5,
|
||||||
}, {
|
"name": "对自己释放",
|
||||||
"atkid": 6,
|
"cname": "以自身为中心",
|
||||||
"name": "9格Boss普通攻击",
|
"isFullScene": false,
|
||||||
"cname": "攻击近距离16格",
|
"toSelf": true,
|
||||||
"isFullScene": false,
|
"json": "[{\"x\":0,\"y\":0}]"
|
||||||
"toSelf": false,
|
},
|
||||||
"json": "[{\"x\":-1,\"y\":-1},{\"x\":-1,\"y\":0},{\"x\":-1,\"y\":-1},{\"x\":-1,\"y\":-2},{\"x\":-1,\"y\":-3},{\"x\":0,\"y\":1},{\"x\":0,\"y\":-3},{\"x\":1,\"y\":1},{\"x\":1,\"y\":-3},{\"x\":2,\"y\":1},{\"x\":2,\"y\":-3},{\"x\":3,\"y\":1},{\"x\":3,\"y\":0},{\"x\":3,\"y\":-1},{\"x\":3,\"y\":-2},{\"x\":3,\"y\":-3}]"
|
{
|
||||||
}]
|
"atkid": 6,
|
||||||
|
"name": "9格Boss普通攻击",
|
||||||
|
"cname": "攻击近距离16格",
|
||||||
|
"isFullScene": false,
|
||||||
|
"toSelf": false,
|
||||||
|
"json": "[{\"x\":-1,\"y\":-1},{\"x\":-1,\"y\":0},{\"x\":-1,\"y\":-1},{\"x\":-1,\"y\":-2},{\"x\":-1,\"y\":-3},{\"x\":0,\"y\":1},{\"x\":0,\"y\":-3},{\"x\":1,\"y\":1},{\"x\":1,\"y\":-3},{\"x\":2,\"y\":1},{\"x\":2,\"y\":-3},{\"x\":3,\"y\":1},{\"x\":3,\"y\":0},{\"x\":3,\"y\":-1},{\"x\":3,\"y\":-2},{\"x\":3,\"y\":-3}]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"atkid": 7,
|
||||||
|
"name": "弓兵攻击",
|
||||||
|
"cname": "攻击中距8格",
|
||||||
|
"isFullScene": false,
|
||||||
|
"toSelf": false,
|
||||||
|
"json": "[{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2}]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"atkid": 8,
|
||||||
|
"name": "进阶弓兵攻击",
|
||||||
|
"cname": "攻击中距20格",
|
||||||
|
"isFullScene": false,
|
||||||
|
"toSelf": false,
|
||||||
|
"json": "[{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2},\r\n{\"x\":-2,\"y\":-1},{\"x\":2,\"y\":-1},{\"x\":-2,\"y\":1},{\"x\":2,\"y\":1},{\"x\":-1,\"y\":-2},{\"x\":1,\"y\":-2},{\"x\":-1,\"y\":2},{\"x\":1,\"y\":2},{\"x\":-3,\"y\":0},{\"x\":3,\"y\":0},{\"x\":0,\"y\":-3},{\"x\":0,\"y\":3}]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"atkid": 9,
|
||||||
|
"name": "不会攻击",
|
||||||
|
"cname": "攻击距离0格",
|
||||||
|
"isFullScene": false,
|
||||||
|
"toSelf": false,
|
||||||
|
"json": "[{\"x\":0,\"y\":0}]"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|||||||
@@ -1 +1,402 @@
|
|||||||
[{"level":1,"exp":1000},{"level":2,"exp":4000},{"level":3,"exp":9000},{"level":4,"exp":16000},{"level":5,"exp":25000},{"level":6,"exp":36000},{"level":7,"exp":49000},{"level":8,"exp":64000},{"level":9,"exp":81000},{"level":10,"exp":100000},{"level":11,"exp":121000},{"level":12,"exp":144000},{"level":13,"exp":169000},{"level":14,"exp":196000},{"level":15,"exp":225000},{"level":16,"exp":256000},{"level":17,"exp":289000},{"level":18,"exp":324000},{"level":19,"exp":361000},{"level":20,"exp":400000},{"level":21,"exp":441000},{"level":22,"exp":484000},{"level":23,"exp":529000},{"level":24,"exp":576000},{"level":25,"exp":625000},{"level":26,"exp":676000},{"level":27,"exp":729000},{"level":28,"exp":784000},{"level":29,"exp":841000},{"level":30,"exp":900000},{"level":31,"exp":961000},{"level":32,"exp":1024000},{"level":33,"exp":1089000},{"level":34,"exp":1156000},{"level":35,"exp":1225000},{"level":36,"exp":1296000},{"level":37,"exp":1369000},{"level":38,"exp":1444000},{"level":39,"exp":1521000},{"level":40,"exp":1600000},{"level":41,"exp":1681000},{"level":42,"exp":1764000},{"level":43,"exp":1849000},{"level":44,"exp":1936000},{"level":45,"exp":2025000},{"level":46,"exp":2116000},{"level":47,"exp":2209000},{"level":48,"exp":2304000},{"level":49,"exp":2401000},{"level":50,"exp":2500000},{"level":51,"exp":2601000},{"level":52,"exp":2704000},{"level":53,"exp":2809000},{"level":54,"exp":2916000},{"level":55,"exp":3025000},{"level":56,"exp":3136000},{"level":57,"exp":3249000},{"level":58,"exp":3364000},{"level":59,"exp":3481000},{"level":60,"exp":3600000},{"level":61,"exp":3721000},{"level":62,"exp":3844000},{"level":63,"exp":3969000},{"level":64,"exp":4096000},{"level":65,"exp":4225000},{"level":66,"exp":4356000},{"level":67,"exp":4489000},{"level":68,"exp":4624000},{"level":69,"exp":4761000},{"level":70,"exp":4900000},{"level":71,"exp":5041000},{"level":72,"exp":5184000},{"level":73,"exp":5329000},{"level":74,"exp":5476000},{"level":75,"exp":5625000},{"level":76,"exp":5776000},{"level":77,"exp":5929000},{"level":78,"exp":6084000},{"level":79,"exp":6241000},{"level":80,"exp":6400000},{"level":81,"exp":6561000},{"level":82,"exp":6724000},{"level":83,"exp":6889000},{"level":84,"exp":7056000},{"level":85,"exp":7225000},{"level":86,"exp":7396000},{"level":87,"exp":7569000},{"level":88,"exp":7744000},{"level":89,"exp":7921000},{"level":90,"exp":8100000},{"level":91,"exp":8281000},{"level":92,"exp":8464000},{"level":93,"exp":8649000},{"level":94,"exp":8836000},{"level":95,"exp":9025000},{"level":96,"exp":9216000},{"level":97,"exp":9409000},{"level":98,"exp":9604000},{"level":99,"exp":9801000},{"level":100,"exp":10000000}]
|
[
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"exp": 1000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"exp": 4000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 3,
|
||||||
|
"exp": 9000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 4,
|
||||||
|
"exp": 16000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 5,
|
||||||
|
"exp": 25000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 6,
|
||||||
|
"exp": 36000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 7,
|
||||||
|
"exp": 49000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 8,
|
||||||
|
"exp": 64000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 9,
|
||||||
|
"exp": 81000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 10,
|
||||||
|
"exp": 100000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 11,
|
||||||
|
"exp": 121000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 12,
|
||||||
|
"exp": 144000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 13,
|
||||||
|
"exp": 169000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 14,
|
||||||
|
"exp": 196000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 15,
|
||||||
|
"exp": 225000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 16,
|
||||||
|
"exp": 256000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 17,
|
||||||
|
"exp": 289000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 18,
|
||||||
|
"exp": 324000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 19,
|
||||||
|
"exp": 361000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 20,
|
||||||
|
"exp": 400000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 21,
|
||||||
|
"exp": 441000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 22,
|
||||||
|
"exp": 484000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 23,
|
||||||
|
"exp": 529000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 24,
|
||||||
|
"exp": 576000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 25,
|
||||||
|
"exp": 625000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 26,
|
||||||
|
"exp": 676000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 27,
|
||||||
|
"exp": 729000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 28,
|
||||||
|
"exp": 784000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 29,
|
||||||
|
"exp": 841000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 30,
|
||||||
|
"exp": 900000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 31,
|
||||||
|
"exp": 961000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 32,
|
||||||
|
"exp": 1024000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 33,
|
||||||
|
"exp": 1089000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 34,
|
||||||
|
"exp": 1156000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 35,
|
||||||
|
"exp": 1225000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 36,
|
||||||
|
"exp": 1296000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 37,
|
||||||
|
"exp": 1369000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 38,
|
||||||
|
"exp": 1444000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 39,
|
||||||
|
"exp": 1521000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 40,
|
||||||
|
"exp": 1600000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 41,
|
||||||
|
"exp": 1681000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 42,
|
||||||
|
"exp": 1764000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 43,
|
||||||
|
"exp": 1849000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 44,
|
||||||
|
"exp": 1936000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 45,
|
||||||
|
"exp": 2025000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 46,
|
||||||
|
"exp": 2116000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 47,
|
||||||
|
"exp": 2209000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 48,
|
||||||
|
"exp": 2304000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 49,
|
||||||
|
"exp": 2401000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 50,
|
||||||
|
"exp": 2500000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 51,
|
||||||
|
"exp": 2601000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 52,
|
||||||
|
"exp": 2704000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 53,
|
||||||
|
"exp": 2809000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 54,
|
||||||
|
"exp": 2916000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 55,
|
||||||
|
"exp": 3025000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 56,
|
||||||
|
"exp": 3136000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 57,
|
||||||
|
"exp": 3249000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 58,
|
||||||
|
"exp": 3364000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 59,
|
||||||
|
"exp": 3481000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 60,
|
||||||
|
"exp": 3600000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 61,
|
||||||
|
"exp": 3721000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 62,
|
||||||
|
"exp": 3844000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 63,
|
||||||
|
"exp": 3969000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 64,
|
||||||
|
"exp": 4096000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 65,
|
||||||
|
"exp": 4225000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 66,
|
||||||
|
"exp": 4356000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 67,
|
||||||
|
"exp": 4489000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 68,
|
||||||
|
"exp": 4624000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 69,
|
||||||
|
"exp": 4761000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 70,
|
||||||
|
"exp": 4900000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 71,
|
||||||
|
"exp": 5041000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 72,
|
||||||
|
"exp": 5184000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 73,
|
||||||
|
"exp": 5329000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 74,
|
||||||
|
"exp": 5476000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 75,
|
||||||
|
"exp": 5625000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 76,
|
||||||
|
"exp": 5776000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 77,
|
||||||
|
"exp": 5929000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 78,
|
||||||
|
"exp": 6084000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 79,
|
||||||
|
"exp": 6241000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 80,
|
||||||
|
"exp": 6400000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 81,
|
||||||
|
"exp": 6561000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 82,
|
||||||
|
"exp": 6724000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 83,
|
||||||
|
"exp": 6889000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 84,
|
||||||
|
"exp": 7056000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 85,
|
||||||
|
"exp": 7225000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 86,
|
||||||
|
"exp": 7396000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 87,
|
||||||
|
"exp": 7569000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 88,
|
||||||
|
"exp": 7744000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 89,
|
||||||
|
"exp": 7921000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 90,
|
||||||
|
"exp": 8100000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 91,
|
||||||
|
"exp": 8281000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 92,
|
||||||
|
"exp": 8464000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 93,
|
||||||
|
"exp": 8649000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 94,
|
||||||
|
"exp": 8836000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 95,
|
||||||
|
"exp": 9025000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 96,
|
||||||
|
"exp": 9216000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 97,
|
||||||
|
"exp": 9409000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 98,
|
||||||
|
"exp": 9604000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 99,
|
||||||
|
"exp": 9801000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 100,
|
||||||
|
"exp": 10000000
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
"timesPerDay": 200,
|
"timesPerDay": 200,
|
||||||
"timesCanBuy": 200,
|
"timesCanBuy": 200,
|
||||||
"difficultLvl": "3001&3002&3003&3004&3005&3006&3007&3008&3009",
|
"difficultLvl": "3001&3002&3003&3004&3005&3006&3007&3008&3009",
|
||||||
"description": "内有不同难度,可获得大量铜钱"
|
"description": "护送马车到达安全地点,可以获得大量铜钱奖励"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"dailyType": 2,
|
"dailyType": 2,
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
"timesPerDay": 200,
|
"timesPerDay": 200,
|
||||||
"timesCanBuy": 200,
|
"timesCanBuy": 200,
|
||||||
"difficultLvl": "3010&3011&3012&3013&3014",
|
"difficultLvl": "3010&3011&3012&3013&3014",
|
||||||
"description": "内有不同难度,可获得大量武将经验书"
|
"description": "暂未开放,内有不同难度,可获得大量武将经验书"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"dailyType": 3,
|
"dailyType": 3,
|
||||||
@@ -21,14 +21,14 @@
|
|||||||
"timesPerDay": 200,
|
"timesPerDay": 200,
|
||||||
"timesCanBuy": 200,
|
"timesCanBuy": 200,
|
||||||
"difficultLvl": "3020&3021&3022&3023&3024",
|
"difficultLvl": "3020&3021&3022&3023&3024",
|
||||||
"description": "内有不同难度,可获得大量装备材料"
|
"description": "暂未开放,内有不同难度,可获得大量装备强化材料"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"dailyType": 4,
|
"dailyType": 4,
|
||||||
"name": "测试测试",
|
"name": "测试测试",
|
||||||
"timesPerDay": 200,
|
"timesPerDay": 200,
|
||||||
"timesCanBuy": 200,
|
"timesCanBuy": 200,
|
||||||
"difficultLvl": "3020&3021&3022&3023&3024",
|
"difficultLvl": "3031&3032&3033&3034",
|
||||||
"description": "内有不同难度,测试用"
|
"description": "暂未开放,内有不同难度,可获得大量装备精练材料"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1,21 +1,58 @@
|
|||||||
[{
|
[
|
||||||
"mpid": 1,
|
{
|
||||||
"name": "单体伤害",
|
"mpid": 1,
|
||||||
"cname": "攻击单个目标",
|
"name": "单体伤害",
|
||||||
"json": "[{\"x\":0,\"y\":0}]"
|
"cname": "攻击单个目标",
|
||||||
}, {
|
"json": "[{\"x\":0,\"y\":0}]",
|
||||||
"mpid": 2,
|
"penetration": "&"
|
||||||
"name": "近身伤害",
|
},
|
||||||
"cname": "攻击最多8个目标",
|
{
|
||||||
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1}]"
|
"mpid": 2,
|
||||||
}, {
|
"name": "近身伤害",
|
||||||
"mpid": 3,
|
"cname": "攻击最多8个目标",
|
||||||
"name": "远程伤害",
|
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1}]",
|
||||||
"cname": "攻击近中距12格",
|
"penetration": "&"
|
||||||
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2}]"
|
},
|
||||||
}, {
|
{
|
||||||
"mpid": 4,
|
"mpid": 3,
|
||||||
"name": "广域伤害",
|
"name": "远程伤害",
|
||||||
"cname": "攻击近中远距24格",
|
"cname": "攻击近中距12格",
|
||||||
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2},\n{\"x\":-2,\"y\":-1},{\"x\":2,\"y\":-1},{\"x\":-2,\"y\":1},{\"x\":2,\"y\":1},{\"x\":-1,\"y\":-2},{\"x\":1,\"y\":-2},{\"x\":-1,\"y\":2},{\"x\":1,\"y\":2},{\"x\":-3,\"y\":0},{\"x\":3,\"y\":0},{\"x\":0,\"y\":-3},{\"x\":0,\"y\":3}]"
|
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2}]",
|
||||||
}]
|
"penetration": "&"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mpid": 4,
|
||||||
|
"name": "广域伤害",
|
||||||
|
"cname": "攻击近中远距24格",
|
||||||
|
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2},\n{\"x\":-2,\"y\":-1},{\"x\":2,\"y\":-1},{\"x\":-2,\"y\":1},{\"x\":2,\"y\":1},{\"x\":-1,\"y\":-2},{\"x\":1,\"y\":-2},{\"x\":-1,\"y\":2},{\"x\":1,\"y\":2},{\"x\":-3,\"y\":0},{\"x\":3,\"y\":0},{\"x\":0,\"y\":-3},{\"x\":0,\"y\":3}]",
|
||||||
|
"penetration": "&"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mpid": 5,
|
||||||
|
"name": "近身伤害 全",
|
||||||
|
"cname": "攻击9格范围",
|
||||||
|
"json": "[{\"x\":-1,\"y\":0},{\"x\":0,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1}]",
|
||||||
|
"penetration": "&"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mpid": 6,
|
||||||
|
"name": "远程伤害 全",
|
||||||
|
"cname": "攻击近中距13格",
|
||||||
|
"json": "[{\"x\":-1,\"y\":0},{\"x\":0,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2}]",
|
||||||
|
"penetration": "&"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mpid": 7,
|
||||||
|
"name": "广域伤害 全",
|
||||||
|
"cname": "攻击近中远距25格",
|
||||||
|
"json": "[{\"x\":-1,\"y\":0},{\"x\":1,\"y\":0},{\"x\":0,\"y\":0},{\"x\":0,\"y\":-1},{\"x\":0,\"y\":1},{\"x\":-1,\"y\":-1},{\"x\":1,\"y\":-1},{\"x\":-1,\"y\":1},{\"x\":1,\"y\":1},{\"x\":-2,\"y\":0},{\"x\":2,\"y\":0},{\"x\":0,\"y\":-2},{\"x\":0,\"y\":2},\n{\"x\":-2,\"y\":-1},{\"x\":2,\"y\":-1},{\"x\":-2,\"y\":1},{\"x\":2,\"y\":1},{\"x\":-1,\"y\":-2},{\"x\":1,\"y\":-2},{\"x\":-1,\"y\":2},{\"x\":1,\"y\":2},{\"x\":-3,\"y\":0},{\"x\":3,\"y\":0},{\"x\":0,\"y\":-3},{\"x\":0,\"y\":3}]",
|
||||||
|
"penetration": "&"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mpid": 8,
|
||||||
|
"name": "横扫",
|
||||||
|
"cname": "面前三格",
|
||||||
|
"json": "[{\"x\":0,\"y\":0}]",
|
||||||
|
"penetration": "1&1"
|
||||||
|
}
|
||||||
|
]
|
||||||
292
shared/resource/jsons/dic_zyz_fashions.json
Normal file
292
shared/resource/jsons/dic_zyz_fashions.json
Normal file
@@ -0,0 +1,292 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&234",
|
||||||
|
"globalAttr": "1&2000|2&500",
|
||||||
|
"actorAttr": "3&200|4&100",
|
||||||
|
"actorId": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&235",
|
||||||
|
"globalAttr": "1&2000|2&501",
|
||||||
|
"actorAttr": "3&200|4&101",
|
||||||
|
"actorId": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&236",
|
||||||
|
"globalAttr": "1&2000|2&502",
|
||||||
|
"actorAttr": "3&200|4&102",
|
||||||
|
"actorId": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&237",
|
||||||
|
"globalAttr": "1&2000|2&503",
|
||||||
|
"actorAttr": "3&200|4&103",
|
||||||
|
"actorId": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&238",
|
||||||
|
"globalAttr": "1&2000|2&504",
|
||||||
|
"actorAttr": "3&200|4&104",
|
||||||
|
"actorId": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&239",
|
||||||
|
"globalAttr": "1&2000|2&505",
|
||||||
|
"actorAttr": "3&200|4&105",
|
||||||
|
"actorId": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&240",
|
||||||
|
"globalAttr": "1&2000|2&506",
|
||||||
|
"actorAttr": "3&200|4&106",
|
||||||
|
"actorId": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&241",
|
||||||
|
"globalAttr": "1&2000|2&507",
|
||||||
|
"actorAttr": "3&200|4&107",
|
||||||
|
"actorId": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 9,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&242",
|
||||||
|
"globalAttr": "1&2000|2&508",
|
||||||
|
"actorAttr": "3&200|4&108",
|
||||||
|
"actorId": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&243",
|
||||||
|
"globalAttr": "1&2000|2&509",
|
||||||
|
"actorAttr": "3&200|4&109",
|
||||||
|
"actorId": 7
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 11,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&244",
|
||||||
|
"globalAttr": "1&2000|2&510",
|
||||||
|
"actorAttr": "3&200|4&110",
|
||||||
|
"actorId": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 12,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&245",
|
||||||
|
"globalAttr": "1&2000|2&511",
|
||||||
|
"actorAttr": "3&200|4&111",
|
||||||
|
"actorId": 9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 13,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&246",
|
||||||
|
"globalAttr": "1&2000|2&512",
|
||||||
|
"actorAttr": "3&200|4&112",
|
||||||
|
"actorId": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 14,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&247",
|
||||||
|
"globalAttr": "1&2000|2&513",
|
||||||
|
"actorAttr": "3&200|4&113",
|
||||||
|
"actorId": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&248",
|
||||||
|
"globalAttr": "1&2000|2&514",
|
||||||
|
"actorAttr": "3&200|4&114",
|
||||||
|
"actorId": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 16,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&249",
|
||||||
|
"globalAttr": "1&2000|2&515",
|
||||||
|
"actorAttr": "3&200|4&115",
|
||||||
|
"actorId": 13
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 17,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&250",
|
||||||
|
"globalAttr": "1&2000|2&516",
|
||||||
|
"actorAttr": "3&200|4&116",
|
||||||
|
"actorId": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 18,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&251",
|
||||||
|
"globalAttr": "1&2000|2&517",
|
||||||
|
"actorAttr": "3&200|4&117",
|
||||||
|
"actorId": 15
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 19,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&252",
|
||||||
|
"globalAttr": "1&2000|2&518",
|
||||||
|
"actorAttr": "3&200|4&118",
|
||||||
|
"actorId": 16
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 20,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&253",
|
||||||
|
"globalAttr": "1&2000|2&519",
|
||||||
|
"actorAttr": "3&200|4&119",
|
||||||
|
"actorId": 17
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 21,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&254",
|
||||||
|
"globalAttr": "1&2000|2&520",
|
||||||
|
"actorAttr": "3&200|4&120",
|
||||||
|
"actorId": 18
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 22,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&255",
|
||||||
|
"globalAttr": "1&2000|2&521",
|
||||||
|
"actorAttr": "3&200|4&121",
|
||||||
|
"actorId": 19
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 23,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&256",
|
||||||
|
"globalAttr": "1&2000|2&522",
|
||||||
|
"actorAttr": "3&200|4&122",
|
||||||
|
"actorId": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 24,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&257",
|
||||||
|
"globalAttr": "1&2000|2&523",
|
||||||
|
"actorAttr": "3&200|4&123",
|
||||||
|
"actorId": 21
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 25,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&258",
|
||||||
|
"globalAttr": "1&2000|2&524",
|
||||||
|
"actorAttr": "3&200|4&124",
|
||||||
|
"actorId": 22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 26,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&259",
|
||||||
|
"globalAttr": "1&2000|2&525",
|
||||||
|
"actorAttr": "3&200|4&125",
|
||||||
|
"actorId": 23
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 27,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&260",
|
||||||
|
"globalAttr": "1&2000|2&526",
|
||||||
|
"actorAttr": "3&200|4&126",
|
||||||
|
"actorId": 24
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 28,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&261",
|
||||||
|
"globalAttr": "1&2000|2&527",
|
||||||
|
"actorAttr": "3&200|4&127",
|
||||||
|
"actorId": 25
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 29,
|
||||||
|
"rSpine": "LH_jiaxu",
|
||||||
|
"sSpine": "jiaxu",
|
||||||
|
"skill": "1&12|2&13",
|
||||||
|
"seid": "344&456&262",
|
||||||
|
"globalAttr": "1&2000|2&528",
|
||||||
|
"actorAttr": "3&200|4&128",
|
||||||
|
"actorId": 26
|
||||||
|
}
|
||||||
|
]
|
||||||
290
shared/resource/jsons/dic_zyz_friend_ship.json
Normal file
290
shared/resource/jsons/dic_zyz_friend_ship.json
Normal file
@@ -0,0 +1,290 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"shipId": 10001,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "魏武之强",
|
||||||
|
"level": 1,
|
||||||
|
"memberId": "2&3&4&5",
|
||||||
|
"attribute": "1&200|2&300",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"shipId": 10001,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "魏武之强",
|
||||||
|
"level": 2,
|
||||||
|
"memberId": "2&3&4&5",
|
||||||
|
"attribute": "1&300|2&400",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"shipId": 10001,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "魏武之强",
|
||||||
|
"level": 3,
|
||||||
|
"memberId": "2&3&4&5",
|
||||||
|
"attribute": "1&400|2&500",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"shipId": 10001,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "魏武之强",
|
||||||
|
"level": 4,
|
||||||
|
"memberId": "2&3&4&5",
|
||||||
|
"attribute": "1&600|2&700",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"shipId": 10001,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "魏武之强",
|
||||||
|
"level": 5,
|
||||||
|
"memberId": "2&3&4&5",
|
||||||
|
"attribute": "1&800|2&900",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"shipId": 10001,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "魏武之强",
|
||||||
|
"level": 6,
|
||||||
|
"memberId": "2&3&4&5",
|
||||||
|
"attribute": "1&1000|2&1000",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"shipId": 10002,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "家族之力",
|
||||||
|
"level": 1,
|
||||||
|
"memberId": "6&7",
|
||||||
|
"attribute": "1&200|2&300",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"shipId": 10002,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "家族之力",
|
||||||
|
"level": 2,
|
||||||
|
"memberId": "6&7",
|
||||||
|
"attribute": "1&300|2&400",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 9,
|
||||||
|
"shipId": 10002,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "家族之力",
|
||||||
|
"level": 3,
|
||||||
|
"memberId": "6&7",
|
||||||
|
"attribute": "1&400|2&500",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"shipId": 10002,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "家族之力",
|
||||||
|
"level": 4,
|
||||||
|
"memberId": "6&7",
|
||||||
|
"attribute": "1&600|2&700",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 11,
|
||||||
|
"shipId": 10002,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "家族之力",
|
||||||
|
"level": 5,
|
||||||
|
"memberId": "6&7",
|
||||||
|
"attribute": "1&800|2&900",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 12,
|
||||||
|
"shipId": 10002,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "家族之力",
|
||||||
|
"level": 6,
|
||||||
|
"memberId": "6&7",
|
||||||
|
"attribute": "1&1000|2&1000",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 13,
|
||||||
|
"shipId": 10003,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "曹氏双雄",
|
||||||
|
"level": 1,
|
||||||
|
"memberId": "8&",
|
||||||
|
"attribute": "1&200|2&300",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 14,
|
||||||
|
"shipId": 10003,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "曹氏双雄",
|
||||||
|
"level": 2,
|
||||||
|
"memberId": "8&",
|
||||||
|
"attribute": "1&300|2&400",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"shipId": 10003,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "曹氏双雄",
|
||||||
|
"level": 3,
|
||||||
|
"memberId": "8&",
|
||||||
|
"attribute": "1&400|2&500",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 16,
|
||||||
|
"shipId": 10003,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "曹氏双雄",
|
||||||
|
"level": 4,
|
||||||
|
"memberId": "8&",
|
||||||
|
"attribute": "1&600|2&700",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 17,
|
||||||
|
"shipId": 10003,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "曹氏双雄",
|
||||||
|
"level": 5,
|
||||||
|
"memberId": "8&",
|
||||||
|
"attribute": "1&800|2&900",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 18,
|
||||||
|
"shipId": 10003,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "曹氏双雄",
|
||||||
|
"level": 6,
|
||||||
|
"memberId": "8&",
|
||||||
|
"attribute": "1&1000|2&1000",
|
||||||
|
"costCoin": 5000,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
52
shared/resource/jsons/dic_zyz_friend_ship_level.json
Normal file
52
shared/resource/jsons/dic_zyz_friend_ship_level.json
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"exp": 100,
|
||||||
|
"add": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"exp": 200,
|
||||||
|
"add": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 3,
|
||||||
|
"exp": 300,
|
||||||
|
"add": 15
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 4,
|
||||||
|
"exp": 400,
|
||||||
|
"add": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 5,
|
||||||
|
"exp": 500,
|
||||||
|
"add": 25
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 6,
|
||||||
|
"exp": 600,
|
||||||
|
"add": 30
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 7,
|
||||||
|
"exp": 700,
|
||||||
|
"add": 35
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 8,
|
||||||
|
"exp": 800,
|
||||||
|
"add": 40
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 9,
|
||||||
|
"exp": 900,
|
||||||
|
"add": 45
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 10,
|
||||||
|
"exp": 1000,
|
||||||
|
"add": 50
|
||||||
|
}
|
||||||
|
]
|
||||||
338
shared/resource/jsons/dic_zyz_gacha.json
Normal file
338
shared/resource/jsons/dic_zyz_gacha.json
Normal file
@@ -0,0 +1,338 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id ": 1,
|
||||||
|
"actorId": 1,
|
||||||
|
"name": "曹操",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 2,
|
||||||
|
"actorId": 2,
|
||||||
|
"name": "夏侯惇",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 3,
|
||||||
|
"actorId": 3,
|
||||||
|
"name": "张辽",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 4,
|
||||||
|
"actorId": 4,
|
||||||
|
"name": "夏侯渊",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 5,
|
||||||
|
"actorId": 5,
|
||||||
|
"name": "郭嘉",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 6,
|
||||||
|
"actorId": 6,
|
||||||
|
"name": "司马懿",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 7,
|
||||||
|
"actorId": 7,
|
||||||
|
"name": "典韦",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 8,
|
||||||
|
"actorId": 8,
|
||||||
|
"name": "庞德",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 9,
|
||||||
|
"actorId": 9,
|
||||||
|
"name": "邓艾",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 10,
|
||||||
|
"actorId": 10,
|
||||||
|
"name": "徐晃",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 11,
|
||||||
|
"actorId": 11,
|
||||||
|
"name": "曹仁",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 12,
|
||||||
|
"actorId": 12,
|
||||||
|
"name": "李典",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 13,
|
||||||
|
"actorId": 13,
|
||||||
|
"name": "蔡琰",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 14,
|
||||||
|
"actorId": 14,
|
||||||
|
"name": "贾诩",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 15,
|
||||||
|
"actorId": 15,
|
||||||
|
"name": "许褚",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 16,
|
||||||
|
"actorId": 16,
|
||||||
|
"name": "乐进",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 17,
|
||||||
|
"actorId": 17,
|
||||||
|
"name": "张飞",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 18,
|
||||||
|
"actorId": 18,
|
||||||
|
"name": "关羽",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 19,
|
||||||
|
"actorId": 19,
|
||||||
|
"name": "赵云",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 20,
|
||||||
|
"actorId": 20,
|
||||||
|
"name": "刘备",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 21,
|
||||||
|
"actorId": 21,
|
||||||
|
"name": "黄忠",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 22,
|
||||||
|
"actorId": 22,
|
||||||
|
"name": "诸葛亮",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 23,
|
||||||
|
"actorId": 23,
|
||||||
|
"name": "庞统",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 24,
|
||||||
|
"actorId": 24,
|
||||||
|
"name": "魏延",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 25,
|
||||||
|
"actorId": 25,
|
||||||
|
"name": "陈到",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 26,
|
||||||
|
"actorId": 26,
|
||||||
|
"name": "关银屏",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 27,
|
||||||
|
"actorId": 27,
|
||||||
|
"name": "马云禄",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 28,
|
||||||
|
"actorId": 28,
|
||||||
|
"name": "马良",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 29,
|
||||||
|
"actorId": 29,
|
||||||
|
"name": "黄月英",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 30,
|
||||||
|
"actorId": 30,
|
||||||
|
"name": "王平",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 31,
|
||||||
|
"actorId": 31,
|
||||||
|
"name": "孙乾",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 32,
|
||||||
|
"actorId": 32,
|
||||||
|
"name": "周泰",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 33,
|
||||||
|
"actorId": 33,
|
||||||
|
"name": "孙策",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 34,
|
||||||
|
"actorId": 34,
|
||||||
|
"name": "周瑜",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 35,
|
||||||
|
"actorId": 35,
|
||||||
|
"name": "太史慈",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 36,
|
||||||
|
"actorId": 36,
|
||||||
|
"name": "孙权",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 37,
|
||||||
|
"actorId": 37,
|
||||||
|
"name": "甘宁",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 38,
|
||||||
|
"actorId": 38,
|
||||||
|
"name": "孙尚香",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 39,
|
||||||
|
"actorId": 39,
|
||||||
|
"name": "陆逊",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 40,
|
||||||
|
"actorId": 40,
|
||||||
|
"name": "小乔",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 41,
|
||||||
|
"actorId": 41,
|
||||||
|
"name": "大乔",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 42,
|
||||||
|
"actorId": 42,
|
||||||
|
"name": "步练师",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 43,
|
||||||
|
"actorId": 43,
|
||||||
|
"name": "左慈",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 44,
|
||||||
|
"actorId": 44,
|
||||||
|
"name": "吕布",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 45,
|
||||||
|
"actorId": 45,
|
||||||
|
"name": "张任",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 46,
|
||||||
|
"actorId": 46,
|
||||||
|
"name": "华佗",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 47,
|
||||||
|
"actorId": 47,
|
||||||
|
"name": "张角",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 48,
|
||||||
|
"actorId": 48,
|
||||||
|
"name": "南华",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 49,
|
||||||
|
"actorId": 49,
|
||||||
|
"name": "高顺",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 50,
|
||||||
|
"actorId": 50,
|
||||||
|
"name": "麹义",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 51,
|
||||||
|
"actorId": 51,
|
||||||
|
"name": "李儒",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 52,
|
||||||
|
"actorId": 52,
|
||||||
|
"name": "庞舞",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 53,
|
||||||
|
"actorId": 53,
|
||||||
|
"name": "夏侯轻衣",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 54,
|
||||||
|
"actorId": 54,
|
||||||
|
"name": "文丑",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 55,
|
||||||
|
"actorId": 55,
|
||||||
|
"name": "颜良",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id ": 56,
|
||||||
|
"actorId": 56,
|
||||||
|
"name": "貂蝉",
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -23,7 +23,7 @@
|
|||||||
"heroInUI": "1&1008|1&1045",
|
"heroInUI": "1&1008|1&1045",
|
||||||
"detailUIBg": "1000_1",
|
"detailUIBg": "1000_1",
|
||||||
"recommendedPower": 10009,
|
"recommendedPower": 10009,
|
||||||
"previousGk": 106,
|
"previousGk": 125,
|
||||||
"relatedEliteGk": 9001,
|
"relatedEliteGk": 9001,
|
||||||
"movePoint": 31
|
"movePoint": 31
|
||||||
},
|
},
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
"heroInUI": "1&1008|1&1046",
|
"heroInUI": "1&1008|1&1046",
|
||||||
"detailUIBg": "1000_2",
|
"detailUIBg": "1000_2",
|
||||||
"recommendedPower": 10010,
|
"recommendedPower": 10010,
|
||||||
"previousGk": 107,
|
"previousGk": 1001,
|
||||||
"relatedEliteGk": 9002,
|
"relatedEliteGk": 9002,
|
||||||
"movePoint": 32
|
"movePoint": 32
|
||||||
},
|
},
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
"heroInUI": "1&1008|1&1047",
|
"heroInUI": "1&1008|1&1047",
|
||||||
"detailUIBg": "1000_3",
|
"detailUIBg": "1000_3",
|
||||||
"recommendedPower": 10011,
|
"recommendedPower": 10011,
|
||||||
"previousGk": 108,
|
"previousGk": 1002,
|
||||||
"relatedEliteGk": 9003,
|
"relatedEliteGk": 9003,
|
||||||
"movePoint": 33
|
"movePoint": 33
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -288,7 +288,7 @@
|
|||||||
"conditionReward": "16004&1&0|31002&50&0|31002&100&1",
|
"conditionReward": "16004&1&0|31002&50&0|31002&100&1",
|
||||||
"RandomReward": "17002&2&1",
|
"RandomReward": "17002&2&1",
|
||||||
"warType": 1,
|
"warType": 1,
|
||||||
"gk_name": "第一章&阴兵借道",
|
"gk_name": "第一章&不明乱军",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -316,7 +316,7 @@
|
|||||||
"conditionReward": "16004&1&0|31002&50&0|31002&100&1",
|
"conditionReward": "16004&1&0|31002&50&0|31002&100&1",
|
||||||
"RandomReward": "17002&2&1",
|
"RandomReward": "17002&2&1",
|
||||||
"warType": 1,
|
"warType": 1,
|
||||||
"gk_name": "第一章&拦路官军",
|
"gk_name": "第一章&拦路乱军",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -372,7 +372,7 @@
|
|||||||
"conditionReward": "16004&1&0|31002&50&0|31002&100&1",
|
"conditionReward": "16004&1&0|31002&50&0|31002&100&1",
|
||||||
"RandomReward": "17002&2&1",
|
"RandomReward": "17002&2&1",
|
||||||
"warType": 1,
|
"warType": 1,
|
||||||
"gk_name": "第一章&拦路官军",
|
"gk_name": "第一章&拦路袁军",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -400,7 +400,7 @@
|
|||||||
"conditionReward": "16004&1&0|31002&50&0|31002&100&1",
|
"conditionReward": "16004&1&0|31002&50&0|31002&100&1",
|
||||||
"RandomReward": "17002&2&1",
|
"RandomReward": "17002&2&1",
|
||||||
"warType": 1,
|
"warType": 1,
|
||||||
"gk_name": "第一章&拦路官军",
|
"gk_name": "第一章&拦路袁军",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -428,7 +428,7 @@
|
|||||||
"conditionReward": "16004&1&0|31002&50&0|31002&100&1",
|
"conditionReward": "16004&1&0|31002&50&0|31002&100&1",
|
||||||
"RandomReward": "17002&2&1",
|
"RandomReward": "17002&2&1",
|
||||||
"warType": 1,
|
"warType": 1,
|
||||||
"gk_name": "第一章&拦路官军",
|
"gk_name": "第一章&拦路袁军",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
12
shared/resource/jsons/dic_zyz_hero_quality_up.json
Normal file
12
shared/resource/jsons/dic_zyz_hero_quality_up.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"quality": 1,
|
||||||
|
"fragmentNum": 200
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"quality": 2,
|
||||||
|
"fragmentNum": 300
|
||||||
|
}
|
||||||
|
]
|
||||||
182
shared/resource/jsons/dic_zyz_hero_star.json
Normal file
182
shared/resource/jsons/dic_zyz_hero_star.json
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"quality": 1,
|
||||||
|
"star": 1,
|
||||||
|
"advanceUpFragmentNum": 5,
|
||||||
|
"hp_up": 1,
|
||||||
|
"atk_up": 2,
|
||||||
|
"def_up": 3,
|
||||||
|
"mdef_up": 4,
|
||||||
|
"agi_up": 5,
|
||||||
|
"luk_up": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"quality": 1,
|
||||||
|
"star": 2,
|
||||||
|
"advanceUpFragmentNum": 10,
|
||||||
|
"hp_up": 2,
|
||||||
|
"atk_up": 3,
|
||||||
|
"def_up": 4,
|
||||||
|
"mdef_up": 5,
|
||||||
|
"agi_up": 6,
|
||||||
|
"luk_up": 7
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"quality": 1,
|
||||||
|
"star": 3,
|
||||||
|
"advanceUpFragmentNum": 10,
|
||||||
|
"hp_up": 3,
|
||||||
|
"atk_up": 4,
|
||||||
|
"def_up": 5,
|
||||||
|
"mdef_up": 6,
|
||||||
|
"agi_up": 7,
|
||||||
|
"luk_up": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"quality": 1,
|
||||||
|
"star": 4,
|
||||||
|
"advanceUpFragmentNum": 10,
|
||||||
|
"hp_up": 4,
|
||||||
|
"atk_up": 5,
|
||||||
|
"def_up": 6,
|
||||||
|
"mdef_up": 7,
|
||||||
|
"agi_up": 8,
|
||||||
|
"luk_up": 9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"quality": 1,
|
||||||
|
"star": 5,
|
||||||
|
"advanceUpFragmentNum": 20,
|
||||||
|
"hp_up": 5,
|
||||||
|
"atk_up": 6,
|
||||||
|
"def_up": 7,
|
||||||
|
"mdef_up": 8,
|
||||||
|
"agi_up": 9,
|
||||||
|
"luk_up": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"quality": 2,
|
||||||
|
"star": 1,
|
||||||
|
"advanceUpFragmentNum": 10,
|
||||||
|
"hp_up": 7,
|
||||||
|
"atk_up": 8,
|
||||||
|
"def_up": 9,
|
||||||
|
"mdef_up": 10,
|
||||||
|
"agi_up": 11,
|
||||||
|
"luk_up": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"quality": 2,
|
||||||
|
"star": 2,
|
||||||
|
"advanceUpFragmentNum": 20,
|
||||||
|
"hp_up": 8,
|
||||||
|
"atk_up": 9,
|
||||||
|
"def_up": 10,
|
||||||
|
"mdef_up": 11,
|
||||||
|
"agi_up": 12,
|
||||||
|
"luk_up": 13
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"quality": 2,
|
||||||
|
"star": 3,
|
||||||
|
"advanceUpFragmentNum": 20,
|
||||||
|
"hp_up": 9,
|
||||||
|
"atk_up": 10,
|
||||||
|
"def_up": 11,
|
||||||
|
"mdef_up": 12,
|
||||||
|
"agi_up": 13,
|
||||||
|
"luk_up": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 9,
|
||||||
|
"quality": 2,
|
||||||
|
"star": 4,
|
||||||
|
"advanceUpFragmentNum": 20,
|
||||||
|
"hp_up": 10,
|
||||||
|
"atk_up": 11,
|
||||||
|
"def_up": 12,
|
||||||
|
"mdef_up": 13,
|
||||||
|
"agi_up": 14,
|
||||||
|
"luk_up": 15
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"quality": 2,
|
||||||
|
"star": 5,
|
||||||
|
"advanceUpFragmentNum": 30,
|
||||||
|
"hp_up": 11,
|
||||||
|
"atk_up": 12,
|
||||||
|
"def_up": 13,
|
||||||
|
"mdef_up": 14,
|
||||||
|
"agi_up": 15,
|
||||||
|
"luk_up": 16
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 11,
|
||||||
|
"quality": 3,
|
||||||
|
"star": 1,
|
||||||
|
"advanceUpFragmentNum": 20,
|
||||||
|
"hp_up": 13,
|
||||||
|
"atk_up": 14,
|
||||||
|
"def_up": 15,
|
||||||
|
"mdef_up": 16,
|
||||||
|
"agi_up": 17,
|
||||||
|
"luk_up": 18
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 12,
|
||||||
|
"quality": 3,
|
||||||
|
"star": 2,
|
||||||
|
"advanceUpFragmentNum": 40,
|
||||||
|
"hp_up": 14,
|
||||||
|
"atk_up": 15,
|
||||||
|
"def_up": 16,
|
||||||
|
"mdef_up": 17,
|
||||||
|
"agi_up": 18,
|
||||||
|
"luk_up": 19
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 13,
|
||||||
|
"quality": 3,
|
||||||
|
"star": 3,
|
||||||
|
"advanceUpFragmentNum": 40,
|
||||||
|
"hp_up": 15,
|
||||||
|
"atk_up": 16,
|
||||||
|
"def_up": 17,
|
||||||
|
"mdef_up": 18,
|
||||||
|
"agi_up": 19,
|
||||||
|
"luk_up": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 14,
|
||||||
|
"quality": 3,
|
||||||
|
"star": 4,
|
||||||
|
"advanceUpFragmentNum": 40,
|
||||||
|
"hp_up": 16,
|
||||||
|
"atk_up": 17,
|
||||||
|
"def_up": 18,
|
||||||
|
"mdef_up": 19,
|
||||||
|
"agi_up": 20,
|
||||||
|
"luk_up": 21
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"quality": 3,
|
||||||
|
"star": 5,
|
||||||
|
"advanceUpFragmentNum": 50,
|
||||||
|
"hp_up": 17,
|
||||||
|
"atk_up": 18,
|
||||||
|
"def_up": 19,
|
||||||
|
"mdef_up": 20,
|
||||||
|
"agi_up": 21,
|
||||||
|
"luk_up": 22
|
||||||
|
}
|
||||||
|
]
|
||||||
398
shared/resource/jsons/dic_zyz_hero_wake.json
Normal file
398
shared/resource/jsons/dic_zyz_hero_wake.json
Normal file
@@ -0,0 +1,398 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"quality": 1,
|
||||||
|
"star": 0,
|
||||||
|
"fragmentNum": 240,
|
||||||
|
"consume": "17001&3",
|
||||||
|
"hp_up": 21,
|
||||||
|
"atk_up": 22,
|
||||||
|
"def_up": 23,
|
||||||
|
"mdef_up": 24,
|
||||||
|
"agi_up": 25,
|
||||||
|
"luk_up": 26,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"quality": 1,
|
||||||
|
"star": 1,
|
||||||
|
"fragmentNum": 20,
|
||||||
|
"consume": "17001&1",
|
||||||
|
"hp_up": 22,
|
||||||
|
"atk_up": 23,
|
||||||
|
"def_up": 24,
|
||||||
|
"mdef_up": 25,
|
||||||
|
"agi_up": 26,
|
||||||
|
"luk_up": 27,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"quality": 1,
|
||||||
|
"star": 2,
|
||||||
|
"fragmentNum": 20,
|
||||||
|
"consume": "17001&1",
|
||||||
|
"hp_up": 23,
|
||||||
|
"atk_up": 24,
|
||||||
|
"def_up": 25,
|
||||||
|
"mdef_up": 26,
|
||||||
|
"agi_up": 27,
|
||||||
|
"luk_up": 28,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"quality": 1,
|
||||||
|
"star": 3,
|
||||||
|
"fragmentNum": 20,
|
||||||
|
"consume": "17001&1",
|
||||||
|
"hp_up": 24,
|
||||||
|
"atk_up": 25,
|
||||||
|
"def_up": 26,
|
||||||
|
"mdef_up": 27,
|
||||||
|
"agi_up": 28,
|
||||||
|
"luk_up": 29,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"quality": 1,
|
||||||
|
"star": 4,
|
||||||
|
"fragmentNum": 30,
|
||||||
|
"consume": "17001&3",
|
||||||
|
"hp_up": 25,
|
||||||
|
"atk_up": 26,
|
||||||
|
"def_up": 27,
|
||||||
|
"mdef_up": 28,
|
||||||
|
"agi_up": 29,
|
||||||
|
"luk_up": 30,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"quality": 1,
|
||||||
|
"star": 5,
|
||||||
|
"fragmentNum": 30,
|
||||||
|
"consume": "17001&3",
|
||||||
|
"hp_up": 26,
|
||||||
|
"atk_up": 27,
|
||||||
|
"def_up": 28,
|
||||||
|
"mdef_up": 29,
|
||||||
|
"agi_up": 30,
|
||||||
|
"luk_up": 31,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"quality": 2,
|
||||||
|
"star": 0,
|
||||||
|
"fragmentNum": 200,
|
||||||
|
"consume": "17001&3",
|
||||||
|
"hp_up": 28,
|
||||||
|
"atk_up": 29,
|
||||||
|
"def_up": 30,
|
||||||
|
"mdef_up": 31,
|
||||||
|
"agi_up": 32,
|
||||||
|
"luk_up": 33,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"quality": 2,
|
||||||
|
"star": 1,
|
||||||
|
"fragmentNum": 15,
|
||||||
|
"consume": "17001&1",
|
||||||
|
"hp_up": 29,
|
||||||
|
"atk_up": 30,
|
||||||
|
"def_up": 31,
|
||||||
|
"mdef_up": 32,
|
||||||
|
"agi_up": 33,
|
||||||
|
"luk_up": 34,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 9,
|
||||||
|
"quality": 2,
|
||||||
|
"star": 2,
|
||||||
|
"fragmentNum": 15,
|
||||||
|
"consume": "17001&1",
|
||||||
|
"hp_up": 30,
|
||||||
|
"atk_up": 31,
|
||||||
|
"def_up": 32,
|
||||||
|
"mdef_up": 33,
|
||||||
|
"agi_up": 34,
|
||||||
|
"luk_up": 35,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"quality": 2,
|
||||||
|
"star": 3,
|
||||||
|
"fragmentNum": 15,
|
||||||
|
"consume": "17001&1",
|
||||||
|
"hp_up": 31,
|
||||||
|
"atk_up": 32,
|
||||||
|
"def_up": 33,
|
||||||
|
"mdef_up": 34,
|
||||||
|
"agi_up": 35,
|
||||||
|
"luk_up": 36,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 11,
|
||||||
|
"quality": 2,
|
||||||
|
"star": 4,
|
||||||
|
"fragmentNum": 25,
|
||||||
|
"consume": "17001&3",
|
||||||
|
"hp_up": 32,
|
||||||
|
"atk_up": 33,
|
||||||
|
"def_up": 34,
|
||||||
|
"mdef_up": 35,
|
||||||
|
"agi_up": 36,
|
||||||
|
"luk_up": 37,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 12,
|
||||||
|
"quality": 2,
|
||||||
|
"star": 5,
|
||||||
|
"fragmentNum": 25,
|
||||||
|
"consume": "17001&3",
|
||||||
|
"hp_up": 33,
|
||||||
|
"atk_up": 34,
|
||||||
|
"def_up": 35,
|
||||||
|
"mdef_up": 36,
|
||||||
|
"agi_up": 37,
|
||||||
|
"luk_up": 38,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 13,
|
||||||
|
"quality": 3,
|
||||||
|
"star": 0,
|
||||||
|
"fragmentNum": 180,
|
||||||
|
"consume": "17001&3",
|
||||||
|
"hp_up": 35,
|
||||||
|
"atk_up": 36,
|
||||||
|
"def_up": 37,
|
||||||
|
"mdef_up": 38,
|
||||||
|
"agi_up": 39,
|
||||||
|
"luk_up": 40,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 14,
|
||||||
|
"quality": 3,
|
||||||
|
"star": 1,
|
||||||
|
"fragmentNum": 15,
|
||||||
|
"consume": "17001&1",
|
||||||
|
"hp_up": 36,
|
||||||
|
"atk_up": 37,
|
||||||
|
"def_up": 38,
|
||||||
|
"mdef_up": 39,
|
||||||
|
"agi_up": 40,
|
||||||
|
"luk_up": 41,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"quality": 3,
|
||||||
|
"star": 2,
|
||||||
|
"fragmentNum": 15,
|
||||||
|
"consume": "17001&1",
|
||||||
|
"hp_up": 37,
|
||||||
|
"atk_up": 38,
|
||||||
|
"def_up": 39,
|
||||||
|
"mdef_up": 40,
|
||||||
|
"agi_up": 41,
|
||||||
|
"luk_up": 42,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 16,
|
||||||
|
"quality": 3,
|
||||||
|
"star": 3,
|
||||||
|
"fragmentNum": 15,
|
||||||
|
"consume": "17001&1",
|
||||||
|
"hp_up": 38,
|
||||||
|
"atk_up": 39,
|
||||||
|
"def_up": 40,
|
||||||
|
"mdef_up": 41,
|
||||||
|
"agi_up": 42,
|
||||||
|
"luk_up": 43,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 17,
|
||||||
|
"quality": 3,
|
||||||
|
"star": 4,
|
||||||
|
"fragmentNum": 20,
|
||||||
|
"consume": "17001&3",
|
||||||
|
"hp_up": 39,
|
||||||
|
"atk_up": 40,
|
||||||
|
"def_up": 41,
|
||||||
|
"mdef_up": 42,
|
||||||
|
"agi_up": 43,
|
||||||
|
"luk_up": 44,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 18,
|
||||||
|
"quality": 3,
|
||||||
|
"star": 5,
|
||||||
|
"fragmentNum": 20,
|
||||||
|
"consume": "17001&3",
|
||||||
|
"hp_up": 40,
|
||||||
|
"atk_up": 41,
|
||||||
|
"def_up": 42,
|
||||||
|
"mdef_up": 43,
|
||||||
|
"agi_up": 44,
|
||||||
|
"luk_up": 45,
|
||||||
|
"__EMPTY": 0,
|
||||||
|
"__EMPTY_1": 0,
|
||||||
|
"__EMPTY_2": 0,
|
||||||
|
"__EMPTY_3": 0,
|
||||||
|
"__EMPTY_4": 0,
|
||||||
|
"__EMPTY_5": 0,
|
||||||
|
"__EMPTY_6": 0,
|
||||||
|
"__EMPTY_7": 0,
|
||||||
|
"__EMPTY_8": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -322,5 +322,41 @@
|
|||||||
"32": 255,
|
"32": 255,
|
||||||
"33": 2,
|
"33": 2,
|
||||||
"id": 9
|
"id": 9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": 1,
|
||||||
|
"2": 1,
|
||||||
|
"3": 2,
|
||||||
|
"4": 2,
|
||||||
|
"5": 3,
|
||||||
|
"6": 255,
|
||||||
|
"7": 2,
|
||||||
|
"8": 2,
|
||||||
|
"9": 1,
|
||||||
|
"10": 2,
|
||||||
|
"11": 1,
|
||||||
|
"12": 2,
|
||||||
|
"13": 255,
|
||||||
|
"14": 2,
|
||||||
|
"15": 255,
|
||||||
|
"16": 255,
|
||||||
|
"17": 1,
|
||||||
|
"18": 255,
|
||||||
|
"19": 1,
|
||||||
|
"20": 1,
|
||||||
|
"21": 2,
|
||||||
|
"22": 2,
|
||||||
|
"23": 2,
|
||||||
|
"24": 3,
|
||||||
|
"25": 2,
|
||||||
|
"26": 255,
|
||||||
|
"27": 255,
|
||||||
|
"28": 255,
|
||||||
|
"29": 1,
|
||||||
|
"30": 255,
|
||||||
|
"31": 1,
|
||||||
|
"32": 255,
|
||||||
|
"33": 3,
|
||||||
|
"id": 10
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1 +1,402 @@
|
|||||||
[{"level":1,"exp":100},{"level":2,"exp":400},{"level":3,"exp":900},{"level":4,"exp":1600},{"level":5,"exp":2500},{"level":6,"exp":3600},{"level":7,"exp":4900},{"level":8,"exp":6400},{"level":9,"exp":8100},{"level":10,"exp":10000},{"level":11,"exp":12100},{"level":12,"exp":14400},{"level":13,"exp":16900},{"level":14,"exp":19600},{"level":15,"exp":22500},{"level":16,"exp":25600},{"level":17,"exp":28900},{"level":18,"exp":32400},{"level":19,"exp":36100},{"level":20,"exp":40000},{"level":21,"exp":44100},{"level":22,"exp":48400},{"level":23,"exp":52900},{"level":24,"exp":57600},{"level":25,"exp":62500},{"level":26,"exp":67600},{"level":27,"exp":72900},{"level":28,"exp":78400},{"level":29,"exp":84100},{"level":30,"exp":90000},{"level":31,"exp":96100},{"level":32,"exp":102400},{"level":33,"exp":108900},{"level":34,"exp":115600},{"level":35,"exp":122500},{"level":36,"exp":129600},{"level":37,"exp":136900},{"level":38,"exp":144400},{"level":39,"exp":152100},{"level":40,"exp":160000},{"level":41,"exp":168100},{"level":42,"exp":176400},{"level":43,"exp":184900},{"level":44,"exp":193600},{"level":45,"exp":202500},{"level":46,"exp":211600},{"level":47,"exp":220900},{"level":48,"exp":230400},{"level":49,"exp":240100},{"level":50,"exp":250000},{"level":51,"exp":260100},{"level":52,"exp":270400},{"level":53,"exp":280900},{"level":54,"exp":291600},{"level":55,"exp":302500},{"level":56,"exp":313600},{"level":57,"exp":324900},{"level":58,"exp":336400},{"level":59,"exp":348100},{"level":60,"exp":360000},{"level":61,"exp":372100},{"level":62,"exp":384400},{"level":63,"exp":396900},{"level":64,"exp":409600},{"level":65,"exp":422500},{"level":66,"exp":435600},{"level":67,"exp":448900},{"level":68,"exp":462400},{"level":69,"exp":476100},{"level":70,"exp":490000},{"level":71,"exp":504100},{"level":72,"exp":518400},{"level":73,"exp":532900},{"level":74,"exp":547600},{"level":75,"exp":562500},{"level":76,"exp":577600},{"level":77,"exp":592900},{"level":78,"exp":608400},{"level":79,"exp":624100},{"level":80,"exp":640000},{"level":81,"exp":656100},{"level":82,"exp":672400},{"level":83,"exp":688900},{"level":84,"exp":705600},{"level":85,"exp":722500},{"level":86,"exp":739600},{"level":87,"exp":756900},{"level":88,"exp":774400},{"level":89,"exp":792100},{"level":90,"exp":810000},{"level":91,"exp":828100},{"level":92,"exp":846400},{"level":93,"exp":864900},{"level":94,"exp":883600},{"level":95,"exp":902500},{"level":96,"exp":921600},{"level":97,"exp":940900},{"level":98,"exp":960400},{"level":99,"exp":980100},{"level":100,"exp":1000000}]
|
[
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"exp": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"exp": 400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 3,
|
||||||
|
"exp": 900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 4,
|
||||||
|
"exp": 1600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 5,
|
||||||
|
"exp": 2500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 6,
|
||||||
|
"exp": 3600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 7,
|
||||||
|
"exp": 4900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 8,
|
||||||
|
"exp": 6400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 9,
|
||||||
|
"exp": 8100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 10,
|
||||||
|
"exp": 10000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 11,
|
||||||
|
"exp": 12100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 12,
|
||||||
|
"exp": 14400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 13,
|
||||||
|
"exp": 16900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 14,
|
||||||
|
"exp": 19600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 15,
|
||||||
|
"exp": 22500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 16,
|
||||||
|
"exp": 25600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 17,
|
||||||
|
"exp": 28900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 18,
|
||||||
|
"exp": 32400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 19,
|
||||||
|
"exp": 36100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 20,
|
||||||
|
"exp": 40000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 21,
|
||||||
|
"exp": 44100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 22,
|
||||||
|
"exp": 48400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 23,
|
||||||
|
"exp": 52900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 24,
|
||||||
|
"exp": 57600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 25,
|
||||||
|
"exp": 62500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 26,
|
||||||
|
"exp": 67600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 27,
|
||||||
|
"exp": 72900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 28,
|
||||||
|
"exp": 78400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 29,
|
||||||
|
"exp": 84100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 30,
|
||||||
|
"exp": 90000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 31,
|
||||||
|
"exp": 96100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 32,
|
||||||
|
"exp": 102400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 33,
|
||||||
|
"exp": 108900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 34,
|
||||||
|
"exp": 115600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 35,
|
||||||
|
"exp": 122500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 36,
|
||||||
|
"exp": 129600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 37,
|
||||||
|
"exp": 136900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 38,
|
||||||
|
"exp": 144400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 39,
|
||||||
|
"exp": 152100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 40,
|
||||||
|
"exp": 160000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 41,
|
||||||
|
"exp": 168100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 42,
|
||||||
|
"exp": 176400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 43,
|
||||||
|
"exp": 184900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 44,
|
||||||
|
"exp": 193600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 45,
|
||||||
|
"exp": 202500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 46,
|
||||||
|
"exp": 211600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 47,
|
||||||
|
"exp": 220900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 48,
|
||||||
|
"exp": 230400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 49,
|
||||||
|
"exp": 240100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 50,
|
||||||
|
"exp": 250000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 51,
|
||||||
|
"exp": 260100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 52,
|
||||||
|
"exp": 270400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 53,
|
||||||
|
"exp": 280900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 54,
|
||||||
|
"exp": 291600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 55,
|
||||||
|
"exp": 302500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 56,
|
||||||
|
"exp": 313600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 57,
|
||||||
|
"exp": 324900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 58,
|
||||||
|
"exp": 336400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 59,
|
||||||
|
"exp": 348100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 60,
|
||||||
|
"exp": 360000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 61,
|
||||||
|
"exp": 372100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 62,
|
||||||
|
"exp": 384400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 63,
|
||||||
|
"exp": 396900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 64,
|
||||||
|
"exp": 409600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 65,
|
||||||
|
"exp": 422500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 66,
|
||||||
|
"exp": 435600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 67,
|
||||||
|
"exp": 448900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 68,
|
||||||
|
"exp": 462400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 69,
|
||||||
|
"exp": 476100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 70,
|
||||||
|
"exp": 490000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 71,
|
||||||
|
"exp": 504100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 72,
|
||||||
|
"exp": 518400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 73,
|
||||||
|
"exp": 532900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 74,
|
||||||
|
"exp": 547600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 75,
|
||||||
|
"exp": 562500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 76,
|
||||||
|
"exp": 577600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 77,
|
||||||
|
"exp": 592900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 78,
|
||||||
|
"exp": 608400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 79,
|
||||||
|
"exp": 624100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 80,
|
||||||
|
"exp": 640000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 81,
|
||||||
|
"exp": 656100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 82,
|
||||||
|
"exp": 672400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 83,
|
||||||
|
"exp": 688900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 84,
|
||||||
|
"exp": 705600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 85,
|
||||||
|
"exp": 722500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 86,
|
||||||
|
"exp": 739600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 87,
|
||||||
|
"exp": 756900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 88,
|
||||||
|
"exp": 774400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 89,
|
||||||
|
"exp": 792100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 90,
|
||||||
|
"exp": 810000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 91,
|
||||||
|
"exp": 828100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 92,
|
||||||
|
"exp": 846400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 93,
|
||||||
|
"exp": 864900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 94,
|
||||||
|
"exp": 883600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 95,
|
||||||
|
"exp": 902500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 96,
|
||||||
|
"exp": 921600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 97,
|
||||||
|
"exp": 940900
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 98,
|
||||||
|
"exp": 960400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 99,
|
||||||
|
"exp": 980100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 100,
|
||||||
|
"exp": 1000000
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
"pointId": 6,
|
"pointId": 6,
|
||||||
"position": "-558&1561",
|
"position": "-558&1561",
|
||||||
"previousPoint": "5&",
|
"previousPoint": "5&",
|
||||||
"wayPoints": "&",
|
"wayPoints": "-506&1647",
|
||||||
"chapater": 1,
|
"chapater": 1,
|
||||||
"tips": "第一章&拦路官军"
|
"tips": "第一章&拦路官军"
|
||||||
},
|
},
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
"pointId": 7,
|
"pointId": 7,
|
||||||
"position": "-555&1363",
|
"position": "-555&1363",
|
||||||
"previousPoint": "6&28",
|
"previousPoint": "6&28",
|
||||||
"wayPoints": "&",
|
"wayPoints": "-589&1466",
|
||||||
"chapater": 1,
|
"chapater": 1,
|
||||||
"tips": "第一章&拦路官军"
|
"tips": "第一章&拦路官军"
|
||||||
},
|
},
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
{
|
{
|
||||||
"pointId": 12,
|
"pointId": 12,
|
||||||
"position": "-206&1353",
|
"position": "-206&1353",
|
||||||
"previousPoint": "11&27",
|
"previousPoint": "11&",
|
||||||
"wayPoints": "&",
|
"wayPoints": "&",
|
||||||
"chapater": 1,
|
"chapater": 1,
|
||||||
"tips": "第一章&拦路官军"
|
"tips": "第一章&拦路官军"
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
{
|
{
|
||||||
"pointId": 13,
|
"pointId": 13,
|
||||||
"position": "-247&1627",
|
"position": "-247&1627",
|
||||||
"previousPoint": "12&",
|
"previousPoint": "12&27",
|
||||||
"wayPoints": "&",
|
"wayPoints": "&",
|
||||||
"chapater": 1,
|
"chapater": 1,
|
||||||
"tips": "第一章&河间之战"
|
"tips": "第一章&河间之战"
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
{
|
{
|
||||||
"pointId": 27,
|
"pointId": 27,
|
||||||
"position": "-368&1875",
|
"position": "-368&1875",
|
||||||
"previousPoint": "12&",
|
"previousPoint": "13&",
|
||||||
"wayPoints": "&",
|
"wayPoints": "&",
|
||||||
"chapater": 1,
|
"chapater": 1,
|
||||||
"tips": "第一章&奇遇点2"
|
"tips": "第一章&奇遇点2"
|
||||||
@@ -230,5 +230,37 @@
|
|||||||
"wayPoints": "&",
|
"wayPoints": "&",
|
||||||
"chapater": 1,
|
"chapater": 1,
|
||||||
"tips": "第一章&奇遇点4"
|
"tips": "第一章&奇遇点4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pointId": 30,
|
||||||
|
"position": "-402&2012",
|
||||||
|
"previousPoint": "27&",
|
||||||
|
"wayPoints": "&",
|
||||||
|
"chapater": 1,
|
||||||
|
"tips": "秘境怒狼洞穴"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pointId": 31,
|
||||||
|
"position": "-555&721",
|
||||||
|
"previousPoint": "23&",
|
||||||
|
"wayPoints": "&",
|
||||||
|
"chapater": 1,
|
||||||
|
"tips": "遗迹第一关"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pointId": 32,
|
||||||
|
"position": "-1294&721",
|
||||||
|
"previousPoint": "31&",
|
||||||
|
"wayPoints": "&",
|
||||||
|
"chapater": 1,
|
||||||
|
"tips": "遗迹第二关"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pointId": 33,
|
||||||
|
"position": "-1200&1038",
|
||||||
|
"previousPoint": "32&",
|
||||||
|
"wayPoints": "&",
|
||||||
|
"chapater": 1,
|
||||||
|
"tips": "遗迹第三关"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,162 +1,178 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"type": 1,
|
"type": 1,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 102,
|
"olyType": 102,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 5,
|
"type": 5,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 102,
|
"olyType": 102,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 8,
|
"type": 8,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 102,
|
"olyType": 102,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 13,
|
"type": 13,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 102,
|
"olyType": 102,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 18,
|
"type": 18,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 21,
|
"type": 21,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 22,
|
"type": 22,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 27,
|
"type": 27,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 28,
|
"type": 28,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 31,
|
"type": 31,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 32,
|
"type": 32,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 33,
|
"type": 33,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 34,
|
"type": 34,
|
||||||
"isSeid": 0,
|
"isSeid": 0,
|
||||||
"isBuff": 1,
|
"isBuff": 1,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 35,
|
"type": 35,
|
||||||
"isSeid": 1,
|
"isSeid": 1,
|
||||||
"isBuff": 0,
|
"isBuff": 0,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 102,
|
"olyType": 102,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 101,
|
"type": 101,
|
||||||
"isSeid": 1,
|
"isSeid": 1,
|
||||||
"isBuff": 0,
|
"isBuff": 0,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 102,
|
"type": 102,
|
||||||
"isSeid": 1,
|
"isSeid": 1,
|
||||||
"isBuff": 0,
|
"isBuff": 0,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 114,
|
"type": 114,
|
||||||
"isSeid": 1,
|
"isSeid": 1,
|
||||||
"isBuff": 0,
|
"isBuff": 0,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 303,
|
"type": 210,
|
||||||
"isSeid": 1,
|
"isSeid": 1,
|
||||||
"isBuff": 0,
|
"isBuff": 0,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 312,
|
"type": 303,
|
||||||
"isSeid": 1,
|
"isSeid": 1,
|
||||||
"isBuff": 0,
|
"isBuff": 0,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 435,
|
"type": 312,
|
||||||
"isSeid": 1,
|
"isSeid": 1,
|
||||||
"isBuff": 0,
|
"isBuff": 0,
|
||||||
"isHalo": 0,
|
"isHalo": 0,
|
||||||
"olyType": 101,
|
"olyType": 101,
|
||||||
"haloObject": 0
|
"haloObject": 0
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"type": 435,
|
||||||
|
"isSeid": 1,
|
||||||
|
"isBuff": 0,
|
||||||
|
"isHalo": 0,
|
||||||
|
"olyType": 101,
|
||||||
|
"haloObject": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 2000,
|
||||||
|
"isSeid": 1,
|
||||||
|
"isBuff": 0,
|
||||||
|
"isHalo": 0,
|
||||||
|
"olyType": 101,
|
||||||
|
"haloObject": 0
|
||||||
|
}
|
||||||
]
|
]
|
||||||
@@ -5,10 +5,10 @@
|
|||||||
"quality": 1,
|
"quality": 1,
|
||||||
"reward": "31001&50|31002&100",
|
"reward": "31001&50|31002&100",
|
||||||
"additionalReward": "10201&5|10202&10",
|
"additionalReward": "10201&5|10202&10",
|
||||||
"termsForAdd": "1&8&2|2&2&1|3&1&1",
|
"termsForAdd": "1&2&2|2&2&1|3&1&1",
|
||||||
"actorNeeded": 2,
|
"actorNeeded": 2,
|
||||||
"completeTime": 60,
|
"completeTime": 60,
|
||||||
"suitFloor": "1&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
"termsForAdd": "2&1&1|3&2&1",
|
"termsForAdd": "2&1&1|3&2&1",
|
||||||
"actorNeeded": 2,
|
"actorNeeded": 2,
|
||||||
"completeTime": 60,
|
"completeTime": 60,
|
||||||
"suitFloor": "1&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
"termsForAdd": "2&3&1|3&3&1",
|
"termsForAdd": "2&3&1|3&3&1",
|
||||||
"actorNeeded": 2,
|
"actorNeeded": 2,
|
||||||
"completeTime": 60,
|
"completeTime": 60,
|
||||||
"suitFloor": "1&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
"termsForAdd": "2&4&1|3&4&1",
|
"termsForAdd": "2&4&1|3&4&1",
|
||||||
"actorNeeded": 2,
|
"actorNeeded": 2,
|
||||||
"completeTime": 60,
|
"completeTime": 60,
|
||||||
"suitFloor": "1&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -53,10 +53,10 @@
|
|||||||
"quality": 2,
|
"quality": 2,
|
||||||
"reward": "17007&50|17008&100",
|
"reward": "17007&50|17008&100",
|
||||||
"additionalReward": "10501&5|10502&10",
|
"additionalReward": "10501&5|10502&10",
|
||||||
"termsForAdd": "1&9&1|2&4&1|3&5&1",
|
"termsForAdd": "1&1&1|2&4&1|3&5&1",
|
||||||
"actorNeeded": 2,
|
"actorNeeded": 2,
|
||||||
"completeTime": 60,
|
"completeTime": 60,
|
||||||
"suitFloor": "1&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
"termsForAdd": "3&6&1",
|
"termsForAdd": "3&6&1",
|
||||||
"actorNeeded": 2,
|
"actorNeeded": 2,
|
||||||
"completeTime": 60,
|
"completeTime": 60,
|
||||||
"suitFloor": "1&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
"termsForAdd": "3&7&1",
|
"termsForAdd": "3&7&1",
|
||||||
"actorNeeded": 2,
|
"actorNeeded": 2,
|
||||||
"completeTime": 60,
|
"completeTime": 60,
|
||||||
"suitFloor": "1&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
"termsForAdd": "3&8&2",
|
"termsForAdd": "3&8&2",
|
||||||
"actorNeeded": 3,
|
"actorNeeded": 3,
|
||||||
"completeTime": 60,
|
"completeTime": 60,
|
||||||
"suitFloor": "5&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
"termsForAdd": "1&1&1|2&1&1|3&1&1",
|
"termsForAdd": "1&1&1|2&1&1|3&1&1",
|
||||||
"actorNeeded": 3,
|
"actorNeeded": 3,
|
||||||
"completeTime": 60,
|
"completeTime": 60,
|
||||||
"suitFloor": "5&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -116,7 +116,7 @@
|
|||||||
"termsForAdd": "1&2&1|2&2&1|3&2&1",
|
"termsForAdd": "1&2&1|2&2&1|3&2&1",
|
||||||
"actorNeeded": 3,
|
"actorNeeded": 3,
|
||||||
"completeTime": 120,
|
"completeTime": 120,
|
||||||
"suitFloor": "5&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -125,10 +125,10 @@
|
|||||||
"quality": 4,
|
"quality": 4,
|
||||||
"reward": "10105&50|10201&100",
|
"reward": "10105&50|10201&100",
|
||||||
"additionalReward": "10703&5|10704&10",
|
"additionalReward": "10703&5|10704&10",
|
||||||
"termsForAdd": "1&3&1|2&3&1|3&3&1",
|
"termsForAdd": "1&1&1|2&3&1|3&3&1",
|
||||||
"actorNeeded": 3,
|
"actorNeeded": 3,
|
||||||
"completeTime": 120,
|
"completeTime": 120,
|
||||||
"suitFloor": "5&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -137,10 +137,10 @@
|
|||||||
"quality": 4,
|
"quality": 4,
|
||||||
"reward": "10202&50|10203&100",
|
"reward": "10202&50|10203&100",
|
||||||
"additionalReward": "10705&5|12001&10",
|
"additionalReward": "10705&5|12001&10",
|
||||||
"termsForAdd": "1&4&1|2&4&1|3&4&1",
|
"termsForAdd": "1&2&1|2&4&1|3&4&1",
|
||||||
"actorNeeded": 3,
|
"actorNeeded": 3,
|
||||||
"completeTime": 120,
|
"completeTime": 120,
|
||||||
"suitFloor": "5&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -149,10 +149,10 @@
|
|||||||
"quality": 5,
|
"quality": 5,
|
||||||
"reward": "10204&50|10205&100",
|
"reward": "10204&50|10205&100",
|
||||||
"additionalReward": "12002&5|12003&10",
|
"additionalReward": "12002&5|12003&10",
|
||||||
"termsForAdd": "1&5&1|2&1&1|3&5&1",
|
"termsForAdd": "1&1&1|2&1&1|3&5&1",
|
||||||
"actorNeeded": 3,
|
"actorNeeded": 3,
|
||||||
"completeTime": 120,
|
"completeTime": 120,
|
||||||
"suitFloor": "5&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -161,10 +161,10 @@
|
|||||||
"quality": 5,
|
"quality": 5,
|
||||||
"reward": "10301&50|10302&100",
|
"reward": "10301&50|10302&100",
|
||||||
"additionalReward": "12004&5|12005&10",
|
"additionalReward": "12004&5|12005&10",
|
||||||
"termsForAdd": "1&6&1|2&2&1|3&6&1",
|
"termsForAdd": "1&2&1|2&2&1|3&6&1",
|
||||||
"actorNeeded": 3,
|
"actorNeeded": 3,
|
||||||
"completeTime": 120,
|
"completeTime": 120,
|
||||||
"suitFloor": "5&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -173,10 +173,10 @@
|
|||||||
"quality": 5,
|
"quality": 5,
|
||||||
"reward": "10303&50|10304&100",
|
"reward": "10303&50|10304&100",
|
||||||
"additionalReward": "12006&5|12007&10",
|
"additionalReward": "12006&5|12007&10",
|
||||||
"termsForAdd": "1&7&1|2&3&1|3&7&1",
|
"termsForAdd": "1&1&1|2&3&1|3&7&1",
|
||||||
"actorNeeded": 3,
|
"actorNeeded": 3,
|
||||||
"completeTime": 120,
|
"completeTime": 120,
|
||||||
"suitFloor": "5&",
|
"suitFloor": 1,
|
||||||
"weight": 1
|
"weight": 1
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"name": "长枪投射",
|
"name": "长枪投射I",
|
||||||
"hurt_formula": " (ownAtk*2*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
"hurt_formula": " (ownAtk*2*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
||||||
"gain_formula": "&",
|
"gain_formula": "&",
|
||||||
"rage_cost": 100,
|
"rage_cost": 100,
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"name": "赦免",
|
"name": "赦免I",
|
||||||
"hurt_formula": 0,
|
"hurt_formula": 0,
|
||||||
"gain_formula": "&",
|
"gain_formula": "&",
|
||||||
"rage_cost": 0,
|
"rage_cost": 0,
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"name": "连珠三箭",
|
"name": "连珠三箭 I",
|
||||||
"hurt_formula": " (ownAtk*1.2*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
"hurt_formula": " (ownAtk*1.2*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
||||||
"gain_formula": "&",
|
"gain_formula": "&",
|
||||||
"rage_cost": 100,
|
"rage_cost": 100,
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 7,
|
"id": 7,
|
||||||
"name": "鼓舞",
|
"name": "鼓舞 I",
|
||||||
"hurt_formula": 0,
|
"hurt_formula": 0,
|
||||||
"gain_formula": "&",
|
"gain_formula": "&",
|
||||||
"rage_cost": 0,
|
"rage_cost": 0,
|
||||||
@@ -172,7 +172,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 10,
|
"id": 10,
|
||||||
"name": "巨锤震击",
|
"name": "巨锤震击 I",
|
||||||
"hurt_formula": " (ownAtk*2*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
"hurt_formula": " (ownAtk*2*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
||||||
"gain_formula": "&",
|
"gain_formula": "&",
|
||||||
"rage_cost": 100,
|
"rage_cost": 100,
|
||||||
@@ -191,7 +191,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"name": "虎痴",
|
"name": "虎痴 I",
|
||||||
"hurt_formula": 0,
|
"hurt_formula": 0,
|
||||||
"gain_formula": "&",
|
"gain_formula": "&",
|
||||||
"rage_cost": 0,
|
"rage_cost": 0,
|
||||||
@@ -248,7 +248,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 14,
|
"id": 14,
|
||||||
"name": "敌阵突破",
|
"name": "敌阵突破 I",
|
||||||
"hurt_formula": " (ownAtk*2*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
"hurt_formula": " (ownAtk*2*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
||||||
"gain_formula": "&",
|
"gain_formula": "&",
|
||||||
"rage_cost": 100,
|
"rage_cost": 100,
|
||||||
@@ -267,7 +267,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 15,
|
"id": 15,
|
||||||
"name": "坚壁",
|
"name": "坚壁 I",
|
||||||
"hurt_formula": 0,
|
"hurt_formula": 0,
|
||||||
"gain_formula": "&",
|
"gain_formula": "&",
|
||||||
"rage_cost": 0,
|
"rage_cost": 0,
|
||||||
@@ -321,5 +321,233 @@
|
|||||||
"skill_info": "极品技能",
|
"skill_info": "极品技能",
|
||||||
"skilNameImage": 0,
|
"skilNameImage": 0,
|
||||||
"skillSceneSpine": "&"
|
"skillSceneSpine": "&"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 18,
|
||||||
|
"name": "狼王爪击",
|
||||||
|
"hurt_formula": " (ownAtk*1.2*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 0,
|
||||||
|
"cd": 0,
|
||||||
|
"attack_area": 5,
|
||||||
|
"strike_area": 7,
|
||||||
|
"object": 0,
|
||||||
|
"skill_class": 3,
|
||||||
|
"effect": "&",
|
||||||
|
"actionName": "skill1",
|
||||||
|
"secondActionName": "&",
|
||||||
|
"oppoSecondActionName": "&",
|
||||||
|
"skill_info": "对自身3格范围内的所有敌人造成120%的伤害",
|
||||||
|
"skilNameImage": 6,
|
||||||
|
"skillSceneSpine": "nuqijidonghuablue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 19,
|
||||||
|
"name": "召唤狼群",
|
||||||
|
"hurt_formula": 0,
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 0,
|
||||||
|
"cd": 0,
|
||||||
|
"attack_area": 5,
|
||||||
|
"strike_area": 1,
|
||||||
|
"object": 1,
|
||||||
|
"skill_class": 3,
|
||||||
|
"effect": "4012&",
|
||||||
|
"actionName": "skill2",
|
||||||
|
"secondActionName": "&",
|
||||||
|
"oppoSecondActionName": "&",
|
||||||
|
"skill_info": "召唤2只狼",
|
||||||
|
"skilNameImage": 7,
|
||||||
|
"skillSceneSpine": "nuqijidonghuablue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 20,
|
||||||
|
"name": "长枪投射II",
|
||||||
|
"hurt_formula": " (ownAtk*3*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 100,
|
||||||
|
"cd": 0,
|
||||||
|
"attack_area": 2,
|
||||||
|
"strike_area": 1,
|
||||||
|
"object": 0,
|
||||||
|
"skill_class": 1,
|
||||||
|
"effect": "3069&",
|
||||||
|
"actionName": "skill1",
|
||||||
|
"secondActionName": "&",
|
||||||
|
"oppoSecondActionName": "skill1_B",
|
||||||
|
"skill_info": "远距离投射长枪,对目标造成300%的伤害,目标为策略职业时,伤害提升30%,并且给目标添加一个策略伤害加深降低20%的效果,持续4回合",
|
||||||
|
"skilNameImage": 1,
|
||||||
|
"skillSceneSpine": "nuqijidonghuablue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 21,
|
||||||
|
"name": "赦免II",
|
||||||
|
"hurt_formula": 0,
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 0,
|
||||||
|
"cd": 3,
|
||||||
|
"attack_area": 5,
|
||||||
|
"strike_area": 1,
|
||||||
|
"object": 1,
|
||||||
|
"skill_class": 2,
|
||||||
|
"effect": "3072&",
|
||||||
|
"actionName": "skill2",
|
||||||
|
"secondActionName": "&",
|
||||||
|
"oppoSecondActionName": "&",
|
||||||
|
"skill_info": "回复自身10%生命值,并且自身的策略伤害减免上升20%,持续2回合",
|
||||||
|
"skilNameImage": 0,
|
||||||
|
"skillSceneSpine": "&"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 22,
|
||||||
|
"name": "敌阵突破 II",
|
||||||
|
"hurt_formula": " (ownAtk*3*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 100,
|
||||||
|
"cd": 0,
|
||||||
|
"attack_area": 3,
|
||||||
|
"strike_area": 1,
|
||||||
|
"object": 0,
|
||||||
|
"skill_class": 1,
|
||||||
|
"effect": "3085&",
|
||||||
|
"actionName": "skill1",
|
||||||
|
"secondActionName": "&",
|
||||||
|
"oppoSecondActionName": "&",
|
||||||
|
"skill_info": "向目标冲锋造成300%伤害,同时会生成自身攻击30%的护盾,持续4回合,冲锋会位移到目标的身后",
|
||||||
|
"skilNameImage": 4,
|
||||||
|
"skillSceneSpine": "nuqijidonghuablue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 23,
|
||||||
|
"name": "坚壁 II",
|
||||||
|
"hurt_formula": 0,
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 0,
|
||||||
|
"cd": 3,
|
||||||
|
"attack_area": 2,
|
||||||
|
"strike_area": 1,
|
||||||
|
"object": 1,
|
||||||
|
"skill_class": 2,
|
||||||
|
"effect": "3089&",
|
||||||
|
"actionName": "skill2",
|
||||||
|
"secondActionName": "&",
|
||||||
|
"oppoSecondActionName": "&",
|
||||||
|
"skill_info": "使我方指定目标获得物理伤害减免提升30%,持续2回合",
|
||||||
|
"skilNameImage": 0,
|
||||||
|
"skillSceneSpine": "&"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 24,
|
||||||
|
"name": "连珠三箭 II",
|
||||||
|
"hurt_formula": " (ownAtk*1.5*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 100,
|
||||||
|
"cd": 0,
|
||||||
|
"attack_area": 4,
|
||||||
|
"strike_area": 1,
|
||||||
|
"object": 0,
|
||||||
|
"skill_class": 1,
|
||||||
|
"effect": "3093&",
|
||||||
|
"actionName": "skill1",
|
||||||
|
"secondActionName": "&",
|
||||||
|
"oppoSecondActionName": "&",
|
||||||
|
"skill_info": "对范围内的多个目标(最多3个)造成150%的伤害,被攻击目标有33%的概率获得一个减益效果,攻击时,物理伤害加深减少30%,持续4回合",
|
||||||
|
"skilNameImage": 2,
|
||||||
|
"skillSceneSpine": "nuqijidonghuablue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 25,
|
||||||
|
"name": "鼓舞 II",
|
||||||
|
"hurt_formula": 0,
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 0,
|
||||||
|
"cd": 3,
|
||||||
|
"attack_area": 2,
|
||||||
|
"strike_area": 1,
|
||||||
|
"object": 1,
|
||||||
|
"skill_class": 2,
|
||||||
|
"effect": "3097&",
|
||||||
|
"actionName": "skill2",
|
||||||
|
"secondActionName": "&",
|
||||||
|
"oppoSecondActionName": "&",
|
||||||
|
"skill_info": "使我方指定目标获得幸运提升20%的效果,持续4回合",
|
||||||
|
"skilNameImage": 0,
|
||||||
|
"skillSceneSpine": "&"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 26,
|
||||||
|
"name": "猛毒迷雾",
|
||||||
|
"hurt_formula": " (ownAtk*1.2*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 100,
|
||||||
|
"cd": 0,
|
||||||
|
"attack_area": 2,
|
||||||
|
"strike_area": 4,
|
||||||
|
"object": 0,
|
||||||
|
"skill_class": 1,
|
||||||
|
"effect": "3109&",
|
||||||
|
"actionName": "skill1",
|
||||||
|
"secondActionName": "&",
|
||||||
|
"oppoSecondActionName": "&",
|
||||||
|
"skill_info": "对范围内目标进行毒雾攻击,造成120%伤害,附加中毒效果,造成每回合30%策攻伤害,持续4回合,对已有中毒效果的单位立即生成一段毒伤害,同时降低目标20%的敏捷,持续3回合",
|
||||||
|
"skilNameImage": 3,
|
||||||
|
"skillSceneSpine": "nuqijidonghuablue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 27,
|
||||||
|
"name": "投毒",
|
||||||
|
"hurt_formula": " (ownAtk*1.8*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 0,
|
||||||
|
"cd": 3,
|
||||||
|
"attack_area": 2,
|
||||||
|
"strike_area": 1,
|
||||||
|
"object": 0,
|
||||||
|
"skill_class": 2,
|
||||||
|
"effect": "3113&",
|
||||||
|
"actionName": "skill2",
|
||||||
|
"secondActionName": "&",
|
||||||
|
"oppoSecondActionName": "&",
|
||||||
|
"skill_info": "对目标下毒,造成180%伤害,附加中毒效果,造成每回合30%策攻伤害,持续4回合,对已有中毒效果的单位立即生成一段毒伤害",
|
||||||
|
"skilNameImage": 0,
|
||||||
|
"skillSceneSpine": "&"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 28,
|
||||||
|
"name": "巨锤震击 II",
|
||||||
|
"hurt_formula": " (ownAtk*2.2*ownTerAddtion/100 - oppoDef*oppoTerAddtion/100)*(1 + ownDamInc/100000 - oppoDamDec/100000)",
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 100,
|
||||||
|
"cd": 0,
|
||||||
|
"attack_area": 3,
|
||||||
|
"strike_area": 1,
|
||||||
|
"object": 0,
|
||||||
|
"skill_class": 1,
|
||||||
|
"effect": "3117&",
|
||||||
|
"actionName": "skill1",
|
||||||
|
"secondActionName": "skill1_B",
|
||||||
|
"oppoSecondActionName": "&",
|
||||||
|
"skill_info": "造成220%物理伤害,并且击退1格,如果不能击退则这次攻击伤害加深提升30%",
|
||||||
|
"skilNameImage": 5,
|
||||||
|
"skillSceneSpine": "nuqijidonghuablue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 29,
|
||||||
|
"name": "虎痴 II",
|
||||||
|
"hurt_formula": 0,
|
||||||
|
"gain_formula": "&",
|
||||||
|
"rage_cost": 0,
|
||||||
|
"cd": 3,
|
||||||
|
"attack_area": 5,
|
||||||
|
"strike_area": 1,
|
||||||
|
"object": 1,
|
||||||
|
"skill_class": 2,
|
||||||
|
"effect": "3121&",
|
||||||
|
"actionName": "skill2",
|
||||||
|
"secondActionName": "&",
|
||||||
|
"oppoSecondActionName": "&",
|
||||||
|
"skill_info": "恢复自身20%攻击力的血量,并且给自身附加伤害减免15%,4回合内作用2次",
|
||||||
|
"skilNameImage": 0,
|
||||||
|
"skillSceneSpine": "&"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -973,5 +973,155 @@
|
|||||||
"img": 44,
|
"img": 44,
|
||||||
"info": "回春状态描述文字",
|
"info": "回春状态描述文字",
|
||||||
"showOnChar": "回春"
|
"showOnChar": "回春"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffId": 66,
|
||||||
|
"type": 33,
|
||||||
|
"name": "策略伤害加深下降",
|
||||||
|
"maxOlyNum": 1,
|
||||||
|
"round": 4,
|
||||||
|
"times": 0,
|
||||||
|
"cover": 1,
|
||||||
|
"buffOrDebuff": 1,
|
||||||
|
"gainvalue": "20000&",
|
||||||
|
"dotOrHot": 0,
|
||||||
|
"img": 3,
|
||||||
|
"info": "策略伤害加深降低20%",
|
||||||
|
"showOnChar": "增伤↓"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffId": 67,
|
||||||
|
"type": 34,
|
||||||
|
"name": "策略伤害减免上升 ",
|
||||||
|
"maxOlyNum": 1,
|
||||||
|
"round": 5,
|
||||||
|
"times": 0,
|
||||||
|
"cover": 1,
|
||||||
|
"buffOrDebuff": 0,
|
||||||
|
"gainvalue": "30000&",
|
||||||
|
"dotOrHot": 0,
|
||||||
|
"img": 7,
|
||||||
|
"info": "策略伤害减免上升30%",
|
||||||
|
"showOnChar": "减伤↑"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffId": 68,
|
||||||
|
"type": 28,
|
||||||
|
"name": "伤害减免上升",
|
||||||
|
"maxOlyNum": 1,
|
||||||
|
"round": 2,
|
||||||
|
"times": 0,
|
||||||
|
"cover": 1,
|
||||||
|
"buffOrDebuff": 0,
|
||||||
|
"gainvalue": "30000&",
|
||||||
|
"dotOrHot": 0,
|
||||||
|
"img": 8,
|
||||||
|
"info": "伤害减免增加30%",
|
||||||
|
"showOnChar": "减伤↑"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffId": 69,
|
||||||
|
"type": 5,
|
||||||
|
"name": "护盾(生命百分比)",
|
||||||
|
"maxOlyNum": 1,
|
||||||
|
"round": 2,
|
||||||
|
"times": 0,
|
||||||
|
"cover": 1,
|
||||||
|
"buffOrDebuff": 0,
|
||||||
|
"gainvalue": "1&20",
|
||||||
|
"dotOrHot": 0,
|
||||||
|
"img": 19,
|
||||||
|
"info": "可以抵消自身生命20%伤害的护盾",
|
||||||
|
"showOnChar": "护盾"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffId": 70,
|
||||||
|
"type": 5,
|
||||||
|
"name": "护盾(生命百分比)",
|
||||||
|
"maxOlyNum": 1,
|
||||||
|
"round": 2,
|
||||||
|
"times": 0,
|
||||||
|
"cover": 1,
|
||||||
|
"buffOrDebuff": 0,
|
||||||
|
"gainvalue": "1&30",
|
||||||
|
"dotOrHot": 0,
|
||||||
|
"img": 19,
|
||||||
|
"info": "可以抵消自身生命30%伤害的护盾",
|
||||||
|
"showOnChar": "护盾"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffId": 71,
|
||||||
|
"type": 31,
|
||||||
|
"name": "物理伤害加深下降",
|
||||||
|
"maxOlyNum": 1,
|
||||||
|
"round": 4,
|
||||||
|
"times": 0,
|
||||||
|
"cover": 1,
|
||||||
|
"buffOrDebuff": 1,
|
||||||
|
"gainvalue": "30000&",
|
||||||
|
"dotOrHot": 0,
|
||||||
|
"img": 7,
|
||||||
|
"info": "攻击时,物理伤害加深下降30%",
|
||||||
|
"showOnChar": "增伤↓"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffId": 72,
|
||||||
|
"type": 22,
|
||||||
|
"name": "幸运上升 ",
|
||||||
|
"maxOlyNum": 1,
|
||||||
|
"round": 4,
|
||||||
|
"times": 0,
|
||||||
|
"cover": 1,
|
||||||
|
"buffOrDebuff": 0,
|
||||||
|
"gainvalue": "30&",
|
||||||
|
"dotOrHot": 0,
|
||||||
|
"img": 8,
|
||||||
|
"info": "幸运上升30%",
|
||||||
|
"showOnChar": "幸运↑"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffId": 73,
|
||||||
|
"type": 13,
|
||||||
|
"name": "中毒",
|
||||||
|
"maxOlyNum": 1,
|
||||||
|
"round": 4,
|
||||||
|
"times": 0,
|
||||||
|
"cover": 1,
|
||||||
|
"buffOrDebuff": 1,
|
||||||
|
"gainvalue": "1&30",
|
||||||
|
"dotOrHot": 1,
|
||||||
|
"img": 1,
|
||||||
|
"info": "每回合造成30%策攻的中毒伤害",
|
||||||
|
"showOnChar": "中毒"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffId": 74,
|
||||||
|
"type": 21,
|
||||||
|
"name": "敏捷下降",
|
||||||
|
"maxOlyNum": 1,
|
||||||
|
"round": 3,
|
||||||
|
"times": 0,
|
||||||
|
"cover": 1,
|
||||||
|
"buffOrDebuff": 1,
|
||||||
|
"gainvalue": "25&",
|
||||||
|
"dotOrHot": 0,
|
||||||
|
"img": 7,
|
||||||
|
"info": "敏捷下降25%",
|
||||||
|
"showOnChar": "敏捷↓"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffId": 75,
|
||||||
|
"type": 28,
|
||||||
|
"name": "伤害减免上升 ",
|
||||||
|
"maxOlyNum": 1,
|
||||||
|
"round": 4,
|
||||||
|
"times": 2,
|
||||||
|
"cover": 0,
|
||||||
|
"buffOrDebuff": 0,
|
||||||
|
"gainvalue": "15000&",
|
||||||
|
"dotOrHot": 0,
|
||||||
|
"img": 8,
|
||||||
|
"info": "伤害减免上升15%",
|
||||||
|
"showOnChar": "减伤↑"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
17
shared/resource/jsons/dic_zyz_strings.json
Normal file
17
shared/resource/jsons/dic_zyz_strings.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"string": "挑战规则\r\n玩家可以不断向上挑战关卡,挑战不需要消耗资源。\r\n在镇念塔中挂机获得资源。\r\n\r\n收集\r\n当通过第一关后,开启收集功能。\r\n每隔一定时间,便可自动获得相关资源收益。\r\n通过层数越高,收集单位时间内获得的收益越高。\r\n收集收益最多存储1个小时。\r\n\r\n任务探索\r\n探索任务每日5点刷新,每次会刷新多个任务。\r\n可派遣武将完成任务,任务完成后可获得奖励。\r\n每个任务会存在特殊加成条件,当武将满足加成条件时,可获得额外的加成奖励。\r\n\r\n奖励规则\r\n成功挑战关卡后,会获得关卡奖励。\r\n每通过5个关卡,可获得一份通关奖励。\r\n探索每隔一定时间,可获得奖励。\r\n完成派遣任务可获得奖励\r\n\r\n",
|
||||||
|
"tip": "镇念塔说明"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"string": "挑战规则\r\n玩家可以不断向上挑战首领关卡,挑战不需要消耗资源。\r\n",
|
||||||
|
"tip": "秘境说明"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"string": "这里写上远征玩法说明",
|
||||||
|
"tip": "远征说明"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,317 +1,352 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"id": 1,
|
"1": 105,
|
||||||
"1": 105,
|
"2": 105,
|
||||||
"2": 105,
|
"3": 105,
|
||||||
"3": 105,
|
"4": 105,
|
||||||
"4": 105,
|
"5": 105,
|
||||||
"5": 105,
|
"6": 100,
|
||||||
"6": 100,
|
"7": 255,
|
||||||
"7": 255,
|
"8": 105,
|
||||||
"8": 105,
|
"9": 105,
|
||||||
"9": 105,
|
"10": 105,
|
||||||
"10": 105,
|
"11": 100,
|
||||||
"11": 100,
|
"12": 100,
|
||||||
"12": 100,
|
"13": 100,
|
||||||
"13": 100,
|
"14": 100,
|
||||||
"14": 100,
|
"15": 100,
|
||||||
"15": 100,
|
"16": 100,
|
||||||
"16": 100,
|
"17": 105,
|
||||||
"17": 105,
|
"18": 100,
|
||||||
"18": 100,
|
"19": 110,
|
||||||
"19": 110,
|
"20": 110,
|
||||||
"20": 110,
|
"21": 110,
|
||||||
"21": 110,
|
"22": 105,
|
||||||
"22": 105,
|
"23": 105,
|
||||||
"23": 105,
|
"24": 105,
|
||||||
"24": 105,
|
"25": 105,
|
||||||
"25": 105,
|
"26": 105,
|
||||||
"26": 105,
|
"27": 100,
|
||||||
"27": 100,
|
"28": 100,
|
||||||
"28": 100,
|
"29": 100,
|
||||||
"29": 100,
|
"30": 100,
|
||||||
"30": 100,
|
"31": 100,
|
||||||
"31": 100,
|
"32": 100,
|
||||||
"32": 100
|
"id": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"1": 100,
|
||||||
"1": 100,
|
"2": 105,
|
||||||
"2": 105,
|
"3": 110,
|
||||||
"3": 110,
|
"4": 100,
|
||||||
"4": 100,
|
"5": 105,
|
||||||
"5": 105,
|
"6": 95,
|
||||||
"6": 95,
|
"7": 255,
|
||||||
"7": 255,
|
"8": 100,
|
||||||
"8": 100,
|
"9": 100,
|
||||||
"9": 100,
|
"10": 100,
|
||||||
"10": 100,
|
"11": 95,
|
||||||
"11": 95,
|
"12": 100,
|
||||||
"12": 100,
|
"13": 100,
|
||||||
"13": 100,
|
"14": 100,
|
||||||
"14": 100,
|
"15": 100,
|
||||||
"15": 100,
|
"16": 100,
|
||||||
"16": 100,
|
"17": 110,
|
||||||
"17": 110,
|
"18": 100,
|
||||||
"18": 100,
|
"19": 110,
|
||||||
"19": 110,
|
"20": 110,
|
||||||
"20": 110,
|
"21": 110,
|
||||||
"21": 110,
|
"22": 105,
|
||||||
"22": 105,
|
"23": 105,
|
||||||
"23": 105,
|
"24": 105,
|
||||||
"24": 105,
|
"25": 105,
|
||||||
"25": 105,
|
"26": 105,
|
||||||
"26": 105,
|
"27": 100,
|
||||||
"27": 100,
|
"28": 100,
|
||||||
"28": 100,
|
"29": 95,
|
||||||
"29": 95,
|
"30": 100,
|
||||||
"30": 100,
|
"31": 100,
|
||||||
"31": 100,
|
"32": 100,
|
||||||
"32": 100
|
"id": 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"1": 110,
|
||||||
"1": 110,
|
"2": 110,
|
||||||
"2": 110,
|
"3": 95,
|
||||||
"3": 95,
|
"4": 100,
|
||||||
"4": 100,
|
"5": 95,
|
||||||
"5": 95,
|
"6": 95,
|
||||||
"6": 95,
|
"7": 255,
|
||||||
"7": 255,
|
"8": 100,
|
||||||
"8": 100,
|
"9": 100,
|
||||||
"9": 100,
|
"10": 95,
|
||||||
"10": 95,
|
"11": 90,
|
||||||
"11": 90,
|
"12": 90,
|
||||||
"12": 90,
|
"13": 100,
|
||||||
"13": 100,
|
"14": 95,
|
||||||
"14": 95,
|
"15": 100,
|
||||||
"15": 100,
|
"16": 100,
|
||||||
"16": 100,
|
"17": 110,
|
||||||
"17": 110,
|
"18": 100,
|
||||||
"18": 100,
|
"19": 110,
|
||||||
"19": 110,
|
"20": 110,
|
||||||
"20": 110,
|
"21": 110,
|
||||||
"21": 110,
|
"22": 105,
|
||||||
"22": 105,
|
"23": 105,
|
||||||
"23": 105,
|
"24": 95,
|
||||||
"24": 95,
|
"25": 105,
|
||||||
"25": 105,
|
"26": 100,
|
||||||
"26": 100,
|
"27": 100,
|
||||||
"27": 100,
|
"28": 100,
|
||||||
"28": 100,
|
"29": 90,
|
||||||
"29": 90,
|
"30": 100,
|
||||||
"30": 100,
|
"31": 100,
|
||||||
"31": 100,
|
"32": 100,
|
||||||
"32": 100
|
"id": 3
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"1": 105,
|
||||||
"1": 105,
|
"2": 105,
|
||||||
"2": 105,
|
"3": 105,
|
||||||
"3": 105,
|
"4": 105,
|
||||||
"4": 105,
|
"5": 105,
|
||||||
"5": 105,
|
"6": 95,
|
||||||
"6": 95,
|
"7": 255,
|
||||||
"7": 255,
|
"8": 110,
|
||||||
"8": 110,
|
"9": 105,
|
||||||
"9": 105,
|
"10": 100,
|
||||||
"10": 100,
|
"11": 95,
|
||||||
"11": 95,
|
"12": 100,
|
||||||
"12": 100,
|
"13": 100,
|
||||||
"13": 100,
|
"14": 110,
|
||||||
"14": 110,
|
"15": 100,
|
||||||
"15": 100,
|
"16": 100,
|
||||||
"16": 100,
|
"17": 100,
|
||||||
"17": 100,
|
"18": 100,
|
||||||
"18": 100,
|
"19": 110,
|
||||||
"19": 110,
|
"20": 110,
|
||||||
"20": 110,
|
"21": 110,
|
||||||
"21": 110,
|
"22": 105,
|
||||||
"22": 105,
|
"23": 105,
|
||||||
"23": 105,
|
"24": 100,
|
||||||
"24": 100,
|
"25": 105,
|
||||||
"25": 105,
|
"26": 105,
|
||||||
"26": 105,
|
"27": 100,
|
||||||
"27": 100,
|
"28": 100,
|
||||||
"28": 100,
|
"29": 95,
|
||||||
"29": 95,
|
"30": 100,
|
||||||
"30": 100,
|
"31": 100,
|
||||||
"31": 100,
|
"32": 100,
|
||||||
"32": 100
|
"id": 4
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"1": 100,
|
||||||
"1": 100,
|
"2": 105,
|
||||||
"2": 105,
|
"3": 100,
|
||||||
"3": 100,
|
"4": 100,
|
||||||
"4": 100,
|
"5": 100,
|
||||||
"5": 100,
|
"6": 110,
|
||||||
"6": 110,
|
"7": 255,
|
||||||
"7": 255,
|
"8": 105,
|
||||||
"8": 105,
|
"9": 105,
|
||||||
"9": 105,
|
"10": 100,
|
||||||
"10": 100,
|
"11": 95,
|
||||||
"11": 95,
|
"12": 105,
|
||||||
"12": 105,
|
"13": 100,
|
||||||
"13": 100,
|
"14": 105,
|
||||||
"14": 105,
|
"15": 100,
|
||||||
"15": 100,
|
"16": 100,
|
||||||
"16": 100,
|
"17": 110,
|
||||||
"17": 110,
|
"18": 100,
|
||||||
"18": 100,
|
"19": 110,
|
||||||
"19": 110,
|
"20": 110,
|
||||||
"20": 110,
|
"21": 110,
|
||||||
"21": 110,
|
"22": 105,
|
||||||
"22": 105,
|
"23": 105,
|
||||||
"23": 105,
|
"24": 110,
|
||||||
"24": 110,
|
"25": 105,
|
||||||
"25": 105,
|
"26": 105,
|
||||||
"26": 105,
|
"27": 100,
|
||||||
"27": 100,
|
"28": 100,
|
||||||
"28": 100,
|
"29": 100,
|
||||||
"29": 100,
|
"30": 100,
|
||||||
"30": 100,
|
"31": 100,
|
||||||
"31": 100,
|
"32": 100,
|
||||||
"32": 100
|
"id": 5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 6,
|
"1": 100,
|
||||||
"1": 100,
|
"2": 100,
|
||||||
"2": 100,
|
"3": 100,
|
||||||
"3": 100,
|
"4": 95,
|
||||||
"4": 95,
|
"5": 95,
|
||||||
"5": 95,
|
"6": 95,
|
||||||
"6": 95,
|
"7": 255,
|
||||||
"7": 255,
|
"8": 95,
|
||||||
"8": 95,
|
"9": 100,
|
||||||
"9": 100,
|
"10": 100,
|
||||||
"10": 100,
|
"11": 90,
|
||||||
"11": 90,
|
"12": 95,
|
||||||
"12": 95,
|
"13": 100,
|
||||||
"13": 100,
|
"14": 95,
|
||||||
"14": 95,
|
"15": 100,
|
||||||
"15": 100,
|
"16": 100,
|
||||||
"16": 100,
|
"17": 100,
|
||||||
"17": 100,
|
"18": 100,
|
||||||
"18": 100,
|
"19": 110,
|
||||||
"19": 110,
|
"20": 110,
|
||||||
"20": 110,
|
"21": 110,
|
||||||
"21": 110,
|
"22": 105,
|
||||||
"22": 105,
|
"23": 105,
|
||||||
"23": 105,
|
"24": 105,
|
||||||
"24": 105,
|
"25": 105,
|
||||||
"25": 105,
|
"26": 100,
|
||||||
"26": 100,
|
"27": 100,
|
||||||
"27": 100,
|
"28": 100,
|
||||||
"28": 100,
|
"29": 95,
|
||||||
"29": 95,
|
"30": 100,
|
||||||
"30": 100,
|
"31": 100,
|
||||||
"31": 100,
|
"32": 100,
|
||||||
"32": 100
|
"id": 6
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 7,
|
"1": 100,
|
||||||
"1": 100,
|
"2": 100,
|
||||||
"2": 100,
|
"3": 105,
|
||||||
"3": 105,
|
"4": 105,
|
||||||
"4": 105,
|
"5": 105,
|
||||||
"5": 105,
|
"6": 100,
|
||||||
"6": 100,
|
"7": 255,
|
||||||
"7": 255,
|
"8": 95,
|
||||||
"8": 95,
|
"9": 100,
|
||||||
"9": 100,
|
"10": 100,
|
||||||
"10": 100,
|
"11": 95,
|
||||||
"11": 95,
|
"12": 100,
|
||||||
"12": 100,
|
"13": 100,
|
||||||
"13": 100,
|
"14": 100,
|
||||||
"14": 100,
|
"15": 100,
|
||||||
"15": 100,
|
"16": 100,
|
||||||
"16": 100,
|
"17": 105,
|
||||||
"17": 105,
|
"18": 100,
|
||||||
"18": 100,
|
"19": 110,
|
||||||
"19": 110,
|
"20": 110,
|
||||||
"20": 110,
|
"21": 110,
|
||||||
"21": 110,
|
"22": 105,
|
||||||
"22": 105,
|
"23": 105,
|
||||||
"23": 105,
|
"24": 105,
|
||||||
"24": 105,
|
"25": 105,
|
||||||
"25": 105,
|
"26": 100,
|
||||||
"26": 100,
|
"27": 100,
|
||||||
"27": 100,
|
"28": 100,
|
||||||
"28": 100,
|
"29": 100,
|
||||||
"29": 100,
|
"30": 100,
|
||||||
"30": 100,
|
"31": 100,
|
||||||
"31": 100,
|
"32": 100,
|
||||||
"32": 100
|
"id": 7
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 8,
|
"1": 100,
|
||||||
"1": 100,
|
"2": 100,
|
||||||
"2": 100,
|
"3": 100,
|
||||||
"3": 100,
|
"4": 95,
|
||||||
"4": 95,
|
"5": 90,
|
||||||
"5": 90,
|
"6": 95,
|
||||||
"6": 95,
|
"7": 255,
|
||||||
"7": 255,
|
"8": 95,
|
||||||
"8": 95,
|
"9": 100,
|
||||||
"9": 100,
|
"10": 100,
|
||||||
"10": 100,
|
"11": 90,
|
||||||
"11": 90,
|
"12": 95,
|
||||||
"12": 95,
|
"13": 100,
|
||||||
"13": 100,
|
"14": 95,
|
||||||
"14": 95,
|
"15": 100,
|
||||||
"15": 100,
|
"16": 100,
|
||||||
"16": 100,
|
"17": 100,
|
||||||
"17": 100,
|
"18": 100,
|
||||||
"18": 100,
|
"19": 110,
|
||||||
"19": 110,
|
"20": 110,
|
||||||
"20": 110,
|
"21": 110,
|
||||||
"21": 110,
|
"22": 105,
|
||||||
"22": 105,
|
"23": 105,
|
||||||
"23": 105,
|
"24": 105,
|
||||||
"24": 105,
|
"25": 105,
|
||||||
"25": 105,
|
"26": 100,
|
||||||
"26": 100,
|
"27": 100,
|
||||||
"27": 100,
|
"28": 100,
|
||||||
"28": 100,
|
"29": 95,
|
||||||
"29": 95,
|
"30": 100,
|
||||||
"30": 100,
|
"31": 100,
|
||||||
"31": 100,
|
"32": 100,
|
||||||
"32": 100
|
"id": 8
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 9,
|
"1": 100,
|
||||||
"1": 100,
|
"2": 105,
|
||||||
"2": 105,
|
"3": 110,
|
||||||
"3": 110,
|
"4": 100,
|
||||||
"4": 100,
|
"5": 105,
|
||||||
"5": 105,
|
"6": 95,
|
||||||
"6": 95,
|
"7": 255,
|
||||||
"7": 255,
|
"8": 100,
|
||||||
"8": 100,
|
"9": 100,
|
||||||
"9": 100,
|
"10": 100,
|
||||||
"10": 100,
|
"11": 95,
|
||||||
"11": 95,
|
"12": 100,
|
||||||
"12": 100,
|
"13": 100,
|
||||||
"13": 100,
|
"14": 100,
|
||||||
"14": 100,
|
"15": 100,
|
||||||
"15": 100,
|
"16": 100,
|
||||||
"16": 100,
|
"17": 110,
|
||||||
"17": 110,
|
"18": 100,
|
||||||
"18": 100,
|
"19": 110,
|
||||||
"19": 110,
|
"20": 110,
|
||||||
"20": 110,
|
"21": 110,
|
||||||
"21": 110,
|
"22": 105,
|
||||||
"22": 105,
|
"23": 105,
|
||||||
"23": 105,
|
"24": 105,
|
||||||
"24": 105,
|
"25": 105,
|
||||||
"25": 105,
|
"26": 105,
|
||||||
"26": 105,
|
"27": 100,
|
||||||
"27": 100,
|
"28": 100,
|
||||||
"28": 100,
|
"29": 95,
|
||||||
"29": 95,
|
"30": 100,
|
||||||
"30": 100,
|
"31": 100,
|
||||||
"31": 100,
|
"32": 100,
|
||||||
"32": 100
|
"id": 9
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"1": 105,
|
||||||
|
"2": 105,
|
||||||
|
"3": 105,
|
||||||
|
"4": 105,
|
||||||
|
"5": 105,
|
||||||
|
"6": 100,
|
||||||
|
"7": 255,
|
||||||
|
"8": 105,
|
||||||
|
"9": 105,
|
||||||
|
"10": 105,
|
||||||
|
"11": 100,
|
||||||
|
"12": 100,
|
||||||
|
"13": 100,
|
||||||
|
"14": 100,
|
||||||
|
"15": 100,
|
||||||
|
"16": 100,
|
||||||
|
"17": 105,
|
||||||
|
"18": 100,
|
||||||
|
"19": 110,
|
||||||
|
"20": 110,
|
||||||
|
"21": 110,
|
||||||
|
"22": 105,
|
||||||
|
"23": 105,
|
||||||
|
"24": 105,
|
||||||
|
"25": 105,
|
||||||
|
"26": 105,
|
||||||
|
"27": 100,
|
||||||
|
"28": 100,
|
||||||
|
"29": 100,
|
||||||
|
"30": 100,
|
||||||
|
"31": 100,
|
||||||
|
"32": 100,
|
||||||
|
"id": 10
|
||||||
|
}
|
||||||
]
|
]
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { FIX_SMS_CODE_TELS, COUNTER, DEFAULT_ITEMS, ITID, DEFAULT_GOLD, DEFAULT_LV } from '@consts/consts';
|
import { FIX_SMS_CODE_TELS, COUNTER, DEFAULT_ITEMS, ITID, DEFAULT_GOLD, DEFAULT_LV } from '@consts/consts';
|
||||||
import { CounterModel } from '@db/Counter';
|
|
||||||
import { DEFAULT_HEROES } from '@consts/consts';
|
import { DEFAULT_HEROES } from '@consts/consts';
|
||||||
import { HeroModel } from '@db/Hero';
|
import { HeroModel } from '@db/Hero';
|
||||||
import { RoleModel } from '@db/Role';
|
import { RoleModel } from '@db/Role';
|
||||||
@@ -141,23 +140,17 @@ export default class Auth extends Service {
|
|||||||
if(hero) {
|
if(hero) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const seqId = await CounterModel.getNewCounter(COUNTER.HID)||-1;
|
|
||||||
let dicHero = getHeroInfoById(hid);
|
let dicHero = getHeroInfoById(hid);
|
||||||
if(!dicHero) {
|
if(!dicHero) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
let {quality, initialStars: star, jobid: job, name: hName} = dicHero;
|
||||||
|
|
||||||
|
hero = await HeroModel.createHero({
|
||||||
|
roleId, roleName: role.roleName, hid, hName, star, quality, job, serverId: role.serverId
|
||||||
|
});
|
||||||
|
|
||||||
const heroInfo = {
|
|
||||||
roleId,
|
|
||||||
roleName: role.roleName,
|
|
||||||
hid: hid,
|
|
||||||
hName: dicHero.name,
|
|
||||||
seqId,
|
|
||||||
star: dicHero.quality,
|
|
||||||
lv: 30,
|
|
||||||
ce: 100
|
|
||||||
}
|
|
||||||
await HeroModel.createHero(heroInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let {id, count} of DEFAULT_ITEMS) {
|
for(let {id, count} of DEFAULT_ITEMS) {
|
||||||
|
|||||||
Reference in New Issue
Block a user