diff --git a/game-server/app/servers/battle/handler/battleUtils.ts b/game-server/app/servers/battle/handler/battleUtils.ts index febde4c93..45b830007 100644 --- a/game-server/app/servers/battle/handler/battleUtils.ts +++ b/game-server/app/servers/battle/handler/battleUtils.ts @@ -2,9 +2,9 @@ import { ActionPointModel } from '../../../db/ActionPoint'; import { BattleDropModel } from '../../../db/BattleDrop'; -import { getWarById, getGoodById } from '../../../util/gamedata'; +import { getWarById, getWarJsons } from '../../../util/gamedata'; import { decodeStr, Reward } from '../../../util/util'; -import { ACTION_POIN, BATTLE_REWARD_TYPE, GOOD_TYPE } from '../../../consts/consts'; +import { ACTION_POIN, BATTLE_REWARD_TYPE, WAR_JSON_ATTRIBUTE_TYPE } from '../../../consts/consts'; export async function getAp(now: number, roleId: string) { let dataAp = await ActionPointModel.getAp(roleId); @@ -130,4 +130,46 @@ export class WarReward { return returnGoods; } -} \ No newline at end of file +} + +export async function matchPlayers(scale: number, range: number, myCe: number ,enemyObj: {enemyFrom: number, enemyId: string, enemies: Array }) { + + let min = myCe * scale * (1 - range/100); + let max = myCe * scale * (1 + range/100); + console.log(min, max, enemyObj); + + return false +} + +export async function matchRobots(scale: number, myCe: number, robotCe: number, warJsonIndex:any, role, enemyObj: {enemyFrom: number, enemyId: string, enemies: Array }) { + let {json: dicWarJson, fileName } = getWarJsons(warJsonIndex); + if(dicWarJson) { + enemyObj.enemyFrom = 2; + enemyObj.enemyId = fileName; + + let ratio = myCe / robotCe * scale; // 玩家战力/机器人初始战力*系数 + for(let enemy of dicWarJson) { + let attribute = decodeWarJsonAttribute(enemy.attribute); // 格式:{'hp':1000, ...} + for(let value in attribute) { + attribute[value] *= ratio; + } + enemyObj.enemies.push({...enemy, attribute, lv: role.lv}); + } + + return true + } else { + return false + } +} + +export function decodeWarJsonAttribute(attribute) { + let arr = decodeStr('attribute', attribute); + let obj = {}; + for(let {id, value} of arr) { + let field = WAR_JSON_ATTRIBUTE_TYPE[id]; + if(field) { + obj[field] = value; + } + } + return obj + } \ No newline at end of file diff --git a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts new file mode 100644 index 000000000..6ce57705a --- /dev/null +++ b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts @@ -0,0 +1,177 @@ +import { Application, BackendSession } from 'pinus'; +import { getGamedata } from '../../../util/gamedata'; +import { ExpeditionRecordModel } from '../../../db/ExpeditionRecord'; +import { ExpeditionWarRecordModel } from '../../../db/ExpeditionWarRecord'; +import { ExpeditionPointModel } from '../../../db/ExpeditionPoint'; +import { RoleModel } from '../../../db/Role'; +import { calculateSumCE, genCode } from '../../../util/util'; +import { matchPlayers, matchRobots } from './battleUtils'; + +export default function(app: Application) { + return new ExpeditionBattleHandler(app); +} + +export class ExpeditionBattleHandler { + constructor(private app: Application) { + } + + /** + * 获取初始数据 + * 获取当前远征挑战情况,远征点数,点数宝箱领取情况 */ + async getStatus(msg: { }, session: BackendSession) { + + let roleId = session.get('roleId'); + let roleName = session.get('roleName'); + + // 每日刷新,刷新关卡进度,宝箱进度,武将状态 + let now = new Date(); + let today = now.setHours(0, 0, 0, 0); + let expeditionRecord = await ExpeditionRecordModel.getTodayRecord(roleId, today); + if(!expeditionRecord) { // 每天新建一条记录 + let code = genCode(8); + expeditionRecord = await ExpeditionRecordModel.createTodayRecord(code, { + roleId, roleName, time: today, heroes: [] + }); + } + + // 每一关的挑战状态 + let { expeditionCode, heroes } = expeditionRecord; + let expeditionWarRecord = await ExpeditionWarRecordModel.getRecordByCode(expeditionCode); + let curLv = 0; + if(expeditionWarRecord.length > 0) { + curLv = expeditionRecord[expeditionWarRecord.length - 1].expeditionId; + } + + // 点数,和宝箱领取状态 + let role = await RoleModel.findByRoleId(roleId); + let {expeditionPoint} = role; + let dicExpeditionPoint = getGamedata('dic_expedition_point'); + let pointRewards = { + expeditionPoint, + rewards: dicExpeditionPoint.map(cur => { + return { point: cur.point, received: false } + }) + }; + let pointStatusInDatabase = await ExpeditionPointModel.getExpeditionPoint(roleId); + if(pointStatusInDatabase) { + let { rewards = [] } = pointStatusInDatabase; + pointRewards.rewards = rewards.map(cur => { + return { point: cur.point, received: cur.received } + }) + } + return { + code: 200, + data: { + expeditionCode, + curLv, + expeditionWarRecord, + pointRewards, + heroes + } + } + } + + /** + * 获取敌军数据 + * 匹配其他玩家,或机器人数据 + */ + async getEnemies(msg: { expeditionCode: string, expeditionId: number }, session: BackendSession) { + + const roleId = session.get('roleId'); + // const roleName = session.get('roleName'); + const { expeditionCode, expeditionId } = msg; + + let expeditionWarRecord = await ExpeditionWarRecordModel.getRecordByCodeAndId(expeditionCode, expeditionId); + if(!expeditionWarRecord) { // 如果没有信息 + + // 计算我方战斗力(最高五人) + let myCe = await calculateSumCE(roleId, 1, { num: 5 }); + console.log('****myCe', myCe); + let enemyObj = { + enemyFrom: 0, + enemyId: '', + enemies: new Array() + }; + + let dicExpedition = getGamedata('dic_expedition'); + let curDicExpedition = dicExpedition.find(cur => cur.id == expeditionId); + + // 匹配,判断是不是新手期 + const role = await RoleModel.findByRoleId(roleId); + let now = new Date(); + let today = now.setHours(0,0,0,0); + let isNew = today - role.createdAt.getTime() <= 3*24*60*60*1000; + let scale = isNew?curDicExpedition.CEScaleNew:curDicExpedition.CEScale; + let range = isNew?curDicExpedition.CERangeNew:curDicExpedition.CERange; + + // 优先匹配其他玩家 + let flag = await matchPlayers(scale, range, myCe, enemyObj); + + // 当数量不够时使用机器人匹配 + if(!flag) { + flag = await matchRobots(scale, myCe, curDicExpedition.ce, curDicExpedition.json, role, enemyObj); + } + + console.log('**********flag', flag) + if(!flag) { + return {code: 202, data:'无法匹配对手'}; + } + // 保存 + let {warId} = curDicExpedition; + expeditionWarRecord = await ExpeditionWarRecordModel.saveRecord(expeditionCode, expeditionId, { + roleId, battleId: warId, ...enemyObj + }); + } + + let { battleId, enemyFrom, enemies, battleStatus } = expeditionWarRecord; + return { + code: 200, + data: { + expeditionCode, expeditionId, battleId, + battleStatus, + enemyFrom, + enemies + } + } + } + + /** + * 进入战斗 + * 记录我军数据,生成战斗唯一表示,记录状态 + */ + async checkBattle(msg: { }, session: BackendSession) { + + } + + /** + * 战斗结算 + * 结算战斗奖励,更新远征状态 + */ + async battleEnd(msg: { }, session: BackendSession) { + + } + + /** + * 领取战斗宝箱 + * 领取宝箱,更新远征状态 + */ + async battleReward(msg: { }, session: BackendSession) { + + } + + /** + * 领取点数宝箱 + * 领取点数宝箱,不扣除点数,那么就需要记录领取状态并且有返回 + */ + async pointReward(msg: { }, session: BackendSession) { + + } + + /** + * 刷新点数宝箱 + * 扣除远征点数,并刷新箱子状态 + */ + async resetPointReward(msg: { }, session: BackendSession) { + + } +} diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index a3ffbcb1f..f3caef89b 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -1,6 +1,7 @@ import { CounterModel } from '../../../db/Counter'; import { HeroModel } from '../../../db/Hero'; import { EquipModel } from '../../../db/Equip'; +import { calculateCE } from '../../../util/util'; import {Application, BackendSession, createTcpMailBox} from 'pinus'; export default function(app: Application) { @@ -27,12 +28,14 @@ export class RoleHandler { async initHeros(roleId: string, roleName: string) { const seqId = await CounterModel.getNewCounter('hid'); + let ce = calculateCE({hid: 1, lv: 1}); const heroInfo = { roleId, roleName, hid: 1, hName: '曹操', - seqId + seqId, + ce } await HeroModel.createHero(heroInfo); } diff --git a/game-server/app/util/gamedata.ts b/game-server/app/util/gamedata.ts index 8f38ba66a..f8fe30d60 100644 --- a/game-server/app/util/gamedata.ts +++ b/game-server/app/util/gamedata.ts @@ -30,7 +30,6 @@ function parseTowerData() { } function initData (folder) { - console.log('加载文件夹:', folder); if(!gamedata.hasOwnProperty(folder)) { gamedata[folder] = {}; } @@ -67,8 +66,15 @@ export function getGamedata(key) { } // 获取出兵表 -export function getWarJsons(key: string) { - return gamedata['warJsons'][key]; +export function getWarJsons(key: any) { + key = key + ''; + let arr = key.split('&'); + let index = Math.floor(Math.random() * arr.length); + key = arr[index]; + return { + json: gamedata['warJsons'][key], + fileName: key + } } export function getWarById(warid: number) { diff --git a/game-server/app/util/util.ts b/game-server/app/util/util.ts index 14310b3f1..68f02dd13 100644 --- a/game-server/app/util/util.ts +++ b/game-server/app/util/util.ts @@ -1,7 +1,8 @@ -import { getWarById, getGoodById } from './gamedata'; +import { getWarById, getGoodById, getGamedata } from './gamedata'; import { CounterModel } from '../db/Counter'; import { EquipModel } from '../db/Equip'; +import { HeroModel } from '../db/Hero'; import { GOOD_TYPE } from '../consts/consts'; export function genCode(len) { @@ -54,11 +55,17 @@ import { GOOD_TYPE } from '../consts/consts'; result = { min: parseInt(min), max: parseInt(max) }; } + case 'attribute': { + let [id, value] = arr; + if(isNaN(id) || isNaN(value)) throw new Error('格式错误'); + result = { id: parseInt(id), value: parseInt(value) }; + } } return result; }; } + // 获取物品 export class Reward { roleId: string; @@ -108,6 +115,7 @@ import { GOOD_TYPE } from '../consts/consts'; return weaponsData; } } + /** * 将 | 分隔的字符串解析为数组,如:a|b|c 解析为[a, b, c] * @param str 要解析的字符串 @@ -130,3 +138,35 @@ export function decodeIdCntArrayStr(str: string, multi: number) { }); return strMap; } + + // 计算当前武将战力 + export async function calculateSumCE(roleId: string, type: number, param: { num?: number, heroes?: Array }) { + let sum; + if(type == 1) { // 最高num人战力和 + sum = await HeroModel.sumTopHeroCe(roleId, param.num); + } else if(type == 2) { // 所有人战力和 + sum = await HeroModel.sumHeroCe(roleId); + } + return sum; + } + // 计算当前武将战力 + export function calculateCE(heroInfo: {hid: number, lv: number }) { + let { hid, lv } = heroInfo; + // 假设所有属性和等级的关系是简单的线性关系 + let dicHero = getGamedata('dic_zyz_hero'); + let curDicHero = dicHero.find(cur => cur.heroId == hid); + + let { atk, matk, def, mdef, agi, luk, atk_up, matk_up, def_up, mdef_up, agi_up, luk_up } = curDicHero; + atk += lv * atk_up; + matk += lv * matk_up; + def += lv * def_up; + mdef += lv * mdef_up; + agi += lv * agi_up; + luk += lv * luk_up; + + // 假设战力为所有属性的简单加法 + + let ce = atk + matk + def + mdef + agi + luk; + return ce; + } + diff --git a/shared/consts/consts.ts b/shared/consts/consts.ts index de7be3d89..d6b260212 100644 --- a/shared/consts/consts.ts +++ b/shared/consts/consts.ts @@ -67,3 +67,24 @@ export const HANG_UP_CONSTS = { UNIT_TIME: 10 * 60 * 1000, MAX_TIME: 12 * 60 * 60 * 1000 } + +export const WAR_JSON_ATTRIBUTE_TYPE = { + "1": "hp", // 生命 + "2": "atk", // 物攻 + "3": "matk", // 策攻 + "4": "def", // 物防 + "5": "mdef", // 测防 + "6": "agi", // 敏捷 + "7": "luk", // 幸运 + "8": "speed", // 移动 + "9": "hit", // 命中等级 + "10": "cri", // 暴击等级 + "11": "flee", // 格挡等级 + "12": "antCri", // 抗暴等级 + "13": "damageIncrease", // 伤害加深等级 + "14": "damageDecrease", // 伤害减免等级 + "15": "defIngnore", // 忽视防御等级 + "16": "bloodSuck", // 吸血等级 + "17": "ap" // 怒气 +}; + diff --git a/shared/db/ExpeditionPoint.ts b/shared/db/ExpeditionPoint.ts new file mode 100644 index 000000000..251633846 --- /dev/null +++ b/shared/db/ExpeditionPoint.ts @@ -0,0 +1,27 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + +/** + * 远征记录 + */ +@index({ roleId: 1, eventId: 1 }) +@index({ roleId: 1, eventCode: 1 }) + +export default class ExpeditionPoint extends BaseModel { + @prop({ required: true }) + roleId: string; // 角色 id + + @prop({ required: true }) + pointCost: number; // 消耗点数 + @prop({ required: true }) + completed: boolean; // 本轮奖励是否完成 + @prop({ required: true, default: [] }) + rewards: Array<{point: number, reward: string, received:boolean, recTime: Date}>; // 领取记录 + + public static async getExpeditionPoint(roleId: string, lean = true) { + const result = await ExpeditionPointModel.findOne({ roleId, completed: false }).lean(lean); + return result; + } +} + +export const ExpeditionPointModel = getModelForClass(ExpeditionPoint); diff --git a/shared/db/ExpeditionRecord.ts b/shared/db/ExpeditionRecord.ts new file mode 100644 index 000000000..7b97437f8 --- /dev/null +++ b/shared/db/ExpeditionRecord.ts @@ -0,0 +1,34 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + +/** + * 远征记录 + */ +@index({ roleId: 1, eventId: 1 }) +@index({ roleId: 1, eventCode: 1 }) + +export default class ExpeditionRecord extends BaseModel { + @prop({ required: true }) + roleId: string; // 角色 id + @prop({ required: true }) + roleName: string; // 角色 名 + @prop({ required: true }) + expeditionCode: string; // 远征的唯一标识 + @prop({ required: true }) + time: number; // 时间 + @prop({ required: true }) + heroes: Array<{hid: number, hp: number, cp: number}>; // 我方已出场武将 + + + public static async getTodayRecord(roleId: string, time: number, lean = true) { + const role = await ExpeditionRecordModel.findOne({ roleId, time }).lean(lean); + return role; + } + + public static async createTodayRecord(expeditionCode: string, params: { roleId: string, roleName: string, time: number, heroes: Array<{hid: number, hp: number, cp: number}> }, lean = true) { + const role = await ExpeditionRecordModel.findOneAndUpdate({ expeditionCode }, params, { new: true, upsert: true }).lean(lean); + return role; + } +} + +export const ExpeditionRecordModel = getModelForClass(ExpeditionRecord); diff --git a/shared/db/ExpeditionWarRecord.ts b/shared/db/ExpeditionWarRecord.ts new file mode 100644 index 000000000..f59e0e351 --- /dev/null +++ b/shared/db/ExpeditionWarRecord.ts @@ -0,0 +1,52 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + +/** + * 远征记录 + */ +@index({ expeditionCode: 1, expeditionId: 1 }) + +export default class ExpeditionWarRecord extends BaseModel { + @prop({ required: true, default: '' }) + roleId: string; // 角色 id + @prop({ required: true, default: '' }) + expeditionCode: string; // 远征的唯一标识 + @prop({ required: true, default: 0 }) + expeditionId: number; // 远征序号 + @prop({ required: true, default: 0 }) + battleId: number; // 相关关卡id + @prop({ required: true, default: '' }) + battleCode: string; // 关联关卡唯一值 + @prop({ required: true, default: 0 }) + battleStatus: number; // 是否通过 + @prop({ required: true, default: false }) + received: boolean; // 本关战胜后宝箱是否领取 + @prop({ required: true, default: false }) + reward: string; // 领取的宝箱奖励 + @prop({ required: true, default: 0 }) + enemyFrom: number; // 敌军数据来源:1-配表的敌军队,2-玩家 + @prop({ required: true, default: '' }) + enemyId: string; // 敌军队伍id或玩家id + @prop({ required: true, default: [] }) + enemies: Array; // 敌军数据 + + public static async getRecordByCode(expeditionCode: string, lean = true) { + const result = await ExpeditionWarRecordModel.find({ expeditionCode }).select('expeditionId battleId battleCode battleStatus received').sort({expeditionId: 1}).lean(lean); + return result; + } + + public static async getRecordByCodeAndId(expeditionCode: string, expeditionId: number, lean = true) { + const result = await ExpeditionWarRecordModel.findOne({ expeditionCode, expeditionId }).select('expeditionId battleId battleCode battleStatus received enemyFrom enemies').lean(lean); + return result; + } + + public static async saveRecord(expeditionCode: string, expeditionId: number, params: {roleId: string, battleId: number, enemyFrom: number, enemyId: string, enemies: Array}, lean = true) { + const doc = new ExpeditionWarRecordModel(); + const update = Object.assign(doc.toJSON(), params, {expeditionCode, expeditionId}); + const result = await ExpeditionWarRecordModel.findOneAndUpdate({ expeditionCode, expeditionId }, update, {new: true, upsert: true}).select('expeditionId battleId battleCode battleStatus received enemyFrom enemies').lean(lean); + return result; + } + +} + +export const ExpeditionWarRecordModel = getModelForClass(ExpeditionWarRecord); diff --git a/shared/db/Hero.ts b/shared/db/Hero.ts index f946bd0ac..d9abbcd73 100644 --- a/shared/db/Hero.ts +++ b/shared/db/Hero.ts @@ -68,13 +68,30 @@ export default class Hero extends BaseModel { return hero; } - public static async createHero(heroInfo: {roleId: string, roleName: string, hid: number, hName: string, seqId: number, lv?:number}, lean = true) { + public static async createHero(heroInfo: {roleId: string, roleName: string, hid: number, hName: string, seqId: number, lv?:number, ce: number}, lean = true) { const doc = new HeroModel(); const update = Object.assign(doc.toJSON(), heroInfo); const hero = await HeroModel.findOneAndUpdate({roleId: heroInfo.roleId, hid: heroInfo.hid}, update, {upsert: true, new: true}).lean(lean); return hero; } + public static async sumTopHeroCe(roleId: string, num: number) { + let ce = await HeroModel.aggregate([ + { $match : { roleId } }, + { $sort: {ce: -1} }, + { $limit: num }, + { $group: { _id: null, ce: { $sum: '$ce' } } } + ]); + return ce[0].ce; + } + + public static async sumHeroCe(roleId: string) { + let ce = await HeroModel.aggregate([ + { $match : { roleId } }, + { $group: { _id: null, ce: { $sum: '$ce' } } } + ]); + return ce[0].ce; + } } export const HeroModel = getModelForClass(Hero); diff --git a/shared/db/Role.ts b/shared/db/Role.ts index e057ba743..28ee29a90 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -99,6 +99,10 @@ export default class Role extends BaseModel { // @prop({ required: false }) // hangUpTime: Date; // 当前挂机开始时间 + + @prop({ required: true }) + expeditionPoint: number; // 远征点数 + public static async findByUid(uid: number, serverId: number, lean = true) { const role = await RoleModel.findOne({ 'userInfo.uid': uid, serverId }).lean(lean); diff --git a/shared/resource/jsons/dic_expedition.json b/shared/resource/jsons/dic_expedition.json index b4c64a269..2d9676d1b 100644 --- a/shared/resource/jsons/dic_expedition.json +++ b/shared/resource/jsons/dic_expedition.json @@ -1 +1,101 @@ -[{"id":"远征本身的序号","warId":"对应远征关卡表的id","reward":"战斗后可得的宝箱(id&count|id&count)","CEScale":"战力系数比,1 为玩家基础战力","CERange":"步长,敌军战力系数范围,单位%:[CEScale - CERange, CEScale + CERange]","CEScaleNew":"新手期战力系数比","CERangeNew":"新手期步长,单位%","json":"对应的出兵表,默认和warId一致,但支持填多个表id,如果填了多个就在其中随机一个,用&连接","ce":"标准战力,用于计算玩家和机器人战力比"},{"id":1,"warId":4001,"reward":"&","CEScale":0.5,"CERange":5,"CEScaleNew":0.3,"CERangeNew":5,"json":4001,"ce":10000},{"id":2,"warId":4002,"reward":"&","CEScale":0.6,"CERange":5,"CEScaleNew":0.35,"CERangeNew":5,"json":4002,"ce":10000},{"id":3,"warId":4003,"reward":"&","CEScale":0.7,"CERange":5,"CEScaleNew":0.4,"CERangeNew":5,"json":4003,"ce":10000},{"id":4,"warId":4004,"reward":"&","CEScale":0.8,"CERange":5,"CEScaleNew":0.45,"CERangeNew":5,"json":4004,"ce":10000},{"id":5,"warId":4005,"reward":"&","CEScale":1,"CERange":5,"CEScaleNew":0.5,"CERangeNew":5,"json":4005,"ce":10000},{"id":6,"warId":4006,"reward":"&","CEScale":1.05,"CERange":5,"CEScaleNew":0.55,"CERangeNew":5,"json":4006,"ce":10000},{"id":7,"warId":4007,"reward":"&","CEScale":1.1,"CERange":5,"CEScaleNew":0.6,"CERangeNew":5,"json":4007,"ce":10000},{"id":8,"warId":4008,"reward":"&","CEScale":1.15,"CERange":5,"CEScaleNew":0.7,"CERangeNew":5,"json":4008,"ce":10000},{"id":9,"warId":4009,"reward":"&","CEScale":1.3,"CERange":5,"CEScaleNew":0.8,"CERangeNew":5,"json":4009,"ce":10000}] \ No newline at end of file +[ + { + "id": 1, + "warId": 4001, + "reward": "&", + "CEScale": 0.5, + "CERange": 5, + "CEScaleNew": 0.3, + "CERangeNew": 5, + "json": 4001, + "ce": 10000 + }, + { + "id": 2, + "warId": 4002, + "reward": "&", + "CEScale": 0.6, + "CERange": 5, + "CEScaleNew": 0.35, + "CERangeNew": 5, + "json": 4002, + "ce": 10000 + }, + { + "id": 3, + "warId": 4003, + "reward": "&", + "CEScale": 0.7, + "CERange": 5, + "CEScaleNew": 0.4, + "CERangeNew": 5, + "json": 4003, + "ce": 10000 + }, + { + "id": 4, + "warId": 4004, + "reward": "&", + "CEScale": 0.8, + "CERange": 5, + "CEScaleNew": 0.45, + "CERangeNew": 5, + "json": 4004, + "ce": 10000 + }, + { + "id": 5, + "warId": 4005, + "reward": "&", + "CEScale": 1, + "CERange": 5, + "CEScaleNew": 0.5, + "CERangeNew": 5, + "json": 4005, + "ce": 10000 + }, + { + "id": 6, + "warId": 4006, + "reward": "&", + "CEScale": 1.05, + "CERange": 5, + "CEScaleNew": 0.55, + "CERangeNew": 5, + "json": 4006, + "ce": 10000 + }, + { + "id": 7, + "warId": 4007, + "reward": "&", + "CEScale": 1.1, + "CERange": 5, + "CEScaleNew": 0.6, + "CERangeNew": 5, + "json": 4007, + "ce": 10000 + }, + { + "id": 8, + "warId": 4008, + "reward": "&", + "CEScale": 1.15, + "CERange": 5, + "CEScaleNew": 0.7, + "CERangeNew": 5, + "json": 4008, + "ce": 10000 + }, + { + "id": 9, + "warId": 4009, + "reward": "&", + "CEScale": 1.3, + "CERange": 5, + "CEScaleNew": 0.8, + "CERangeNew": 5, + "json": 4009, + "ce": 10000 + } +] \ No newline at end of file diff --git a/shared/resource/jsons/dic_expedition_point.json b/shared/resource/jsons/dic_expedition_point.json index a690bde95..a78c74789 100644 --- a/shared/resource/jsons/dic_expedition_point.json +++ b/shared/resource/jsons/dic_expedition_point.json @@ -1 +1 @@ -[{"point":"点数","reward":"宝箱奖励(id&count|id&count)","__EMPTY":0,"__EMPTY_1":0},{"point":6,"reward":"&","__EMPTY":0,"__EMPTY_1":0},{"point":12,"reward":"&","__EMPTY":0,"__EMPTY_1":0},{"point":18,"reward":"&","__EMPTY":0,"__EMPTY_1":0}] \ No newline at end of file +[{"point":6,"reward":"&"},{"point":12,"reward":"&"},{"point":18,"reward":"&"}] \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_gk_expedition.json b/shared/resource/jsons/dic_zyz_gk_expedition.json new file mode 100644 index 000000000..5e5c2fb25 --- /dev/null +++ b/shared/resource/jsons/dic_zyz_gk_expedition.json @@ -0,0 +1,28 @@ +[ + { + "war_id": 4001, + "dispatchJsonId": 101, + "bg_img_id": 101, + "script_id": 101, + "fixReward": "&", + "conditionReward": "&", + "RandomReward": "&", + "warType": 1, + "gk_name": "序章&王越童渊比试", + "kingExp": 100, + "lvLimted": 1, + "turnLimted": 20, + "forcedCharactor": "&", + "fobiddenCharactor": "&", + "victoryInfoInUI": "无", + "loseInfoInUI": "无", + "starInfoInUI": "无", + "cost": 2, + "iconInMap": "&", + "sSpineInUI": "&", + "detailUIBg": 0, + "recommendedPower": 10003, + "previousGk": 0, + "relatedEliteGk": 0 + } +] \ No newline at end of file diff --git a/shared/resource/warJsons/4001.json b/shared/resource/warJsons/4001.json index 33c1318d2..d35c88be9 100644 --- a/shared/resource/warJsons/4001.json +++ b/shared/resource/warJsons/4001.json @@ -1,5 +1,5 @@ [{ - "warId": 1502, + "warId": 4001, "actorName": "李典", "actorId": 312, "dataId": 2001, @@ -13,13 +13,13 @@ "hide": 0, "initial_ai": 1, "bossid": 0, - "attribute": "&", + "attribute": "1&1000|2&2000|3&3000", "skill": "&", "seid": "&", "star": 0, "spine": 0 }, { - "warId": 1502, + "warId": 4001, "actorName": "吕布", "actorId": 344, "dataId": 2002, @@ -39,7 +39,7 @@ "star": 0, "spine": 0 }, { - "warId": 1502, + "warId": 4001, "actorName": "贾诩", "actorId": 314, "dataId": 2003, @@ -59,7 +59,7 @@ "star": 0, "spine": 0 }, { - "warId": 1502, + "warId": 4001, "actorName": "许褚", "actorId": 315, "dataId": 2004, @@ -79,7 +79,7 @@ "star": 0, "spine": 0 }, { - "warId": 1502, + "warId": 4001, "actorName": "邓艾", "actorId": 309, "dataId": 2005,