✨ feat(活动): 节日活动-火神祭祀
This commit is contained in:
@@ -41,6 +41,7 @@ import { getPopNoticeData } from './popNoticeService';
|
||||
import { _getActivities, _getActivitiesByServerId, _getActivitiesByType, _getActivityById } from './activityRemoteService';
|
||||
import { getGroupShopDataShow } from './groupShopService';
|
||||
import { getBindPhoneDataShow } from './bindPhoneService';
|
||||
import { getPlayerForgeDataShow } from './forgeService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
@@ -232,6 +233,11 @@ export async function getActivity(serverId: number, roleId: string, uid: number,
|
||||
activityData = await getBindPhoneDataShow(activityId, roleId, serverId, uid);
|
||||
break
|
||||
}
|
||||
case ACTIVITY_TYPE.FORGE:
|
||||
{
|
||||
activityData = await getPlayerForgeDataShow(activityId, serverId, roleId);
|
||||
break
|
||||
}
|
||||
default: {
|
||||
console.log('未知活动类型.........', activityType)
|
||||
break;
|
||||
|
||||
42
game-server/app/services/activity/forgeService.ts
Normal file
42
game-server/app/services/activity/forgeService.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { ActivityForgeModel } from "../../db/ActivityForge";
|
||||
import { ForgeData } from "../../domain/activityField/forgeField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerForgeData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new ForgeData(activityData, createTime, serverTime);
|
||||
let playerRecords = await ActivityForgeModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerForgeDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerForgeData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
export function getMetialStr(material: { id: number, count: number }[]) {
|
||||
return material.map(({id, count}) => `${id}&${count}`).join('|')
|
||||
}
|
||||
@@ -14,6 +14,7 @@ import { recordGuildFund } from './timeLimitRankService';
|
||||
import { filterGoods, isGoodsHidden, isHeroHidden } from '../dataService';
|
||||
import { DicGiftPackagePlan } from '../../pubUtils/dictionary/DicGiftPackagePlan';
|
||||
import { Floor, GiftPackageFloorModel } from '../../db/GiftPackageFloor';
|
||||
import { isNumber } from 'underscore';
|
||||
|
||||
|
||||
|
||||
@@ -127,7 +128,7 @@ export function rewardItemData(reward: Array<RewardParam>) {
|
||||
heroes.push({ hid: obj.id, count: obj.count })
|
||||
break;
|
||||
case ACTIVITY_RESOURCES_TYPE.GOODS:
|
||||
goods.push({ id: obj.id, count: obj.count })
|
||||
goods.push({ id: obj.id, count: obj.count, expireTime: obj.expireTime })
|
||||
break;
|
||||
case ACTIVITY_RESOURCES_TYPE.GIFTPACKAGE://配置成礼包会立刻兑换,配置成物品会把礼包放入背包中
|
||||
let goodData = gameData.goods.get(obj.id);//礼包物品
|
||||
@@ -274,15 +275,19 @@ async function randomSelectedData(pool: DicGiftPackagePlan[], roleId: string, gi
|
||||
}
|
||||
|
||||
//数据格式转换'类型&id&数量|类型&id&数量|' ->> Array<RewardParam> 活动奖励
|
||||
export function stringToRewardParam(rewardStr: string): Array<RewardParam> {
|
||||
let result = new Array<{ type: number, id: number, count: number }>();
|
||||
export function stringToRewardParam(rewardStr: string, expireTime?: number): Array<RewardParam> {
|
||||
let result = new Array<{ type: number, id: number, count: number, expireTime?: number }>();
|
||||
if (!rewardStr) return result;
|
||||
let decodeArr = decodeArrayListStr(rewardStr);
|
||||
for (let [type, id, count] of decodeArr) {
|
||||
if (isNaN(parseInt(type)) || isNaN(parseInt(id)) || isNaN(parseInt(count))) {
|
||||
continue;
|
||||
}
|
||||
result.push({ type: parseInt(type), id: parseInt(id), count: parseInt(count) });
|
||||
if(expireTime && isNumber(expireTime)) {
|
||||
result.push({ type: parseInt(type), id: parseInt(id), count: parseInt(count), expireTime: Math.floor(expireTime/1000) });
|
||||
} else {
|
||||
result.push({ type: parseInt(type), id: parseInt(id), count: parseInt(count) });
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user