名将擂台:获取对手

This commit is contained in:
luying
2022-07-15 15:31:08 +08:00
parent 7394f14e9d
commit f56dbc29de
15 changed files with 1881 additions and 70 deletions

View File

@@ -162,7 +162,16 @@ export enum LADDER_STATUS {
NO = 0, // 无战场
CHECK = 1, // 出兵中
BATTLE = 2, // 战斗中
COMPLETE = 3, // 战斗结束
}
export const LADDER_CHECK_STOP_TIME = 2 * 60;
export const LADDER_BATTLE_STOP_TIME = 5 * 60;
export const LADDER_BATTLE_STOP_TIME = 5 * 60;
export const LADDER_SERVER_GAP_TIME = 5; // 服务器比客户端晚5秒
export enum LADDER_OPP_STATUS {
BATTLE = 1, // 可以挑战
OPP_IS_LOCKED = 2, // 对手被挑战
OPP_RANK_CHANGE = 3, // 对手排名变化
MY_RANK_CHANGE = 4, // 自己排名变化
}

View File

@@ -160,4 +160,7 @@ export const PUSH_ROUTE = {
TASK_BOX_REFRESH: 'onTaskBoxRefresh',
UPDATE_SURVEY: 'onUpdateSurvey',
DELETE_SURVEY: 'onDeleteSurvey',
LADDER_CHECK_STOP: 'onLadderCheckStop',
LADDER_BATTLE_STOP: 'onLadderBattleStop',
LADDER_RANK_UPDATE: 'onLadderRankUpdate',
}

View File

@@ -261,6 +261,8 @@ export const STATUS = {
// 名将擂台
LADDER_NOT_OPEN: { code: 21200, simStr: '名将擂台未开放' },
LADDER_BUY_MAX: { code: 21201, simStr: '名将擂台购买次数达到上限' },
LADDER_RANK_ERROR: { code: 21202, simStr: '该排名玩家不可挑战' },
LADDER_REFRESH_CNT_MAX: { code: 21203, simStr: '刷新次数达到上限' },
// 通用 30000 - 30099
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },

View File

@@ -15,7 +15,10 @@ export default class LadderMatch extends BaseModel {
rank: number; // 排名
@prop({ required: true, default: 0 })
historyRank: number; // 历史最高排名
@prop({ required: true, default: 0 })
locked: number; // 是否被挑战
@prop({ required: true, default: null, _id: false })
defense: LadderDefense;
@@ -31,8 +34,21 @@ export default class LadderMatch extends BaseModel {
@prop({ required: true, default: 0 })
refOppCnt: number; // 刷新对手次数
public static async findByRoleId(roleId: string, getters = false) {
const result: LadderMatchType = await LadderMatchModel.findOne({ roleId }).lean({ getters});
public static async findByRoleId(roleId: string) {
const result: LadderMatchType = await LadderMatchModel.findOne({ roleId }).lean();
return result;
}
public static async checkByRank(rank: number) {
const result = await LadderMatchModel.exists({ rank });
return result;
}
public static async findByRoleIdAndInclude(roleId: string) {
const result: LadderMatchType = await LadderMatchModel.findOne({ roleId })
.populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt')
.populate('defense.hero', 'hid skinId quality star colorStar lv')
.lean();
return result;
}
@@ -62,6 +78,11 @@ export default class LadderMatch extends BaseModel {
}
return result
}
public static async lock(roleId: string, rank: number) {
const defense: LadderMatchType = await LadderMatchModel.findOneAndUpdate({ roleId, rank, locked: 0 }, { $set: { locked: 1 }}, { new: true }).lean();
return defense;
}
}
export const LadderMatchModel = getModelForClass(LadderMatch);

View File

@@ -6,6 +6,8 @@ import { CounterModel } from './Counter';
import { COUNTER, LADDER_STATUS } from '../consts';
import { EXTERIOR, PVP } from '../pubUtils/dicParam';
import { LadderDefense, LadderOppPlayerInfo } from '../domain/battleField/ladder';
import { genCode } from '../pubUtils/util';
import { nowSeconds } from '../pubUtils/timeUtil';
@index({ battleCode: 1 })
@@ -21,17 +23,19 @@ export default class LadderMatchRec extends BaseModel {
@prop({ required: true })
status: LADDER_STATUS; // 1-出兵中 2-挑战中 3-挑战完毕
@prop({ required: true })
timeout: boolean; // 是否超时
@prop({ required: true })
checkTime: number; // 开始出兵的时间10位时间戳
@prop({ required: true })
battleTime: number; // 开始挑战的时间10位时间
@prop({ required: true })
endTime: number; // 结束时间
@prop({ required: true, type: LadderOppPlayerInfo, default: {}, _id: false })
attackInfo: () => LadderOppPlayerInfo; // 攻方信息
@prop({ required: true, type: LadderOppPlayerInfo, default: {}, _id: false })
defenseInfo: () => LadderOppPlayerInfo; // 守方信息
@prop({ required: true, type: LadderDefense, default: {}, _id: false })
defense: () => LadderDefense; // 守方信息
@prop({ required: true, type: () => LadderOppPlayerInfo, default: {}, _id: false })
attackInfo: LadderOppPlayerInfo; // 攻方信息
@prop({ required: true, type: () => LadderOppPlayerInfo, default: {}, _id: false })
defenseInfo: LadderOppPlayerInfo; // 守方信息
@prop({ required: true, type: () => LadderDefense, default: {}, _id: false })
defense: LadderDefense; // 守方信息
public static async findByRoleId(roleId: string, getters = false) {
const result: LadderMatchRecType = await LadderMatchRecModel.findOne({ roleId1: roleId }).lean({ getters});
@@ -42,6 +46,24 @@ export default class LadderMatchRec extends BaseModel {
const result: LadderMatchRecType = await LadderMatchRecModel.findOne({ roleId1: roleId, status: { $in: [ LADDER_STATUS.BATTLE, LADDER_STATUS.CHECK ] } }).lean({ getters});
return result;
}
public static async createRec(serverId: number, roleId1: string, roleId2: string, defense: LadderDefense, attackInfo: LadderOppPlayerInfo, defenseInfo: LadderOppPlayerInfo) {
const battleCode = genCode(10);
const result: LadderMatchRecType = await LadderMatchRecModel.findOneAndUpdate({ battleCode }, {
$set: { roleId1, roleId2, serverId, defense, status: LADDER_STATUS.CHECK, checkTime: nowSeconds(), attackInfo, defenseInfo }
}, { new: true, upsert: true }).lean();
return result;
}
public static async timeout(battleCode: string) {
const result: LadderMatchRecType = await LadderMatchRecModel.findOneAndUpdate({ battleCode }, { $set: { status: LADDER_STATUS.COMPLETE, timeout: true } }).lean();
return result;
}
public static async giveup(battleCode: string) {
const result: LadderMatchRecType = await LadderMatchRecModel.findOneAndUpdate({ battleCode }, { $set: { status: LADDER_STATUS.NO } }).lean();
return result;
}
}
export const LadderMatchRecModel = getModelForClass(LadderMatchRec);

View File

@@ -1,11 +1,13 @@
import { mongoose, prop, Ref } from "@typegoose/typegoose";
import { LADDER_BATTLE_STOP_TIME, LADDER_CHECK_STOP_TIME, LADDER_STATUS } from "../../consts";
import Hero from '../../db/Hero';
import Hero, { HeroType } from '../../db/Hero';
import { LadderMatchType } from "../../db/LadderMatch";
import { LadderMatchRecType } from "../../db/LadderMatchRec";
import { RoleType } from "../../db/Role";
import { gameData } from "../../pubUtils/data";
import { EXTERIOR, LADDER } from "../../pubUtils/dicParam";
import { DicLadderDifficultRatio } from "../../pubUtils/dictionary/DicLadderDifficultRatio";
import { DicWarJson } from "../../pubUtils/dictionary/DicWarJson";
import { RoleRankInfo } from "../rank";
// ladderMatch表
@@ -33,6 +35,7 @@ export class LadderDefenseHero {
}
}
// ladderMatch表
export class LadderDefense {
@prop({ required: true })
@@ -47,6 +50,16 @@ export class LadderDefense {
}
// LadderMatch表
export class LadderOppPlayerInDB {
@prop({ required: true })
rank: number;
@prop({ required: true })
roleId: string;
@prop({ required: true })
isRobot: boolean;
}
// ladderMatchRec
export class LadderOppPlayerHeroInfo {
@prop({ required: true })
@@ -54,44 +67,66 @@ export class LadderOppPlayerHeroInfo {
@prop({ required: true })
skinId: number; // 皮肤id
@prop({ required: true })
quality: number; // 皮肤id
quality: number; // 品质
@prop({ required: true })
star: number; // 皮肤id
star: number; // 星级
@prop({ required: true })
colorStar: number; // 皮肤id
colorStar: number; // 彩星
@prop({ required: true })
lv: number; // 皮肤id
lv: number; // 等级
setByWarJson(warJson: DicWarJson) {
this.hid = warJson.actorId;
this.skinId = warJson.actorId;
this.star = warJson.star;
this.colorStar = 0;
this.lv = warJson.lv;
let dicHero = gameData.hero.get(warJson.actorId);
if(dicHero) this.quality = dicHero.quality;
}
setByDefenseHero(hero: HeroType) {
this.hid = hero.hid;
this.skinId = hero.skinId;
this.quality = hero.quality;
this.star = hero.star;
this.colorStar = hero.colorStar;
this.lv = hero.lv;
}
}
// ladderMatchRec
export class LadderOppPlayerInfo {
@prop({ required: true })
oldRank: number; // 原排名
oldRank: number = 0; // 原排名
@prop({ required: true })
newRank: number; // 交换后的排名
newRank: number = 0; // 交换后的排名
@prop({ required: true })
roleId: string; // 角色 id
roleId: string = ''; // 角色 id
@prop({ required: true })
roleName: string; // 角色 名
roleName: string = LADDER.LADDER_ROBOT_NAME; // 角色 名
@prop({ required: true, default: 0 })
lv: number; // 等级
lv: number = 1; // 等级
@prop({ required: true, default: EXTERIOR.EXTERIOR_FACE })
head: number; // 头像
head: number = EXTERIOR.EXTERIOR_FACE; // 头像
@prop({ required: true, default: EXTERIOR.EXTERIOR_FACECASE })
frame: number; // 相框
frame: number = EXTERIOR.EXTERIOR_FACECASE; // 相框
@prop({ required: true, default: EXTERIOR.EXTERIOR_APPEARANCE })
spine: number; // 形象
spine: number = EXTERIOR.EXTERIOR_APPEARANCE; // 形象
@prop({ required: true, default: 0 })
title: number; // 爵位
title: number = 1; // 爵位
@prop({ required: true, default: 0 })
ce: number; // 最高五人战力
ce: number = 0; // 防守战力
@prop({ required: true, default: false })
isSuccess: boolean; // 是否胜利
@prop({ required: true, default: 0 })
score: number; // 获得的总积分
isSuccess: boolean = false; // 是否胜利
@prop({ required: true, default: [], type: LadderOppPlayerHeroInfo, _id: false })
heroes: LadderOppPlayerHeroInfo[]; // 获得的总积分
heroes: LadderOppPlayerHeroInfo[] = []; // 武将
@prop({ required: true })
isRobot: boolean = false; // 原排名
constructor(role: RoleType, heroes: LadderOppPlayerHeroInfo[], defCe: number, isSuccess: boolean ) {
initByPlayer(rank: number, role: RoleType, heroes: LadderOppPlayerHeroInfo[], defCe: number, isSuccess: boolean ) {
this.oldRank = rank;
this.newRank = rank;
this.roleId = role.roleId;
this.roleName = role.roleName;
this.head = role.head;
@@ -103,9 +138,21 @@ export class LadderOppPlayerInfo {
this.isSuccess = isSuccess;
this.heroes = heroes;
}
initByRobot(dicLadderDifficultRatio: DicLadderDifficultRatio, heroes: LadderOppPlayerHeroInfo[], isSuccess: boolean) {
this.oldRank = dicLadderDifficultRatio.rank;
this.newRank = dicLadderDifficultRatio.rank;
this.roleId = `robot${this.oldRank}`;
this.head = dicLadderDifficultRatio.head;
this.spine = dicLadderDifficultRatio.spine;
this.ce = dicLadderDifficultRatio.ce;
this.lv = dicLadderDifficultRatio.level;
this.isSuccess = isSuccess;
this.heroes = heroes;
}
}
// 接口返回
// defense字段 接口返回
export class LadderDefenseHeroReturn {
actorId: number; // 武将id
ai: number; // ai逻辑1-进攻型 2-防守型
@@ -120,6 +167,7 @@ export class LadderDefenseHeroReturn {
}
}
// defense字段 接口返回
export class LadderDefenseReturn {
warId: number;
defCe: number = 0;
@@ -135,21 +183,23 @@ export class LadderDefenseReturn {
}
}
// oppPlayers字段接口返回
export class LadderOppPlayerReturn {
rank: number; // 对手排名
roleId: string; // 对手玩家id
roleName: string; // 对手玩家名
head: number; // 头像
frame: number; // 相框
spine: number; // 形象
lv: number; // 对手玩家等级
title: number; // 对手爵位
defCe: number; // 对手防守阵容战力
isRobot: boolean; // 是否是机器人
rank: number = 0; // 对手排名
roleId: string = ''; // 对手玩家id
roleName: string = LADDER.LADDER_ROBOT_NAME; // 对手玩家名
head: number = EXTERIOR.EXTERIOR_FACE; // 头像
frame: number = EXTERIOR.EXTERIOR_FACECASE; // 相框
spine: number = EXTERIOR.EXTERIOR_APPEARANCE; // 形象
lv: number = 1; // 对手玩家等级
title: number = 1; // 对手爵位
defCe: number = 0; // 对手防守阵容战力
isRobot: boolean = true; // 是否是机器人
constructor(rank: number, isRobot: boolean) {
this.rank = rank;
this.isRobot = isRobot;
if(isRobot) this.roleId = `robot${this.rank}`;
}
setByRedis(param: RoleRankInfo, defCe: number) {
@@ -164,17 +214,14 @@ export class LadderOppPlayerReturn {
}
setByRobot(ladderDifficultRatio: DicLadderDifficultRatio) {
this.roleId = `robot${this.rank}`;
this.roleName = LADDER.LADDER_ROBOT_NAME;
this.frame = EXTERIOR.EXTERIOR_FACECASE;
this.head = ladderDifficultRatio.head;
this.spine = ladderDifficultRatio.spine;
this.lv = ladderDifficultRatio.level;
this.title = 1;
this.defCe = ladderDifficultRatio.ce;
}
}
// getData总体返回
export class LadderDataReturn {
rank: number = 0;
historyRank: number = 0;
@@ -182,7 +229,7 @@ export class LadderDataReturn {
buyCnt: number = 0;
refOppCnt: number = 0;
defense: LadderDefenseReturn = null;
status: LADDER_STATUS;
status: LADDER_STATUS = LADDER_STATUS.NO;
time: number = 0;
oppPlayers: LadderOppPlayerReturn[] = []
@@ -211,11 +258,53 @@ export class LadderDataReturn {
}
export class LadderOppPlayerInDB {
@prop({ required: true })
rank: number;
@prop({ required: true })
roleId: string;
@prop({ required: true })
isRobot: boolean;
// getOppLineup返回
export class LadderOppLineupReturn {
myRank: number = 0;
isRobot: boolean = true;
rank: number = 0;
roleId: string = '';
roleName: string = LADDER.LADDER_ROBOT_NAME;
title: number = 1;
guildName: string = '';
defCe: number = 0;
heroes: LadderOppPlayerHeroInfo[] = []
setMyRank(myRank: number) {
this.myRank = myRank;
}
setRobot(ladderDifficultRatio: DicLadderDifficultRatio, warJsons: DicWarJson[]) {
this.isRobot = true;
this.rank = ladderDifficultRatio.rank;
this.roleId = `robot${this.rank}`;
this.defCe = ladderDifficultRatio.ce;
for(let warJson of warJsons) {
if(warJson.relation == 2) {
let hero = new LadderOppPlayerHeroInfo();
hero.setByWarJson(warJson);
this.heroes.push(hero);
}
}
}
/**
*
* @param ladderMatch 需要是populate过role和defense.hero
*/
setPlayer(ladderMatch: LadderMatchType) {
this.isRobot = false;
this.rank = ladderMatch.rank;
this.roleId = ladderMatch.roleId;
let role = <RoleType>ladderMatch.role;
this.roleName = role.roleName;
this.title = role.title;
this.guildName = role.guildName;
for(let defenseHero of (ladderMatch.defense?.heroes||[])) {
this.defCe += defenseHero.ce;
let hero = new LadderOppPlayerHeroInfo();
hero.setByDefenseHero(<HeroType>defenseHero.hero);
this.heroes.push(hero);
}
}
}

View File

@@ -0,0 +1,278 @@
[
{
"warId": 4601,
"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": 4601,
"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": 4601,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 2,
"dirction": 1,
"x": 5,
"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": 4601,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 3,
"dirction": 1,
"x": 5,
"y": 5,
"var": 504,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4601,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 4,
"dirction": 1,
"x": 4,
"y": 8,
"var": 505,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4601,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 5,
"dirction": 1,
"x": 4,
"y": 5,
"var": 506,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4601,
"actorName": "典韦",
"actorId": 307,
"dataId": 2001,
"relation": 2,
"outIndex": 0,
"dirction": 0,
"x": 11,
"y": 7,
"var": 2001,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4601,
"actorName": "文丑",
"actorId": 355,
"dataId": 2002,
"relation": 2,
"outIndex": 1,
"dirction": 0,
"x": 11,
"y": 6,
"var": 2002,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4601,
"actorName": "颜良",
"actorId": 354,
"dataId": 2003,
"relation": 2,
"outIndex": 2,
"dirction": 0,
"x": 12,
"y": 8,
"var": 2003,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4601,
"actorName": "孙乾",
"actorId": 331,
"dataId": 2004,
"relation": 2,
"outIndex": 3,
"dirction": 0,
"x": 12,
"y": 5,
"var": 2004,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4601,
"actorName": "蔡琰",
"actorId": 313,
"dataId": 2005,
"relation": 2,
"outIndex": 4,
"dirction": 0,
"x": 13,
"y": 8,
"var": 2005,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4601,
"actorName": "麹义",
"actorId": 350,
"dataId": 2006,
"relation": 2,
"outIndex": 5,
"dirction": 0,
"x": 13,
"y": 5,
"var": 2006,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
}
]

View File

@@ -0,0 +1,278 @@
[
{
"warId": 4602,
"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": 4602,
"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": 4602,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 2,
"dirction": 1,
"x": 5,
"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": 4602,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 3,
"dirction": 1,
"x": 5,
"y": 5,
"var": 504,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4602,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 4,
"dirction": 1,
"x": 4,
"y": 8,
"var": 505,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4602,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 5,
"dirction": 1,
"x": 4,
"y": 5,
"var": 506,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4602,
"actorName": "潘璋",
"actorId": 360,
"dataId": 2001,
"relation": 2,
"outIndex": 0,
"dirction": 0,
"x": 11,
"y": 7,
"var": 2001,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4602,
"actorName": "乐进",
"actorId": 316,
"dataId": 2002,
"relation": 2,
"outIndex": 1,
"dirction": 0,
"x": 11,
"y": 6,
"var": 2002,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4602,
"actorName": "凌统",
"actorId": 361,
"dataId": 2003,
"relation": 2,
"outIndex": 2,
"dirction": 0,
"x": 12,
"y": 8,
"var": 2003,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4602,
"actorName": "郭嘉",
"actorId": 305,
"dataId": 2004,
"relation": 2,
"outIndex": 3,
"dirction": 0,
"x": 12,
"y": 5,
"var": 2004,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4602,
"actorName": "孙权",
"actorId": 336,
"dataId": 2005,
"relation": 2,
"outIndex": 4,
"dirction": 0,
"x": 13,
"y": 8,
"var": 2005,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4602,
"actorName": "李典",
"actorId": 312,
"dataId": 2006,
"relation": 2,
"outIndex": 5,
"dirction": 0,
"x": 13,
"y": 5,
"var": 2006,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
}
]

View File

@@ -0,0 +1,278 @@
[
{
"warId": 4603,
"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": 4603,
"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": 4603,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 2,
"dirction": 1,
"x": 5,
"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": 4603,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 3,
"dirction": 1,
"x": 5,
"y": 5,
"var": 504,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4603,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 4,
"dirction": 1,
"x": 4,
"y": 8,
"var": 505,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4603,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 5,
"dirction": 1,
"x": 4,
"y": 5,
"var": 506,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4603,
"actorName": "典韦",
"actorId": 307,
"dataId": 2001,
"relation": 2,
"outIndex": 0,
"dirction": 0,
"x": 11,
"y": 7,
"var": 2001,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4603,
"actorName": "文丑",
"actorId": 355,
"dataId": 2002,
"relation": 2,
"outIndex": 1,
"dirction": 0,
"x": 11,
"y": 6,
"var": 2002,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4603,
"actorName": "颜良",
"actorId": 354,
"dataId": 2003,
"relation": 2,
"outIndex": 2,
"dirction": 0,
"x": 12,
"y": 8,
"var": 2003,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4603,
"actorName": "郭嘉",
"actorId": 305,
"dataId": 2004,
"relation": 2,
"outIndex": 3,
"dirction": 0,
"x": 12,
"y": 5,
"var": 2004,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4603,
"actorName": "孙权",
"actorId": 333,
"dataId": 2005,
"relation": 2,
"outIndex": 4,
"dirction": 0,
"x": 13,
"y": 8,
"var": 2005,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4603,
"actorName": "太史慈",
"actorId": 335,
"dataId": 2006,
"relation": 2,
"outIndex": 5,
"dirction": 0,
"x": 13,
"y": 5,
"var": 2006,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
}
]

View File

@@ -0,0 +1,278 @@
[
{
"warId": 4604,
"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": 4604,
"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": 4604,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 2,
"dirction": 1,
"x": 5,
"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": 4604,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 3,
"dirction": 1,
"x": 5,
"y": 5,
"var": 504,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4604,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 4,
"dirction": 1,
"x": 4,
"y": 8,
"var": 505,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4604,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 5,
"dirction": 1,
"x": 4,
"y": 5,
"var": 506,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4604,
"actorName": "庞舞",
"actorId": 352,
"dataId": 2001,
"relation": 2,
"outIndex": 0,
"dirction": 0,
"x": 11,
"y": 7,
"var": 2001,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4604,
"actorName": "文丑",
"actorId": 354,
"dataId": 2002,
"relation": 2,
"outIndex": 1,
"dirction": 0,
"x": 11,
"y": 6,
"var": 2002,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4604,
"actorName": "颜良",
"actorId": 355,
"dataId": 2003,
"relation": 2,
"outIndex": 2,
"dirction": 0,
"x": 12,
"y": 8,
"var": 2003,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4604,
"actorName": "郭嘉",
"actorId": 305,
"dataId": 2004,
"relation": 2,
"outIndex": 3,
"dirction": 0,
"x": 12,
"y": 5,
"var": 2004,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4604,
"actorName": "华佗",
"actorId": 346,
"dataId": 2005,
"relation": 2,
"outIndex": 4,
"dirction": 0,
"x": 13,
"y": 8,
"var": 2005,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4604,
"actorName": "王平",
"actorId": 330,
"dataId": 2006,
"relation": 2,
"outIndex": 5,
"dirction": 0,
"x": 13,
"y": 5,
"var": 2006,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
}
]

View File

@@ -0,0 +1,278 @@
[
{
"warId": 4605,
"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": 4605,
"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": 4605,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 2,
"dirction": 1,
"x": 5,
"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": 4605,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 3,
"dirction": 1,
"x": 5,
"y": 5,
"var": 504,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4605,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 4,
"dirction": 1,
"x": 4,
"y": 8,
"var": 505,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4605,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 5,
"dirction": 1,
"x": 4,
"y": 5,
"var": 506,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4605,
"actorName": "黄盖",
"actorId": 362,
"dataId": 2001,
"relation": 2,
"outIndex": 0,
"dirction": 0,
"x": 11,
"y": 7,
"var": 2001,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4605,
"actorName": "周泰",
"actorId": 332,
"dataId": 2002,
"relation": 2,
"outIndex": 1,
"dirction": 0,
"x": 11,
"y": 6,
"var": 2002,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4605,
"actorName": "马云禄",
"actorId": 327,
"dataId": 2003,
"relation": 2,
"outIndex": 2,
"dirction": 0,
"x": 12,
"y": 8,
"var": 2003,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4605,
"actorName": "孙乾",
"actorId": 331,
"dataId": 2004,
"relation": 2,
"outIndex": 3,
"dirction": 0,
"x": 12,
"y": 5,
"var": 2004,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4605,
"actorName": "小乔",
"actorId": 340,
"dataId": 2005,
"relation": 2,
"outIndex": 4,
"dirction": 0,
"x": 13,
"y": 8,
"var": 2005,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
},
{
"warId": 4605,
"actorName": "麹义",
"actorId": 350,
"dataId": 2006,
"relation": 2,
"outIndex": 5,
"dirction": 0,
"x": 13,
"y": 5,
"var": 2006,
"lv": 1,
"hide": 0,
"initial_ai": 1,
"bossid": 0,
"attribute": "&",
"skill": "&",
"seid": "&",
"star": 0,
"quality": 0,
"jobLv": 0,
"spine": 0
}
]