拍卖行:获取活动参加者的接口
This commit is contained in:
33
game-server/app/servers/guild/handler/cityActivityHandler.ts
Normal file
33
game-server/app/servers/guild/handler/cityActivityHandler.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { Application, ChannelService, BackendSession } from "pinus";
|
||||
import { GUILD_ACTIVITY_TYPE, STATUS } from "../../../consts";
|
||||
import { resResult } from "../../../pubUtils/util";
|
||||
import { getGuildActivityStatus } from "../../../services/guildActivityService";
|
||||
|
||||
export default function (app: Application) {
|
||||
return new CityActivityHandler(app);
|
||||
}
|
||||
|
||||
export class CityActivityHandler {
|
||||
channelService: ChannelService;
|
||||
constructor(private app: Application) {
|
||||
this.channelService = app.get('channelService');
|
||||
}
|
||||
|
||||
private aid = GUILD_ACTIVITY_TYPE.CITY_ACTIVITY; // 蛮夷入侵id
|
||||
|
||||
// 进入诸侯混战
|
||||
async getCityActivity(msg: {}, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
...statusResult,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Application, BackendSession, ChannelService, pinus } from "pinus";
|
||||
import { setMedianCe, getMedianCe, getGuildActivityStatus, getRecordScore, getGuildActivityObj, getGuildActivityRank, sendSingleGuildGateActEndMsg, sendGuildActEndMsg } from "../../../services/guildActivityService";
|
||||
import { setMedianCe, getMedianCe, getGuildActivityStatus, getRecordScore, getGuildActivityObj, getGuildActivityRank, sendSingleGuildGateActEndMsg, sendGuildActEndMsg, participants } from "../../../services/guildActivityService";
|
||||
import { resResult } from "../../../pubUtils/util";
|
||||
import { STATUS, GUILD_ACTIVITY_TYPE, GUILD_POINT_WAYS, ENEMIES_TYPE, GET_POINT_WAYS } from "../../../consts";
|
||||
import { GameModel } from "../../../db/Game";
|
||||
@@ -17,6 +17,7 @@ import { addActive } from "../../../services/guildService";
|
||||
import { gameData } from "../../../pubUtils/data";
|
||||
import { getGuildChannelSid } from "../../../services/chatService";
|
||||
import { guildActivityStart } from "../../../services/timeTaskService";
|
||||
import { UserGuildModel } from "../../../db/UserGuild";
|
||||
|
||||
export default function (app: Application) {
|
||||
return new GateActivityHandler(app);
|
||||
@@ -77,6 +78,8 @@ export class GateActivityHandler {
|
||||
// TODO 测试完成后去掉这条判断
|
||||
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
|
||||
let userGuild = await UserGuildModel.getMyGuild(roleId, 'job');
|
||||
|
||||
let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, this.aid);
|
||||
if(!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
|
||||
@@ -89,7 +92,7 @@ export class GateActivityHandler {
|
||||
let { code, challengeCnt } = myGuildActivityRec;
|
||||
|
||||
// 更新公会参与的玩家
|
||||
obj.pushMembers(guildCode, serverId, roleId);
|
||||
obj.pushMembers(guildCode, serverId, roleId, userGuild.job);
|
||||
|
||||
// 返回当前军团总军功
|
||||
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
||||
@@ -281,11 +284,14 @@ export class GateActivityHandler {
|
||||
return resResult(STATUS.SUCCESS, res)
|
||||
}
|
||||
|
||||
async test(msg: { }, session: BackendSession) {
|
||||
async test(msg: { sourceType: number, sourceCode: string }, session: BackendSession) {
|
||||
let guildCode = session.get('guildCode');
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
await GuildActivityCityModel.declare(serverId, 1, guildCode);
|
||||
// await GuildActivityCityModel.declare(serverId, 1, guildCode);
|
||||
let {sourceType, sourceCode} = msg;
|
||||
let result = await participants(guildCode, sourceType, sourceCode);
|
||||
return result;
|
||||
|
||||
// let result = await setMedianCe();
|
||||
// return resResult(STATUS.SUCCESS, {result});
|
||||
|
||||
@@ -9,7 +9,7 @@ import { Record, UserGuildActivityRecModel } from "../db/UserGuildActivityRec";
|
||||
import { GateMembersRec, GateActivityObject } from "../domain/battleField/guildActivity";
|
||||
import { DicGuildActivity } from "../pubUtils/dictionary/DicGuildActivity";
|
||||
import { getUnionRank, getRank, getGuildKeyName, getMyUnionRank, getRankScore } from "./redisService";
|
||||
import { GuildModel } from "../db/Guild";
|
||||
import Guild, { GuildModel } from "../db/Guild";
|
||||
import { SimpleGuildRankParam, SimpleRoleRankParam } from "../domain/rank";
|
||||
import { getGuildChannelSid, getWorldChannelSid } from "./chatChannelService";
|
||||
import { pinus } from "pinus";
|
||||
@@ -234,7 +234,7 @@ export async function sendSingleGuildGateActEndMsg(guildCode: string, serverId:
|
||||
export async function gateActivitySettleReward(guildCode: string, serverId: number) {
|
||||
let obj = getGuildActivityObj(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||
let { gateHp, members } = obj.getObj(guildCode, serverId);
|
||||
members = uniq(members);
|
||||
members = uniq(members, cur => cur.roleId);
|
||||
|
||||
let rank = await getMyUnionRank(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
||||
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
||||
@@ -245,7 +245,8 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb
|
||||
isSuccess: gateHp > 0,
|
||||
isCompleted: true,
|
||||
rank, score: guildScore, remainGateHp: gateHp,
|
||||
members, memberCnt: members.length,
|
||||
members, memberCnt: members.length,
|
||||
auctionType: AUCTION_SOURCE.GATE,
|
||||
rewards
|
||||
});
|
||||
// 结算功勋等奖励
|
||||
@@ -263,4 +264,17 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb
|
||||
await genAuction(guildCode, AUCTION_SOURCE.GATE, rec.code, serverId, rewards);
|
||||
|
||||
obj.delGuildRecord(guildCode, serverId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取活动参加者
|
||||
* @param guildCode 军团code
|
||||
* @param sourceType 拍卖类型 AUCTION_SOURCE
|
||||
* @param sourceCode 活动唯一code
|
||||
*/
|
||||
export async function participants(guildCode: string, sourceType: number, sourceCode: string) {
|
||||
let rec = await GuildActivityRecordModel.findBySourceCode(guildCode, sourceType, sourceCode);
|
||||
if(!rec) return [];
|
||||
|
||||
return rec.members||[];
|
||||
}
|
||||
@@ -66,6 +66,11 @@ export function guild(session: Session, msg: any, app: Application, cb: (err: Er
|
||||
'guild.gateActivityHandler.debugEndActivity'
|
||||
].indexOf(arg.route) !== -1) {
|
||||
rid = session.get('guildCode');
|
||||
} else if (['guild.cityActivityHandler.getCityStatus'
|
||||
].indexOf(arg.route) !== -1) {
|
||||
if (arg.body.cityId) {
|
||||
rid = arg.body.cityId;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { getTodayZeroDate } from '../pubUtils/timeUtil';
|
||||
|
||||
@index({ code: 1 })
|
||||
@index({ serverId: 1, cityId: 1, createdAt: 1 })
|
||||
export default class GuildActivityCity extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
|
||||
@@ -3,6 +3,7 @@ import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typ
|
||||
import { ItemReward } from '../domain/dbGeneral';
|
||||
import { getTodayZeroDate } from '../pubUtils/timeUtil';
|
||||
import { genCode } from '../pubUtils/util';
|
||||
import { Member } from '../domain/battleField/guildActivity'
|
||||
|
||||
|
||||
@index({ code: 1 })
|
||||
@@ -20,6 +21,9 @@ export default class GuildActivityRecord extends BaseModel {
|
||||
@prop({ required: true })
|
||||
aid: number; // 军团活动id
|
||||
|
||||
@prop({ required: true })
|
||||
auctionType: number; // 转为拍卖行的类型
|
||||
|
||||
@prop({ required: true, default: false })
|
||||
isSuccess: boolean; // 是否胜利
|
||||
|
||||
@@ -29,8 +33,8 @@ export default class GuildActivityRecord extends BaseModel {
|
||||
@prop({ required: true })
|
||||
rank: number; // 最终排名
|
||||
|
||||
@prop({ required: true, type: String, default: [] })
|
||||
members: string[]; // 参与活动的团员的roleId列表
|
||||
@prop({ required: true, type: Member, default: [], _id: false })
|
||||
members: Member[]; // 参与活动的团员的roleId列表
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
memberCnt: number; // 参加的团员的数量
|
||||
@@ -83,6 +87,11 @@ export default class GuildActivityRecord extends BaseModel {
|
||||
{ $set: update }, { new: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async findBySourceCode(guildCode: string, sourceType: number, sourceCode: string) {
|
||||
const rec = await GuildActivityRecordModel.findOne({ guildCode, auctionType: sourceType, code: sourceCode }).select('members').lean();
|
||||
return rec;
|
||||
}
|
||||
}
|
||||
|
||||
export const GuildActivityRecordModel = getModelForClass(GuildActivityRecord);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { GUILDACTIVITY } from "../../pubUtils/dicParam";
|
||||
import { SimpleGuildRankParam, SimpleRoleRankParam } from '../rank'
|
||||
import { prop } from "@typegoose/typegoose";
|
||||
|
||||
export class GateMembersRec {
|
||||
roleId: string;
|
||||
@@ -14,7 +15,7 @@ export class GateMembersRec {
|
||||
|
||||
export class GateActivityObject {
|
||||
private gateHp: Map<string, number> = new Map(); // 城门血条,每个军团有一条血条 guildCode => hp
|
||||
private members: Map<string, Array<string>> = new Map(); // 每个军团参与的成员 guildCode => [roleId]
|
||||
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [roleId]
|
||||
private membersRecord: Map<string, GateMembersRec> = new Map(); // 每个成员的回合数和敌军数,防刷 recCode => GateMembersRec
|
||||
private guilds: Map<number, string[]> = new Map(); // 参加的所有军团 server => [guildCode]
|
||||
|
||||
@@ -45,14 +46,14 @@ export class GateActivityObject {
|
||||
return this.guilds;
|
||||
}
|
||||
|
||||
public pushMembers(guildCode: string, serverId: number, roleId: string) {
|
||||
public pushMembers(guildCode: string, serverId: number, roleId: string, job: number) {
|
||||
|
||||
if(this.members.has(guildCode)) {
|
||||
this.members.get(guildCode).push(roleId);
|
||||
this.members.get(guildCode).push({ roleId, job });
|
||||
} else {
|
||||
let arr = new Array<string>();
|
||||
arr.push(roleId);
|
||||
this.members.set(guildCode, [roleId]);
|
||||
this.members.set(guildCode, [{ roleId, job }]);
|
||||
}
|
||||
if(this.guilds.has(serverId)) {
|
||||
let arr = this.guilds.get(serverId);
|
||||
@@ -92,4 +93,11 @@ export interface GuildGateRankParam {
|
||||
myGuildRank: SimpleGuildRankParam,
|
||||
memberRank: SimpleRoleRankParam[],
|
||||
myMemberRank?: SimpleRoleRankParam
|
||||
}
|
||||
|
||||
export class Member {
|
||||
@prop({required: true})
|
||||
roleId: string; // 玩家id
|
||||
@prop({required: true})
|
||||
job: number; // 在军团的职位
|
||||
}
|
||||
Reference in New Issue
Block a user