diff --git a/game-server/app/servers/guild/handler/gvgBattleHandler.ts b/game-server/app/servers/guild/handler/gvgBattleHandler.ts index 5e18d2641..82155ce53 100644 --- a/game-server/app/servers/guild/handler/gvgBattleHandler.ts +++ b/game-server/app/servers/guild/handler/gvgBattleHandler.ts @@ -8,7 +8,7 @@ import { Application, BackendSession, ChannelService, HandlerService } from "pin import { resResult, genCode } from "../../../pubUtils/util"; import { GVGLeagueModel } from '../../../db/GVGLeague'; import { checkGVGPeriod, getGroupIdOfServer, getGVGConfig, getGVGPeriodData, getGVGServerType } from '../../../services/gvg/gvgService'; -import { calBattleScoreByCe, calLeagueScore, checkAreaIsInCity, checkMoveStatus, getBirthAreaOfCity, initRobots, teamBreak } from '../../../services/gvg/gvgBattleService'; +import { calBattleScoreByCe, checkAreaIsInCity, checkMoveStatus, getBirthAreaOfCity, getGVGWarId, getOppHeroes, initRobots, teamBreak } from '../../../services/gvg/gvgBattleService'; import { getGVGBattleData } from '../../../services/gvg/gvgBattleMemory'; import { nowSeconds } from '../../../pubUtils/timeUtil'; import { GVGBattleRecModel } from '../../../db/GVGBattleRec'; @@ -198,7 +198,7 @@ export class GVGBattleHandler { teams = await GVGTeamModel.findByRole(roleId, '-_id'); // 更新内存队伍信息 let teamObj = getGVGBattleData(groupId, serverType); - teamObj.enterCity(teams); + teamObj.enterCity(...teams); } const recs = await GVGRecModel.findByCity(cityId, configId); @@ -289,10 +289,8 @@ export class GVGBattleHandler { let teams = await GVGTeamModel.findByAreaId(groupId, serverType, cityId, myTeam.areaId); let points: GVGTeamInListOnPoint[] = [], players: GVGTeamInList[] = []; let pointIds = gameData.gvgPointByAreaId.get(myTeam.areaId)||[]; - console.log('#### teams', teams, teams.length); for(let pointId of pointIds) { let team = teams.find(cur => cur.pointId == pointId); - console.log('#### point', pointId, team); let obj = new GVGTeamInListOnPoint(pointId, !!team, team); points.push(obj); } @@ -387,16 +385,18 @@ export class GVGBattleHandler { if(attackTeam.durability <= 0) return resResult(STATUS.GVG_ATTACK_TEAM_BROKEN); if(defenseTeam.durability <= 0) return resResult(STATUS.GVG_DEFENSE_TEAM_BROKEN); - const battleRecord = await GVGBattleRecModel.createRec(attackTeam, defenseTeam); + const warId = getGVGWarId(defenseTeam); + const battleRecord = await GVGBattleRecModel.createRec(warId, attackTeam, defenseTeam); attackTeam = await GVGTeamModel.battleStartLockAttack(teamCode); defenseTeam = await GVGTeamModel.battleStartLockDefense(oppoTeamCode, teamCode); // 内存处理 let teamObj = getGVGBattleData(groupId, serverType); - teamObj.setTime(teamCode, attackTeam); - teamObj.setTime(teamCode, defenseTeam); + teamObj.setTime(attackTeam.teamCode, attackTeam); + teamObj.setTime(defenseTeam.teamCode, defenseTeam); + let heroes = getOppHeroes(warId, defenseTeam.isRobot, defenseTeam.lineup) - return resResult(STATUS.SUCCESS, { battleCode: battleRecord.battleCode, curTeam: attackTeam }); + return resResult(STATUS.SUCCESS, { battleCode: battleRecord.battleCode, warId, isRobot: defenseTeam.isRobot, heroes, curTeam: attackTeam }); } // 队伍停止攻击 @@ -417,17 +417,17 @@ export class GVGBattleHandler { // 计算并更新两支队伍耐久 let { win, fail } = gameData.gvgBattleDurabilityMinus; - attackTeam = await GVGTeamModel.battleEndAttack(attackTeam.teamCode, isSuccess? -win: -fail, calBattleScoreByCe(isSuccess, attackTeam.lineupCe), calLeagueScore(defenseTeam)); + attackTeam = await GVGTeamModel.battleEndAttack(attackTeam.teamCode, isSuccess? -win: -fail, calBattleScoreByCe(isSuccess, attackTeam.lineupCe)); defenseTeam = await GVGTeamModel.battleEndDefense(defenseTeam.teamCode, isSuccess? -fail: -win, calBattleScoreByCe(isSuccess, defenseTeam.lineupCe)); if(attackTeam.durability <= 0) attackTeam = await teamBreak(city, attackTeam); if(defenseTeam.durability <= 0) defenseTeam = await teamBreak(city, defenseTeam); - - // ! 推送战斗结果给对手队伍 - // const channel = this.channelService.getChannel(teamCode, false); - // if (!!channel) { - // channel.pushMessage('onBattleResult', { isSuccess }); - // } + // 更新内存 + let teamObj = getGVGBattleData(groupId, serverType); + teamObj.battleEnd([attackTeam, defenseTeam]); + // 更新rec + await GVGBattleRecModel.battleEnd(battleCode, isSuccess); + // TODO 完善推送 if(!defenseTeam.isRobot) { sendMessageToUserWithSuc(defenseTeam.roleId, PUSH_ROUTE.GVG_TEAM_ATTACKED, { cityId, areaId: defenseTeam.areaId, teams: [defenseTeam] }); } diff --git a/game-server/app/services/gvg/gvgBattleMemory.ts b/game-server/app/services/gvg/gvgBattleMemory.ts index b50e6bab2..90149d2b6 100644 --- a/game-server/app/services/gvg/gvgBattleMemory.ts +++ b/game-server/app/services/gvg/gvgBattleMemory.ts @@ -15,10 +15,9 @@ class GVGBattleData { public serverType: number; // 单服还是跨服 private teams: Map = new Map(); // 队伍, teamCode => team - private rolePoints: Map = new Map(); // roleId => pointId[],用于更新玩家的积分 + private rolePoints: Map> = new Map(); // roleId => pointId[],用于更新玩家的积分 private roleToTeam: Map = new Map(); // roleId => teamCode private areaToTeams: Map> = new Map(); // areaId => teamCode set,用于定时下发地图玩家数据 - private hasRobot: Map = new Map(); // cityId => boolean constructor(groupId: number, serverType: number) { this.groupId = groupId; @@ -44,7 +43,7 @@ class GVGBattleData { this.rolePoints.delete(roleId); } - public enterCity(teams: GVGTeamType[]) { + public enterCity(...teams: GVGTeamType[]) { for(let team of teams) { let fromAreaId = this.teams.get(team.teamCode)?.areaId||0; @@ -53,15 +52,13 @@ class GVGBattleData { } this.teams.get(team.teamCode).setCity(team.cityId, team.areaId, team.pointId); if(team.pointId > 0) { - if(!this.rolePoints.has(team.roleId)) this.rolePoints.set(team.roleId, []); - this.rolePoints.get(team.roleId).push(team.pointId); + if(!this.rolePoints.has(team.roleId)) this.rolePoints.set(team.roleId, new Set()); + this.rolePoints.get(team.roleId).add(team.pointId); } let teamCodesOfRole = this.roleToTeam.get(team.roleId)||[]; if(teamCodesOfRole.indexOf(team.teamCode) == -1) teamCodesOfRole.push(team.teamCode); this.roleToTeam.set(team.roleId, teamCodesOfRole); this.setAreaMap(team.teamCode, fromAreaId, team.areaId); - - if(team.isRobot) this.hasRobot.set(team.cityId, team.isRobot); } } @@ -99,8 +96,22 @@ class GVGBattleData { team.pointId = pointId; } - public checkHasRobot(cityId: number) { - return this.hasRobot.get(cityId)||false; + // 关卡结算 + public battleEnd(teams: GVGTeamType[]) { + for(let team of teams) { + let teamMem = this.teams.get(team.teamCode); + if(!teamMem) { // 基本不会有没有这个内存的情况,有的话就让他重新计算一次吧 + this.enterCity(team); continue; + } + let { areaId: fromAreaId, pointId: fromPointId } = teamMem; + teamMem.battleEnd(team); + if(fromPointId > 0 && team.pointId == 0) { // 被打得撤离积分点 + if(this.rolePoints.has(team.roleId) && this.rolePoints.get(team.roleId).has(team.pointId)) { + this.rolePoints.get(team.roleId).delete(team.pointId); + } + } + this.setAreaMap(team.teamCode, fromAreaId, team.areaId); + } } } @@ -121,7 +132,7 @@ export async function initTeamToMem() { for(let team of teams) { if(dispatch(team.cityId.toString(), servers)?.id == sid) { let teamObj = getGVGBattleData(team.groupId, team.serverType); - teamObj.enterCity([team]); + teamObj.enterCity(team); } } } \ No newline at end of file diff --git a/game-server/app/services/gvg/gvgBattleService.ts b/game-server/app/services/gvg/gvgBattleService.ts index ee0894a1d..f75e46108 100644 --- a/game-server/app/services/gvg/gvgBattleService.ts +++ b/game-server/app/services/gvg/gvgBattleService.ts @@ -10,6 +10,7 @@ import { getGVGBattleData } from "./gvgBattleMemory"; import { GVGCityMapInfo } from "../../domain/gvgField/returnData"; import { pick } from "underscore"; import { GVG } from "../../pubUtils/dicParam"; +import { GVGHeroInfo, PvpEnemies, PvpHeroInfo } from "../../domain/dbGeneral"; /** @@ -88,7 +89,7 @@ export async function initRobots(confidId: number, groupId: number, serverType: robotTeams = await GVGTeamModel.initRobots(confidId, groupId, serverType, cityId, updateDicPoints); // 存入内存 let teamObj = getGVGBattleData(groupId, serverType); - teamObj.enterCity(robotTeams); + teamObj.enterCity(...robotTeams); } return robotTeams; } @@ -108,14 +109,40 @@ export function calBattleScoreByCe(isSuccess: boolean, lineupCe: number) { return isSuccess? winScore: 0; } -// 计算打投石车/守卫的得分 -export function calLeagueScore(team: GVGTeamType) { - return 0 -} - export async function teamBreak(city: GVGCityType, team: GVGTeamType) { if(team.durability > 0) return team let areaId = getBirthAreaOfCity(city, team.leagueCode); team = await GVGTeamModel.teamBreak(team.teamCode, team.isRobot, team.maxDurability, areaId); return team; +} + +export function getGVGWarId(defenseTeam: GVGTeamType) { + if(!defenseTeam.isRobot) return GVG.GVG_CITY_BGMAP_GKID; // 玩家防守地图 + if(!defenseTeam.isCatapult) return GVG.GVG_CATAPULT_WARJSON; // 投石车使用 + return GVG.GVG_ROBOT_WARJSON; // 据点守卫使用 +} + +export function getOppHeroes(warId: number, isRobot: boolean, lineup: GVGHeroInfo[]) { + let heroes: PvpEnemies[] = []; + const dicWar = gameData.war.get(warId); + if(!dicWar) { console.error(`warId ${warId} not found`); return [] } + const dicWarJson = gameData.warJson.get(dicWar.dispatchJsonId)||[]; + for(let warJson of dicWarJson) { + if(!isRobot) { + let heroInfo = lineup.find(cur => cur.dataId == warJson.dataId); + if(!heroInfo) continue; + let hero = new PvpEnemies(warJson, heroInfo); + heroes.push(hero); + } else { + if(warJson.relation == 2) { + let dicHero = gameData.hero.get(warJson.actorId); + if(!dicHero) continue; + let heroInfo = new PvpHeroInfo(); + heroInfo.setRobotInfo(dicHero, warJson.lv); + let hero = new PvpEnemies(warJson, heroInfo); + heroes.push(hero); + } + } + } + return heroes } \ No newline at end of file diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 85ee38615..7ce9b702e 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -597,6 +597,7 @@ export const FILENAME = { DIC_GK_GVG_VESTIGE: 'dic_zyz_gk_GVGVestige', DIC_GVG_AREA_POINT: 'dic_zyz_GVGAreaPoint', DIC_GVG_BATTLE_RANK_REWARD: 'dic_zyz_GVGBattleRankReward', + DIC_GK_GVGBATTLE: 'dic_zyz_gk_GVGBattle', } export const WAR_RELATE_TABLES = [ @@ -621,6 +622,7 @@ export const WAR_RELATE_TABLES = [ FILENAME.DIC_GK_LADDER, FILENAME.DIC_GK_BRANCH_ELITE, FILENAME.DIC_GK_GVG_VESTIGE, + FILENAME.DIC_GK_GVGBATTLE, ] // 装备栏强化类型 diff --git a/shared/db/GVGBattleRec.ts b/shared/db/GVGBattleRec.ts index 67c363b02..7ff1b3a06 100644 --- a/shared/db/GVGBattleRec.ts +++ b/shared/db/GVGBattleRec.ts @@ -4,6 +4,7 @@ import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoos import { genCode } from "../pubUtils/util"; import { GVGTeamType } from "./GVGTeam"; import { GVGHeroInfo } from "../domain/dbGeneral"; +import { nowSeconds } from "../pubUtils/timeUtil"; class TeamInfo { @prop({ required: true }) @@ -51,6 +52,9 @@ export default class GVGBattleRec extends BaseModel { @prop({ required: true }) battleCode: string; // 战斗记录 + @prop({ required: true }) + warId: number; // 关卡id + @prop({ required: true, type: TeamInfo, _id: false }) attackTeam: TeamInfo; // 挑战队伍 @@ -60,14 +64,22 @@ export default class GVGBattleRec extends BaseModel { @prop({ required: true }) isSuccess: boolean; - public static async createRec(attackTeam: GVGTeamType, defenseTeam: GVGTeamType) { + @prop({ required: true }) + battleEndTime: number; + + public static async createRec(warId: number, attackTeam: GVGTeamType, defenseTeam: GVGTeamType) { const battleCode = genCode(8); - const result: GVGBattleRecType = await GVGBattleRecModel.findOneAndUpdate({ battleCode }, { $set: { attackTeam, defenseTeam, isSuccess: false } }, { new: true, upsert: true }).lean(); + const result: GVGBattleRecType = await GVGBattleRecModel.findOneAndUpdate({ battleCode }, { $set: { warId, attackTeam, defenseTeam, isSuccess: false } }, { new: true, upsert: true }).lean(); + return result; + } + + public static async findByBattleCode(battleCode: string) { + const result: GVGBattleRecType = await GVGBattleRecModel.findOne({ battleCode }).lean(); return result; } - public static async findByBattleCode(battleCode: string) { - const result: GVGBattleRecType = await GVGBattleRecModel.findOne({ battleCode }).lean(); + public static async battleEnd(battleCode: string, isSuccess: boolean) { + const result: GVGBattleRecType = await GVGBattleRecModel.findOneAndUpdate({ battleCode }, { $set: { isSuccess, battleEndTime: nowSeconds() } }, { new: true }).lean(); return result; } } diff --git a/shared/db/GVGTeam.ts b/shared/db/GVGTeam.ts index d6fe0e813..3bf094494 100644 --- a/shared/db/GVGTeam.ts +++ b/shared/db/GVGTeam.ts @@ -89,10 +89,7 @@ export default class GVGTeam extends BaseModel { defenseTime: number; // 防守保护时间 @prop({ required: true, default: 0 }) - playerScore: number; // 积分 - - @prop({ required: true, default: 0 }) - leagueScore: number; // 积分 + score: number; // 积分 @prop({ required: true, type: () => GVGHeroInfo, _id: false }) lineup: GVGHeroInfo[]; @@ -216,8 +213,8 @@ export default class GVGTeam extends BaseModel { } // 结算挑战方 - public static async battleEndAttack(teamCode: string, hpInc: number, playerScoreInc: number, leagueScoreInc: number) { - const team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $inc: { durability: hpInc, playerScore: playerScoreInc, leagueScore: leagueScoreInc } }, { new: true }).lean(); + public static async battleEndAttack(teamCode: string, hpInc: number, playerScoreInc: number) { + const team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $inc: { durability: hpInc, playerScore: playerScoreInc } }, { new: true }).lean(); return team; } diff --git a/shared/domain/battleField/gvgBattle.ts b/shared/domain/battleField/gvgBattle.ts index 85ec2a52f..6c731f911 100644 --- a/shared/domain/battleField/gvgBattle.ts +++ b/shared/domain/battleField/gvgBattle.ts @@ -45,7 +45,7 @@ export class GVGTeamMem extends GVGTeam { this.defenseTime = team.defenseTime; this.startMoveTime = team.startMoveTime; this.stopMoveTime = team.stopMoveTime; - this.playerScore = team.playerScore; + this.score = team.score; } public setCity(cityId: number, areaId = 0, pointId = 0) { @@ -60,4 +60,11 @@ export class GVGTeamMem extends GVGTeam { this.startMoveTime = startMoveTime; this.stopMoveTime = stopMoveTime; } + + public battleEnd(team: GVGTeamType) { + this.durability = team.durability; + this.restartTime = team.restartTime; + this.defenseTime = team.defenseTime; + this.stopMoveTime = team.stopMoveTime; + } } diff --git a/shared/domain/dbGeneral.ts b/shared/domain/dbGeneral.ts index 2c3f1135d..273f92d6b 100644 --- a/shared/domain/dbGeneral.ts +++ b/shared/domain/dbGeneral.ts @@ -73,7 +73,7 @@ export class PvpHeroInfo { if(artifact) this.artifact.push({ artifactId: artifact.artifactId, lv: artifact.lv }) } - setRobotInfo(dicHero: DicHero, lv: number) { + setRobotInfo(dicHero: DicHero, lv?: number) { this.actorId = dicHero.heroId; this.skinId = dicHero.heroId; this.actorName = dicHero.name; @@ -181,17 +181,17 @@ export class PvpEnemies extends Enemies { // score: 这个武将的军功 - constructor(warjson: DicWarJson, heroInfo: PvpHeroInfo, score: number, ce: number) { + constructor(warjson: DicWarJson, heroInfo: PvpHeroInfo, score?: number, ce?: number) { super(warjson, heroInfo, ce); this.star = heroInfo.star; this.colorStar = heroInfo.colorStar; this.quality = heroInfo.quality; this.lv = heroInfo.lv; - this.score = score; this.talent = heroInfo.talent; this.job = heroInfo.job; this.subHid = heroInfo.subHid; this.artifact = heroInfo.artifact||[]; + if(score) this.score = score; } } diff --git a/shared/pubUtils/dicParam.ts b/shared/pubUtils/dicParam.ts index 343fb83d6..49564e302 100644 --- a/shared/pubUtils/dicParam.ts +++ b/shared/pubUtils/dicParam.ts @@ -385,7 +385,7 @@ export const GVG = { GVG_ARMY_LEAGUE_TIME: 3, // GVG开启军团等级开启限制 GVG_ROLE_TYPE: '1&贤臣|2&猛将', // GVG中职能选择 GVG_TEAM_NUMBER: '1&1&100|2&50&100|3&80&100', // GVG编队,index&lv&durability - GVG_CATAPULT: '3000&30&10', // 科技树投石车的耐久&单次伤害&间隔时间 + GVG_CATAPULT: '&', // & GVG_CITY_OCCUPIED_NUMBER: 2, // 一个联军最多可以占领的城池数量 GVG_SP_FIELD_ADD: 0.2, // 农田特殊格子上种植对应的植物的加成 GVG_FARM_LOCK_TIME: 300, // 农田锁定时间(秒) @@ -408,4 +408,11 @@ export const GVG = { GVG_DEFAULT_DURABILITY_MINUS: '5&100', // GVG激战期默认的队伍耐扣除规则,胜&败:num&num GVG_PRODUCE_GAME_RATIO: '1&0.5|2&0.1|3&0.2', // 云台外政中贡献分3种产量分值换算 1:粮食*系数 2:铁矿*系数 3:木材*系数 GVG_BATTLE_SCORE: 1000000, // 战力换算积分的除数 + GVG_CATAPULT_NAME: '投石车', // GVG投石车的名字 + GVG_CATAPULT_HEAD: 11201, // GVG投石车的头像 + GVG_CATAPULT_SPINE: 11401, // GVG投石车的形象spine + GVG_CATAPULT_WARJSON: 85003, // GVG投石车的出兵表 + GVG_CATAPULT_CE: 1000000, // GVG投石车的战力 + GVG_CATAPULT_TIME: 10, // GVG投石车的攻击频率(s) + GVG_ROBOT_WARJSON: 85002, // GVG城池守卫的出兵表 }; diff --git a/shared/resource/jsons/dic_zyz_gk_GVGBattle.json b/shared/resource/jsons/dic_zyz_gk_GVGBattle.json new file mode 100644 index 000000000..11fa10d8b --- /dev/null +++ b/shared/resource/jsons/dic_zyz_gk_GVGBattle.json @@ -0,0 +1,80 @@ +[ + { + "war_id": 85001, + "dispatchJsonId": 85001, + "bg_img": 85001, + "mapid": 85001, + "warType": 23, + "gk_name": "逐鹿中原&备战", + "level": 0, + "lvLimted": 1, + "quality": 0, + "star": 0, + "job": 0, + "turnLimted": 10, + "forcedCharactor": "&", + "fobiddenCharactor": "&", + "heroInUI": "1&307", + "victoryInfoInUI": "消灭所有敌军&10回合内造成伤害更高", + "loseInfoInUI": "我方全部阵亡&10回合内造成伤害不敌敌军", + "starInfoInUI": "无", + "cost": 0, + "recommendedPower": 0, + "previousGk": 0, + "needPrepare": 1, + "HeroNum": "1&6", + "needPrepare_1": 1 + }, + { + "war_id": 85002, + "dispatchJsonId": 85002, + "bg_img": 85001, + "mapid": 85001, + "warType": 23, + "gk_name": "逐鹿中原&城池守卫", + "level": 0, + "lvLimted": 1, + "quality": 0, + "star": 0, + "job": 0, + "turnLimted": 10, + "forcedCharactor": "&", + "fobiddenCharactor": "&", + "heroInUI": "1&307", + "victoryInfoInUI": "消灭所有敌军&10回合内造成伤害更高", + "loseInfoInUI": "我方全部阵亡&10回合内造成伤害不敌敌军", + "starInfoInUI": "无", + "cost": 0, + "recommendedPower": 0, + "previousGk": 0, + "needPrepare": 1, + "HeroNum": "1&6", + "needPrepare_1": 1 + }, + { + "war_id": 85003, + "dispatchJsonId": 85003, + "bg_img": 85001, + "mapid": 85001, + "warType": 23, + "gk_name": "逐鹿中原&城池守卫", + "level": 0, + "lvLimted": 1, + "quality": 0, + "star": 0, + "job": 0, + "turnLimted": 10, + "forcedCharactor": "&", + "fobiddenCharactor": "&", + "heroInUI": "1&307", + "victoryInfoInUI": "消灭所有敌军&10回合内造成伤害更高", + "loseInfoInUI": "我方全部阵亡&10回合内造成伤害不敌敌军", + "starInfoInUI": "无", + "cost": 0, + "recommendedPower": 0, + "previousGk": 0, + "needPrepare": 1, + "HeroNum": "1&6", + "needPrepare_1": 1 + } +] \ No newline at end of file diff --git a/shared/resource/warJsons/85001.json b/shared/resource/warJsons/85001.json new file mode 100644 index 000000000..9964d6f52 --- /dev/null +++ b/shared/resource/warJsons/85001.json @@ -0,0 +1,278 @@ +[ + { + "warId": 85001, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 0, + "dirction": 1, + "x": 6, + "y": 7, + "var": 501, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85001, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 1, + "dirction": 1, + "x": 6, + "y": 6, + "var": 502, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85001, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 2, + "dirction": 1, + "x": 6, + "y": 8, + "var": 503, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85001, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 3, + "dirction": 1, + "x": 5, + "y": 7, + "var": 504, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85001, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 4, + "dirction": 1, + "x": 5, + "y": 6, + "var": 505, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85001, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 5, + "dirction": 1, + "x": 5, + "y": 8, + "var": 506, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85001, + "actorName": "曹操", + "actorId": 4001, + "dataId": 2001, + "relation": 2, + "outIndex": 0, + "dirction": 0, + "x": 11, + "y": 7, + "var": 2001, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85001, + "actorName": "夏侯惇", + "actorId": 4002, + "dataId": 2002, + "relation": 2, + "outIndex": 1, + "dirction": 0, + "x": 11, + "y": 6, + "var": 2002, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85001, + "actorName": "夏侯渊", + "actorId": 4004, + "dataId": 2003, + "relation": 2, + "outIndex": 2, + "dirction": 0, + "x": 11, + "y": 8, + "var": 2003, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85001, + "actorName": "郭嘉", + "actorId": 4005, + "dataId": 2004, + "relation": 2, + "outIndex": 3, + "dirction": 0, + "x": 12, + "y": 7, + "var": 2004, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85001, + "actorName": "张辽", + "actorId": 4003, + "dataId": 2005, + "relation": 2, + "outIndex": 4, + "dirction": 0, + "x": 12, + "y": 6, + "var": 2005, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85001, + "actorName": "典韦", + "actorId": 4007, + "dataId": 2006, + "relation": 2, + "outIndex": 5, + "dirction": 0, + "x": 12, + "y": 8, + "var": 2006, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + } +] \ No newline at end of file diff --git a/shared/resource/warJsons/85002.json b/shared/resource/warJsons/85002.json new file mode 100644 index 000000000..acea029d0 --- /dev/null +++ b/shared/resource/warJsons/85002.json @@ -0,0 +1,278 @@ +[ + { + "warId": 85002, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 0, + "dirction": 1, + "x": 6, + "y": 7, + "var": 501, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85002, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 1, + "dirction": 1, + "x": 6, + "y": 6, + "var": 502, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85002, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 2, + "dirction": 1, + "x": 6, + "y": 8, + "var": 503, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85002, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 3, + "dirction": 1, + "x": 5, + "y": 7, + "var": 504, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85002, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 4, + "dirction": 1, + "x": 5, + "y": 6, + "var": 505, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85002, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 5, + "dirction": 1, + "x": 5, + "y": 8, + "var": 506, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85002, + "actorName": "曹操", + "actorId": 4001, + "dataId": 2001, + "relation": 2, + "outIndex": 0, + "dirction": 0, + "x": 11, + "y": 7, + "var": 2001, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85002, + "actorName": "夏侯惇", + "actorId": 4002, + "dataId": 2002, + "relation": 2, + "outIndex": 1, + "dirction": 0, + "x": 11, + "y": 6, + "var": 2002, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85002, + "actorName": "夏侯渊", + "actorId": 4004, + "dataId": 2003, + "relation": 2, + "outIndex": 2, + "dirction": 0, + "x": 11, + "y": 8, + "var": 2003, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85002, + "actorName": "郭嘉", + "actorId": 4005, + "dataId": 2004, + "relation": 2, + "outIndex": 3, + "dirction": 0, + "x": 12, + "y": 7, + "var": 2004, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85002, + "actorName": "张辽", + "actorId": 4003, + "dataId": 2005, + "relation": 2, + "outIndex": 4, + "dirction": 0, + "x": 12, + "y": 6, + "var": 2005, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85002, + "actorName": "典韦", + "actorId": 4007, + "dataId": 2006, + "relation": 2, + "outIndex": 5, + "dirction": 0, + "x": 12, + "y": 8, + "var": 2006, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + } +] \ No newline at end of file diff --git a/shared/resource/warJsons/85003.json b/shared/resource/warJsons/85003.json new file mode 100644 index 000000000..1c42e0619 --- /dev/null +++ b/shared/resource/warJsons/85003.json @@ -0,0 +1,278 @@ +[ + { + "warId": 85003, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 0, + "dirction": 1, + "x": 6, + "y": 7, + "var": 501, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85003, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 1, + "dirction": 1, + "x": 6, + "y": 6, + "var": 502, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85003, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 2, + "dirction": 1, + "x": 6, + "y": 8, + "var": 503, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85003, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 3, + "dirction": 1, + "x": 5, + "y": 7, + "var": 504, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85003, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 4, + "dirction": 1, + "x": 5, + "y": 6, + "var": 505, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85003, + "actorName": "我军", + "actorId": 0, + "dataId": 0, + "relation": 0, + "outIndex": 5, + "dirction": 1, + "x": 5, + "y": 8, + "var": 506, + "lv": 1, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85003, + "actorName": "曹操", + "actorId": 4001, + "dataId": 2001, + "relation": 2, + "outIndex": 0, + "dirction": 0, + "x": 11, + "y": 7, + "var": 2001, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85003, + "actorName": "夏侯惇", + "actorId": 4002, + "dataId": 2002, + "relation": 2, + "outIndex": 1, + "dirction": 0, + "x": 11, + "y": 6, + "var": 2002, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85003, + "actorName": "夏侯渊", + "actorId": 4004, + "dataId": 2003, + "relation": 2, + "outIndex": 2, + "dirction": 0, + "x": 11, + "y": 8, + "var": 2003, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85003, + "actorName": "郭嘉", + "actorId": 4005, + "dataId": 2004, + "relation": 2, + "outIndex": 3, + "dirction": 0, + "x": 12, + "y": 7, + "var": 2004, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85003, + "actorName": "张辽", + "actorId": 4003, + "dataId": 2005, + "relation": 2, + "outIndex": 4, + "dirction": 0, + "x": 12, + "y": 6, + "var": 2005, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + }, + { + "warId": 85003, + "actorName": "典韦", + "actorId": 4007, + "dataId": 2006, + "relation": 2, + "outIndex": 5, + "dirction": 0, + "x": 12, + "y": 8, + "var": 2006, + "lv": 20, + "hide": 0, + "initial_ai": 1, + "bossid": 0, + "attribute": "&", + "skill": "&", + "seid": "&", + "star": 0, + "quality": 0, + "jobLv": 0, + "spine": 0 + } +] \ No newline at end of file