From 57d60be3a2abecf0065dcf00a1c6371d8628b67e Mon Sep 17 00:00:00 2001 From: luying Date: Wed, 14 Oct 2020 17:19:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A5=87=E9=81=87=E9=9A=8F=E6=9C=BA=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=9D=83=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/handler/eventBattleHandler.ts | 70 +- game-server/app/util/util.ts | 22 +- shared/consts/consts.ts | 3 + shared/db/EventRecord.ts | 6 +- shared/resource/jsons/dic_zyz_event.json | 747 +++++++++++++++++- 5 files changed, 784 insertions(+), 64 deletions(-) diff --git a/game-server/app/servers/battle/handler/eventBattleHandler.ts b/game-server/app/servers/battle/handler/eventBattleHandler.ts index f350a0f79..6ea9f8d34 100644 --- a/game-server/app/servers/battle/handler/eventBattleHandler.ts +++ b/game-server/app/servers/battle/handler/eventBattleHandler.ts @@ -2,8 +2,8 @@ import { Application, BackendSession, FrontendOrBackendSession } from 'pinus'; import { getGamedata } from '../../../util/gamedata'; import { EventRecordModel } from '../../../db/EventRecord'; import { RoleModel } from '../../../db/Role'; -import { genCode, decodeStr, decodeStrSingle, Reward } from '../../../util/util'; -import { EVENT_STATUS, EVENT_RECORD_STATUS, EVENT_TYPE } from '../../../consts/consts'; +import { genCode, decodeStr, decodeStrSingle, Reward, getRandomWithWeight } from '../../../util/util'; +import { EVENT_STATUS, EVENT_RECORD_STATUS, EVENT_TYPE, EVENT_RANDOM_TYPE_ONE_OPEN } from '../../../consts/consts'; export default function(app: Application) { return new EventBattleHandler(app); @@ -177,35 +177,55 @@ async function refreshEvent(num: number, roleId: string, roleName: string, t) { suitLevel = decodeStrSingle('eventSuitLevel', suitLevel); return suitLevel.min <= role.lv && suitLevel.max >= role.lv }); - let historyRecord = await EventRecordModel.getHostoryEventRecord(roleId); - let {history, turn} = historyRecord; - let randomList = dicEvent.filter(cur => { - return history.find(ccur => { - return ccur.eventId != cur.eventID; - }); - }); - console.log(JSON.stringify(randomList)); - for(let i = 0; i < num; i++) { - if(randomList.length == 0) { // 一轮刷新过,开始新的一轮,保证所有事件都能刷新一遍 - turn ++; - randomList = [...dicEvent]; + + if(EVENT_RANDOM_TYPE_ONE_OPEN) { // 每轮进行记录,保证每次随机出的不重复 + + let historyRecord = await EventRecordModel.getHostoryEventRecord(roleId); + let {history, turn} = historyRecord; + let randomList = dicEvent.filter(cur => { + return history.find(ccur => { + return ccur.eventId != cur.eventID; + }); + }); + console.log(JSON.stringify(randomList)); + + for(let i = 0; i < num; i++) { + if(randomList.length == 0) { // 刷新的3个事件不重复 + turn ++; + randomList = [...dicEvent]; + } + + let {dic, index} = getRandomWithWeight(randomList); + if(!dic) break; + let eventCode = genCode(8); + let data = await EventRecordModel.saveEventRecord(eventCode, { + roleId, refTime: t, eventId: dic.eventID, + roleName, turn, type: dic.eventType, battleId: dic.warId||0, quality: dic.quality, + status: EVENT_RECORD_STATUS.WAITING + }); + event.push(data) + randomList.splice(index, 1); + } + } else { + let randomList = dicEvent; + for(let i = 0; i < num; i++) { + let {dic} = getRandomWithWeight(randomList); + console.log('****', JSON.stringify(randomList)) + if(!dic) break; + let eventCode = genCode(8); + let data = await EventRecordModel.saveEventRecord(eventCode, { + roleId, refTime: t, eventId: dic.eventID, + roleName, type: dic.eventType, battleId: dic.warId||0, quality: dic.quality, + status: EVENT_RECORD_STATUS.WAITING + }); + event.push(data) } - - let index = Math.floor(Math.random() * randomList.length); - let dic = randomList[index]; - let eventCode = genCode(8); - let data = await EventRecordModel.saveEventRecord(eventCode, { - roleId, refTime: t, eventId: dic.eventID, - roleName, turn, type: dic.eventType, battleId: dic.warId||0, quality: dic.quality, - status: EVENT_RECORD_STATUS.WAITING - }); - event.push(data) - randomList.splice(index, 1); } return event; } + function pushEventMsg(app, roleId, channelName, msg ) { console.log('***pushEventMsg', channelName) let channelService = app.get('channelService'); diff --git a/game-server/app/util/util.ts b/game-server/app/util/util.ts index 68f02dd13..8d1e82567 100644 --- a/game-server/app/util/util.ts +++ b/game-server/app/util/util.ts @@ -48,17 +48,19 @@ import { GOOD_TYPE } from '../consts/consts'; let [gid, count, frequency] = arr; if(isNaN(gid) || isNaN(count)) throw new Error('格式错误'); result = { gid: parseInt(gid), count: parseInt(count), frequency: parseInt(frequency) }; + break; } case 'eventSuitLevel': { let [min, max] = arr; if(isNaN(min) || isNaN(max)) throw new Error('格式错误'); result = { min: parseInt(min), max: parseInt(max) }; - + break; } case 'attribute': { let [id, value] = arr; if(isNaN(id) || isNaN(value)) throw new Error('格式错误'); result = { id: parseInt(id), value: parseInt(value) }; + break; } } return result; @@ -170,3 +172,21 @@ export function decodeIdCntArrayStr(str: string, multi: number) { return ce; } + + export function getRandomWithWeight(randomList: any) { + let len = randomList.reduce((pre, cur) => { + return pre + cur.weight||1; + }, 0); + let index = Math.floor(Math.random() * len); + let result = { dic: null, index: -1 }; + for(let i = 0; i < randomList.length; i++) { + let {weight = 0} = randomList[i]; + if(index < weight) { + result.dic = randomList[i]; + result.index = i; + break; + } + index -= weight; + } + return result +} \ No newline at end of file diff --git a/shared/consts/consts.ts b/shared/consts/consts.ts index d6b260212..0e5ca897f 100644 --- a/shared/consts/consts.ts +++ b/shared/consts/consts.ts @@ -37,6 +37,9 @@ export const WAR_TYPE = { TOWER: 4 }; +// 事件,是否开启保存随机记录方式 +export const EVENT_RANDOM_TYPE_ONE_OPEN = false; + // 存于用户Role表,事件开启状态 export const EVENT_STATUS = { WAITING: 0, // 未开启 diff --git a/shared/db/EventRecord.ts b/shared/db/EventRecord.ts index ddd565971..03fe375d2 100644 --- a/shared/db/EventRecord.ts +++ b/shared/db/EventRecord.ts @@ -48,8 +48,10 @@ export default class EventRecord extends BaseModel { return {history: result, turn}; } - public static async saveEventRecord(eventCode: string, params: {roleId: string, refTime: number, eventId: number, roleName:string, turn: number, type: number, quality: number, battleId?: number, status: number } , lean=true ) { - let data = await EventRecordModel.findOneAndUpdate({eventCode}, { $set: {...params } }, {upsert: true, new: true}).select('eventCode eventId type quality status battleId').lean(lean); + public static async saveEventRecord(eventCode: string, params: {roleId: string, refTime: number, eventId: number, roleName:string, turn?: number, type: number, quality: number, battleId?: number, status: number } , lean=true ) { + let doc = new EventRecordModel(); + let update = Object.assign(params, doc.toJSON(), {eventCode}); + let data = await EventRecordModel.findOneAndUpdate({eventCode}, { $set: update }, {upsert: true, new: true}).select('eventCode eventId type quality status battleId').lean(lean); return data; } diff --git a/shared/resource/jsons/dic_zyz_event.json b/shared/resource/jsons/dic_zyz_event.json index 2df84ac5f..450a8b7b2 100644 --- a/shared/resource/jsons/dic_zyz_event.json +++ b/shared/resource/jsons/dic_zyz_event.json @@ -6,16 +6,16 @@ "name": "天降宝箱*铜币", "sSpineInUI": 0, "rScriptId": 0, - "winReward": "1&2", - "loseReward": "1&1", + "winReward": 0, + "loseReward": 0, "suitLevel": "1&20", "warId": 0, + "weight": 1, + "position": "1&3|2&4", "__EMPTY": 0, "__EMPTY_1": 0, "__EMPTY_2": 0, "__EMPTY_3": 0, - "__EMPTY_4": 0, - "__EMPTY_5": 0, "fobiddenCharactor": 0, "victoryInfoInUI": 0, "loseInfoInUI": 0, @@ -31,16 +31,16 @@ "name": "天降宝箱*元宝", "sSpineInUI": 0, "rScriptId": 0, - "winReward": "1&2", - "loseReward": "1&1", + "winReward": 0, + "loseReward": 0, "suitLevel": "1&20", "warId": 0, + "weight": 1, + "position": "1&3|2&5", "__EMPTY": 0, "__EMPTY_1": 0, "__EMPTY_2": 0, "__EMPTY_3": 0, - "__EMPTY_4": 0, - "__EMPTY_5": 0, "fobiddenCharactor": 0, "victoryInfoInUI": 0, "loseInfoInUI": 0, @@ -56,16 +56,16 @@ "name": "天降宝箱*材料", "sSpineInUI": 0, "rScriptId": 0, - "winReward": "1&2", - "loseReward": "1&1", + "winReward": 0, + "loseReward": 0, "suitLevel": "1&20", "warId": 0, + "weight": 1, + "position": "1&3|2&6", "__EMPTY": 0, "__EMPTY_1": 0, "__EMPTY_2": 0, "__EMPTY_3": 0, - "__EMPTY_4": 0, - "__EMPTY_5": 0, "fobiddenCharactor": 0, "victoryInfoInUI": 0, "loseInfoInUI": 0, @@ -81,16 +81,16 @@ "name": "答题*体力", "sSpineInUI": 0, "rScriptId": 0, - "winReward": "1&2", - "loseReward": "1&1", + "winReward": 0, + "loseReward": 0, "suitLevel": "1&20", "warId": 0, + "weight": 1, + "position": "1&3|2&7", "__EMPTY": 0, "__EMPTY_1": 0, "__EMPTY_2": 0, "__EMPTY_3": 0, - "__EMPTY_4": 0, - "__EMPTY_5": 0, "fobiddenCharactor": 0, "victoryInfoInUI": 0, "loseInfoInUI": 0, @@ -106,16 +106,16 @@ "name": "答题*将魂", "sSpineInUI": 0, "rScriptId": 0, - "winReward": "1&2", - "loseReward": "1&1", + "winReward": 0, + "loseReward": 0, "suitLevel": "1&20", "warId": 0, + "weight": 1, + "position": "1&3|2&8", "__EMPTY": 0, "__EMPTY_1": 0, "__EMPTY_2": 0, "__EMPTY_3": 0, - "__EMPTY_4": 0, - "__EMPTY_5": 0, "fobiddenCharactor": 0, "victoryInfoInUI": 0, "loseInfoInUI": 0, @@ -131,16 +131,16 @@ "name": "答题*经验书", "sSpineInUI": 0, "rScriptId": 0, - "winReward": "1&2", - "loseReward": "1&1", + "winReward": 0, + "loseReward": 0, "suitLevel": "1&20", "warId": 0, + "weight": 1, + "position": "1&3|2&9", "__EMPTY": 0, "__EMPTY_1": 0, "__EMPTY_2": 0, "__EMPTY_3": 0, - "__EMPTY_4": 0, - "__EMPTY_5": 0, "fobiddenCharactor": 0, "victoryInfoInUI": 0, "loseInfoInUI": 0, @@ -156,16 +156,16 @@ "name": "山贼拦路*待定", "sSpineInUI": 0, "rScriptId": 0, - "winReward": "1&2", - "loseReward": "1&1", + "winReward": 0, + "loseReward": 0, "suitLevel": "1&20", "warId": 2001, + "weight": 1, + "position": "1&3|2&10", "__EMPTY": 0, "__EMPTY_1": 0, "__EMPTY_2": 0, "__EMPTY_3": 0, - "__EMPTY_4": 0, - "__EMPTY_5": 0, "fobiddenCharactor": 0, "victoryInfoInUI": 0, "loseInfoInUI": 0, @@ -181,16 +181,16 @@ "name": "救援村落*待定", "sSpineInUI": 0, "rScriptId": 0, - "winReward": "1&2", - "loseReward": "1&1", + "winReward": 0, + "loseReward": 0, "suitLevel": "1&20", "warId": 2002, + "weight": 1, + "position": "1&3|2&11", "__EMPTY": 0, "__EMPTY_1": 0, "__EMPTY_2": 0, "__EMPTY_3": 0, - "__EMPTY_4": 0, - "__EMPTY_5": 0, "fobiddenCharactor": 0, "victoryInfoInUI": 0, "loseInfoInUI": 0, @@ -206,16 +206,691 @@ "name": "比武切磋*待定", "sSpineInUI": 0, "rScriptId": 0, - "winReward": "1&2", - "loseReward": "1&1", + "winReward": 0, + "loseReward": 0, "suitLevel": "1&20", "warId": 2003, + "weight": 1, + "position": "1&3|2&12", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 10, + "eventType": 1, + "quality": 1, + "name": "天降宝箱*铜币2", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "21&40", + "warId": 0, + "weight": 1, + "position": "1&3|2&13", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 11, + "eventType": 1, + "quality": 2, + "name": "天降宝箱*元宝2", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "21&40", + "warId": 0, + "weight": 1, + "position": "1&3|2&14", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 12, + "eventType": 1, + "quality": 2, + "name": "天降宝箱*材料2", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "21&40", + "warId": 0, + "weight": 1, + "position": "1&3|2&15", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 13, + "eventType": 2, + "quality": 2, + "name": "答题*体力2", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "21&40", + "warId": 0, + "weight": 1, + "position": "1&3|2&16", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 14, + "eventType": 2, + "quality": 2, + "name": "答题*将魂2", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "21&40", + "warId": 0, + "weight": 1, + "position": "1&3|2&17", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 15, + "eventType": 2, + "quality": 2, + "name": "答题*经验书2", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "21&40", + "warId": 0, + "weight": 1, + "position": "1&3|2&18", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 16, + "eventType": 3, + "quality": 2, + "name": "山贼拦路*待定2", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "21&40", + "warId": 2001, + "weight": 1, + "position": "1&3|2&19", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 17, + "eventType": 3, + "quality": 2, + "name": "救援村落*待定2", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "21&40", + "warId": 2002, + "weight": 1, + "position": "1&3|2&20", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 18, + "eventType": 3, + "quality": 2, + "name": "比武切磋*待定2", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "21&40", + "warId": 2003, + "weight": 1, + "position": "1&3|2&21", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 19, + "eventType": 1, + "quality": 3, + "name": "天降宝箱*铜币3", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "41&100", + "warId": 0, + "weight": 2, + "position": "1&3|2&22", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 20, + "eventType": 1, + "quality": 3, + "name": "天降宝箱*元宝3", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "41&100", + "warId": 0, + "weight": 2, + "position": "1&3|2&23", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 21, + "eventType": 1, + "quality": 3, + "name": "天降宝箱*材料3", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "41&100", + "warId": 0, + "weight": 2, + "position": "1&3|2&24", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 22, + "eventType": 2, + "quality": 3, + "name": "答题*体力3", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "41&100", + "warId": 0, + "weight": 2, + "position": "1&3|2&25", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 23, + "eventType": 2, + "quality": 3, + "name": "答题*将魂3", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "41&100", + "warId": 0, + "weight": 2, + "position": "1&3|2&26", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 24, + "eventType": 2, + "quality": 3, + "name": "答题*经验书3", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "41&100", + "warId": 0, + "weight": 2, + "position": "1&3|2&27", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 25, + "eventType": 3, + "quality": 3, + "name": "山贼拦路*待定3", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "41&100", + "warId": 2001, + "weight": 2, + "position": "1&3|2&28", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 26, + "eventType": 3, + "quality": 3, + "name": "救援村落*待定3", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "41&100", + "warId": 2002, + "weight": 2, + "position": "1&3|2&29", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 27, + "eventType": 3, + "quality": 3, + "name": "比武切磋*待定3", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "41&100", + "warId": 2003, + "weight": 2, + "position": "1&3|2&30", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 28, + "eventType": 1, + "quality": 4, + "name": "天降宝箱*铜币4", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "61&100", + "warId": 0, + "weight": 4, + "position": "1&3|2&31", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 29, + "eventType": 1, + "quality": 4, + "name": "天降宝箱*元宝4", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "61&100", + "warId": 0, + "weight": 4, + "position": "1&3|2&32", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 30, + "eventType": 1, + "quality": 4, + "name": "天降宝箱*材料4", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "61&100", + "warId": 0, + "weight": 4, + "position": "1&3|2&33", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 31, + "eventType": 2, + "quality": 4, + "name": "答题*体力4", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "61&100", + "warId": 0, + "weight": 4, + "position": "1&3|2&34", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 32, + "eventType": 2, + "quality": 4, + "name": "答题*将魂4", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "61&100", + "warId": 0, + "weight": 4, + "position": "1&3|2&35", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 33, + "eventType": 2, + "quality": 4, + "name": "答题*经验书4", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "61&100", + "warId": 0, + "weight": 4, + "position": "1&3|2&36", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 34, + "eventType": 3, + "quality": 4, + "name": "山贼拦路*待定4", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "61&100", + "warId": 2001, + "weight": 4, + "position": "1&3|2&37", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 35, + "eventType": 3, + "quality": 4, + "name": "救援村落*待定4", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "61&100", + "warId": 2002, + "weight": 4, + "position": "1&3|2&38", + "__EMPTY": 0, + "__EMPTY_1": 0, + "__EMPTY_2": 0, + "__EMPTY_3": 0, + "fobiddenCharactor": 0, + "victoryInfoInUI": 0, + "loseInfoInUI": 0, + "starInfoInUI": 0, + "cost": 0, + "recommendedPower": 0, + "previousGk": 0 + }, + { + "eventID": 36, + "eventType": 3, + "quality": 4, + "name": "比武切磋*待定4", + "sSpineInUI": 0, + "rScriptId": 0, + "winReward": 0, + "loseReward": 0, + "suitLevel": "61&100", + "warId": 2003, + "weight": 4, + "position": "1&3|2&39", "__EMPTY": 0, "__EMPTY_1": 0, "__EMPTY_2": 0, "__EMPTY_3": 0, - "__EMPTY_4": 0, - "__EMPTY_5": 0, "fobiddenCharactor": 0, "victoryInfoInUI": 0, "loseInfoInUI": 0,