军团活动:蛮夷入侵主动接口

This commit is contained in:
luying
2021-03-18 16:42:25 +08:00
parent 9bb07f5b21
commit 442a53359e
9 changed files with 257 additions and 38 deletions

View File

@@ -148,4 +148,20 @@ export enum GUILD_ACTIVITY_STATUS {
WAITING = 0,
START = 1,
END = 2
}
// 积分获取类型
export enum GET_POINT_WAYS {
ROUND_START = 1,
ENEMY = 2, // 小兵
LITTLE_BOSS = 3, // 小boss
BOSS = 4, // 大boss
DEFENSE_SUCCESS = 5
}
// 敌军类型,和上面的相对应
export enum ENEMIES_TYPE {
ENEMY = 2, // 小兵
LITTLE_BOSS = 3, // 小boss
BOSS = 4, // 大boss
}

View File

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

View File

@@ -10,8 +10,12 @@ export class Record {
@prop({ required: true })
dataId: number; // 出兵表上的dataId
@prop({ required: true })
enemyType: number; // 敌人类型 2-小兵 3-小boss 4-大boss
@prop({ required: true })
score: number; // 得分
}
@index({ code: 1 })
@@ -55,9 +59,6 @@ export default class UserGuildActivityRec extends BaseModel {
@prop({ required: true, type: Number })
heroes: number[]; // 使用的武将
@prop({ required: true })
round: number; // 坚持回合数
@prop({ required: true })
score: number; // 个人总军功
@@ -76,7 +77,7 @@ export default class UserGuildActivityRec extends BaseModel {
{ $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();
rec = await UserGuildActivityRecModel.findOneAndUpdate( { code: rec.code}, { $push: { heroes: { $each: heroes}}, $inc: { challengeCnt: 1 }}, {new: true}).lean();
}
return rec;
}
@@ -89,6 +90,11 @@ export default class UserGuildActivityRec extends BaseModel {
).lean();
return rec;
}
public static async updateInfo(code: string, update: UserGuildActivityRecUpdateParam) {
let rec: UserGuildActivityRec = await UserGuildActivityRecModel.findOneAndUpdate({ code }, { $set: update }, { new: true }).lean();
return rec;
}
}
export const UserGuildActivityRecModel = getModelForClass(UserGuildActivityRec);

View File

@@ -0,0 +1,58 @@
import { GUILDACTIVITY } from "../../pubUtils/dicParam";
export class GateMembersRec {
roleId: string;
round: number = 0;
enemies: number[] = [];
constructor(roleId: string) {
this.roleId = roleId;
}
}
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(); // 每个成员的回合数和敌军数,防刷
public getObj(guildCode: string) {
return {
gateHp: this.getGateHpAndInc(guildCode),
members: this.members.get(guildCode),
memberesRecord: this.membersRecord.get(guildCode)
}
}
public getGateHpAndInc(guildCode: string, inc: number = 0) {
let gateHp = this.gateHp.get(guildCode);
if(!this.gateHp.has(guildCode)) {
gateHp = GUILDACTIVITY.GATEACTIVITY_GATEHP;
}
if(inc != 0) {
gateHp += inc;
this.gateHp.set(guildCode, gateHp);
}
if(gateHp <= 0) gateHp = 0;
return gateHp
}
public pushMembers(guildCode: string, roleId: string) {
if(this.members.has(guildCode)) {
this.members.get(guildCode).push(roleId);
} else {
this.members.set(guildCode, [roleId]);
}
}
public getMemberRecord(code: string, roleId: string) {
return this.membersRecord.get(code)||new GateMembersRec(roleId)
}
public setMemberRecord(code: string, newMemberRecord: GateMembersRec) {
this.membersRecord.set(code, newMemberRecord);
}
public delMemberRecord(code: string) {
this.membersRecord.delete(code);
}
}

View File

@@ -20,6 +20,7 @@ export const dicGuildActiveWays = new Map<number, DicGuildActiveWays>();
arr.forEach(o => {
o.activePoint = decodeIdCntArrayStr(o.activePoint, 1);
if(!o.count) o.count = o.cout;
dicGuildActiveWays.set(o.id, o);
});
arr = undefined;