军团活动:修复rpc调用以及其他问题

This commit is contained in:
luying
2021-03-19 18:25:58 +08:00
parent 7324556852
commit f7627f85d1
23 changed files with 351 additions and 109 deletions

View File

@@ -164,4 +164,4 @@ export enum ENEMIES_TYPE {
ENEMY = 2, // 小兵
LITTLE_BOSS = 3, // 小boss
BOSS = 4, // 大boss
}
}

View File

@@ -341,7 +341,8 @@ export const FILENAME = {
DIC_ROLE_FRIEND: 'dic_zyz_friends',
DIC_ROLE_FRIEND_LEVEL: 'dic_zyz_closelevel',
DIC_GUILD_ACTIVITY: 'dic_zyz_guildActivity',
DIC_GATE_ACTIVITY_POINT: 'dic_zyz_gateActivityPoint'
DIC_GATE_ACTIVITY_POINT: 'dic_zyz_gateActivityPoint',
DIC_GUILD_AUCTION: 'dic_zyz_guildAuction'
}
export const WAR_RELATE_TABLES = [
@@ -381,7 +382,8 @@ export const MAIL_TYPE = {
WISH_POOL_REWARD: 11,
PVP_RESULT: 12,
PVP_RANK_REWARD: 13,
GUILD_DIVIDEND: 14, // 拍卖行分红
GUILD_ACTIVITY_REWARD: 14,
GUILD_DIVIDEND: 15, // 拍卖行分红
};
export const CHAT_SERVER = 'chat-server-1';

View File

@@ -200,6 +200,7 @@ export const STATUS = {
// 军团活动 21100-21199
GUILD_ACTIVITY_NOT_OPEN: { code: 21100, simStr: '活动未开放' },
GATE_HP_IS_ZERO: { code: 21101, simStr: '城门已被击破' },
CHALLENGE_CNT_NOT_ENOUGH: { code: 21102, simStr: '挑战次数不足' },
// 通用 30000 - 30099
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },

View File

@@ -35,12 +35,15 @@ export default class GuildActivityRecord extends BaseModel {
@prop({ required: true, default: 0 })
memberCnt: number; // 参加的团员的数量
@prop({ required: true, type: ()=> ItemReward, default: [] })
@prop({ required: true, type: ()=> ItemReward, default: [], _id: false })
rewards: ItemReward[]; // 转到拍卖行的道具
@prop({ required: true })
score: number; // 蛮夷入侵总军功
@prop({ required: true })
remainGateHp: number; // 城门剩余血量
@prop({ required: true })
cityId: number; // 诸侯混战占领了的城池
@@ -72,6 +75,14 @@ export default class GuildActivityRecord extends BaseModel {
return rec;
}
public static async updateInfo(guildCode: string, update: GuildActivityRecordUpdateParam) {
let today = getTodayZeroDate();
let rec: GuildActivityRecordType = await GuildActivityRecordModel.findOneAndUpdate(
{ guildCode, createdAt: { $gte: today } },
{ $set: update }, { new: true }).lean();
return rec;
}
}
export const GuildActivityRecordModel = getModelForClass(GuildActivityRecord);

View File

@@ -62,11 +62,11 @@ export default class UserGuildActivityRec extends BaseModel {
@prop({ required: true })
score: number; // 个人总军功
@prop({ required: true, type: Record })
@prop({ required: true, type: Record, _id: false })
record: Record[]; // 个人总军功
// 每天一条记录
public static async getRecord(roleId: string, roleName: string, guildCode: string, serverId: number, sourceCode: string, heroes: number[], aid: number) {
public static async getRecord(roleId: string, roleName: string, guildCode: string, serverId: number, sourceCode: string, aid: number) {
let today = getTodayZeroDate();
let docs = new UserGuildActivityRecModel();
let code = genCode(10);
@@ -76,14 +76,17 @@ export default class UserGuildActivityRec extends BaseModel {
{ 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}}, $inc: { challengeCnt: 1 }}, {new: true}).lean();
}
return rec;
}
public static async incChallengeCnt(code: string, heroes: number[], inc: number = 1 ) {
let rec = await UserGuildActivityRecModel.findOneAndUpdate( { code}, { $push: { heroes: { $each: heroes}}, $inc: { challengeCnt: inc }}, {new: true}).lean();
return rec;
}
public static async pushRecord(code: string, records: Record[]) {
let rec: UserGuildActivityRec = await UserGuildActivityRecModel.findOneAndUpdate(
let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOneAndUpdate(
{ code },
{ $push: { record: { $each: records } } },
{ new: true }
@@ -92,7 +95,14 @@ export default class UserGuildActivityRec extends BaseModel {
}
public static async updateInfo(code: string, update: UserGuildActivityRecUpdateParam) {
let rec: UserGuildActivityRec = await UserGuildActivityRecModel.findOneAndUpdate({ code }, { $set: update }, { new: true }).lean();
let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOneAndUpdate({ code }, { $set: update }, { new: true }).lean();
return rec;
}
public static async updateInfoByRoleId(roleId: string, update: UserGuildActivityRecUpdateParam) {
let today = getTodayZeroDate();
let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOneAndUpdate(
{ roleId, createdAt: { $gte: today } }, { $set: update }, { new: true }).lean();
return rec;
}
}

View File

@@ -13,16 +13,18 @@ export class GateMembersRec {
// 军团活动蛮夷入侵城门血量等数据存储
export class GateActivityObject {
private gateHp: Map<string, number> = new Map(); // 城门血条,每个军团有一条血条
private members: Map<string, Array<string>> = new Map(); // 每个军团参与的成员
private membersRecord: Map<string, GateMembersRec> = new Map(); // 每个成员的回合数和敌军数,防刷
private guilds: Map<number, string[]> = new Map(); // 参加的所有军团
private gateHp: Map<string, number> = new Map(); // 城门血条,每个军团有一条血条 guildCode => hp
private members: Map<string, Array<string>> = new Map(); // 每个军团参与的成员 guildCode => [roleId]
private membersRecord: Map<string, GateMembersRec> = new Map(); // 每个成员的回合数和敌军数,防刷 recCode => GateMembersRec
private guilds: Map<number, string[]> = new Map(); // 参加的所有军团 server => [guildCode]
public getObj(guildCode: string) {
public getObj(guildCode: string, serverId: number) {
console.log(guildCode, serverId)
return {
gateHp: this.getGateHpAndInc(guildCode),
members: this.members.get(guildCode),
memberesRecord: this.membersRecord.get(guildCode)
members: this.members.get(guildCode)||[],
memberesRecord: [...this.membersRecord],
guilds: this.guilds.get(serverId)||[]
}
}
@@ -48,27 +50,40 @@ export class GateActivityObject {
if(this.members.has(guildCode)) {
this.members.get(guildCode).push(roleId);
} else {
let arr = new Array<string>();
arr.push(roleId);
this.members.set(guildCode, [roleId]);
}
if(this.guilds.has(serverId)) {
this.guilds.set(serverId, []);
} else {
let arr = this.guilds.get(serverId)||[];
let arr = this.guilds.get(serverId);
if(!arr.includes(guildCode)) arr.push(guildCode);
this.guilds.set(serverId, arr);
} else {
this.guilds.set(serverId, [guildCode]);
}
}
public getMemberRecord(code: string, roleId: string) {
return this.membersRecord.get(code)||new GateMembersRec(roleId)
public getMemberRecord(recCode: string, roleId: string) {
return this.membersRecord.get(recCode)||new GateMembersRec(roleId)
}
public setMemberRecord(code: string, newMemberRecord: GateMembersRec) {
this.membersRecord.set(code, newMemberRecord);
public setMemberRecord(recCode: string, newMemberRecord: GateMembersRec) {
this.membersRecord.set(recCode, newMemberRecord);
}
public delMemberRecord(code: string) {
this.membersRecord.delete(code);
public delMemberRecord(recCode: string) {
this.membersRecord.delete(recCode);
}
public delGuildRecord(guildCode: string, serverId: number) {
let guildList = this.guilds.get(serverId);
if(guildList) {
let index = guildList.indexOf(guildCode);
guildList.splice(index, 1);
}
this.gateHp.delete(guildCode);
this.members.delete(guildCode);
}
}

View File

@@ -60,6 +60,7 @@ import { dicRoleFriendLv } from "./dictionary/DicRoleFriendLv";
import { Attribute } from "../domain/roleField/attribute";
import { dicGuildActivity, DicGuildActivity } from './dictionary/DicGuildActivity';
import { dicGateActivityPoint } from './dictionary/DicGateActivityPoint';
import { dicGuildAuction } from './dictionary/DicGuildAuction';
import { getCutDay } from "./timeUtil";
export const gameData = {
@@ -144,7 +145,8 @@ export const gameData = {
roleFriendLv: dicRoleFriendLv,
figureCondition: figureCondition,
guildActivity: dicGuildActivity,
gateActivityPoint: dicGateActivityPoint
gateActivityPoint: dicGateActivityPoint,
guildAuction: dicGuildAuction
};
// 在此提供一些原先在gamedata中提供的方法以便更方便获取gameData数据
@@ -456,3 +458,16 @@ export function getTodayGuildActivity() {
}
return dic;
}
/**
* 根据军团活动排名获得奖励
* @param aid 活动id
* @param rank 排名
*/
export function getGuildAuctionRewards(aid: number, rank: number) {
let ranksReward = gameData.guildAuction.get(aid)||[];
let dic = ranksReward.find(cur => {
return rank >= cur.min && (rank <= cur.max || cur.max == 0);
});
return dic?dic.rewards: new Array<RewardInter>();
}

View File

@@ -0,0 +1,29 @@
// 公会权限
import { readJsonFile, parseGoodStr } from '../util'
import { FILENAME } from '../../consts'
import { RewardInter } from '../../pubUtils/interface';
export interface DicGuildAuction {
// 活动类型 1-蛮夷入侵 2-诸侯混战 3-粮草先行
readonly id: number;
// 最低名次
readonly min: number;
// 最高名次
readonly max: number;
// 奖励
readonly rewards: RewardInter[];
}
const str = readJsonFile(FILENAME.DIC_GUILD_AUCTION);
let arr = JSON.parse(str);
export const dicGuildAuction = new Map<number, DicGuildAuction[]>();
arr.forEach(o => {
o.rewards = parseGoodStr(o.rewards);
let rank = dicGuildAuction.get(o.id)||[];
rank.push(o);
dicGuildAuction.set(o.id, rank);
});
arr = undefined;

View File

@@ -130,7 +130,6 @@ export function setCanReceiveAndCanSend(this: any, roleId: string, friendship: F
let frd = outputCnt(roleId, friendship);
if(frd) {
let { sendHeart, receiveHeart, beSentHeart } = frd;
console.log('***',sendHeart, receiveHeart, beSentHeart)
if(sendHeart >= 1) {
this.canSend = false;
}

View File

@@ -79,7 +79,13 @@ export function getFriendPointObject(count: number) {
return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.FRIEND_POINT), count};
}
/**
* @description 获取功勋物品 { id, count }
* @param count 功勋数量
*/
export function getHonourObject(count: number) {
return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.HONOUR), count};
}
/**
* 解锁头像/相框
* @param roleId 玩家id

View File

@@ -172,11 +172,12 @@ export function getNextTime(date: Date, h: number, m = 0, s = 0, ms = 0): Date {
/**
* 获得某个时间是星期几
* @param needHandle 是否处理周日
* @param {Date} time
*/
export function getCutDay(time?: Date) {
export function getCutDay( needHandle = false, time?: Date) {
if(!time) time = new Date();
let d = time.getDay();
if(d == 0) d = 7;
if(needHandle && d == 0) d = 7;
return d;
}

View File

@@ -1,9 +1,4 @@
[
{
"id": 0,
"content": "%d",
"time": 24
},
{
"id": 1,
"content": "您对军团%d的申请被拒绝",
@@ -26,7 +21,7 @@
},
{
"id": 5,
"content": "周活跃分成奖励",
"content": "亲爱的小将军,您昨日的军团活跃奖励忘记领取了,现已通过邮件发放,请查收",
"time": 24
},
{
@@ -68,5 +63,20 @@
"id": 13,
"content": "恭喜小将军,您在%d赛季最终获得了第%d名获得如下奖励",
"time": 24
},
{
"id": 14,
"content": "亲爱的小将军,您昨日的军团活动奖励忘记领取了,现已通过邮件发放,请查收:",
"time": 24
},
{
"id": 15,
"content": "小将军很抱歉,您在拍卖行的出价已被超过,元宝退还给您,请查收:",
"time": 24
},
{
"id": 16,
"content": "恭喜小将军,您已在拍卖行成功拍下以下物品,请查收:",
"time": 24
}
]

View File

@@ -146,7 +146,7 @@
"outIndex": 6,
"dirction": 2,
"x": 10,
"y": 11,
"y": 4,
"var": 1001,
"lv": 0,
"hide": 0,
@@ -203,7 +203,7 @@
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 0,
"enemyType": 2,
"dest_oppo": 1001
},
{
@@ -341,7 +341,7 @@
"star": 0,
"spine": 0,
"bossStage": 1,
"enemyType": 3,
"enemyType": 4,
"dest_oppo": 1001
}
]