🐞 fix(活动): 活动限时道具的时限来源修改

This commit is contained in:
luying
2023-03-28 19:25:12 +08:00
parent c65c339e3a
commit f5d22d6d9a
9 changed files with 905 additions and 27 deletions

View File

@@ -88,7 +88,7 @@ export class ForgeHandler {
playerData.setPlayerData(playerRecord);
playerData.incPlayCnt();
let rewards = stringToRewardParam(playerData.reward, playerData.nextRefreshTime);
let rewards = stringToRewardParam(playerData.reward);
let { goods } = await addReward(roleId, roleName, sid, serverId, rewards, ITEM_CHANGE_REASON.ACT_MINI_GAME_REWARD);
let r = new Rank(REDIS_KEY.ACTIVITY_MINI_GAME, { activityId, roundIndex: playerData.roundIndex });
@@ -158,7 +158,7 @@ export class ForgeHandler {
if(!result) return resResult(STATUS.ACTIVITY_MINI_GAME_BOX_HAS_RECEIVED);
playerData.setPlayerData(result);
let rewards = stringToRewardParam(box.reward, playerData.nextRefreshTime);
let rewards = stringToRewardParam(box.reward);
let { goods } = await addReward(roleId, roleName, sid, serverId, rewards, ITEM_CHANGE_REASON.ACT_MINI_GAME_REWARD);
return resResult(STATUS.SUCCESS, {

View File

@@ -76,7 +76,7 @@ export class RefreshShopHandler {
let consumeResult = await handleCost(roleId, sid, consume, ITEM_CHANGE_REASON.BUY_REFRESH_SHOP);
if (!consumeResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
let rewardArray = stringToRewardParam(item.reward, playerData.nextRefreshTime).map(cur => ({...cur, count: cur.count * count }));
let rewardArray = stringToRewardParam(item.reward).map(cur => ({...cur, count: cur.count * count }));
let result = await addReward(roleId, roleName, sid, serverId, rewardArray, ITEM_CHANGE_REASON.BUY_REFRESH_SHOP);
await ActivityRefreshShopModel.addRecord(activityId, roleId, roundIndex, pageIndex, id, count);

View File

@@ -70,7 +70,7 @@ export class RefreshTaskHandler {
await ActivityRefreshTaskModel.addReceiveRecord(serverId, activityId, roleId, roundIndex, pageIndex, id, dailyItemData.getRefTime(), 1);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(dailyItemData.reward, playerData.nextRefreshTime);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(dailyItemData.reward);
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.REFRESH_TASK_REWARD)
//获得点数
@@ -110,7 +110,7 @@ export class RefreshTaskHandler {
await ActivityRefreshTaskPointModel.addReceiveRecord(serverId, activityId, roleId, playerData.consumePoint);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(playerData.reward, playerData.nextRefreshTime);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(playerData.reward);
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.REFRESH_TASK_EXCHANGE)
playerData.exchangePoint += playerData.consumePoint;

View File

@@ -101,7 +101,7 @@ export class SignInHandler {
await ActivitySignInModel.addSignInRecord(activityId, roleId, roundIndex, dayIndex);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(signinItemData.reward, playerData.nextRefreshTime);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(signinItemData.reward);
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.SIGNIN)
return resResult(STATUS.SUCCESS, Object.assign(result, {

View File

@@ -275,19 +275,15 @@ async function randomSelectedData(pool: DicGiftPackagePlan[], roleId: string, gi
}
//数据格式转换'类型&id&数量|类型&id&数量|' ->> Array<RewardParam> 活动奖励
export function stringToRewardParam(rewardStr: string, expireTime?: number): Array<RewardParam> {
let result = new Array<{ type: number, id: number, count: number, expireTime?: number }>();
export function stringToRewardParam(rewardStr: string): Array<RewardParam> {
let result = new Array<{ type: number, id: number, count: 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;
}
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) });
}
result.push({ type: parseInt(type), id: parseInt(id), count: parseInt(count) });
}
return result
}

View File

@@ -1,4 +1,4 @@
import { ITID, CONSUME_TYPE, ITEM_TABLE, CURRENCY_TYPE, MAIL_TYPE, HANDLE_REWARD_TYPE, HERO_SYSTEM_TYPE, CURRENCY_BY_TYPE, ITEM_CHANGE_REASON, TA_USERSET_TYPE, TA_EVENT, POP_UP_SHOP_CONDITION_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION, PUSH_ROUTE } from '../../consts';
import { ITID, CONSUME_TYPE, ITEM_TABLE, CURRENCY_TYPE, MAIL_TYPE, HANDLE_REWARD_TYPE, HERO_SYSTEM_TYPE, CURRENCY_BY_TYPE, ITEM_CHANGE_REASON, TA_USERSET_TYPE, TA_EVENT, POP_UP_SHOP_CONDITION_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION, PUSH_ROUTE, ACTIVITY_TYPE } from '../../consts';
import { getDecimalCnt, getRandEelm, getRandEelmWithWeight, getRandValueByMinMax, } from '../../pubUtils/util';
import { RoleModel, RoleType } from '../../db/Role';
import { setAp } from '../actionPointService';
@@ -24,6 +24,10 @@ import { sendMessageToUserWithSuc } from '../pushService';
import { filterGoods } from '../dataService';
import { ArtifactModel, ArtifactModelType, ArtifactModelUpdate } from '../../db/Artifact';
import { ActivityItemModel } from '../../db/ActivityItem';
import { getActivitiesByType } from '../activity/activityService';
import { ActivityModelType } from '../../db/Activity';
import { ForgeData } from '../../domain/activityField/forgeField';
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
export async function handleCost(roleId: string, sid: string, goods: Array<ItemInter>, reason: ITEM_CHANGE_REASON) {
@@ -146,7 +150,7 @@ export async function addItems(roleId: string, roleName: string, sid: string, go
goods = filterGoods(goods, obj => obj.id, roleId, reason);
let { items, jewels, gold, coin, ap, skins, figures, artifacts, activityItems } = sortItems(goods, HANDLE_REWARD_TYPE.RECEIVE);
let showItems: { id: number, seqId?: number, count: number, isBag?: boolean, expireTime?: number }[] = [];
let role = await RoleModel.findByRoleId(roleId);
let role = await RoleModel.findByRoleId(roleId, '-warCount -topLineup');
// 1. 装备处理
if(jewels.length > 0) {
let { jewelCount = 0 } = role;
@@ -293,9 +297,9 @@ export async function addItems(roleId: string, roleName: string, sid: string, go
// 7. 活动道具处理
if(activityItems.length > 0) {
let { items: itemInfos } = await addActivityItems(roleId, roleName, activityItems, reason);
for (let item of activityItems) {
showItems.push({ id: item.id, count: item.count, expireTime: item.expireTime });
let { items: itemInfos } = await addActivityItems(role, activityItems, reason);
for (let item of itemInfos) {
showItems.push({ id: item.id, count: item.inc, expireTime: item.expireTime });
}
//背包除去装备推送
if (!!itemInfos.length) {
@@ -460,20 +464,36 @@ export async function addBag(roleId: string, roleName: string, data: { id: numbe
return { id: item.id, count: item.count, inc: count, reason };
}
export async function addActivityItems(roleId: string, roleName: string, datas: { id: number, count: number, expireTime?: number }[], reason: number) {
export async function addActivityItems(role: RoleType, datas: { id: number, count: number }[], reason: number) {
let serverTime = await getServerCreateTime(role.serverId);
let createTime = await getRoleCreateTime(role.roleId, role);
let items: { id: number, count: number, inc: number, expireTime: number }[] = [];
for(let data of datas) {
let item = await addActivityItem(roleId, roleName, data, reason);
items.push(item)
let item = await addActivityItem(role.serverId, role.roleId, role.roleName, data, reason, createTime, serverTime);
if(item) items.push(item)
}
return { items }
}
export async function addActivityItem(roleId: string, roleName: string, data: { id: number, count: number, expireTime?: number }, reason: number) {
let { id, count, expireTime } = data;
let { name: itemName, itid } = gameData.goods.get(id);
let item = await ActivityItemModel.increaseActivityItem(roleId, id, count, { roleId, roleName, itemName, id, expireTime });
return { id: item.id, count: item.count, inc: count, expireTime: item.expireTime, reason };
export async function addActivityItem(serverId: number, roleId: string, roleName: string, data: { id: number, count: number }, reason: number, createTime: number, serverTime: number) {
let { id, count } = data;
let { name: itemName, activityType } = gameData.goods.get(id);
let activities = await getActivitiesByType(serverId, activityType);
if(activities.length > 0) {
let activityData = getActivityData(activities[0], createTime, serverTime);
if(!activityData || !activityData.canShow()) return null;
let item = await ActivityItemModel.increaseActivityItem(roleId, id, count, { roleId, roleName, itemName, id, expireTime: activityData.nextRefreshTime });
return { id: item.id, count: item.count, inc: count, expireTime: item.expireTime, reason };
}
}
function getActivityData(activity: ActivityModelType, createTime: number, serverTime: number) {
switch(activity.type) {
case ACTIVITY_TYPE.FORGE:
return new ForgeData(activity, createTime, serverTime)
default:
return null
}
}
export async function addJewels(roleId: string, roleName: string, jewels: { id: number, }[], reason: number) {