军团活动:修复活动结束信号发送bug

This commit is contained in:
luying
2021-03-25 15:37:03 +08:00
parent 0e8a8245a0
commit 7c0ede3e52
8 changed files with 99 additions and 36 deletions

View File

@@ -1,11 +1,11 @@
import { GroupMessageType } from './../../../db/GroupMessage';
import { Application, ChannelService } from 'pinus';
import { resResult } from '../../../pubUtils/util';
import { ON_ADD_CHANNEL_ROUTE, ON_GROUP_MSG_ROUTE, ON_LEAVE_CHANNEL_ROUTE, STATUS } from '../../../consts';
import { ON_ADD_CHANNEL_ROUTE, ON_GROUP_MSG_ROUTE, ON_LEAVE_CHANNEL_ROUTE, STATUS, CHANNEL_PREFIX } from '../../../consts';
import { PrivateMessageType } from '../../../db/PrivateMessage';
import { addUserToChannel, getSimpleRoleInfo } from '../../../services/roleService';
import { ChannelUser } from '../../../domain/ChannelUser';
import { getWorldChannelSid } from '../../../services/chatService';
import { getWorldChannelSid, groupRoomId } from '../../../services/chatService';
export default function (app: Application) {
return new ChatRemote(app);
@@ -172,7 +172,7 @@ export class ChatRemote {
* @param serverId
*/
public async sendGuildActivityEnd(serverId: number) {
let roomId = await getWorldChannelSid(serverId);
let roomId = groupRoomId(CHANNEL_PREFIX.WORLD, serverId);
let channel = this.channelService.getChannel(roomId, false);
if (!channel) return;
channel.pushMessage(this.GUILD_ACTIVITY_END, resResult(STATUS.SUCCESS, { }));

View File

@@ -1,4 +1,7 @@
import { Application, ChannelService } from "pinus";
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 RaceActivityHandler(app);
@@ -11,6 +14,29 @@ export class RaceActivityHandler {
this.channelService = app.get('channelService');
}
private aid = GUILD_ACTIVITY_TYPE.GATE_ACTIVITY; // 蛮夷入侵id
// 进入粮草先行界面
async getRaceActivity(msg: {}, session: BackendSession) {
const roleId = session.get('roleId');
const roleName = session.get('roleName');
const serverId = session.get('serverId');
const guildCode = session.get('guildCode');
if(!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
let statusResult = getGuildActivityStatus(this.aid);
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
return resResult(STATUS.SUCCESS, {
...statusResult,
hasJoin: true,
woodenHorse: {},
guildRank:[]
});
}
}

View File

@@ -8,7 +8,7 @@ import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY,
import { Record, UserGuildActivityRecModel } from "../db/UserGuildActivityRec";
import { GateMembersRec, GateActivityObject, CityActivityObject, CityParam, Member } from "../domain/battleField/guildActivity";
import { DicGuildActivity } from "../pubUtils/dictionary/DicGuildActivity";
import { getUnionRank, getRank, getGuildKeyName, getMyUnionRank, getRankScore, getCityKeyName } from "./redisService";
import { getUnionRank, getRank, getGuildKeyName, getMyUnionRank, getRankScore, getCityKeyName, getAllServers } from "./redisService";
import { GuildModel } from "../db/Guild";
import { SimpleGuildRankParam, SimpleRoleRankParam } from "../domain/rank";
import { getGuildChannelSid, getWorldChannelSid, getCityChannelSid } from "./chatChannelService";
@@ -221,7 +221,7 @@ export async function sendAllGuildRanks(aid: number) {
} else if (aid == GUILD_ACTIVITY_TYPE.CITY_ACTIVITY) {
let obj = getCityActivityObj();
let { cities } = obj.getAllCities();
console.log(JSON.stringify(cities));
// console.log(JSON.stringify(cities));
for(let { serverId, cityId, guildCodes } of cities) {
for(let guildCode of guildCodes) {
let ranks = await getCityActivityRank(guildCode, serverId, cityId);
@@ -233,7 +233,7 @@ export async function sendAllGuildRanks(aid: number) {
}
/**
* 活动结束发送结束信号以及结算奖励
* 活动结算奖励
* @param aid 活动类型
*/
export async function sendGuildActEndMsg(aid: number) {
@@ -242,9 +242,6 @@ export async function sendGuildActEndMsg(aid: number) {
let obj = getGateActivityObj();
let guilds = obj.getGuilds();
for(let [ serverId, guildCodes ] of guilds) {
let chatSid = await getWorldChannelSid(serverId);
pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId);
for(let guildCode of guildCodes) {
await gateActivitySettleReward(guildCode, serverId);
}
@@ -258,14 +255,21 @@ export async function sendGuildActEndMsg(aid: number) {
}
// 发完之后再做下周自动宣战
for(let serverId of serverlists) {
let chatSid = await getWorldChannelSid(serverId);
pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId);
await autoDeclare(serverId);
}
cityActivityObj = new CityActivityObject();
}
}
// 全服发送结束新号
export async function sendEndMsgToAll() {
let serverlist = await getAllServers();
for(let serverId of serverlist) {
let chatSid = await getWorldChannelSid(serverId);
pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId);
}
}
/**
* 单个军团城门血条破了之后给他发奖励
* @param guildCode 军团code

View File

@@ -5,24 +5,26 @@ import PvpDefenseType,{ PvpDefenseModel } from '../db/PvpDefense';
import { PVP } from '../pubUtils/dicParam';
import { nowSeconds, getTodayZeroPoint, getAge } from '../pubUtils/timeUtil';
import { getPvpGkWarIds, getPvpRankRewards, getPvpHeroRewards, getResultMaxRank, getTodayGuildActivity } from '../pubUtils/data';
import { deepCopy, getRandomArr, resResult, shouldRefresh } from '../pubUtils/util';
import { deepCopy, getRandomArr, resResult } from '../pubUtils/util';
import { getLvByScore } from './pvpService';
import { getMyRank, setRank, resetPvpRanks, getAllOnlineRoles } from './redisService';
import { getMyRank, setRank, resetPvpRanks, getAllOnlineRoles, delGuildActivityRank } from './redisService';
import { MAIL_TYPE, REDIS_KEY, ADULT_AGE, GUEST_MAX_TIME, ADDICTION_PREVENTION_CODE, GUILD_ACTIVITY_STATUS, GUILD_ACTIVITY_TYPE } from '../consts';
import { RankParam } from '../domain/rank';
import { RoleModel } from '../db/Role';
import { MailModel, MailType } from '../db/Mail';
import { pinus, Application } from 'pinus';
import { pinus } from 'pinus';
import { indexOf } from 'underscore';
import { PvpSeasonResultModel } from '../db/PvpSeasonResult';
import { settleGuildWeekly } from './guildService';
import { STATUS } from '../consts/statusCode';
import { getMailContent, sendMail } from './mailService';
import { reportOnline } from '../pubUtils/httpUtil';
import User, { UserModel } from '../db/User';
import { getGuildActivityByDic, setMedianCe } from './guildActivityService';
import { UserModel } from '../db/User';
import { getGuildActivityByDic, setMedianCe, sendEndMsgToAll } from './guildActivityService';
import { sendUngotDividendJob, startGuildAuction, startWorldAuction, stopAuction } from './auctionService';
import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity';
import { GuildModel } from '../db/Guild';
const PER_SECOND = 1 * 1000;
const PER_DAY = 24 * 60 * 60;
const SETTLE_DIFF = 29 * 60;
@@ -343,6 +345,18 @@ async function guildActivitySchedule() {
/***********guildActivitySchedule***********/
let dicGuildActivity = getTodayGuildActivity();
let map = new Map<number, string[]>();
let guilds = await GuildModel.findAllGuild('serverId code');
for(let { serverId, code } of guilds) {
if(map.has(serverId)) {
map.get(serverId).push(code);
} else {
map.set(serverId, [code]);
}
}
await delGuildActivityRank(dicGuildActivity.id, map);
scheduleJob('guildActivityStart', `0 ${dicGuildActivity.startMinute} ${dicGuildActivity.startTime} * * ?`, guildActivityStartSchedule);
let statusResult = getGuildActivityByDic(dicGuildActivity);
@@ -395,7 +409,8 @@ export async function guildActivityStart(dicGuildActivity?: DicGuildActivity) {
// 结束军团活动
export async function gateActivityEnd() {
console.log('*****gateActivityEnd')
console.log('*****gateActivityEnd');
await sendEndMsgToAll();
let servers = pinus.app.getServersByType('guild');
for(let { id } of servers) {
await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id, GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
@@ -417,7 +432,8 @@ export async function gateActivitySeconds() {
// 诸侯混战
// 结束军团活动
export async function cityActivityEnd() {
console.log('*****cityActivityEnd')
console.log('*****cityActivityEnd');
await sendEndMsgToAll();
let servers = pinus.app.getServersByType('guild');
for(let { id } of servers) {
await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id, GUILD_ACTIVITY_TYPE.CITY_ACTIVITY);

View File

@@ -202,6 +202,22 @@ export class CityActivityObject {
}
}
// 军团诸侯混战等数据
export class RaceActivityObject {
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}]
private woodenHorses: Map<string, WoodenHorse> = new Map(); // 每个军团的木牛流马 guildCode => WoodenHorse
private events: Map<string, Event[]> = new Map(); // 每个军团遇到的事件
getWoodenHorse(guildCode: string) {
if(!this.woodenHorses.has(guildCode)) {
// this.woodenHorses.set(guildCode, )
}
let wh = this.woodenHorses.get(guildCode);
}
}
class WoodenHorseMember {
roleId: string;
roleName: string;
@@ -248,13 +264,13 @@ export class WoodenHorse {
export class Event {
id: number;
timestamp: number;
fromGuild: string;
toGuild: string;
startDistance: number;
effect: number[];
startTime?: number;
startDistance?: number;
endTimestamp?: number;
endDistance?: number;
effect: number[];
}
export interface GuildGateRankParam {

View File

@@ -29,7 +29,8 @@ let arr = JSON.parse(str);
export const dicGuildActivity = new Map<number, DicGuildActivity>();
arr.forEach(o => {
o.openDay = parseNumberList(o.openDay)
o.openDay = parseNumberList(o.openDay);
if(!o.startMinute) o.startMinute = 0;
dicGuildActivity.set( o.id, o );
});
arr = undefined;

View File

@@ -2,10 +2,10 @@
{
"id": 1,
"name": "蛮夷入侵",
"openDay": "3&0",
"openDay": "4",
"duringTime": 900,
"startTime": 20,
"startMinute": 0,
"startTime": 15,
"startMinute": 15,
"countDown": 5,
"warid": 7001,
"honour": 500
@@ -13,10 +13,10 @@
{
"id": 2,
"name": "诸侯混战",
"openDay": "2&4&6",
"openDay": "2&6",
"duringTime": 900,
"startTime": 20,
"startMinute": 0,
"startTime": 11,
"startMinute": 48,
"countDown": 5,
"warid": 7002,
"honour": 500
@@ -26,8 +26,8 @@
"name": "粮草先行",
"openDay": "1&5",
"duringTime": 600,
"startTime": 20,
"startMinute": 0,
"startTime": 11,
"startMinute": 48,
"countDown": 5,
"warid": 0,
"honour": 200

View File

@@ -387,7 +387,7 @@
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 2,
"enemyType": 6,
"dest_oppo": 1001
},
{
@@ -422,7 +422,7 @@
"outIndex": 11,
"dirction": 1,
"x": 11,
"y": 2,
"y": 3,
"var": 1512,
"lv": 30,
"hide": 1,
@@ -433,7 +433,7 @@
"star": 0,
"spine": 0,
"bossStage": 0,
"enemyType": 2,
"enemyType": 6,
"dest_oppo": 1001
},
{
@@ -537,7 +537,7 @@
"outIndex": 4,
"dirction": 1,
"x": 10,
"y": 2,
"y": 3,
"var": 1517,
"lv": 30,
"hide": 1,
@@ -560,7 +560,7 @@
"outIndex": 5,
"dirction": 1,
"x": 11,
"y": 2,
"y": 3,
"var": 1518,
"lv": 30,
"hide": 1,