军团活动:排行榜&军功上报

This commit is contained in:
luying
2021-03-18 11:59:53 +08:00
parent 4340f9a0b0
commit 9a463afd0d
27 changed files with 1963 additions and 29 deletions
+14
View File
@@ -134,4 +134,18 @@ export enum GUILD_POINT_WAYS {
TRAIN = 2, // 训练场
BOSS_WAR = 3, // 演武台
ACTIVITY = 4, // 军团活动
}
// 军团活动id
export enum GUILD_ACTIVITY_TYPE {
GATE_ACTIVITY = 1, // 蛮夷入侵
CITY_ACTIVITY = 2, // 诸侯混战
RACE_ACTIVITY = 3 // 粮草先行
}
// 军团活动状态
export enum GUILD_ACTIVITY_STATUS {
WAITING = 0,
START = 1,
END = 2
}
+9 -3
View File
@@ -231,14 +231,18 @@ export const REDIS_KEY = {
GUILD_ACTIVE_RANK: "guildActiveRank", // 公会周活跃排行榜
DB_GAME: 'db_game', // 服务器列表
ONLINE_USERS: 'onlineUsers', // 在线用户情况
CHANNEL_SERVERS: 'chat:channelServers', // 渠道对应的 chat 服务器 Id
CHANNEL_SERVERS: 'chat:channelServers', // 渠道对应的 chat 服务器 Id,
USER_GUILD_ACTIVITY: 'usrGuildAct',
GUILD_ACTIVITY: 'guildAct',
}
// 各排行榜对应hash的key
export const REDIS_RANK_TO_INFO = new Map([
[REDIS_KEY.TOWER_RANK, REDIS_KEY.USER_INFO],
[REDIS_KEY.PVP_RANK, REDIS_KEY.USER_INFO],
[REDIS_KEY.GUILD_ACTIVE_RANK, REDIS_KEY.GUILD_INFO]
[REDIS_KEY.GUILD_ACTIVE_RANK, REDIS_KEY.GUILD_INFO],
[REDIS_KEY.GUILD_ACTIVITY, REDIS_KEY.GUILD_INFO],
[REDIS_KEY.USER_GUILD_ACTIVITY, REDIS_KEY.USER_INFO]
]);
export const FUNC_OPT_TYPE = {
@@ -335,7 +339,9 @@ export const FILENAME = {
DIC_ARMY_BOSS_RANK_REWARD: 'dic_army_bossrankReward',
DIC_ARMY_DONATE_BOX_REWARD: 'dic_army_donateBoxReward',
DIC_ROLE_FRIEND: 'dic_zyz_friends',
DIC_ROLE_FRIEND_LEVEL: 'dic_zyz_closelevel'
DIC_ROLE_FRIEND_LEVEL: 'dic_zyz_closelevel',
DIC_GUILD_ACTIVITY: 'dic_zyz_guildActivity',
DIC_GATE_ACTIVITY_POINT: 'dic_zyz_gateActivityPoint'
}
export const WAR_RELATE_TABLES = [
+4 -1
View File
@@ -192,9 +192,12 @@ export const STATUS = {
GUILD_TRAIN_BOX_INDEX_IS_GOT:{ code: 20972, simStr: '该位置试炼宝箱已经领取过,请重新选择' },
GUILD_TRAIN_BOX_IS_GOT: { code: 20973, simStr: '玩家已经领取该试炼宝箱' },
// 军团拍卖
GUILD_LOT_NOT_FOUND: { code: 21001, simStr: '拍品未找到' },
LOT_OFFER_SERIAL: { code: 21002, simStr: '不能连续出价' },
// 军团活动 21100-21199
GUILD_ACTIVITY_NOT_OPEN: { code: 21100, simStr: '活动未开放' },
// 通用 30000 - 30099
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
ROLE_MATERIAL_NOT_ENOUGH: { code: 30001, simStr: '材料数量不足' },
+80
View File
@@ -0,0 +1,80 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
import { ItemReward } from '../domain/dbGeneral';
import { getTodayZeroDate } from '../pubUtils/timeUtil';
import { genCode } from '../pubUtils/util';
@index({ code: 1 })
export default class GuildActivityRecord extends BaseModel {
@prop({ required: true })
code: string; // 本次记录唯一值
@prop({ required: true })
guildCode: string; // 军团code
@prop({ required: true })
serverId: number; // 分服
@prop({ required: true })
aid: number; // 军团活动id
@prop({ required: true, default: false })
isSuccess: boolean; // 是否胜利
@prop({ required: true, default: false })
isCompleted: boolean; // 是否胜利
@prop({ required: true })
rank: number; // 最终排名
@prop({ required: true, type: String, default: [] })
members: string[]; // 参与活动的团员的roleId列表
@prop({ required: true, default: 0 })
memberCnt: number; // 参加的团员的数量
@prop({ required: true, type: ()=> ItemReward, default: [] })
rewards: ItemReward[]; // 转到拍卖行的道具
@prop({ required: true })
score: number; // 蛮夷入侵总军功
@prop({ required: true })
cityId: number; // 诸侯混战占领了的城池
@prop({ required: true })
damage: number; // 对城门造成的伤害
@prop({ required: true })
raceTime: number; // 粮草先行比赛时间(s)
@prop({ required: true })
distance: number; // 粮草先行最后的距离
@prop({ required: true })
speed: number; // 粮草先行最后的速度(m/s)
@prop({ required: true })
durability: number; // 粮草先行最后的耐久度
// 每天一条记录
public static async getRecord(guildCode: string, serverId: number, aid: number) {
let today = getTodayZeroDate();
let docs = new GuildActivityRecordModel();
let code = genCode(10);
let update = Object.assign(docs, { code, guildCode, serverId, aid, createdAt: new Date() })
let rec: GuildActivityRecordType = await GuildActivityRecordModel.findOneAndUpdate(
{ guildCode, createdAt: { $gte: today }},
{ $setOnInsert: update },
{new: true, upsert: true}).lean();
return rec;
}
}
export const GuildActivityRecordModel = getModelForClass(GuildActivityRecord);
export interface GuildActivityRecordType extends Pick<DocumentType<GuildActivityRecord>, keyof GuildActivityRecord> { };
export type GuildActivityRecordUpdateParam = Partial<GuildActivityRecordType>; // 将所有字段变成可选项
+20 -11
View File
@@ -4,7 +4,7 @@ import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typ
import User from './User';
import { shouldRefresh, reduceCe } from '../pubUtils/util';
import { initRoleAtrr } from '../pubUtils/playerCe';
import { nowSeconds } from '../pubUtils/timeUtil';
import { nowSeconds, getBeforeDayDate } from '../pubUtils/timeUtil';
import { Figure } from '../domain/dbGeneral';
import { EXTERIOR } from '../pubUtils/dicParam';
import Hero from './Hero';
@@ -483,7 +483,7 @@ export default class Role extends BaseModel {
* @param invitedMembers 当天已邀请过的人
*/
public static async getInviteList(time: number, serverId: number) {
const result = await RoleModel.find({ loginTime: { $gt: time }, hasGuild: false, serverId })
const result: RoleType[] = await RoleModel.find({ loginTime: { $gt: time }, hasGuild: false, serverId })
.select({roleId: 1, roleName: 1,ce: 1, head: 1, frame: 1, lv: 1,title: 1,job: 1,quitTime: 1, _id: 0})
.sort({quitTime: -1, lv: -1, ce: -1})
.limit(100).lean({getters: true, virtuals: true});
@@ -492,7 +492,7 @@ export default class Role extends BaseModel {
// 获取好友推荐列表
public static async getRecommedList(minLv: number, maxLv: number, time: number) {
const result = await RoleModel.find({ loginTime: { $gt: time }, lv: { $gte: minLv, $lte: maxLv } }, { _id: 0 })
const result: RoleType[] = await RoleModel.find({ loginTime: { $gt: time }, lv: { $gte: minLv, $lte: maxLv } }, { _id: 0 })
.select(ROLE_SELECT.SHOW_FRIEND_APPLY_LIST)
.sort({quitTime: -1, lv: -1, ce: -1})
.limit(200).lean({ getters: true, virtuals: true });
@@ -501,7 +501,7 @@ export default class Role extends BaseModel {
// 查询玩家
public static async searchByNameOrId(value: string) {
const result = await RoleModel.find({
const result: RoleType[] = await RoleModel.find({
$or: [
{ roleName: { $regex: new RegExp(value.toString(), 'i') } },
{ roleId: value }
@@ -521,7 +521,7 @@ export default class Role extends BaseModel {
// 退出公会
public static async quitGuild(roleId: string, now: number) {
const result = await RoleModel.findOneAndUpdate({ roleId, hasGuild: true }, { hasGuild: false, guildCode: "", guildName: "", quitGuildTime: now }, { new: true }).lean();
const result: RoleType = await RoleModel.findOneAndUpdate({ roleId, hasGuild: true }, { hasGuild: false, guildCode: "", guildName: "", quitGuildTime: now }, { new: true }).lean();
return result;
}
@@ -531,35 +531,44 @@ export default class Role extends BaseModel {
if(max) {
condition['friendCnt'] = {$lte: max - inc};
}
const result = await RoleModel.findOneAndUpdate(condition, {$inc: { friendCnt: inc }}, {new: true}).lean();
const result: RoleType = await RoleModel.findOneAndUpdate(condition, {$inc: { friendCnt: inc }}, {new: true}).lean();
return result;
}
// 增加好友申请数量
public static async increaseFriendApplyCnt(roleId: string, inc: number, max: number) {
const result = await RoleModel.findOneAndUpdate({ roleId, recFrdApplyCnt: {$lte: max - inc}}, {$inc: { recFrdApplyCnt: inc }}, {new: true}).lean();
const result: RoleType = await RoleModel.findOneAndUpdate({ roleId, recFrdApplyCnt: {$lte: max - inc}}, {$inc: { recFrdApplyCnt: inc }}, {new: true}).lean();
return result;
}
// 增加黑名单数量
public static async increaseBlockCnt(roleId: string, blockCnt: number, friendCnt: number, maxBlockCnt: number) {
const result = await RoleModel.findOneAndUpdate({ roleId, blockCnt: {$lte: maxBlockCnt - blockCnt}}, {$inc: { blockCnt, friendCnt }}, {new: true}).lean();
const result: RoleType = await RoleModel.findOneAndUpdate({ roleId, blockCnt: {$lte: maxBlockCnt - blockCnt}}, {$inc: { blockCnt, friendCnt }}, {new: true}).lean();
return result;
}
public static async updatedRoleMailAt(roleId: string, updatedMailAt: number, lean = true) {
const result = await RoleModel.findOneAndUpdate({ roleId }, {$set: { updatedMailAt }}, {new: true}).lean(lean);
const result: RoleType = await RoleModel.findOneAndUpdate({ roleId }, {$set: { updatedMailAt }}, {new: true}).lean(lean);
return result;
}
public static async addFigure(roleId: string, id: number, figure: Figure) {
const result = await RoleModel.findOneAndUpdate({roleId}, { $pull: { heads: { id: id }, $push: { heads: figure } }}, {new: true}).lean();
const result: RoleType = await RoleModel.findOneAndUpdate({roleId}, { $pull: { heads: { id: id }, $push: { heads: figure } }}, {new: true}).lean();
return result
}
public static async checkName(roleName: string, serverId: number) {
const role = await RoleModel.findOne({ roleName, serverId }).lean();
const role: RoleType = await RoleModel.findOne({ roleName, serverId }).lean();
return !!role;
}
// 获取战力在中位数的玩家
public static async getMedianRole(serverId: number) {
let yesterday = getBeforeDayDate(1);
const roles: RoleType[] = await RoleModel.find({ serverId, updatedAt: { $gte: new Date(yesterday) } })
.select('topLineup')
.sort({ ce: -1 }).lean();
return roles[Math.floor(roles.length/2)]
}
}
export const RoleModel = getModelForClass(Role);
+87
View File
@@ -0,0 +1,87 @@
import { APP_ID } from './../consts';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
// 暂时服务器列表是从game表取的,之后会转移到使用这张表,目前用作查询该服战力中位数
/**
* 游戏字段接口
*/
@index({ id: 1 })
@modelOptions({schemaOptions: {id: false}})
export default class Serverlist extends BaseModel {
@prop({ required: true, default: 1 })
gameId: number; // 游戏id Game表的id
@prop({ required: true })
id: number; // 小区id
@prop({ required: true })
name: string; // 小区区名
@prop({ required: true })
groupId: number; // 大区id
@prop({ required: true })
groupName: string; // 大区区名
@prop({ required: true })
host: string; // pinus连接地址
@prop({ required: false })
port: number; // pinus端口
@prop({ required: true })
serverStatus: number; // 服务器状态
public get status() {
let now = new Date();
if( now > this.openTime) {
return this.serverStatus;
} else {
return 3; // 未开服
}
}
@prop({ required: true })
openTime: Date;
@prop({ required: true })
createTime: Date;
@prop({ required: true })
serverType: string;
@prop({ required: true, default: 0 })
medianCe: number; // 中位数武将战力、缩小10000倍后的结果
public static async getAllServerList() {
let servers: ServerlistType[] = await ServerlistModel.find().lean({ getters: true, virtuals: true });
return servers;
}
public static async findByServerId(serverId: number) {
let server: ServerlistType = await ServerlistModel.findOne({ id: serverId }).select('medianCe').lean({ getters: true, virtuals: true });
return server;
}
public static async updateByServerId(serverId: number, update: ServerlistUpdate) {
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({id: serverId}, {$set: update}).lean({ getters: true, virtuals: true });
return server;
}
public static async newServer(serverId: number, serverType: string, params: ServerlistUpdate) {
const doc = new ServerlistModel();
const update = Object.assign(doc.toJSON(), { id: serverId, serverType }, params);
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id: serverId, serverType }, {$setOnInsert: update }, {new: true, upsert: true}).lean({ getters: true, virtuals: true });
return server;
}
}
export const ServerlistModel = getModelForClass(Serverlist);
export interface ServerlistType extends Pick<DocumentType<Serverlist>, keyof Serverlist>{
id: number;
};
export type ServerlistUpdate = Partial<ServerlistType>; // 将所有字段变成可选项
+97
View File
@@ -0,0 +1,97 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
import { getTodayZeroDate } from '../pubUtils/timeUtil';
import { genCode } from '../pubUtils/util';
export class Record {
@prop({ required: true })
round: number; // 第几回合
@prop({ required: true })
dataId: number; // 出兵表上的dataId
@prop({ required: true })
score: number; // 得分
}
@index({ code: 1 })
export default class UserGuildActivityRec extends BaseModel {
@prop({ required: true })
code: string; // 本次记录唯一值
@prop({ required: true })
sourceCode: string; // 军团记录的code
@prop({ required: true })
roleId: string; // 玩家id
@prop({ required: true })
roleName: string; // 军团唯一记录
@prop({ required: true })
guildCode: string; // 军团code
@prop({ required: true })
serverId: number; // 分服
@prop({ required: true })
aid: number; // 军团活动id
@prop({ required: true, default: false })
isSuccess: boolean; // 是否胜利
@prop({ required: true, default: false })
isCompleted: boolean; // 是否完成结算了
@prop({ required: true, default: 0 })
rank: number; // 最终排名
@prop({ required: true, default: 0 })
challengeCnt: number; // 向上累加的挑战次数
// 南蛮入侵字段
@prop({ required: true, type: Number })
heroes: number[]; // 使用的武将
@prop({ required: true })
round: number; // 坚持回合数
@prop({ required: true })
score: number; // 个人总军功
@prop({ required: true, type: Record })
record: Record[]; // 个人总军功
// 每天一条记录
public static async getRecord(roleId: string, roleName: string, guildCode: string, serverId: number, sourceCode: string, heroes: number[], aid: number) {
let today = getTodayZeroDate();
let docs = new UserGuildActivityRecModel();
let code = genCode(10);
let update = Object.assign(docs, { code, roleId, roleName, guildCode, serverId, aid });
delete update.heroes;
let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOneAndUpdate(
{ roleId, sourceCode, createdAt: { $gte: today }},
{ $setOnInsert: update },
{new: true, upsert: true}).lean();
if(heroes.length > 0 && rec) {
rec = await UserGuildActivityRecModel.findOneAndUpdate( { code: rec.code}, { $push: { heroes: { $each: heroes}}}, {new: true}).lean();
}
return rec;
}
public static async pushRecord(code: string, records: Record[]) {
let rec: UserGuildActivityRec = await UserGuildActivityRecModel.findOneAndUpdate(
{ code },
{ $push: { record: { $each: records } } },
{ new: true }
).lean();
return rec;
}
}
export const UserGuildActivityRecModel = getModelForClass(UserGuildActivityRec);
export interface UserGuildActivityRecType extends Pick<DocumentType<UserGuildActivityRec>, keyof UserGuildActivityRec> { };
export type UserGuildActivityRecUpdateParam = Partial<UserGuildActivityRecType>; // 将所有字段变成可选项
+5 -1
View File
@@ -58,6 +58,8 @@ import { dicArmyDonate } from '../pubUtils/dictionary/DicArmyDonateBoxReward';
import { dicRoleFriend, DicRoleFriend } from "./dictionary/DicRoleFriend";
import { dicRoleFriendLv } from "./dictionary/DicRoleFriendLv";
import { Attribute } from "../domain/roleField/attribute";
import { dicGuildActivity } from './dictionary/DicGuildActivity';
import { dicGateActivityPoint } from './dictionary/DicGateActivityPoint';
export const gameData = {
blurprtCompose: dicBlueprtCompose,
@@ -139,7 +141,9 @@ export const gameData = {
armyDonateBox: dicArmyDonate,
roleFriend: dicRoleFriend,
roleFriendLv: dicRoleFriendLv,
figureCondition: figureCondition
figureCondition: figureCondition,
guildActivity: dicGuildActivity,
gateActivityPoint: dicGateActivityPoint
};
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
+25
View File
@@ -34,6 +34,7 @@ export const PVP = {
PVP_SEASON_DAYS: 30, // PVP一个赛季的时间
PVP_OPPONENT_FREEREFRESH: 3, // pvp挑战对手每日免费刷新次数
PVP_WINREWARD_UPLIMIT: 10, // 连胜奖励军功加成上限
PVP_LINEUP_HEROS: 6, // pvp最多上阵人数
};
export const ARMY = {
ARMY_CREAT_COST: 188, // 创建军团需要的元宝
@@ -75,3 +76,27 @@ export const EXTERIOR = {
EXTERIOR_FACECASE: 11301, // 默认头像框id
EXTERIOR_APPEARANCE: 11419, // 默认形象id
};
export const HTTPMANAGE = {
ADDRESSTYPE: 1, // 1:开发服,2:审核服,3:版号服
SERVERTYPE: 1, // ADDRESSTYPE下服务器的筛选:1:开发服,2:玩家服
};
export const SYSTEAM = {
RECENT_GROUP_MSGS_CNT: 10, // 群消息获取条数
RECENT_PRIVATE_CHATS_CNT: 20, // 最近私聊个数
MSG_TYPE: 0, // 0:纯文本,1:副文本,2:表情
};
export const GUILDACTIVITY = {
GATEACTIVITY_CHALLENGE_TIMES: 1, // 蛮夷入侵每天可以挑战次的次数
GATEACTIVITY_HONOUR_RATIO: 0.5, // 功勋/积分的系数
GATEACTIVITY_ENEMYCE: 2000, // 蛮夷入侵敌军2000战力模板
GATEACTIVITY_ROUNDSTANDARD: 20, // 蛮夷入侵和基准战力相当的回合
CITYACTIVITY_CHALLENGE_CD: 300, // 诸侯混战每次战斗之后的cd间隔
CITYACTIVITY_CD_COST: 100, // 诸侯混战取消cd需要消耗的元宝数
CITYACTIVITY_ROUND_COUNT: 40, // 诸侯混战的总回合数量
RACEACTIVITY_LENGTH: 1000, // 粮草先行赛道的总米数
RACEACTIVITY_ENCOUNTER: '100&1|200&2|300&2|400&1|500&2|600&2|700&1|800&2|900&2', // 触发道具和事件的米数(1:道具;2:事件)
RACEACTIVITY_EVENT_RATIO: 0.5, // 触发事件好坏的比例
GATEACTIVITY_GATEHP: 10000, // 城门血量
GATEACTIVITY_BOSS_DIFFICULT: '1&1.2|2&1.5', // boss类型&难度系数|boss类型&难度系数(1:小boss,2:大boss)
RACEACTIVITY_DURABILITY_REWARD: 2, // 每剩余1%耐久度给予X点功勋
};
@@ -0,0 +1,15 @@
import { readJsonFile } from '../util'
import { FILENAME } from '../../consts'
export interface DicGkPvp {
readonly id: number;
readonly point: number;
}
const str = readJsonFile(FILENAME.DIC_GATE_ACTIVITY_POINT);
let arr = JSON.parse(str);
export const dicGateActivityPoint = new Map<number, number>();
arr.forEach(o => {
dicGateActivityPoint.set(o.id, o.point);
});
@@ -0,0 +1,33 @@
// 军团活动
import { readJsonFile, parseNumberList } from '../util'
import { FILENAME } from '../../consts'
export interface DicGuildActivity {
// id
readonly id: number;
// 开启日期 星期几
readonly openDay: number[];
// 持续时间 秒
readonly duringTime: number;
// 开启时间 几点
readonly startTime: number;
// 开始倒计时 几点
readonly countDown: number;
// 对应关卡id
readonly warid: number;
// 基础功勋值
readonly honour: number;
}
const str = readJsonFile(FILENAME.DIC_GUILD_ACTIVITY);
let arr = JSON.parse(str);
export const dicGuildActivity = new Map<number, DicGuildActivity>();
arr.forEach(o => {
o.openDay = parseNumberList(o.openDay)
dicGuildActivity.set( o.id, o );
});
arr = undefined;
+2
View File
@@ -41,6 +41,8 @@ export interface DicWarJson {
readonly spine: string;
// boss阶段
readonly bossStage: number;
// 敌人是小boss还是大boss,和gateActivityPoint的id相对应
readonly enemyType: number;
// 召唤技能的召唤物
readonly callSkillData: string;
+27
View File
@@ -88,6 +88,22 @@ export function getCurHourPoint(hour: number) {
return time;
}
/**
* 获取第2天凌晨几点的时间戳
* @param hour
*/
export function getNextHourPoint(hour: number) {
var date = new Date();
date.setHours(hour);
date.setMinutes(0);
date.setSeconds(0);
var time = Math.floor(date.getTime() / PER_SECOND);
if (nowSeconds() > time) {
return time + PER_DAY;
}
return time;
}
export function getTodayZeroDate() {
var date = new Date();
date.setHours(0);
@@ -145,3 +161,14 @@ export function getNextTime(date: Date, h: number, m = 0, s = 0): Date {
const timeToday = new Date(milliseconds).setHours(h, m, s);
return timeToday > milliseconds ? new Date(timeToday) : new Date(timeToday + PER_DAY * PER_SECOND);
}
/**
* 获得某个时间是星期几
* @param {Date} time
*/
export function getCutDay(time?: Date) {
if(!time) time = new Date();
let d = time.getDay();
if(d == 0) d = 7;
return d;
}
@@ -0,0 +1,82 @@
[
{
"id": 1,
"name": "汉中",
"type": 1,
"nextCity": 7,
"difficult": 90,
"warid": 0
},
{
"id": 2,
"name": "南中",
"type": 1,
"nextCity": 7,
"difficult": 90,
"warid": 0
},
{
"id": 3,
"name": "柴桑",
"type": 1,
"nextCity": 8,
"difficult": 90,
"warid": 0
},
{
"id": 4,
"name": "会稽",
"type": 1,
"nextCity": 8,
"difficult": 90,
"warid": 0
},
{
"id": 5,
"name": "太原",
"type": 1,
"nextCity": 9,
"difficult": 90,
"warid": 0
},
{
"id": 6,
"name": "巨鹿",
"type": 1,
"nextCity": 9,
"difficult": 90,
"warid": 0
},
{
"id": 7,
"name": "成都",
"type": 2,
"nextCity": 10,
"difficult": 100,
"warid": 0
},
{
"id": 8,
"name": "建业",
"type": 2,
"nextCity": 10,
"difficult": 100,
"warid": 0
},
{
"id": 9,
"name": "邺城",
"type": 2,
"nextCity": 10,
"difficult": 100,
"warid": 0
},
{
"id": 10,
"name": "洛阳",
"type": 3,
"nextCity": 0,
"difficult": 110,
"warid": 0
}
]
@@ -0,0 +1,218 @@
[
{
"id": 1,
"type": 1,
"guildRank": 1,
"min": 1,
"max": 1,
"honour": 2000
},
{
"id": 2,
"type": 1,
"guildRank": 1,
"min": 2,
"max": 10,
"honour": 1200
},
{
"id": 3,
"type": 1,
"guildRank": 1,
"min": 11,
"max": 0,
"honour": 800
},
{
"id": 4,
"type": 1,
"guildRank": 2,
"min": 1,
"max": 1,
"honour": 1200
},
{
"id": 5,
"type": 1,
"guildRank": 2,
"min": 2,
"max": 10,
"honour": 720
},
{
"id": 6,
"type": 1,
"guildRank": 2,
"min": 11,
"max": 0,
"honour": 480
},
{
"id": 7,
"type": 1,
"guildRank": 3,
"min": 1,
"max": 1,
"honour": 800
},
{
"id": 8,
"type": 1,
"guildRank": 3,
"min": 2,
"max": 10,
"honour": 480
},
{
"id": 9,
"type": 1,
"guildRank": 3,
"min": 11,
"max": 0,
"honour": 240
},
{
"id": 10,
"type": 2,
"guildRank": 1,
"min": 1,
"max": 1,
"honour": 4000
},
{
"id": 11,
"type": 2,
"guildRank": 1,
"min": 2,
"max": 10,
"honour": 2400
},
{
"id": 12,
"type": 2,
"guildRank": 1,
"min": 11,
"max": 0,
"honour": 1600
},
{
"id": 13,
"type": 2,
"guildRank": 2,
"min": 1,
"max": 1,
"honour": 2400
},
{
"id": 14,
"type": 2,
"guildRank": 2,
"min": 2,
"max": 10,
"honour": 1440
},
{
"id": 15,
"type": 2,
"guildRank": 2,
"min": 11,
"max": 0,
"honour": 960
},
{
"id": 16,
"type": 2,
"guildRank": 3,
"min": 1,
"max": 1,
"honour": 1600
},
{
"id": 17,
"type": 2,
"guildRank": 3,
"min": 2,
"max": 10,
"honour": 960
},
{
"id": 18,
"type": 2,
"guildRank": 3,
"min": 11,
"max": 0,
"honour": 480
},
{
"id": 19,
"type": 3,
"guildRank": 1,
"min": 1,
"max": 1,
"honour": 12000
},
{
"id": 20,
"type": 3,
"guildRank": 1,
"min": 2,
"max": 10,
"honour": 7200
},
{
"id": 21,
"type": 3,
"guildRank": 1,
"min": 11,
"max": 0,
"honour": 4800
},
{
"id": 22,
"type": 3,
"guildRank": 2,
"min": 1,
"max": 1,
"honour": 7200
},
{
"id": 23,
"type": 3,
"guildRank": 2,
"min": 2,
"max": 10,
"honour": 4320
},
{
"id": 24,
"type": 3,
"guildRank": 2,
"min": 11,
"max": 0,
"honour": 2880
},
{
"id": 25,
"type": 3,
"guildRank": 3,
"min": 1,
"max": 1,
"honour": 4800
},
{
"id": 26,
"type": 3,
"guildRank": 3,
"min": 2,
"max": 10,
"honour": 2880
},
{
"id": 27,
"type": 3,
"guildRank": 3,
"min": 11,
"max": 0,
"honour": 1440
}
]
@@ -0,0 +1,27 @@
[
{
"id": 1,
"getPointWays": "每回合开始时获得",
"point": 10
},
{
"id": 2,
"getPointWays": "击杀小兵",
"point": 3
},
{
"id": 3,
"getPointWays": "击杀小boss",
"point": 30
},
{
"id": 4,
"getPointWays": "击杀大boss",
"point": 90
},
{
"id": 5,
"getPointWays": "防守成功",
"point": 100
}
]
@@ -0,0 +1,32 @@
[
{
"id": 1,
"name": "蛮夷入侵",
"openDay": "3&0",
"duringTime": 900,
"startTime": 20,
"countDown": 5,
"warid": 7001,
"honour": 500
},
{
"id": 2,
"name": "诸侯混战",
"openDay": "2&4&6",
"duringTime": 900,
"startTime": 20,
"countDown": 5,
"warid": 7002,
"honour": 500
},
{
"id": 3,
"name": "粮草先行",
"openDay": "1&5",
"duringTime": 600,
"startTime": 20,
"countDown": 5,
"warid": 0,
"honour": 200
}
]
@@ -0,0 +1,65 @@
[
{
"id": 1,
"name": "蛮夷入侵",
"min": 1,
"max": 1,
"rewards": "20001&60&2|21008&40&1|42008&20&2|42115&20&3"
},
{
"id": 1,
"name": "蛮夷入侵",
"min": 2,
"max": 10,
"rewards": "20001&60&1|21008&40&1|42008&20&2|42115&20&3"
},
{
"id": 1,
"name": "蛮夷入侵",
"min": 11,
"max": 0,
"rewards": "20002&60&1|21008&40&1|42008&20&2|42115&20&3"
},
{
"id": 2,
"name": "诸侯混战",
"min": 1,
"max": 1,
"rewards": "20001&60&2|21008&40&1|42008&20&2|42115&20&3"
},
{
"id": 2,
"name": "诸侯混战",
"min": 2,
"max": 10,
"rewards": "20001&60&1|21008&40&1|42008&20&2|42115&20&3"
},
{
"id": 2,
"name": "诸侯混战",
"min": 11,
"max": 0,
"rewards": "20002&60&1|21008&40&1|42008&20&2|42115&20&3"
},
{
"id": 3,
"name": "粮草先行",
"min": 1,
"max": 1,
"rewards": "20001&60&2|21008&40&1|42008&20&2|42115&20&3"
},
{
"id": 3,
"name": "粮草先行",
"min": 2,
"max": 10,
"rewards": "20001&60&1|21008&40&1|42008&20&2|42115&20&3"
},
{
"id": 3,
"name": "粮草先行",
"min": 11,
"max": 0,
"rewards": "20002&60&1|21008&40&1|42008&20&2|42115&20&3"
}
]
+347
View File
@@ -0,0 +1,347 @@
[
{
"warId": 7001,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 0,
"dirction": 2,
"x": 6,
"y": 5,
"var": 0,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 0,
"dest_oppo": 0
},
{
"warId": 7001,
"actorName": "我军",
"actorId": 0,
"dataId": 1,
"relation": 0,
"outIndex": 1,
"dirction": 2,
"x": 8,
"y": 5,
"var": 1,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 0,
"dest_oppo": 0
},
{
"warId": 7001,
"actorName": "我军",
"actorId": 0,
"dataId": 2,
"relation": 0,
"outIndex": 2,
"dirction": 2,
"x": 10,
"y": 5,
"var": 2,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 0,
"dest_oppo": 0
},
{
"warId": 7001,
"actorName": "我军",
"actorId": 0,
"dataId": 3,
"relation": 0,
"outIndex": 3,
"dirction": 2,
"x": 12,
"y": 5,
"var": 3,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 0,
"dest_oppo": 0
},
{
"warId": 7001,
"actorName": "我军",
"actorId": 0,
"dataId": 4,
"relation": 0,
"outIndex": 4,
"dirction": 2,
"x": 14,
"y": 5,
"var": 4,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 0,
"dest_oppo": 0
},
{
"warId": 7001,
"actorName": "我军",
"actorId": 0,
"dataId": 5,
"relation": 0,
"outIndex": 5,
"dirction": 2,
"x": 9,
"y": 5,
"var": 5,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 0,
"dest_oppo": 0
},
{
"warId": 7001,
"actorName": "城门",
"actorId": 1083,
"dataId": 1001,
"relation": 1,
"outIndex": 6,
"dirction": 2,
"x": 10,
"y": 11,
"var": 1001,
"lv": 0,
"hide": 0,
"initial_ai": 2,
"attribute": "1&10000",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 0,
"dest_oppo": 0
},
{
"warId": 7001,
"actorName": "步兵",
"actorId": 1001,
"dataId": 2001,
"relation": 2,
"outIndex": 0,
"dirction": 1,
"x": 8,
"y": 9,
"var": 2001,
"lv": 0,
"hide": 0,
"initial_ai": 4,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 2,
"dest_oppo": 1001
},
{
"warId": 7001,
"actorName": "步兵",
"actorId": 1001,
"dataId": 2002,
"relation": 2,
"outIndex": 1,
"dirction": 1,
"x": 9,
"y": 9,
"var": 2002,
"lv": 0,
"hide": 0,
"initial_ai": 4,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 0,
"dest_oppo": 1001
},
{
"warId": 7001,
"actorName": "步兵",
"actorId": 1001,
"dataId": 2003,
"relation": 2,
"outIndex": 2,
"dirction": 1,
"x": 10,
"y": 9,
"var": 2003,
"lv": 0,
"hide": 0,
"initial_ai": 4,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 2,
"dest_oppo": 1001
},
{
"warId": 7001,
"actorName": "枪兵",
"actorId": 1002,
"dataId": 2004,
"relation": 2,
"outIndex": 3,
"dirction": 1,
"x": 11,
"y": 9,
"var": 2004,
"lv": 0,
"hide": 0,
"initial_ai": 4,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 2,
"dest_oppo": 1001
},
{
"warId": 7001,
"actorName": "枪兵",
"actorId": 1002,
"dataId": 2005,
"relation": 2,
"outIndex": 4,
"dirction": 1,
"x": 9,
"y": 10,
"var": 2005,
"lv": 0,
"hide": 0,
"initial_ai": 4,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 2,
"dest_oppo": 1001
},
{
"warId": 7001,
"actorName": "枪兵",
"actorId": 1002,
"dataId": 2006,
"relation": 2,
"outIndex": 5,
"dirction": 1,
"x": 10,
"y": 10,
"var": 2006,
"lv": 0,
"hide": 0,
"initial_ai": 4,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 2,
"dest_oppo": 1001
},
{
"warId": 7001,
"actorName": "狼",
"actorId": 1014,
"dataId": 2007,
"relation": 2,
"outIndex": 6,
"dirction": 1,
"x": 10,
"y": 11,
"var": 2007,
"lv": 0,
"hide": 1,
"initial_ai": 4,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "8001&",
"star": 0,
"spine": 0,
"bossStage": 1,
"enemyType": 3,
"dest_oppo": 1001
},
{
"warId": 7001,
"actorName": "怒狼王",
"actorId": 1035,
"dataId": 2008,
"relation": 2,
"outIndex": 7,
"dirction": 1,
"x": 11,
"y": 11,
"var": 2008,
"lv": 0,
"hide": 1,
"initial_ai": 4,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "8001&",
"star": 0,
"spine": 0,
"bossStage": 1,
"enemyType": 3,
"dest_oppo": 1001
}
]
+275
View File
@@ -0,0 +1,275 @@
[
{
"warId": 7002,
"actorName": "我军",
"actorId": 0,
"dataId": 0,
"relation": 0,
"outIndex": 0,
"dirction": 2,
"x": 6,
"y": 5,
"var": 0,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "我军",
"actorId": 0,
"dataId": 1,
"relation": 0,
"outIndex": 1,
"dirction": 2,
"x": 8,
"y": 5,
"var": 1,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "我军",
"actorId": 0,
"dataId": 2,
"relation": 0,
"outIndex": 2,
"dirction": 2,
"x": 10,
"y": 5,
"var": 2,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "我军",
"actorId": 0,
"dataId": 3,
"relation": 0,
"outIndex": 3,
"dirction": 2,
"x": 12,
"y": 5,
"var": 3,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "我军",
"actorId": 0,
"dataId": 4,
"relation": 0,
"outIndex": 4,
"dirction": 2,
"x": 14,
"y": 5,
"var": 4,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "我军",
"actorId": 0,
"dataId": 5,
"relation": 0,
"outIndex": 5,
"dirction": 2,
"x": 9,
"y": 5,
"var": 5,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "&",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "步兵",
"actorId": 1001,
"dataId": 2001,
"relation": 2,
"outIndex": 0,
"dirction": 1,
"x": 8,
"y": 9,
"var": 2001,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "步兵",
"actorId": 1001,
"dataId": 2002,
"relation": 2,
"outIndex": 1,
"dirction": 1,
"x": 9,
"y": 9,
"var": 2002,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "步兵",
"actorId": 1001,
"dataId": 2003,
"relation": 2,
"outIndex": 2,
"dirction": 1,
"x": 10,
"y": 9,
"var": 2003,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "枪兵",
"actorId": 1002,
"dataId": 2004,
"relation": 2,
"outIndex": 3,
"dirction": 1,
"x": 11,
"y": 9,
"var": 2004,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "枪兵",
"actorId": 1002,
"dataId": 2005,
"relation": 2,
"outIndex": 4,
"dirction": 1,
"x": 9,
"y": 10,
"var": 2005,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "枪兵",
"actorId": 1002,
"dataId": 2006,
"relation": 2,
"outIndex": 5,
"dirction": 1,
"x": 10,
"y": 10,
"var": 2006,
"lv": 0,
"hide": 0,
"initial_ai": 1,
"attribute": "1&1400|2&1000|4&600|5&600|9&0|10&25000|11&20000|12&0|13&10000|14&10000|18&0",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 0
},
{
"warId": 7002,
"actorName": "城门",
"actorId": 1083,
"dataId": 2007,
"relation": 2,
"outIndex": 6,
"dirction": 1,
"x": 10,
"y": 11,
"var": 2007,
"lv": 0,
"hide": 0,
"initial_ai": 2,
"attribute": "1&10000",
"skill": 0,
"seid": "&",
"star": 0,
"spine": 0,
"bossStage": 1
}
]