军团活动:修改粮草先行
This commit is contained in:
@@ -1,22 +1,19 @@
|
||||
|
||||
// 军团活动蛮夷入侵城门血量等数据存储
|
||||
|
||||
import { Member, GateMembersRec, WoodenHorse, Event, WoodenHorseMember } from "../../domain/battleField/guildActivity";
|
||||
import { Member, GateMembersRec, WoodenHorse, Event, WoodenHorseMember, RaceActivityRankParam } from "../../domain/battleField/guildActivity";
|
||||
import { RewardInter } from "../../pubUtils/interface";
|
||||
import { getRaceEventItems, gameData } from "../../pubUtils/data";
|
||||
import { GuildModel } from "../../db/Guild";
|
||||
import { sendSingleRaceActEndMsg } from "./guildActivityService";
|
||||
import { REDIS_KEY, RACE_EVENT_TYPE, RACE_EVENT_EFFECT_TYPE, RACE_EVENT, STATUS, RACE_ACTIVITY_STATUS, PUSH_ROUTE } from "../../consts";
|
||||
import { getGuildChannelSid } from "../chatService";
|
||||
import { pinus } from "pinus";
|
||||
import { REDIS_KEY, RACE_EVENT_TYPE, RACE_EVENT_EFFECT_TYPE, RACE_EVENT, STATUS, RACE_ACTIVITY_STATUS, PUSH_ROUTE, GUILD_ACTIVITY_STATUS } from "../../consts";
|
||||
import { getRandEelm, sortArrRandom, resResult, getRandResultByMember } from "../../pubUtils/util";
|
||||
import { Rank } from "../rankService";
|
||||
import { getTimeFun } from "../../pubUtils/timeUtil";
|
||||
import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from "../pushService";
|
||||
|
||||
// 粮草先行
|
||||
export class RaceActivityObject {
|
||||
private status = RACE_ACTIVITY_STATUS.WAITING; // 活动状态 0-未开始 1-已开始 2-已结束
|
||||
public status = RACE_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 woodenHorses: Map<string, WoodenHorse> = new Map(); // 每个军团的木牛流马 guildCode => WoodenHorse
|
||||
@@ -50,6 +47,39 @@ export class RaceActivityObject {
|
||||
return this.woodenHorses;
|
||||
}
|
||||
|
||||
public async getRanks(serverId: number, guildCode?: string) {
|
||||
let myRank: RaceActivityRankParam = null;
|
||||
let ranks: RaceActivityRankParam[] = [];
|
||||
for(let [_, _wh] of this.woodenHorses) {
|
||||
if(_wh.serverId == serverId && _wh.status != GUILD_ACTIVITY_STATUS.WAITING) {
|
||||
let wh = await this.getWoodenHorse(_wh.guildCode, _wh.serverId);
|
||||
if(wh) {
|
||||
ranks.push(new RaceActivityRankParam(wh));
|
||||
}
|
||||
}
|
||||
}
|
||||
ranks.sort((a, b) => {
|
||||
if(a.sortDistance == b.sortDistance) {
|
||||
return a.sortTime - b.sortTime;
|
||||
} else {
|
||||
return b.sortDistance - a.sortDistance;
|
||||
}
|
||||
}).map((wh, index) => {
|
||||
wh.setRank(index + 1);
|
||||
if(guildCode && wh.code == guildCode) {
|
||||
myRank = wh;
|
||||
}
|
||||
return wh
|
||||
});
|
||||
|
||||
if(!myRank && guildCode) {
|
||||
let myWoodenHorse = await this.getWoodenHorse(guildCode, serverId);
|
||||
if(myWoodenHorse) myRank = new RaceActivityRankParam(myWoodenHorse);
|
||||
}
|
||||
|
||||
return { guildRank: ranks, myGuildRank: myRank }
|
||||
}
|
||||
|
||||
public async joinWoodenHorse(guildCode: string, roleId: string, roleName: string, serverId: number, sid: string, job: number, code: string) {
|
||||
let woodenHorse = await this.getWoodenHorse(guildCode, serverId);
|
||||
if(!woodenHorse) return false;
|
||||
@@ -70,23 +100,16 @@ export class RaceActivityObject {
|
||||
let guild = await GuildModel.findByCode(guildCode, serverId);
|
||||
if(!guild) return false;
|
||||
let { name: guildName, guildCe } = guild;
|
||||
this.woodenHorses.set(guildCode, new WoodenHorse(guildCode, guildName, guildCe, serverId));
|
||||
this.woodenHorses.set(guildCode, new WoodenHorse(guildCode, guildName, guildCe, serverId, this.allStartTime));
|
||||
this.guildList.push({guildCode, serverId});
|
||||
}
|
||||
let woodenHorse = this.woodenHorses.get(guildCode);
|
||||
let events = this.events.get(guildCode)||[];
|
||||
let needSendEnd = woodenHorse.calCurWoodenHorse(events);
|
||||
|
||||
if(woodenHorse.status == RACE_ACTIVITY_STATUS.START || woodenHorse.status == RACE_ACTIVITY_STATUS.END) { // 更新距离
|
||||
let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId }, true, 5);
|
||||
await r.setRank({guildCode}, [Math.floor(woodenHorse.distance * 1000), woodenHorse.time], false);
|
||||
let tomorrow = <number>getTimeFun().getAfterDayWithHour();
|
||||
await r.setExpire(tomorrow);
|
||||
|
||||
if (needSendEnd) { // 抵达后发送奖励,发送消息,结算
|
||||
await sendSingleRaceActEndMsg(guildCode, woodenHorse);
|
||||
}
|
||||
if (needSendEnd) { // 抵达后发送奖励,发送消息,结算
|
||||
await sendSingleRaceActEndMsg(guildCode, woodenHorse);
|
||||
}
|
||||
|
||||
this.handleItemsByWoodenHorse(woodenHorse);
|
||||
return woodenHorse;
|
||||
}
|
||||
@@ -109,6 +132,7 @@ export class RaceActivityObject {
|
||||
// 定时任务到,开始比赛,设置开始赛道,发放初始道具
|
||||
public startRace() {
|
||||
this.status = RACE_ACTIVITY_STATUS.START;
|
||||
if(this.allStartTime == 0) this.allStartTime = Date.now();
|
||||
let guildCodes = new Array<string>();
|
||||
for(let [code, woodenHorse] of this.woodenHorses) {
|
||||
if(woodenHorse.memberCnt > 0) {
|
||||
@@ -120,9 +144,7 @@ export class RaceActivityObject {
|
||||
}
|
||||
|
||||
private woodenHorseStartRace(woodenHorse: WoodenHorse) {
|
||||
woodenHorse.status = RACE_ACTIVITY_STATUS.START;
|
||||
woodenHorse.time = Date.now();
|
||||
woodenHorse.startTime = Date.now();
|
||||
woodenHorse.startRace(this.allStartTime);
|
||||
let members = woodenHorse.members;
|
||||
let normalItems = getRaceEventItems();
|
||||
this.sendRandItemsToMembers(members, woodenHorse, normalItems);
|
||||
|
||||
Reference in New Issue
Block a user