活动:修复七天乐任务

This commit is contained in:
luying
2021-12-24 16:01:59 +08:00
parent f686046822
commit dc00431010
5 changed files with 68 additions and 18 deletions
@@ -5,6 +5,7 @@ import { reloadResources } from '../../../pubUtils/data';
import { _getActivitiesByType, _getActivityById, _getActivities } from '../../../services/activity/activityService'; import { _getActivitiesByType, _getActivityById, _getActivities } from '../../../services/activity/activityService';
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService'; import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
import { taflush } from '../../../services/sdkService'; import { taflush } from '../../../services/sdkService';
import { ActivityInRemote } from '../../../domain/activityField/activityField';
export default function (app: Application) { export default function (app: Application) {
new HandlerService(app, {}); new HandlerService(app, {});
@@ -20,7 +21,7 @@ export class ActivityRemote {
private channelService: ChannelService; private channelService: ChannelService;
private activityByServer: Map<number, number[]> = new Map(); // serverId => activityId[]; private activityByServer: Map<number, number[]> = new Map(); // serverId => activityId[];
private activities: Map<number, ActivityModelType> = new Map(); // activityId => activity private activities: Map<number, ActivityInRemote> = new Map(); // activityId => activity
private activityByType: Map<number, Map<number, number[]>> = new Map(); // serverId => type => activityId[]; private activityByType: Map<number, Map<number, number[]>> = new Map(); // serverId => type => activityId[];
private groupToServer: Map<number, number[]> = new Map(); // group => serverId[]; private groupToServer: Map<number, number[]> = new Map(); // group => serverId[];
@@ -45,7 +46,7 @@ export class ActivityRemote {
let activities = await ActivityModel.findOpenAndComingActivityes(); let activities = await ActivityModel.findOpenAndComingActivityes();
let activityIds: number[] = []; let activityIds: number[] = [];
for(let activity of activities) { for(let activity of activities) {
this.activities.set(activity.activityId, activity); this.activities.set(activity.activityId, new ActivityInRemote(activity));
activityIds.push(activity.activityId); activityIds.push(activity.activityId);
} }
this.setActivityTypeAndServer(); this.setActivityTypeAndServer();
@@ -86,7 +87,7 @@ export class ActivityRemote {
public async updateActivities(activities: ActivityModelType[]) { public async updateActivities(activities: ActivityModelType[]) {
let activityIds: number[] = []; let activityIds: number[] = [];
for(let activity of activities) { for(let activity of activities) {
this.activities.set(activity.activityId, activity); this.activities.set(activity.activityId, new ActivityInRemote(activity));
activityIds.push(activity.activityId); activityIds.push(activity.activityId);
} }
this.setActivityTypeAndServer(); this.setActivityTypeAndServer();
@@ -32,6 +32,7 @@ import { SignInData } from '../../domain/activityField/signInField';
import { ActivityGroupModel } from '../../db/ActivityGroup'; import { ActivityGroupModel } from '../../db/ActivityGroup';
import { ActivityGroupTypeModel } from '../../db/ActivityGroupType'; import { ActivityGroupTypeModel } from '../../db/ActivityGroupType';
import { ServerlistModel } from '../../db/Serverlist'; import { ServerlistModel } from '../../db/Serverlist';
import { ActivityInRemote, transActivityInRemoteToModelType } from '../../domain/activityField/activityField';
/** /**
* 获取活动数据 * 获取活动数据
@@ -200,13 +201,15 @@ export async function getActivity(serverId: number, roleId: string, activityId:
export async function getActivityById(activityId: number) { export async function getActivityById(activityId: number) {
let serverType = pinus.app.getServerType(); let serverType = pinus.app.getServerType();
let activity: ActivityInRemote;
if(serverType == 'activity') { if(serverType == 'activity') {
return _getActivityById(activityId); activity = _getActivityById(activityId);
} else { } else {
let servers = pinus.app.getServersByType('activity'); let servers = pinus.app.getServersByType('activity');
let server = getRandSingleEelm(servers); let server = getRandSingleEelm(servers);
return <ActivityModelType>await pinus.app.rpc.activity.activityRemote.getActivityById.toServer(server.id, activityId); activity = <ActivityInRemote>await pinus.app.rpc.activity.activityRemote.getActivityById.toServer(server.id, activityId);
} }
return transActivityInRemoteToModelType(activity)
} }
export async function getActivitiesByType(serverId: number, type: number) { export async function getActivitiesByType(serverId: number, type: number) {
@@ -227,21 +230,21 @@ export async function getActivities() {
} else { } else {
let servers = pinus.app.getServersByType('activity'); let servers = pinus.app.getServersByType('activity');
let server = getRandSingleEelm(servers); let server = getRandSingleEelm(servers);
return <ActivityModelType[]>await pinus.app.rpc.activity.activityRemote.getActivities.toServer(server.id); return <ActivityInRemote[]>await pinus.app.rpc.activity.activityRemote.getActivities.toServer(server.id);
} }
} }
export function _getActivityById(activityId: number) { export function _getActivityById(activityId: number) {
return <ActivityModelType>pinus.app.get('activities')?.get(activityId); return <ActivityInRemote>pinus.app.get('activities')?.get(activityId);
} }
export function _getActivitiesByType(serverId: number, type: number) { export function _getActivitiesByType(serverId: number, type: number) {
let activityByType = pinus.app.get('activityByType')?.get(serverId)?.get(type)||[]; let activityByType = pinus.app.get('activityByType')?.get(serverId)?.get(type)||[];
let activities: Map<number, ActivityModelType> = pinus.app.get('activities'); let activities: Map<number, ActivityInRemote> = pinus.app.get('activities');
let result: ActivityModelType[] = []; let result: ActivityInRemote[] = [];
for(let activityId of activityByType) { for(let activityId of activityByType) {
let activity = activities.get(activityId); let activity = activities.get(activityId);
if(activity && activity.beginTime <= new Date()) { if(activity && activity.beginTime <= Date.now()) {
result.push(activity); result.push(activity);
} }
} }
@@ -250,7 +253,7 @@ export function _getActivitiesByType(serverId: number, type: number) {
export function _getActivities() { export function _getActivities() {
let activities = pinus.app.get('activities'); let activities = pinus.app.get('activities');
let result: ActivityModelType[] = []; let result: ActivityInRemote[] = [];
for(let [_, activity] of activities) { for(let [_, activity] of activities) {
result.push(activity); result.push(activity);
} }
@@ -76,3 +76,47 @@ export abstract class ActivityBase {
'今天第几天:', this.todayIndex, '回合:', this.roundIndex, '下次刷新:', this.nextRefreshTime, moment(this.nextRefreshTime).toDate()) '今天第几天:', this.todayIndex, '回合:', this.roundIndex, '下次刷新:', this.nextRefreshTime, moment(this.nextRefreshTime).toDate())
} }
} }
/**
* 存在内存内的活动
*/
export class ActivityInRemote {
groupId: number; // 组Id
activityId: number; // 活动Id
beginTime: number; // 开启时间 timeType=3
endTime: number; // 结束时间 timeType=3
type: number; // 活动类型
data: string; // 活动表中的数据
timeType: number; // 活动时间类型 ACTIVITY_TIME_TYPE 1.服务器开启时间 2.角色创建时间 3.指定开启时间(beginTime,endTime)
days: number; // 活动持续天数 timeType=1、2
delayDay: number; // 迟几天开启活动,0表示按照规定时间开启
interval: number; // 周期性活动时间间隔,秒
constructor(activity?: ActivityModelType) {
this.groupId = activity.groupId;
this.activityId = activity.activityId;
this.beginTime = activity.beginTime.getTime();
this.endTime = activity.endTime.getTime();
this.type = activity.type;
this.data = activity.data;
this.timeType = activity.timeType;
this.days = activity.days;
this.delayDay = activity.delayDay;
this.interval = activity.interval;
}
}
export function transActivityInRemoteToModelType(activity: ActivityInRemote) {
if(!activity) return null;
return {
...activity,
beginTime: new Date(activity.beginTime),
endTime: new Date(activity.endTime),
_id: '',
createdAt: new Date(),
updatedAt: new Date(),
createdBy: 0,
updatedBy: 0
}
}
+4 -3
View File
@@ -100,6 +100,7 @@ import { WishPoolReportModel } from '../db/WishPoolReport';
import { pick } from "underscore"; import { pick } from "underscore";
import { HeroShowParam } from '../domain/roleField/hero'; import { HeroShowParam } from '../domain/roleField/hero';
import { saveCeChangeLog } from "./logUtil"; import { saveCeChangeLog } from "./logUtil";
import { ActivityInRemote } from "../domain/activityField/activityField";
// 储存在内存中的初始数据 // 储存在内存中的初始数据
export function getInitRoleInfo() { export function getInitRoleInfo() {
@@ -318,7 +319,7 @@ export class CreateHeroes extends UpdateHeroes {
this.resultHeroes = await HeroModel.insertHeroes(this.roleId, this.roleName, this.serverId, heroeInfos); this.resultHeroes = await HeroModel.insertHeroes(this.roleId, this.roleName, this.serverId, heroeInfos);
} }
public async clearTask(activitiesTypeMap: ActivityModelType[]) { public async clearTask(activitiesTypeMap: ActivityInRemote[]) {
// 任务 // 任务
console.log('****** checkTask before', Date.now()) console.log('****** checkTask before', Date.now())
let m1 = await checkTask(this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, true, {}); let m1 = await checkTask(this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, true, {});
@@ -329,8 +330,8 @@ export class CreateHeroes extends UpdateHeroes {
console.log('****** checkTask after', Date.now()) console.log('****** checkTask after', Date.now())
//成长任务 //成长任务
console.log('****** accomplishTask before', Date.now()) console.log('****** accomplishTask before', Date.now())
let mm1 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, null, activitiesTypeMap) let mm1 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, null, activitiesTypeMap)
let mm2 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_QUALITY, this.heroNum, { heroes: this.resultHeroes }, activitiesTypeMap) let mm2 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_QUALITY, this.heroNum, { heroes: this.resultHeroes }, activitiesTypeMap);
console.log('****** accomplishTask after', Date.now()) console.log('****** accomplishTask after', Date.now())
this.activityTaskPushMessage.push(...mm1, ...mm2); this.activityTaskPushMessage.push(...mm1, ...mm2);
} }
+5 -4
View File
@@ -31,6 +31,7 @@ import moment = require("moment");
import { GuildModel } from '../db/Guild'; import { GuildModel } from '../db/Guild';
import { RefreshTaskData } from '../domain/activityField/refreshTaskField'; import { RefreshTaskData } from '../domain/activityField/refreshTaskField';
import { ActivityRefreshTaskModel } from '../db/ActivityRefreshTask'; import { ActivityRefreshTaskModel } from '../db/ActivityRefreshTask';
import { ActivityInRemote, transActivityInRemoteToModelType } from '../domain/activityField/activityField';
@@ -487,7 +488,7 @@ function checkRecResult(rec: UserTaskRecType, id: number) {
* @param {number} parma 参数 * @param {number} parma 参数
* *
*/ */
export async function accomplishTask(serverId: number, roleId: string, taskType: TASK_TYPE, count: number, parma?: any, activities?: ActivityModelType[]) { export async function accomplishTask(serverId: number, roleId: string, taskType: TASK_TYPE, count: number, parma?: any, activities?: ActivityInRemote[]) {
// console.log('accomplishTask', roleId, taskType, count, JSON.stringify(parma)) // console.log('accomplishTask', roleId, taskType, count, JSON.stringify(parma))
let pushMessage = []; let pushMessage = [];
let { activityGroupId } = await ServerlistModel.findByServerId(serverId); let { activityGroupId } = await ServerlistModel.findByServerId(serverId);
@@ -495,9 +496,9 @@ export async function accomplishTask(serverId: number, roleId: string, taskType:
if(activities) { if(activities) {
let result: ActivityModelType[] = []; let result: ActivityModelType[] = [];
for(let activity of activities) { for(let activity of activities) {
if(activity.beginTime <= new Date() && activity.endTime >= new Date()) { if(activity.beginTime <= Date.now() && activity.endTime >= Date.now()) {
if(activityGroupId.includes(activity.groupId) && types.includes(activity.type)) { if(activityGroupId.includes(activity.groupId) && types.includes(activity.type)) {
result.push(activity); result.push( transActivityInRemoteToModelType(activity));
} }
} }
} }
@@ -519,7 +520,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType:
let growthActivity = playerData.growth; let growthActivity = playerData.growth;
let growthTaskArray = growthActivity.findTaskByType(taskType); let growthTaskArray = growthActivity.findTaskByType(taskType);
for (let task of growthTaskArray) { for (let task of growthTaskArray) {
let taskRecord = await ActivityGrowthModel.findDataByCellIndex(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType) let taskRecord = await ActivityGrowthModel.findDataByCellIndex(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType);
let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null; let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null;
let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, activity.activityId, parma, recordData); let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, activity.activityId, parma, recordData);
if (addCount) { if (addCount) {