diff --git a/game-server/app/servers/battle/handler/battleUtils.ts b/game-server/app/servers/battle/handler/battleUtils.ts new file mode 100644 index 000000000..8f3525c96 --- /dev/null +++ b/game-server/app/servers/battle/handler/battleUtils.ts @@ -0,0 +1,166 @@ + +import { ActionPointModel } from '../../../db/ActionPoint'; +import { BattleDropModel } from '../../../db/BattleDrop'; +import { CounterModel } from '../../../db/Counter'; +import { EquipModel } from '../../../db/Equip'; + +import { getWarById, getGoodById } from '../../../util/gamedata'; +import { decodeStr } from '../../../util/util'; +import { ACTION_POIN, BATTLE_REWARD_TYPE, GOOD_TYPE } from '../../../consts/consts'; + +export async function getAp(now: number, roleId: string) { + let dataAp = await ActionPointModel.getAp(roleId); + const maxAp = ACTION_POIN.MAX; // 最大体力值 + const per = ACTION_POIN.PER; // 恢复时间(ms) + let {ap, refTime} = dataAp; + if(ap >= maxAp) { + // 体力溢出不需要做时间的处理 + return { ap, maxAp, refTime: now, apRemainTime:0, isOver: true } + } else { + if(refTime > now) refTime = now; // refTime:每次记录时候最近的一个整的时间点,绝对不会大于now + let n = Math.floor((now - refTime)/per); // 上次记录到现在可以增长多少体力 + ap += n; // 增加上 + if(ap >= maxAp) { // 加上后溢出了 + ap = maxAp; + return { ap, maxAp, refTime: now, apRemainTime:0, isOver: true } + } else { + refTime += n * per; // 更新refTime到离现在最近的一个整的时间点 + let apRemainTime = Math.floor((refTime + per - now)/1000); // 恢复下一点需要多少时间 + + return { ap, maxAp, refTime, apRemainTime, isOver: false } + } + } +} + +export async function setAp(now: number, roleId: string, changeAp: number) { + let ApResult = await getAp(now, roleId); + let { ap, maxAp, refTime, apRemainTime, isOver } = ApResult; // 更新ap + ap += changeAp; + if(ap >= maxAp) { // 溢出 + refTime = now; + apRemainTime = 0; + } + if(ap < 0) return null // 体力不足 + await ActionPointModel.saveAp(roleId, ap, refTime); + + if(isOver && ap < maxAp) apRemainTime = Math.floor(ACTION_POIN.PER / 1000); // 特殊处理 + return {ap, maxAp, refTime, apRemainTime} +} + +export class WarReward { + roleId: string; + roleName: string; + battleId: number; + condition: Map; + warInfo: any; + isSuccess: boolean; + rewards: Array<{type: number, gid: number, count: number}>; + + constructor(roleId: string, roleName: string, battleId: number, isSuccess: boolean) { + this.roleId = roleId; + this.roleName = roleName; + this.battleId = battleId; + this.condition = new Map(); + this.warInfo = getWarById(battleId); + this.isSuccess = isSuccess; + } + + public setCondition(id: number, isOk: boolean) { + this.condition.set(id, isOk); + } + + private handleFixReward(num: number) { + if(this.isSuccess) { // 成功了才给固定奖励 + let {fixReward} = this.warInfo; + let reward = decodeStr('fixReward', fixReward); + for(let obj of reward) this.rewards.push({type: BATTLE_REWARD_TYPE.FIX_REWARD, ...obj, count: obj.count * num}); + } + } + private handleConditionReward(num: number) { + if(this.isSuccess) { + let {conditionReward} = this.warInfo; + let reward = decodeStr('conditionReward', conditionReward); + for(let obj of reward) { + if(this.condition.get(obj.condition)) { + this.rewards.push({type: BATTLE_REWARD_TYPE.CONDITION_REWARD, ...obj, count: obj.count * num}); + } + } + } + } + + private async handleRandomReward(num: number) { + if(this.isSuccess) { + let {randomReward} = this.warInfo; + let reward = decodeStr('randomReward', randomReward); + for(let obj of reward) { + let { gid, frequency } = obj; + let dropHistory = await BattleDropModel.findByGid(this.roleId, this.battleId, gid); + let { getNum = 0, allNum = 0, getSum = 0, allSum = 0 } = dropHistory; + for(let i = 0; i < num; i ++) { + let flag = false; // 是否可以获得 + if(allNum + 1 > frequency) { + allNum = 0; getNum = 0; + } + allNum++; allSum++; + if(getNum == 0) { + let r = Math.random(); + if(r <= 1/frequency*allNum || (allNum >= frequency) ) { + flag = true; // 独立概率随机 + } + } + if(flag) { + getNum ++; getSum++; + this.rewards.push({type: BATTLE_REWARD_TYPE.RANDOM_REWARD, ...obj}); + } + } + await BattleDropModel.updateByGid(this.roleId, this.battleId, gid, { + getNum, allNum, getSum, allSum + }); + } + } + } + + public async saveReward(num: number) { + this.rewards = new Array(); + await this.handleFixReward(num); + await this.handleConditionReward(num); + await this.handleRandomReward(num); + + let returnGoods = new Array(); + for(let goods of this.rewards) { + let goodInfo = getGoodById(goods.gid); + if(goodInfo.good_type == GOOD_TYPE.EQUIP) { // 装备 + let result = await this.rewardWeapons(goodInfo, {id: goods.gid, cnt: goods.count }); + for(let obj of result) { + returnGoods.push({dropType: goods.type, ...obj}) + } + } + } + return returnGoods; + } + + + + private async rewardWeapons (dicGood: any, weapon: {id:number,cnt:number }) { + + let weaponsData = []; + let cnt = weapon.cnt; + while (cnt > 0) { + const seqId = await CounterModel.getNewCounter('eid'); + const equipInfo = { + roleId: this.roleId, + roleName: this.roleName, + eid: weapon.id, + eName: dicGood.name, + seqId, + quality: dicGood.lv, + type: dicGood.good_type + } + const equip = await EquipModel.createEquip(equipInfo); + cnt -= 1; + weaponsData.push(equip); + } + return weaponsData; + } + +} \ No newline at end of file diff --git a/game-server/app/servers/battle/handler/dailyBattleHandler.ts b/game-server/app/servers/battle/handler/dailyBattleHandler.ts new file mode 100644 index 000000000..0b1466fca --- /dev/null +++ b/game-server/app/servers/battle/handler/dailyBattleHandler.ts @@ -0,0 +1,107 @@ +import { Application, BackendSession } from 'pinus'; +import { DailyRecordModel } from '../../../db/DailyRecord'; +import { BattleRecordModel } from '../../../db/BattleRecord'; +import { getGamedata } from '../../../util/gamedata'; +import { WAR_TYPE } from '../../../consts/consts'; + +export default function(app: Application) { + return new DailyBattleHandler(app); +} + +export class DailyBattleHandler { + constructor(private app: Application) { + } + + // 获取关卡列表 + async getData(msg: { }, session: BackendSession) { + let roleId = session.get('roleId'); + + const BattleRecord = await BattleRecordModel.getBattleList(roleId, WAR_TYPE.DAILY); + + let dicDaily = getGamedata('dic_daily'); + let dicDailyWar = getGamedata('dic_daily_war'); + + let result = new Array(); + for(let {type, name, sum} of dicDaily) { + let refreshResult = await DailyRecordModel.refreshRecord(roleId, type); + let {count} = refreshResult; + let wars = new Array(); + for(let {war_id, daily_type, difficulty, cost, gk_name, previousGk } of dicDailyWar) { + if(daily_type == type) { + let status = 0, star = 0; + let curBattle = BattleRecord.find(cur => cur.battleId == war_id); + if(curBattle) { + status = 2; + star = curBattle.star; + } else { + if (previousGk) { + let preBattleRecord = BattleRecord.find(cur => cur.battleId == previousGk); + if(preBattleRecord) { + status = 1; + } else { + status = 0; + } + } else { + status = 1; + } + } + wars.push({ + battleId: war_id, difficulty, cost, star, status, name: gk_name + }); + } + } + + result.push({ + type, count, sum, name, + wars + }); + } + + return { code: 200, data: result } + } + + +} + +// 检查每日本次数checkBattle使用 +export async function checkDaily(roleId: string, battleId: number, inc: number) { + let dicDaily = getGamedata('dic_daily'); + let dicDailyWar = getGamedata('dic_daily_war'); + let dailyWar = dicDailyWar.find(cur => cur.war_id == battleId); + if(!dailyWar) return { status: -1, msg: '未找到该关卡' }; + let type = dailyWar.daily_type; + + let curDaily = dicDaily.find(cur => cur.type == type); + if(!curDaily) return { status: -1, msg: '未找到该类型' }; + let dailyRecord = await DailyRecordModel.refreshRecord(roleId, type); + let { count } = dailyRecord; + if(count + inc > curDaily.sum ) { + return { status: -1, msg: '次数不足' } + } + return {status: 1, type, count, sum: curDaily.sum}; +} + +// 检查每日本次数warEnd和warSweep使用 +export async function checkDailyAndIncrease(roleId: string, battleId: number, inc: number, isRef: boolean) { + let dicDaily = getGamedata('dic_daily'); + let dicDailyWar = getGamedata('dic_daily_war'); + let dailyWar = dicDailyWar.find(cur => cur.war_id == battleId); + if(!dailyWar) return { status: -1, msg: '未找到该关卡' }; + let type = dailyWar.daily_type; + + let curDaily = dicDaily.find(cur => cur.type == type); + if(!curDaily) return { status: -1, msg: '未找到该类型' }; + + let dailyRecord; + if(isRef) { + dailyRecord = await DailyRecordModel.refreshRecord(roleId, type); + } else { + dailyRecord = await DailyRecordModel.getDailyRecordById(roleId, type); + } + let { count } = dailyRecord; + if(count + inc > curDaily.sum ) { + return { status: -1, msg: '次数不足' } + } + let result = await DailyRecordModel.increseDailyCount(roleId, type, inc); + return {status: 1, type, count: result.count, sum: curDaily.sum}; +} \ No newline at end of file diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index f3a9721b3..402cdcad5 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -1,10 +1,11 @@ import { Application, BackendSession } from 'pinus'; import { BattleRecordModel } from '../../../db/BattleRecord'; +import { BattleSweepRecordModel } from '../../../db/BattleSweepRecord'; import { getWarById, getGoodById } from '../../../util/gamedata'; -import { CounterModel } from '../../../db/Counter'; -import { HeroModel } from '../../../db/Hero'; -import { EquipModel } from '../../../db/Equip'; import { genCode } from '../../../util/util'; +import { getAp, setAp, WarReward } from './battleUtils'; +import { WAR_TYPE } from '../../../consts/consts'; +import { checkDaily, checkDailyAndIncrease } from './dailyBattleHandler'; export default function(app: Application) { return new NormalBattleHandler(app); @@ -14,25 +15,44 @@ export class NormalBattleHandler { constructor(private app: Application) { } - // 进入关卡前,记录信息,生成唯一标识 + // 获取关卡列表 async checkBattle(msg: {battleId: number, heroes: Array }, session: BackendSession) { const { battleId, heroes } = msg; let roleId = session.get('roleId'); let roleName = session.get('roleName'); let warInfo = getWarById(battleId); if(!warInfo) { - return { - code: 202, - data: "缺少关卡信息" - } + return { code: 202, data: "缺少关卡信息" } + } + if(!warInfo.hasOwnProperty('cost')) { + warInfo['cost'] = 0; } + let apJson = await getAp(Date.now(), roleId); + let {ap} = apJson; + if(ap < warInfo.cost) { + return { code: 202, data: "体力不足" } + } + + // 前置关卡是否挑战过 + let previousGk = warInfo.previousGk; + if(previousGk) { + let preBattle = await BattleRecordModel.getBattleRecordByIdAndStatus(roleId, previousGk, 1); + if(!preBattle) return {code: 202, data: '需要完成上一关才可以挑战'}; + } + + let dailyNum = {}; + if(warInfo.war_type == WAR_TYPE.DAILY) { + let checkResult = await checkDaily(roleId, battleId, 1); + if(checkResult.status == -1) { + return {code: 202, data: checkResult.msg} + } + dailyNum = { type: checkResult.type, count: checkResult.count, sum: checkResult.sum }; + } const battleCode = genCode(8); const BattleRecord = await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { - roleId, - roleName, - battleId, + roleId, roleName, battleId, status: 0, warName: warInfo.gk_name, warType: warInfo.war_type, @@ -42,28 +62,49 @@ export class NormalBattleHandler { let {status} = BattleRecord; + return { code: 200, data: { - battleId, battleCode, status + battleId, battleCode, status, apJson, dailyNum } } } - // 关卡结算,记录使用的武将,获得奖励 - async battleEnd(msg: {battleCode: string, battleId: number, isSuccess: boolean, heroes: Array, }, session: BackendSession) { + // 关卡列表 + async getBattleList(msg: {type: number }, session: BackendSession) { + const { type } = msg; + let roleId = session.get('roleId'); - const { battleCode, battleId, isSuccess, heroes } = msg; + const BattleRecord = await BattleRecordModel.getBattleList(roleId, type); + let result = []; // 去重 + for(let br of BattleRecord) { + let index = result.findIndex(cur => cur.battleId == br.battleId); + if(index == -1) { + result.push(br); + } + } + + return { code: 200, data: result } + } + + // 关卡结算,记录使用的武将,获得奖励 + async battleEnd(msg: {battleCode: string, battleId: number, isSuccess: boolean, star: number, heroes: Array, }, session: BackendSession) { + + const { battleCode, battleId, isSuccess, heroes, star } = msg; let roleId = session.get('roleId'); let roleName = session.get('roleName'); let warInfo = getWarById(battleId); + if(!warInfo) { + return { code: 202, data: "缺少关卡信息" } + } + if(!warInfo.hasOwnProperty('cost')) { + warInfo['cost'] = 0; + } const BattleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode, true); if(!BattleRecord || BattleRecord.status != 0) { - return { - code: 202, - data: '关卡状态错误' - } + return { code: 202, data: '关卡状态错误' } } let flag = 1; // 对比hero信息 @@ -72,21 +113,44 @@ export class NormalBattleHandler { if(dbHeroes.indexOf(hid) == -1) flag = 0; } if(!flag) { - return { - code: 202, - data: '关卡信息不同' - } + return { code: 202, data: '关卡信息不同' } } - let params = {}, reward: Array; + const now = Date.now(); // 当前时间戳 + let apJson = await setAp(now, roleId, -1 * warInfo.cost); // 扣除体力 + if(!apJson) { + return { code: 202, data: '体力不足' } + } + + let dailyNum = {}; + if(warInfo.war_type == WAR_TYPE.DAILY) { + let checkResult = await checkDailyAndIncrease(roleId, battleId, 1, false); + if(checkResult.status == -1) { + return {code: 202, data: checkResult.msg} + } + dailyNum = { type: checkResult.type, count: checkResult.count, sum: checkResult.sum }; + } + + let warReward = new WarReward(roleId, roleName, battleId, isSuccess); + let params = {}; if(isSuccess) { // 挑战胜利 params = { $set: { status: 1, + star, record: { heroes } } } - reward = await this.handleReward(roleId, roleName, warInfo.reward); + + // 是否首通 + let condition1 = await BattleRecordModel.getBattleRecordByIdAndStatus(roleId, battleId, 1); + if(!condition1) warReward.setCondition(0, true); + // 是否首次3星 + if(star == 3) { + let condition2 = await BattleRecordModel.getBattleRecordByIdAndStar(roleId, battleId, 3); + if(!condition2) warReward.setCondition(1, true); + } + } else { // 挑战失败 params = { $set: { @@ -94,9 +158,10 @@ export class NormalBattleHandler { record: { heroes } } } - reward = []; } + let reward = await warReward.saveReward(1); + const updateResult = await BattleRecordModel.updateBattleRecordByCode(battleCode, params, true); let { status } = updateResult; @@ -104,78 +169,71 @@ export class NormalBattleHandler { code: 200, data: { battleCode, battleId, status, - goods: reward + goods: reward, + apJson, + dailyNum } } } - private async handleReward(roleId: string, roleName: string, rewardStr:string) { - let {weapons, armors, items, souls} = this.decodeReward(rewardStr); - let addWeapons = await this.rewardWeapons(roleId, roleName, weapons); - // 暂时只处理装备 - // let addArmors = await this.rewardArmors(roleId, roleName, armors); - // let addItems = await this.rewardItems(roleId, roleName, items); - // let addSouls = await this.rewardSouls(roleId, roleName, souls); - - let result = [].concat(addWeapons); - return result; - } - - private async rewardWeapons (roleId: string, roleName:string, weapons: Array<{id:number,cnt:number, type: number}>) { - - let weaponsData = []; - for (let weapon of weapons) { - let cnt = weapon.cnt; - let g = getGoodById(weapon.id); - while (cnt > 0) { - const seqId = await CounterModel.getNewCounter('eid'); - const equipInfo = { - roleId, - roleName, - eid: weapon.id, - eName: g.name, - seqId, - type: weapon.type, - lv: g.lv - } - const equip = await EquipModel.createEquip(equipInfo); - cnt -= 1; - weaponsData.push(equip); - } + async battleSweep(msg: {battleId: number, count: number }, session: BackendSession) { + + const { battleId, count } = msg; + let roleId = session.get('roleId'); + let roleName = session.get('roleName'); + let warInfo = getWarById(battleId); + if(!warInfo) { + return { code: 202, data: "缺少关卡信息" } + } + // 校验是否三星通关过 + let condition1 = await BattleRecordModel.getBattleRecordByIdAndStar(roleId, battleId, 3); + if(!condition1) { + return { code: 202, data: "需要3星通过关卡才可以扫荡" } } - return weaponsData; - } - private decodeReward(rewardStr: string, multiple=1) { - let weapons = []; - let armors = []; - let items = []; - let souls = []; - rewardStr.split('|').forEach((rStr) => { - // r[0]: type, r[1]: id, r[2]: count - let r = rStr.split('&'); - let type = parseInt(r[0] || '')||0; - let id = parseInt(r[1] || '') || 0; - let cnt = (parseInt(r[2] || '') || 0) * multiple; - if (id !== 0 && cnt !== 0) { - switch (r[0]) { - case '0': - items.push({id, cnt, type}); - break; - case '1': - weapons.push({id, cnt, type}); - break; - case '2': - armors.push({id, cnt, type}); - break; - case '3': - souls.push({id, cnt, type}); - break; - default: - break; - } + // 扣体力 + if(!warInfo.hasOwnProperty('cost')) { + warInfo['cost'] = 0; + } + const now = Date.now(); // 当前时间戳 + let apJson = await setAp(now, roleId, -1 * warInfo.cost * count); // 扣除体力 + if(!apJson) { + return { code: 202, data: '体力不足' } + } + + // 扫荡次数 + let dailyNum = {}; + if(warInfo.war_type == WAR_TYPE.DAILY) { + let checkResult = await checkDailyAndIncrease(roleId, battleId, count, true); + if(checkResult.status == -1) { + return {code: 202, data: checkResult.msg} } + dailyNum = { type: checkResult.type, count: checkResult.count, sum: checkResult.sum }; + } + + // 发奖励 + let warReward = new WarReward(roleId, roleName, battleId, true); + let result = await warReward.saveReward(count); + + // 扫荡记录 + await BattleSweepRecordModel.saveBattleSweepRecordById(roleId, battleId, { + $set: { + roleName, + warName: warInfo.gk_name, + warType: warInfo.war_type + }, + $inc: { count } }); - return {weapons, armors, items, souls}; + + return { + code: 200, + data: { + battleId, count, + goods: result, + apJson, + dailyNum + } + } } + } diff --git a/game-server/app/util/gamedata.ts b/game-server/app/util/gamedata.ts index 86e933ceb..106d946ec 100644 --- a/game-server/app/util/gamedata.ts +++ b/game-server/app/util/gamedata.ts @@ -29,15 +29,23 @@ export function getGamedata(key) { } export function getWarById(warid) { - let warInfo = gamedata['dic_zyz_gk']||[]; - return warInfo.find(cur => { - return cur.war_id == warid - }); + const wars = ['dic_zyz_gk', 'dic_daily_war', 'dic_event_war']; // 关卡相关的表 + let result; + for(let filename of wars) { + let warInfo = gamedata[filename]||[]; + for(let war of warInfo) { + if(war.war_id == warid) { + result = war; break; + } + } + if(result) break; + } + return result||[]; } export function getGoodById(gid) { console.log(gid) - let goodsInfo = gamedata['goods']||[]; + let goodsInfo = gamedata['dic_goods']||[]; return goodsInfo.find(cur => { return cur.good_id == gid }); diff --git a/game-server/app/util/util.ts b/game-server/app/util/util.ts index db0241daa..b48362346 100644 --- a/game-server/app/util/util.ts +++ b/game-server/app/util/util.ts @@ -1,4 +1,5 @@ + export function genCode(len) { const chars = '123456789ABCDEFGHJKLMNPQRSTWXYZabcdefghijklmnopqrstuvwxyz'; const charArr = chars.split(''); @@ -7,4 +8,29 @@ code += charArr[Math.floor(Math.random() * charArr.length)]; } return code; + } + + export function decodeStr(type, str) { + if(str == '&') str = ''; + return str.split('|').map(cur => { + let arr = cur.split('&'); + let result = {}; + switch (type) { + case 'fixReward': { + let [gid, count] = arr; + result = { gid: parseInt(gid), count: parseInt(count)}; + break; + } + case 'conditionReward': { + let [gid, count, condition] = arr; + result = { gid: parseInt(gid), count: parseInt(count), condition: parseInt(condition) }; + break; + } + case 'randomReward': { + let [gid, count, frequency] = arr; + result = { gid: parseInt(gid), count: parseInt(count), frequency: parseInt(frequency) }; + } + } + return result; + }); } \ No newline at end of file diff --git a/shared/consts/consts.ts b/shared/consts/consts.ts index 861e4f58b..8486dfdad 100644 --- a/shared/consts/consts.ts +++ b/shared/consts/consts.ts @@ -13,3 +13,24 @@ export const COUNTER = { API: 'api', GM_GROUP: 'gmgroup' }; + +export const ACTION_POIN = { + MAX: 100, + PER: 6 * 60 * 1000 +}; + +export const BATTLE_REWARD_TYPE = { + FIX_REWARD: 1, + CONDITION_REWARD: 2, + RANDOM_REWARD: 3 +}; + +export const GOOD_TYPE = { + EQUIP: 1, + ITEM: 2 +}; + +export const WAR_TYPE = { + NORMAL: 1, + DAILY: 2 +}; \ No newline at end of file diff --git a/shared/db/ActionPoint.ts b/shared/db/ActionPoint.ts new file mode 100644 index 000000000..281e22d5e --- /dev/null +++ b/shared/db/ActionPoint.ts @@ -0,0 +1,32 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + +/** + * 体力系统 +*/ +@index({ roleId: 1 }) + +export default class ActionPoint extends BaseModel { + @prop({ required: true }) + roleId: string; // 角色 id + + @prop({ required: true }) + refTime: number; // 刷新时间,时间戳 + @prop({ required: true }) + ap: number; // 当前体力 + + public static async getAp(roleId: string, lean = true) { + let result = await ActionPointModel.findOne({roleId}).select('ap refTime').lean(lean); + if(!result) { + result = await ActionPointModel.findOneAndUpdate({roleId}, { ap: 0, refTime: 0 }, {new: true, upsert: true}).lean(lean) + } + return result; + } + + public static async saveAp(roleId: string, ap: number, refTime: number, lean = true) { + let result = await ActionPointModel.findOneAndUpdate({roleId}, { ap, refTime }, {upsert: true, new: true}).lean(lean); + return result||{}; + } +} + +export const ActionPointModel = getModelForClass(ActionPoint); diff --git a/shared/db/BattleDrop.ts b/shared/db/BattleDrop.ts new file mode 100644 index 000000000..ff69f09e8 --- /dev/null +++ b/shared/db/BattleDrop.ts @@ -0,0 +1,38 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + +/** + * 战斗记录接口 + */ +@index({ roleId: 1, battleId: 1 }) + +export default class BattleDrop extends BaseModel { + @prop({ required: true }) + roleId: string; // 角色 id + @prop({ required: true }) + battleId: number; // 关卡 id + @prop({ required: true }) + gid: number; // 关卡 id + + @prop({ required: true, default: 0 }) + getNum: number; // 获取次数,当allNum超过配置次数重置 + @prop({ required: true, default: 0 }) + allNum: number; // 全部次数,当超过配置次数重置 + @prop({ required: true, default: 0 }) + getSum: number; // 获取道具的全部次数 + @prop({ required: true, default: 0 }) + allSum: number; // 全部全部次数,不重置 + + + public static async findByGid(roleId: string, battleId: number, gid: number, lean = true) { + const result = await BattleDropModel.findOneAndUpdate({ roleId, battleId, gid}, {}, {new: true, upsert: true}).lean(lean); + return result; + } + + public static async updateByGid(roleId: string, battleId: number, gid: number, params: {getNum: number, allNum: number, getSum: number, allSum: number}, lean = true) { + const result = await BattleDropModel.findOneAndUpdate({roleId, battleId, gid}, {$set: params}).lean(lean); + return result; + } +} + +export const BattleDropModel = getModelForClass(BattleDrop); diff --git a/shared/db/BattleRecord.ts b/shared/db/BattleRecord.ts index 9a84e5c11..bc9334186 100644 --- a/shared/db/BattleRecord.ts +++ b/shared/db/BattleRecord.ts @@ -21,24 +21,57 @@ export default class BattleRecord extends BaseModel { warName: string; // 关卡 名 @prop({ required: true }) warType: number; // 关卡 类型 - @prop({ required: true }) + + @prop({ required: true, default: 0 }) status: number; // 关卡状态 0-挑战中 1-挑战成功 2-挑战失败 + @prop({ required: true, default: 0 }) + star: number; // 关卡状态 0-挑战中 1-挑战成功 2-挑战失败 @prop({ required: true }) record: { // 使用的武将等记录 heroes: Array ; // 武将id }; - public static async getBattleRecordByCode(battleCode: string, lean = true) { const result = await BattleRecordModel.findOne({ battleCode }).lean(lean); return result; } + public static async getBattleRecordByIdAndStatus(roleId: string, battleId: number, status: number, lean = true) { + const result = await BattleRecordModel.findOne({ roleId, battleId, status }).lean(lean); + return result; + } + + public static async getBattleRecordByIdAndStar(roleId: string, battleId: number, star: number, lean = true) { + const result = await BattleRecordModel.findOne({ roleId, battleId, star: {$lte: star} }).lean(lean); + return result; + } + public static async updateBattleRecordByCode( battleCode: string, params: object, lean = true) { const result = await BattleRecordModel.findOneAndUpdate({ battleCode }, params, {new: true, upsert: true}).lean(lean); return result; } + public static async getBattleList( roleId: string, warType: number, lean = true) { + const searchObj = { roleId, warType, status: 1 }; + const count = await BattleRecordModel.countDocuments(searchObj); + console.log(roleId, warType, count); + const limit = 1000; + const page = Math.ceil(count/limit); + let result = new Array(); + for(let i = 0; i < page; i++) { + const battleRecords = await BattleRecordModel.find(searchObj) + .select('battleId battleCode warType star status') + .limit(1000) + .skip(1000 * i) + .sort({battleId: 1, star: -1, createdAt: -1}) + .lean(lean); + for(let battleRecord of battleRecords) { + result.push(battleRecord); + } + } + return result; + } + } export const BattleRecordModel = getModelForClass(BattleRecord); diff --git a/shared/db/BattleSweepRecord.ts b/shared/db/BattleSweepRecord.ts new file mode 100644 index 000000000..a3d9b0aa1 --- /dev/null +++ b/shared/db/BattleSweepRecord.ts @@ -0,0 +1,32 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + +/** + * 战斗记录接口 + */ +@index({ roleId: 1, battleId: 1 }) + +export default class BattleSweepRecord extends BaseModel { + @prop({ required: true }) + roleId: string; // 角色 id + @prop({ required: true }) + roleName: string; // 角色名称 + + @prop({ required: true }) + battleId: number; // 关卡 id + @prop({ required: true }) + warName: string; // 关卡 名 + @prop({ required: true }) + warType: number; // 关卡 类型 + + @prop({ required: true, default: 0 }) + count: number; // 扫荡次数 + + public static async saveBattleSweepRecordById(roleId: string, battleId: number, params: any, lean = true) { + const result = await BattleSweepRecordModel.findOneAndUpdate({ roleId, battleId }, params, {new: true, upsert: true}).lean(lean); + return result; + } + +} + +export const BattleSweepRecordModel = getModelForClass(BattleSweepRecord); diff --git a/shared/db/DailyRecord.ts b/shared/db/DailyRecord.ts new file mode 100644 index 000000000..29382cdc6 --- /dev/null +++ b/shared/db/DailyRecord.ts @@ -0,0 +1,43 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + +/** + * 战斗记录接口 + */ +@index({ roleId: 1, type: 1 }) + +export default class DailyRecord extends BaseModel { + @prop({ required: true }) + roleId: string; // 角色 id + @prop({ required: true }) + type: number; // 每日类型 + @prop({ required: true, default: 0 }) + count: number; // 挑战次数 + @prop({ required: true, default: 0 }) + refTime: number; // 刷新时间 + + public static async getDailyRecordById(roleId: string, type: number, lean = true) { + const result = await DailyRecordModel.findOneAndUpdate({ roleId, type }, {}, {new: true, upsert: true}).select('count refTime').lean(lean); + return result; + } + + public static async refreshRecord(roleId: string, type: number, lean = true) { + const dailyRecord = await DailyRecordModel.findOne({ roleId, type }).lean(lean); + let {count = 0, refTime = 0} = dailyRecord||{}; + let now = new Date(); + let today = now.setHours(0, 0, 0, 0); + if(today > refTime) { + refTime = today; + count = 0; + } + let result = await DailyRecordModel.findOneAndUpdate({roleId, type}, {$set: {refTime, count}}, {new: true, upsert: true}); + return result; + } + + public static async increseDailyCount(roleId: string, type: number, count: number, lean = true) { + const result = await DailyRecordModel.findOneAndUpdate({ roleId, type }, {$inc: { count } }, {new: true, upsert: true}).lean(lean); + return result; + } +} + +export const DailyRecordModel = getModelForClass(DailyRecord); diff --git a/shared/db/Equip.ts b/shared/db/Equip.ts index c2015f97c..de5784303 100644 --- a/shared/db/Equip.ts +++ b/shared/db/Equip.ts @@ -21,6 +21,8 @@ export default class Equip extends BaseModel { @prop({ required: false }) hid: number; // 装备此装备的武将 id + @prop({ required: true, default: 1 }) + quality: number; // 品质 @prop({ required: true, default: 1 }) lv: number; // 强化等级 @prop({ required: false, default: [] }) diff --git a/shared/resource/dic_daily.json b/shared/resource/dic_daily.json new file mode 100644 index 000000000..0fbfdb9bc --- /dev/null +++ b/shared/resource/dic_daily.json @@ -0,0 +1,7 @@ +[ + { + "type": 1, + "name": "资源本", + "sum": 3 + } +] \ No newline at end of file diff --git a/shared/resource/dic_daily_war.json b/shared/resource/dic_daily_war.json new file mode 100644 index 000000000..2bd5907d7 --- /dev/null +++ b/shared/resource/dic_daily_war.json @@ -0,0 +1,24 @@ +[ + { + "war_id": 1000, + "war_type": 2, + "daily_type": 1, + "difficulty": 1, + "gk_name": "每日资源本A", + "cost": 1, + "fixReward": "1&1", + "conditionReward": "2&1&1|1&1&0", + "randomReward": "3&1&2" + }, + { + "war_id": 1001, + "war_type": 2, + "daily_type": 1, + "difficulty": 2, + "gk_name": "每日资源本B", + "cost": 1, + "fixReward": "1&50", + "conditionReward": "2&1&1|1&1&0", + "randomReward": "3&1&2" + } +] \ No newline at end of file diff --git a/shared/resource/dic_event.json b/shared/resource/dic_event.json new file mode 100644 index 000000000..668add195 --- /dev/null +++ b/shared/resource/dic_event.json @@ -0,0 +1,8 @@ +[ + { + "event_id": 1, + "type": 1, + "quality": 1, + "war_id": 2000 + } +] \ No newline at end of file diff --git a/shared/resource/dic_event_war.json b/shared/resource/dic_event_war.json new file mode 100644 index 000000000..e5a66476c --- /dev/null +++ b/shared/resource/dic_event_war.json @@ -0,0 +1,10 @@ +[ + { + "war_id": 2000, + "war_type": 3, + "gk_name": "奇遇", + "fixReward": "1&50", + "conditionReward": "2&10&1|1&10&0", + "randomReward": "3&10&2" + } +] \ No newline at end of file diff --git a/shared/resource/dic_goods.json b/shared/resource/dic_goods.json new file mode 100644 index 000000000..e0ace7d1f --- /dev/null +++ b/shared/resource/dic_goods.json @@ -0,0 +1,20 @@ +[ + { + "good_id": 1, + "name": "青铜短剑", + "lv": 1, + "good_type": 1 + }, + { + "good_id": 2, + "name": "黑铁剑", + "lv": 2, + "good_type": 1 + }, + { + "good_id": 3, + "name": "饿狼长剑", + "lv": 3, + "good_type": 1 + } +] \ No newline at end of file diff --git a/shared/resource/dic_zyz_gk.json b/shared/resource/dic_zyz_gk.json index 410d2e250..0e647400e 100644 --- a/shared/resource/dic_zyz_gk.json +++ b/shared/resource/dic_zyz_gk.json @@ -1,2102 +1,11 @@ [ - { - "war_id": 101, - "bg_img_id": 101, - "script_id": 101, - "reward": "1&2&1", - "war_type": 1, - "gk_name": "王越童渊比试", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": 1, - "fobiddenCharactor": 1 - }, - { - "war_id": 102, - "bg_img_id": 102, - "script_id": 102, - "reward": 102, - "war_type": 1, - "gk_name": "山中对战狼群", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 103, - "bg_img_id": 103, - "script_id": 103, - "reward": 103, - "war_type": 1, - "gk_name": "赵云和夏侯比试", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 104, - "bg_img_id": 104, - "script_id": 104, - "reward": 104, - "war_type": 1, - "gk_name": "真定之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 105, - "bg_img_id": 105, - "script_id": 105, - "reward": 105, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 106, - "bg_img_id": 106, - "script_id": 106, - "reward": 106, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 107, - "bg_img_id": 107, - "script_id": 107, - "reward": 107, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 108, - "bg_img_id": 108, - "script_id": 108, - "reward": 108, - "war_type": 1, - "gk_name": "巨鹿之战1", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 109, - "bg_img_id": 109, - "script_id": 109, - "reward": 109, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 110, - "bg_img_id": 110, - "script_id": 110, - "reward": 110, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 111, - "bg_img_id": 111, - "script_id": 111, - "reward": 111, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 112, - "bg_img_id": 112, - "script_id": 112, - "reward": 112, - "war_type": 1, - "gk_name": "巨鹿之战2", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 113, - "bg_img_id": 113, - "script_id": 113, - "reward": 113, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 114, - "bg_img_id": 114, - "script_id": 114, - "reward": 114, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 115, - "bg_img_id": 115, - "script_id": 115, - "reward": 115, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 116, - "bg_img_id": 116, - "script_id": 116, - "reward": 116, - "war_type": 1, - "gk_name": "河间之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 117, - "bg_img_id": 117, - "script_id": 117, - "reward": 117, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 118, - "bg_img_id": 118, - "script_id": 118, - "reward": 118, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 119, - "bg_img_id": 119, - "script_id": 119, - "reward": 119, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 120, - "bg_img_id": 120, - "script_id": 120, - "reward": 120, - "war_type": 1, - "gk_name": "渤海之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 121, - "bg_img_id": 121, - "script_id": 121, - "reward": 121, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 122, - "bg_img_id": 122, - "script_id": 122, - "reward": 122, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 123, - "bg_img_id": 123, - "script_id": 123, - "reward": 123, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 124, - "bg_img_id": 124, - "script_id": 124, - "reward": 124, - "war_type": 1, - "gk_name": "界桥之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 125, - "bg_img_id": 125, - "script_id": 125, - "reward": 125, - "war_type": 1, - "gk_name": "邺城之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 126, - "bg_img_id": 126, - "script_id": 126, - "reward": 126, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 127, - "bg_img_id": 127, - "script_id": 127, - "reward": 127, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 128, - "bg_img_id": 128, - "script_id": 128, - "reward": 128, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 129, - "bg_img_id": 129, - "script_id": 129, - "reward": 129, - "war_type": 1, - "gk_name": "河内之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 130, - "bg_img_id": 130, - "script_id": 130, - "reward": 130, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 131, - "bg_img_id": 131, - "script_id": 131, - "reward": 131, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 132, - "bg_img_id": 132, - "script_id": 132, - "reward": 132, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 133, - "bg_img_id": 133, - "script_id": 133, - "reward": 133, - "war_type": 1, - "gk_name": "洛阳之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 134, - "bg_img_id": 134, - "script_id": 134, - "reward": 134, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 135, - "bg_img_id": 135, - "script_id": 135, - "reward": 135, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 136, - "bg_img_id": 136, - "script_id": 136, - "reward": 136, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 137, - "bg_img_id": 137, - "script_id": 137, - "reward": 137, - "war_type": 1, - "gk_name": "弘农之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 138, - "bg_img_id": 138, - "script_id": 138, - "reward": 138, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 139, - "bg_img_id": 139, - "script_id": 139, - "reward": 139, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 140, - "bg_img_id": 140, - "script_id": 140, - "reward": 140, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 141, - "bg_img_id": 141, - "script_id": 141, - "reward": 141, - "war_type": 1, - "gk_name": "郿坞之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 142, - "bg_img_id": 142, - "script_id": 142, - "reward": 142, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 143, - "bg_img_id": 143, - "script_id": 143, - "reward": 143, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 144, - "bg_img_id": 144, - "script_id": 144, - "reward": 144, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 145, - "bg_img_id": 145, - "script_id": 145, - "reward": 145, - "war_type": 1, - "gk_name": "长安之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 146, - "bg_img_id": 146, - "script_id": 146, - "reward": 146, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 147, - "bg_img_id": 147, - "script_id": 147, - "reward": 147, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 148, - "bg_img_id": 148, - "script_id": 148, - "reward": 148, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 149, - "bg_img_id": 149, - "script_id": 149, - "reward": 149, - "war_type": 1, - "gk_name": "受禅台之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 150, - "bg_img_id": 150, - "script_id": 150, - "reward": 150, - "war_type": 1, - "gk_name": "北海之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 151, - "bg_img_id": 151, - "script_id": 151, - "reward": 151, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 152, - "bg_img_id": 152, - "script_id": 152, - "reward": 152, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 153, - "bg_img_id": 153, - "script_id": 153, - "reward": 153, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 154, - "bg_img_id": 154, - "script_id": 154, - "reward": 154, - "war_type": 1, - "gk_name": "齐郡之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 155, - "bg_img_id": 155, - "script_id": 155, - "reward": 155, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 156, - "bg_img_id": 156, - "script_id": 156, - "reward": 156, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 157, - "bg_img_id": 157, - "script_id": 157, - "reward": 157, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 158, - "bg_img_id": 158, - "script_id": 158, - "reward": 158, - "war_type": 1, - "gk_name": "下邳之战1", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 159, - "bg_img_id": 159, - "script_id": 159, - "reward": 159, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 160, - "bg_img_id": 160, - "script_id": 160, - "reward": 160, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 161, - "bg_img_id": 161, - "script_id": 161, - "reward": 161, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 162, - "bg_img_id": 162, - "script_id": 162, - "reward": 162, - "war_type": 1, - "gk_name": "下邳之战2", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 163, - "bg_img_id": 163, - "script_id": 163, - "reward": 163, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 164, - "bg_img_id": 164, - "script_id": 164, - "reward": 164, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 165, - "bg_img_id": 165, - "script_id": 165, - "reward": 165, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 166, - "bg_img_id": 166, - "script_id": 166, - "reward": 166, - "war_type": 1, - "gk_name": "泰山之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 167, - "bg_img_id": 167, - "script_id": 167, - "reward": 167, - "war_type": 1, - "gk_name": "涿郡之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 168, - "bg_img_id": 168, - "script_id": 168, - "reward": 168, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 169, - "bg_img_id": 169, - "script_id": 169, - "reward": 169, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 170, - "bg_img_id": 170, - "script_id": 170, - "reward": 170, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 171, - "bg_img_id": 171, - "script_id": 171, - "reward": 171, - "war_type": 1, - "gk_name": "蓟县之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 172, - "bg_img_id": 172, - "script_id": 172, - "reward": 172, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 173, - "bg_img_id": 173, - "script_id": 173, - "reward": 173, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 174, - "bg_img_id": 174, - "script_id": 174, - "reward": 174, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 175, - "bg_img_id": 175, - "script_id": 175, - "reward": 175, - "war_type": 1, - "gk_name": "燕山之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 176, - "bg_img_id": 176, - "script_id": 176, - "reward": 176, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 177, - "bg_img_id": 177, - "script_id": 177, - "reward": 177, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 178, - "bg_img_id": 178, - "script_id": 178, - "reward": 178, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 179, - "bg_img_id": 179, - "script_id": 179, - "reward": 179, - "war_type": 1, - "gk_name": "渔阳之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 180, - "bg_img_id": 180, - "script_id": 180, - "reward": 180, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 181, - "bg_img_id": 181, - "script_id": 181, - "reward": 181, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 182, - "bg_img_id": 182, - "script_id": 182, - "reward": 182, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 183, - "bg_img_id": 183, - "script_id": 183, - "reward": 183, - "war_type": 1, - "gk_name": "卢龙之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 184, - "bg_img_id": 184, - "script_id": 184, - "reward": 184, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 185, - "bg_img_id": 185, - "script_id": 185, - "reward": 185, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 186, - "bg_img_id": 186, - "script_id": 186, - "reward": 186, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 187, - "bg_img_id": 187, - "script_id": 187, - "reward": 187, - "war_type": 1, - "gk_name": "白狼山之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 188, - "bg_img_id": 188, - "script_id": 188, - "reward": 188, - "war_type": 1, - "gk_name": "陈留之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 189, - "bg_img_id": 189, - "script_id": 189, - "reward": 189, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 190, - "bg_img_id": 190, - "script_id": 190, - "reward": 190, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 191, - "bg_img_id": 191, - "script_id": 191, - "reward": 191, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 192, - "bg_img_id": 192, - "script_id": 192, - "reward": 192, - "war_type": 1, - "gk_name": "谯郡之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 193, - "bg_img_id": 193, - "script_id": 193, - "reward": 193, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 194, - "bg_img_id": 194, - "script_id": 194, - "reward": 194, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 195, - "bg_img_id": 195, - "script_id": 195, - "reward": 195, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 196, - "bg_img_id": 196, - "script_id": 196, - "reward": 196, - "war_type": 1, - "gk_name": "古城之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 197, - "bg_img_id": 197, - "script_id": 197, - "reward": 197, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 198, - "bg_img_id": 198, - "script_id": 198, - "reward": 198, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 199, - "bg_img_id": 199, - "script_id": 199, - "reward": 199, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 200, - "bg_img_id": 200, - "script_id": 200, - "reward": 200, - "war_type": 1, - "gk_name": "偷袭许都", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 201, - "bg_img_id": 201, - "script_id": 201, - "reward": 201, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 202, - "bg_img_id": 202, - "script_id": 202, - "reward": 202, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 203, - "bg_img_id": 203, - "script_id": 203, - "reward": 203, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 204, - "bg_img_id": 204, - "script_id": 204, - "reward": 204, - "war_type": 1, - "gk_name": "断后掩护", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 205, - "bg_img_id": 205, - "script_id": 205, - "reward": 205, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 206, - "bg_img_id": 206, - "script_id": 206, - "reward": 206, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 207, - "bg_img_id": 207, - "script_id": 207, - "reward": 207, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 208, - "bg_img_id": 208, - "script_id": 208, - "reward": 208, - "war_type": 1, - "gk_name": "赶来救主", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 209, - "bg_img_id": 209, - "script_id": 209, - "reward": 209, - "war_type": 1, - "gk_name": "护卫刘备", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 210, - "bg_img_id": 210, - "script_id": 210, - "reward": 210, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 211, - "bg_img_id": 211, - "script_id": 211, - "reward": 211, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 212, - "bg_img_id": 212, - "script_id": 212, - "reward": 212, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 213, - "bg_img_id": 213, - "script_id": 213, - "reward": 213, - "war_type": 1, - "gk_name": "新野之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 214, - "bg_img_id": 214, - "script_id": 214, - "reward": 214, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 215, - "bg_img_id": 215, - "script_id": 215, - "reward": 215, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 216, - "bg_img_id": 216, - "script_id": 216, - "reward": 216, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 217, - "bg_img_id": 217, - "script_id": 217, - "reward": 217, - "war_type": 1, - "gk_name": "火烧博望", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 218, - "bg_img_id": 218, - "script_id": 218, - "reward": 218, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 219, - "bg_img_id": 219, - "script_id": 219, - "reward": 219, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 220, - "bg_img_id": 220, - "script_id": 220, - "reward": 220, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 221, - "bg_img_id": 221, - "script_id": 221, - "reward": 221, - "war_type": 1, - "gk_name": "火烧新野", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 222, - "bg_img_id": 222, - "script_id": 222, - "reward": 222, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 223, - "bg_img_id": 223, - "script_id": 223, - "reward": 223, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 224, - "bg_img_id": 224, - "script_id": 224, - "reward": 224, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 225, - "bg_img_id": 225, - "script_id": 225, - "reward": 225, - "war_type": 1, - "gk_name": "当阳之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 226, - "bg_img_id": 226, - "script_id": 226, - "reward": 226, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 227, - "bg_img_id": 227, - "script_id": 227, - "reward": 227, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 228, - "bg_img_id": 228, - "script_id": 228, - "reward": 228, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 229, - "bg_img_id": 229, - "script_id": 229, - "reward": 229, - "war_type": 1, - "gk_name": "长坂之战", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 230, - "bg_img_id": 230, - "script_id": 230, - "reward": 230, - "war_type": 1, - "gk_name": "截杀曹操", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 231, - "bg_img_id": 231, - "script_id": 231, - "reward": 231, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 232, - "bg_img_id": 232, - "script_id": 232, - "reward": 232, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 233, - "bg_img_id": 233, - "script_id": 233, - "reward": 233, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 234, - "bg_img_id": 234, - "script_id": 234, - "reward": 234, - "war_type": 1, - "gk_name": "诈取南郡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 235, - "bg_img_id": 235, - "script_id": 235, - "reward": 235, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 236, - "bg_img_id": 236, - "script_id": 236, - "reward": 236, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 237, - "bg_img_id": 237, - "script_id": 237, - "reward": 237, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 238, - "bg_img_id": 238, - "script_id": 238, - "reward": 238, - "war_type": 1, - "gk_name": "袭取荆州", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 239, - "bg_img_id": 239, - "script_id": 239, - "reward": 239, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 240, - "bg_img_id": 240, - "script_id": 240, - "reward": 240, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 241, - "bg_img_id": 241, - "script_id": 241, - "reward": 241, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 242, - "bg_img_id": 242, - "script_id": 242, - "reward": 242, - "war_type": 1, - "gk_name": "攻打零陵", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 243, - "bg_img_id": 243, - "script_id": 243, - "reward": 243, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 244, - "bg_img_id": 244, - "script_id": 244, - "reward": 244, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 245, - "bg_img_id": 245, - "script_id": 245, - "reward": 245, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 246, - "bg_img_id": 246, - "script_id": 246, - "reward": 246, - "war_type": 1, - "gk_name": "桂阳中伏", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 247, - "bg_img_id": 247, - "script_id": 247, - "reward": 247, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 248, - "bg_img_id": 248, - "script_id": 248, - "reward": 248, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 249, - "bg_img_id": 249, - "script_id": 249, - "reward": 249, - "war_type": 1, - "gk_name": "小关卡", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - }, - { - "war_id": 250, - "bg_img_id": 250, - "script_id": 250, - "reward": 250, - "war_type": 1, - "gk_name": "迎接刘备", - "map_id": "", - "kingExp": "", - "lvLimted": "", - "turnLimted": "", - "forcedCharactor": "", - "fobiddenCharactor": "" - } - ] \ No newline at end of file + { + "war_id": 101, + "war_type": 1, + "gk_name": "王越童渊比试", + "cost": 1, + "fixReward": "1&2", + "conditionReward": "2&1&1|1&1&0", + "randomReward": "3&1&5" + } +] \ No newline at end of file