粮草先行:离开页面的时候不发道具&离开军团不算加成
This commit is contained in:
@@ -10,12 +10,42 @@ import { REDIS_KEY, RACE_EVENT_TYPE, RACE_EVENT_EFFECT_TYPE, RACE_EVENT, STATUS,
|
||||
import { getRandEelm, sortArrRandom, resResult, getRandResultByMember } from "../../pubUtils/util";
|
||||
import { sendMessageToGuildWithSuc, sendMessageToServerWithSuc, sendMessageToUserWithSuc } from "../pushService";
|
||||
|
||||
class MemberInfo extends Member {
|
||||
isQuit: boolean = false;
|
||||
|
||||
constructor(roleId: string, job: number, code: string) {
|
||||
super();
|
||||
this.roleId = roleId;
|
||||
this.job = job;
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public quit() {
|
||||
this.isQuit = true;
|
||||
}
|
||||
}
|
||||
|
||||
class GuildInfo {
|
||||
serverId: number;
|
||||
guildCode: string;
|
||||
isDissmiss: boolean = false;
|
||||
|
||||
constructor(serverId: number, guildCode: string) {
|
||||
this.serverId = serverId;
|
||||
this.guildCode = guildCode;
|
||||
}
|
||||
|
||||
dismiss() {
|
||||
this.isDissmiss = true;
|
||||
}
|
||||
}
|
||||
|
||||
// 粮草先行
|
||||
export class RaceActivityObject {
|
||||
public status = GUILD_ACTIVITY_STATUS.WAITING; // 活动状态 0-未开始 1-已开始 2-已结束
|
||||
private allStartTime = 0; // 开启时间,每天晚上8点
|
||||
public guildList: Array<{ serverId: number, guildCode: string }> = []; // 所有军团
|
||||
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}]
|
||||
private guildList: GuildInfo[] = []; // 所有军团
|
||||
private members: Map<string, MemberInfo[]> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}]
|
||||
private woodenHorses: Map<string, WoodenHorse> = new Map(); // 每个军团的木牛流马 guildCode => WoodenHorse
|
||||
private events: Map<string, Event[]> = new Map(); // 每个军团遇到的事件
|
||||
private items: Map<string, RewardInter[]> = new Map(); // 每个玩家的道具 roleId => [{id, count}]
|
||||
@@ -32,11 +62,35 @@ export class RaceActivityObject {
|
||||
}
|
||||
|
||||
public async updateMemberSid(guildCode: string, serverId: number, roleId: string, sid: string) {
|
||||
let hasJoin = this.getMember(guildCode, roleId);
|
||||
if(!hasJoin) return hasJoin;
|
||||
let member = this.getMember(guildCode, roleId);
|
||||
if(!member) return member;
|
||||
let wh = await this.getWoodenHorse(guildCode, serverId);
|
||||
wh.updateMemberSid(roleId, sid);
|
||||
return hasJoin
|
||||
return member
|
||||
}
|
||||
|
||||
public async memberLeave(guildCode: string, serverId: number, roleId: string) {
|
||||
let member = this.getMember(guildCode, roleId);
|
||||
if(!member) return member;
|
||||
let wh = await this.getWoodenHorse(guildCode, serverId);
|
||||
wh.leaveMemberSid(roleId);
|
||||
|
||||
return member
|
||||
}
|
||||
|
||||
public async memberQuit(guildCode: string, serverId: number, roleId: string) {
|
||||
let member = this.getMember(guildCode, roleId);
|
||||
if(!member) return;
|
||||
member.quit();
|
||||
let wh = await this.getWoodenHorse(guildCode, serverId);
|
||||
wh.leaveMemberSid(roleId, true);
|
||||
}
|
||||
|
||||
public dismiss(guildCode: string) {
|
||||
let guild = this.guildList.find(guild => guild.guildCode == guildCode);
|
||||
if(!guild) return;
|
||||
guild.dismiss();
|
||||
this.woodenHorses.delete(guildCode);
|
||||
}
|
||||
|
||||
// 加入member
|
||||
@@ -44,11 +98,16 @@ export class RaceActivityObject {
|
||||
if(!this.members.has(guildCode)) {
|
||||
this.members.set(guildCode, []);
|
||||
}
|
||||
this.members.get(guildCode).push({roleId, job, code});
|
||||
this.members.get(guildCode).push(new MemberInfo(roleId, job, code));
|
||||
}
|
||||
|
||||
public getGuilds() {
|
||||
return this.guildList.filter(cur => !cur.isDissmiss);
|
||||
}
|
||||
|
||||
public getMembersOfGuild(guildCode: string) {
|
||||
return this.members.get(guildCode)||[];
|
||||
let members = this.members.get(guildCode)||[];
|
||||
return members.filter(cur => !cur.isQuit);
|
||||
}
|
||||
|
||||
public getAllWoodenHorses() {
|
||||
@@ -93,11 +152,11 @@ export class RaceActivityObject {
|
||||
public async joinWoodenHorse(guildCode: string, roleId: string, roleName: string, serverId: number, sid: string, job: number, code: string, isDebug = false) {
|
||||
let woodenHorse = await this.getWoodenHorse(guildCode, serverId, isDebug);
|
||||
if(!woodenHorse) return false;
|
||||
let member = woodenHorse.joinMember(roleId, roleName, sid, code)
|
||||
woodenHorse.joinMember(roleId, roleName, sid, code)
|
||||
this.pushMember(guildCode, roleId, job, code);
|
||||
|
||||
if(this.status == GUILD_ACTIVITY_STATUS.START) {
|
||||
this.sendRandItemsToMembers([member], woodenHorse, woodenHorse.remainItems);
|
||||
// this.sendRandItemsToMembers([member], woodenHorse, woodenHorse.remainItems);
|
||||
this.woodenHorseStartRace(woodenHorse);
|
||||
}
|
||||
return await this.getWoodenHorse(guildCode, serverId);
|
||||
@@ -109,13 +168,13 @@ export class RaceActivityObject {
|
||||
this.initEvents(guildCode);
|
||||
if(isDebug) {
|
||||
this.woodenHorses.set(guildCode, new WoodenHorse(guildCode, guildCode, 0, serverId, this.allStartTime, false));
|
||||
this.guildList.push({guildCode, serverId});
|
||||
this.guildList.push(new GuildInfo(serverId, guildCode));
|
||||
} else {
|
||||
let guild = await GuildModel.findByCode(guildCode, serverId);
|
||||
if(!guild) return undefined;
|
||||
let { name: guildName, guildCe } = guild;
|
||||
this.woodenHorses.set(guildCode, new WoodenHorse(guildCode, guildName, guildCe, serverId, this.allStartTime, false));
|
||||
this.guildList.push({guildCode, serverId});
|
||||
this.guildList.push(new GuildInfo(serverId, guildCode));
|
||||
}
|
||||
}
|
||||
let woodenHorse = this.woodenHorses.get(guildCode);
|
||||
@@ -187,8 +246,9 @@ export class RaceActivityObject {
|
||||
}
|
||||
|
||||
private sendRandItemsToMembers(members: WoodenHorseMember[], woodenHorse: WoodenHorse, items: Map<number, { total: number, max: number}>) {
|
||||
let notReceiveMembers = members.filter(member => !member.isReceived());
|
||||
let notReceiveMembers = members.filter(member => !member.isReceived() && member.isOnline);
|
||||
let memberCnt = notReceiveMembers.length;
|
||||
console.log('##### SEND_START', memberCnt, notReceiveMembers)
|
||||
let addItems: Map<string, { member: WoodenHorseMember, items: {id: number, count: number}[] }> = new Map();
|
||||
for(let [id, {total, max}] of items) {
|
||||
let randResult = getRandResultByMember(total, max, memberCnt);
|
||||
@@ -282,7 +342,7 @@ export class RaceActivityObject {
|
||||
return items;
|
||||
}
|
||||
|
||||
public deleteFromList(guildCode: string) {
|
||||
public send(guildCode: string) {
|
||||
this.hasSentGuild.push(guildCode);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user