军团活动:添加诸侯奖励结算
This commit is contained in:
@@ -351,6 +351,7 @@ export const FILENAME = {
|
||||
DIC_CITY_ACTIVITY: 'dic_zyz_cityActivity',
|
||||
DIC_CHAT_ACCUSE: 'dic_zyz_chat_report',
|
||||
DIC_CHAT_SYSTEM: 'dic_zyz_chat_system',
|
||||
DIC_CITY_ACTIVITY_REWARD: 'dic_zyz_cityActivityReward'
|
||||
}
|
||||
|
||||
export const WAR_RELATE_TABLES = [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { getTodayZeroDate } from '../pubUtils/timeUtil';
|
||||
import { getCurWeekDate} from '../pubUtils/timeUtil';
|
||||
|
||||
@index({ serverId: 1, cityId: 1, createdAt: 1 })
|
||||
export default class GuildActivityCity extends BaseModel {
|
||||
@@ -23,34 +23,47 @@ export default class GuildActivityCity extends BaseModel {
|
||||
@prop({ required: true })
|
||||
guardGuildName: string; // 占领的军团名
|
||||
|
||||
@prop({ required: true })
|
||||
guardTime: Date; // 占领日期
|
||||
|
||||
// 每天宣战一次
|
||||
public static async getAllCities(serverId: number) {
|
||||
let today = getTodayZeroDate();
|
||||
let rec: GuildActivityCityType[] = await GuildActivityCityModel.find({ serverId, createdAt: { $gte: today }}).lean();
|
||||
|
||||
let curWeek = getCurWeekDate(1, 0);
|
||||
let rec: GuildActivityCityType[] = await GuildActivityCityModel.find({ serverId, createdAt: { $gte: curWeek }}).lean();
|
||||
|
||||
return rec;
|
||||
}
|
||||
|
||||
// 检查是否宣战过
|
||||
public static async checkDeclartion(serverId: number, guildCode: string) {
|
||||
let today = getTodayZeroDate();
|
||||
let curWeek = getCurWeekDate(1, 0);
|
||||
let rec: GuildActivityCityType = await GuildActivityCityModel.findOne(
|
||||
{ serverId, createdAt: { $gte: today }, declareGuilds: { $in: [guildCode]}}).lean();
|
||||
{ serverId, createdAt: { $gte: curWeek }, declareGuilds: { $in: [guildCode]}}).lean();
|
||||
|
||||
return rec;
|
||||
}
|
||||
|
||||
// 每天宣战一次
|
||||
// 宣言
|
||||
public static async declare(serverId: number, cityId: number, guildCode: string) {
|
||||
let today = getTodayZeroDate();
|
||||
let curWeek = getCurWeekDate(1, 0);
|
||||
let rec: GuildActivityCityType = await GuildActivityCityModel.findOneAndUpdate(
|
||||
{ serverId, cityId, createdAt: { $gte: today } },
|
||||
{ $setOnInsert: { cityId }, $push: { declareGuilds: guildCode }, $inc: {declareCount: 1 } },
|
||||
{ serverId, cityId, createdAt: { $gte: curWeek } },
|
||||
{ $setOnInsert: { serverId, cityId }, $push: { declareGuilds: guildCode }, $inc: {declareCount: 1 } },
|
||||
{new: true, upsert: true}).lean();
|
||||
|
||||
return rec;
|
||||
}
|
||||
|
||||
// 占领
|
||||
public static async guard(serverId: number, cityId: number, guildCode: string, guildName: string) {
|
||||
let curWeek = getCurWeekDate(1, 0);
|
||||
let rec: GuildActivityCityType = await GuildActivityCityModel.findOneAndUpdate(
|
||||
{ serverId, cityId, createdAt: { $gte: curWeek } },
|
||||
{ $set: { declareCount: 0, declareGuilds: [], guardGuildCode: guildCode, guardGuildName: guildName, guardTime: new Date()} },
|
||||
{ new: true }).lean();
|
||||
|
||||
return rec;
|
||||
}
|
||||
}
|
||||
|
||||
export const GuildActivityCityModel = getModelForClass(GuildActivityCity);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { ItemReward } from '../domain/dbGeneral';
|
||||
import { getTodayZeroDate } from '../pubUtils/timeUtil';
|
||||
import { genCode } from '../pubUtils/util';
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { APP_ID } from './../consts';
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { getTodayZeroDate } from '../pubUtils/timeUtil';
|
||||
import { genCode } from '../pubUtils/util';
|
||||
|
||||
|
||||
@@ -50,7 +50,10 @@ export class GateActivityObject {
|
||||
public pushMembers(guildCode: string, serverId: number, roleId: string, job: number) {
|
||||
|
||||
if(this.members.has(guildCode)) {
|
||||
this.members.get(guildCode).push({ roleId, job });
|
||||
let members = this.members.get(guildCode);
|
||||
if(members.findIndex(cur => cur.roleId == roleId) == -1) {
|
||||
members.push({ roleId, job });
|
||||
}
|
||||
} else {
|
||||
let arr = new Array<string>();
|
||||
arr.push(roleId);
|
||||
@@ -101,6 +104,14 @@ export class CityActivityObject {
|
||||
return `${serverId}_${cityId}`;
|
||||
}
|
||||
|
||||
private decodeKey(key: string) {
|
||||
let arr = key.split('_');
|
||||
return {
|
||||
serverId: parseInt(arr[0]),
|
||||
cityId: parseInt(arr[1])
|
||||
}
|
||||
}
|
||||
|
||||
public getObj( serverId: number, cityId: number, guildCode: string) {
|
||||
let key = this.getKey(serverId, cityId);
|
||||
return {
|
||||
@@ -111,6 +122,27 @@ export class CityActivityObject {
|
||||
}
|
||||
}
|
||||
|
||||
public getAllCities() {
|
||||
|
||||
let allCities = new Array<{ serverId: number, cityId: number, guildCodes: string[]}>();
|
||||
let serverlists = new Array<number>();
|
||||
for(let [key, guildCodes] of this.cities) {
|
||||
let { serverId, cityId } = this.decodeKey(key);
|
||||
allCities.push({ serverId, cityId, guildCodes });
|
||||
if(!serverlists.includes(serverId)) serverlists.push(serverId);
|
||||
}
|
||||
return {cities: allCities, serverlists};
|
||||
}
|
||||
|
||||
public getGuildsInCity(serverId: number, cityId: number) {
|
||||
let key = this.getKey(serverId, cityId);
|
||||
return this.cities.get(key)||[];
|
||||
}
|
||||
|
||||
public getMembersOfGuild(guildCode: string) {
|
||||
return this.members.get(guildCode)||[];
|
||||
}
|
||||
|
||||
public getGateHpAndInc(serverId: number, cityId: number, maxHp: number, inc: number = 0) {
|
||||
let key = this.getKey(serverId, cityId);
|
||||
let gateHp = this.gateHp.get(key);
|
||||
@@ -137,7 +169,10 @@ export class CityActivityObject {
|
||||
public pushMembers(guildCode: string, roleId: string, job: number) {
|
||||
|
||||
if(this.members.has(guildCode)) {
|
||||
this.members.get(guildCode).push({ roleId, job });
|
||||
let members = this.members.get(guildCode);
|
||||
if(members.findIndex(cur => cur.roleId == roleId) == -1) {
|
||||
members.push({ roleId, job });
|
||||
}
|
||||
} else {
|
||||
let arr = new Array<string>();
|
||||
arr.push(roleId);
|
||||
|
||||
@@ -64,6 +64,7 @@ import { dicGuildAuction } from './dictionary/DicGuildAuction';
|
||||
import { getCutDay } from "./timeUtil";
|
||||
import { dicCityActivity } from "./dictionary/DicCityActivity";
|
||||
import { dicChatAccuse } from "./dictionary/DicChatAccuse";
|
||||
import { dicCityActivityReward } from "./dictionary/DicCityActivityReward";
|
||||
|
||||
export const gameData = {
|
||||
blurprtCompose: dicBlueprtCompose,
|
||||
@@ -151,6 +152,7 @@ export const gameData = {
|
||||
guildAuction: dicGuildAuction,
|
||||
cityActivity: dicCityActivity,
|
||||
chatAccuse: dicChatAccuse,
|
||||
cityActivityReward: dicCityActivityReward
|
||||
};
|
||||
|
||||
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
||||
@@ -474,4 +476,18 @@ export function getGuildAuctionRewards(aid: number, rank: number) {
|
||||
return rank >= cur.min && (rank <= cur.max || cur.max == 0);
|
||||
});
|
||||
return dic?dic.rewards: new Array<RewardInter>();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据军团活动排名获得功勋奖励
|
||||
* @param type 城池类型
|
||||
* @param guildRank 军团排名
|
||||
* @param rank 成员在军团内部排名
|
||||
*/
|
||||
export function getCityActivityRewards(type: number, guildRank: number, rank: number) {
|
||||
let ranksReward = gameData.cityActivityReward.get(type)||[];
|
||||
let dic = ranksReward.find(cur => {
|
||||
return cur.guildRank == guildRank && (rank >= cur.min && (rank <= cur.max || cur.max == 0));
|
||||
});
|
||||
return dic?dic.honour: 0;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
// 诸侯混战军团排名奖励表
|
||||
import { readJsonFile } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
|
||||
export interface DicCityActivityReward {
|
||||
|
||||
// 城池id
|
||||
readonly id: number;
|
||||
// 城池类型
|
||||
readonly type: number;
|
||||
// 军团排名
|
||||
readonly guildRank: number;
|
||||
// 军团内排名最小值
|
||||
readonly min: number;
|
||||
// 军团内排名最大值
|
||||
readonly max: number;
|
||||
// 可获得功勋
|
||||
readonly honour: number;
|
||||
}
|
||||
|
||||
const str = readJsonFile(FILENAME.DIC_CITY_ACTIVITY_REWARD);
|
||||
let arr = JSON.parse(str);
|
||||
|
||||
export const dicCityActivityReward = new Map<number, DicCityActivityReward[]>();
|
||||
|
||||
arr.forEach(o => {
|
||||
if(dicCityActivityReward.has(o.type)) {
|
||||
dicCityActivityReward.get(o.type).push(o);
|
||||
} else {
|
||||
dicCityActivityReward.set(o.type, [o]);
|
||||
}
|
||||
});
|
||||
arr = undefined;
|
||||
Reference in New Issue
Block a user