军团表逻辑
This commit is contained in:
@@ -1,12 +1,18 @@
|
||||
import { Application, BackendSession, pinus } from 'pinus';
|
||||
import { resResult, genCode } from '../../../pubUtils/util';
|
||||
import { resResult, genCode, getRandomByLen } from '../../../pubUtils/util';
|
||||
import { STATUS } from '../../../consts';
|
||||
import { BossScriptModel } from '../../../db/BossScript';
|
||||
import { BossInstanceModel } from '../../../db/BossInstance';
|
||||
import { BattleRecordModel } from '../../../db/BattleRecord';
|
||||
import { nowSeconds, getTodayZeroPoint } from '../../../pubUtils/timeUtil';
|
||||
import { getBossScriptInfo, bossResult, checkMemberExists, pushBossHpMessage, getBossScriptWhenEnd, addBossScript } from '../../../services/guildBossService';
|
||||
import { findWhere } from 'underscore'
|
||||
import { GUILD_DATA_NAME } from '../../../consts/constModules/guildConst';
|
||||
import { getBossInstanceInfo, bossResult, checkMemberExists, pushBossHpMessage, getBossInstanceWhenEnd, addBossInstance } from '../../../services/guildBossService';
|
||||
import { findWhere, random } from 'underscore'
|
||||
import { GUILD_DATA_NAME, GUILD_STRUCTURE } from '../../../consts/constModules/guildConst';
|
||||
import { UserGuildModel } from '../../../db/UserGuild';
|
||||
import { GUILD_OPERATE } from '../../../consts';
|
||||
import { checkAuth } from '../../../services/guildService';
|
||||
import { GuildModel } from '../../../db/Guild';
|
||||
import { getBossByLv } from '../../../pubUtils/data';
|
||||
import { lockData } from '../../../services/redLockService';
|
||||
export default function (app: Application) {
|
||||
return new GuildHandler(app);
|
||||
}
|
||||
@@ -16,50 +22,73 @@ export class GuildHandler {
|
||||
}
|
||||
|
||||
// 获得boss关卡
|
||||
async getBossScript(msg: { code: string }, session: BackendSession) {
|
||||
const { code } = msg;
|
||||
//TODO校验
|
||||
async getBossInstance(msg: {}, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
let bossScript = await BossScriptModel.findBossScript(code);
|
||||
if (!bossScript) {
|
||||
return resResult(STATUS.SUCCESS, {type: 1});//1:等待团长开启,2:今日已开启,且boss通关,3:开启中
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode');
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
let bossInstance = await BossInstanceModel.findBossInstance(code);
|
||||
if (!bossInstance) {
|
||||
return resResult(STATUS.SUCCESS, {status: 1});//1:等待团长开启,2:今日已开启,且boss通关,3:开启中
|
||||
}
|
||||
let result = await getBossScriptInfo(bossScript, roleId);
|
||||
let result = await getBossInstanceInfo(bossInstance, roleId);
|
||||
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
|
||||
//开启演武场
|
||||
async openBossScript(msg: { code: string }, session: BackendSession) {
|
||||
const { code } = msg;
|
||||
async openBossInstance(msg: {}, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
//TODO检查权限
|
||||
let bossScript = await BossScriptModel.findBossScript(code);
|
||||
if (!!bossScript && ( bossScript.bossHp > 0 || bossScript.time >= getTodayZeroPoint() )) {
|
||||
const serverId = session.get('serverId');
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId, 'auth guildCode');
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
const checkMyResult = await checkAuth(GUILD_OPERATE.OPEN_BOSS, roleId, null, userGuild);
|
||||
if(!checkMyResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
let res:any = await lockData(serverId, GUILD_DATA_NAME.BOSS_SCRIPT, code);//加锁
|
||||
if (!!res.err)
|
||||
return resResult(STATUS.REDLOCK_ERR);
|
||||
let bossInstance = await BossInstanceModel.findBossInstance(code);
|
||||
if (!!bossInstance && ( bossInstance.bossHp > 0 || bossInstance.startTime >= getTodayZeroPoint() )) {
|
||||
return resResult(STATUS.GUILD_SCRIPT_IS_OPENED_TODAY);
|
||||
}
|
||||
//TODO随机地图
|
||||
let bossHp = 1000;
|
||||
let warId = 1;
|
||||
await BossScriptModel.openBossScript(code, bossHp, warId);
|
||||
let result = {warId, ranks: [], myRank: {}, bossHp, type: 3};
|
||||
const guild = await GuildModel.findByCode(code, serverId, 'lv structure');
|
||||
if(!guild) {
|
||||
return resResult(STATUS.GUILD_NOT_FOUND);
|
||||
}
|
||||
const { structure } = guild;
|
||||
const curStructure = structure.find(cur => cur.id == GUILD_STRUCTURE.BOSS);
|
||||
if(!curStructure) {
|
||||
return resResult(STATUS.GUILD_STRUCTURE_NOT_FOUND);
|
||||
}
|
||||
let bossBase = getBossByLv(curStructure.lv);
|
||||
let {bossHp, warId } = getRandomByLen(bossBase.wars);
|
||||
let resGuild = await GuildModel.costFund(code, bossBase.consume)
|
||||
if (!resGuild)
|
||||
return resResult(STATUS.GUILD_FUND_NOT_ENOUGH);
|
||||
await BossInstanceModel.openBossInstance(code, bossHp, warId);
|
||||
let result = {warId, ranks: [], myRank: {}, bossHp, type: 3, isBattled: false};
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
|
||||
async bossScriptStart(msg: { code: string }, session: BackendSession) {
|
||||
const { code } = msg;
|
||||
async battleBoss(msg: {}, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
//TODO校验
|
||||
let bossScript = await BossScriptModel.findBossScript(code);
|
||||
if (!bossScript)
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode');
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
let bossInstance = await BossInstanceModel.findBossInstance(code);
|
||||
if (!bossInstance)
|
||||
return resResult(STATUS.GUILD_SCRIPT_NOT_OPENED);
|
||||
if (bossScript.bossHp <= 0)
|
||||
if (bossInstance.bossHp <= 0)
|
||||
return resResult(STATUS.GUILD_SCRIPT_IS_COMPLETE);
|
||||
let myRank = findWhere(bossScript.ranks, {roleId});
|
||||
let myRank = findWhere(bossInstance.ranks, {roleId});
|
||||
if (!!myRank && myRank.time > getTodayZeroPoint())
|
||||
return resResult(STATUS.GUILD_SCRIPT_IS_BATTLED);
|
||||
let { warId, ranks } = bossScript;
|
||||
let { warId, ranks } = bossInstance;
|
||||
const battleCode = genCode(8); // 关卡唯一值
|
||||
//TODO查看地图字典
|
||||
let warInfo;
|
||||
@@ -67,52 +96,66 @@ export class GuildHandler {
|
||||
$set: {
|
||||
roleId, roleName, battleId: warId,
|
||||
status: 0,
|
||||
warName: warInfo.gk_name,
|
||||
warType: warInfo.warType,
|
||||
record: { heroes:[],recordNum: bossScript.num, bossHp: bossScript.bossHp},
|
||||
// warName: warInfo.gk_name,
|
||||
// warType: warInfo.warType,
|
||||
record: { heroes:[],recordNum: bossInstance.num, bossHp: bossInstance.bossHp},
|
||||
}
|
||||
}, true);
|
||||
const serverId = session.get('serverId');
|
||||
await addBossScript(code, serverId, roleId);
|
||||
await addBossInstance(code, serverId, roleId);
|
||||
if (!findWhere(ranks, {roleId})) {
|
||||
await BossScriptModel.pushRanks(code, {roleId, score: 0, time:nowSeconds()});
|
||||
await BossInstanceModel.pushRanks(code, {roleId, score: 0, time: nowSeconds()});
|
||||
} else {
|
||||
await BossInstanceModel.updateRank(code, roleId);
|
||||
}
|
||||
return resResult(STATUS.SUCCESS, { battleCode });
|
||||
}
|
||||
|
||||
async action (msg: { code: string, damage: number, battleCode: string }, session: BackendSession ) {
|
||||
const { code, battleCode, damage } = msg;
|
||||
async action (msg: { damage: number, battleCode: string }, session: BackendSession ) {
|
||||
const { battleCode, damage } = msg;
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode');
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
let flag = await checkMemberExists(code, serverId, roleId, battleCode);
|
||||
if (!flag) {
|
||||
return;
|
||||
return resResult(STATUS.REDLOCK_ERR);
|
||||
}
|
||||
//记录伤害
|
||||
let bossScript = await BossScriptModel.updateBossHp(code, damage, roleId);
|
||||
if (!bossScript) {//进入结算
|
||||
let bossInstance = await BossInstanceModel.updateBossHp(code, damage, roleId);
|
||||
if (!bossInstance) {//进入结算
|
||||
let flag = await bossResult(code, serverId, GUILD_DATA_NAME.BOSS_SCRIPT, roleId, damage);
|
||||
if (!flag) {
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
}
|
||||
return resResult(STATUS.SUCCESS, { bossHp: 0 });
|
||||
} else {
|
||||
pushBossHpMessage(code, serverId, bossScript.bossHp);
|
||||
pushBossHpMessage(code, serverId, bossInstance.bossHp);
|
||||
return resResult(STATUS.SUCCESS, { bossHp: bossInstance.bossHp });
|
||||
}
|
||||
return resResult(STATUS.SUCCESS, { bossHp: bossScript.bossHp>0?bossScript.bossHp:0 });
|
||||
}
|
||||
|
||||
async bossScriptEnd(msg: { code: string, battleCode: string }, session: BackendSession) {
|
||||
const { code, battleCode } = msg;
|
||||
async battleBossEnd(msg: { battleCode: string }, session: BackendSession) {
|
||||
const { battleCode } = msg;
|
||||
const roleId = session.get('roleId');
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode');
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
const { guildCode: code } = userGuild;
|
||||
const battleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode, true);
|
||||
if(!battleRecord || battleRecord.status != 0 || roleId != battleRecord.roleId) {
|
||||
if (!battleRecord || battleRecord.status != 0 || roleId != battleRecord.roleId) {
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
}
|
||||
await BattleRecordModel.updateBattleRecordByCode(battleCode, {
|
||||
$set: { status: 1 }//战斗结束统一设置成1
|
||||
}, true);
|
||||
let bossScript = await BossScriptModel.findBossScript(code);
|
||||
let result = await getBossScriptWhenEnd(bossScript, roleId, battleRecord.record.recordNum);
|
||||
let bossInstance = await BossInstanceModel.findBossInstance(code);
|
||||
let result = await getBossInstanceWhenEnd(bossInstance, roleId, battleRecord.record.recordNum);
|
||||
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -4,11 +4,12 @@ import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB } from '../../../consts';
|
||||
import { GuildTrainModel } from '../../../db/GuildTrain';
|
||||
import { BattleRecordModel } from '../../../db/BattleRecord';
|
||||
import { nowSeconds, getTodayZeroPoint } from '../../../pubUtils/timeUtil';
|
||||
import { getUserGuild, getGuildTrainInfo } from '../../../services/guildTrainService';
|
||||
import { getUserGuild, getGuildTrainInfo, lockTrain, getGuildTrain, getGuildTrainRewards} from '../../../services/guildTrainService';
|
||||
import { findIndex, findWhere, indexBy } from 'underscore'
|
||||
import { lockData } from '../../../services/redLockService';
|
||||
import { GUILD_DATA_NAME } from '../../../consts/constModules/guildConst';
|
||||
import { UserGuildModel } from '../../../db/UserGuild';
|
||||
import { GuildModel } from '../../../db/Guild';
|
||||
export default function (app: Application) {
|
||||
return new GuildTrainHandler(app);
|
||||
}
|
||||
@@ -18,17 +19,28 @@ export class GuildTrainHandler {
|
||||
|
||||
}
|
||||
|
||||
async getTrainScript(msg: { code: string }, session: BackendSession) {
|
||||
//获得试炼的详情
|
||||
async getTrainScriptByTrainId(msg: { code: string}, session: BackendSession) {
|
||||
const { code } = msg;
|
||||
const roleId = session.get('roleId');
|
||||
let guildTrains = await GuildTrainModel.findGuildTrain(code);
|
||||
const serverId = session.get('serverId');
|
||||
let userGuild = await getUserGuild(roleId, code);
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
if (!guildTrains)
|
||||
guildTrains = [];
|
||||
let { trainId } = await GuildModel.findGuild(code, serverId, 'trainId');
|
||||
let trainIds = [trainId];
|
||||
if (trainId - 1 > 0) {
|
||||
trainIds.push(trainId - 1);
|
||||
}
|
||||
let guildTrains = await GuildTrainModel.findGuildTrainByTrainIds(code, trainIds);
|
||||
if (!guildTrains || !findWhere(guildTrains, {trainId})) {
|
||||
let guildTrain = await lockTrain(code, trainId);
|
||||
if (!guildTrains) {
|
||||
guildTrains.push(guildTrain);
|
||||
}
|
||||
}
|
||||
let { trainCount, trainRewards } = userGuild;
|
||||
let result = getGuildTrainInfo(guildTrains, roleId, trainCount, trainRewards);
|
||||
let result = getGuildTrainInfo(guildTrains, roleId, trainCount, trainRewards, [trainId]);
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
|
||||
@@ -41,8 +53,8 @@ export class GuildTrainHandler {
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
if (userGuild.trainCount > 2) //TODO检查次数
|
||||
return resResult(STATUS.GUILD_TRAIN_BATTLE_COUNT_NOT_ENOUGH);
|
||||
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId);
|
||||
if (!guildTrain)
|
||||
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId, 'trainId isComplete trainScripts');
|
||||
if (!guildTrain && guildTrain.isComplete)
|
||||
return resResult(STATUS.GUILD_TRAIN_SCRIPT_NOT_OPENED);
|
||||
let trainScript = findWhere(guildTrain.trainScripts, { hid });
|
||||
if (!trainScript)
|
||||
@@ -89,12 +101,13 @@ export class GuildTrainHandler {
|
||||
await BattleRecordModel.updateBattleRecordByCode(battleCode, {
|
||||
$set: { status: isSuccess?1:2 }
|
||||
}, true);
|
||||
|
||||
let guildTrains = [];
|
||||
let trainIds = [];
|
||||
let trainId = battleRecord.record.trainId;
|
||||
let hid = battleRecord.record.hid;
|
||||
let res:any = await lockData(serverId, GUILD_DATA_NAME.TRAIN, code + '_' + trainId);//加锁
|
||||
if (!!res.err)
|
||||
return true;
|
||||
return resResult(STATUS.REDLOCK_ERR);
|
||||
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId);
|
||||
if (!guildTrain) {
|
||||
res.releaseCallback();//解锁
|
||||
@@ -111,14 +124,14 @@ export class GuildTrainHandler {
|
||||
let { isComplete, reports, ranks } = guildTrain;
|
||||
let index = findIndex(ranks, {roleId});
|
||||
if (index !== -1) {
|
||||
ranks[index].score += addScore;
|
||||
ranks[index].score += addScore;
|
||||
}
|
||||
let needLockNext = false;
|
||||
let resGuildTrain;
|
||||
let report = {roleId, trainId, hid, score: addScore, time: nowSeconds(), isSuccessed: isSuccess, type: 1};//1表示普通战报, 2表示系统战报即:被成功压制
|
||||
if (trainScript.progress < 1000 ) {
|
||||
if (trainScript.progress + addScore >= 1000) {
|
||||
reports.push(...[{isSuccessed: true, type: 2, time:nowSeconds(), score: addScore, roleId, trainId, hid},report]);
|
||||
await GuildTrainModel.updateGuildTrain(code, trainId, {reports, ranks});
|
||||
let needLockNext = false;
|
||||
if (!isComplete) {
|
||||
isComplete = true;
|
||||
guildTrain.trainScripts.forEach(({hid: otherHid, progress})=>{
|
||||
@@ -126,39 +139,86 @@ export class GuildTrainHandler {
|
||||
isComplete = false;
|
||||
}
|
||||
});
|
||||
if (isComplete) {//解锁下一关
|
||||
if (isComplete) { //解锁下一关
|
||||
needLockNext = true;
|
||||
}
|
||||
}
|
||||
let progress = 1000;
|
||||
GuildTrainModel.updateGuildTrainProgress(code, trainId, hid, progress, ranks, reports, isComplete);
|
||||
if (needLockNext) {
|
||||
|
||||
resGuildTrain = await GuildTrainModel.updateGuildTrainProgress(code, trainId, hid, progress, ranks, reports, isComplete);
|
||||
if (needLockNext) { //
|
||||
let nextResGuildTrain = await lockTrain(code, trainId + 1);
|
||||
trainIds.push(nextResGuildTrain.trainId);
|
||||
guildTrains.push(nextResGuildTrain);
|
||||
}
|
||||
res.releaseCallback();//解锁
|
||||
} else {
|
||||
let progress = trainScript.progress + addScore;
|
||||
GuildTrainModel.updateGuildTrainProgress(code, trainId, hid, progress, ranks, reports, isComplete);
|
||||
resGuildTrain = await GuildTrainModel.updateGuildTrainProgress(code, trainId, hid, progress, ranks, reports, isComplete);
|
||||
res.releaseCallback();//解锁
|
||||
}
|
||||
} else {
|
||||
reports.push(report);
|
||||
GuildTrainModel.updateGuildTrain(code, trainId, {reports, ranks});
|
||||
resGuildTrain = await GuildTrainModel.updateGuildTrain(code, trainId, {reports, ranks});
|
||||
res.releaseCallback();//解锁
|
||||
}
|
||||
let guildTrains = await GuildTrainModel.findGuildTrain(code);
|
||||
if (!guildTrains)
|
||||
guildTrains = [];
|
||||
if (!needLockNext) {
|
||||
if (trainId - 1 > 0 ) {
|
||||
let lastGuildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId - 1);
|
||||
guildTrains.push(lastGuildTrain);
|
||||
}
|
||||
trainIds.push(resGuildTrain.trainId);
|
||||
}
|
||||
guildTrains.push(resGuildTrain);
|
||||
let { trainCount, trainRewards } = userGuild;
|
||||
let result = getGuildTrainInfo(guildTrains, roleId, trainCount, trainRewards);
|
||||
let result = getGuildTrainInfo(guildTrains, roleId, trainCount, trainRewards, trainIds);
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
|
||||
async getTrainScriptBox(msg: { code: string }, session: BackendSession) {
|
||||
|
||||
async getTrainScriptBox(msg: { code: string, trainId: number , hid: number, index: number}, session: BackendSession) {
|
||||
let { code, trainId, hid, index } = msg;
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
let userGuild = await getUserGuild(roleId, code);
|
||||
if (!userGuild)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let res:any = await lockData(serverId, GUILD_DATA_NAME.TRAIN_BOX, code + '_' + trainId);//加锁
|
||||
if (!!res.err)
|
||||
return resResult(STATUS.REDLOCK_ERR);
|
||||
let guildTrain = await GuildTrainModel.findTrainScriptBoxByIndex(code, roleId, trainId, hid, index, 1000, nowSeconds() - 24*60*60);
|
||||
if (!guildTrain) {
|
||||
res.releaseCallback();//解锁
|
||||
return resResult(STATUS.GUILD_TRAIN_SCRIPT_NOT_OPENED);
|
||||
}
|
||||
let good;
|
||||
let resGuildTrain = await GuildTrainModel.receiveBoxByIndex(code, roleId, trainId, hid, index, good);
|
||||
res.releaseCallback();//解锁
|
||||
|
||||
if (!resGuildTrain) {
|
||||
let result:any = getGuildTrainRewards(guildTrain);
|
||||
return resResult(STATUS.GUILD_GET_TRAIN_BOX_FAIL, result);
|
||||
}
|
||||
let result:any = getGuildTrainRewards(resGuildTrain);
|
||||
|
||||
result.goods = [good];
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
|
||||
async getTrainLvUpRewards(msg: { trainId: number }, session: BackendSession) {
|
||||
async getTrainLvUpRewards(msg: {code: string, trainId: number }, session: BackendSession) {
|
||||
let { code, trainId } = msg;
|
||||
const roleId = session.get('roleId');
|
||||
//TODO奖励
|
||||
let good;
|
||||
let userGuild = await UserGuildModel.receiveTrainRewards(roleId, trainId);
|
||||
if (!userGuild) {
|
||||
return resResult(STATUS.GUILD_GET_TRAIN_REWARD_FAIL);
|
||||
}
|
||||
let { trainRewards } = userGuild;
|
||||
return resResult(STATUS.SUCCESS, { trainRewards });
|
||||
}
|
||||
//购买挑战次数
|
||||
async purchaseTrainCount(msg: {code: string, trainId: number }, session: BackendSession) {
|
||||
let { code, trainId } = msg;
|
||||
const roleId = session.get('roleId');
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
import { BossScriptType, BossScriptModel } from '../db/BossScript';
|
||||
import { BossInstanceType, BossInstanceModel } from '../db/BossInstance';
|
||||
import { getTodayZeroPoint, nowSeconds } from '../pubUtils/timeUtil';
|
||||
import { lockData } from '../services/redLockService';
|
||||
import { findIndex, indexBy, values } from 'underscore';
|
||||
@@ -10,22 +10,22 @@ import { deepCopy, resResult } from '../pubUtils/util';
|
||||
import { BattleRecordModel } from '../db/BattleRecord';
|
||||
/**
|
||||
*
|
||||
* @param bossScript
|
||||
* @param bossInstance
|
||||
* @param roleId
|
||||
*/
|
||||
export async function getBossScriptInfo(bossScript: BossScriptType, roleId:string) {
|
||||
let { warId, ranks, bossHp, winWarId, winTime, roleIdRecords, guildCode } = bossScript;
|
||||
export async function getBossInstanceInfo(bossInstance: BossInstanceType, roleId:string) {
|
||||
let { warId, ranks, bossHp, winWarId, winTime, roleIdRecords, guildCode } = bossInstance;
|
||||
ranks.sort(function(a, b) {
|
||||
return b.score - a.score + a.time - b.time;
|
||||
});
|
||||
let result:any = {};
|
||||
//1:等待团长开启,2:今日已开启,且boss通关,3:开启中
|
||||
if ( bossScript.bossHp <= 0 ) {
|
||||
if ( bossInstance.bossHp <= 0 ) {
|
||||
if (!!winWarId && winTime > getTodayZeroPoint() && roleIdRecords.indexOf(roleId) == -1) {
|
||||
result = { winWarId };
|
||||
await BossScriptModel.recordRoleIdWhenCheck(guildCode, roleId);
|
||||
await BossInstanceModel.recordRoleIdWhenCheck(guildCode, roleId);
|
||||
}
|
||||
if (bossScript.time < getTodayZeroPoint()) {
|
||||
if (bossInstance.startTime < getTodayZeroPoint()) {
|
||||
result.type = 1;
|
||||
return result;
|
||||
} else {
|
||||
@@ -36,7 +36,7 @@ export async function getBossScriptInfo(bossScript: BossScriptType, roleId:strin
|
||||
let isBattled = false;
|
||||
let myRank = {};
|
||||
|
||||
ranks.forEach(({roleId: battleRoleId, score, time}, index) => {
|
||||
let lastRanks = ranks.map(({roleId: battleRoleId, score, time}, index) => {
|
||||
if (roleId == battleRoleId) {
|
||||
myRank = {roleId, score, rankLv: index + 1};
|
||||
if (time >= getTodayZeroPoint())
|
||||
@@ -44,22 +44,22 @@ export async function getBossScriptInfo(bossScript: BossScriptType, roleId:strin
|
||||
}
|
||||
return {roleId, score, rankLv: index + 1};
|
||||
});
|
||||
return {warId, ranks, myRank, bossHp, type: 3, isBattled};
|
||||
return {warId, ranks: lastRanks, myRank, bossHp, type: 3, isBattled};
|
||||
}
|
||||
/**
|
||||
* 战斗结束返回
|
||||
* @param bossScript
|
||||
* @param bossInstance
|
||||
* @param roleId
|
||||
* @param battleNum
|
||||
*/
|
||||
export async function getBossScriptWhenEnd(bossScript: BossScriptType, roleId:string, battleNum:number) {
|
||||
let { warId, ranks, bossHp, winWarId, guildCode, recordRanks, winNum } = bossScript;
|
||||
export async function getBossInstanceWhenEnd(bossInstance: BossInstanceType, roleId:string, battleNum:number) {
|
||||
let { warId, ranks, bossHp, winWarId, guildCode, recordRanks, winNum } = bossInstance;
|
||||
let pushRanks;
|
||||
let result:any = {};
|
||||
if (battleNum == winNum) {
|
||||
pushRanks = deepCopy(recordRanks);
|
||||
result = {warId: winWarId, bossHp: 0, type: 3};
|
||||
await BossScriptModel.recordRoleIdWhenCheck(guildCode, roleId);
|
||||
await BossInstanceModel.recordRoleIdWhenCheck(guildCode, roleId);
|
||||
} else {
|
||||
pushRanks = deepCopy(ranks);
|
||||
result = {warId, bossHp, type: 3};
|
||||
@@ -94,10 +94,10 @@ export async function bossResult(code: string, serverId: string, dataName: strin
|
||||
let res:any = await lockData(serverId, dataName, code);//加锁
|
||||
if (!!res.err)
|
||||
return true;
|
||||
let {winSettled, ranks, num, warId, bossHp} = await BossScriptModel.findBossScript(code);//锁定关卡信息
|
||||
let {winSettled, ranks, num, warId, bossHp} = await BossInstanceModel.findBossInstance(code);//锁定关卡信息
|
||||
if (winSettled) {
|
||||
res.releaseCallback();//解锁
|
||||
await BossScriptModel.recordRoleIdWhenCheck(code, roleId);
|
||||
await BossInstanceModel.recordRoleIdWhenCheck(code, roleId);
|
||||
return true;
|
||||
}
|
||||
let index = findIndex(ranks, {roleId});
|
||||
@@ -110,7 +110,7 @@ export async function bossResult(code: string, serverId: string, dataName: strin
|
||||
res.releaseCallback();//解锁
|
||||
return true;
|
||||
}
|
||||
let { recordRanks } = await BossScriptModel.updateBossScript(code, { bossHp: 0, winSettled: true, ranks, recordRanks: ranks, winNum: num, winWarId: warId, roleIdRecords:[roleId]}, );
|
||||
let { recordRanks } = await BossInstanceModel.updateBossInstance(code, { bossHp: 0, winSettled: true, ranks, recordRanks: ranks, winNum: num, winWarId: warId, roleIdRecords:[roleId]}, );
|
||||
await pushBossHpMessage(code, serverId, 0, true);
|
||||
res.releaseCallback();//数据修改解锁
|
||||
recordRanks.sort(function(a, b) {
|
||||
@@ -137,7 +137,7 @@ export async function bossResult(code: string, serverId: string, dataName: strin
|
||||
return true;
|
||||
}
|
||||
|
||||
export async function addBossScript(code: string, serverId:string, roleId: string) {
|
||||
export async function addBossInstance(code: string, serverId:string, roleId: string) {
|
||||
let loginKey = 'login_roleId_' + roleId;
|
||||
let sid = await getRedis(loginKey);
|
||||
let key = 'serverId_' + serverId + 'guildCode_' + code;
|
||||
@@ -148,12 +148,13 @@ export async function addBossScript(code: string, serverId:string, roleId: strin
|
||||
export async function pushBossHpMessage(code: string, serverId:string, bossHp:number, isDelKey?: boolean ) {
|
||||
let key = 'serverId_' + serverId + 'guildCode_' + code;
|
||||
let members = await smembersAsync(key);
|
||||
members.forEach(member=>{
|
||||
let uids = members.map(member=>{
|
||||
let arr = member.split('|');
|
||||
let uid = arr[0];
|
||||
let sid = arr[1];
|
||||
pinus.app.channelService.pushMessageByUids('onBossHpUpdate', resResult(STATUS.SUCCESS, {bossHp}), [{uid, sid}]);
|
||||
return {uid, sid};
|
||||
});
|
||||
pinus.app.channelService.pushMessageByUids('onBossHpUpdate', resResult(STATUS.SUCCESS, {bossHp}), uids);
|
||||
if (isDelKey) {
|
||||
delAsync(key);
|
||||
}
|
||||
@@ -170,7 +171,7 @@ export async function checkMemberExists(code: string, serverId:string, roleId: s
|
||||
if(!battleRecord || battleRecord.status != 0 || roleId != battleRecord.roleId) {
|
||||
return false;
|
||||
}
|
||||
addBossScript(code, serverId, roleId);
|
||||
addBossInstance(code, serverId, roleId);
|
||||
flag = true;
|
||||
}
|
||||
return flag;
|
||||
|
||||
@@ -3,6 +3,7 @@ import { getJobInfoById } from '../pubUtils/gamedata';
|
||||
import { getTodayZeroPoint, nowSeconds } from '../pubUtils/timeUtil';
|
||||
import { GUILD_REPORT_NUM } from '../consts/constModules/guildConst';
|
||||
import { GuildTrainType, GuildTrainModel } from '../db/GuildTrain';
|
||||
import { GuildModel } from '../db/Guild';
|
||||
import { findWhere } from 'underscore';
|
||||
export async function getUserGuild(roleId: string, code: string) {
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId,'trainCount trainTime trainRewards');
|
||||
@@ -28,31 +29,64 @@ export async function recordUserGuild(roleId: string, code: string) {
|
||||
return userGuild;
|
||||
}
|
||||
|
||||
export function getGuildTrain (guildTrains, trainCount:number, trainRewards: Array<number>) {
|
||||
let list = [];
|
||||
list = guildTrains.map(({trainId, isComplete})=>{
|
||||
return ({trainId, isComplete, });
|
||||
});
|
||||
return { list, trainCount, trainRewards};
|
||||
}
|
||||
|
||||
export function getGuildTrainInfo (guildTrains: Array<GuildTrainType>, roleId: string, trainCount:number, trainRewards: Array<number>) {
|
||||
guildTrains.forEach(({trainId, isComplete, trainScripts, ranks, reports})=>{
|
||||
export function getGuildTrainRewards (guildTrain) {
|
||||
let trainBoxs = guildTrain.trainScripts.map(({hid, trainBoxs})=>{
|
||||
return {hid, recordBoxs: trainBoxs};
|
||||
})
|
||||
return { trainBoxs};
|
||||
}
|
||||
|
||||
export function getGuildTrainInfo (guildTrains: Array<GuildTrainType>, roleId: string, trainCount:number, trainRewards: Array<number>, trainIds:Array<number>) {
|
||||
let guildTrain;
|
||||
guildTrains.map(({trainId, isComplete, trainScripts, ranks, reports})=>{
|
||||
if (trainIds.indexOf(trainId) == -1) {
|
||||
return;
|
||||
}
|
||||
ranks.sort(function(a, b) {
|
||||
return b.score - a.score;
|
||||
});
|
||||
let myRank = {};
|
||||
ranks.forEach(({roleId: rankRoleId, score}, index)=>{
|
||||
let resRanks = ranks.map(({roleId: rankRoleId, score}, index)=>{
|
||||
if (roleId == rankRoleId)
|
||||
myRank = {roleId: rankRoleId, score, rankLv: index+1};
|
||||
return {roleId: rankRoleId, score, rankLv: index+1};
|
||||
});
|
||||
let guildTrain = findWhere(guildTrains, { trainId: trainId - 1});
|
||||
if (!!guildTrain) {
|
||||
let lenNum = guildTrain.reports.length;
|
||||
let resTrainBoxs = [];
|
||||
let resTrainScripts = trainScripts.map(({hid, progress, time, trainBoxs})=>{
|
||||
resTrainBoxs.push({hid, recordBoxs: trainBoxs});
|
||||
return {hid, progress, time};
|
||||
})
|
||||
let lastGuildTrain = findWhere(guildTrains, { trainId: trainId - 1});
|
||||
if (!!lastGuildTrain) {
|
||||
let lenNum = lastGuildTrain.reports.length;
|
||||
if (lenNum < GUILD_REPORT_NUM)
|
||||
reports = [...guildTrain.reports, ...reports]
|
||||
reports = [...lastGuildTrain.reports, ...reports];
|
||||
else {
|
||||
let trainReports = guildTrain.reports.splice(lenNum - GUILD_REPORT_NUM - 1, GUILD_REPORT_NUM);
|
||||
reports = [...trainReports, ...reports]
|
||||
let trainReports = lastGuildTrain.reports.splice(lenNum - GUILD_REPORT_NUM - 1, GUILD_REPORT_NUM);
|
||||
reports = [...trainReports, ...reports];
|
||||
}
|
||||
let flag = false;
|
||||
let lastTrainBoxs = lastGuildTrain.trainScripts.map(({hid, time, trainBoxs}) => {
|
||||
if (time + 24 * 60 * 60 < nowSeconds()) {
|
||||
flag = true;
|
||||
}
|
||||
return {};
|
||||
});
|
||||
if (flag) {
|
||||
resTrainBoxs.push(...lastTrainBoxs);
|
||||
}
|
||||
}
|
||||
return {trainId, isComplete, trainScripts, reports, myRank, ranks};
|
||||
guildTrain = {trainId, isComplete, trainScripts: resTrainScripts, trainBoxs: resTrainBoxs, reports, myRank, ranks: resRanks};
|
||||
});
|
||||
return { list: guildTrains, trainCount, trainRewards};
|
||||
return { guildTrain, trainCount, trainRewards};
|
||||
}
|
||||
|
||||
export async function lockTrain(code: string, trainId: number) {
|
||||
@@ -60,5 +94,8 @@ export async function lockTrain(code: string, trainId: number) {
|
||||
if (!!guildTrain) {
|
||||
return;
|
||||
}
|
||||
|
||||
let trainScripts;
|
||||
guildTrain = await GuildTrainModel.openGuildTrain(code, trainId, trainScripts);
|
||||
await GuildModel.updateInfo(code, {trainId});
|
||||
return guildTrain;
|
||||
}
|
||||
@@ -49,7 +49,10 @@ export async function lockData(serverId: string, dataName: string, id: string )
|
||||
let key = 'serverId_'+serverId+'_'+dataName+'_'+id;
|
||||
let lockKey = 'locks:' + key;
|
||||
console.log(' lockKey = '+ lockKey);
|
||||
_redlockCache.redlock.lock(lockKey, _redlockCache.ttl).then(function(lock) {
|
||||
return await lock(lockKey);
|
||||
}
|
||||
function lock(lockKey: string) {
|
||||
return _redlockCache.redlock.lock(lockKey, _redlockCache.ttl).then(function(lock) {
|
||||
setLock(lockKey, lock);
|
||||
return {err: null, releaseCallback: releaseCallback.bind(null, lockKey)};
|
||||
}).catch(function(err) {
|
||||
@@ -57,7 +60,6 @@ export async function lockData(serverId: string, dataName: string, id: string )
|
||||
return { err };
|
||||
});
|
||||
}
|
||||
|
||||
export async function releaseCallback(lockKey: string) {
|
||||
releaseLock(lockKey);
|
||||
}
|
||||
@@ -117,8 +117,9 @@ export enum GUILD_REC_TYPE {
|
||||
IMPEACH = 11, // 弹劾 roleName roleName
|
||||
}
|
||||
export enum GUILD_DATA_NAME {
|
||||
BOSS_SCRIPT = 'BossScript',
|
||||
TRAIN = 'BossScript',
|
||||
BOSS_SCRIPT = 'BossInstance',
|
||||
TRAIN = 'BossInstance',
|
||||
TRAIN_BOX = 'BossInstanceBox',
|
||||
}
|
||||
|
||||
export const GUILD_REPORT_NUM = 40;
|
||||
|
||||
@@ -221,6 +221,10 @@ export const STATUS = {
|
||||
GUILD_TRAIN_SCRIPT_NOT_OPENED: {code: 30910, simStr: '试炼关卡未开启'},
|
||||
GUILD_TRAIN_BATTLE_COUNT_NOT_ENOUGH: {code: 30911, simStr: '试炼挑战次数已用完'},
|
||||
GUILD_TRAIN_IS_COMPLETE: {code: 30912, simStr: '试炼关卡已经被压制'},
|
||||
GUILD_GET_TRAIN_BOX_FAIL: {code: 30913, simStr: '宝箱领取失败'},
|
||||
GUILD_TRAIN_REWARD_IS_RECEIVED: {code: 30913, simStr: '试炼进阶奖励已领取'},
|
||||
GUILD_GET_TRAIN_REWARD_FAIL: {code: 30913, simStr: '宝箱领取失败'},
|
||||
|
||||
// 社交相关状态 40000 - 49999
|
||||
// 运营模块相关状态 50000 - 59999
|
||||
// GM后台相关状态 60000 - 69999
|
||||
|
||||
102
shared/db/BossInstance.ts
Normal file
102
shared/db/BossInstance.ts
Normal file
@@ -0,0 +1,102 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
|
||||
class Rank {
|
||||
@prop({ required: true })
|
||||
roleId: string;
|
||||
@prop({ required: true })
|
||||
score: number;
|
||||
@prop({ required: true })
|
||||
time: number;
|
||||
}
|
||||
|
||||
class LastRecord {
|
||||
@prop({ required: true, default: 0 })
|
||||
warId: number;
|
||||
@prop({ required: true})
|
||||
roleIds: Array<string>;
|
||||
}
|
||||
|
||||
@index({ guildCode: 1 })
|
||||
export default class BossInstance extends BaseModel {
|
||||
@prop({ required: true })
|
||||
guildCode: string;
|
||||
|
||||
@prop({ required: true })
|
||||
warId: number;
|
||||
|
||||
@prop({ required: true })
|
||||
bossHp: number;
|
||||
|
||||
@prop({ required: true, type: Rank, default:[]})
|
||||
ranks:Array<Rank>;
|
||||
|
||||
@prop({ required: true })
|
||||
startTime: number;
|
||||
|
||||
@prop({ required: true, default: 0})
|
||||
num: number;
|
||||
|
||||
@prop({ required: true, default:[]})
|
||||
roleIdRecords: Array<string>; //记录提示过胜利boss关的玩家
|
||||
|
||||
@prop({ required: true })
|
||||
winWarId: number; //记录上一次通关的关卡
|
||||
|
||||
@prop({ required: true })
|
||||
winTime: number; //记录上一次通关的时间
|
||||
|
||||
@prop({ required: true, default: 0})
|
||||
winNum: number;
|
||||
|
||||
@prop({ required: true, type: Rank, default:[]})
|
||||
recordRanks:Array<Rank>;
|
||||
|
||||
@prop({ required: true, default: false })
|
||||
winSettled: boolean; //胜利是否结算过
|
||||
public static async findBossInstance(guildCode: string, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOne({ guildCode }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async openBossInstance(guildCode: string, bossHp: number, warId: number, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode },{ranks:[], time: nowSeconds(), bossHp, warId, $inc: { recordNum: 1 }}, {new: true, upsert: true}).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
//记录玩家boss通关后首次查看boss关卡
|
||||
public static async recordRoleIdWhenCheck(guildCode: string, roleId: string, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode }, { $push:{ roleIdRecords: roleId } }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async pushRecordRanks(guildCode: string, recordRank: Rank, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode }, { $push:{ recordRanks: recordRank } }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async pushRanks(guildCode: string, rank: Rank, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode }, { $push:{ ranks: rank } }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async updateBossInstance(guildCode: string, update:BossInstanceTypeParam, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode }, { $set:update }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async updateBossHp(guildCode: string, hp: number, roleId: string, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode, 'ranks.roleId': roleId, bossHp: { $gte: hp } }, { $inc: { bossHp: - hp ,'ranks.$.score': hp}, }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async updateRank(guildCode: string, roleId: string, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode, 'ranks.roleId': roleId }, { $set:{ 'ranks.$.time': nowSeconds() } }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
}
|
||||
|
||||
export const BossInstanceModel = getModelForClass(BossInstance);
|
||||
|
||||
export interface BossInstanceType extends Pick<DocumentType<BossInstance>, keyof BossInstance> {};
|
||||
export type BossInstanceTypeParam = Partial<BossInstanceType>; // 将所有字段变成可选项
|
||||
@@ -1,97 +0,0 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
|
||||
class Rank {
|
||||
@prop({ required: true })
|
||||
roleId: string;
|
||||
@prop({ required: true })
|
||||
score: number;
|
||||
@prop({ required: true })
|
||||
time: number;
|
||||
}
|
||||
|
||||
class LastRecord {
|
||||
@prop({ required: true, default: 0 })
|
||||
warId: number;
|
||||
@prop({ required: true})
|
||||
roleIds: Array<string>;
|
||||
}
|
||||
|
||||
@index({ guildCode: 1 })
|
||||
export default class BossScript extends BaseModel {
|
||||
@prop({ required: true })
|
||||
guildCode: string;
|
||||
|
||||
@prop({ required: true })
|
||||
warId: number;
|
||||
|
||||
@prop({ required: true })
|
||||
bossHp: number;
|
||||
|
||||
@prop({ required: true, type: Rank, default:[]})
|
||||
ranks:Array<Rank>;
|
||||
|
||||
@prop({ required: true })
|
||||
time: number;
|
||||
|
||||
@prop({ required: true, default: 0})
|
||||
num: number;
|
||||
|
||||
@prop({ required: true, default:[]})
|
||||
roleIdRecords: Array<string>; //记录提示过胜利boss关的玩家
|
||||
|
||||
@prop({ required: true })
|
||||
winWarId: number; //记录上一次通关的关卡
|
||||
|
||||
@prop({ required: true })
|
||||
winTime: number; //记录上一次通关的时间
|
||||
|
||||
@prop({ required: true, default: 0})
|
||||
winNum: number;
|
||||
|
||||
@prop({ required: true, type: Rank, default:[]})
|
||||
recordRanks:Array<Rank>;
|
||||
|
||||
@prop({ required: true, default: false })
|
||||
winSettled: boolean; //胜利是否结算过
|
||||
public static async findBossScript(guildCode: string, lean = true) {
|
||||
const bossScript: BossScriptType = await BossScriptModel.findOne({ guildCode }).lean(lean);
|
||||
return bossScript;
|
||||
}
|
||||
|
||||
public static async openBossScript(guildCode: string, bossHp: number, warId: number, lean = true) {
|
||||
const bossScript: BossScriptType = await BossScriptModel.findOneAndUpdate({ guildCode },{ranks:[], time: nowSeconds(), bossHp, warId, $inc: { recordNum: 1 }}, {new: true, upsert: true}).lean(lean);
|
||||
return bossScript;
|
||||
}
|
||||
//记录玩家boss通关后首次查看boss关卡
|
||||
public static async recordRoleIdWhenCheck(guildCode: string, roleId: string, lean = true) {
|
||||
const bossScript: BossScriptType = await BossScriptModel.findOneAndUpdate({ guildCode }, { $push:{ roleIdRecords: roleId } }).lean(lean);
|
||||
return bossScript;
|
||||
}
|
||||
|
||||
public static async pushRecordRanks(guildCode: string, recordRank: Rank, lean = true) {
|
||||
const bossScript: BossScriptType = await BossScriptModel.findOneAndUpdate({ guildCode }, { $push:{ recordRanks: recordRank } }).lean(lean);
|
||||
return bossScript;
|
||||
}
|
||||
|
||||
public static async pushRanks(guildCode: string, rank: Rank, lean = true) {
|
||||
const bossScript: BossScriptType = await BossScriptModel.findOneAndUpdate({ guildCode }, { $push:{ recordRanks: rank } }).lean(lean);
|
||||
return bossScript;
|
||||
}
|
||||
|
||||
public static async updateBossScript(guildCode: string, update:BossScriptTypeParam, lean = true) {
|
||||
const bossScript: BossScriptType = await BossScriptModel.findOneAndUpdate({ guildCode }, { $set:update }).lean(lean);
|
||||
return bossScript;
|
||||
}
|
||||
|
||||
public static async updateBossHp(guildCode: string, hp: number, roleId: string, lean = true) {
|
||||
const bossScript: BossScriptType = await BossScriptModel.findOneAndUpdate({ guildCode, 'ranks.roleId': roleId, bossHp: { $gt: 0 } }, { $inc: { bossHp: - hp ,'ranks.$.score': hp}, }).lean(lean);
|
||||
return bossScript;
|
||||
}
|
||||
}
|
||||
|
||||
export const BossScriptModel = getModelForClass(BossScript);
|
||||
|
||||
export interface BossScriptType extends Pick<DocumentType<BossScript>, keyof BossScript> {};
|
||||
export type BossScriptTypeParam = Partial<BossScriptType>; // 将所有字段变成可选项
|
||||
@@ -8,7 +8,7 @@ class Structure {
|
||||
@prop({ required: true })
|
||||
id: number;
|
||||
@prop({ required: true })
|
||||
lv: number;
|
||||
lv: number;
|
||||
}
|
||||
|
||||
@index({ code: 1 })
|
||||
@@ -77,6 +77,8 @@ export default class Guild extends BaseModel {
|
||||
@prop({ required: true, default: 1, select: false })
|
||||
serverId: number; // 分服
|
||||
|
||||
@prop({ required: true, default: 1 })
|
||||
trainId: number; // 试炼id
|
||||
public static async createGuild(params: { name: string, icon: number, notice: string }, role: RoleType, serverId: number) {
|
||||
const doc = new GuildModel();
|
||||
const update = Object.assign(doc.toJSON(), params, { leader: role._id, members: [role.roleId], guildCe: role.ce, serverId });
|
||||
@@ -143,7 +145,7 @@ export default class Guild extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async updateInfo(code: string, update: GuildUpdateParam, incParam: { managerCnt?: number }, select?: string) {
|
||||
public static async updateInfo(code: string, update: GuildUpdateParam, incParam?: { managerCnt?: number }, select?: string) {
|
||||
const result: GuildType = await GuildModel.findOneAndUpdate({ code }, { $set: update, $inc: incParam }, { new: true }).select(select).lean();
|
||||
return result;
|
||||
}
|
||||
@@ -162,6 +164,11 @@ export default class Guild extends BaseModel {
|
||||
const result: GuildType = await GuildModel.findOneAndUpdate({ code, fund: {$gte: cost}}, { $inc: { fund: -1 * cost } }, {new: true}).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findGuild(code: string, serverId: number, select?: string, lean = true) {
|
||||
const result = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId }).select(select).lean(lean);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const GuildModel = getModelForClass(Guild);
|
||||
|
||||
@@ -1,8 +1,19 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
|
||||
class Reward {
|
||||
@prop({ required: true })
|
||||
id: number;
|
||||
@prop({ required: true })
|
||||
count: number;
|
||||
}
|
||||
|
||||
class TrainBox {
|
||||
|
||||
@prop({ required: true })
|
||||
roleId: string;
|
||||
@prop({ required: true, type: Reward })
|
||||
good: Reward;
|
||||
@prop({ required: true })
|
||||
index: number;
|
||||
}
|
||||
|
||||
class TrainScript {
|
||||
@@ -56,16 +67,21 @@ export default class GuildTrain extends BaseModel {
|
||||
@prop({ required: true, default: false})
|
||||
locked: boolean;
|
||||
|
||||
public static async findGuildTrain(guildCode: string, locked = false, lean = true) {
|
||||
const guildTrain: GuildTrainType[] = await GuildTrainModel.findOne({ guildCode, locked }).lean(lean);
|
||||
public static async findGuildTrain(guildCode: string, select?: string, locked = false, lean = true) {
|
||||
const guildTrains: GuildTrainType[] = await GuildTrainModel.find({ guildCode, locked }).select(select).lean(lean);
|
||||
return guildTrains;
|
||||
}
|
||||
|
||||
public static async findGuildTrainByTrainIds(guildCode: string, trainIds:Array<number>, locked = false, lean = true) {
|
||||
const guildTrains: GuildTrainType[] = await GuildTrainModel.find({ trainId:{ $in:trainIds}, guildCode, locked }).lean(lean);
|
||||
return guildTrains;
|
||||
}
|
||||
|
||||
public static async findTrainByTrainIdNotLock(guildCode: string, trainId: number, select?: string, locked = false, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOne({ guildCode, trainId, locked }).select(select).lean(lean);
|
||||
return guildTrain;
|
||||
}
|
||||
|
||||
public static async findTrainByTrainIdNotLock(guildCode: string, trainId: number, locked = false, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOne({ guildCode, trainId, locked }).lean(lean);
|
||||
return guildTrain;
|
||||
}
|
||||
|
||||
public static async updateGuildTrain(guildCode: string, trainId: number, update: GuildTrainTypeParam, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId}, { $set: update }).lean(lean);
|
||||
return guildTrain;
|
||||
@@ -77,10 +93,22 @@ export default class GuildTrain extends BaseModel {
|
||||
return guildTrain;
|
||||
}
|
||||
|
||||
public static async openGuildTrain() {
|
||||
// const bossScript: BossScriptType = await BossScriptModel.findOneAndUpdate({ guildCode },{ranks:[], time: nowSeconds(), bossHp, warId, $inc: { recordNum: 1 }}, {new: true, upsert: true}).lean(lean);
|
||||
public static async openGuildTrain(guildCode: string, trainId: number, trainScripts: Array<TrainScript>, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId },{ trainId, reports: [], locked: false, ranks: [], trainScripts, isComplete: false, guildCode}, {new: true, upsert: true}).lean(lean);
|
||||
return guildTrain;
|
||||
}
|
||||
|
||||
public static async findTrainScriptBoxByIndex(guildCode: string, roleId: string, trainId: number, hid: number, index: number, progress: number, time, locked = false, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOne({ guildCode, trainId, locked, 'trainScripts.hid': hid,
|
||||
'trainScripts.index':{$ne:index },'trainScripts.roleId':{$ne:roleId }, progress: {$gte: progress}, time:{$gte: time}}).lean(lean);
|
||||
return guildTrain;
|
||||
}
|
||||
|
||||
public static async receiveBoxByIndex(guildCode: string, roleId: string, trainId: number, hid: number, index: number, good: Reward, locked = false, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId, locked, 'trainScripts.hid': hid, },
|
||||
{ $push:{ 'trainScripts.$.trainBoxs': {roleId, index, good} }} ).lean(lean);
|
||||
return guildTrain;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -128,6 +128,12 @@ export default class UserGuild extends BaseModel {
|
||||
const result = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON }, { $inc: { honourWeekly: inc } }, { new: true }).select(select).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async receiveTrainRewards(roleId: string, trainId: number, lean = true) {
|
||||
const result = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON, 'trainRewards':{$ne: trainId }},
|
||||
{$push:{trainRewards: trainId} }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const UserGuildModel = getModelForClass(UserGuild);
|
||||
|
||||
@@ -330,4 +330,8 @@ export function getStructureConsume(structureId: number, level: number) {
|
||||
|
||||
export function hasStructureConsume(structureId: number, level: number) {
|
||||
return gameData.structureConsume.get(structureId).has(level);
|
||||
}
|
||||
|
||||
export function getBossByLv(lv: number) {
|
||||
return gameData.bossBase.get(lv);
|
||||
}
|
||||
@@ -52,17 +52,20 @@ export interface DicBossBase {
|
||||
// boss等级
|
||||
readonly bossLevel: number;
|
||||
// 关卡id
|
||||
readonly warId: number;
|
||||
readonly wars: Array<{warId:number, bossHp:number}>;
|
||||
// 掉落的拍卖行奖励
|
||||
readonly reward: RewardInter[];
|
||||
|
||||
readonly consume: number;
|
||||
}
|
||||
|
||||
const DicBossKeys: KeysEnum<DicBossBase> = {
|
||||
id: true,
|
||||
level: true,
|
||||
bossLevel: true,
|
||||
warId: true,
|
||||
reward: true
|
||||
wars: true,
|
||||
reward: true,
|
||||
consume: true
|
||||
};
|
||||
|
||||
// 练兵场
|
||||
@@ -181,6 +184,13 @@ let arrBoss = JSON.parse(strBoss);
|
||||
arrBoss.forEach(o => {
|
||||
setStructureConsume(o);
|
||||
o.reward = parseGoodStr(o.reward);
|
||||
o.wars = o.warIdHP.split('|').map((warStrs)=> {
|
||||
if (!warStrs) {
|
||||
return;
|
||||
}
|
||||
let warArr = warStrs.split('&');
|
||||
return { warId: parseInt(warArr[0]), bossHp: parseInt(warArr[1])}
|
||||
});
|
||||
dicBossBase.set(o.level, _.pick(o, Object.keys(DicBossKeys)));
|
||||
});
|
||||
arrBoss = undefined;
|
||||
|
||||
@@ -4,7 +4,6 @@ import { HeroModel, HeroType } from '../db/Hero';
|
||||
|
||||
import fs = require('fs');
|
||||
import path = require('path');
|
||||
import { DicRandomEffectPool } from './dictionary/DicRandomEffectPool';
|
||||
import { HERO_CE_RATIO, ABI_STAGE } from '../consts';
|
||||
|
||||
import { findIndex } from 'underscore';
|
||||
@@ -167,9 +166,6 @@ export async function calculateSumCE(roleId: string, type: number, param: { num?
|
||||
return sum;
|
||||
}
|
||||
|
||||
export function getRandomByLen(arr: Array<number>): number
|
||||
export function getRandomByLen(arr: Array<string>): string
|
||||
export function getRandomByLen(arr: Array<DicRandomEffectPool>): DicRandomEffectPool
|
||||
export function getRandomByLen(arr: Array<any>): any {
|
||||
let len = arr.length;
|
||||
return arr[Math.floor(Math.random() * len)]
|
||||
|
||||
@@ -1,117 +1,117 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "创建军团",
|
||||
"name": " 创建军团",
|
||||
"authority": "4&"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "显示所有军团列表",
|
||||
"name": " 显示所有军团列表",
|
||||
"authority": "1&2&3&4"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "申请加入军团",
|
||||
"name": " 申请加入军团",
|
||||
"authority": "4&"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "查看军团详细(头像,名字,人数,团长,等级,战力,公告,需求等)",
|
||||
"name": " 查看军团详细(头像,名字,人数,团长,等级,战力,公告,需求等) ",
|
||||
"authority": "1&2&3&4"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "团员查看自己军团详细(资金,军团活跃,自己的职位,自己的功勋)",
|
||||
"name": " 团员查看自己军团详细(资金,军团活跃,自己的职位,自己的功勋) ",
|
||||
"authority": "1&2&3"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "玩家查看自己被邀请的军团",
|
||||
"name": " 玩家查看自己被邀请的军团",
|
||||
"authority": "4&"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "玩家接受邀请",
|
||||
"name": " 玩家接受邀请",
|
||||
"authority": "4&"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "查看成员列表(仅名字,职位,登录时间)",
|
||||
"name": " 查看成员列表(仅名字,职位,登录时间)",
|
||||
"authority": "1&2&3&4"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "查看成员列表(名字,管理职务,战力,功勋,登录时间)",
|
||||
"name": " 查看成员列表(名字,管理职务,战力,功勋,登录时间)",
|
||||
"authority": "1&2&3"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "查看成员列表(任命,罢免,转让 按钮)",
|
||||
"name": " 查看成员列表(任命,罢免,转让 按钮)",
|
||||
"authority": "1&"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "修改公会名,公告信息,加入条件,是否自动加入",
|
||||
"name": " 修改公会名,公告信息,加入条件,是否自动加入",
|
||||
"authority": "1&2"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "查看申请列表",
|
||||
"name": " 查看申请列表",
|
||||
"authority": "1&2"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "(一键)同意/拒绝加入",
|
||||
"name": " (一键)同意/拒绝加入",
|
||||
"authority": "1&2"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "查看/刷新 可邀请人列表",
|
||||
"name": " 查看/刷新 可邀请人列表",
|
||||
"authority": "1&2"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "邀请某人",
|
||||
"name": " 邀请某人",
|
||||
"authority": "1&2"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "发送消息给军团内所有成员的游戏",
|
||||
"name": " 发送消息给军团内所有成员的游戏",
|
||||
"authority": "1&2"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "招募(发送消息至世界频道)",
|
||||
"name": " 招募(发送消息至世界频道)",
|
||||
"authority": "1&2"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "踢人",
|
||||
"name": " 踢人",
|
||||
"authority": "1&"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "解散军团",
|
||||
"name": " 解散军团",
|
||||
"authority": "1&"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "退出军团",
|
||||
"name": " 退出军团",
|
||||
"authority": "2&3"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "弹劾团长",
|
||||
"name": " 弹劾团长",
|
||||
"authority": "2&3"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "消耗军团资金升级建筑物",
|
||||
"name": " 消耗军团资金升级建筑物",
|
||||
"authority": "1&2"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "获得军团动态",
|
||||
"name": " 获得军团动态",
|
||||
"authority": "1&2&3"
|
||||
},
|
||||
{
|
||||
@@ -138,10 +138,5 @@
|
||||
"id": 28,
|
||||
"name": "被弹劾",
|
||||
"authority": "1&"
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"name": "领取活跃宝箱",
|
||||
"authority": "1&2&3"
|
||||
}
|
||||
]
|
||||
@@ -4,7 +4,7 @@
|
||||
"structureId": 3,
|
||||
"level": 1,
|
||||
"bossLevel": 20,
|
||||
"warId": "8001&8002&8003&8004",
|
||||
"warIdHP": "8001&1000000|8002&1000000|8003&1000000|8004&1000000",
|
||||
"reward": "21008&40&1|42008&20&2",
|
||||
"consume": 5000,
|
||||
"buildWords": "&"
|
||||
@@ -14,7 +14,7 @@
|
||||
"structureId": 3,
|
||||
"level": 2,
|
||||
"bossLevel": 25,
|
||||
"warId": "8001&8002&8003&8004",
|
||||
"warIdHP": "8001&2000000|8002&2000000|8003&2000000|8004&2000000",
|
||||
"reward": "20001&60&1|21008&40&1|42008&20&2|42115&20&3",
|
||||
"consume": 6000,
|
||||
"buildWords": "&"
|
||||
@@ -24,7 +24,7 @@
|
||||
"structureId": 3,
|
||||
"level": 3,
|
||||
"bossLevel": 30,
|
||||
"warId": "8001&8002&8003&8004",
|
||||
"warIdHP": "8001&3000000|8002&3000000|8003&3000000|8004&3000000",
|
||||
"reward": "20001&60&1|21008&40&1|42008&20&2|42115&20&3",
|
||||
"consume": 7000,
|
||||
"buildWords": "&"
|
||||
@@ -34,7 +34,7 @@
|
||||
"structureId": 3,
|
||||
"level": 4,
|
||||
"bossLevel": 40,
|
||||
"warId": "8001&8002&8003&8004",
|
||||
"warIdHP": "8001&4000000|8002&4000000|8003&4000000|8004&4000000",
|
||||
"reward": "20001&60&1|21008&40&1|42008&20&2|42115&20&3",
|
||||
"consume": 8000,
|
||||
"buildWords": "&"
|
||||
@@ -44,7 +44,7 @@
|
||||
"structureId": 3,
|
||||
"level": 5,
|
||||
"bossLevel": 50,
|
||||
"warId": "8001&8002&8003&8004",
|
||||
"warIdHP": "8001&4000000|8002&4000000|8003&4000000|8004&4000000",
|
||||
"reward": "20001&60&1|21008&40&1|42008&20&2|42115&20&3",
|
||||
"consume": 9000,
|
||||
"buildWords": "&"
|
||||
@@ -54,7 +54,7 @@
|
||||
"structureId": 3,
|
||||
"level": 6,
|
||||
"bossLevel": 60,
|
||||
"warId": "8001&8002&8003&8004",
|
||||
"warIdHP": "8001&4000000|8002&4000000|8003&4000000|8004&4000000",
|
||||
"reward": "20001&60&1|21008&40&1|42008&20&2|42115&20&3",
|
||||
"consume": 10000,
|
||||
"buildWords": "&"
|
||||
@@ -64,7 +64,7 @@
|
||||
"structureId": 3,
|
||||
"level": 7,
|
||||
"bossLevel": 70,
|
||||
"warId": "8001&8002&8003&8004",
|
||||
"warIdHP": "8001&4000000|8002&4000000|8003&4000000|8004&4000000",
|
||||
"reward": "20001&60&1|21008&40&1|42008&20&2|42115&20&3",
|
||||
"consume": 11000,
|
||||
"buildWords": "&"
|
||||
@@ -74,7 +74,7 @@
|
||||
"structureId": 3,
|
||||
"level": 8,
|
||||
"bossLevel": 80,
|
||||
"warId": "8001&8002&8003&8004",
|
||||
"warIdHP": "8001&4000000|8002&4000000|8003&4000000|8004&4000000",
|
||||
"reward": "20001&60&1|21008&40&1|42008&20&2|42115&20&3",
|
||||
"consume": 12000,
|
||||
"buildWords": "&"
|
||||
@@ -84,7 +84,7 @@
|
||||
"structureId": 3,
|
||||
"level": 9,
|
||||
"bossLevel": 90,
|
||||
"warId": "8001&8002&8003&8004",
|
||||
"warIdHP": "8001&4000000|8002&4000000|8003&4000000|8004&4000000",
|
||||
"reward": "20001&60&1|21008&40&1|42008&20&2|42115&20&3",
|
||||
"consume": 13000,
|
||||
"buildWords": "&"
|
||||
@@ -94,7 +94,7 @@
|
||||
"structureId": 3,
|
||||
"level": 10,
|
||||
"bossLevel": 100,
|
||||
"warId": "8001&8002&8003&8004",
|
||||
"warIdHP": "8001&4000000|8002&4000000|8003&4000000|8004&4000000",
|
||||
"reward": "20001&60&1|21008&40&1|42008&20&2|42115&20&3",
|
||||
"consume": 15000,
|
||||
"buildWords": "&"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"structureId": 5,
|
||||
"structureId": 7,
|
||||
"level": 1,
|
||||
"donatevalue": "1&2000|2&10|2&20",
|
||||
"donateReward": "20&20|100&200|400&600",
|
||||
@@ -11,7 +11,7 @@
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"structureId": 5,
|
||||
"structureId": 7,
|
||||
"level": 2,
|
||||
"donatevalue": "1&4000|2&20|2&40",
|
||||
"donateReward": "40&40|200&400|600&1000",
|
||||
@@ -21,7 +21,7 @@
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"structureId": 5,
|
||||
"structureId": 7,
|
||||
"level": 3,
|
||||
"donatevalue": "1&6000|2&30|2&60",
|
||||
"donateReward": "60&60|300&600|800&1400",
|
||||
@@ -31,7 +31,7 @@
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"structureId": 5,
|
||||
"structureId": 7,
|
||||
"level": 4,
|
||||
"donatevalue": "1&8000|2&40|2&80",
|
||||
"donateReward": "80&80|400&800|1000&1800",
|
||||
@@ -41,7 +41,7 @@
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"structureId": 5,
|
||||
"structureId": 7,
|
||||
"level": 5,
|
||||
"donatevalue": "1&10000|2&50|2&100",
|
||||
"donateReward": "100&100|500&1000|1200&2200",
|
||||
@@ -51,7 +51,7 @@
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"structureId": 5,
|
||||
"structureId": 7,
|
||||
"level": 6,
|
||||
"donatevalue": "1&12000|2&60|2&120",
|
||||
"donateReward": "120&120|600&1200|1400&2600",
|
||||
@@ -61,7 +61,7 @@
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"structureId": 5,
|
||||
"structureId": 7,
|
||||
"level": 7,
|
||||
"donatevalue": "1&14000|2&70|2&140",
|
||||
"donateReward": "140&140|700&1400|1600&3000",
|
||||
@@ -71,7 +71,7 @@
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"structureId": 5,
|
||||
"structureId": 7,
|
||||
"level": 8,
|
||||
"donatevalue": "1&16000|2&80|2&160",
|
||||
"donateReward": "160&160|800&1600|1800&3400",
|
||||
@@ -81,7 +81,7 @@
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"structureId": 5,
|
||||
"structureId": 7,
|
||||
"level": 9,
|
||||
"donatevalue": "1&18000|2&90|2&180",
|
||||
"donateReward": "180&180|900&1800|2000&3800",
|
||||
@@ -91,7 +91,7 @@
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"structureId": 5,
|
||||
"structureId": 7,
|
||||
"level": 10,
|
||||
"donatevalue": "1&20000|2&100|2&200",
|
||||
"donateReward": "200&200|1000&2000|2200&4200",
|
||||
|
||||
52
shared/resource/jsons/dic_army_structureLevel.json
Normal file
52
shared/resource/jsons/dic_army_structureLevel.json
Normal file
@@ -0,0 +1,52 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"centreLevel": 1,
|
||||
"structureId": "5&6&7"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"centreLevel": 2,
|
||||
"structureId": "2&3&4"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"centreLevel": 3,
|
||||
"structureId": "&"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"centreLevel": 4,
|
||||
"structureId": "&"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"centreLevel": 5,
|
||||
"structureId": "&"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"centreLevel": 6,
|
||||
"structureId": "&"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"centreLevel": 7,
|
||||
"structureId": "&"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"centreLevel": 8,
|
||||
"structureId": "&"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"centreLevel": 9,
|
||||
"structureId": "&"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"centreLevel": 10,
|
||||
"structureId": "&"
|
||||
}
|
||||
]
|
||||
@@ -16,11 +16,5 @@
|
||||
"coinNum": 30,
|
||||
"blueprtNum": 3,
|
||||
"targetQuality": 4
|
||||
},
|
||||
{
|
||||
"quality": 4,
|
||||
"coinNum": 40,
|
||||
"blueprtNum": 3,
|
||||
"targetQuality": 5
|
||||
}
|
||||
]
|
||||
22
shared/resource/jsons/dic_blueprt_possibility .json
Normal file
22
shared/resource/jsons/dic_blueprt_possibility .json
Normal file
@@ -0,0 +1,22 @@
|
||||
[
|
||||
{
|
||||
"min": 20,
|
||||
"max": 39,
|
||||
"possibility": "1&100"
|
||||
},
|
||||
{
|
||||
"min": 40,
|
||||
"max": 59,
|
||||
"possibility": "1&70|2&30"
|
||||
},
|
||||
{
|
||||
"min": 60,
|
||||
"max": 79,
|
||||
"possibility": "2&70|3&30"
|
||||
},
|
||||
{
|
||||
"min": 80,
|
||||
"max": 100,
|
||||
"possibility": "2&60|3&40"
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,43 +2,43 @@
|
||||
{
|
||||
"type": 1,
|
||||
"name": "商店",
|
||||
"icon": 2,
|
||||
"icon": "tubiao2_shangcheng",
|
||||
"description": "去商店买呀"
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"name": "关卡",
|
||||
"icon": 3,
|
||||
"icon": "tubiao2_shangcheng",
|
||||
"description": "去关卡扫荡"
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"name": "招募",
|
||||
"icon": 4,
|
||||
"icon": "tubiao2_shangcheng",
|
||||
"description": "招募获得"
|
||||
},
|
||||
{
|
||||
"type": 4,
|
||||
"name": "活动",
|
||||
"icon": 5,
|
||||
"icon": "tubiao2_shangcheng",
|
||||
"description": "去活动页面"
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"name": "武将信息",
|
||||
"icon": 6,
|
||||
"icon": "tubiao2_shangcheng",
|
||||
"description": "去武将信息界面"
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"name": "合成界面",
|
||||
"icon": 7,
|
||||
"icon": "tubiao_hecheng",
|
||||
"description": "去合成界面"
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"name": "寻宝界面",
|
||||
"icon": 8,
|
||||
"icon": "tubiao2_shangcheng",
|
||||
"description": "去寻宝界面"
|
||||
}
|
||||
]
|
||||
@@ -11,7 +11,7 @@
|
||||
"suitLevel": "1&20",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "1&4",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -28,7 +28,7 @@
|
||||
"suitLevel": "1&20",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "2&3",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -45,7 +45,7 @@
|
||||
"suitLevel": "1&20",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "1&4",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -62,7 +62,7 @@
|
||||
"suitLevel": "1&20",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "16&17",
|
||||
"winDialogue": "18&",
|
||||
"loseDialogue": "19&"
|
||||
@@ -79,7 +79,7 @@
|
||||
"suitLevel": "1&20",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "16&17",
|
||||
"winDialogue": "18&",
|
||||
"loseDialogue": "19&"
|
||||
@@ -96,7 +96,7 @@
|
||||
"suitLevel": "1&20",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "20&21&22&23&24",
|
||||
"winDialogue": "25&",
|
||||
"loseDialogue": "26&"
|
||||
@@ -113,7 +113,7 @@
|
||||
"suitLevel": "1&20",
|
||||
"warId": 2001,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "5&6",
|
||||
"winDialogue": "3&",
|
||||
"loseDialogue": "7&"
|
||||
@@ -130,7 +130,7 @@
|
||||
"suitLevel": "1&20",
|
||||
"warId": 2002,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "27&28&29&30&31",
|
||||
"winDialogue": "32&33",
|
||||
"loseDialogue": "34&"
|
||||
@@ -147,7 +147,7 @@
|
||||
"suitLevel": "1&20",
|
||||
"warId": 2003,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "8&9&10&11",
|
||||
"winDialogue": "12&13",
|
||||
"loseDialogue": "14&15"
|
||||
@@ -164,7 +164,7 @@
|
||||
"suitLevel": "21&40",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "1&4",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -181,7 +181,7 @@
|
||||
"suitLevel": "21&40",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "2&3",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -198,7 +198,7 @@
|
||||
"suitLevel": "21&40",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "1&4",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -215,7 +215,7 @@
|
||||
"suitLevel": "21&40",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "16&17",
|
||||
"winDialogue": "18&",
|
||||
"loseDialogue": "19&"
|
||||
@@ -232,7 +232,7 @@
|
||||
"suitLevel": "21&40",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "16&17",
|
||||
"winDialogue": "18&",
|
||||
"loseDialogue": "19&"
|
||||
@@ -249,7 +249,7 @@
|
||||
"suitLevel": "21&40",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "20&21&22&23&24",
|
||||
"winDialogue": "25&",
|
||||
"loseDialogue": "26&"
|
||||
@@ -266,7 +266,7 @@
|
||||
"suitLevel": "21&40",
|
||||
"warId": 2001,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "5&6",
|
||||
"winDialogue": "3&",
|
||||
"loseDialogue": "7&"
|
||||
@@ -283,7 +283,7 @@
|
||||
"suitLevel": "21&40",
|
||||
"warId": 2002,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "27&28&29&30&31",
|
||||
"winDialogue": "32&33",
|
||||
"loseDialogue": "34&"
|
||||
@@ -300,7 +300,7 @@
|
||||
"suitLevel": "21&40",
|
||||
"warId": 2003,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "8&9&10&11",
|
||||
"winDialogue": "12&13",
|
||||
"loseDialogue": "14&15"
|
||||
@@ -317,7 +317,7 @@
|
||||
"suitLevel": "41&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "1&4",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -334,7 +334,7 @@
|
||||
"suitLevel": "41&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "2&3",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -351,7 +351,7 @@
|
||||
"suitLevel": "41&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "1&4",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -368,7 +368,7 @@
|
||||
"suitLevel": "41&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "16&17",
|
||||
"winDialogue": "18&",
|
||||
"loseDialogue": "19&"
|
||||
@@ -385,7 +385,7 @@
|
||||
"suitLevel": "41&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "16&17",
|
||||
"winDialogue": "18&",
|
||||
"loseDialogue": "19&"
|
||||
@@ -402,7 +402,7 @@
|
||||
"suitLevel": "41&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "20&21&22&23&24",
|
||||
"winDialogue": "25&",
|
||||
"loseDialogue": "26&"
|
||||
@@ -419,7 +419,7 @@
|
||||
"suitLevel": "41&100",
|
||||
"warId": 2001,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "5&6",
|
||||
"winDialogue": "3&",
|
||||
"loseDialogue": "7&"
|
||||
@@ -436,7 +436,7 @@
|
||||
"suitLevel": "41&100",
|
||||
"warId": 2002,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "27&28&29&30&31",
|
||||
"winDialogue": "32&33",
|
||||
"loseDialogue": "34&"
|
||||
@@ -453,7 +453,7 @@
|
||||
"suitLevel": "41&100",
|
||||
"warId": 2003,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "8&9&10&11",
|
||||
"winDialogue": "12&13",
|
||||
"loseDialogue": "14&15"
|
||||
@@ -470,7 +470,7 @@
|
||||
"suitLevel": "61&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "1&4",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -487,7 +487,7 @@
|
||||
"suitLevel": "61&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "2&3",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -504,7 +504,7 @@
|
||||
"suitLevel": "61&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "1&4",
|
||||
"winDialogue": "&",
|
||||
"loseDialogue": "&"
|
||||
@@ -521,7 +521,7 @@
|
||||
"suitLevel": "61&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "16&17",
|
||||
"winDialogue": "18&",
|
||||
"loseDialogue": "19&"
|
||||
@@ -538,7 +538,7 @@
|
||||
"suitLevel": "61&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "16&17",
|
||||
"winDialogue": "18&",
|
||||
"loseDialogue": "19&"
|
||||
@@ -555,7 +555,7 @@
|
||||
"suitLevel": "61&100",
|
||||
"warId": 0,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "20&21&22&23&24",
|
||||
"winDialogue": "25&",
|
||||
"loseDialogue": "26&"
|
||||
@@ -572,7 +572,7 @@
|
||||
"suitLevel": "61&100",
|
||||
"warId": 2001,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "5&6",
|
||||
"winDialogue": "3&",
|
||||
"loseDialogue": "7&"
|
||||
@@ -589,7 +589,7 @@
|
||||
"suitLevel": "61&100",
|
||||
"warId": 2002,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "27&28&29&30&31",
|
||||
"winDialogue": "32&33",
|
||||
"loseDialogue": "34&"
|
||||
@@ -606,7 +606,7 @@
|
||||
"suitLevel": "61&100",
|
||||
"warId": 2003,
|
||||
"weight": 1,
|
||||
"movePointArray": "44&46&48&50",
|
||||
"movePointArray": "26&27&28&29",
|
||||
"startDialogue": "8&9&10&11",
|
||||
"winDialogue": "12&13",
|
||||
"loseDialogue": "14&15"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"warType": 9,
|
||||
"gk_name": "地图1",
|
||||
"victoryInfoInUI": "5回合内杀死2个敌军",
|
||||
"victoryCondition ": "111&5&2&",
|
||||
"pvpVictoryCondition": "111&5&2&",
|
||||
"turnLimted": 10
|
||||
},
|
||||
{
|
||||
@@ -16,7 +16,7 @@
|
||||
"warType": 9,
|
||||
"gk_name": "地图2",
|
||||
"victoryInfoInUI": "我军死亡武将不超过2人",
|
||||
"victoryCondition ": "102&2&",
|
||||
"pvpVictoryCondition": "102&2&",
|
||||
"turnLimted": 10
|
||||
},
|
||||
{
|
||||
@@ -26,7 +26,7 @@
|
||||
"warType": 9,
|
||||
"gk_name": "地图3",
|
||||
"victoryInfoInUI": "我军全员生存",
|
||||
"victoryCondition ": "102&0&",
|
||||
"pvpVictoryCondition": "102&0&",
|
||||
"turnLimted": 10
|
||||
},
|
||||
{
|
||||
@@ -35,8 +35,8 @@
|
||||
"bg_img_id": 501,
|
||||
"warType": 9,
|
||||
"gk_name": "地图4",
|
||||
"victoryInfoInUI": "8回合内获得胜利",
|
||||
"victoryCondition ": "106&8&",
|
||||
"victoryInfoInUI": "10回合内获得胜利",
|
||||
"pvpVictoryCondition": "106&10&",
|
||||
"turnLimted": 10
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"warType": 9,
|
||||
"gk_name": "地图5",
|
||||
"victoryInfoInUI": "同一名武将击杀3名敌军",
|
||||
"victoryCondition ": "400&3&",
|
||||
"pvpVictoryCondition": "400&3&",
|
||||
"turnLimted": 10
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -12,7 +12,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 31,
|
||||
"info": "封怒状态描述文字",
|
||||
"showOnChar": "封怒"
|
||||
"showOnChar": "封怒",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 2,
|
||||
@@ -27,7 +30,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 27,
|
||||
"info": "援护状态描述文字",
|
||||
"showOnChar": "援护"
|
||||
"showOnChar": "援护",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 3,
|
||||
@@ -42,7 +48,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 43,
|
||||
"info": "封技状态描述文字",
|
||||
"showOnChar": "封技"
|
||||
"showOnChar": "封技",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 4,
|
||||
@@ -57,7 +66,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 45,
|
||||
"info": "激怒状态描述文字",
|
||||
"showOnChar": "激怒"
|
||||
"showOnChar": "激怒",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 5,
|
||||
@@ -72,7 +84,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 19,
|
||||
"info": "护盾状态描述文字",
|
||||
"showOnChar": "护盾"
|
||||
"showOnChar": "护盾",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 6,
|
||||
@@ -87,7 +102,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 14,
|
||||
"info": "共享状态描述文字",
|
||||
"showOnChar": "共享"
|
||||
"showOnChar": "共享",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 7,
|
||||
@@ -102,7 +120,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 32,
|
||||
"info": "定身状态描述文字",
|
||||
"showOnChar": "定身"
|
||||
"showOnChar": "定身",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 8,
|
||||
@@ -117,7 +138,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 1,
|
||||
"info": "昏迷状态描述文字",
|
||||
"showOnChar": "昏迷"
|
||||
"showOnChar": "昏迷",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 9,
|
||||
@@ -132,7 +156,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 1,
|
||||
"info": "共杀状态描述文字",
|
||||
"showOnChar": "共杀"
|
||||
"showOnChar": "共杀",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 10,
|
||||
@@ -147,7 +174,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 1,
|
||||
"info": "遏制状态描述文字",
|
||||
"showOnChar": "遏制"
|
||||
"showOnChar": "遏制",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 11,
|
||||
@@ -162,7 +192,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 1,
|
||||
"info": "睡眠状态描述文字",
|
||||
"showOnChar": "睡眠"
|
||||
"showOnChar": "睡眠",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 12,
|
||||
@@ -177,7 +210,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 1,
|
||||
"info": "免疫技能状态描述文字",
|
||||
"showOnChar": "免疫技能"
|
||||
"showOnChar": "免疫技能",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 13,
|
||||
@@ -192,7 +228,10 @@
|
||||
"dotOrHot": 1,
|
||||
"img": 1,
|
||||
"info": "每回合造成25%策攻的中毒伤害",
|
||||
"showOnChar": "中毒"
|
||||
"showOnChar": "中毒",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 14,
|
||||
@@ -207,7 +246,10 @@
|
||||
"dotOrHot": 1,
|
||||
"img": 1,
|
||||
"info": "燃烧状态描述文字",
|
||||
"showOnChar": "燃烧"
|
||||
"showOnChar": "燃烧",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 15,
|
||||
@@ -222,7 +264,10 @@
|
||||
"dotOrHot": 1,
|
||||
"img": 1,
|
||||
"info": "流血状态描述文字",
|
||||
"showOnChar": "流血"
|
||||
"showOnChar": "流血",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 16,
|
||||
@@ -237,7 +282,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 1,
|
||||
"info": "致死状态描述文字",
|
||||
"showOnChar": "致死"
|
||||
"showOnChar": "致死",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 17,
|
||||
@@ -252,7 +300,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "物攻上升 状态描述文字",
|
||||
"showOnChar": "物攻↑"
|
||||
"showOnChar": "物攻↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 18,
|
||||
@@ -267,7 +318,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "物攻下降状态描述文字",
|
||||
"showOnChar": "物攻↓"
|
||||
"showOnChar": "物攻↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 19,
|
||||
@@ -282,7 +336,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "策攻上升 状态描述文字",
|
||||
"showOnChar": "策攻↑"
|
||||
"showOnChar": "策攻↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 20,
|
||||
@@ -297,7 +354,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "策攻下降状态描述文字",
|
||||
"showOnChar": "策攻↓"
|
||||
"showOnChar": "策攻↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 21,
|
||||
@@ -312,7 +372,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "物防上升 状态描述文字",
|
||||
"showOnChar": "物防↑"
|
||||
"showOnChar": "物防↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 22,
|
||||
@@ -327,7 +390,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "物防下降状态描述文字",
|
||||
"showOnChar": "物防↓"
|
||||
"showOnChar": "物防↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 23,
|
||||
@@ -342,7 +408,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "策防上升 状态描述文字",
|
||||
"showOnChar": "策防↑"
|
||||
"showOnChar": "策防↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 24,
|
||||
@@ -357,7 +426,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "策防下降状态描述文字",
|
||||
"showOnChar": "策防↓"
|
||||
"showOnChar": "策防↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 25,
|
||||
@@ -372,7 +444,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "敏捷上升 状态描述文字",
|
||||
"showOnChar": "敏捷↑"
|
||||
"showOnChar": "敏捷↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 26,
|
||||
@@ -387,7 +462,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "敏捷下降20%",
|
||||
"showOnChar": "敏捷↓"
|
||||
"showOnChar": "敏捷↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 27,
|
||||
@@ -402,7 +480,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "幸运上升20%",
|
||||
"showOnChar": "幸运↑"
|
||||
"showOnChar": "幸运↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 28,
|
||||
@@ -417,7 +498,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "幸运下降状态描述文字",
|
||||
"showOnChar": "幸运↓"
|
||||
"showOnChar": "幸运↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 29,
|
||||
@@ -432,7 +516,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "命中上升 状态描述文字",
|
||||
"showOnChar": "命中↑"
|
||||
"showOnChar": "命中↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 30,
|
||||
@@ -447,7 +534,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "命中下降状态描述文字",
|
||||
"showOnChar": "命中↓"
|
||||
"showOnChar": "命中↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 31,
|
||||
@@ -462,7 +552,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "暴击上升 状态描述文字",
|
||||
"showOnChar": "暴击↑"
|
||||
"showOnChar": "暴击↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 32,
|
||||
@@ -477,7 +570,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "暴击下降状态描述文字",
|
||||
"showOnChar": "暴击↓"
|
||||
"showOnChar": "暴击↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 33,
|
||||
@@ -492,7 +588,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "格挡上升 状态描述文字",
|
||||
"showOnChar": "格挡↑"
|
||||
"showOnChar": "格挡↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 34,
|
||||
@@ -507,7 +606,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "格挡下降状态描述文字",
|
||||
"showOnChar": "格挡↓"
|
||||
"showOnChar": "格挡↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 35,
|
||||
@@ -522,7 +624,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "抗暴上升 状态描述文字",
|
||||
"showOnChar": "抗暴↑"
|
||||
"showOnChar": "抗暴↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 36,
|
||||
@@ -537,7 +642,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "抗暴下降状态描述文字",
|
||||
"showOnChar": "抗暴↓"
|
||||
"showOnChar": "抗暴↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 37,
|
||||
@@ -552,7 +660,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "伤害加深上升 状态描述文字",
|
||||
"showOnChar": "增伤↑"
|
||||
"showOnChar": "增伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 38,
|
||||
@@ -567,7 +678,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "伤害加深下降状态描述文字",
|
||||
"showOnChar": "增伤↓"
|
||||
"showOnChar": "增伤↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 39,
|
||||
@@ -582,7 +696,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "伤害加深上升 状态描述文字",
|
||||
"showOnChar": "增伤↑"
|
||||
"showOnChar": "增伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 40,
|
||||
@@ -597,7 +714,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "伤害减免下降状态描述文字",
|
||||
"showOnChar": "减伤↓"
|
||||
"showOnChar": "减伤↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 41,
|
||||
@@ -612,7 +732,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "忽视防御上升 状态描述文字",
|
||||
"showOnChar": "忽视防御"
|
||||
"showOnChar": "忽视防御",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 42,
|
||||
@@ -627,7 +750,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 1,
|
||||
"info": "吸血上升 状态描述文字",
|
||||
"showOnChar": "吸血↑"
|
||||
"showOnChar": "吸血↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 43,
|
||||
@@ -642,7 +768,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "物理伤害加深上升 状态描述文字",
|
||||
"showOnChar": "增伤↑"
|
||||
"showOnChar": "增伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 44,
|
||||
@@ -657,7 +786,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "攻击时,物理伤害加深下降25%",
|
||||
"showOnChar": "增伤↓"
|
||||
"showOnChar": "增伤↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 45,
|
||||
@@ -672,7 +804,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "策略伤害加深上升 状态描述文字",
|
||||
"showOnChar": "增伤↑"
|
||||
"showOnChar": "增伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 46,
|
||||
@@ -687,7 +822,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 3,
|
||||
"info": "策略伤害加深降低10%",
|
||||
"showOnChar": "增伤↓"
|
||||
"showOnChar": "增伤↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 47,
|
||||
@@ -702,7 +840,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 5,
|
||||
"info": "灵质Ⅳ状态描述文字",
|
||||
"showOnChar": "灵质Ⅳ"
|
||||
"showOnChar": "灵质Ⅳ",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 48,
|
||||
@@ -717,7 +858,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 19,
|
||||
"info": "护盾(攻击百分比)状态描述文字",
|
||||
"showOnChar": "护盾"
|
||||
"showOnChar": "护盾",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 49,
|
||||
@@ -732,7 +876,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "物防上升 状态描述文字",
|
||||
"showOnChar": "物防↑"
|
||||
"showOnChar": "物防↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 50,
|
||||
@@ -747,7 +894,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 16,
|
||||
"info": "白面怪(提升攻击,双防)状态描述文字",
|
||||
"showOnChar": "白面怪"
|
||||
"showOnChar": "白面怪",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 51,
|
||||
@@ -762,7 +912,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 5,
|
||||
"info": "两栖作战状态描述文字",
|
||||
"showOnChar": "两栖作战"
|
||||
"showOnChar": "两栖作战",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 52,
|
||||
@@ -777,7 +930,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 19,
|
||||
"info": "可以抵消自身生命10%伤害的护盾",
|
||||
"showOnChar": "护盾"
|
||||
"showOnChar": "护盾",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 53,
|
||||
@@ -792,7 +948,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "物攻上升 状态描述文字",
|
||||
"showOnChar": "物攻↑"
|
||||
"showOnChar": "物攻↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 54,
|
||||
@@ -807,7 +966,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 18,
|
||||
"info": "蓄势状态描述文字",
|
||||
"showOnChar": "蓄势"
|
||||
"showOnChar": "蓄势",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 55,
|
||||
@@ -822,7 +984,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "伤害减免增加20%",
|
||||
"showOnChar": "减伤↑"
|
||||
"showOnChar": "减伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 56,
|
||||
@@ -837,7 +1002,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "物理伤害减免下降状态描述文字",
|
||||
"showOnChar": "减伤↓"
|
||||
"showOnChar": "减伤↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 57,
|
||||
@@ -852,7 +1020,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "策略伤害减免上升20%",
|
||||
"showOnChar": "减伤↑"
|
||||
"showOnChar": "减伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 58,
|
||||
@@ -867,7 +1038,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "策略伤害减免下降状态描述文字",
|
||||
"showOnChar": "减伤↓"
|
||||
"showOnChar": "减伤↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 59,
|
||||
@@ -882,7 +1056,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 5,
|
||||
"info": "灵质Ⅰ状态描述文字",
|
||||
"showOnChar": "灵质Ⅰ"
|
||||
"showOnChar": "灵质Ⅰ",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 60,
|
||||
@@ -897,7 +1074,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 5,
|
||||
"info": "灵质Ⅱ状态描述文字",
|
||||
"showOnChar": "灵质Ⅱ"
|
||||
"showOnChar": "灵质Ⅱ",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 61,
|
||||
@@ -912,7 +1092,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 5,
|
||||
"info": "灵质Ⅲ状态描述文字",
|
||||
"showOnChar": "灵质Ⅲ"
|
||||
"showOnChar": "灵质Ⅲ",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 62,
|
||||
@@ -927,7 +1110,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "伤害减免上升10%",
|
||||
"showOnChar": "减伤↑"
|
||||
"showOnChar": "减伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 63,
|
||||
@@ -942,7 +1128,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 19,
|
||||
"info": "护盾(溢出治疗量)状态描述文字",
|
||||
"showOnChar": "护盾"
|
||||
"showOnChar": "护盾",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 64,
|
||||
@@ -957,7 +1146,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 19,
|
||||
"info": "可以抵消自身攻击30%伤害的护盾",
|
||||
"showOnChar": "护盾"
|
||||
"showOnChar": "护盾",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 65,
|
||||
@@ -972,7 +1164,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 44,
|
||||
"info": "回春状态描述文字",
|
||||
"showOnChar": "回春"
|
||||
"showOnChar": "回春",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 66,
|
||||
@@ -987,7 +1182,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 3,
|
||||
"info": "策略伤害加深降低20%",
|
||||
"showOnChar": "增伤↓"
|
||||
"showOnChar": "增伤↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 67,
|
||||
@@ -1002,7 +1200,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "策略伤害减免上升30%",
|
||||
"showOnChar": "减伤↑"
|
||||
"showOnChar": "减伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 68,
|
||||
@@ -1017,7 +1218,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "伤害减免增加30%",
|
||||
"showOnChar": "减伤↑"
|
||||
"showOnChar": "减伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 69,
|
||||
@@ -1032,7 +1236,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 19,
|
||||
"info": "可以抵消自身生命20%伤害的护盾",
|
||||
"showOnChar": "护盾"
|
||||
"showOnChar": "护盾",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 70,
|
||||
@@ -1047,7 +1254,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 19,
|
||||
"info": "可以抵消自身生命30%伤害的护盾",
|
||||
"showOnChar": "护盾"
|
||||
"showOnChar": "护盾",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 71,
|
||||
@@ -1062,7 +1272,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "攻击时,物理伤害加深下降30%",
|
||||
"showOnChar": "增伤↓"
|
||||
"showOnChar": "增伤↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 72,
|
||||
@@ -1077,7 +1290,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "幸运上升30%",
|
||||
"showOnChar": "幸运↑"
|
||||
"showOnChar": "幸运↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 73,
|
||||
@@ -1092,7 +1308,10 @@
|
||||
"dotOrHot": 1,
|
||||
"img": 1,
|
||||
"info": "每回合造成30%策攻的中毒伤害",
|
||||
"showOnChar": "中毒"
|
||||
"showOnChar": "中毒",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 74,
|
||||
@@ -1107,7 +1326,10 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 7,
|
||||
"info": "敏捷下降25%",
|
||||
"showOnChar": "敏捷↓"
|
||||
"showOnChar": "敏捷↓",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 75,
|
||||
@@ -1122,6 +1344,45 @@
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "伤害减免上升15%",
|
||||
"showOnChar": "减伤↑"
|
||||
"showOnChar": "减伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 76,
|
||||
"type": 123,
|
||||
"name": "分担伤害",
|
||||
"maxOlyNum": 1,
|
||||
"round": 1,
|
||||
"times": 1,
|
||||
"cover": 1,
|
||||
"buffOrDebuff": 0,
|
||||
"gainvalue": "30&",
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "分担伤害30%",
|
||||
"showOnChar": "减伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
},
|
||||
{
|
||||
"buffId": 77,
|
||||
"type": 123,
|
||||
"name": "分担伤害",
|
||||
"maxOlyNum": 1,
|
||||
"round": 2,
|
||||
"times": 1,
|
||||
"cover": 1,
|
||||
"buffOrDebuff": 0,
|
||||
"gainvalue": "30&",
|
||||
"dotOrHot": 0,
|
||||
"img": 8,
|
||||
"info": "分担伤害30%",
|
||||
"showOnChar": "减伤↑",
|
||||
"tipImageName": "chaofeng",
|
||||
"spineName": "chaofeng",
|
||||
"actionPosition": 0
|
||||
}
|
||||
]
|
||||
@@ -13,5 +13,15 @@
|
||||
"id": 3,
|
||||
"string": "这里写上远征玩法说明",
|
||||
"tip": "远征说明"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"string": "这里写PVP玩法说明",
|
||||
"tip": "PVP说明"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"string": "战场特殊机制\r\n不同地图胜利条件不同\r\n防守方先手\r\n开场双方即血量翻倍\r\n敌军初始怒气值+50\r\n第6回合开始怒气值回复速度翻倍\r\n第9、10回合全体攻击提升100%",
|
||||
"tip": "PVP战场规则"
|
||||
}
|
||||
]
|
||||
@@ -1,163 +1,226 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "初级防御套装",
|
||||
"name": "忠武",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "25&225&625&2025&3025&4025&5025&6025"
|
||||
"tireInfo": "25&225&625&2025&3025&4025&5025&6025",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "初级攻击套装",
|
||||
"name": "定武",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "125&325&425&2125&3125&4125&5125&6125"
|
||||
"tireInfo": "125&325&425&2125&3125&4125&5125&6125",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "初级机能套装",
|
||||
"name": "乱武",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "525&725&2225&3225&4225&5225&6225"
|
||||
"tireInfo": "525&725&2225&3225&4225&5225&6225",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "起始级防御套装",
|
||||
"name": "振威",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "26&226&626&2026&3026&4026&6026&6026"
|
||||
"tireInfo": "26&226&626&2026&3026&4026&6026&6026",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "起始级攻击套装",
|
||||
"name": "扬威",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "126&326&426&2126&3126&4126&5126&6126"
|
||||
"tireInfo": "126&326&426&2126&3126&4126&5126&6126",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "起始级机能套装",
|
||||
"name": "建威",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "526&726&2226&3226&4226&5226&6226"
|
||||
"tireInfo": "526&726&2226&3226&4226&5226&6226",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "中级防御套装",
|
||||
"name": "翊军",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "27&227&627&2027&3027&4027&5027&6027"
|
||||
"tireInfo": "27&227&627&2027&3027&4027&5027&6027",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "中级攻击套装",
|
||||
"name": "破虏",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "127&327&427&2127&3127&4127&5127&6127"
|
||||
"tireInfo": "127&327&427&2127&3127&4127&5127&6127",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "中级机能套装",
|
||||
"name": "鹰扬",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "527&727&2227&3227&4227&5227&6227"
|
||||
"tireInfo": "527&727&2227&3227&4227&5227&6227",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "高级防御套装",
|
||||
"name": "镇军慑敌",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "28&228&628&2028&3028&4028&5028&6028"
|
||||
"tireInfo": "28&228&628&2028&3028&4028&5028&6028",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "高级攻击套装",
|
||||
"name": "破军斩将",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "128&328&428&2128&3128&4128&5128&6128"
|
||||
"tireInfo": "128&328&428&2128&3128&4128&5128&6128",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "高级机能套装",
|
||||
"name": "护军平难",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "528&728&2228&3228&4228&5228&6228"
|
||||
"tireInfo": "528&728&2228&3228&4228&5228&6228",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "精良防御套装",
|
||||
"name": "镇国无忧",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "29&229&629&2029&3029&4029&5029&6029"
|
||||
"tireInfo": "29&229&629&2029&3029&4029&5029&6029",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "精良攻击套装",
|
||||
"name": "灭国破军",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "129&329&429&2129&3129&4129&5129&6129"
|
||||
"tireInfo": "129&329&429&2129&3129&4129&5129&6129",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "精良机能套装",
|
||||
"name": "辅国定策",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "529&729&2229&3229&4229&5229&6229"
|
||||
"tireInfo": "529&729&2229&3229&4229&5229&6229",
|
||||
"attribute": 1
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "特级禁卫套装",
|
||||
"name": "光寒九州",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "30&2030&3030&4030&5030&6030"
|
||||
"tireInfo": "30&2030&3030&4030&5030&6030",
|
||||
"attribute": 2
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "特级羽林套装",
|
||||
"name": "枪出如龙",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "130&2130&3130&4130&5130&6130"
|
||||
"tireInfo": "130&2130&3130&4130&5130&6130",
|
||||
"attribute": 2
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "特级神射手套装",
|
||||
"name": "羿射九日",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "330&2230&3230&4230&5230&6230"
|
||||
"tireInfo": "330&2230&3230&4230&5230&6230",
|
||||
"attribute": 2
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "特级铁骑套装",
|
||||
"name": "龙骑无双",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "230&2030&3030&4030&5030&6030"
|
||||
"tireInfo": "230&2030&3030&4030&5030&6030",
|
||||
"attribute": 2
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "特级宗师套装",
|
||||
"name": "侠之大者",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "630&2130&3130&4130&5130&6130"
|
||||
"tireInfo": "630&2130&3130&4130&5130&6130",
|
||||
"attribute": 2
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "特级谋主套装",
|
||||
"name": "多智近妖",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "530&2230&3230&4230&5230&6230"
|
||||
"tireInfo": "530&2230&3230&4230&5230&6230",
|
||||
"attribute": 2
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "特级道尊套装",
|
||||
"name": "乾坤无极",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "430&2130&3130&4130&5130&6130"
|
||||
"tireInfo": "430&2130&3130&4130&5130&6130",
|
||||
"attribute": 2
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "特级医圣套装",
|
||||
"name": "起死回生",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "730&2230&3230&4230&5230&6230"
|
||||
"tireInfo": "730&2230&3230&4230&5230&6230",
|
||||
"attribute": 2
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "永固山河",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "&",
|
||||
"attribute": 3
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "平沙望月",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "&",
|
||||
"attribute": 3
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "千叶长生",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "&",
|
||||
"attribute": 3
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "鹤鸣九天",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "&",
|
||||
"attribute": 3
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"name": "一将功成",
|
||||
"totalCount": 6,
|
||||
"effect": "2&1553|4&1536|6&1104",
|
||||
"tireInfo": "&",
|
||||
"attribute": 3
|
||||
}
|
||||
]
|
||||
@@ -2,31 +2,25 @@
|
||||
{
|
||||
"quality": 1,
|
||||
"name": "良品",
|
||||
"assistanceTime": 4,
|
||||
"assistanceLevel": 20
|
||||
"assistanceTime": 5,
|
||||
"assistanceLevel": 0
|
||||
},
|
||||
{
|
||||
"quality": 2,
|
||||
"name": "精品",
|
||||
"assistanceTime": 3,
|
||||
"assistanceLevel": 20
|
||||
"assistanceLevel": 0
|
||||
},
|
||||
{
|
||||
"quality": 3,
|
||||
"name": "珍品",
|
||||
"assistanceTime": 2,
|
||||
"assistanceLevel": 40
|
||||
"assistanceLevel": 0
|
||||
},
|
||||
{
|
||||
"quality": 4,
|
||||
"name": "圣品",
|
||||
"assistanceTime": 1,
|
||||
"assistanceLevel": 60
|
||||
},
|
||||
{
|
||||
"quality": 5,
|
||||
"name": "神品",
|
||||
"assistanceTime": 1,
|
||||
"assistanceLevel": 80
|
||||
"assistanceTime": 5,
|
||||
"assistanceLevel": 0
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user