init
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,34 +1,34 @@
|
||||
import { ACTIVITY_TYPE } from "../../consts/constModules/activityConst";
|
||||
import { ActivityAuthorGachaRecModel } from "../../db/AuthorGachaRec";
|
||||
import { UserGachaModel } from "../../db/UserGacha";
|
||||
import { AuthorGachaData } from "../../domain/activityField/authorGachaField";
|
||||
import { getGachaRemainFloor } from "../../pubUtils/util";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
export async function getPlayerAuthorGachaData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
if(!activityData) return
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new AuthorGachaData(activityData, createTime, serverTime);
|
||||
if ((playerData?.type || 0) != ACTIVITY_TYPE.AUTHOR_GACHA) return
|
||||
let playerRecord = await ActivityAuthorGachaRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getUseGachaData(activityId: number, roleId: string, playerData: AuthorGachaData) {
|
||||
let userGacha = await UserGachaModel.findByRole(roleId, playerData.gachaId, activityId);
|
||||
let count = userGacha?.count || 0;
|
||||
let remainFloor = getGachaRemainFloor(playerData.gachaId, userGacha?.floor || []);
|
||||
return { count, remainFloor }
|
||||
}
|
||||
|
||||
export async function getPlayerAuthorGachaDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerAuthorGachaData(activityId, serverId, roleId);
|
||||
if (playerData && playerData.canShow && playerData.canShow()) {
|
||||
return { ...playerData.getShowResult(), ...await getUseGachaData(activityId, roleId, playerData) };
|
||||
}
|
||||
return null
|
||||
}
|
||||
import { ACTIVITY_TYPE } from "@consts/constModules/activityConst";
|
||||
import { ActivityAuthorGachaRecModel } from "@db/AuthorGachaRec";
|
||||
import { UserGachaModel } from "@db/UserGacha";
|
||||
import { AuthorGachaData } from "@domain/activityField/authorGachaField";
|
||||
import { getGachaRemainFloor } from "@pubUtils/util";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
export async function getPlayerAuthorGachaData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
if(!activityData) return
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new AuthorGachaData(activityData, createTime, serverTime);
|
||||
if ((playerData?.type || 0) != ACTIVITY_TYPE.AUTHOR_GACHA) return
|
||||
let playerRecord = await ActivityAuthorGachaRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getUseGachaData(activityId: number, roleId: string, playerData: AuthorGachaData) {
|
||||
let userGacha = await UserGachaModel.findByRole(roleId, playerData.gachaId, activityId);
|
||||
let count = userGacha?.count || 0;
|
||||
let remainFloor = getGachaRemainFloor(playerData.gachaId, userGacha?.floor || []);
|
||||
return { count, remainFloor }
|
||||
}
|
||||
|
||||
export async function getPlayerAuthorGachaDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerAuthorGachaData(activityId, serverId, roleId);
|
||||
if (playerData && playerData.canShow && playerData.canShow()) {
|
||||
return { ...playerData.getShowResult(), ...await getUseGachaData(activityId, roleId, playerData) };
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,149 +1,149 @@
|
||||
import { isNumber } from 'underscore';
|
||||
import { ACTIVITY_TYPE, BIND_PHONE_STATUS, PUBLIC_ACCOUNT_GIFT, PUSH_ROUTE, SDK_37_CONST, SNS_LINK_TYPE } from '../../consts';
|
||||
import { ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityBindPhoneRewardModel } from '../../db/ActivityBindPhoneReward';
|
||||
import { ActivityPublicAccountCodeModel } from '../../db/ActivityPublicAccountCode';
|
||||
import { LinkModel } from '../../db/Link';
|
||||
import { UserModel, UserType } from '../../db/User';
|
||||
import { BindPhoneData } from '../../domain/activityField/bindPhoneField';
|
||||
import { aes128Encrypt } from '../../pubUtils/util';
|
||||
import { getOnlineRoleByUserCode, getRedis, getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivityById } from './activityService';
|
||||
import { sendMessageToUserWithSuc } from '../pushService';
|
||||
|
||||
|
||||
/**
|
||||
* 绑定手机相关数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getAllSnsLinkData(activityId: number, roleId: string, serverId: number, uid: number) {
|
||||
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if(!activityData || activityData.type != ACTIVITY_TYPE.BIND_PHONE) return null;
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new BindPhoneData(activityData, createTime, serverTime);
|
||||
|
||||
let links = await LinkModel.findByServerId(serverId);
|
||||
playerData.setLinks(links);
|
||||
|
||||
let user: UserType;
|
||||
if(playerData.bindPhone) {
|
||||
if(!user) user = await UserModel.findUserByUid(uid);
|
||||
let receiveRec = await ActivityBindPhoneRewardModel.findByUid(activityId, uid);
|
||||
playerData.bindPhone.setBindPhoneStatus(user, receiveRec);
|
||||
}
|
||||
if(playerData.wxPublicAccount) {
|
||||
if(!user) user = await UserModel.findUserByUid(uid);
|
||||
if(user.channelInfo) {
|
||||
let giftCode = encodeGiftCode(roleId, serverId, user.channelInfo.uid, user.channelInfo.platformAppid, user.channelInfo.childGameId, activityId);
|
||||
playerData.wxPublicAccount.setEncodeGiftCode(giftCode);
|
||||
let playerRecord = await ActivityPublicAccountCodeModel.findByChannel(activityId, user.channelId);
|
||||
if(playerRecord) playerData.wxPublicAccount.setPlayerRecord(playerRecord);
|
||||
}
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定手机相关数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getBindPhoneData(activityId: number, roleId: string, serverId: number, uid: number) {
|
||||
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if(!activityData || activityData.type != ACTIVITY_TYPE.BIND_PHONE) return null;
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new BindPhoneData(activityData, createTime, serverTime);
|
||||
|
||||
let links = await LinkModel.findByServerId(serverId);
|
||||
playerData.setLinks(links);
|
||||
|
||||
let user: UserType;
|
||||
if(playerData.bindPhone) {
|
||||
if(!user) user = await UserModel.findUserByUid(uid);
|
||||
let receiveRec = await ActivityBindPhoneRewardModel.findByUid(activityId, uid);
|
||||
playerData.bindPhone.setBindPhoneStatus(user, receiveRec);
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信公众号
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPublicAccountData(activityId: number, roleId: string, serverId: number, user: UserType) {
|
||||
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if(!activityData || activityData.type != ACTIVITY_TYPE.BIND_PHONE) return null;
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new BindPhoneData(activityData, createTime, serverTime);
|
||||
|
||||
let links = await LinkModel.findByServerId(serverId);
|
||||
playerData.setLinks(links);
|
||||
|
||||
if(playerData.wxPublicAccount) {
|
||||
if(user.channelInfo) {
|
||||
let giftCode = encodeGiftCode(roleId, serverId, user.channelInfo.uid, user.channelInfo.platformAppid, user.channelInfo.childGameId, activityId);
|
||||
playerData.wxPublicAccount.setEncodeGiftCode(giftCode);
|
||||
let playerRecord = await ActivityPublicAccountCodeModel.findByChannel(activityId, user.channelId);
|
||||
if(playerRecord) playerData.wxPublicAccount.setPlayerRecord(playerRecord);
|
||||
}
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getAllSnsLinkDataShow(activityId: number, roleId: string, serverId: number, uid: number) {
|
||||
let playerData = await getAllSnsLinkData(activityId, roleId, serverId, uid);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
function encodeGiftCode(roleId: string, serverId: number, uid: number, pid: string, gid: string, activityId: number) {
|
||||
let encodeResult = aes128Encrypt(`${roleId}|${serverId}|${uid}|${pid}|${gid}|${PUBLIC_ACCOUNT_GIFT}${activityId}|${SDK_37_CONST.GIFT_GAME_ID}`, SDK_37_CONST.PUBLIC_GIFT_KEY);
|
||||
return `FS${encodeResult}`;
|
||||
}
|
||||
|
||||
export async function sendPublicAccountGift(message: string) {
|
||||
let [_activityId, userCode, channelId] = message?.split('|')||[];
|
||||
let activityId = parseInt(_activityId);
|
||||
if(!isNumber(activityId) || !userCode || !channelId) return;
|
||||
|
||||
let onlineRoleId = await getOnlineRoleByUserCode(userCode);
|
||||
// console.log('##### sendPublicAccountGift', message, userCode, onlineRoleId);
|
||||
if (!!onlineRoleId) { // 在线,推送消息
|
||||
let playerRecord = await ActivityPublicAccountCodeModel.findByChannel(activityId, channelId);
|
||||
await sendMessageToUserWithSuc(onlineRoleId, PUSH_ROUTE.PUBLIC_ACCOUNT_GIFT, { activityId, type: SNS_LINK_TYPE.WX_PUBLIC_ACCOUNT, status: playerRecord.hasReceived? BIND_PHONE_STATUS.RECEIVED: BIND_PHONE_STATUS.HAS_BIND });
|
||||
}
|
||||
}
|
||||
import { isNumber } from 'underscore';
|
||||
import { ACTIVITY_TYPE, BIND_PHONE_STATUS, PUBLIC_ACCOUNT_GIFT, PUSH_ROUTE, SDK_37_CONST, SNS_LINK_TYPE } from '@consts';
|
||||
import { ActivityModelType } from '@db/Activity';
|
||||
import { ActivityBindPhoneRewardModel } from '@db/ActivityBindPhoneReward';
|
||||
import { ActivityPublicAccountCodeModel } from '@db/ActivityPublicAccountCode';
|
||||
import { LinkModel } from '@db/Link';
|
||||
import { UserModel, UserType } from '@db/User';
|
||||
import { BindPhoneData } from '@domain/activityField/bindPhoneField';
|
||||
import { aes128Encrypt } from '@pubUtils/util';
|
||||
import { getOnlineRoleByUserCode, getRedis, getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivityById } from './activityService';
|
||||
import { sendMessageToUserWithSuc } from '../pushService';
|
||||
|
||||
|
||||
/**
|
||||
* 绑定手机相关数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getAllSnsLinkData(activityId: number, roleId: string, serverId: number, uid: number) {
|
||||
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if(!activityData || activityData.type != ACTIVITY_TYPE.BIND_PHONE) return null;
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new BindPhoneData(activityData, createTime, serverTime);
|
||||
|
||||
let links = await LinkModel.findByServerId(serverId);
|
||||
playerData.setLinks(links);
|
||||
|
||||
let user: UserType;
|
||||
if(playerData.bindPhone) {
|
||||
if(!user) user = await UserModel.findUserByUid(uid);
|
||||
let receiveRec = await ActivityBindPhoneRewardModel.findByUid(activityId, uid);
|
||||
playerData.bindPhone.setBindPhoneStatus(user, receiveRec);
|
||||
}
|
||||
if(playerData.wxPublicAccount) {
|
||||
if(!user) user = await UserModel.findUserByUid(uid);
|
||||
if(user.channelInfo) {
|
||||
let giftCode = encodeGiftCode(roleId, serverId, user.channelInfo.uid, user.channelInfo.platformAppid, user.channelInfo.childGameId, activityId);
|
||||
playerData.wxPublicAccount.setEncodeGiftCode(giftCode);
|
||||
let playerRecord = await ActivityPublicAccountCodeModel.findByChannel(activityId, user.channelId);
|
||||
if(playerRecord) playerData.wxPublicAccount.setPlayerRecord(playerRecord);
|
||||
}
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定手机相关数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getBindPhoneData(activityId: number, roleId: string, serverId: number, uid: number) {
|
||||
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if(!activityData || activityData.type != ACTIVITY_TYPE.BIND_PHONE) return null;
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new BindPhoneData(activityData, createTime, serverTime);
|
||||
|
||||
let links = await LinkModel.findByServerId(serverId);
|
||||
playerData.setLinks(links);
|
||||
|
||||
let user: UserType;
|
||||
if(playerData.bindPhone) {
|
||||
if(!user) user = await UserModel.findUserByUid(uid);
|
||||
let receiveRec = await ActivityBindPhoneRewardModel.findByUid(activityId, uid);
|
||||
playerData.bindPhone.setBindPhoneStatus(user, receiveRec);
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信公众号
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPublicAccountData(activityId: number, roleId: string, serverId: number, user: UserType) {
|
||||
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if(!activityData || activityData.type != ACTIVITY_TYPE.BIND_PHONE) return null;
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new BindPhoneData(activityData, createTime, serverTime);
|
||||
|
||||
let links = await LinkModel.findByServerId(serverId);
|
||||
playerData.setLinks(links);
|
||||
|
||||
if(playerData.wxPublicAccount) {
|
||||
if(user.channelInfo) {
|
||||
let giftCode = encodeGiftCode(roleId, serverId, user.channelInfo.uid, user.channelInfo.platformAppid, user.channelInfo.childGameId, activityId);
|
||||
playerData.wxPublicAccount.setEncodeGiftCode(giftCode);
|
||||
let playerRecord = await ActivityPublicAccountCodeModel.findByChannel(activityId, user.channelId);
|
||||
if(playerRecord) playerData.wxPublicAccount.setPlayerRecord(playerRecord);
|
||||
}
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getAllSnsLinkDataShow(activityId: number, roleId: string, serverId: number, uid: number) {
|
||||
let playerData = await getAllSnsLinkData(activityId, roleId, serverId, uid);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
function encodeGiftCode(roleId: string, serverId: number, uid: number, pid: string, gid: string, activityId: number) {
|
||||
let encodeResult = aes128Encrypt(`${roleId}|${serverId}|${uid}|${pid}|${gid}|${PUBLIC_ACCOUNT_GIFT}${activityId}|${SDK_37_CONST.GIFT_GAME_ID}`, SDK_37_CONST.PUBLIC_GIFT_KEY);
|
||||
return `FS${encodeResult}`;
|
||||
}
|
||||
|
||||
export async function sendPublicAccountGift(message: string) {
|
||||
let [_activityId, userCode, channelId] = message?.split('|')||[];
|
||||
let activityId = parseInt(_activityId);
|
||||
if(!isNumber(activityId) || !userCode || !channelId) return;
|
||||
|
||||
let onlineRoleId = await getOnlineRoleByUserCode(userCode);
|
||||
// console.log('##### sendPublicAccountGift', message, userCode, onlineRoleId);
|
||||
if (!!onlineRoleId) { // 在线,推送消息
|
||||
let playerRecord = await ActivityPublicAccountCodeModel.findByChannel(activityId, channelId);
|
||||
await sendMessageToUserWithSuc(onlineRoleId, PUSH_ROUTE.PUBLIC_ACCOUNT_GIFT, { activityId, type: SNS_LINK_TYPE.WX_PUBLIC_ACCOUNT, status: playerRecord.hasReceived? BIND_PHONE_STATUS.RECEIVED: BIND_PHONE_STATUS.HAS_BIND });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
import { ActivityChongYangRecModel } from "../../db/ActivityChongYangRec";
|
||||
import { ChongYangData } from "../../domain/activityField/chongyangField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
export async function getPlayerChongYangData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new ChongYangData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityChongYangRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
export async function getPlayerChongYangDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerChongYangData(activityId, serverId, roleId);
|
||||
if (playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
import { ActivityChongYangRecModel } from "@db/ActivityChongYangRec";
|
||||
import { ChongYangData } from "@domain/activityField/chongyangField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
export async function getPlayerChongYangData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new ChongYangData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityChongYangRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
export async function getPlayerChongYangDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerChongYangData(activityId, serverId, roleId);
|
||||
if (playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,54 +1,54 @@
|
||||
import { ACTIVITY_TYPE } from '../../consts';
|
||||
import { ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityDailyChallengesModel, ActivityDailyChallengesModelType } from '../../db/ActivityDailyChallenges';
|
||||
import { DailyChallengesData } from '../../domain/activityField/dailyChallengesField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function dailyChallengesActivity(serverId: number, roleId: string) {
|
||||
|
||||
let activityDataArray: ActivityModelType[] = await getActivitiesByType(serverId, ACTIVITY_TYPE.TASK_DAILY_CHALLENGES);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityData.activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyChallengesData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyChallengesData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let playerRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyChallengesData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
import { ACTIVITY_TYPE } from '@consts';
|
||||
import { ActivityModelType } from '@db/Activity';
|
||||
import { ActivityDailyChallengesModel, ActivityDailyChallengesModelType } from '@db/ActivityDailyChallenges';
|
||||
import { DailyChallengesData } from '@domain/activityField/dailyChallengesField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function dailyChallengesActivity(serverId: number, roleId: string) {
|
||||
|
||||
let activityDataArray: ActivityModelType[] = await getActivitiesByType(serverId, ACTIVITY_TYPE.TASK_DAILY_CHALLENGES);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityData.activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyChallengesData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyChallengesData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let playerRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyChallengesData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,77 +1,77 @@
|
||||
import { ACTIVITY_TYPE, MAIL_TYPE, REFRESH_TIME } from '../../consts';
|
||||
import { ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityDailyCoinModel, ActivityDailyCoinModelType } from '../../db/ActivityDailyCoin';
|
||||
import { ServerlistType } from '../../db/Serverlist';
|
||||
import { DailyCoinData } from '../../domain/activityField/dailyCoinField';
|
||||
import { RewardInter } from '../../pubUtils/interface';
|
||||
import { stringWithTypeToRewardInter } from '../../pubUtils/roleUtil';
|
||||
import { sendMailByContent } from '../mailService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyCoinData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyCoinData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityDailyCoinModelType = await ActivityDailyCoinModel.findData(serverId, activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function sendUnReceivedActivityDailyCoin(servers: ServerlistType[]) {
|
||||
let today = new Date().setHours(REFRESH_TIME, 0, 0, 0);
|
||||
let yesterday = today - 86400000;
|
||||
let unreceivedRecord = await ActivityDailyCoinModel.findUnreceivedBox(new Date(yesterday), new Date(today));
|
||||
for(let { serverId } of servers) {
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_COIN);
|
||||
for(let activityData of activities) {
|
||||
for(let playerRecord of unreceivedRecord) {
|
||||
if(playerRecord.activityId != activityData.activityId) continue;
|
||||
if(playerRecord.serverId != serverId) continue;
|
||||
await sendUnReceivedRecor(activityData, playerRecord, serverTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function sendUnReceivedRecor(activityData: ActivityModelType, playerRecord: ActivityDailyCoinModelType, serverTime: number) {
|
||||
let createTime = await getRoleCreateTime(playerRecord.roleId);
|
||||
|
||||
let playerData = new DailyCoinData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
let unreceivedRecord = playerData.getUnReceivedBox();
|
||||
if(unreceivedRecord.length > 0) {
|
||||
let rewards: RewardInter[] = [], boxIds: number[] = [];
|
||||
for(let { cellIndex, reward } of unreceivedRecord) {
|
||||
rewards.push(...stringWithTypeToRewardInter(reward));
|
||||
boxIds.push(cellIndex);
|
||||
}
|
||||
await sendMailByContent(MAIL_TYPE.DAILY_COIN, playerRecord.roleId, { goods: rewards });
|
||||
await ActivityDailyCoinModel.repaireBox(playerRecord._id, boxIds);
|
||||
}
|
||||
}
|
||||
|
||||
export function mergeData(data: any[]) {
|
||||
let newDate = [];
|
||||
for (let item of data) {
|
||||
let index = newDate.findIndex(obj => { return obj.id === item.id });
|
||||
if (index != -1) {
|
||||
newDate[index].count += item.count;
|
||||
} else {
|
||||
newDate = newDate.concat(item);
|
||||
}
|
||||
}
|
||||
return newDate;
|
||||
}
|
||||
import { ACTIVITY_TYPE, MAIL_TYPE, REFRESH_TIME } from '@consts';
|
||||
import { ActivityModelType } from '@db/Activity';
|
||||
import { ActivityDailyCoinModel, ActivityDailyCoinModelType } from '@db/ActivityDailyCoin';
|
||||
import { ServerlistType } from '@db/Serverlist';
|
||||
import { DailyCoinData } from '@domain/activityField/dailyCoinField';
|
||||
import { RewardInter } from '@pubUtils/interface';
|
||||
import { stringWithTypeToRewardInter } from '@pubUtils/roleUtil';
|
||||
import { sendMailByContent } from '../mailService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyCoinData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyCoinData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityDailyCoinModelType = await ActivityDailyCoinModel.findData(serverId, activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function sendUnReceivedActivityDailyCoin(servers: ServerlistType[]) {
|
||||
let today = new Date().setHours(REFRESH_TIME, 0, 0, 0);
|
||||
let yesterday = today - 86400000;
|
||||
let unreceivedRecord = await ActivityDailyCoinModel.findUnreceivedBox(new Date(yesterday), new Date(today));
|
||||
for(let { serverId } of servers) {
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_COIN);
|
||||
for(let activityData of activities) {
|
||||
for(let playerRecord of unreceivedRecord) {
|
||||
if(playerRecord.activityId != activityData.activityId) continue;
|
||||
if(playerRecord.serverId != serverId) continue;
|
||||
await sendUnReceivedRecor(activityData, playerRecord, serverTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function sendUnReceivedRecor(activityData: ActivityModelType, playerRecord: ActivityDailyCoinModelType, serverTime: number) {
|
||||
let createTime = await getRoleCreateTime(playerRecord.roleId);
|
||||
|
||||
let playerData = new DailyCoinData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
let unreceivedRecord = playerData.getUnReceivedBox();
|
||||
if(unreceivedRecord.length > 0) {
|
||||
let rewards: RewardInter[] = [], boxIds: number[] = [];
|
||||
for(let { cellIndex, reward } of unreceivedRecord) {
|
||||
rewards.push(...stringWithTypeToRewardInter(reward));
|
||||
boxIds.push(cellIndex);
|
||||
}
|
||||
await sendMailByContent(MAIL_TYPE.DAILY_COIN, playerRecord.roleId, { goods: rewards });
|
||||
await ActivityDailyCoinModel.repaireBox(playerRecord._id, boxIds);
|
||||
}
|
||||
}
|
||||
|
||||
export function mergeData(data: any[]) {
|
||||
let newDate = [];
|
||||
for (let item of data) {
|
||||
let index = newDate.findIndex(obj => { return obj.id === item.id });
|
||||
if (index != -1) {
|
||||
newDate[index].count += item.count;
|
||||
} else {
|
||||
newDate = newDate.concat(item);
|
||||
}
|
||||
}
|
||||
return newDate;
|
||||
}
|
||||
|
||||
@@ -1,77 +1,77 @@
|
||||
import { ACTIVITY_TYPE } from '../../consts';
|
||||
import { ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityDailyGKModel, ActivityDailyGKModelType } from '../../db/ActivityDailyGK';
|
||||
import { DailyGKData } from '../../domain/activityField/dailyGKField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function dailyGKActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_GK);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerRecord: ActivityDailyGKModelType = await ActivityDailyGKModel.findData(serverId, activityData.activityId, roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyGKData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyGKData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord: ActivityDailyGKModelType = await ActivityDailyGKModel.findData(serverId, activityId, roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyGKData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 挑战每日关卡成功
|
||||
*
|
||||
* @param {number} activityId 活动id
|
||||
* @param {number} gk 关卡id
|
||||
*
|
||||
*/
|
||||
export async function challengeDailyGK(serverId: number, roleId: string, activityId: number, gk: number) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyGKData(activityData, createTime, serverTime);
|
||||
let item = playerData.findItemByGK(gk);
|
||||
if (item) {
|
||||
let dayIndex = item.dayIndex;
|
||||
await ActivityDailyGKModel.addRecord(serverId, activityId, roleId, dayIndex);
|
||||
} else {
|
||||
console.log('没有找到对应关卡活动数据', activityId, gk)
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
import { ACTIVITY_TYPE } from '@consts';
|
||||
import { ActivityModelType } from '@db/Activity';
|
||||
import { ActivityDailyGKModel, ActivityDailyGKModelType } from '@db/ActivityDailyGK';
|
||||
import { DailyGKData } from '@domain/activityField/dailyGKField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function dailyGKActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_GK);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerRecord: ActivityDailyGKModelType = await ActivityDailyGKModel.findData(serverId, activityData.activityId, roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyGKData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyGKData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord: ActivityDailyGKModelType = await ActivityDailyGKModel.findData(serverId, activityId, roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyGKData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 挑战每日关卡成功
|
||||
*
|
||||
* @param {number} activityId 活动id
|
||||
* @param {number} gk 关卡id
|
||||
*
|
||||
*/
|
||||
export async function challengeDailyGK(serverId: number, roleId: string, activityId: number, gk: number) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyGKData(activityData, createTime, serverTime);
|
||||
let item = playerData.findItemByGK(gk);
|
||||
if (item) {
|
||||
let dayIndex = item.dayIndex;
|
||||
await ActivityDailyGKModel.addRecord(serverId, activityId, roleId, dayIndex);
|
||||
} else {
|
||||
console.log('没有找到对应关卡活动数据', activityId, gk)
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,52 +1,52 @@
|
||||
import { ACTIVITY_TYPE } from '../../consts';
|
||||
import { ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityDailyGiftsModel, ActivityDailyGiftsModelType } from '../../db/ActivityDailyGifts';
|
||||
import { DailyGiftsData } from '../../domain/activityField/dailyGiftsField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function dailyGiftsActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_DISCOUNT_GIFT);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityData.activityId, roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyGiftsData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyGiftsData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityId, roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyGiftsData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
import { ACTIVITY_TYPE } from '@consts';
|
||||
import { ActivityModelType } from '@db/Activity';
|
||||
import { ActivityDailyGiftsModel, ActivityDailyGiftsModelType } from '@db/ActivityDailyGifts';
|
||||
import { DailyGiftsData } from '@domain/activityField/dailyGiftsField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function dailyGiftsActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_DISCOUNT_GIFT);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityData.activityId, roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyGiftsData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyGiftsData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityId, roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyGiftsData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,54 +1,54 @@
|
||||
import { ACTIVITY_TYPE, DAILY_MEAL_TYPE } from '../../consts';
|
||||
import { ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityDailyMealModel, ActivityDailyMealModelType } from '../../db/ActivityDailyMeal';
|
||||
import { DailyMealData } from '../../domain/activityField/dailyMealField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function dailyMealActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_MEAL);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyMealData(activityData, createTime, serverTime);
|
||||
|
||||
let playerLunchRecords: ActivityDailyMealModelType[] = await ActivityDailyMealModel.findData(serverId, activityData.activityId, roleId, DAILY_MEAL_TYPE.LUNCH, playerData.roundIndex);
|
||||
let playerDinnerRecords: ActivityDailyMealModelType[] = await ActivityDailyMealModel.findData(serverId, activityData.activityId, roleId, DAILY_MEAL_TYPE.DINNER, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerLunchRecords.concat(playerDinnerRecords));
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyMealData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyMealData(activityData, createTime, serverTime);
|
||||
|
||||
let playerLunchRecords: ActivityDailyMealModelType[] = await ActivityDailyMealModel.findData(serverId, activityData.activityId, roleId, DAILY_MEAL_TYPE.LUNCH, playerData.roundIndex);
|
||||
let playerDinnerRecords: ActivityDailyMealModelType[] = await ActivityDailyMealModel.findData(serverId, activityData.activityId, roleId, DAILY_MEAL_TYPE.DINNER, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerLunchRecords.concat(playerDinnerRecords));
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
import { ACTIVITY_TYPE, DAILY_MEAL_TYPE } from '@consts';
|
||||
import { ActivityModelType } from '@db/Activity';
|
||||
import { ActivityDailyMealModel, ActivityDailyMealModelType } from '@db/ActivityDailyMeal';
|
||||
import { DailyMealData } from '@domain/activityField/dailyMealField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function dailyMealActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_MEAL);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyMealData(activityData, createTime, serverTime);
|
||||
|
||||
let playerLunchRecords: ActivityDailyMealModelType[] = await ActivityDailyMealModel.findData(serverId, activityData.activityId, roleId, DAILY_MEAL_TYPE.LUNCH, playerData.roundIndex);
|
||||
let playerDinnerRecords: ActivityDailyMealModelType[] = await ActivityDailyMealModel.findData(serverId, activityData.activityId, roleId, DAILY_MEAL_TYPE.DINNER, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerLunchRecords.concat(playerDinnerRecords));
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyMealData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyMealData(activityData, createTime, serverTime);
|
||||
|
||||
let playerLunchRecords: ActivityDailyMealModelType[] = await ActivityDailyMealModel.findData(serverId, activityData.activityId, roleId, DAILY_MEAL_TYPE.LUNCH, playerData.roundIndex);
|
||||
let playerDinnerRecords: ActivityDailyMealModelType[] = await ActivityDailyMealModel.findData(serverId, activityData.activityId, roleId, DAILY_MEAL_TYPE.DINNER, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerLunchRecords.concat(playerDinnerRecords));
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,133 +1,133 @@
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from '../../consts';
|
||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityDailyRMBGiftsModel, ActivityDailyRMBGiftsModelType } from '../../db/ActivityDailyRMBGifts';
|
||||
import { DailyRMBGiftsData } from '../../domain/activityField/dailyRMBGiftsField';
|
||||
import moment = require('moment');
|
||||
import { RewardParam } from '../../domain/activityField/rewardField';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function dailyRMBGiftsActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_RMB_GIFTS);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerData = await getPlayerDailyRMBGiftsData(activityData.activityId, serverId, roleId);
|
||||
return playerData
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyRMBGiftsData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyRMBGiftsData(activityData, createTime, serverTime);
|
||||
let playerRecords: ActivityDailyRMBGiftsModelType[] = await ActivityDailyRMBGiftsModel.findBuyRecord(serverId, activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex);
|
||||
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 结算购买礼包的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeDailyRMBGiftsReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (activityData.type !== ACTIVITY_TYPE.DAILY_RMB_GIFTS) {
|
||||
return {
|
||||
code: STATUS.ACTIVITY_TYPE_ERROR,
|
||||
}
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyRMBGiftsData(activityData, createTime, serverTime);
|
||||
let bigGiftProductID = playerData.productID;
|
||||
if (bigGiftProductID == productID) {//一次性购买7天礼包
|
||||
let hasBoughtTomorrow = await ActivityDailyRMBGiftsModel.checkHasBought(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex + 1);
|
||||
if(hasBoughtTomorrow) return STATUS.ORDER_CANNOT_BUY;
|
||||
|
||||
let playerRecord: ActivityDailyRMBGiftsModelType = await ActivityDailyRMBGiftsModel.findRecord(serverId, activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex);
|
||||
playerData.setPlayerRecords(playerRecord?[playerRecord]: []);
|
||||
if (playerData.shouldbuyNextDay()) {//今天已经购买过其他奖励
|
||||
playerData.todayIndex ++;
|
||||
}
|
||||
|
||||
for (let i = 0; i < playerData.day; i++) {
|
||||
let todayIndex = playerData.todayIndex + i;
|
||||
await ActivityDailyRMBGiftsModel.buyRecord(serverId, activityId, roleId, moment(playerData.beginTime).toDate(), todayIndex, true);
|
||||
}
|
||||
let endTime = moment(playerData.endTime).add(playerData.day, 'd').toDate()
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign({}, { item: { endTime, receiveCount: 0 } })
|
||||
}
|
||||
} else {
|
||||
let item = playerData.findProduct(productID);
|
||||
if (!item) return STATUS.ACTIVITY_NO_PRODUCT;
|
||||
let hasReceived = await ActivityDailyRMBGiftsModel.checkHasReceive(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex, item.id);
|
||||
if(hasReceived) {
|
||||
return STATUS.ORDER_CANNOT_BUY
|
||||
}
|
||||
|
||||
let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.DAILY_RMB_GIFT)
|
||||
await ActivityDailyRMBGiftsModel.receiveRecord(serverId, activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex, [item.id]);
|
||||
item.isReceive = true;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检查每日特惠是否可以购买
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function checkDailyRMBGifts(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyRMBGiftsData(activityData, createTime, serverTime);
|
||||
let bigGiftProductID = playerData.productID;
|
||||
if (bigGiftProductID == productID) {//一次性购买7天礼包
|
||||
let hasBoughtTomorrow = await ActivityDailyRMBGiftsModel.checkHasBought(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex + 1);
|
||||
return !hasBoughtTomorrow;
|
||||
} else {
|
||||
let item = playerData.findProduct(productID);
|
||||
if (!item) return false
|
||||
let hasReceived = await ActivityDailyRMBGiftsModel.checkHasReceive(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex, item.id);
|
||||
return !hasReceived;
|
||||
}
|
||||
}
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from '@consts';
|
||||
import { ActivityModel, ActivityModelType } from '@db/Activity';
|
||||
import { ActivityDailyRMBGiftsModel, ActivityDailyRMBGiftsModelType } from '@db/ActivityDailyRMBGifts';
|
||||
import { DailyRMBGiftsData } from '@domain/activityField/dailyRMBGiftsField';
|
||||
import moment = require('moment');
|
||||
import { RewardParam } from '@domain/activityField/rewardField';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function dailyRMBGiftsActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_RMB_GIFTS);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerData = await getPlayerDailyRMBGiftsData(activityData.activityId, serverId, roleId);
|
||||
return playerData
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDailyRMBGiftsData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyRMBGiftsData(activityData, createTime, serverTime);
|
||||
let playerRecords: ActivityDailyRMBGiftsModelType[] = await ActivityDailyRMBGiftsModel.findBuyRecord(serverId, activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex);
|
||||
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 结算购买礼包的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeDailyRMBGiftsReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (activityData.type !== ACTIVITY_TYPE.DAILY_RMB_GIFTS) {
|
||||
return {
|
||||
code: STATUS.ACTIVITY_TYPE_ERROR,
|
||||
}
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyRMBGiftsData(activityData, createTime, serverTime);
|
||||
let bigGiftProductID = playerData.productID;
|
||||
if (bigGiftProductID == productID) {//一次性购买7天礼包
|
||||
let hasBoughtTomorrow = await ActivityDailyRMBGiftsModel.checkHasBought(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex + 1);
|
||||
if(hasBoughtTomorrow) return STATUS.ORDER_CANNOT_BUY;
|
||||
|
||||
let playerRecord: ActivityDailyRMBGiftsModelType = await ActivityDailyRMBGiftsModel.findRecord(serverId, activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex);
|
||||
playerData.setPlayerRecords(playerRecord?[playerRecord]: []);
|
||||
if (playerData.shouldbuyNextDay()) {//今天已经购买过其他奖励
|
||||
playerData.todayIndex ++;
|
||||
}
|
||||
|
||||
for (let i = 0; i < playerData.day; i++) {
|
||||
let todayIndex = playerData.todayIndex + i;
|
||||
await ActivityDailyRMBGiftsModel.buyRecord(serverId, activityId, roleId, moment(playerData.beginTime).toDate(), todayIndex, true);
|
||||
}
|
||||
let endTime = moment(playerData.endTime).add(playerData.day, 'd').toDate()
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign({}, { item: { endTime, receiveCount: 0 } })
|
||||
}
|
||||
} else {
|
||||
let item = playerData.findProduct(productID);
|
||||
if (!item) return STATUS.ACTIVITY_NO_PRODUCT;
|
||||
let hasReceived = await ActivityDailyRMBGiftsModel.checkHasReceive(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex, item.id);
|
||||
if(hasReceived) {
|
||||
return STATUS.ORDER_CANNOT_BUY
|
||||
}
|
||||
|
||||
let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.DAILY_RMB_GIFT)
|
||||
await ActivityDailyRMBGiftsModel.receiveRecord(serverId, activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex, [item.id]);
|
||||
item.isReceive = true;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检查每日特惠是否可以购买
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function checkDailyRMBGifts(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DailyRMBGiftsData(activityData, createTime, serverTime);
|
||||
let bigGiftProductID = playerData.productID;
|
||||
if (bigGiftProductID == productID) {//一次性购买7天礼包
|
||||
let hasBoughtTomorrow = await ActivityDailyRMBGiftsModel.checkHasBought(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex + 1);
|
||||
return !hasBoughtTomorrow;
|
||||
} else {
|
||||
let item = playerData.findProduct(productID);
|
||||
if (!item) return false
|
||||
let hasReceived = await ActivityDailyRMBGiftsModel.checkHasReceive(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex, item.id);
|
||||
return !hasReceived;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
import { ActivityDragonBoatModel } from "../../db/ActivityDragonBoat";
|
||||
import { DragonBoatData } from "../../domain/activityField/dragonBoatField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDragonBoatData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DragonBoatData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityDragonBoatModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDragonBoatDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerDragonBoatData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
import { ActivityDragonBoatModel } from "@db/ActivityDragonBoat";
|
||||
import { DragonBoatData } from "@domain/activityField/dragonBoatField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDragonBoatData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new DragonBoatData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityDragonBoatModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerDragonBoatDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerDragonBoatData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
import { ActivityEntertainRecModel } from "../../db/ActivityEntertainRec";
|
||||
import { EntertainData } from "../../domain/activityField/entertainField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerEntertainData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new EntertainData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityEntertainRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerEntertainDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerEntertainData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
import { ActivityEntertainRecModel } from "@db/ActivityEntertainRec";
|
||||
import { EntertainData } from "@domain/activityField/entertainField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerEntertainData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new EntertainData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityEntertainRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerEntertainDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerEntertainData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,88 +1,88 @@
|
||||
import { ACTIVITY_TYPE } from '../../consts';
|
||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityFirstGiftModel, ActivityFirstGiftModelType } from '../../db/ActivityFirstGift';
|
||||
import { RoleModel, RoleType } from '../../db/Role';
|
||||
import { ServerlistModel } from '../../db/Serverlist';
|
||||
import { FirstGiftData } from '../../domain/activityField/firstGiftField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
// /**
|
||||
// * 获取活动数据
|
||||
// *
|
||||
// * @param {number} serverId 区Id
|
||||
// * @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
// * @param {string} roleId 角色Id
|
||||
// *
|
||||
// */
|
||||
|
||||
// export async function firstGiftActivity(serverId: number, roleId: string) {
|
||||
// let { activityGroupId } = await ServerlistModel.findByServerId(serverId);
|
||||
// let activityArray: ActivityModelType[] = await ActivityModel.findActivityByType(activityGroupId, ACTIVITY_TYPE.FIRST_GIFT, 1)
|
||||
|
||||
// if (activityArray.length == 0) {
|
||||
// return null;
|
||||
// }
|
||||
// let activityData = activityArray[0];
|
||||
// let playerRecord: ActivityFirstGiftModelType = await ActivityFirstGiftModel.findData(activityData.activityId, roleId);
|
||||
// if (!playerRecord || playerRecord.isOver) {
|
||||
// return null;
|
||||
// }
|
||||
|
||||
// let { createTime } = await RoleModel.findByRoleId(roleId);
|
||||
// let playerData = new FirstGiftData(activityData, createTime);
|
||||
// playerData.setPlayerRecords(playerRecord);
|
||||
// return playerData;
|
||||
// }
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerFirstGiftData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord = await ActivityFirstGiftModel.findData(activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new FirstGiftData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取可显示的数据
|
||||
* @param activityId
|
||||
* @param serverId
|
||||
* @param roleId
|
||||
* @returns
|
||||
*/
|
||||
export async function getPlayerFirstGiftDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerFirstGiftData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录玩家首充记录
|
||||
* @param {RoleType} role 玩家数据
|
||||
* @param {number} serverId 区id
|
||||
*/
|
||||
export async function recordFirstGift(role: RoleType, serverId: number) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.FIRST_GIFT);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
for (let obj of activities) {
|
||||
let playerData = new FirstGiftData(obj, role.createTime, serverTime);
|
||||
for(let { pageIndex, targetMoney } of playerData.list) {
|
||||
if(role.totalPay >= targetMoney) {
|
||||
await ActivityFirstGiftModel.begin(obj.activityId, role.roleId, pageIndex );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
import { ACTIVITY_TYPE } from '@consts';
|
||||
import { ActivityModel, ActivityModelType } from '@db/Activity';
|
||||
import { ActivityFirstGiftModel, ActivityFirstGiftModelType } from '@db/ActivityFirstGift';
|
||||
import { RoleModel, RoleType } from '@db/Role';
|
||||
import { ServerlistModel } from '@db/Serverlist';
|
||||
import { FirstGiftData } from '@domain/activityField/firstGiftField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
// /**
|
||||
// * 获取活动数据
|
||||
// *
|
||||
// * @param {number} serverId 区Id
|
||||
// * @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
// * @param {string} roleId 角色Id
|
||||
// *
|
||||
// */
|
||||
|
||||
// export async function firstGiftActivity(serverId: number, roleId: string) {
|
||||
// let { activityGroupId } = await ServerlistModel.findByServerId(serverId);
|
||||
// let activityArray: ActivityModelType[] = await ActivityModel.findActivityByType(activityGroupId, ACTIVITY_TYPE.FIRST_GIFT, 1)
|
||||
|
||||
// if (activityArray.length == 0) {
|
||||
// return null;
|
||||
// }
|
||||
// let activityData = activityArray[0];
|
||||
// let playerRecord: ActivityFirstGiftModelType = await ActivityFirstGiftModel.findData(activityData.activityId, roleId);
|
||||
// if (!playerRecord || playerRecord.isOver) {
|
||||
// return null;
|
||||
// }
|
||||
|
||||
// let { createTime } = await RoleModel.findByRoleId(roleId);
|
||||
// let playerData = new FirstGiftData(activityData, createTime);
|
||||
// playerData.setPlayerRecords(playerRecord);
|
||||
// return playerData;
|
||||
// }
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerFirstGiftData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord = await ActivityFirstGiftModel.findData(activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new FirstGiftData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取可显示的数据
|
||||
* @param activityId
|
||||
* @param serverId
|
||||
* @param roleId
|
||||
* @returns
|
||||
*/
|
||||
export async function getPlayerFirstGiftDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerFirstGiftData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录玩家首充记录
|
||||
* @param {RoleType} role 玩家数据
|
||||
* @param {number} serverId 区id
|
||||
*/
|
||||
export async function recordFirstGift(role: RoleType, serverId: number) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.FIRST_GIFT);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
for (let obj of activities) {
|
||||
let playerData = new FirstGiftData(obj, role.createTime, serverTime);
|
||||
for(let { pageIndex, targetMoney } of playerData.list) {
|
||||
if(role.totalPay >= targetMoney) {
|
||||
await ActivityFirstGiftModel.begin(obj.activityId, role.roleId, pageIndex );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,42 +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('|')
|
||||
}
|
||||
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('|')
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,321 +1,321 @@
|
||||
import { GIFT_PACKAGE_TYPE, ACTIVITY_RESOURCES_TYPE, ITEM_CHANGE_REASON, STATUS } from '../../consts';
|
||||
import { gameData } from '../../pubUtils/data';
|
||||
import { addItems } from '../role/rewardService';
|
||||
import { RewardParam } from '../../domain/activityField/rewardField';
|
||||
import { CreateHeroParam } from '../../domain/roleField/hero';
|
||||
import { DicGiftPackage } from '../../pubUtils/dictionary/DicGiftPackage';
|
||||
import { ItemInter, RewardInter } from '../../pubUtils/interface';
|
||||
import { decodeArrayListStr, getRandEelmWithWeight, resResult } from '../../pubUtils/util';
|
||||
import { createHeroes } from '../role/createHero';
|
||||
import { GuildModel } from '../../db/Guild';
|
||||
import { pushGuildInfoUpdate } from '../guildService';
|
||||
import { combineItems } from '../role/util';
|
||||
import { recordGuildFund } from './timeLimitRankService';
|
||||
import { filterGoods, isGoodsHidden, isHeroHidden } from '../dataService';
|
||||
import { DicGiftPackagePlan } from '../../pubUtils/dictionary/DicGiftPackagePlan';
|
||||
import { Floor, GiftPackageFloorModel, GiftPackageFloorType } from '../../db/GiftPackageFloor';
|
||||
import { isNumber } from 'underscore';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 兑换礼包
|
||||
* @param giftID 礼包id
|
||||
* @param roleId 角色id
|
||||
* @param roleName 角色名称
|
||||
* @param giftCount 一共消耗多少个礼包
|
||||
* @param sid
|
||||
*/
|
||||
export async function useGiftPackage(roleId: string, roleName: string, sid: string, serverId: number, guildCode: string, giftID: number, selected: Array<number> = [], giftCount: number) {
|
||||
console.log("bbbbbbbb", giftID, selected)
|
||||
let result: { goods: {id: number, count: number, seqId?: number|string, isBag?: boolean}[], addHeros: any[]} = { goods: [], addHeros: [] }
|
||||
let giftPackageData = gameData.giftPackage.get(giftID);
|
||||
if (!giftPackageData) {
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
console.log('dddddddddddddd', giftID, JSON.stringify(giftPackageData))
|
||||
let giftType = giftPackageData.type;//礼包类型
|
||||
let dicGiftPackagePlan = gameData.giftPackagePlan.get(giftPackageData.id)||[];
|
||||
|
||||
switch (giftType) {
|
||||
case GIFT_PACKAGE_TYPE.ALL://全部
|
||||
{
|
||||
let allReward = [];
|
||||
for (let obj of dicGiftPackagePlan) {
|
||||
allReward.push({ type: obj.contentType, id: obj.content, count: obj.count * giftCount });
|
||||
}
|
||||
|
||||
result = await addReward(roleId, roleName, sid, serverId, allReward, ITEM_CHANGE_REASON.USE_GIFT_PACKAGE);
|
||||
break;
|
||||
}
|
||||
case GIFT_PACKAGE_TYPE.SELECTED_X://手选
|
||||
{
|
||||
let count = giftPackageData.count;//选择个数
|
||||
if (selected.length != count) {
|
||||
break;
|
||||
}
|
||||
let pool = dicGiftPackagePlan.filter(cur => cur.contentType == 1? !isHeroHidden(cur.content): !isGoodsHidden(cur.content));
|
||||
let selectedReward = getSelectedReward(pool, selected)
|
||||
let allReward: { type: number, id: number, count: number }[] = [];
|
||||
for (let obj of selectedReward) {
|
||||
allReward.push({ type: obj.type, id: obj.id, count: obj.count * giftCount });
|
||||
}
|
||||
let gids = allReward.filter(cur => cur.type == 2).map(cur => cur.id);
|
||||
if(gids.length > 0 && isGoodsHidden(...gids)) return resResult(STATUS.ITEM_IS_HIDDEN);
|
||||
let hids = allReward.filter(cur => cur.type == 1).map(cur => cur.id);
|
||||
if(hids.length > 0 && isHeroHidden(...gids)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
result = await addReward(roleId, roleName, sid, serverId, allReward, ITEM_CHANGE_REASON.USE_GIFT_PACKAGE);
|
||||
break;
|
||||
}
|
||||
case GIFT_PACKAGE_TYPE.RANDOM_X://随机
|
||||
{
|
||||
let count = giftPackageData.count;//随机个数
|
||||
let pool = dicGiftPackagePlan.filter(cur => cur.contentType == 1? !isHeroHidden(cur.content): !isGoodsHidden(cur.content));
|
||||
if(pool.length <= 0) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let allReward: { type: number, id: number, count: number }[] = [];
|
||||
let giftPackage = { giftPackageId: giftID };
|
||||
const floorPlans = groupByFloorId(pool);
|
||||
let dropHistory = (floorPlans && Object.keys(floorPlans).length > 0) ? await GiftPackageFloorModel.findByGiftPackageId(roleId, giftID): { floors: [], getSum: 0, allSum: 0 };
|
||||
for (let i = 0; i < giftCount; i++) {
|
||||
let { rewards, floors } = await randomSelectedData(dropHistory, pool, roleId, giftID, count);
|
||||
allReward.push(...rewards);
|
||||
giftPackage['floors'] = floors;
|
||||
}
|
||||
await GiftPackageFloorModel.updateByGiftPackageId(roleId, giftID, {
|
||||
floors: dropHistory.floors, getSum: dropHistory.getSum, allSum: dropHistory.allSum
|
||||
});
|
||||
result = await addReward(roleId, roleName, sid, serverId, allReward, ITEM_CHANGE_REASON.USE_GIFT_PACKAGE);
|
||||
Object.assign(result, { giftPackage });
|
||||
break;
|
||||
}
|
||||
case GIFT_PACKAGE_TYPE.GUILD_FUND: // 军团资金
|
||||
{
|
||||
console.log('ccccc',guildCode, giftPackageData.count, giftCount)
|
||||
if(!guildCode) return resResult(STATUS.ITEM_CANNOT_RECEIVE_NO_GUILD);
|
||||
const guild = await GuildModel.updateInfo(guildCode, {}, { fund: giftPackageData.count * giftCount });
|
||||
await pushGuildInfoUpdate(guildCode, { fund: guild.fund });
|
||||
recordGuildFund(serverId, guild, giftPackageData.count * giftCount);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
|
||||
//结算奖励的内容
|
||||
export async function addReward(roleId: string, roleName: string, sid: string, serverId: number, reward: Array<RewardParam>, reason: number) {
|
||||
let giftReward = rewardItemData(reward);
|
||||
let goodArray = giftReward.goods;
|
||||
let heroArray = giftReward.heroes;
|
||||
|
||||
//兑换物品
|
||||
let goods = await addItems(roleId, roleName, sid, goodArray, reason)
|
||||
let addHeros = [];
|
||||
if (heroArray.length > 0) {
|
||||
let heroResult = await createHeroes(roleId, roleName, sid, serverId, heroArray);
|
||||
goods = goods.concat(heroResult.goods)
|
||||
addHeros = addHeros.concat(heroResult.heroes);
|
||||
}
|
||||
|
||||
return { goods: combineItems(goods), addHeros }
|
||||
}
|
||||
|
||||
//表中的奖励数据(包括礼包)转换成具体对应奖励物品的实例
|
||||
export function rewardItemData(reward: Array<RewardParam>) {
|
||||
let goods: Array<RewardInter> = [];
|
||||
let heroes: Array<CreateHeroParam> = [];
|
||||
for (let obj of reward) {
|
||||
switch (obj.type) {
|
||||
case ACTIVITY_RESOURCES_TYPE.HERO:
|
||||
heroes.push({ hid: obj.id, count: obj.count })
|
||||
break;
|
||||
case ACTIVITY_RESOURCES_TYPE.GOODS:
|
||||
goods.push({ id: obj.id, count: obj.count, expireTime: obj.expireTime })
|
||||
break;
|
||||
case ACTIVITY_RESOURCES_TYPE.GIFTPACKAGE://配置成礼包会立刻兑换,配置成物品会把礼包放入背包中
|
||||
let goodData = gameData.goods.get(obj.id);//礼包物品
|
||||
let giftPackageData = gameData.giftPackage.get(goodData.gift);//礼包数据
|
||||
let giftReward = rewardItemData(giftPackageData.reward)
|
||||
goods = goods.concat(giftReward.goods)
|
||||
heroes = heroes.concat(giftReward.heroes)
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return { goods, heroes }
|
||||
}
|
||||
|
||||
export function getSelectedReward(plans: DicGiftPackagePlan[], selected: Array<number>): Array<RewardParam> {
|
||||
|
||||
let selectedReward: Array<RewardParam> = [];
|
||||
for (let i = 0; i < selected.length; i++) {
|
||||
let index = selected[i];
|
||||
if (plans.length > index) {
|
||||
let { contentType, content, count } = plans[index];
|
||||
selectedReward.push({ type: contentType, id: content, count });
|
||||
}
|
||||
}
|
||||
return selectedReward;
|
||||
}
|
||||
|
||||
// 根据是否触发保底,更新抽取次数
|
||||
function updateFloorCount(floors: Floor[], maxQaulity: number, isTrigger: boolean) {
|
||||
for (let floor of floors) {
|
||||
if (!isTrigger) {
|
||||
floor.count++;
|
||||
} else {
|
||||
if (floor.quality <= maxQaulity) {
|
||||
floor.count = 0;
|
||||
} else {
|
||||
floor.count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return floors;
|
||||
}
|
||||
|
||||
// 将随机池子根据保底 id 进行分组
|
||||
function groupByFloorId(plans: DicGiftPackagePlan[]): { [key: number]: DicGiftPackagePlan[] } {
|
||||
return plans.reduce((acc, cur) => {
|
||||
if (cur.floorId !== 0) {
|
||||
if (!acc[cur.floorId]) acc[cur.floorId] = [];
|
||||
acc[cur.floorId].push(cur);
|
||||
}
|
||||
return acc;
|
||||
}, {} as { [key: number]: DicGiftPackagePlan[] });
|
||||
}
|
||||
|
||||
// 初始化用户某个礼包的保底数据
|
||||
async function initFloorData(floors: Floor[], floorPlans: { [key: number]: DicGiftPackagePlan[] }) {
|
||||
for (let floorId in floorPlans) {
|
||||
let hasFloorFlag = false;
|
||||
for (let floor of floors) {
|
||||
if (floor.id === parseInt(floorId)) {
|
||||
hasFloorFlag = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (!hasFloorFlag) {
|
||||
floors.push({ id: parseInt(floorId), count: 0, quality: gameData.giftPackageFloor.get(parseInt(floorId)).quality });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function randomSelectedData(dropHistory: {floors: Floor[], getSum: number, allSum: number }, pool: DicGiftPackagePlan[], roleId: string, giftPackageId: number, count: number) {
|
||||
let rewards: RewardParam[] = [];
|
||||
const floorPlans = groupByFloorId(pool);
|
||||
let { floors = [], getSum = 0, allSum = 0 } = dropHistory;
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
let randResult = getRandEelmWithWeight(pool)?.dic;
|
||||
if (!randResult) continue;
|
||||
// 如果没有保底池子,直接返回
|
||||
if (!floorPlans || Object.keys(floorPlans).length === 0) {
|
||||
rewards.push({ type: randResult.contentType, id: randResult.content, count: randResult.count });
|
||||
continue;
|
||||
}
|
||||
|
||||
initFloorData(floors, floorPlans);
|
||||
|
||||
// 检查随机结果的 id 是否在 floorPlans 中,是的话抽中保底
|
||||
let flag = false;
|
||||
for (let floorId in floorPlans) {
|
||||
if (floorPlans[floorId].findIndex(cur => cur.id === randResult.id) !== -1) {
|
||||
flag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否达到了保底次数,并且记录最大品质的 floorId
|
||||
let maxQaulityFloorId = 0; // 最大品质的 floorId
|
||||
let maxQaulity = 0;
|
||||
for (let floor of floors) {
|
||||
if (floor.count + 1 >= gameData.giftPackageFloor.get(floor.id).times) {
|
||||
flag = true;
|
||||
if (gameData.giftPackageFloor.get(floor.id).quality > maxQaulity) {
|
||||
maxQaulityFloorId = floor.id;
|
||||
maxQaulity = gameData.giftPackageFloor.get(floor.id).quality;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 更新抽取次数,确定要返回的物品
|
||||
if (flag && maxQaulityFloorId == 0) { // 抽到了保底物品
|
||||
const quality = gameData.giftPackageFloor.get(randResult.floorId).quality;
|
||||
rewards.push({ type: randResult.contentType, id: randResult.content, count: randResult.count });
|
||||
updateFloorCount(floors, quality, true);
|
||||
getSum++;
|
||||
console.log('got floorId a: ', randResult.floorId, quality);
|
||||
} else if (flag && maxQaulityFloorId > 0) { // 次数保底
|
||||
let floorResult = getRandEelmWithWeight(floorPlans[maxQaulityFloorId])?.dic;
|
||||
if (!floorResult) continue;
|
||||
rewards.push({ type: floorResult.contentType, id: floorResult.content, count: floorResult.count });
|
||||
updateFloorCount(floors, maxQaulity, true);
|
||||
getSum++;
|
||||
console.log('got floorId b: ', maxQaulityFloorId, maxQaulity);
|
||||
} else { // 未达到保底次数
|
||||
rewards.push({ type: randResult.contentType, id: randResult.content, count: randResult.count });
|
||||
updateFloorCount(floors, 0, false);
|
||||
console.log('got floorId c: ', randResult.floorId, 0);
|
||||
}
|
||||
allSum++;
|
||||
}
|
||||
|
||||
let result;
|
||||
result = Object.assign({}, { rewards })
|
||||
if(floorPlans && Object.keys(floorPlans).length > 0) {
|
||||
dropHistory.floors = floors;
|
||||
dropHistory.getSum = getSum;
|
||||
dropHistory.allSum = allSum;
|
||||
Object.assign(result, { giftPackageId, floors });
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//数据格式转换'类型&id&数量|类型&id&数量|' ->> Array<RewardParam> 活动奖励
|
||||
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;
|
||||
}
|
||||
result.push({ type: parseInt(type), id: parseInt(id), count: parseInt(count) });
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
//数据格式转换'类型&id&数量|类型&id&数量|' ->> Array<ItemInter> 资源消耗
|
||||
export function stringToConsumeParam(...rewardStrs: string[]) {
|
||||
let result = new Array<{ type: number, id: number, count: number }>();
|
||||
for(let rewardStr of rewardStrs) {
|
||||
if(!rewardStr) continue;
|
||||
let decodeArr = decodeArrayListStr(rewardStr);
|
||||
for (let [type, id, count] of decodeArr) {
|
||||
if (isNaN(parseInt(type)) || isNaN(parseInt(id)) || isNaN(parseInt(count))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({ type: parseInt(type), id: parseInt(id), count: parseInt(count) });
|
||||
}
|
||||
}
|
||||
return combineItems(result);
|
||||
}
|
||||
|
||||
//数据格式转换'id&数量|id&数量|' ->> Array<RewardInter> 老资源格式
|
||||
export function stringToRewardInter(rewardStr: string): Array<RewardInter> {
|
||||
let result = new Array<{ id: number, count: number }>();
|
||||
if (!rewardStr) return result;
|
||||
let decodeArr = decodeArrayListStr(rewardStr);
|
||||
for (let [type, id, count] of decodeArr) {
|
||||
if (isNaN(parseInt(id)) || isNaN(parseInt(count))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({ id: parseInt(id), count: parseInt(count) });
|
||||
}
|
||||
return result
|
||||
}
|
||||
import { GIFT_PACKAGE_TYPE, ACTIVITY_RESOURCES_TYPE, ITEM_CHANGE_REASON, STATUS } from '@consts';
|
||||
import { gameData } from '@pubUtils/data';
|
||||
import { addItems } from '../role/rewardService';
|
||||
import { RewardParam } from '@domain/activityField/rewardField';
|
||||
import { CreateHeroParam } from '@domain/roleField/hero';
|
||||
import { DicGiftPackage } from '@pubUtils/dictionary/DicGiftPackage';
|
||||
import { ItemInter, RewardInter } from '@pubUtils/interface';
|
||||
import { decodeArrayListStr, getRandEelmWithWeight, resResult } from '@pubUtils/util';
|
||||
import { createHeroes } from '../role/createHero';
|
||||
import { GuildModel } from '@db/Guild';
|
||||
import { pushGuildInfoUpdate } from '../guildService';
|
||||
import { combineItems } from '../role/util';
|
||||
import { recordGuildFund } from './timeLimitRankService';
|
||||
import { filterGoods, isGoodsHidden, isHeroHidden } from '../dataService';
|
||||
import { DicGiftPackagePlan } from '@pubUtils/dictionary/DicGiftPackagePlan';
|
||||
import { Floor, GiftPackageFloorModel, GiftPackageFloorType } from '@db/GiftPackageFloor';
|
||||
import { isNumber } from 'underscore';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 兑换礼包
|
||||
* @param giftID 礼包id
|
||||
* @param roleId 角色id
|
||||
* @param roleName 角色名称
|
||||
* @param giftCount 一共消耗多少个礼包
|
||||
* @param sid
|
||||
*/
|
||||
export async function useGiftPackage(roleId: string, roleName: string, sid: string, serverId: number, guildCode: string, giftID: number, selected: Array<number> = [], giftCount: number) {
|
||||
console.log("bbbbbbbb", giftID, selected)
|
||||
let result: { goods: {id: number, count: number, seqId?: number|string, isBag?: boolean}[], addHeros: any[]} = { goods: [], addHeros: [] }
|
||||
let giftPackageData = gameData.giftPackage.get(giftID);
|
||||
if (!giftPackageData) {
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
console.log('dddddddddddddd', giftID, JSON.stringify(giftPackageData))
|
||||
let giftType = giftPackageData.type;//礼包类型
|
||||
let dicGiftPackagePlan = gameData.giftPackagePlan.get(giftPackageData.id)||[];
|
||||
|
||||
switch (giftType) {
|
||||
case GIFT_PACKAGE_TYPE.ALL://全部
|
||||
{
|
||||
let allReward = [];
|
||||
for (let obj of dicGiftPackagePlan) {
|
||||
allReward.push({ type: obj.contentType, id: obj.content, count: obj.count * giftCount });
|
||||
}
|
||||
|
||||
result = await addReward(roleId, roleName, sid, serverId, allReward, ITEM_CHANGE_REASON.USE_GIFT_PACKAGE);
|
||||
break;
|
||||
}
|
||||
case GIFT_PACKAGE_TYPE.SELECTED_X://手选
|
||||
{
|
||||
let count = giftPackageData.count;//选择个数
|
||||
if (selected.length != count) {
|
||||
break;
|
||||
}
|
||||
let pool = dicGiftPackagePlan.filter(cur => cur.contentType == 1? !isHeroHidden(cur.content): !isGoodsHidden(cur.content));
|
||||
let selectedReward = getSelectedReward(pool, selected)
|
||||
let allReward: { type: number, id: number, count: number }[] = [];
|
||||
for (let obj of selectedReward) {
|
||||
allReward.push({ type: obj.type, id: obj.id, count: obj.count * giftCount });
|
||||
}
|
||||
let gids = allReward.filter(cur => cur.type == 2).map(cur => cur.id);
|
||||
if(gids.length > 0 && isGoodsHidden(...gids)) return resResult(STATUS.ITEM_IS_HIDDEN);
|
||||
let hids = allReward.filter(cur => cur.type == 1).map(cur => cur.id);
|
||||
if(hids.length > 0 && isHeroHidden(...gids)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
result = await addReward(roleId, roleName, sid, serverId, allReward, ITEM_CHANGE_REASON.USE_GIFT_PACKAGE);
|
||||
break;
|
||||
}
|
||||
case GIFT_PACKAGE_TYPE.RANDOM_X://随机
|
||||
{
|
||||
let count = giftPackageData.count;//随机个数
|
||||
let pool = dicGiftPackagePlan.filter(cur => cur.contentType == 1? !isHeroHidden(cur.content): !isGoodsHidden(cur.content));
|
||||
if(pool.length <= 0) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let allReward: { type: number, id: number, count: number }[] = [];
|
||||
let giftPackage = { giftPackageId: giftID };
|
||||
const floorPlans = groupByFloorId(pool);
|
||||
let dropHistory = (floorPlans && Object.keys(floorPlans).length > 0) ? await GiftPackageFloorModel.findByGiftPackageId(roleId, giftID): { floors: [], getSum: 0, allSum: 0 };
|
||||
for (let i = 0; i < giftCount; i++) {
|
||||
let { rewards, floors } = await randomSelectedData(dropHistory, pool, roleId, giftID, count);
|
||||
allReward.push(...rewards);
|
||||
giftPackage['floors'] = floors;
|
||||
}
|
||||
await GiftPackageFloorModel.updateByGiftPackageId(roleId, giftID, {
|
||||
floors: dropHistory.floors, getSum: dropHistory.getSum, allSum: dropHistory.allSum
|
||||
});
|
||||
result = await addReward(roleId, roleName, sid, serverId, allReward, ITEM_CHANGE_REASON.USE_GIFT_PACKAGE);
|
||||
Object.assign(result, { giftPackage });
|
||||
break;
|
||||
}
|
||||
case GIFT_PACKAGE_TYPE.GUILD_FUND: // 军团资金
|
||||
{
|
||||
console.log('ccccc',guildCode, giftPackageData.count, giftCount)
|
||||
if(!guildCode) return resResult(STATUS.ITEM_CANNOT_RECEIVE_NO_GUILD);
|
||||
const guild = await GuildModel.updateInfo(guildCode, {}, { fund: giftPackageData.count * giftCount });
|
||||
await pushGuildInfoUpdate(guildCode, { fund: guild.fund });
|
||||
recordGuildFund(serverId, guild, giftPackageData.count * giftCount);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
|
||||
//结算奖励的内容
|
||||
export async function addReward(roleId: string, roleName: string, sid: string, serverId: number, reward: Array<RewardParam>, reason: number) {
|
||||
let giftReward = rewardItemData(reward);
|
||||
let goodArray = giftReward.goods;
|
||||
let heroArray = giftReward.heroes;
|
||||
|
||||
//兑换物品
|
||||
let goods = await addItems(roleId, roleName, sid, goodArray, reason)
|
||||
let addHeros = [];
|
||||
if (heroArray.length > 0) {
|
||||
let heroResult = await createHeroes(roleId, roleName, sid, serverId, heroArray);
|
||||
goods = goods.concat(heroResult.goods)
|
||||
addHeros = addHeros.concat(heroResult.heroes);
|
||||
}
|
||||
|
||||
return { goods: combineItems(goods), addHeros }
|
||||
}
|
||||
|
||||
//表中的奖励数据(包括礼包)转换成具体对应奖励物品的实例
|
||||
export function rewardItemData(reward: Array<RewardParam>) {
|
||||
let goods: Array<RewardInter> = [];
|
||||
let heroes: Array<CreateHeroParam> = [];
|
||||
for (let obj of reward) {
|
||||
switch (obj.type) {
|
||||
case ACTIVITY_RESOURCES_TYPE.HERO:
|
||||
heroes.push({ hid: obj.id, count: obj.count })
|
||||
break;
|
||||
case ACTIVITY_RESOURCES_TYPE.GOODS:
|
||||
goods.push({ id: obj.id, count: obj.count, expireTime: obj.expireTime })
|
||||
break;
|
||||
case ACTIVITY_RESOURCES_TYPE.GIFTPACKAGE://配置成礼包会立刻兑换,配置成物品会把礼包放入背包中
|
||||
let goodData = gameData.goods.get(obj.id);//礼包物品
|
||||
let giftPackageData = gameData.giftPackage.get(goodData.gift);//礼包数据
|
||||
let giftReward = rewardItemData(giftPackageData.reward)
|
||||
goods = goods.concat(giftReward.goods)
|
||||
heroes = heroes.concat(giftReward.heroes)
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return { goods, heroes }
|
||||
}
|
||||
|
||||
export function getSelectedReward(plans: DicGiftPackagePlan[], selected: Array<number>): Array<RewardParam> {
|
||||
|
||||
let selectedReward: Array<RewardParam> = [];
|
||||
for (let i = 0; i < selected.length; i++) {
|
||||
let index = selected[i];
|
||||
if (plans.length > index) {
|
||||
let { contentType, content, count } = plans[index];
|
||||
selectedReward.push({ type: contentType, id: content, count });
|
||||
}
|
||||
}
|
||||
return selectedReward;
|
||||
}
|
||||
|
||||
// 根据是否触发保底,更新抽取次数
|
||||
function updateFloorCount(floors: Floor[], maxQaulity: number, isTrigger: boolean) {
|
||||
for (let floor of floors) {
|
||||
if (!isTrigger) {
|
||||
floor.count++;
|
||||
} else {
|
||||
if (floor.quality <= maxQaulity) {
|
||||
floor.count = 0;
|
||||
} else {
|
||||
floor.count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return floors;
|
||||
}
|
||||
|
||||
// 将随机池子根据保底 id 进行分组
|
||||
function groupByFloorId(plans: DicGiftPackagePlan[]): { [key: number]: DicGiftPackagePlan[] } {
|
||||
return plans.reduce((acc, cur) => {
|
||||
if (cur.floorId !== 0) {
|
||||
if (!acc[cur.floorId]) acc[cur.floorId] = [];
|
||||
acc[cur.floorId].push(cur);
|
||||
}
|
||||
return acc;
|
||||
}, {} as { [key: number]: DicGiftPackagePlan[] });
|
||||
}
|
||||
|
||||
// 初始化用户某个礼包的保底数据
|
||||
async function initFloorData(floors: Floor[], floorPlans: { [key: number]: DicGiftPackagePlan[] }) {
|
||||
for (let floorId in floorPlans) {
|
||||
let hasFloorFlag = false;
|
||||
for (let floor of floors) {
|
||||
if (floor.id === parseInt(floorId)) {
|
||||
hasFloorFlag = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (!hasFloorFlag) {
|
||||
floors.push({ id: parseInt(floorId), count: 0, quality: gameData.giftPackageFloor.get(parseInt(floorId)).quality });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function randomSelectedData(dropHistory: {floors: Floor[], getSum: number, allSum: number }, pool: DicGiftPackagePlan[], roleId: string, giftPackageId: number, count: number) {
|
||||
let rewards: RewardParam[] = [];
|
||||
const floorPlans = groupByFloorId(pool);
|
||||
let { floors = [], getSum = 0, allSum = 0 } = dropHistory;
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
let randResult = getRandEelmWithWeight(pool)?.dic;
|
||||
if (!randResult) continue;
|
||||
// 如果没有保底池子,直接返回
|
||||
if (!floorPlans || Object.keys(floorPlans).length === 0) {
|
||||
rewards.push({ type: randResult.contentType, id: randResult.content, count: randResult.count });
|
||||
continue;
|
||||
}
|
||||
|
||||
initFloorData(floors, floorPlans);
|
||||
|
||||
// 检查随机结果的 id 是否在 floorPlans 中,是的话抽中保底
|
||||
let flag = false;
|
||||
for (let floorId in floorPlans) {
|
||||
if (floorPlans[floorId].findIndex(cur => cur.id === randResult.id) !== -1) {
|
||||
flag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否达到了保底次数,并且记录最大品质的 floorId
|
||||
let maxQaulityFloorId = 0; // 最大品质的 floorId
|
||||
let maxQaulity = 0;
|
||||
for (let floor of floors) {
|
||||
if (floor.count + 1 >= gameData.giftPackageFloor.get(floor.id).times) {
|
||||
flag = true;
|
||||
if (gameData.giftPackageFloor.get(floor.id).quality > maxQaulity) {
|
||||
maxQaulityFloorId = floor.id;
|
||||
maxQaulity = gameData.giftPackageFloor.get(floor.id).quality;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 更新抽取次数,确定要返回的物品
|
||||
if (flag && maxQaulityFloorId == 0) { // 抽到了保底物品
|
||||
const quality = gameData.giftPackageFloor.get(randResult.floorId).quality;
|
||||
rewards.push({ type: randResult.contentType, id: randResult.content, count: randResult.count });
|
||||
updateFloorCount(floors, quality, true);
|
||||
getSum++;
|
||||
console.log('got floorId a: ', randResult.floorId, quality);
|
||||
} else if (flag && maxQaulityFloorId > 0) { // 次数保底
|
||||
let floorResult = getRandEelmWithWeight(floorPlans[maxQaulityFloorId])?.dic;
|
||||
if (!floorResult) continue;
|
||||
rewards.push({ type: floorResult.contentType, id: floorResult.content, count: floorResult.count });
|
||||
updateFloorCount(floors, maxQaulity, true);
|
||||
getSum++;
|
||||
console.log('got floorId b: ', maxQaulityFloorId, maxQaulity);
|
||||
} else { // 未达到保底次数
|
||||
rewards.push({ type: randResult.contentType, id: randResult.content, count: randResult.count });
|
||||
updateFloorCount(floors, 0, false);
|
||||
console.log('got floorId c: ', randResult.floorId, 0);
|
||||
}
|
||||
allSum++;
|
||||
}
|
||||
|
||||
let result;
|
||||
result = Object.assign({}, { rewards })
|
||||
if(floorPlans && Object.keys(floorPlans).length > 0) {
|
||||
dropHistory.floors = floors;
|
||||
dropHistory.getSum = getSum;
|
||||
dropHistory.allSum = allSum;
|
||||
Object.assign(result, { giftPackageId, floors });
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//数据格式转换'类型&id&数量|类型&id&数量|' ->> Array<RewardParam> 活动奖励
|
||||
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;
|
||||
}
|
||||
result.push({ type: parseInt(type), id: parseInt(id), count: parseInt(count) });
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
//数据格式转换'类型&id&数量|类型&id&数量|' ->> Array<ItemInter> 资源消耗
|
||||
export function stringToConsumeParam(...rewardStrs: string[]) {
|
||||
let result = new Array<{ type: number, id: number, count: number }>();
|
||||
for(let rewardStr of rewardStrs) {
|
||||
if(!rewardStr) continue;
|
||||
let decodeArr = decodeArrayListStr(rewardStr);
|
||||
for (let [type, id, count] of decodeArr) {
|
||||
if (isNaN(parseInt(type)) || isNaN(parseInt(id)) || isNaN(parseInt(count))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({ type: parseInt(type), id: parseInt(id), count: parseInt(count) });
|
||||
}
|
||||
}
|
||||
return combineItems(result);
|
||||
}
|
||||
|
||||
//数据格式转换'id&数量|id&数量|' ->> Array<RewardInter> 老资源格式
|
||||
export function stringToRewardInter(rewardStr: string): Array<RewardInter> {
|
||||
let result = new Array<{ id: number, count: number }>();
|
||||
if (!rewardStr) return result;
|
||||
let decodeArr = decodeArrayListStr(rewardStr);
|
||||
for (let [type, id, count] of decodeArr) {
|
||||
if (isNaN(parseInt(id)) || isNaN(parseInt(count))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({ id: parseInt(id), count: parseInt(count) });
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -1,115 +1,115 @@
|
||||
import { ACTIVITY_TYPE, GROUP_SHOP_PRICE_STATUS, MAIL_TYPE, PUSH_ROUTE } from "../../consts";
|
||||
import { ActivityModel, ActivityModelType } from "../../db/Activity";
|
||||
import { ActivityGroupShopRecModel } from "../../db/ActivityGroupShopRec";
|
||||
import { ActivityGroupShopRefundModel, RefundRec } from "../../db/ActivityGroupShopRefund";
|
||||
import { ActivityGroupShopUserRecModel } from "../../db/ActivityGroupShopUserRec";
|
||||
import { GroupShopData } from "../../domain/activityField/groupShopField";
|
||||
import { gameData } from "../../pubUtils/data";
|
||||
import { RewardInter } from "../../pubUtils/interface";
|
||||
import { sendMailByContent } from "../mailService";
|
||||
import { sendMessageToGroupShopWithSuc } from "../pushService";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getGoldObject } from "../role/rewardService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getGroupShopData(activityId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
if(!activityData) return null
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
|
||||
let playerData = new GroupShopData(activityData, createTime, 0);
|
||||
let serverRecords = await ActivityGroupShopRecModel.findByActivity(activityId);
|
||||
playerData.setRecords(serverRecords);
|
||||
let playerRecords = await ActivityGroupShopUserRecModel.findByActivityAndRoleId(activityId, roleId);
|
||||
playerData.setPlayerRecord(playerRecords);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getGroupShopDataShow(activityId: number, roleId: string) {
|
||||
let playerData = await getGroupShopData(activityId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
export function getGroupShopPriceStatus(clientPrice: number, price: number) {
|
||||
if(clientPrice == price) return GROUP_SHOP_PRICE_STATUS.NORMAL;
|
||||
if(clientPrice < price) return GROUP_SHOP_PRICE_STATUS.NOT_ENOUGH;
|
||||
return GROUP_SHOP_PRICE_STATUS.OVER;
|
||||
}
|
||||
|
||||
export async function getGroupShopServerData(activityData: ActivityModelType) {
|
||||
let playerData = new GroupShopData(activityData, 0, 0);
|
||||
let serverRecords = await ActivityGroupShopRecModel.findByActivity(activityData.activityId);
|
||||
playerData.setRecords(serverRecords);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getGroupShopTimers(activity: ActivityModelType) {
|
||||
if(!activity) return [];
|
||||
let playerData = await getGroupShopServerData(activity);
|
||||
return playerData?.timer||[];
|
||||
}
|
||||
|
||||
export async function setGroupShopToSetSum(arr: { activityId: number, itemId: number, sum: number }[]) {
|
||||
console.log('###### setGroupShopToSetSum', JSON.stringify(arr));
|
||||
for(let { activityId, itemId, sum } of arr) {
|
||||
let serverRecord = await ActivityGroupShopRecModel.setSum(activityId, itemId, sum);
|
||||
if(serverRecord) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerData = new GroupShopData(activityData, 0, 0);
|
||||
playerData.setRecords([serverRecord]);
|
||||
|
||||
let item = playerData.findItemById(itemId);
|
||||
let nextDiscount = item.getCurDiscount();
|
||||
// 推送频道
|
||||
await sendMessageToGroupShopWithSuc(PUSH_ROUTE.GROUP_SHOP_UPDATE, { activityId, sum, itemId, curDiscount: nextDiscount });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function refundGroupShop(isDebug = false) {
|
||||
console.log('###### refundGroupShop')
|
||||
let activities = await ActivityModel.findActivityByType(ACTIVITY_TYPE.GROUP_SHOP);
|
||||
|
||||
for(let activityData of activities) {
|
||||
let hasRefund = await ActivityGroupShopRefundModel.check(activityData.activityId);
|
||||
if(!isDebug && hasRefund) continue;
|
||||
|
||||
let playerData = await getGroupShopServerData(activityData);
|
||||
if(!isDebug && playerData.endTime >= Date.now()) continue;
|
||||
|
||||
let items = playerData.items||[];
|
||||
let refundRecs: RefundRec[] = [];
|
||||
for(let item of items) {
|
||||
let curDiscount = item.getCurDiscount();
|
||||
let playerRecords = await ActivityGroupShopUserRecModel.findByPrice(activityData.activityId, item.itemId, item.getCurDiscount().price);
|
||||
for(let { roleId, records } of playerRecords) {
|
||||
let rewards: {id: number, count: number}[] = [], sumGold = 0;
|
||||
for(let { price, buyCnt } of records) {
|
||||
if(price <= curDiscount.price) continue;
|
||||
let diff = (price - curDiscount.price) * buyCnt;
|
||||
rewards.push(getGoldObject(diff));
|
||||
sumGold += diff;
|
||||
refundRecs.push({ roleId, itemId: item.itemId, diff });
|
||||
}
|
||||
let itemName = gameData.goods.get(item.id)?.name?? `${item.id}`;
|
||||
let resultDiscount = curDiscount.discount;
|
||||
await sendMailByContent(MAIL_TYPE.GROUP_SHOP_REFUND, roleId, { goods: rewards, params: [itemName, `${resultDiscount}`, `${sumGold}`] });
|
||||
}
|
||||
}
|
||||
console.log('###### refundGroupShop refund complete', activityData.activityId)
|
||||
await ActivityGroupShopRefundModel.refund(activityData.activityId, refundRecs);
|
||||
}
|
||||
}
|
||||
import { ACTIVITY_TYPE, GROUP_SHOP_PRICE_STATUS, MAIL_TYPE, PUSH_ROUTE } from "@consts";
|
||||
import { ActivityModel, ActivityModelType } from "@db/Activity";
|
||||
import { ActivityGroupShopRecModel } from "@db/ActivityGroupShopRec";
|
||||
import { ActivityGroupShopRefundModel, RefundRec } from "@db/ActivityGroupShopRefund";
|
||||
import { ActivityGroupShopUserRecModel } from "@db/ActivityGroupShopUserRec";
|
||||
import { GroupShopData } from "@domain/activityField/groupShopField";
|
||||
import { gameData } from "@pubUtils/data";
|
||||
import { RewardInter } from "@pubUtils/interface";
|
||||
import { sendMailByContent } from "../mailService";
|
||||
import { sendMessageToGroupShopWithSuc } from "../pushService";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getGoldObject } from "../role/rewardService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getGroupShopData(activityId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
if(!activityData) return null
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
|
||||
let playerData = new GroupShopData(activityData, createTime, 0);
|
||||
let serverRecords = await ActivityGroupShopRecModel.findByActivity(activityId);
|
||||
playerData.setRecords(serverRecords);
|
||||
let playerRecords = await ActivityGroupShopUserRecModel.findByActivityAndRoleId(activityId, roleId);
|
||||
playerData.setPlayerRecord(playerRecords);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getGroupShopDataShow(activityId: number, roleId: string) {
|
||||
let playerData = await getGroupShopData(activityId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
export function getGroupShopPriceStatus(clientPrice: number, price: number) {
|
||||
if(clientPrice == price) return GROUP_SHOP_PRICE_STATUS.NORMAL;
|
||||
if(clientPrice < price) return GROUP_SHOP_PRICE_STATUS.NOT_ENOUGH;
|
||||
return GROUP_SHOP_PRICE_STATUS.OVER;
|
||||
}
|
||||
|
||||
export async function getGroupShopServerData(activityData: ActivityModelType) {
|
||||
let playerData = new GroupShopData(activityData, 0, 0);
|
||||
let serverRecords = await ActivityGroupShopRecModel.findByActivity(activityData.activityId);
|
||||
playerData.setRecords(serverRecords);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getGroupShopTimers(activity: ActivityModelType) {
|
||||
if(!activity) return [];
|
||||
let playerData = await getGroupShopServerData(activity);
|
||||
return playerData?.timer||[];
|
||||
}
|
||||
|
||||
export async function setGroupShopToSetSum(arr: { activityId: number, itemId: number, sum: number }[]) {
|
||||
console.log('###### setGroupShopToSetSum', JSON.stringify(arr));
|
||||
for(let { activityId, itemId, sum } of arr) {
|
||||
let serverRecord = await ActivityGroupShopRecModel.setSum(activityId, itemId, sum);
|
||||
if(serverRecord) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerData = new GroupShopData(activityData, 0, 0);
|
||||
playerData.setRecords([serverRecord]);
|
||||
|
||||
let item = playerData.findItemById(itemId);
|
||||
let nextDiscount = item.getCurDiscount();
|
||||
// 推送频道
|
||||
await sendMessageToGroupShopWithSuc(PUSH_ROUTE.GROUP_SHOP_UPDATE, { activityId, sum, itemId, curDiscount: nextDiscount });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function refundGroupShop(isDebug = false) {
|
||||
console.log('###### refundGroupShop')
|
||||
let activities = await ActivityModel.findActivityByType(ACTIVITY_TYPE.GROUP_SHOP);
|
||||
|
||||
for(let activityData of activities) {
|
||||
let hasRefund = await ActivityGroupShopRefundModel.check(activityData.activityId);
|
||||
if(!isDebug && hasRefund) continue;
|
||||
|
||||
let playerData = await getGroupShopServerData(activityData);
|
||||
if(!isDebug && playerData.endTime >= Date.now()) continue;
|
||||
|
||||
let items = playerData.items||[];
|
||||
let refundRecs: RefundRec[] = [];
|
||||
for(let item of items) {
|
||||
let curDiscount = item.getCurDiscount();
|
||||
let playerRecords = await ActivityGroupShopUserRecModel.findByPrice(activityData.activityId, item.itemId, item.getCurDiscount().price);
|
||||
for(let { roleId, records } of playerRecords) {
|
||||
let rewards: {id: number, count: number}[] = [], sumGold = 0;
|
||||
for(let { price, buyCnt } of records) {
|
||||
if(price <= curDiscount.price) continue;
|
||||
let diff = (price - curDiscount.price) * buyCnt;
|
||||
rewards.push(getGoldObject(diff));
|
||||
sumGold += diff;
|
||||
refundRecs.push({ roleId, itemId: item.itemId, diff });
|
||||
}
|
||||
let itemName = gameData.goods.get(item.id)?.name?? `${item.id}`;
|
||||
let resultDiscount = curDiscount.discount;
|
||||
await sendMailByContent(MAIL_TYPE.GROUP_SHOP_REFUND, roleId, { goods: rewards, params: [itemName, `${resultDiscount}`, `${sumGold}`] });
|
||||
}
|
||||
}
|
||||
console.log('###### refundGroupShop refund complete', activityData.activityId)
|
||||
await ActivityGroupShopRefundModel.refund(activityData.activityId, refundRecs);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,207 +1,207 @@
|
||||
import { ACTIVITY_TYPE, STATUS, TASK_TYPE } from '../../consts';
|
||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityGrowthFundModel, ActivityGrowthFundModelType } from '../../db/ActivityGrowthFund';
|
||||
import { ActivityBuyRecordsModel } from '../../db/ActivityBuyRecords';
|
||||
import { RoleModel } from '../../db/Role';
|
||||
import { GrowthFundData } from '../../domain/activityField/growthFundField';
|
||||
import { ServerlistModel } from '../../db/Serverlist';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { RougelikeExtendModel } from '../../db/RougelikeExtend';
|
||||
import { AuthorBookModel } from '../../db/AuthorBook';
|
||||
import * as util from 'util';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
/*ACTIVITY_TYPE类型
|
||||
GROWTH_FUND_MAIN = 6, // 主线成长基金
|
||||
GROWTH_FUND_MAIN_VIP = 7, // 主线成长基金(高阶)
|
||||
GROWTH_FUND_TOWER = 8, // 镇念塔成长基金
|
||||
GROWTH_FUND_TOWER_VIP = 9, // 镇念塔成长基金(高阶)
|
||||
GROWTH_FUND_MAIN_ELITE = 10, // 精英成长基金
|
||||
GROWTH_FUND_MAIN_ELITE_VIP = 11, // 精英成长基金(高阶)
|
||||
GROWTH_FUND_ROUGE = 60, //学宫普通密卷
|
||||
GROWTH_FUND_ROUGE_VIP = 61, //学宫高级密卷
|
||||
GROWTH_FUND_AUTHOR = 62, //列传普通密卷
|
||||
GROWTH_FUND_AUTHOR_VIP = 63, //列传高级密卷
|
||||
|
||||
*/
|
||||
export async function growthFundActivity(type: number, serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, type);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0]
|
||||
let playerData = await getPlayerGrowthFundData(activityData.activityId, serverId, roleId);
|
||||
if (playerData.isComplete()) {
|
||||
return null;
|
||||
}
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerGrowthFundData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GrowthFundData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
if (playerData.isVipActivity()) {//vip高阶需要购买
|
||||
let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activityData.activityId, roleId);
|
||||
playerData.initBuyRecords(buyRecords);
|
||||
}
|
||||
|
||||
let activityType = activityData.type;
|
||||
switch (activityType) {
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_MAIN://主线
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP://主线vip
|
||||
{
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
let { warStar = new Array<{ id: number, warType: number, star: number }>() } = role;
|
||||
let warIDs = warStar.map(cur => cur.id);
|
||||
for (let page of playerData.list) {
|
||||
for (let item of page.items) {
|
||||
if (item.taskType == TASK_TYPE.BATTLE_MAIN) {
|
||||
let index = warIDs.findIndex(id => { return id === item.taskParamArray[1] })
|
||||
if (index != -1) {
|
||||
item.isComplete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_TOWER://镇念塔
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP:////镇念塔vip
|
||||
{
|
||||
let { towerLv } = await RoleModel.findByRoleId(roleId);
|
||||
for (let page of playerData.list) {
|
||||
for (let item of page.items) {
|
||||
if (item.taskType == TASK_TYPE.BATTLE_TOWER_LV) {
|
||||
if (towerLv >= item.condition) {
|
||||
item.isComplete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE: //精英
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP: //精英VIP
|
||||
{
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
let { warStar = new Array<{ id: number, warType: number, star: number }>() } = role;
|
||||
let warIDs = warStar.map(cur => cur.id);
|
||||
for (let page of playerData.list) {
|
||||
for (let item of page.items) {
|
||||
if (item.taskType == TASK_TYPE.BATTLE_MAIN_ELITE) {
|
||||
let index = warIDs.findIndex(id => { return id === item.taskParamArray[1] })
|
||||
if (index != -1) {
|
||||
item.isComplete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_ROUGE: //学宫普通密卷
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_ROUGE_VIP: //学宫高级密卷
|
||||
{
|
||||
const dbRougeExtends = await RougelikeExtendModel.findByRoleId(roleId);
|
||||
if (dbRougeExtends.length <= 0) break;
|
||||
const limitIdMap = dbRougeExtends.reduce((result, cur) => { result.set(cur.limitId, cur.limitId); return result; }, new Map<number, number>());
|
||||
for (let page of playerData.list) {
|
||||
for (let item of page.items) {
|
||||
if (item.taskType == TASK_TYPE.FUND_ROUGE) {
|
||||
if (limitIdMap.has(item.taskParamArray[0])) item.isComplete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_AUTHOR: //列传普通密卷
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_AUTHOR_VIP: //列传高级密卷
|
||||
{
|
||||
const progress = await AuthorBookModel.findProgressByRoleId(roleId);
|
||||
for (let page of playerData.list) {
|
||||
for (let item of page.items) {
|
||||
if (item.taskType == TASK_TYPE.FUND_AUTHOR) {
|
||||
if (progress >= item.taskParamArray[0]) item.isComplete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 购买高阶版
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeGrowthFund(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP
|
||||
&& activityData.type !== ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP
|
||||
&& activityData.type !== ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP
|
||||
&& activityData.type != ACTIVITY_TYPE.GROWTH_FUND_ROUGE_VIP
|
||||
&& activityData.type != ACTIVITY_TYPE.GROWTH_FUND_AUTHOR_VIP ) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GrowthFundData(activityData, createTime, serverTime);
|
||||
let pageData = playerData.findPageByProductID(productID);
|
||||
let pageIndex = pageData.pageIndex;
|
||||
let checkResult = await ActivityBuyRecordsModel.checkRecord(activityId, roleId, activityData.type, pageIndex);
|
||||
if(checkResult) return STATUS.ORDER_CANNOT_BUY;
|
||||
|
||||
await ActivityBuyRecordsModel.addRecord(activityId, roleId, activityData.type, pageIndex, true);
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign({}, { item: { pageIndex }, activityId: activityId })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkGrowthFund(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false;
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GrowthFundData(activityData, createTime, serverTime);
|
||||
let pageData = playerData.findPageByProductID(productID);
|
||||
let pageIndex = pageData.pageIndex;
|
||||
let checkResult = await ActivityBuyRecordsModel.checkRecord(activityData.activityId, roleId, activityData.type, pageIndex);
|
||||
return !checkResult;
|
||||
}
|
||||
import { ACTIVITY_TYPE, STATUS, TASK_TYPE } from '@consts';
|
||||
import { ActivityModel, ActivityModelType } from '@db/Activity';
|
||||
import { ActivityGrowthFundModel, ActivityGrowthFundModelType } from '@db/ActivityGrowthFund';
|
||||
import { ActivityBuyRecordsModel } from '@db/ActivityBuyRecords';
|
||||
import { RoleModel } from '@db/Role';
|
||||
import { GrowthFundData } from '@domain/activityField/growthFundField';
|
||||
import { ServerlistModel } from '@db/Serverlist';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { RougelikeExtendModel } from '@db/RougelikeExtend';
|
||||
import { AuthorBookModel } from '@db/AuthorBook';
|
||||
import * as util from 'util';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
/*ACTIVITY_TYPE类型
|
||||
GROWTH_FUND_MAIN = 6, // 主线成长基金
|
||||
GROWTH_FUND_MAIN_VIP = 7, // 主线成长基金(高阶)
|
||||
GROWTH_FUND_TOWER = 8, // 镇念塔成长基金
|
||||
GROWTH_FUND_TOWER_VIP = 9, // 镇念塔成长基金(高阶)
|
||||
GROWTH_FUND_MAIN_ELITE = 10, // 精英成长基金
|
||||
GROWTH_FUND_MAIN_ELITE_VIP = 11, // 精英成长基金(高阶)
|
||||
GROWTH_FUND_ROUGE = 60, //学宫普通密卷
|
||||
GROWTH_FUND_ROUGE_VIP = 61, //学宫高级密卷
|
||||
GROWTH_FUND_AUTHOR = 62, //列传普通密卷
|
||||
GROWTH_FUND_AUTHOR_VIP = 63, //列传高级密卷
|
||||
|
||||
*/
|
||||
export async function growthFundActivity(type: number, serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, type);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0]
|
||||
let playerData = await getPlayerGrowthFundData(activityData.activityId, serverId, roleId);
|
||||
if (playerData.isComplete()) {
|
||||
return null;
|
||||
}
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerGrowthFundData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GrowthFundData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
if (playerData.isVipActivity()) {//vip高阶需要购买
|
||||
let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activityData.activityId, roleId);
|
||||
playerData.initBuyRecords(buyRecords);
|
||||
}
|
||||
|
||||
let activityType = activityData.type;
|
||||
switch (activityType) {
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_MAIN://主线
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP://主线vip
|
||||
{
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
let { warStar = new Array<{ id: number, warType: number, star: number }>() } = role;
|
||||
let warIDs = warStar.map(cur => cur.id);
|
||||
for (let page of playerData.list) {
|
||||
for (let item of page.items) {
|
||||
if (item.taskType == TASK_TYPE.BATTLE_MAIN) {
|
||||
let index = warIDs.findIndex(id => { return id === item.taskParamArray[1] })
|
||||
if (index != -1) {
|
||||
item.isComplete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_TOWER://镇念塔
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP:////镇念塔vip
|
||||
{
|
||||
let { towerLv } = await RoleModel.findByRoleId(roleId);
|
||||
for (let page of playerData.list) {
|
||||
for (let item of page.items) {
|
||||
if (item.taskType == TASK_TYPE.BATTLE_TOWER_LV) {
|
||||
if (towerLv >= item.condition) {
|
||||
item.isComplete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE: //精英
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP: //精英VIP
|
||||
{
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
let { warStar = new Array<{ id: number, warType: number, star: number }>() } = role;
|
||||
let warIDs = warStar.map(cur => cur.id);
|
||||
for (let page of playerData.list) {
|
||||
for (let item of page.items) {
|
||||
if (item.taskType == TASK_TYPE.BATTLE_MAIN_ELITE) {
|
||||
let index = warIDs.findIndex(id => { return id === item.taskParamArray[1] })
|
||||
if (index != -1) {
|
||||
item.isComplete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_ROUGE: //学宫普通密卷
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_ROUGE_VIP: //学宫高级密卷
|
||||
{
|
||||
const dbRougeExtends = await RougelikeExtendModel.findByRoleId(roleId);
|
||||
if (dbRougeExtends.length <= 0) break;
|
||||
const limitIdMap = dbRougeExtends.reduce((result, cur) => { result.set(cur.limitId, cur.limitId); return result; }, new Map<number, number>());
|
||||
for (let page of playerData.list) {
|
||||
for (let item of page.items) {
|
||||
if (item.taskType == TASK_TYPE.FUND_ROUGE) {
|
||||
if (limitIdMap.has(item.taskParamArray[0])) item.isComplete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_AUTHOR: //列传普通密卷
|
||||
case ACTIVITY_TYPE.GROWTH_FUND_AUTHOR_VIP: //列传高级密卷
|
||||
{
|
||||
const progress = await AuthorBookModel.findProgressByRoleId(roleId);
|
||||
for (let page of playerData.list) {
|
||||
for (let item of page.items) {
|
||||
if (item.taskType == TASK_TYPE.FUND_AUTHOR) {
|
||||
if (progress >= item.taskParamArray[0]) item.isComplete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 购买高阶版
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeGrowthFund(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP
|
||||
&& activityData.type !== ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP
|
||||
&& activityData.type !== ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP
|
||||
&& activityData.type != ACTIVITY_TYPE.GROWTH_FUND_ROUGE_VIP
|
||||
&& activityData.type != ACTIVITY_TYPE.GROWTH_FUND_AUTHOR_VIP ) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GrowthFundData(activityData, createTime, serverTime);
|
||||
let pageData = playerData.findPageByProductID(productID);
|
||||
let pageIndex = pageData.pageIndex;
|
||||
let checkResult = await ActivityBuyRecordsModel.checkRecord(activityId, roleId, activityData.type, pageIndex);
|
||||
if(checkResult) return STATUS.ORDER_CANNOT_BUY;
|
||||
|
||||
await ActivityBuyRecordsModel.addRecord(activityId, roleId, activityData.type, pageIndex, true);
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign({}, { item: { pageIndex }, activityId: activityId })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkGrowthFund(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false;
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GrowthFundData(activityData, createTime, serverTime);
|
||||
let pageData = playerData.findPageByProductID(productID);
|
||||
let pageIndex = pageData.pageIndex;
|
||||
let checkResult = await ActivityBuyRecordsModel.checkRecord(activityData.activityId, roleId, activityData.type, pageIndex);
|
||||
return !checkResult;
|
||||
}
|
||||
|
||||
@@ -1,59 +1,59 @@
|
||||
import { ACTIVITY_TYPE } from '../../consts';
|
||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityGrowthModel, ActivityGrowthModelType } from '../../db/ActivityGrowth';
|
||||
import { ActivityGrowthPointModel, ActivityGrowthPointModelType } from '../../db/ActivityGrowthPoint';
|
||||
import { HeroModel } from '../../db/Hero';
|
||||
import { GrowthData } from '../../domain/activityField/growthField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function growthActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.TASK_GROWTH);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityData.activityId, roleId);
|
||||
let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityData.activityId, roleId);
|
||||
|
||||
let userHeroes = await HeroModel.findByRole(roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GrowthData(activityData, createTime, serverTime);
|
||||
await playerData.setPlayerRecords(playerRecords, roleId, userHeroes);
|
||||
playerData.setPlayerPointRecord(playerPointRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerGrowthData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let playerRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityId, roleId);
|
||||
let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityId, roleId);
|
||||
|
||||
let userHeroes = await HeroModel.findByRole(roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GrowthData(activityData, createTime, serverTime);
|
||||
await playerData.setPlayerRecords(playerRecords, roleId, userHeroes);
|
||||
playerData.setPlayerPointRecord(playerPointRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
import { ACTIVITY_TYPE } from '@consts';
|
||||
import { ActivityModel, ActivityModelType } from '@db/Activity';
|
||||
import { ActivityGrowthModel, ActivityGrowthModelType } from '@db/ActivityGrowth';
|
||||
import { ActivityGrowthPointModel, ActivityGrowthPointModelType } from '@db/ActivityGrowthPoint';
|
||||
import { HeroModel } from '@db/Hero';
|
||||
import { GrowthData } from '@domain/activityField/growthField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function growthActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.TASK_GROWTH);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityData.activityId, roleId);
|
||||
let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityData.activityId, roleId);
|
||||
|
||||
let userHeroes = await HeroModel.findByRole(roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GrowthData(activityData, createTime, serverTime);
|
||||
await playerData.setPlayerRecords(playerRecords, roleId, userHeroes);
|
||||
playerData.setPlayerPointRecord(playerPointRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerGrowthData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let playerRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityId, roleId);
|
||||
let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityId, roleId);
|
||||
|
||||
let userHeroes = await HeroModel.findByRole(roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GrowthData(activityData, createTime, serverTime);
|
||||
await playerData.setPlayerRecords(playerRecords, roleId, userHeroes);
|
||||
playerData.setPlayerPointRecord(playerPointRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,106 +1,106 @@
|
||||
import { ACTIVITY_TYPE } from "../../consts";
|
||||
import { ActivityGuildPayModel } from "../../db/ActivityGuildPay";
|
||||
import { RoleType } from "../../db/Role";
|
||||
import { GuildPayData } from "../../domain/activityField/guildPay";
|
||||
import { getActivitiesByType, getActivityById, pushActivities, pushActivitiesToGuild, pushActivityInter } from "./activityService";
|
||||
import { ServerlistModel } from '../../db/Serverlist';
|
||||
import { ActivityGuildPayRecordModel } from "../../db/ActivityGuildPayRecord";
|
||||
import { getServerCreateTime } from "../redisService";
|
||||
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getGuildPayData(serverId: number, activityId: number, roleId: string, guildCode: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GuildPayData(activityData, 0, serverTime);
|
||||
let receiveRecord = await ActivityGuildPayRecordModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setReceiveRecord(receiveRecord);
|
||||
if(guildCode) {
|
||||
let guildRecord = await ActivityGuildPayModel.findData(serverId, activityId, playerData.roundIndex, guildCode);
|
||||
playerData.setGuildRecord(guildRecord);
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getGuildPayDataShow(serverId: number, activityId: number, roleId: string, guildCode: string) {
|
||||
let playerData = await getGuildPayData(serverId, activityId, roleId, guildCode);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export async function addGuildPay(role: RoleType, price: number) {
|
||||
let { hasGuild, roleId, roleName, serverId, guildCode } = role;
|
||||
if(!hasGuild) return;
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GUILD_PAY);
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let { activityId, type: activityType } = activityData;
|
||||
let obj = new GuildPayData(activityData, 0, serverTime);
|
||||
if(obj && obj.canPay()) {
|
||||
let { isNew, result } = await ActivityGuildPayModel.addRecord(serverId, activityId, obj.roundIndex, guildCode, {
|
||||
roleId, roleName, price, hasQuit: false
|
||||
});
|
||||
if(isNew) {
|
||||
let { memberRecord = [] } = result;
|
||||
let payMemberCnt = memberRecord.filter(member => !member.hasQuit).length;
|
||||
pushResult.push({ activityId, activityType, param: { payMember: roleName, payMemberCnt } });
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log('##### addGuildPay', pushResult.length)
|
||||
await pushActivitiesToGuild(pushResult, guildCode);
|
||||
}
|
||||
|
||||
export async function guildPayQuitGuild(serverId: number, guildCode: string, roleId: string) {
|
||||
if(!guildCode) return;
|
||||
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GUILD_PAY);
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let { activityId, type: activityType } = activityData;
|
||||
let obj = new GuildPayData(activityData, 0, serverTime);
|
||||
if(obj && obj.canPay()) {
|
||||
let result = await ActivityGuildPayModel.quitGuild(serverId, activityId, obj.roundIndex, guildCode, roleId);
|
||||
if(result) {
|
||||
let { memberRecord = [] } = result;
|
||||
let records = memberRecord.filter(member => !member.hasQuit);
|
||||
let payRecord = records.map(member => member.roleName);
|
||||
pushResult.push({ activityId, activityType, param: { payRecord, payMemberCnt: payRecord.length } });
|
||||
}
|
||||
}
|
||||
}
|
||||
await pushActivitiesToGuild(pushResult, guildCode);
|
||||
}
|
||||
|
||||
export async function changeGuildActivity(guildCode: string, serverId: number, roleId: string, sid: string) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GUILD_PAY);
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let { activityId, type: activityType } = activityData;
|
||||
let obj = await getGuildPayData(serverId, activityId, roleId, guildCode);
|
||||
pushResult.push({ activityId, activityType, param: { payRecord: obj.payRecord, payMemberCnt: obj.payMemberCnt } });
|
||||
}
|
||||
await pushActivities(pushResult, roleId, sid);
|
||||
}
|
||||
|
||||
export async function guildDismisActivity(guildCode: string, serverId: number) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GUILD_PAY);
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let { activityId, type: activityType } = activityData;
|
||||
pushResult.push({ activityId, activityType, param: { payRecord: [], payMemberCnt: 0 } });
|
||||
}
|
||||
await pushActivitiesToGuild(pushResult, guildCode);
|
||||
}
|
||||
import { ACTIVITY_TYPE } from "@consts";
|
||||
import { ActivityGuildPayModel } from "@db/ActivityGuildPay";
|
||||
import { RoleType } from "@db/Role";
|
||||
import { GuildPayData } from "@domain/activityField/guildPay";
|
||||
import { getActivitiesByType, getActivityById, pushActivities, pushActivitiesToGuild, pushActivityInter } from "./activityService";
|
||||
import { ServerlistModel } from '@db/Serverlist';
|
||||
import { ActivityGuildPayRecordModel } from "@db/ActivityGuildPayRecord";
|
||||
import { getServerCreateTime } from "../redisService";
|
||||
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getGuildPayData(serverId: number, activityId: number, roleId: string, guildCode: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new GuildPayData(activityData, 0, serverTime);
|
||||
let receiveRecord = await ActivityGuildPayRecordModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setReceiveRecord(receiveRecord);
|
||||
if(guildCode) {
|
||||
let guildRecord = await ActivityGuildPayModel.findData(serverId, activityId, playerData.roundIndex, guildCode);
|
||||
playerData.setGuildRecord(guildRecord);
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getGuildPayDataShow(serverId: number, activityId: number, roleId: string, guildCode: string) {
|
||||
let playerData = await getGuildPayData(serverId, activityId, roleId, guildCode);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export async function addGuildPay(role: RoleType, price: number) {
|
||||
let { hasGuild, roleId, roleName, serverId, guildCode } = role;
|
||||
if(!hasGuild) return;
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GUILD_PAY);
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let { activityId, type: activityType } = activityData;
|
||||
let obj = new GuildPayData(activityData, 0, serverTime);
|
||||
if(obj && obj.canPay()) {
|
||||
let { isNew, result } = await ActivityGuildPayModel.addRecord(serverId, activityId, obj.roundIndex, guildCode, {
|
||||
roleId, roleName, price, hasQuit: false
|
||||
});
|
||||
if(isNew) {
|
||||
let { memberRecord = [] } = result;
|
||||
let payMemberCnt = memberRecord.filter(member => !member.hasQuit).length;
|
||||
pushResult.push({ activityId, activityType, param: { payMember: roleName, payMemberCnt } });
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log('##### addGuildPay', pushResult.length)
|
||||
await pushActivitiesToGuild(pushResult, guildCode);
|
||||
}
|
||||
|
||||
export async function guildPayQuitGuild(serverId: number, guildCode: string, roleId: string) {
|
||||
if(!guildCode) return;
|
||||
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GUILD_PAY);
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let { activityId, type: activityType } = activityData;
|
||||
let obj = new GuildPayData(activityData, 0, serverTime);
|
||||
if(obj && obj.canPay()) {
|
||||
let result = await ActivityGuildPayModel.quitGuild(serverId, activityId, obj.roundIndex, guildCode, roleId);
|
||||
if(result) {
|
||||
let { memberRecord = [] } = result;
|
||||
let records = memberRecord.filter(member => !member.hasQuit);
|
||||
let payRecord = records.map(member => member.roleName);
|
||||
pushResult.push({ activityId, activityType, param: { payRecord, payMemberCnt: payRecord.length } });
|
||||
}
|
||||
}
|
||||
}
|
||||
await pushActivitiesToGuild(pushResult, guildCode);
|
||||
}
|
||||
|
||||
export async function changeGuildActivity(guildCode: string, serverId: number, roleId: string, sid: string) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GUILD_PAY);
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let { activityId, type: activityType } = activityData;
|
||||
let obj = await getGuildPayData(serverId, activityId, roleId, guildCode);
|
||||
pushResult.push({ activityId, activityType, param: { payRecord: obj.payRecord, payMemberCnt: obj.payMemberCnt } });
|
||||
}
|
||||
await pushActivities(pushResult, roleId, sid);
|
||||
}
|
||||
|
||||
export async function guildDismisActivity(guildCode: string, serverId: number) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GUILD_PAY);
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let { activityId, type: activityType } = activityData;
|
||||
pushResult.push({ activityId, activityType, param: { payRecord: [], payMemberCnt: 0 } });
|
||||
}
|
||||
await pushActivitiesToGuild(pushResult, guildCode);
|
||||
}
|
||||
|
||||
@@ -1,157 +1,157 @@
|
||||
import moment = require('moment');
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from '../../consts';
|
||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityShopModel, ActivityShopModelType } from '../../db/ActivityShop';
|
||||
import { RoleModel } from '../../db/Role';
|
||||
import { ServerlistModel } from '../../db/Serverlist';
|
||||
import { LimitShopData } from '../../domain/activityField/limitShopField';
|
||||
import { deltaDays } from '../../pubUtils/util';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
|
||||
/**
|
||||
* 获取新手玩家限购礼包活动数据 新手限定作为开服七天乐的延伸礼包。只存在于开服前七天,七天时间过去,玩家无法购买
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function newPlayerLimitPackageActivity(serverId: number, roleId: string) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.NEW_PLAYER_LIMIT_PACKAGE);
|
||||
if (activities.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activities[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LimitShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityShopModelType = await ActivityShopModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 每日、每周限购礼包活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerLimitPackageData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LimitShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityShopModelType = await ActivityShopModel.findData(activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取每日/每周限购礼包数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function limitPackageActivity(serverId: number, roleId: string, type: number) {
|
||||
let activityArray = await getActivitiesByType(serverId, type);
|
||||
activityArray = activityArray.sort((a, b) => {
|
||||
return b.activityId - a.activityId
|
||||
});
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerData = await getPlayerLimitPackageData(activityData.activityId, serverId, roleId);
|
||||
return playerData
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动第几天
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function newPlayerActivityDays(roleId: string) {
|
||||
let { createTime } = await RoleModel.findByRoleId(roleId);
|
||||
let createDate = moment(createTime * 1000).toDate();
|
||||
let todayIndex = deltaDays(createDate, new Date, true) + 1;
|
||||
return todayIndex;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 结算购买的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeLimitPackageReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.NEW_PLAYER_LIMIT_PACKAGE &&
|
||||
activityData.type !== ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_DAILY &&
|
||||
activityData.type !== ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_WEEKLY) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LimitShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityShopModelType = await ActivityShopModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
let item = playerData.findItemByProductID(productID);
|
||||
if (!item) {
|
||||
return STATUS.ACTIVITY_NO_PRODUCT;
|
||||
}
|
||||
if (item.countMax > 0 && item.buyCount >= item.countMax) {
|
||||
return STATUS.ACTIVITY_MAX_COUNT;
|
||||
}
|
||||
|
||||
let rewardArray = stringToRewardParam(item.reward)
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardArray, ITEM_CHANGE_REASON.BUY_LIMIT_PACKAGE);
|
||||
|
||||
await ActivityShopModel.addRecord(activityId, roleId, playerData.roundIndex, item.id, 1);
|
||||
|
||||
item.buyCount += 1;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item: item, activityId: activityId })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkLimitPackageCanBuy(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LimitShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityShopModelType = await ActivityShopModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
let item = playerData.findItemByProductID(productID);
|
||||
if (!item) return false
|
||||
if (item.countMax > 0 && item.buyCount >= item.countMax) return false;
|
||||
return true;
|
||||
}
|
||||
import moment = require('moment');
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from '@consts';
|
||||
import { ActivityModel, ActivityModelType } from '@db/Activity';
|
||||
import { ActivityShopModel, ActivityShopModelType } from '@db/ActivityShop';
|
||||
import { RoleModel } from '@db/Role';
|
||||
import { ServerlistModel } from '@db/Serverlist';
|
||||
import { LimitShopData } from '@domain/activityField/limitShopField';
|
||||
import { deltaDays } from '@pubUtils/util';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
|
||||
/**
|
||||
* 获取新手玩家限购礼包活动数据 新手限定作为开服七天乐的延伸礼包。只存在于开服前七天,七天时间过去,玩家无法购买
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function newPlayerLimitPackageActivity(serverId: number, roleId: string) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.NEW_PLAYER_LIMIT_PACKAGE);
|
||||
if (activities.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activities[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LimitShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityShopModelType = await ActivityShopModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 每日、每周限购礼包活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerLimitPackageData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LimitShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityShopModelType = await ActivityShopModel.findData(activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取每日/每周限购礼包数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function limitPackageActivity(serverId: number, roleId: string, type: number) {
|
||||
let activityArray = await getActivitiesByType(serverId, type);
|
||||
activityArray = activityArray.sort((a, b) => {
|
||||
return b.activityId - a.activityId
|
||||
});
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerData = await getPlayerLimitPackageData(activityData.activityId, serverId, roleId);
|
||||
return playerData
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动第几天
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function newPlayerActivityDays(roleId: string) {
|
||||
let { createTime } = await RoleModel.findByRoleId(roleId);
|
||||
let createDate = moment(createTime * 1000).toDate();
|
||||
let todayIndex = deltaDays(createDate, new Date, true) + 1;
|
||||
return todayIndex;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 结算购买的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeLimitPackageReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.NEW_PLAYER_LIMIT_PACKAGE &&
|
||||
activityData.type !== ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_DAILY &&
|
||||
activityData.type !== ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_WEEKLY) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LimitShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityShopModelType = await ActivityShopModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
let item = playerData.findItemByProductID(productID);
|
||||
if (!item) {
|
||||
return STATUS.ACTIVITY_NO_PRODUCT;
|
||||
}
|
||||
if (item.countMax > 0 && item.buyCount >= item.countMax) {
|
||||
return STATUS.ACTIVITY_MAX_COUNT;
|
||||
}
|
||||
|
||||
let rewardArray = stringToRewardParam(item.reward)
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardArray, ITEM_CHANGE_REASON.BUY_LIMIT_PACKAGE);
|
||||
|
||||
await ActivityShopModel.addRecord(activityId, roleId, playerData.roundIndex, item.id, 1);
|
||||
|
||||
item.buyCount += 1;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item: item, activityId: activityId })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkLimitPackageCanBuy(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LimitShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityShopModelType = await ActivityShopModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
let item = playerData.findItemByProductID(productID);
|
||||
if (!item) return false
|
||||
if (item.countMax > 0 && item.buyCount >= item.countMax) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
import { ActivityLuckyModel } from "../../db/ActivityLuckyRec";
|
||||
import { LuckyData } from "../../domain/activityField/luckyField";
|
||||
import { shouldRefresh } from "../../pubUtils/util";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerLuckyData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LuckyData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord = await ActivityLuckyModel.findByActivityId(serverId, activityId, roleId, playerData.roundIndex);
|
||||
if(playerRecord && shouldRefresh(playerRecord.refTodayCount, new Date())) {
|
||||
playerRecord = await ActivityLuckyModel.refreshTodayCount(serverId, activityId, roleId, playerData.roundIndex);
|
||||
}
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getPlayerLuckyDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerLuckyData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
import { ActivityLuckyModel } from "@db/ActivityLuckyRec";
|
||||
import { LuckyData } from "@domain/activityField/luckyField";
|
||||
import { shouldRefresh } from "@pubUtils/util";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerLuckyData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LuckyData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord = await ActivityLuckyModel.findByActivityId(serverId, activityId, roleId, playerData.roundIndex);
|
||||
if(playerRecord && shouldRefresh(playerRecord.refTodayCount, new Date())) {
|
||||
playerRecord = await ActivityLuckyModel.refreshTodayCount(serverId, activityId, roleId, playerData.roundIndex);
|
||||
}
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getPlayerLuckyDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerLuckyData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
import { ActivityTurntableModel } from "../../db/ActivityTurntableRec";
|
||||
import { LuckyTurntableData } from "../../domain/activityField/luckyTurntableField";
|
||||
import { shouldRefresh } from "../../pubUtils/util";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerLuckyTurntableData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LuckyTurntableData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord = await ActivityTurntableModel.findByActivityId(serverId, activityId, roleId, playerData.roundIndex);
|
||||
if(playerRecord && shouldRefresh(playerRecord.refTodayCount, new Date())) {
|
||||
playerRecord = await ActivityTurntableModel.refreshTodayCount(serverId, activityId, roleId, playerData.roundIndex);
|
||||
}
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getPlayerLuckyTurntableDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerLuckyTurntableData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
import { ActivityTurntableModel } from "@db/ActivityTurntableRec";
|
||||
import { LuckyTurntableData } from "@domain/activityField/luckyTurntableField";
|
||||
import { shouldRefresh } from "@pubUtils/util";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerLuckyTurntableData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new LuckyTurntableData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord = await ActivityTurntableModel.findByActivityId(serverId, activityId, roleId, playerData.roundIndex);
|
||||
if(playerRecord && shouldRefresh(playerRecord.refTodayCount, new Date())) {
|
||||
playerRecord = await ActivityTurntableModel.refreshTodayCount(serverId, activityId, roleId, playerData.roundIndex);
|
||||
}
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getPlayerLuckyTurntableDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerLuckyTurntableData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
import { ActivityMidAutumnRecModel } from "../../db/ActivityMidAutumnRec";
|
||||
import { MidAutumnData } from "../../domain/activityField/midAutumnField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMidAutumnData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MidAutumnData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityMidAutumnRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMidAutumnDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerMidAutumnData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
import { ActivityMidAutumnRecModel } from "@db/ActivityMidAutumnRec";
|
||||
import { MidAutumnData } from "@domain/activityField/midAutumnField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMidAutumnData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MidAutumnData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityMidAutumnRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMidAutumnDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerMidAutumnData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,46 +1,46 @@
|
||||
import { ActivityForgeModel } from "../../db/ActivityForge";
|
||||
import { ActivityMiniGameModel } from "../../db/ActivityMiniGame";
|
||||
import { ActivityMiniGameRecModel } from "../../db/ActivityMiniGameRec";
|
||||
import { MiniGameData } from "../../domain/activityField/miniGameField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMiniGameData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MiniGameData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityMiniGameModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
let records = await ActivityMiniGameRecModel.findRecords(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerData(playerRecord);
|
||||
playerData.setPlayerRecords(records);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMiniGameDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerMiniGameData(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('|')
|
||||
}
|
||||
import { ActivityForgeModel } from "@db/ActivityForge";
|
||||
import { ActivityMiniGameModel } from "@db/ActivityMiniGame";
|
||||
import { ActivityMiniGameRecModel } from "@db/ActivityMiniGameRec";
|
||||
import { MiniGameData } from "@domain/activityField/miniGameField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMiniGameData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MiniGameData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityMiniGameModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
let records = await ActivityMiniGameRecModel.findRecords(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerData(playerRecord);
|
||||
playerData.setPlayerRecords(records);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMiniGameDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerMiniGameData(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('|')
|
||||
}
|
||||
|
||||
@@ -1,69 +1,69 @@
|
||||
import { ACTIVITY_TYPE } from '../../consts';
|
||||
import { ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityMonopolyModel, ActivityMonopolyModelType } from '../../db/ActivityMonopoly';
|
||||
import { ActivityMonopolyLandModel, ActivityMonopolyLandModelType } from '../../db/ActivityMonopolyLand';
|
||||
import { MonopolyData } from '../../domain/activityField/monopolyField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getMonopolyActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.MONOPOLY);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerMonopolyData: ActivityMonopolyModelType = await ActivityMonopolyModel.findData(serverId, activityData.activityId, roleId);
|
||||
let playerLandData: ActivityMonopolyLandModelType[] = await ActivityMonopolyLandModel.findData(serverId, activityData.activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonopolyData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerMonopolyData, playerLandData);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMonopolyData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return null;
|
||||
}
|
||||
let playerMonopolyData: ActivityMonopolyModelType = await ActivityMonopolyModel.findData(serverId, activityData.activityId, roleId);
|
||||
let playerLandData: ActivityMonopolyLandModelType[] = await ActivityMonopolyLandModel.findData(serverId, activityData.activityId, roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonopolyData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerMonopolyData, playerLandData);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} position 当前位置
|
||||
* @param {number} addStep 移动步数
|
||||
* @param {number} max 最大位置
|
||||
*
|
||||
*/
|
||||
export function nextPosition(position: number, addStep: number, max: number) {
|
||||
let temp = (position + addStep) % max;
|
||||
return (temp == 0) ? max : temp;
|
||||
}
|
||||
|
||||
import { ACTIVITY_TYPE } from '@consts';
|
||||
import { ActivityModelType } from '@db/Activity';
|
||||
import { ActivityMonopolyModel, ActivityMonopolyModelType } from '@db/ActivityMonopoly';
|
||||
import { ActivityMonopolyLandModel, ActivityMonopolyLandModelType } from '@db/ActivityMonopolyLand';
|
||||
import { MonopolyData } from '@domain/activityField/monopolyField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getMonopolyActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.MONOPOLY);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerMonopolyData: ActivityMonopolyModelType = await ActivityMonopolyModel.findData(serverId, activityData.activityId, roleId);
|
||||
let playerLandData: ActivityMonopolyLandModelType[] = await ActivityMonopolyLandModel.findData(serverId, activityData.activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonopolyData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerMonopolyData, playerLandData);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMonopolyData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return null;
|
||||
}
|
||||
let playerMonopolyData: ActivityMonopolyModelType = await ActivityMonopolyModel.findData(serverId, activityData.activityId, roleId);
|
||||
let playerLandData: ActivityMonopolyLandModelType[] = await ActivityMonopolyLandModel.findData(serverId, activityData.activityId, roleId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonopolyData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerMonopolyData, playerLandData);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} position 当前位置
|
||||
* @param {number} addStep 移动步数
|
||||
* @param {number} max 最大位置
|
||||
*
|
||||
*/
|
||||
export function nextPosition(position: number, addStep: number, max: number) {
|
||||
let temp = (position + addStep) % max;
|
||||
return (temp == 0) ? max : temp;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,96 +1,96 @@
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from "../../consts";
|
||||
import { ActivityModelType } from "../../db/Activity";
|
||||
import { ActivityMonthlyFundModel } from "../../db/ActivityMonthlyFund";
|
||||
import { MonthlyFundData } from "../../domain/activityField/monthlyFundField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
import { stringToRewardParam, addReward } from "./giftPackageService";
|
||||
|
||||
/**
|
||||
* 月基金玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getMonthlyFundData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyFundData(activityData, createTime, serverTime);
|
||||
let playerRecords = await ActivityMonthlyFundModel.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 getMonthlyFundDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getMonthlyFundData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 月基金 是否可以购买
|
||||
* @param roleId 玩家id
|
||||
* @param serverId 服
|
||||
* @param activityData 活动数据
|
||||
* @returns
|
||||
*/
|
||||
export async function checkMonthlyFund(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData || activityData.type !== ACTIVITY_TYPE.MONTHLY_FUND) return false;
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyFundData(activityData, createTime, serverTime);
|
||||
let playerRecords = await ActivityMonthlyFundModel.findData(serverId, activityData.activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
let page = playerData.findByProductID(productID);
|
||||
return !page.hasBought;
|
||||
}
|
||||
|
||||
/**
|
||||
* 周基金购买
|
||||
* @param roleId 玩家id
|
||||
* @param roleName 玩家名
|
||||
* @param sid
|
||||
* @param serverId 服
|
||||
* @param activityId 活动
|
||||
* @param productID 商品id
|
||||
* @returns
|
||||
*/
|
||||
export async function makeMonthlyFund(roleId: string, roleName: string, sid: string, serverId: number, activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.MONTHLY_FUND) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyFundData(activityData, createTime, serverTime);
|
||||
let playerRecords = await ActivityMonthlyFundModel.findData(serverId, activityData.activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
let page = playerData.findByProductID(productID);
|
||||
if(page.hasBought) return STATUS.ORDER_CANNOT_BUY;
|
||||
|
||||
await ActivityMonthlyFundModel.buy(serverId, activityId, roleId, playerData.roundIndex, page.pageIndex, productID);
|
||||
|
||||
let rewardParamArr = stringToRewardParam(page.onceReward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.ACT_WEEKLY_FUND_BUY);
|
||||
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { activityId: activityId, pageIndex: page.pageIndex, roundIndex: playerData.roundIndex })
|
||||
}
|
||||
}
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from "@consts";
|
||||
import { ActivityModelType } from "@db/Activity";
|
||||
import { ActivityMonthlyFundModel } from "@db/ActivityMonthlyFund";
|
||||
import { MonthlyFundData } from "@domain/activityField/monthlyFundField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
import { stringToRewardParam, addReward } from "./giftPackageService";
|
||||
|
||||
/**
|
||||
* 月基金玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getMonthlyFundData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyFundData(activityData, createTime, serverTime);
|
||||
let playerRecords = await ActivityMonthlyFundModel.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 getMonthlyFundDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getMonthlyFundData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 月基金 是否可以购买
|
||||
* @param roleId 玩家id
|
||||
* @param serverId 服
|
||||
* @param activityData 活动数据
|
||||
* @returns
|
||||
*/
|
||||
export async function checkMonthlyFund(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData || activityData.type !== ACTIVITY_TYPE.MONTHLY_FUND) return false;
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyFundData(activityData, createTime, serverTime);
|
||||
let playerRecords = await ActivityMonthlyFundModel.findData(serverId, activityData.activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
let page = playerData.findByProductID(productID);
|
||||
return !page.hasBought;
|
||||
}
|
||||
|
||||
/**
|
||||
* 周基金购买
|
||||
* @param roleId 玩家id
|
||||
* @param roleName 玩家名
|
||||
* @param sid
|
||||
* @param serverId 服
|
||||
* @param activityId 活动
|
||||
* @param productID 商品id
|
||||
* @returns
|
||||
*/
|
||||
export async function makeMonthlyFund(roleId: string, roleName: string, sid: string, serverId: number, activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.MONTHLY_FUND) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyFundData(activityData, createTime, serverTime);
|
||||
let playerRecords = await ActivityMonthlyFundModel.findData(serverId, activityData.activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
let page = playerData.findByProductID(productID);
|
||||
if(page.hasBought) return STATUS.ORDER_CANNOT_BUY;
|
||||
|
||||
await ActivityMonthlyFundModel.buy(serverId, activityId, roleId, playerData.roundIndex, page.pageIndex, productID);
|
||||
|
||||
let rewardParamArr = stringToRewardParam(page.onceReward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.ACT_WEEKLY_FUND_BUY);
|
||||
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { activityId: activityId, pageIndex: page.pageIndex, roundIndex: playerData.roundIndex })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,240 +1,240 @@
|
||||
import { ACTIVITY_TYPE, HANG_UP_CONSTS, ITEM_CHANGE_REASON, MAIL_TYPE, REFRESH_TIME, STATUS } from '../../consts';
|
||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityMonthlyTicketModel, ActivityMonthlyTicketModelType } from '../../db/ActivityMonthlyTicket';
|
||||
import { RewardParam } from '../../domain/activityField/rewardField';
|
||||
import { MonthlyTicketData } from '../../domain/activityField/monthlyTicketField';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
import moment = require('moment');
|
||||
import { ServerlistModel } from '../../db/Serverlist';
|
||||
import { sendMailByContent } from './../mailService';
|
||||
import { RoleModel, RoleType } from '../../db/Role';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { RewardInter } from '../../pubUtils/interface';
|
||||
import { DUNGEON_CONST, PVP, VIP } from '../../pubUtils/dicParam';
|
||||
import { cal, } from '../../pubUtils/util';
|
||||
import { stringWithTypeToRewardInter } from '../../pubUtils/roleUtil';
|
||||
import { pinus } from 'pinus';
|
||||
import { getGoldId } from '../role/rewardService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function monthlyTicketActivity(serverId: number, roleId: string, type: number) {
|
||||
let activityArray = await getActivitiesByType(serverId, type);
|
||||
activityArray = activityArray.sort((a, b) => {
|
||||
return b.activityId - a.activityId
|
||||
});
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerRecord: ActivityMonthlyTicketModelType = await ActivityMonthlyTicketModel.findMonthlyTicket(serverId, roleId, activityData.activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyTicketData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
if ((playerData.price > 0 && playerData.isOpen) || playerData.price === 0) {
|
||||
if (playerData.todayIndex - 1 > playerData.dayIndex) {//过期还没领取
|
||||
//下发邮件奖励
|
||||
for (let i = playerData.dayIndex + 1; i < playerData.todayIndex; i++) {
|
||||
let goods = stringWithTypeToRewardInter(playerData.baseReward)
|
||||
await sendMailByContent(MAIL_TYPE.MONTHLY_REWARD, roleId, { params: [], goods });
|
||||
}
|
||||
await ActivityMonthlyTicketModel.setDayIndex(serverId, roleId, playerData.activityId, playerData.todayIndex - 1);
|
||||
playerData.dayIndex = playerData.todayIndex - 1;
|
||||
}
|
||||
}
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMonthlyTicketData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord: ActivityMonthlyTicketModelType = await ActivityMonthlyTicketModel.findMonthlyTicket(serverId, roleId, activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyTicketData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家月卡当天的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMonthlyTicketDayReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number,) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyTicketData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityMonthlyTicketModelType = await ActivityMonthlyTicketModel.findMonthlyTicket(serverId, roleId, activityId);
|
||||
if (playerData.price > 0 && !playerRecord) {//没有购买过
|
||||
return null;
|
||||
}
|
||||
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
if ((playerData.price > 0 && playerData.isOpen) || playerData.price == 0) {
|
||||
if (playerData.todayIndex > playerData.dayIndex) {//今天还没领取
|
||||
await ActivityMonthlyTicketModel.setDayIndex(serverId, roleId, activityId, playerData.todayIndex);
|
||||
let rewardParamArr: Array<RewardParam> = stringToRewardParam(playerData.baseReward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.MONTHLY_TICKET_DAILY)
|
||||
return result
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 结算首次购买月卡的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeMonthlyTicketReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (activityData.type !== ACTIVITY_TYPE.MONTHLY_TICKET_1 && activityData.type !== ACTIVITY_TYPE.MONTHLY_TICKET_2) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
|
||||
if(!await checkMonthlyTicket(roleId, serverId, activityData)) return STATUS.ORDER_CANNOT_BUY;
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyTicketData(activityData, createTime, serverTime);
|
||||
|
||||
let endTime = playerData.isForever? moment(playerData.endTime).toDate(): moment(new Date()).startOf('d').add(playerData.days, 'day').add(REFRESH_TIME, 'h').toDate();
|
||||
console.log('endTime', playerData.isForever, moment(new Date()).startOf('d'), endTime, playerData.days)
|
||||
|
||||
await ActivityMonthlyTicketModel.buyMonthlyTicket(serverId, roleId, activityId, activityData.type, endTime, playerData.isForever)
|
||||
if(activityData.type == ACTIVITY_TYPE.MONTHLY_TICKET_2) {
|
||||
let role = await RoleModel.buyForeverTicket(roleId);
|
||||
if(sid) await pinus.app.rpc.connector.connectorRemote.setOtherUserSession.toServer(sid,[{ roleId, vipStartTime: role.vipStartTime }]);
|
||||
}
|
||||
let firstReward = playerData.firstReward;
|
||||
let rewardParamArr: Array<RewardParam> = stringToRewardParam(firstReward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.MONTHLY_TICKET_FIRST)
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item: { isOpen: true, todayIndex: 1 }, activityId: activityData.activityId })
|
||||
}
|
||||
}
|
||||
|
||||
// 是否可以购买月卡
|
||||
export async function checkMonthlyTicket(roleId: string, serverId: number, activityData: ActivityModelType) {
|
||||
if(!activityData) return false;
|
||||
|
||||
let result = await ActivityMonthlyTicketModel.checkHasBought(serverId, roleId, activityData.activityId, activityData.type);
|
||||
return !result;
|
||||
}
|
||||
|
||||
// 军团捐献消耗
|
||||
export function getVipDonateConsume(originConsume: RewardInter, vipStartTime: number) {
|
||||
if(vipStartTime > 0) {
|
||||
if(originConsume.id == getGoldId()) {
|
||||
return [{ id: originConsume.id, count: Math.floor(originConsume.count * VIP.VIP_GUILD_DONATE_COST_GOLD_RATIO) }];
|
||||
} else {
|
||||
return [originConsume];
|
||||
}
|
||||
} else {
|
||||
return [originConsume];
|
||||
}
|
||||
}
|
||||
|
||||
export function getVipHungupReward(startTime: number, endTime: number, baseReward: RewardInter[], notReceivedGoods: {gid: number, count: number}[], vipStartTime: number) {
|
||||
let multi = Math.floor((endTime - startTime) / HANG_UP_CONSTS.UNIT_TIME);
|
||||
if(vipStartTime > 0) {
|
||||
if(vipStartTime > startTime) { // 开始挂机之后买的月卡
|
||||
let isNotVipNum = Math.floor((vipStartTime - startTime) / HANG_UP_CONSTS.UNIT_TIME); // 不是vip的时间段数
|
||||
let isVipNum = multi - isNotVipNum; // 是vip的时间段数
|
||||
multi = cal.add(isNotVipNum, cal.mul(isVipNum, VIP.VIP_TOWER_HUNG_UP_RATIO));
|
||||
} else {
|
||||
multi = cal.mul(multi, VIP.VIP_TOWER_HUNG_UP_RATIO);
|
||||
}
|
||||
}
|
||||
|
||||
let needReceiveGoods: {gid: number, count: number}[] = [];// 由于小数,未能领取的奖励
|
||||
let timeReward: {id: number, count: number}[] = []; // 本次奖励
|
||||
for (let { id, count } of baseReward) {
|
||||
let newCount = cal.mul(count, multi);
|
||||
let oldGoods = notReceivedGoods.find(cur => cur.gid == id);
|
||||
if (oldGoods) newCount = cal.add(newCount, oldGoods.count);
|
||||
let roundCount = Math.floor(newCount);
|
||||
if (newCount > roundCount) {
|
||||
needReceiveGoods.push({ gid: id, count: cal.sub(newCount, roundCount) });
|
||||
}
|
||||
if (roundCount > 0) {
|
||||
timeReward.push({ id, count: roundCount })
|
||||
}
|
||||
}
|
||||
return { needReceiveGoods, timeReward }
|
||||
}
|
||||
|
||||
export async function getVipPvpChallengeMaxCnt(roleId: string, vipStartTime?: number) {
|
||||
if(vipStartTime == undefined) {
|
||||
let role = await RoleModel.findByRoleId(roleId, 'vipStartTime');
|
||||
vipStartTime = role.vipStartTime;
|
||||
}
|
||||
let count = PVP.PVP_CHALLENGE_COUNTS;
|
||||
if(vipStartTime > 0) {
|
||||
count += VIP.VIP_PVP_CHALLENGE_COUNTS_ADD;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
export function getVipDailyCnt(timesPerDay: number, role: RoleType) {
|
||||
let vipStartTime = role.vipStartTime;
|
||||
if(vipStartTime > 0) {
|
||||
timesPerDay += VIP.VIP_DAILY_TIMERS_PER_DAY_ADD;
|
||||
}
|
||||
return timesPerDay
|
||||
}
|
||||
|
||||
export function getVipDungeonCnt(vipStartTime: number) {
|
||||
let count = DUNGEON_CONST.DUNGEON_CONST_FREE;
|
||||
if(vipStartTime > 0) {
|
||||
count += VIP.VIP_DUNGEON_CONST_FREE_ADD;
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
export function getVipRegretCnt(vipStartTime: number) {
|
||||
let count = VIP.VIP_REGRET_CNT_WITHOUT_VIP;
|
||||
if(vipStartTime > 0) {
|
||||
count = VIP.VIP_REGRET_CNT_WITH_VIP;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
export function vipCanSkipTower(recommendCeSum: number, heroesCeSum: number, vipStartTime: number) {
|
||||
let ratio = vipStartTime > 0? VIP.VIP_TOWER_SKIP_CE_RATIO_WITH_VIP: VIP.VIP_TOWER_SKIP_CE_RATIO_WITHOUT_VIP;
|
||||
return heroesCeSum > recommendCeSum * ratio;
|
||||
}
|
||||
|
||||
export function vipCanSkipExpedition(recommendCe: number, topLineupCe: number, vipStartTime: number) {
|
||||
return vipStartTime > 0 && topLineupCe > recommendCe * VIP.EXPENDITION_SKIP_CE_RATIO_WITH_VIP;
|
||||
}
|
||||
import { ACTIVITY_TYPE, HANG_UP_CONSTS, ITEM_CHANGE_REASON, MAIL_TYPE, REFRESH_TIME, STATUS } from '@consts';
|
||||
import { ActivityModel, ActivityModelType } from '@db/Activity';
|
||||
import { ActivityMonthlyTicketModel, ActivityMonthlyTicketModelType } from '@db/ActivityMonthlyTicket';
|
||||
import { RewardParam } from '@domain/activityField/rewardField';
|
||||
import { MonthlyTicketData } from '@domain/activityField/monthlyTicketField';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
import moment = require('moment');
|
||||
import { ServerlistModel } from '@db/Serverlist';
|
||||
import { sendMailByContent } from './../mailService';
|
||||
import { RoleModel, RoleType } from '@db/Role';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { RewardInter } from '@pubUtils/interface';
|
||||
import { DUNGEON_CONST, PVP, VIP } from '@pubUtils/dicParam';
|
||||
import { cal, } from '@pubUtils/util';
|
||||
import { stringWithTypeToRewardInter } from '@pubUtils/roleUtil';
|
||||
import { pinus } from 'pinus';
|
||||
import { getGoldId } from '../role/rewardService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function monthlyTicketActivity(serverId: number, roleId: string, type: number) {
|
||||
let activityArray = await getActivitiesByType(serverId, type);
|
||||
activityArray = activityArray.sort((a, b) => {
|
||||
return b.activityId - a.activityId
|
||||
});
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerRecord: ActivityMonthlyTicketModelType = await ActivityMonthlyTicketModel.findMonthlyTicket(serverId, roleId, activityData.activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyTicketData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
if ((playerData.price > 0 && playerData.isOpen) || playerData.price === 0) {
|
||||
if (playerData.todayIndex - 1 > playerData.dayIndex) {//过期还没领取
|
||||
//下发邮件奖励
|
||||
for (let i = playerData.dayIndex + 1; i < playerData.todayIndex; i++) {
|
||||
let goods = stringWithTypeToRewardInter(playerData.baseReward)
|
||||
await sendMailByContent(MAIL_TYPE.MONTHLY_REWARD, roleId, { params: [], goods });
|
||||
}
|
||||
await ActivityMonthlyTicketModel.setDayIndex(serverId, roleId, playerData.activityId, playerData.todayIndex - 1);
|
||||
playerData.dayIndex = playerData.todayIndex - 1;
|
||||
}
|
||||
}
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMonthlyTicketData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord: ActivityMonthlyTicketModelType = await ActivityMonthlyTicketModel.findMonthlyTicket(serverId, roleId, activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyTicketData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家月卡当天的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerMonthlyTicketDayReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number,) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyTicketData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityMonthlyTicketModelType = await ActivityMonthlyTicketModel.findMonthlyTicket(serverId, roleId, activityId);
|
||||
if (playerData.price > 0 && !playerRecord) {//没有购买过
|
||||
return null;
|
||||
}
|
||||
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
if ((playerData.price > 0 && playerData.isOpen) || playerData.price == 0) {
|
||||
if (playerData.todayIndex > playerData.dayIndex) {//今天还没领取
|
||||
await ActivityMonthlyTicketModel.setDayIndex(serverId, roleId, activityId, playerData.todayIndex);
|
||||
let rewardParamArr: Array<RewardParam> = stringToRewardParam(playerData.baseReward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.MONTHLY_TICKET_DAILY)
|
||||
return result
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 结算首次购买月卡的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeMonthlyTicketReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (activityData.type !== ACTIVITY_TYPE.MONTHLY_TICKET_1 && activityData.type !== ACTIVITY_TYPE.MONTHLY_TICKET_2) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
|
||||
if(!await checkMonthlyTicket(roleId, serverId, activityData)) return STATUS.ORDER_CANNOT_BUY;
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new MonthlyTicketData(activityData, createTime, serverTime);
|
||||
|
||||
let endTime = playerData.isForever? moment(playerData.endTime).toDate(): moment(new Date()).startOf('d').add(playerData.days, 'day').add(REFRESH_TIME, 'h').toDate();
|
||||
console.log('endTime', playerData.isForever, moment(new Date()).startOf('d'), endTime, playerData.days)
|
||||
|
||||
await ActivityMonthlyTicketModel.buyMonthlyTicket(serverId, roleId, activityId, activityData.type, endTime, playerData.isForever)
|
||||
if(activityData.type == ACTIVITY_TYPE.MONTHLY_TICKET_2) {
|
||||
let role = await RoleModel.buyForeverTicket(roleId);
|
||||
if(sid) await pinus.app.rpc.connector.connectorRemote.setOtherUserSession.toServer(sid,[{ roleId, vipStartTime: role.vipStartTime }]);
|
||||
}
|
||||
let firstReward = playerData.firstReward;
|
||||
let rewardParamArr: Array<RewardParam> = stringToRewardParam(firstReward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.MONTHLY_TICKET_FIRST)
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item: { isOpen: true, todayIndex: 1 }, activityId: activityData.activityId })
|
||||
}
|
||||
}
|
||||
|
||||
// 是否可以购买月卡
|
||||
export async function checkMonthlyTicket(roleId: string, serverId: number, activityData: ActivityModelType) {
|
||||
if(!activityData) return false;
|
||||
|
||||
let result = await ActivityMonthlyTicketModel.checkHasBought(serverId, roleId, activityData.activityId, activityData.type);
|
||||
return !result;
|
||||
}
|
||||
|
||||
// 军团捐献消耗
|
||||
export function getVipDonateConsume(originConsume: RewardInter, vipStartTime: number) {
|
||||
if(vipStartTime > 0) {
|
||||
if(originConsume.id == getGoldId()) {
|
||||
return [{ id: originConsume.id, count: Math.floor(originConsume.count * VIP.VIP_GUILD_DONATE_COST_GOLD_RATIO) }];
|
||||
} else {
|
||||
return [originConsume];
|
||||
}
|
||||
} else {
|
||||
return [originConsume];
|
||||
}
|
||||
}
|
||||
|
||||
export function getVipHungupReward(startTime: number, endTime: number, baseReward: RewardInter[], notReceivedGoods: {gid: number, count: number}[], vipStartTime: number) {
|
||||
let multi = Math.floor((endTime - startTime) / HANG_UP_CONSTS.UNIT_TIME);
|
||||
if(vipStartTime > 0) {
|
||||
if(vipStartTime > startTime) { // 开始挂机之后买的月卡
|
||||
let isNotVipNum = Math.floor((vipStartTime - startTime) / HANG_UP_CONSTS.UNIT_TIME); // 不是vip的时间段数
|
||||
let isVipNum = multi - isNotVipNum; // 是vip的时间段数
|
||||
multi = cal.add(isNotVipNum, cal.mul(isVipNum, VIP.VIP_TOWER_HUNG_UP_RATIO));
|
||||
} else {
|
||||
multi = cal.mul(multi, VIP.VIP_TOWER_HUNG_UP_RATIO);
|
||||
}
|
||||
}
|
||||
|
||||
let needReceiveGoods: {gid: number, count: number}[] = [];// 由于小数,未能领取的奖励
|
||||
let timeReward: {id: number, count: number}[] = []; // 本次奖励
|
||||
for (let { id, count } of baseReward) {
|
||||
let newCount = cal.mul(count, multi);
|
||||
let oldGoods = notReceivedGoods.find(cur => cur.gid == id);
|
||||
if (oldGoods) newCount = cal.add(newCount, oldGoods.count);
|
||||
let roundCount = Math.floor(newCount);
|
||||
if (newCount > roundCount) {
|
||||
needReceiveGoods.push({ gid: id, count: cal.sub(newCount, roundCount) });
|
||||
}
|
||||
if (roundCount > 0) {
|
||||
timeReward.push({ id, count: roundCount })
|
||||
}
|
||||
}
|
||||
return { needReceiveGoods, timeReward }
|
||||
}
|
||||
|
||||
export async function getVipPvpChallengeMaxCnt(roleId: string, vipStartTime?: number) {
|
||||
if(vipStartTime == undefined) {
|
||||
let role = await RoleModel.findByRoleId(roleId, 'vipStartTime');
|
||||
vipStartTime = role.vipStartTime;
|
||||
}
|
||||
let count = PVP.PVP_CHALLENGE_COUNTS;
|
||||
if(vipStartTime > 0) {
|
||||
count += VIP.VIP_PVP_CHALLENGE_COUNTS_ADD;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
export function getVipDailyCnt(timesPerDay: number, role: RoleType) {
|
||||
let vipStartTime = role.vipStartTime;
|
||||
if(vipStartTime > 0) {
|
||||
timesPerDay += VIP.VIP_DAILY_TIMERS_PER_DAY_ADD;
|
||||
}
|
||||
return timesPerDay
|
||||
}
|
||||
|
||||
export function getVipDungeonCnt(vipStartTime: number) {
|
||||
let count = DUNGEON_CONST.DUNGEON_CONST_FREE;
|
||||
if(vipStartTime > 0) {
|
||||
count += VIP.VIP_DUNGEON_CONST_FREE_ADD;
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
export function getVipRegretCnt(vipStartTime: number) {
|
||||
let count = VIP.VIP_REGRET_CNT_WITHOUT_VIP;
|
||||
if(vipStartTime > 0) {
|
||||
count = VIP.VIP_REGRET_CNT_WITH_VIP;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
export function vipCanSkipTower(recommendCeSum: number, heroesCeSum: number, vipStartTime: number) {
|
||||
let ratio = vipStartTime > 0? VIP.VIP_TOWER_SKIP_CE_RATIO_WITH_VIP: VIP.VIP_TOWER_SKIP_CE_RATIO_WITHOUT_VIP;
|
||||
return heroesCeSum > recommendCeSum * ratio;
|
||||
}
|
||||
|
||||
export function vipCanSkipExpedition(recommendCe: number, topLineupCe: number, vipStartTime: number) {
|
||||
return vipStartTime > 0 && topLineupCe > recommendCe * VIP.EXPENDITION_SKIP_CE_RATIO_WITH_VIP;
|
||||
}
|
||||
|
||||
@@ -1,85 +1,85 @@
|
||||
import { ACTIVITY_TYPE } from '../../consts';
|
||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityNewHeroGKModel, ActivityNewHeroGKModelType } from '../../db/ActivityNewHeroGK';
|
||||
import { NewHeroGKData } from '../../domain/activityField/newHeroGKField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function newHeroGKActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_GK);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerRecord: ActivityNewHeroGKModelType = await ActivityNewHeroGKModel.findData(serverId, activityData.activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NewHeroGKData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerNewHeroGKData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord: ActivityNewHeroGKModelType = await ActivityNewHeroGKModel.findData(serverId, activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NewHeroGKData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 挑战每日关卡成功
|
||||
*
|
||||
* @param {number} activityId 活动id
|
||||
* @param {number} gk 关卡id
|
||||
*
|
||||
*/
|
||||
// export async function challengeNewHeroGK(serverId: number, roleId: string, activityId: number, pageIndex: number, gk: number) {
|
||||
// let isFirst = false;
|
||||
// let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
// let playerRecords = await ActivityNewHeroGKModel.findData(serverId, activityId, roleId);
|
||||
// let records = playerRecords && playerRecords.records ? playerRecords.records : [];
|
||||
|
||||
// let createTime = await getRoleCreateTime(roleId);
|
||||
// let serverTime = await getServerCreateTime(serverId);
|
||||
// let playerData = new NewHeroGKData(activityData, createTime, serverTime);
|
||||
// let item = playerData.findItemByGK(pageIndex, gk);
|
||||
// if (item) {
|
||||
// let index = item.index;
|
||||
// let recordIndex = records.findIndex(obj => { return obj.pageIndex == pageIndex && obj.index == index });
|
||||
// if (recordIndex == -1) {
|
||||
// isFirst = true;
|
||||
// await ActivityNewHeroGKModel.addRecord(serverId, activityId, roleId, pageIndex, index);
|
||||
// }
|
||||
// } else {
|
||||
// console.log('challengeNewHeroGK没有找到对应关卡活动数据', activityId, gk)
|
||||
// }
|
||||
// return isFirst;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
import { ACTIVITY_TYPE } from '@consts';
|
||||
import { ActivityModel, ActivityModelType } from '@db/Activity';
|
||||
import { ActivityNewHeroGKModel, ActivityNewHeroGKModelType } from '@db/ActivityNewHeroGK';
|
||||
import { NewHeroGKData } from '@domain/activityField/newHeroGKField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function newHeroGKActivity(serverId: number, roleId: string) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_GK);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let playerRecord: ActivityNewHeroGKModelType = await ActivityNewHeroGKModel.findData(serverId, activityData.activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NewHeroGKData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerNewHeroGKData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord: ActivityNewHeroGKModelType = await ActivityNewHeroGKModel.findData(serverId, activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NewHeroGKData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 挑战每日关卡成功
|
||||
*
|
||||
* @param {number} activityId 活动id
|
||||
* @param {number} gk 关卡id
|
||||
*
|
||||
*/
|
||||
// export async function challengeNewHeroGK(serverId: number, roleId: string, activityId: number, pageIndex: number, gk: number) {
|
||||
// let isFirst = false;
|
||||
// let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
// let playerRecords = await ActivityNewHeroGKModel.findData(serverId, activityId, roleId);
|
||||
// let records = playerRecords && playerRecords.records ? playerRecords.records : [];
|
||||
|
||||
// let createTime = await getRoleCreateTime(roleId);
|
||||
// let serverTime = await getServerCreateTime(serverId);
|
||||
// let playerData = new NewHeroGKData(activityData, createTime, serverTime);
|
||||
// let item = playerData.findItemByGK(pageIndex, gk);
|
||||
// if (item) {
|
||||
// let index = item.index;
|
||||
// let recordIndex = records.findIndex(obj => { return obj.pageIndex == pageIndex && obj.index == index });
|
||||
// if (recordIndex == -1) {
|
||||
// isFirst = true;
|
||||
// await ActivityNewHeroGKModel.addRecord(serverId, activityId, roleId, pageIndex, index);
|
||||
// }
|
||||
// } else {
|
||||
// console.log('challengeNewHeroGK没有找到对应关卡活动数据', activityId, gk)
|
||||
// }
|
||||
// return isFirst;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,120 +1,120 @@
|
||||
import { ACTIVITY_TYPE } from '../../consts';
|
||||
import { ActivityNewHeroGiftModel, ActivityNewHeroGiftModelType } from '../../db/ActivityNewHeroGift';
|
||||
import { ActivityNewHeroGKModel, ActivityNewHeroGKModelType } from '../../db/ActivityNewHeroGK';
|
||||
import { UserGachaModel, UserGachaType } from '../../db/UserGacha';
|
||||
import { NewHeroGachaData } from '../../domain/activityField/newHeroGachaField';
|
||||
import { NewHeroGiftData } from '../../domain/activityField/newHeroGiftField';
|
||||
import { NewHeroGKData } from '../../domain/activityField/newHeroGKField';
|
||||
import { gameData } from '../../pubUtils/data';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById, pushActivityInter } from './activityService';
|
||||
import { refreshGacha } from './gachaService';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerNewHeroGachaData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NewHeroGachaData(activityData, createTime, serverTime);
|
||||
let userGacha: UserGachaType = await UserGachaModel.findByRole(roleId, playerData.gachaId, activityId);
|
||||
let dicGacha = gameData.gacha.get(playerData.gachaId);
|
||||
userGacha = await refreshGacha(dicGacha, userGacha);
|
||||
if(!userGacha.pickHero) {
|
||||
userGacha = await UserGachaModel.updateInfo(roleId, playerData.gachaId, activityId, { pickHero: playerData.getDefaultHero() })
|
||||
}
|
||||
playerData.setPlayerRecords(userGacha, dicGacha);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerNewHeroGKData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord: ActivityNewHeroGKModelType = await ActivityNewHeroGKModel.findData(serverId, activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NewHeroGKData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 挑战每日关卡成功
|
||||
*
|
||||
* @param {number} activityId 活动id
|
||||
* @param {number} warId 关卡id
|
||||
*
|
||||
*/
|
||||
export async function challengeNewHeroGK(serverId: number, roleId: string, activityId: number, warId: number) {
|
||||
let data = await ActivityNewHeroGKModel.addRecord(serverId, activityId, roleId, warId);
|
||||
let isFirst = data.records.filter(cur => cur.warId == warId).length <= 1;
|
||||
return isFirst;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerNewHeroGiftsData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NewHeroGiftData(activityData, createTime, serverTime);
|
||||
let playerRecord: ActivityNewHeroGiftModelType = await ActivityNewHeroGiftModel.findData(serverId, activityId, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务活动完成后会获得点数
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function newHeroGiftPoint(serverId: number, roleId: string, addPoint: number) {
|
||||
try {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.NEW_HERO_GIFTS);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let playerData = new NewHeroGiftData(activityData, createTime, serverTime);
|
||||
if(playerData.canRecordTaskPoint()) {
|
||||
let result = await ActivityNewHeroGiftModel.addPoint(serverId, activityData.activityId, roleId, addPoint);
|
||||
if(result) pushResult.push({ activityId: activityData.activityId, activityType: activityData.type, param: { totalPoint: result.totalPoint } });
|
||||
}
|
||||
}
|
||||
|
||||
return pushResult
|
||||
} catch(e) {
|
||||
console.error(e);
|
||||
return []
|
||||
}
|
||||
}
|
||||
import { ACTIVITY_TYPE } from '@consts';
|
||||
import { ActivityNewHeroGiftModel, ActivityNewHeroGiftModelType } from '@db/ActivityNewHeroGift';
|
||||
import { ActivityNewHeroGKModel, ActivityNewHeroGKModelType } from '@db/ActivityNewHeroGK';
|
||||
import { UserGachaModel, UserGachaType } from '@db/UserGacha';
|
||||
import { NewHeroGachaData } from '@domain/activityField/newHeroGachaField';
|
||||
import { NewHeroGiftData } from '@domain/activityField/newHeroGiftField';
|
||||
import { NewHeroGKData } from '@domain/activityField/newHeroGKField';
|
||||
import { gameData } from '@pubUtils/data';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById, pushActivityInter } from './activityService';
|
||||
import { refreshGacha } from './gachaService';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerNewHeroGachaData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NewHeroGachaData(activityData, createTime, serverTime);
|
||||
let userGacha: UserGachaType = await UserGachaModel.findByRole(roleId, playerData.gachaId, activityId);
|
||||
let dicGacha = gameData.gacha.get(playerData.gachaId);
|
||||
userGacha = await refreshGacha(dicGacha, userGacha);
|
||||
if(!userGacha.pickHero) {
|
||||
userGacha = await UserGachaModel.updateInfo(roleId, playerData.gachaId, activityId, { pickHero: playerData.getDefaultHero() })
|
||||
}
|
||||
playerData.setPlayerRecords(userGacha, dicGacha);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerNewHeroGKData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord: ActivityNewHeroGKModelType = await ActivityNewHeroGKModel.findData(serverId, activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NewHeroGKData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 挑战每日关卡成功
|
||||
*
|
||||
* @param {number} activityId 活动id
|
||||
* @param {number} warId 关卡id
|
||||
*
|
||||
*/
|
||||
export async function challengeNewHeroGK(serverId: number, roleId: string, activityId: number, warId: number) {
|
||||
let data = await ActivityNewHeroGKModel.addRecord(serverId, activityId, roleId, warId);
|
||||
let isFirst = data.records.filter(cur => cur.warId == warId).length <= 1;
|
||||
return isFirst;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerNewHeroGiftsData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NewHeroGiftData(activityData, createTime, serverTime);
|
||||
let playerRecord: ActivityNewHeroGiftModelType = await ActivityNewHeroGiftModel.findData(serverId, activityId, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务活动完成后会获得点数
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function newHeroGiftPoint(serverId: number, roleId: string, addPoint: number) {
|
||||
try {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.NEW_HERO_GIFTS);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let playerData = new NewHeroGiftData(activityData, createTime, serverTime);
|
||||
if(playerData.canRecordTaskPoint()) {
|
||||
let result = await ActivityNewHeroGiftModel.addPoint(serverId, activityData.activityId, roleId, addPoint);
|
||||
if(result) pushResult.push({ activityId: activityData.activityId, activityType: activityData.type, param: { totalPoint: result.totalPoint } });
|
||||
}
|
||||
}
|
||||
|
||||
return pushResult
|
||||
} catch(e) {
|
||||
console.error(e);
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
import { ActivityNovemberRecModel } from "../../db/ActivityNovemberRec";
|
||||
import { NovemberData } from "../../domain/activityField/novemberField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
export async function getPlayerNovemberData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NovemberData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityNovemberRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
export async function getPlayerNovemberDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerNovemberData(activityId, serverId, roleId);
|
||||
if (playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
import { ActivityNovemberRecModel } from "@db/ActivityNovemberRec";
|
||||
import { NovemberData } from "@domain/activityField/novemberField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
export async function getPlayerNovemberData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new NovemberData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityNovemberRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
export async function getPlayerNovemberDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerNovemberData(activityId, serverId, roleId);
|
||||
if (playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,36 +1,36 @@
|
||||
import { ActivityData } from "../../domain/activityField/activityField";
|
||||
import { PopNoticeData } from "../../domain/activityField/popNotice";
|
||||
import { ShopData } from "../../domain/roleField/shop";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPopNoticeData(serverId: number, activityId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let playerData = new PopNoticeData(activityData, createTime, serverTime);
|
||||
if(playerData.needActivityTime()) {
|
||||
let { activityId } = playerData.param;
|
||||
let curActivity = await getActivityById(activityId);
|
||||
let data = new ActivityData(curActivity, createTime, serverTime);
|
||||
playerData.setActivityTime(Math.floor(data.beginTime/1000), Math.floor(data.nextRefreshTime/1000));
|
||||
}
|
||||
if(playerData.needShopTime()) {
|
||||
let { activityId, shopItemId } = playerData.param;
|
||||
let curActivity = await getActivityById(activityId);
|
||||
let data = new ShopData(curActivity, createTime, serverTime);
|
||||
let item = data.findByItemId(shopItemId);
|
||||
if(item) playerData.setActivityTime(item.beginTime, item.endTime)
|
||||
}
|
||||
delete playerData.param;
|
||||
return playerData;
|
||||
}
|
||||
import { ActivityData } from "@domain/activityField/activityField";
|
||||
import { PopNoticeData } from "@domain/activityField/popNotice";
|
||||
import { ShopData } from "@domain/roleField/shop";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPopNoticeData(serverId: number, activityId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let playerData = new PopNoticeData(activityData, createTime, serverTime);
|
||||
if(playerData.needActivityTime()) {
|
||||
let { activityId } = playerData.param;
|
||||
let curActivity = await getActivityById(activityId);
|
||||
let data = new ActivityData(curActivity, createTime, serverTime);
|
||||
playerData.setActivityTime(Math.floor(data.beginTime/1000), Math.floor(data.nextRefreshTime/1000));
|
||||
}
|
||||
if(playerData.needShopTime()) {
|
||||
let { activityId, shopItemId } = playerData.param;
|
||||
let curActivity = await getActivityById(activityId);
|
||||
let data = new ShopData(curActivity, createTime, serverTime);
|
||||
let item = data.findByItemId(shopItemId);
|
||||
if(item) playerData.setActivityTime(item.beginTime, item.endTime)
|
||||
}
|
||||
delete playerData.param;
|
||||
return playerData;
|
||||
}
|
||||
|
||||
@@ -1,203 +1,203 @@
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, PUSH_BATCH, PUSH_INTERVAL, STATUS } from '../../consts';
|
||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
||||
import { PopShopItem, PopUpConditionParamInter, PopUpShopData, PopUpShopPackage, PopUpShopItemShow, } from '../../domain/activityField/popUpShopField';
|
||||
import { RewardParam } from '../../domain/activityField/rewardField';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
import { ActivityPopUpShopModel, ActivityPopUpShopModelType, PopUpShopItem } from '../../db/ActivityPopUpShop';
|
||||
import { ServerlistModel } from '../../db/Serverlist';
|
||||
import moment = require('moment');
|
||||
import { getActivitiesByType, getActivityById, pushActivities, pushActivityInter, pushSingleActivity } from './activityService';
|
||||
import { RoleModel, RoleType } from '../../db/Role';
|
||||
import { HeroType } from '../../db/Hero';
|
||||
import { pinus } from 'pinus';
|
||||
import { getRandEelm, getRandSingleEelm } from '../../pubUtils/util';
|
||||
import { getAllOnlineRoles } from '../redisService';
|
||||
import { GachaResultIndb } from '../../domain/activityField/gachaField';
|
||||
import { gameData } from '../../pubUtils/data';
|
||||
import { ActivityPopUpShopRecModel } from '../../db/ActivityPopUpShopRec';
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPopUpShopData(activityId: number, serverId: number, roleId: string, role?: RoleType) {
|
||||
if(!role) role = await RoleModel.findByRoleId(roleId, 'roleId totalPay lv');
|
||||
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecords = await ActivityPopUpShopModel.findAllEffectData(serverId, activityId, roleId);
|
||||
let latestRecords = await ActivityPopUpShopModel.findAllLastData(serverId, activityId, roleId);
|
||||
|
||||
let playerData = new PopUpShopData(activityData);
|
||||
playerData.setPlayerRecords(playerRecords, latestRecords, role.totalPay, role.lv);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getPopUpShopDataShow(activityId: number, serverId: number, roleId: string, role?: RoleType) {
|
||||
let playerData = await getPopUpShopData(activityId, serverId, roleId, role);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
export async function checkPopUpConditionInCreateHero(serverId: number, roleId: string, result: GachaResultIndb[]) {
|
||||
let conditions = result.map(gachaResult => {
|
||||
let dicHero = gameData.hero.get(gachaResult?.hid);
|
||||
return { conditionType: POP_UP_SHOP_CONDITION_TYPE.GET_HERO_BY_QUALITY, param: { quality: dicHero?.quality } };
|
||||
});
|
||||
return await checkPopUpConditions(serverId, roleId, conditions);
|
||||
}
|
||||
|
||||
export async function checkPopUpCondition(serverId: number, roleId: string, conditionType: POP_UP_SHOP_CONDITION_TYPE, param: PopUpConditionParamInter, sid?: string) {
|
||||
return await checkPopUpConditions(serverId, roleId, [{ conditionType, param }], sid);
|
||||
}
|
||||
|
||||
export async function checkPopUpConditionInEntry(serverId: number, roleId: string, sid: string) {
|
||||
let guilds = pinus.app.getServersByType('guild');
|
||||
let guild = getRandSingleEelm(guilds);
|
||||
let isAuctionPopUpShow = await pinus.app.rpc.guild.guildActivityRemote.getAuctionPopUpShow.toServer(guild.id);
|
||||
if(isAuctionPopUpShow) {
|
||||
await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.AUCTION, {}, sid);
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkPopUpConditionWhenGuildActivityEnd() {
|
||||
let allOnlineUsers = await getAllOnlineRoles();
|
||||
let n = Math.ceil(allOnlineUsers.length / PUSH_BATCH); // 一共多少批
|
||||
|
||||
let i = -1;
|
||||
let interval = setInterval(async () => {
|
||||
if (++i < n) {
|
||||
// console.log('****', i)
|
||||
let users = allOnlineUsers.slice(i * PUSH_BATCH, (i + 1) * PUSH_BATCH - 1);
|
||||
// console.log('****', users)
|
||||
for(let { serverId, roleId, sid } of users) {
|
||||
await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.AUCTION, {}, sid);
|
||||
}
|
||||
} else {
|
||||
clearInterval(interval);
|
||||
}
|
||||
}, PUSH_INTERVAL);
|
||||
}
|
||||
|
||||
// 弹出礼包任务
|
||||
export async function checkPopUpConditions(serverId: number, roleId: string, conditions: { conditionType: POP_UP_SHOP_CONDITION_TYPE, param: PopUpConditionParamInter }[], sid?: string) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.POP_UP_SHOP);
|
||||
let pushData: pushActivityInter[] = [];
|
||||
for(let { activityId, type: activityType } of activities) {
|
||||
|
||||
let playerData = await getPopUpShopData(activityId, serverId, roleId);
|
||||
let pushItems: PopUpShopItemShow[] = [];
|
||||
for(let { conditionType, param } of conditions) {
|
||||
for(let pkg of playerData.packages) {
|
||||
// console.log('##### 3', pkg.id, pkg.checkPackageCanPush(conditionType))
|
||||
if( !pkg.checkPackageCanPush(conditionType)) { // 筛选推送
|
||||
continue;
|
||||
}
|
||||
let effectTimes = await pkg.getEffectTime();
|
||||
if(conditionType == POP_UP_SHOP_CONDITION_TYPE.EQUIP_STAR) {
|
||||
let result = await ActivityPopUpShopRecModel.addRecord(serverId, activityId, roleId, pkg.id, effectTimes.effectBeginTime, effectTimes.effectEndTime, conditionType, param.equipStar);
|
||||
param.equipStarSum = result.num;
|
||||
}
|
||||
|
||||
let items = pkg.getItemsByCondition(param);
|
||||
if(items.length > 0) {
|
||||
|
||||
let map = new Map<string, PopShopItem[]>();
|
||||
for(let item of items) {
|
||||
if(!map.has(item.param)) {
|
||||
map.set(item.param, []);
|
||||
}
|
||||
map.get(item.param).push(item);
|
||||
}
|
||||
for(let [_, items] of map) {
|
||||
let popUpShopRec = await ActivityPopUpShopModel.createRecord({
|
||||
serverId, activityId, roleId, id: pkg.id,
|
||||
...effectTimes,
|
||||
items: items.map(item => new PopUpShopItem(item))
|
||||
});
|
||||
let result = pkg.pushPackage(popUpShopRec);
|
||||
pushItems.push(...result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// console.log('##### 5', pushItems.length)
|
||||
if(pushItems.length > 0) {
|
||||
pushData.push({ activityId, activityType, param: { popUpShopItems: pushItems } });
|
||||
}
|
||||
}
|
||||
// console.log('##### 6', pushData.length)
|
||||
return await pushActivities(pushData, roleId, sid);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 结算购买礼包的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makePopUpShopReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string, paramStr: string, roleInfo: RoleType) {
|
||||
if (!paramStr) {
|
||||
return STATUS.ORDER_PARAM_ERROR;
|
||||
}
|
||||
let paramObj = JSON.parse(paramStr);
|
||||
let code = paramObj.code;
|
||||
|
||||
let playerData = await getPopUpShopData(activityId, serverId, roleId, roleInfo);
|
||||
if (!playerData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (playerData.type !== ACTIVITY_TYPE.POP_UP_SHOP) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
|
||||
let playerRecord: ActivityPopUpShopModelType = await ActivityPopUpShopModel.addRecord(serverId, activityId, roleId, code, productID);
|
||||
if (!playerRecord) {
|
||||
return STATUS.APPLY_ORDER_ERROR;
|
||||
}
|
||||
let item = playerData.updateRecord(playerRecord, productID);
|
||||
if(!item) return STATUS.NO_PRODUCT_ID
|
||||
|
||||
let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.POP_UP_BUY_GIFT)
|
||||
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item: item, activityId })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkPopUpShopCanBuy(roleId: string, serverId: number, activityId: number, productID: string, paramStr: string) {
|
||||
if (!paramStr) {
|
||||
return false;
|
||||
}
|
||||
let paramObj = JSON.parse(paramStr);
|
||||
let code = paramObj.code;
|
||||
|
||||
let playerData = await getPopUpShopData(activityId, serverId, roleId);
|
||||
if (!playerData) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let playerRecord: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findByCode(serverId, activityId, roleId, code);
|
||||
if (!playerRecord) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let item = playerData.checkItem(playerRecord, productID);
|
||||
if(!item) return false;
|
||||
|
||||
return true
|
||||
}
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, PUSH_BATCH, PUSH_INTERVAL, STATUS } from '@consts';
|
||||
import { ActivityModel, ActivityModelType } from '@db/Activity';
|
||||
import { PopShopItem, PopUpConditionParamInter, PopUpShopData, PopUpShopPackage, PopUpShopItemShow, } from '@domain/activityField/popUpShopField';
|
||||
import { RewardParam } from '@domain/activityField/rewardField';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
import { ActivityPopUpShopModel, ActivityPopUpShopModelType, PopUpShopItem } from '@db/ActivityPopUpShop';
|
||||
import { ServerlistModel } from '@db/Serverlist';
|
||||
import moment = require('moment');
|
||||
import { getActivitiesByType, getActivityById, pushActivities, pushActivityInter, pushSingleActivity } from './activityService';
|
||||
import { RoleModel, RoleType } from '@db/Role';
|
||||
import { HeroType } from '@db/Hero';
|
||||
import { pinus } from 'pinus';
|
||||
import { getRandEelm, getRandSingleEelm } from '@pubUtils/util';
|
||||
import { getAllOnlineRoles } from '../redisService';
|
||||
import { GachaResultIndb } from '@domain/activityField/gachaField';
|
||||
import { gameData } from '@pubUtils/data';
|
||||
import { ActivityPopUpShopRecModel } from '@db/ActivityPopUpShopRec';
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPopUpShopData(activityId: number, serverId: number, roleId: string, role?: RoleType) {
|
||||
if(!role) role = await RoleModel.findByRoleId(roleId, 'roleId totalPay lv');
|
||||
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecords = await ActivityPopUpShopModel.findAllEffectData(serverId, activityId, roleId);
|
||||
let latestRecords = await ActivityPopUpShopModel.findAllLastData(serverId, activityId, roleId);
|
||||
|
||||
let playerData = new PopUpShopData(activityData);
|
||||
playerData.setPlayerRecords(playerRecords, latestRecords, role.totalPay, role.lv);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getPopUpShopDataShow(activityId: number, serverId: number, roleId: string, role?: RoleType) {
|
||||
let playerData = await getPopUpShopData(activityId, serverId, roleId, role);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
export async function checkPopUpConditionInCreateHero(serverId: number, roleId: string, result: GachaResultIndb[]) {
|
||||
let conditions = result.map(gachaResult => {
|
||||
let dicHero = gameData.hero.get(gachaResult?.hid);
|
||||
return { conditionType: POP_UP_SHOP_CONDITION_TYPE.GET_HERO_BY_QUALITY, param: { quality: dicHero?.quality } };
|
||||
});
|
||||
return await checkPopUpConditions(serverId, roleId, conditions);
|
||||
}
|
||||
|
||||
export async function checkPopUpCondition(serverId: number, roleId: string, conditionType: POP_UP_SHOP_CONDITION_TYPE, param: PopUpConditionParamInter, sid?: string) {
|
||||
return await checkPopUpConditions(serverId, roleId, [{ conditionType, param }], sid);
|
||||
}
|
||||
|
||||
export async function checkPopUpConditionInEntry(serverId: number, roleId: string, sid: string) {
|
||||
let guilds = pinus.app.getServersByType('guild');
|
||||
let guild = getRandSingleEelm(guilds);
|
||||
let isAuctionPopUpShow = await pinus.app.rpc.guild.guildActivityRemote.getAuctionPopUpShow.toServer(guild.id);
|
||||
if(isAuctionPopUpShow) {
|
||||
await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.AUCTION, {}, sid);
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkPopUpConditionWhenGuildActivityEnd() {
|
||||
let allOnlineUsers = await getAllOnlineRoles();
|
||||
let n = Math.ceil(allOnlineUsers.length / PUSH_BATCH); // 一共多少批
|
||||
|
||||
let i = -1;
|
||||
let interval = setInterval(async () => {
|
||||
if (++i < n) {
|
||||
// console.log('****', i)
|
||||
let users = allOnlineUsers.slice(i * PUSH_BATCH, (i + 1) * PUSH_BATCH - 1);
|
||||
// console.log('****', users)
|
||||
for(let { serverId, roleId, sid } of users) {
|
||||
await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.AUCTION, {}, sid);
|
||||
}
|
||||
} else {
|
||||
clearInterval(interval);
|
||||
}
|
||||
}, PUSH_INTERVAL);
|
||||
}
|
||||
|
||||
// 弹出礼包任务
|
||||
export async function checkPopUpConditions(serverId: number, roleId: string, conditions: { conditionType: POP_UP_SHOP_CONDITION_TYPE, param: PopUpConditionParamInter }[], sid?: string) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.POP_UP_SHOP);
|
||||
let pushData: pushActivityInter[] = [];
|
||||
for(let { activityId, type: activityType } of activities) {
|
||||
|
||||
let playerData = await getPopUpShopData(activityId, serverId, roleId);
|
||||
let pushItems: PopUpShopItemShow[] = [];
|
||||
for(let { conditionType, param } of conditions) {
|
||||
for(let pkg of playerData.packages) {
|
||||
// console.log('##### 3', pkg.id, pkg.checkPackageCanPush(conditionType))
|
||||
if( !pkg.checkPackageCanPush(conditionType)) { // 筛选推送
|
||||
continue;
|
||||
}
|
||||
let effectTimes = await pkg.getEffectTime();
|
||||
if(conditionType == POP_UP_SHOP_CONDITION_TYPE.EQUIP_STAR) {
|
||||
let result = await ActivityPopUpShopRecModel.addRecord(serverId, activityId, roleId, pkg.id, effectTimes.effectBeginTime, effectTimes.effectEndTime, conditionType, param.equipStar);
|
||||
param.equipStarSum = result.num;
|
||||
}
|
||||
|
||||
let items = pkg.getItemsByCondition(param);
|
||||
if(items.length > 0) {
|
||||
|
||||
let map = new Map<string, PopShopItem[]>();
|
||||
for(let item of items) {
|
||||
if(!map.has(item.param)) {
|
||||
map.set(item.param, []);
|
||||
}
|
||||
map.get(item.param).push(item);
|
||||
}
|
||||
for(let [_, items] of map) {
|
||||
let popUpShopRec = await ActivityPopUpShopModel.createRecord({
|
||||
serverId, activityId, roleId, id: pkg.id,
|
||||
...effectTimes,
|
||||
items: items.map(item => new PopUpShopItem(item))
|
||||
});
|
||||
let result = pkg.pushPackage(popUpShopRec);
|
||||
pushItems.push(...result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// console.log('##### 5', pushItems.length)
|
||||
if(pushItems.length > 0) {
|
||||
pushData.push({ activityId, activityType, param: { popUpShopItems: pushItems } });
|
||||
}
|
||||
}
|
||||
// console.log('##### 6', pushData.length)
|
||||
return await pushActivities(pushData, roleId, sid);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 结算购买礼包的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makePopUpShopReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string, paramStr: string, roleInfo: RoleType) {
|
||||
if (!paramStr) {
|
||||
return STATUS.ORDER_PARAM_ERROR;
|
||||
}
|
||||
let paramObj = JSON.parse(paramStr);
|
||||
let code = paramObj.code;
|
||||
|
||||
let playerData = await getPopUpShopData(activityId, serverId, roleId, roleInfo);
|
||||
if (!playerData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (playerData.type !== ACTIVITY_TYPE.POP_UP_SHOP) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
|
||||
let playerRecord: ActivityPopUpShopModelType = await ActivityPopUpShopModel.addRecord(serverId, activityId, roleId, code, productID);
|
||||
if (!playerRecord) {
|
||||
return STATUS.APPLY_ORDER_ERROR;
|
||||
}
|
||||
let item = playerData.updateRecord(playerRecord, productID);
|
||||
if(!item) return STATUS.NO_PRODUCT_ID
|
||||
|
||||
let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.POP_UP_BUY_GIFT)
|
||||
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item: item, activityId })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkPopUpShopCanBuy(roleId: string, serverId: number, activityId: number, productID: string, paramStr: string) {
|
||||
if (!paramStr) {
|
||||
return false;
|
||||
}
|
||||
let paramObj = JSON.parse(paramStr);
|
||||
let code = paramObj.code;
|
||||
|
||||
let playerData = await getPopUpShopData(activityId, serverId, roleId);
|
||||
if (!playerData) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let playerRecord: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findByCode(serverId, activityId, roleId, code);
|
||||
if (!playerRecord) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let item = playerData.checkItem(playerRecord, productID);
|
||||
if(!item) return false;
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
import { ActivityQixiRecModel } from "../../db/ActivityQixiRec";
|
||||
import { QixiData } from "../../domain/activityField/qixiField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerQixiData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new QixiData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityQixiRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerQixiDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerQixiData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
import { ActivityQixiRecModel } from "@db/ActivityQixiRec";
|
||||
import { QixiData } from "@domain/activityField/qixiField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerQixiData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new QixiData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityQixiRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerQixiDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerQixiData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,42 +1,42 @@
|
||||
import { HistoryOrderModel } from "../../db/HistoryOrder";
|
||||
import { UserModel } from "../../db/User";
|
||||
import { RebateData } from "../../domain/activityField/rebateField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRebateData(activityId: number, serverId: number, roleId: string, uid: number) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RebateData(activityData, createTime, serverTime);
|
||||
let user = await UserModel.findUserByUid(uid);
|
||||
if(user.channelId) {
|
||||
let playerRecords = await HistoryOrderModel.findByChannelId(user.channelId);
|
||||
playerData.setPlayerRecords(playerRecords, user);
|
||||
}
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据显示
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRebateDataShow(activityId: number, serverId: number, roleId: string, uid: number) {
|
||||
let playerData = await getPlayerRebateData(activityId, serverId, roleId, uid);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
import { HistoryOrderModel } from "@db/HistoryOrder";
|
||||
import { UserModel } from "@db/User";
|
||||
import { RebateData } from "@domain/activityField/rebateField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRebateData(activityId: number, serverId: number, roleId: string, uid: number) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RebateData(activityData, createTime, serverTime);
|
||||
let user = await UserModel.findUserByUid(uid);
|
||||
if(user.channelId) {
|
||||
let playerRecords = await HistoryOrderModel.findByChannelId(user.channelId);
|
||||
playerData.setPlayerRecords(playerRecords, user);
|
||||
}
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据显示
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRebateDataShow(activityId: number, serverId: number, roleId: string, uid: number) {
|
||||
let playerData = await getPlayerRebateData(activityId, serverId, roleId, uid);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,63 +1,63 @@
|
||||
import { ActivityRechargeMoneyModel, ActivityRechargeMoneyModelType } from '../../db/ActivityRechargeMoney';
|
||||
import { RechargeMoneyData } from '../../domain/activityField/rechargeMoneyField';
|
||||
import { getActivitiesByType, getActivityById, pushActivities, pushActivityInter } from './activityService';
|
||||
import { ACTIVITY_TYPE } from '../../consts';
|
||||
import { getRoleCreateTime, getRoleOnlineInfo, getServerCreateTime } from '../redisService';
|
||||
import { getZeroPointD, getZeroPointOfTime } from '../../pubUtils/timeUtil';
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRechargeMoneyData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RechargeMoneyData(activityData, createTime, serverTime);
|
||||
let beginTime = new Date(getZeroPointOfTime(playerData.beginTime));
|
||||
let endTime = new Date(getZeroPointD().getTime() + 24 * 60 * 60 * 1000);
|
||||
let playerRecord: ActivityRechargeMoneyModelType[] = await ActivityRechargeMoneyModel.findDataByTime(serverId, roleId, beginTime, endTime);
|
||||
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getPlayerRechargeMoneyDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerRechargeMoneyData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计充值金额
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} RMB 金额
|
||||
*
|
||||
*/
|
||||
export async function addRechargeMoney(roleId: string, serverId: number, RMB: number) {
|
||||
let beginTime = getZeroPointD();
|
||||
let endTime = new Date(getZeroPointD().getTime() + 24 * 60 * 60 * 1000);
|
||||
let result = await ActivityRechargeMoneyModel.addRMB(serverId, roleId, RMB, beginTime, endTime);
|
||||
if(result.RMB == RMB) { // 获得木签的时候推送给在线玩家
|
||||
let onlineUser = await getRoleOnlineInfo(roleId);
|
||||
if(!!onlineUser.sid) {
|
||||
let result: pushActivityInter[] = [];
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.RECHARGE_MONEY);
|
||||
for(let { activityId, type: activityType } of activities) {
|
||||
let playerData = await getPlayerRechargeMoneyData(activityId, serverId, roleId);
|
||||
result.push({ activityId, activityType, param: { ticketCnt: playerData.ticketCnt } });
|
||||
}
|
||||
|
||||
await pushActivities(result, roleId, onlineUser.sid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
import { ActivityRechargeMoneyModel, ActivityRechargeMoneyModelType } from '@db/ActivityRechargeMoney';
|
||||
import { RechargeMoneyData } from '@domain/activityField/rechargeMoneyField';
|
||||
import { getActivitiesByType, getActivityById, pushActivities, pushActivityInter } from './activityService';
|
||||
import { ACTIVITY_TYPE } from '@consts';
|
||||
import { getRoleCreateTime, getRoleOnlineInfo, getServerCreateTime } from '../redisService';
|
||||
import { getZeroPointD, getZeroPointOfTime } from '@pubUtils/timeUtil';
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRechargeMoneyData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RechargeMoneyData(activityData, createTime, serverTime);
|
||||
let beginTime = new Date(getZeroPointOfTime(playerData.beginTime));
|
||||
let endTime = new Date(getZeroPointD().getTime() + 24 * 60 * 60 * 1000);
|
||||
let playerRecord: ActivityRechargeMoneyModelType[] = await ActivityRechargeMoneyModel.findDataByTime(serverId, roleId, beginTime, endTime);
|
||||
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getPlayerRechargeMoneyDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerRechargeMoneyData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计充值金额
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} RMB 金额
|
||||
*
|
||||
*/
|
||||
export async function addRechargeMoney(roleId: string, serverId: number, RMB: number) {
|
||||
let beginTime = getZeroPointD();
|
||||
let endTime = new Date(getZeroPointD().getTime() + 24 * 60 * 60 * 1000);
|
||||
let result = await ActivityRechargeMoneyModel.addRMB(serverId, roleId, RMB, beginTime, endTime);
|
||||
if(result.RMB == RMB) { // 获得木签的时候推送给在线玩家
|
||||
let onlineUser = await getRoleOnlineInfo(roleId);
|
||||
if(!!onlineUser.sid) {
|
||||
let result: pushActivityInter[] = [];
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.RECHARGE_MONEY);
|
||||
for(let { activityId, type: activityType } of activities) {
|
||||
let playerData = await getPlayerRechargeMoneyData(activityId, serverId, roleId);
|
||||
result.push({ activityId, activityType, param: { ticketCnt: playerData.ticketCnt } });
|
||||
}
|
||||
|
||||
await pushActivities(result, roleId, onlineUser.sid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,174 +1,174 @@
|
||||
import moment = require('moment');
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from '../../consts';
|
||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityRefreshShopModel, ActivityRefreshShopModelType } from '../../db/ActivityRefreshShop';
|
||||
import { RoleModel } from '../../db/Role';
|
||||
import { ServerlistModel } from '../../db/Serverlist';
|
||||
import { RefreshShopData } from '../../domain/activityField/refreshShopField';
|
||||
import { deltaDays } from '../../pubUtils/util';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function getRefreshShopActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.REFRESH_SHOP);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityRefreshShopModelType = await ActivityRefreshShopModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
if (!playerRecord) {//生成商店可购买商品的数据
|
||||
let { lv } = await RoleModel.findByRoleId(roleId);
|
||||
let randomGoods = playerData.randomGoodsItems(lv);
|
||||
playerRecord = await ActivityRefreshShopModel.createShop(activityData.activityId, roleId, playerData.roundIndex, randomGoods);
|
||||
}
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家商店数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRefreshShopData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let role = await RoleModel.findByRoleId(roleId, 'lv createTime');
|
||||
let createTime = await getRoleCreateTime(roleId, role);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityRefreshShopModelType = await ActivityRefreshShopModel.findData(activityId, roleId, playerData.roundIndex);
|
||||
if (!playerRecord) {//生成商店可购买商品的数据
|
||||
let randomGoods = playerData.randomGoodsItems(role.lv);
|
||||
playerRecord = await ActivityRefreshShopModel.createShop(activityData.activityId, roleId, playerData.roundIndex, randomGoods);
|
||||
}
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家商店数据(指定回合数,大富翁商店每回合刷新)
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRefreshShopDataByRoundIndex(activityId: number, serverId: number, roleId: string, roundIndex: number) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let role = await RoleModel.findByRoleId(roleId, 'lv createTime');
|
||||
let createTime = await getRoleCreateTime(roleId, role);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshShopData(activityData, createTime, serverTime);
|
||||
playerData.roundIndex = roundIndex;
|
||||
let playerRecord: ActivityRefreshShopModelType = await ActivityRefreshShopModel.findData(activityId, roleId, playerData.roundIndex);
|
||||
if (!playerRecord) {//生成商店可购买商品的数据
|
||||
let randomGoods = playerData.randomGoodsItems(role.lv);
|
||||
playerRecord = await ActivityRefreshShopModel.createShop(activityData.activityId, roleId, playerData.roundIndex, randomGoods);
|
||||
}
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动第几天
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function newPlayerActivityDays(roleId: string) {
|
||||
let { createTime } = await RoleModel.findByRoleId(roleId);
|
||||
let createDate = moment(createTime * 1000).toDate();
|
||||
let todayIndex = deltaDays(createDate, new Date, true) + 1;
|
||||
return todayIndex;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 结算购买的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
* @param {number} roundIndex 大富翁重置回合数
|
||||
*
|
||||
*/
|
||||
export async function makeRefreshShopReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string, roundIndex: number) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.REFRESH_SHOP) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshShopData(activityData, createTime, serverTime);
|
||||
if (roundIndex) {
|
||||
playerData.roundIndex = roundIndex;
|
||||
}
|
||||
|
||||
let playerRecord: ActivityRefreshShopModelType = await ActivityRefreshShopModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
let item = playerData.findItemByProductID(productID);
|
||||
if (!item) {
|
||||
return STATUS.ACTIVITY_NO_PRODUCT;
|
||||
}
|
||||
if (item.countMax > 0 && item.buyCount >= item.countMax) {
|
||||
return STATUS.ACTIVITY_MAX_COUNT;
|
||||
}
|
||||
|
||||
let rewardArray = stringToRewardParam(item.reward)
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardArray, ITEM_CHANGE_REASON.BUY_REFRESH_SHOP);
|
||||
|
||||
await ActivityRefreshShopModel.addRecord(activityId, roleId, playerData.roundIndex, item.pageIndex, item.id, 1);
|
||||
|
||||
item.buyCount += 1;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item: item, activityId: activityId })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkRefreshShop(roleId: string, serverId: number, activityData: ActivityModelType, productID: string, roundIndex: number) {
|
||||
if (!activityData) return false;
|
||||
if (activityData.type !== ACTIVITY_TYPE.REFRESH_SHOP) return false;
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshShopData(activityData, createTime, serverTime);
|
||||
|
||||
if(!roundIndex) {
|
||||
roundIndex = playerData.roundIndex;
|
||||
}
|
||||
let playerRecord: ActivityRefreshShopModelType = await ActivityRefreshShopModel.findData(activityData.activityId, roleId, roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
let item = playerData.findItemByProductID(productID);
|
||||
if (!item) return false;
|
||||
if (item.countMax > 0 && item.buyCount >= item.countMax) return false;
|
||||
return true;
|
||||
}
|
||||
import moment = require('moment');
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from '@consts';
|
||||
import { ActivityModel, ActivityModelType } from '@db/Activity';
|
||||
import { ActivityRefreshShopModel, ActivityRefreshShopModelType } from '@db/ActivityRefreshShop';
|
||||
import { RoleModel } from '@db/Role';
|
||||
import { ServerlistModel } from '@db/Serverlist';
|
||||
import { RefreshShopData } from '@domain/activityField/refreshShopField';
|
||||
import { deltaDays } from '@pubUtils/util';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function getRefreshShopActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.REFRESH_SHOP);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityRefreshShopModelType = await ActivityRefreshShopModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
if (!playerRecord) {//生成商店可购买商品的数据
|
||||
let { lv } = await RoleModel.findByRoleId(roleId);
|
||||
let randomGoods = playerData.randomGoodsItems(lv);
|
||||
playerRecord = await ActivityRefreshShopModel.createShop(activityData.activityId, roleId, playerData.roundIndex, randomGoods);
|
||||
}
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家商店数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRefreshShopData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let role = await RoleModel.findByRoleId(roleId, 'lv createTime');
|
||||
let createTime = await getRoleCreateTime(roleId, role);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecord: ActivityRefreshShopModelType = await ActivityRefreshShopModel.findData(activityId, roleId, playerData.roundIndex);
|
||||
if (!playerRecord) {//生成商店可购买商品的数据
|
||||
let randomGoods = playerData.randomGoodsItems(role.lv);
|
||||
playerRecord = await ActivityRefreshShopModel.createShop(activityData.activityId, roleId, playerData.roundIndex, randomGoods);
|
||||
}
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家商店数据(指定回合数,大富翁商店每回合刷新)
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRefreshShopDataByRoundIndex(activityId: number, serverId: number, roleId: string, roundIndex: number) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let role = await RoleModel.findByRoleId(roleId, 'lv createTime');
|
||||
let createTime = await getRoleCreateTime(roleId, role);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshShopData(activityData, createTime, serverTime);
|
||||
playerData.roundIndex = roundIndex;
|
||||
let playerRecord: ActivityRefreshShopModelType = await ActivityRefreshShopModel.findData(activityId, roleId, playerData.roundIndex);
|
||||
if (!playerRecord) {//生成商店可购买商品的数据
|
||||
let randomGoods = playerData.randomGoodsItems(role.lv);
|
||||
playerRecord = await ActivityRefreshShopModel.createShop(activityData.activityId, roleId, playerData.roundIndex, randomGoods);
|
||||
}
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动第几天
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function newPlayerActivityDays(roleId: string) {
|
||||
let { createTime } = await RoleModel.findByRoleId(roleId);
|
||||
let createDate = moment(createTime * 1000).toDate();
|
||||
let todayIndex = deltaDays(createDate, new Date, true) + 1;
|
||||
return todayIndex;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 结算购买的奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
* @param {number} roundIndex 大富翁重置回合数
|
||||
*
|
||||
*/
|
||||
export async function makeRefreshShopReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string, roundIndex: number) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.REFRESH_SHOP) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshShopData(activityData, createTime, serverTime);
|
||||
if (roundIndex) {
|
||||
playerData.roundIndex = roundIndex;
|
||||
}
|
||||
|
||||
let playerRecord: ActivityRefreshShopModelType = await ActivityRefreshShopModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
let item = playerData.findItemByProductID(productID);
|
||||
if (!item) {
|
||||
return STATUS.ACTIVITY_NO_PRODUCT;
|
||||
}
|
||||
if (item.countMax > 0 && item.buyCount >= item.countMax) {
|
||||
return STATUS.ACTIVITY_MAX_COUNT;
|
||||
}
|
||||
|
||||
let rewardArray = stringToRewardParam(item.reward)
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardArray, ITEM_CHANGE_REASON.BUY_REFRESH_SHOP);
|
||||
|
||||
await ActivityRefreshShopModel.addRecord(activityId, roleId, playerData.roundIndex, item.pageIndex, item.id, 1);
|
||||
|
||||
item.buyCount += 1;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item: item, activityId: activityId })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkRefreshShop(roleId: string, serverId: number, activityData: ActivityModelType, productID: string, roundIndex: number) {
|
||||
if (!activityData) return false;
|
||||
if (activityData.type !== ACTIVITY_TYPE.REFRESH_SHOP) return false;
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshShopData(activityData, createTime, serverTime);
|
||||
|
||||
if(!roundIndex) {
|
||||
roundIndex = playerData.roundIndex;
|
||||
}
|
||||
let playerRecord: ActivityRefreshShopModelType = await ActivityRefreshShopModel.findData(activityData.activityId, roleId, roundIndex);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
|
||||
let item = playerData.findItemByProductID(productID);
|
||||
if (!item) return false;
|
||||
if (item.countMax > 0 && item.buyCount >= item.countMax) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
import { ACTIVITY_TYPE } from '../../consts';
|
||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityRefreshTaskModel, ActivityRefreshTaskModelType } from '../../db/ActivityRefreshTask';
|
||||
import { ActivityRefreshTaskPointModel, ActivityRefreshTaskPointModelType } from '../../db/ActivityRefreshTaskPoint';
|
||||
import { RefreshTaskData } from '../../domain/activityField/refreshTaskField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRefreshTaskData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshTaskData(activityData, createTime, serverTime);
|
||||
let playerRecords: ActivityRefreshTaskModelType[] = await ActivityRefreshTaskModel.findData(serverId, activityId, roleId, playerData.roundIndex);
|
||||
let pointRecordData: ActivityRefreshTaskPointModelType = await ActivityRefreshTaskPointModel.findData(serverId, activityId, roleId);
|
||||
playerData.setPlayerRecords(playerRecords, pointRecordData);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
import { ACTIVITY_TYPE } from '@consts';
|
||||
import { ActivityModel, ActivityModelType } from '@db/Activity';
|
||||
import { ActivityRefreshTaskModel, ActivityRefreshTaskModelType } from '@db/ActivityRefreshTask';
|
||||
import { ActivityRefreshTaskPointModel, ActivityRefreshTaskPointModelType } from '@db/ActivityRefreshTaskPoint';
|
||||
import { RefreshTaskData } from '@domain/activityField/refreshTaskField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
|
||||
/**
|
||||
* 玩家玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerRefreshTaskData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new RefreshTaskData(activityData, createTime, serverTime);
|
||||
let playerRecords: ActivityRefreshTaskModelType[] = await ActivityRefreshTaskModel.findData(serverId, activityId, roleId, playerData.roundIndex);
|
||||
let pointRecordData: ActivityRefreshTaskPointModelType = await ActivityRefreshTaskPointModel.findData(serverId, activityId, roleId);
|
||||
playerData.setPlayerRecords(playerRecords, pointRecordData);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,161 +1,161 @@
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, REFRESH_TIME, STATUS } from '../../consts';
|
||||
import { ActivityModelType } from '../../db/Activity';
|
||||
import { ActivitySelfServiceGoodsModel, ActivitySelfServiceGoodsModelType } from '../../db/ActivitySelfServiceGoods';
|
||||
import { ActivitySelfServiceShopModel, ActivitySelfServiceShopModelType } from '../../db/ActivitySelfServiceShop';
|
||||
import { ActivitySelfServiceModel } from '../../db/ActivitySelfService';
|
||||
import { RewardParam } from '../../domain/activityField/rewardField';
|
||||
import { SelfServiceShopData, SelfServiceShopItem } from '../../domain/activityField/selfServiceShopField';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
import moment = require('moment');
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getSelfServiceShopActivityData(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.SELF_SERVICE_SHOP);
|
||||
activityArray = activityArray.sort((a, b) => {
|
||||
return b.activityId - a.activityId
|
||||
});
|
||||
if (activityArray.length > 0) {
|
||||
let activityData = activityArray[0];
|
||||
let playerData = await getPlayerActivityData(activityData.activityId, serverId, roleId);
|
||||
return playerData;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerActivityData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SelfServiceShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecords: ActivitySelfServiceShopModelType[] = await ActivitySelfServiceShopModel.findDataByPriceType(serverId, activityId, roleId, playerData.roundIndex);
|
||||
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
let playerSelfServerData = await ActivitySelfServiceModel.findData(serverId, activityId, roleId, playerData.roundIndex);
|
||||
let buyCount = (playerSelfServerData && playerSelfServerData.unitBuyCount) ? playerSelfServerData.unitBuyCount : 0;
|
||||
playerData.unitBuyCount = buyCount;
|
||||
let challengeBeginTime = null;
|
||||
let challengeEndTime = null;
|
||||
let curDate = moment(new Date());
|
||||
if (curDate.hour() < REFRESH_TIME) {
|
||||
challengeBeginTime = moment(new Date()).startOf('d').add(-1, 'd').add(REFRESH_TIME, 'h').toDate();
|
||||
challengeEndTime = moment(challengeBeginTime).add(1, 'd').toDate()
|
||||
} else {
|
||||
challengeBeginTime = moment(new Date()).startOf('d').add(REFRESH_TIME, 'h').toDate();
|
||||
challengeEndTime = moment(challengeBeginTime).add(1, 'd').toDate()
|
||||
}
|
||||
let records = (playerSelfServerData && playerSelfServerData.challengeRecords) ? playerSelfServerData.challengeRecords : [];
|
||||
for (let record of records) {
|
||||
// console.log(challengeBeginTime, challengeEndTime, record.time)
|
||||
if (record.time >= challengeBeginTime && record.time <= challengeEndTime) {
|
||||
playerData.challengeCount++;
|
||||
}
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 结算礼包
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {number} roundIndex 周期数
|
||||
* @param {number} index 货架
|
||||
* @param {number} price 价格
|
||||
* @param {number} priceType 价格类型
|
||||
*
|
||||
*/
|
||||
|
||||
export async function addSelfServiceShopGiftReward(roleId: string, roleName: string, sid: string, serverId: number, activityId: number, roundIndex: number, index: number, item: SelfServiceShopItem) {
|
||||
let playerGoods: ActivitySelfServiceGoodsModelType[] = await ActivitySelfServiceGoodsModel.findDataByIndex(activityId, roleId, roundIndex, index);
|
||||
|
||||
let rewardArray: Array<RewardParam> = [];
|
||||
for (let obj of playerGoods) {
|
||||
let selectedIndex = obj.rewardIndex;
|
||||
let cellIndex = obj.cellIndex;
|
||||
let giftData = item.findCellIndex(cellIndex);
|
||||
let rewards: Array<RewardParam> = stringToRewardParam(giftData.gift);
|
||||
rewardArray = rewardArray.concat(rewards[selectedIndex])
|
||||
}
|
||||
let goodsStr = '';
|
||||
for (let obj of rewardArray) {
|
||||
goodsStr += `${obj.type}&${obj.id}&${obj.count}|`;
|
||||
}
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardArray, ITEM_CHANGE_REASON.SELF_SERVICE_SHOP_BUY_GIFT);
|
||||
//购买记录
|
||||
console.log('dddddddd', rewardArray.length, serverId, activityId, roleId, roundIndex, index, goodsStr, JSON.stringify(item))
|
||||
await ActivitySelfServiceShopModel.addBuyRecord(serverId, activityId, roleId, roundIndex, index, goodsStr);
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 购买自选礼包
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeSelfServerShop(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SelfServiceShopData(activityData, createTime, serverTime);
|
||||
let item: SelfServiceShopItem = playerData.getItemByProductID(productID);
|
||||
if (!item) {
|
||||
return STATUS.ACTIVITY_DATA_ERROR
|
||||
}
|
||||
if (item.countMax > 0) {//限制购买次数
|
||||
let playerRecords: ActivitySelfServiceShopModelType[] = await ActivitySelfServiceShopModel.findDataByIndex(serverId, activityId, roleId, playerData.roundIndex, item.index);
|
||||
if (playerRecords.length >= item.countMax) {
|
||||
return STATUS.ACTIVITY_MAX_COUNT
|
||||
}
|
||||
}
|
||||
let result = await addSelfServiceShopGiftReward(roleId, roleName, sid, serverId, activityId, playerData.roundIndex, item.index, item);
|
||||
item.buyCount += 1;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkSelfServiceShop(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false;
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SelfServiceShopData(activityData, createTime, serverTime);
|
||||
let item: SelfServiceShopItem = playerData.getItemByProductID(productID);
|
||||
if (!item) return false
|
||||
if (item.countMax > 0) {//限制购买次数
|
||||
let playerRecords = await ActivitySelfServiceShopModel.findDataByIndex(serverId, activityData.activityId, roleId, playerData.roundIndex, item.index);
|
||||
if (playerRecords.length >= item.countMax) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, REFRESH_TIME, STATUS } from '@consts';
|
||||
import { ActivityModelType } from '@db/Activity';
|
||||
import { ActivitySelfServiceGoodsModel, ActivitySelfServiceGoodsModelType } from '@db/ActivitySelfServiceGoods';
|
||||
import { ActivitySelfServiceShopModel, ActivitySelfServiceShopModelType } from '@db/ActivitySelfServiceShop';
|
||||
import { ActivitySelfServiceModel } from '@db/ActivitySelfService';
|
||||
import { RewardParam } from '@domain/activityField/rewardField';
|
||||
import { SelfServiceShopData, SelfServiceShopItem } from '@domain/activityField/selfServiceShopField';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
import moment = require('moment');
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getSelfServiceShopActivityData(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.SELF_SERVICE_SHOP);
|
||||
activityArray = activityArray.sort((a, b) => {
|
||||
return b.activityId - a.activityId
|
||||
});
|
||||
if (activityArray.length > 0) {
|
||||
let activityData = activityArray[0];
|
||||
let playerData = await getPlayerActivityData(activityData.activityId, serverId, roleId);
|
||||
return playerData;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerActivityData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SelfServiceShopData(activityData, createTime, serverTime);
|
||||
|
||||
let playerRecords: ActivitySelfServiceShopModelType[] = await ActivitySelfServiceShopModel.findDataByPriceType(serverId, activityId, roleId, playerData.roundIndex);
|
||||
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
let playerSelfServerData = await ActivitySelfServiceModel.findData(serverId, activityId, roleId, playerData.roundIndex);
|
||||
let buyCount = (playerSelfServerData && playerSelfServerData.unitBuyCount) ? playerSelfServerData.unitBuyCount : 0;
|
||||
playerData.unitBuyCount = buyCount;
|
||||
let challengeBeginTime = null;
|
||||
let challengeEndTime = null;
|
||||
let curDate = moment(new Date());
|
||||
if (curDate.hour() < REFRESH_TIME) {
|
||||
challengeBeginTime = moment(new Date()).startOf('d').add(-1, 'd').add(REFRESH_TIME, 'h').toDate();
|
||||
challengeEndTime = moment(challengeBeginTime).add(1, 'd').toDate()
|
||||
} else {
|
||||
challengeBeginTime = moment(new Date()).startOf('d').add(REFRESH_TIME, 'h').toDate();
|
||||
challengeEndTime = moment(challengeBeginTime).add(1, 'd').toDate()
|
||||
}
|
||||
let records = (playerSelfServerData && playerSelfServerData.challengeRecords) ? playerSelfServerData.challengeRecords : [];
|
||||
for (let record of records) {
|
||||
// console.log(challengeBeginTime, challengeEndTime, record.time)
|
||||
if (record.time >= challengeBeginTime && record.time <= challengeEndTime) {
|
||||
playerData.challengeCount++;
|
||||
}
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 结算礼包
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {number} roundIndex 周期数
|
||||
* @param {number} index 货架
|
||||
* @param {number} price 价格
|
||||
* @param {number} priceType 价格类型
|
||||
*
|
||||
*/
|
||||
|
||||
export async function addSelfServiceShopGiftReward(roleId: string, roleName: string, sid: string, serverId: number, activityId: number, roundIndex: number, index: number, item: SelfServiceShopItem) {
|
||||
let playerGoods: ActivitySelfServiceGoodsModelType[] = await ActivitySelfServiceGoodsModel.findDataByIndex(activityId, roleId, roundIndex, index);
|
||||
|
||||
let rewardArray: Array<RewardParam> = [];
|
||||
for (let obj of playerGoods) {
|
||||
let selectedIndex = obj.rewardIndex;
|
||||
let cellIndex = obj.cellIndex;
|
||||
let giftData = item.findCellIndex(cellIndex);
|
||||
let rewards: Array<RewardParam> = stringToRewardParam(giftData.gift);
|
||||
rewardArray = rewardArray.concat(rewards[selectedIndex])
|
||||
}
|
||||
let goodsStr = '';
|
||||
for (let obj of rewardArray) {
|
||||
goodsStr += `${obj.type}&${obj.id}&${obj.count}|`;
|
||||
}
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardArray, ITEM_CHANGE_REASON.SELF_SERVICE_SHOP_BUY_GIFT);
|
||||
//购买记录
|
||||
console.log('dddddddd', rewardArray.length, serverId, activityId, roleId, roundIndex, index, goodsStr, JSON.stringify(item))
|
||||
await ActivitySelfServiceShopModel.addBuyRecord(serverId, activityId, roleId, roundIndex, index, goodsStr);
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 购买自选礼包
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeSelfServerShop(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SelfServiceShopData(activityData, createTime, serverTime);
|
||||
let item: SelfServiceShopItem = playerData.getItemByProductID(productID);
|
||||
if (!item) {
|
||||
return STATUS.ACTIVITY_DATA_ERROR
|
||||
}
|
||||
if (item.countMax > 0) {//限制购买次数
|
||||
let playerRecords: ActivitySelfServiceShopModelType[] = await ActivitySelfServiceShopModel.findDataByIndex(serverId, activityId, roleId, playerData.roundIndex, item.index);
|
||||
if (playerRecords.length >= item.countMax) {
|
||||
return STATUS.ACTIVITY_MAX_COUNT
|
||||
}
|
||||
}
|
||||
let result = await addSelfServiceShopGiftReward(roleId, roleName, sid, serverId, activityId, playerData.roundIndex, item.index, item);
|
||||
item.buyCount += 1;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkSelfServiceShop(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false;
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SelfServiceShopData(activityData, createTime, serverTime);
|
||||
let item: SelfServiceShopItem = playerData.getItemByProductID(productID);
|
||||
if (!item) return false
|
||||
if (item.countMax > 0) {//限制购买次数
|
||||
let playerRecords = await ActivitySelfServiceShopModel.findDataByIndex(serverId, activityData.activityId, roleId, playerData.roundIndex, item.index);
|
||||
if (playerRecords.length >= item.countMax) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,129 +1,129 @@
|
||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
||||
import { ActivityGrowthModel, ActivityGrowthModelType } from '../../db/ActivityGrowth';
|
||||
import { ActivityGrowthPointModel, ActivityGrowthPointModelType } from '../../db/ActivityGrowthPoint';
|
||||
import { SevenDaysData } from '../../domain/activityField/sevenDaysField';
|
||||
import { ActivityDailyChallengesModel, ActivityDailyChallengesModelType } from '../../db/ActivityDailyChallenges';
|
||||
import { ActivityDailyGiftsModel, ActivityDailyGiftsModelType } from '../../db/ActivityDailyGifts';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function sevenDaysActivity(serverId: number, roleId: string, type: number) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, type);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SevenDaysData(activityData, createTime, serverTime);
|
||||
//成长数据
|
||||
let playerGrowthRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityData.activityId, roleId);
|
||||
let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityData.activityId, roleId);
|
||||
playerData.growth.setPlayerRecords(playerGrowthRecords);
|
||||
playerData.growth.setPlayerPointRecord(playerPointRecord);
|
||||
//今日挑战
|
||||
let playerDailyChallengeRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityData.activityId, roleId);
|
||||
playerData.dailyChallenge.setPlayerRecords(playerDailyChallengeRecords);
|
||||
//每日特惠礼包
|
||||
let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityData.activityId, roleId);
|
||||
playerData.dailyGift.setPlayerRecords(playerRecords);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerSevenDaysData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SevenDaysData(activityData, createTime, serverTime);
|
||||
//成长数据
|
||||
let playerGrowthRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityId, roleId);
|
||||
let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityId, roleId);
|
||||
playerData.growth.setPlayerRecords(playerGrowthRecords);
|
||||
playerData.growth.setPlayerPointRecord(playerPointRecord);
|
||||
//今日挑战
|
||||
let playerDailyChallengeRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityId, roleId);
|
||||
playerData.dailyChallenge.setPlayerRecords(playerDailyChallengeRecords);
|
||||
//每日特惠礼包
|
||||
let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityId, roleId);
|
||||
playerData.dailyGift.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家成长数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerSevenDaysGrowthData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SevenDaysData(activityData, createTime, serverTime);
|
||||
//成长数据
|
||||
let playerGrowthRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityId, roleId);
|
||||
let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityId, roleId);
|
||||
playerData.growth.setPlayerRecords(playerGrowthRecords);
|
||||
playerData.growth.setPlayerPointRecord(playerPointRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家今日挑战数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerSevenDaysDailyChallengesData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SevenDaysData(activityData, createTime, serverTime);
|
||||
//今日挑战
|
||||
let playerDailyChallengeRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityId, roleId);
|
||||
playerData.dailyChallenge.setPlayerRecords(playerDailyChallengeRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家每日特惠礼包数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerSevenDaysDailyGiftsData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SevenDaysData(activityData, createTime, serverTime);
|
||||
//每日特惠礼包
|
||||
let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityId, roleId);
|
||||
playerData.dailyGift.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
import { ActivityModel, ActivityModelType } from '@db/Activity';
|
||||
import { ActivityGrowthModel, ActivityGrowthModelType } from '@db/ActivityGrowth';
|
||||
import { ActivityGrowthPointModel, ActivityGrowthPointModelType } from '@db/ActivityGrowthPoint';
|
||||
import { SevenDaysData } from '@domain/activityField/sevenDaysField';
|
||||
import { ActivityDailyChallengesModel, ActivityDailyChallengesModelType } from '@db/ActivityDailyChallenges';
|
||||
import { ActivityDailyGiftsModel, ActivityDailyGiftsModelType } from '@db/ActivityDailyGifts';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function sevenDaysActivity(serverId: number, roleId: string, type: number) {
|
||||
let activityDataArray = await getActivitiesByType(serverId, type);
|
||||
if (activityDataArray.length === 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData: ActivityModelType = activityDataArray[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SevenDaysData(activityData, createTime, serverTime);
|
||||
//成长数据
|
||||
let playerGrowthRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityData.activityId, roleId);
|
||||
let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityData.activityId, roleId);
|
||||
playerData.growth.setPlayerRecords(playerGrowthRecords);
|
||||
playerData.growth.setPlayerPointRecord(playerPointRecord);
|
||||
//今日挑战
|
||||
let playerDailyChallengeRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityData.activityId, roleId);
|
||||
playerData.dailyChallenge.setPlayerRecords(playerDailyChallengeRecords);
|
||||
//每日特惠礼包
|
||||
let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityData.activityId, roleId);
|
||||
playerData.dailyGift.setPlayerRecords(playerRecords);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerSevenDaysData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SevenDaysData(activityData, createTime, serverTime);
|
||||
//成长数据
|
||||
let playerGrowthRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityId, roleId);
|
||||
let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityId, roleId);
|
||||
playerData.growth.setPlayerRecords(playerGrowthRecords);
|
||||
playerData.growth.setPlayerPointRecord(playerPointRecord);
|
||||
//今日挑战
|
||||
let playerDailyChallengeRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityId, roleId);
|
||||
playerData.dailyChallenge.setPlayerRecords(playerDailyChallengeRecords);
|
||||
//每日特惠礼包
|
||||
let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityId, roleId);
|
||||
playerData.dailyGift.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家成长数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerSevenDaysGrowthData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SevenDaysData(activityData, createTime, serverTime);
|
||||
//成长数据
|
||||
let playerGrowthRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityId, roleId);
|
||||
let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityId, roleId);
|
||||
playerData.growth.setPlayerRecords(playerGrowthRecords);
|
||||
playerData.growth.setPlayerPointRecord(playerPointRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 玩家今日挑战数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerSevenDaysDailyChallengesData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SevenDaysData(activityData, createTime, serverTime);
|
||||
//今日挑战
|
||||
let playerDailyChallengeRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityId, roleId);
|
||||
playerData.dailyChallenge.setPlayerRecords(playerDailyChallengeRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家每日特惠礼包数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerSevenDaysDailyGiftsData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SevenDaysData(activityData, createTime, serverTime);
|
||||
//每日特惠礼包
|
||||
let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityId, roleId);
|
||||
playerData.dailyGift.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
@@ -1,164 +1,164 @@
|
||||
import moment = require('moment');
|
||||
import { ACTIVITY_TYPE, MAIL_TYPE, SERVER_OPEN_TIME, SIGNIN_VIP_OPEN_LIMIT, STATUS } from '../../consts';
|
||||
import { ActivityModelType } from '../../db/Activity';
|
||||
import { ActivitySignInModel, ActivitySignInModelType } from '../../db/ActivitySignIn';
|
||||
import { SignInData } from '../../domain/activityField/signInField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { RewardInter } from '../../pubUtils/interface';
|
||||
import { stringToRewardInter } from './giftPackageService';
|
||||
import { sendMailByContent } from '../mailService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} type 普通、高级 ACTIVITY_TYPE
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function signInActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.SIGN_IN);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SignInData(activityData, createTime, serverTime);
|
||||
let curDate = moment(new Date()).valueOf();
|
||||
if (curDate < playerData.beginTime || curDate > playerData.endTime) {//未开启
|
||||
return null;
|
||||
}
|
||||
let playerRecords: ActivitySignInModelType = await ActivitySignInModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} type 普通、高级 ACTIVITY_TYPE
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function signInVIPActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.SIGN_IN_VIP);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SignInData(activityData, createTime, serverTime);
|
||||
|
||||
let curDate = moment(new Date()).valueOf();
|
||||
if (curDate < playerData.beginTime || curDate > playerData.endTime) {//未开启
|
||||
return null;
|
||||
}
|
||||
|
||||
let playerRecords: ActivitySignInModelType = await ActivitySignInModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerSignInData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
if (activityData.type !== ACTIVITY_TYPE.SIGN_IN_VIP && activityData.type !== ACTIVITY_TYPE.SIGN_IN && activityData.type !== ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN
|
||||
&& activityData.type !== ACTIVITY_TYPE.COMMON_SIGN_IN) {
|
||||
return null;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let playerData = new SignInData(activityData, createTime, serverTime);
|
||||
let playerRecords: ActivitySignInModelType = await ActivitySignInModel.findData(activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 购买vip签到
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeSignInVIP(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (activityData.type !== ACTIVITY_TYPE.SIGN_IN_VIP && activityData.type !== ACTIVITY_TYPE.COMMON_SIGN_IN) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let playerData = await getPlayerSignInData(activityId, serverId, roleId);
|
||||
if (!playerData || playerData.isVip) {
|
||||
return STATUS.ORDER_CANNOT_BUY;
|
||||
}
|
||||
await ActivitySignInModel.buyVIP(activityId, roleId, playerData.roundIndex);
|
||||
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign({}, { item: { isVip: true }, activityId: activityData.activityId })
|
||||
}
|
||||
}
|
||||
|
||||
//高级签到开启条件
|
||||
export async function canBuyVip(lv: number) {
|
||||
//高级签到开启条件
|
||||
let openTime = SERVER_OPEN_TIME;
|
||||
if (moment(openTime).valueOf() + 24 * 60 * 60 * 1000 * 8 > moment(new Date()).valueOf()) {//开服时间8天后才能开启vip签到
|
||||
return false;
|
||||
}
|
||||
if (lv < SIGNIN_VIP_OPEN_LIMIT) {//玩家等级大于等于15级才能开启vip签到
|
||||
return false
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
export async function checkSignInCanBuy(roleId: string, serverId: number, activityId: number, productID: string) {
|
||||
|
||||
let playerData = await getPlayerSignInData(activityId, serverId, roleId);
|
||||
if (!playerData || playerData.isVip) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// 补发签到邮件
|
||||
export async function repairSignInMail(playerData: SignInData) {
|
||||
if(!playerData || playerData.productID == '&') return;
|
||||
let playerRecords = await ActivitySignInModel.findByActivity(playerData.activityId, 1);
|
||||
let hasRepaireRoleIds: string[] = []
|
||||
for(let playerRecord of playerRecords) {
|
||||
if(playerRecord.hasRepair) continue;
|
||||
let notSendGoods: RewardInter[] = [];
|
||||
let records = playerRecord.records||[];
|
||||
for(let item of playerData.list) {
|
||||
let curRec = records.find(rec => rec.dayIndex == item.dayIndex);
|
||||
if(!curRec) {
|
||||
notSendGoods.push(...stringToRewardInter(item.reward));
|
||||
}
|
||||
}
|
||||
if(notSendGoods.length > 0) {
|
||||
await sendMailByContent(MAIL_TYPE.REPAIRE_SIGN_IN, playerRecord.roleId, { goods: notSendGoods });
|
||||
hasRepaireRoleIds.push(playerRecord.roleId);
|
||||
}
|
||||
}
|
||||
await ActivitySignInModel.repairSignIn(playerData.activityId, hasRepaireRoleIds);
|
||||
}
|
||||
import moment = require('moment');
|
||||
import { ACTIVITY_TYPE, MAIL_TYPE, SERVER_OPEN_TIME, SIGNIN_VIP_OPEN_LIMIT, STATUS } from '@consts';
|
||||
import { ActivityModelType } from '@db/Activity';
|
||||
import { ActivitySignInModel, ActivitySignInModelType } from '@db/ActivitySignIn';
|
||||
import { SignInData } from '@domain/activityField/signInField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { RewardInter } from '@pubUtils/interface';
|
||||
import { stringToRewardInter } from './giftPackageService';
|
||||
import { sendMailByContent } from '../mailService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} type 普通、高级 ACTIVITY_TYPE
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function signInActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.SIGN_IN);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SignInData(activityData, createTime, serverTime);
|
||||
let curDate = moment(new Date()).valueOf();
|
||||
if (curDate < playerData.beginTime || curDate > playerData.endTime) {//未开启
|
||||
return null;
|
||||
}
|
||||
let playerRecords: ActivitySignInModelType = await ActivitySignInModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} type 普通、高级 ACTIVITY_TYPE
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function signInVIPActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.SIGN_IN_VIP);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new SignInData(activityData, createTime, serverTime);
|
||||
|
||||
let curDate = moment(new Date()).valueOf();
|
||||
if (curDate < playerData.beginTime || curDate > playerData.endTime) {//未开启
|
||||
return null;
|
||||
}
|
||||
|
||||
let playerRecords: ActivitySignInModelType = await ActivitySignInModel.findData(activityData.activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerSignInData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
if (activityData.type !== ACTIVITY_TYPE.SIGN_IN_VIP && activityData.type !== ACTIVITY_TYPE.SIGN_IN && activityData.type !== ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN
|
||||
&& activityData.type !== ACTIVITY_TYPE.COMMON_SIGN_IN) {
|
||||
return null;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let playerData = new SignInData(activityData, createTime, serverTime);
|
||||
let playerRecords: ActivitySignInModelType = await ActivitySignInModel.findData(activityId, roleId, playerData.roundIndex);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 购买vip签到
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeSignInVIP(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (activityData.type !== ACTIVITY_TYPE.SIGN_IN_VIP && activityData.type !== ACTIVITY_TYPE.COMMON_SIGN_IN) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let playerData = await getPlayerSignInData(activityId, serverId, roleId);
|
||||
if (!playerData || playerData.isVip) {
|
||||
return STATUS.ORDER_CANNOT_BUY;
|
||||
}
|
||||
await ActivitySignInModel.buyVIP(activityId, roleId, playerData.roundIndex);
|
||||
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign({}, { item: { isVip: true }, activityId: activityData.activityId })
|
||||
}
|
||||
}
|
||||
|
||||
//高级签到开启条件
|
||||
export async function canBuyVip(lv: number) {
|
||||
//高级签到开启条件
|
||||
let openTime = SERVER_OPEN_TIME;
|
||||
if (moment(openTime).valueOf() + 24 * 60 * 60 * 1000 * 8 > moment(new Date()).valueOf()) {//开服时间8天后才能开启vip签到
|
||||
return false;
|
||||
}
|
||||
if (lv < SIGNIN_VIP_OPEN_LIMIT) {//玩家等级大于等于15级才能开启vip签到
|
||||
return false
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
export async function checkSignInCanBuy(roleId: string, serverId: number, activityId: number, productID: string) {
|
||||
|
||||
let playerData = await getPlayerSignInData(activityId, serverId, roleId);
|
||||
if (!playerData || playerData.isVip) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// 补发签到邮件
|
||||
export async function repairSignInMail(playerData: SignInData) {
|
||||
if(!playerData || playerData.productID == '&') return;
|
||||
let playerRecords = await ActivitySignInModel.findByActivity(playerData.activityId, 1);
|
||||
let hasRepaireRoleIds: string[] = []
|
||||
for(let playerRecord of playerRecords) {
|
||||
if(playerRecord.hasRepair) continue;
|
||||
let notSendGoods: RewardInter[] = [];
|
||||
let records = playerRecord.records||[];
|
||||
for(let item of playerData.list) {
|
||||
let curRec = records.find(rec => rec.dayIndex == item.dayIndex);
|
||||
if(!curRec) {
|
||||
notSendGoods.push(...stringToRewardInter(item.reward));
|
||||
}
|
||||
}
|
||||
if(notSendGoods.length > 0) {
|
||||
await sendMailByContent(MAIL_TYPE.REPAIRE_SIGN_IN, playerRecord.roleId, { goods: notSendGoods });
|
||||
hasRepaireRoleIds.push(playerRecord.roleId);
|
||||
}
|
||||
}
|
||||
await ActivitySignInModel.repairSignIn(playerData.activityId, hasRepaireRoleIds);
|
||||
}
|
||||
|
||||
@@ -1,100 +1,100 @@
|
||||
import { ACTIVITY_TYPE, STATUS } from "../../consts";
|
||||
import { ActivityModelType } from "../../db/Activity";
|
||||
import { ActivityTaskPassModel } from "../../db/ActivityTaskPass";
|
||||
import { TaskPassData } from "../../domain/activityField/taskPassField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivitiesByType, getActivityById, pushActivityInter } from "./activityService";
|
||||
|
||||
export async function getTaskPassData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TaskPassData(activityData, createTime, serverTime);
|
||||
let record = await ActivityTaskPassModel.findData(serverId, activityId, roleId, playerData.roundIndex);
|
||||
|
||||
playerData.setPlayerRecord(record);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getTaskPassDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getTaskPassData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 购买高级战令
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeTaskPass(roleId: string, roleName: string, sid: string, serverId: number, activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.TASK_PASS) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TaskPassData(activityData, createTime, serverTime);
|
||||
let roundIndex = playerData.roundIndex;
|
||||
let checkResult = await ActivityTaskPassModel.check(serverId, activityData.activityId, roleId, roundIndex, productID);
|
||||
if(checkResult) return STATUS.ORDER_CANNOT_BUY;
|
||||
|
||||
await ActivityTaskPassModel.buy(serverId, activityId, roleId, roundIndex, productID);
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign({}, { item: { roundIndex }, activityId: activityId })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkTaskPass(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false;
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TaskPassData(activityData, createTime, serverTime);
|
||||
let roundIndex = playerData.roundIndex;
|
||||
|
||||
let checkResult = await ActivityTaskPassModel.check(serverId, activityData.activityId, roleId, roundIndex, productID);
|
||||
return !checkResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务活动完成后会获得点数
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function addTaskPassPoint(serverId: number, roleId: string, addPoint: number) {
|
||||
try {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.TASK_PASS);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let playerData = new TaskPassData(activityData, createTime, serverTime);
|
||||
if(playerData.canShow()) {
|
||||
let result = await ActivityTaskPassModel.addPoint(serverId, activityData.activityId, roleId, playerData.roundIndex, addPoint);
|
||||
if(result) pushResult.push({ activityId: activityData.activityId, activityType: activityData.type, param: { totalPoint: result.totalPoint } });
|
||||
}
|
||||
}
|
||||
|
||||
return pushResult
|
||||
} catch(e) {
|
||||
console.error(e);
|
||||
return []
|
||||
}
|
||||
}
|
||||
import { ACTIVITY_TYPE, STATUS } from "@consts";
|
||||
import { ActivityModelType } from "@db/Activity";
|
||||
import { ActivityTaskPassModel } from "@db/ActivityTaskPass";
|
||||
import { TaskPassData } from "@domain/activityField/taskPassField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivitiesByType, getActivityById, pushActivityInter } from "./activityService";
|
||||
|
||||
export async function getTaskPassData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TaskPassData(activityData, createTime, serverTime);
|
||||
let record = await ActivityTaskPassModel.findData(serverId, activityId, roleId, playerData.roundIndex);
|
||||
|
||||
playerData.setPlayerRecord(record);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getTaskPassDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getTaskPassData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 购买高级战令
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeTaskPass(roleId: string, roleName: string, sid: string, serverId: number, activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.TASK_PASS) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TaskPassData(activityData, createTime, serverTime);
|
||||
let roundIndex = playerData.roundIndex;
|
||||
let checkResult = await ActivityTaskPassModel.check(serverId, activityData.activityId, roleId, roundIndex, productID);
|
||||
if(checkResult) return STATUS.ORDER_CANNOT_BUY;
|
||||
|
||||
await ActivityTaskPassModel.buy(serverId, activityId, roleId, roundIndex, productID);
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign({}, { item: { roundIndex }, activityId: activityId })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkTaskPass(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false;
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TaskPassData(activityData, createTime, serverTime);
|
||||
let roundIndex = playerData.roundIndex;
|
||||
|
||||
let checkResult = await ActivityTaskPassModel.check(serverId, activityData.activityId, roleId, roundIndex, productID);
|
||||
return !checkResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务活动完成后会获得点数
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function addTaskPassPoint(serverId: number, roleId: string, addPoint: number) {
|
||||
try {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.TASK_PASS);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let pushResult: pushActivityInter[] = [];
|
||||
for(let activityData of activities) {
|
||||
let playerData = new TaskPassData(activityData, createTime, serverTime);
|
||||
if(playerData.canShow()) {
|
||||
let result = await ActivityTaskPassModel.addPoint(serverId, activityData.activityId, roleId, playerData.roundIndex, addPoint);
|
||||
if(result) pushResult.push({ activityId: activityData.activityId, activityType: activityData.type, param: { totalPoint: result.totalPoint } });
|
||||
}
|
||||
}
|
||||
|
||||
return pushResult
|
||||
} catch(e) {
|
||||
console.error(e);
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,72 +1,72 @@
|
||||
import { ActivityThirtyDaysModel, ActivityThirtyDaysModelType } from '../../db/ActivityThirtyDays';
|
||||
import { ThirtyDaysData } from '../../domain/activityField/thirtyDaysField';
|
||||
import { ActivityThirtyDaysPointRewardModel, ActivityThirtyDaysPointRewardModelType } from '../../db/ActivityThirtyDaysPointReward';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function thirtyDaysActivity(type: number, serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, type);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerData = await getPlayerThirtyDaysData(activityData.activityId, serverId, roleId);
|
||||
|
||||
return playerData
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerThirtyDaysData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecords: ActivityThirtyDaysModelType[] = await ActivityThirtyDaysModel.findData(serverId, activityId, roleId);
|
||||
let playerPointRecords: ActivityThirtyDaysPointRewardModelType[] = await ActivityThirtyDaysPointRewardModel.findData(activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new ThirtyDaysData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
playerData.setPlayerPointRecords(playerPointRecords);
|
||||
|
||||
// let playerHeroes = await HeroModel.findByRole(roleId);
|
||||
// let colorStarHeroes = playerHeroes.filter(obj => { return obj && obj.colorStar > 0 })
|
||||
// playerData.setColorStarCount(colorStarHeroes.length);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动任务添加统计次数
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function addPlayerThirtyDaysTask(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecords: ActivityThirtyDaysModelType[] = await ActivityThirtyDaysModel.findData(serverId, activityId, roleId);
|
||||
let playerPointRecords: ActivityThirtyDaysPointRewardModelType[] = await ActivityThirtyDaysPointRewardModel.findData(activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new ThirtyDaysData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
playerData.setPlayerPointRecords(playerPointRecords);
|
||||
return playerData;
|
||||
}
|
||||
import { ActivityThirtyDaysModel, ActivityThirtyDaysModelType } from '@db/ActivityThirtyDays';
|
||||
import { ThirtyDaysData } from '@domain/activityField/thirtyDaysField';
|
||||
import { ActivityThirtyDaysPointRewardModel, ActivityThirtyDaysPointRewardModelType } from '@db/ActivityThirtyDaysPointReward';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function thirtyDaysActivity(type: number, serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, type);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerData = await getPlayerThirtyDaysData(activityData.activityId, serverId, roleId);
|
||||
|
||||
return playerData
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerThirtyDaysData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecords: ActivityThirtyDaysModelType[] = await ActivityThirtyDaysModel.findData(serverId, activityId, roleId);
|
||||
let playerPointRecords: ActivityThirtyDaysPointRewardModelType[] = await ActivityThirtyDaysPointRewardModel.findData(activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new ThirtyDaysData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
playerData.setPlayerPointRecords(playerPointRecords);
|
||||
|
||||
// let playerHeroes = await HeroModel.findByRole(roleId);
|
||||
// let colorStarHeroes = playerHeroes.filter(obj => { return obj && obj.colorStar > 0 })
|
||||
// playerData.setColorStarCount(colorStarHeroes.length);
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动任务添加统计次数
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function addPlayerThirtyDaysTask(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecords: ActivityThirtyDaysModelType[] = await ActivityThirtyDaysModel.findData(serverId, activityId, roleId);
|
||||
let playerPointRecords: ActivityThirtyDaysPointRewardModelType[] = await ActivityThirtyDaysPointRewardModel.findData(activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new ThirtyDaysData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecords);
|
||||
playerData.setPlayerPointRecords(playerPointRecords);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
@@ -1,138 +1,138 @@
|
||||
import { ACTIVITY_TYPE, getRedisKeyByRankType, MAIL_TYPE, RANK_TYPE, REDIS_KEY } from "../../consts";
|
||||
import { ActivityGroupModel } from "../../db/ActivityGroup";
|
||||
import { ActivityTimeLimitRankModel, ActivityTimeLimitRankModelTypeParam } from "../../db/ActivityTimeLimitRank";
|
||||
import { GuildModel, GuildType } from "../../db/Guild";
|
||||
import { RoleModel } from "../../db/Role";
|
||||
import { TimeLimitRankData } from "../../domain/activityField/timeLimitRankField";
|
||||
import { GuildRankInfo, RoleRankInfo } from "../../domain/rank";
|
||||
import { stringWithTypeToRewardInter } from "../../pubUtils/roleUtil";
|
||||
import { sendMailByContent, sendMailToGuildByContent, sendMailToManyPlayerByContent } from "../mailService";
|
||||
import { Rank } from "../rankService";
|
||||
import { getServerCreateTime } from "../redisService";
|
||||
import { getActivitiesByType, getActivityById } from "./activityService";
|
||||
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getTimeLimitRankData(activityId: number, serverId: number) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let playerData = new TimeLimitRankData(activityData, 0, serverTime);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getTimeLimitRankDataShow(activityId: number, serverId: number) {
|
||||
let playerData = await getTimeLimitRankData(activityId, serverId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description 记录每次活动获得的资金排行榜
|
||||
* @param serverId
|
||||
* @param code
|
||||
* @param fund
|
||||
*/
|
||||
export async function recordGuildFund(serverId: number, guild: GuildType, fund: number) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.TIME_LIMIT_RANK);
|
||||
for(let activity of activities) {
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TimeLimitRankData(activity, 0, serverTime);
|
||||
if(playerData.canRecord() && playerData.rankType == RANK_TYPE.GUILD_FUND) {
|
||||
await ActivityTimeLimitRankModel.addGuildScore(serverId, playerData.activityId, playerData.rankType, guild.code, fund, guild._id);
|
||||
|
||||
let redisKey = getRedisKeyByRankType(playerData.rankType);
|
||||
// 加入排行
|
||||
let r = new Rank(redisKey, { serverId, activityId: playerData.activityId });
|
||||
await r.setRankWithGuildInfo(guild.code, fund, Date.now(), guild, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动结束发送排行榜奖励
|
||||
* @param data {TimeLimitRankData} 活动数据
|
||||
* @returns
|
||||
*/
|
||||
export async function sendRankMail(data: TimeLimitRankData, serverId: number) {
|
||||
let redisKey = getRedisKeyByRankType(data.rankType, true);
|
||||
if (!redisKey) return null;
|
||||
let r = new Rank(redisKey, { activityId: data.activityId, serverId });
|
||||
if(r.infoKey == REDIS_KEY.GUILD_INFO) {
|
||||
let allRank = <GuildRankInfo[]>(await r.getRankByRange());
|
||||
|
||||
for(let { rank, code, name, leader } of allRank) {
|
||||
let reward = data.getRewardByRank(rank);
|
||||
if(reward) {
|
||||
let guild = await GuildModel.findByCode(code, serverId, '+members');
|
||||
// console.log(guild.members)
|
||||
for(let roleId of guild.members) {
|
||||
await sendMailByContent(MAIL_TYPE.TIME_LIMIT_RANK, roleId, {
|
||||
params: [data.tabName,`${rank}`],
|
||||
goods: stringWithTypeToRewardInter(roleId == leader.roleId? reward.rewards: reward.guildRewards)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let allRank = <RoleRankInfo[]>(await r.getRankByRange());
|
||||
let sentRoleIds: string[] = [];
|
||||
for(let { rank, roleId } of allRank) {
|
||||
let reward = data.getRewardByRank(rank);
|
||||
if(reward) {
|
||||
await sendMailByContent(MAIL_TYPE.TIME_LIMIT_RANK, roleId, {
|
||||
params: [data.tabName, `${rank}`],
|
||||
goods: stringWithTypeToRewardInter(reward.rewards)
|
||||
});
|
||||
sentRoleIds.push(roleId);
|
||||
}
|
||||
}
|
||||
let lastReward = data.getRewardByRank(9999);
|
||||
let roles = await RoleModel.findAllRoleForTimeLimitRank(serverId, 16);
|
||||
let roleIds: string[] = [];
|
||||
for(let { roleId } of roles) {
|
||||
if(sentRoleIds.indexOf(roleId) == -1) roleIds.push(roleId);
|
||||
}
|
||||
await sendMailToManyPlayerByContent(MAIL_TYPE.TIME_LIMIT_RANK, roleIds, {
|
||||
params: [data.tabName, '200+'],
|
||||
goods: stringWithTypeToRewardInter(lastReward.rewards)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export async function takeSnapshot(data: TimeLimitRankData, serverId: number) {
|
||||
let redisKey = getRedisKeyByRankType(data.rankType);
|
||||
let targetRedisKey = getRedisKeyByRankType(data.rankType, true);
|
||||
if (!redisKey || !targetRedisKey || redisKey == targetRedisKey) return null;
|
||||
|
||||
|
||||
let insertInfos: ActivityTimeLimitRankModelTypeParam[] = [];
|
||||
let r = new Rank(redisKey, { serverId, activityId: data.activityId });
|
||||
let allRank = await r.getRankDataByRankWithoutDetail();
|
||||
let targetR = new Rank(targetRedisKey, { serverId, activityId: data.activityId });
|
||||
for(let rank of allRank) {
|
||||
await targetR.setRank(rank.myId, rank.scores);
|
||||
|
||||
let insertBaseInfo = {
|
||||
serverId, activityId: data.activityId, rankType: data.rankType, score: rank.scores[0]||0, time: rank.scores[1]||0
|
||||
}
|
||||
if(rank.myId.roleId) {
|
||||
let role = await RoleModel.findByRoleId(rank.myId.roleId, '_id roleId');
|
||||
if(role) insertInfos.push({ ...insertBaseInfo, roleId: role.roleId, role: role._id });
|
||||
} else if(rank.myId.guildCode) {
|
||||
let guild = await GuildModel.findByCode(rank.myId.guildCode, serverId, '_id guildCode');
|
||||
if(guild) insertInfos.push({ ...insertBaseInfo, guildCode: guild.code, guild: guild._id });
|
||||
}
|
||||
}
|
||||
await ActivityTimeLimitRankModel.insertRanks(insertInfos);
|
||||
}
|
||||
import { ACTIVITY_TYPE, getRedisKeyByRankType, MAIL_TYPE, RANK_TYPE, REDIS_KEY } from "@consts";
|
||||
import { ActivityGroupModel } from "@db/ActivityGroup";
|
||||
import { ActivityTimeLimitRankModel, ActivityTimeLimitRankModelTypeParam } from "@db/ActivityTimeLimitRank";
|
||||
import { GuildModel, GuildType } from "@db/Guild";
|
||||
import { RoleModel } from "@db/Role";
|
||||
import { TimeLimitRankData } from "@domain/activityField/timeLimitRankField";
|
||||
import { GuildRankInfo, RoleRankInfo } from "@domain/rank";
|
||||
import { stringWithTypeToRewardInter } from "@pubUtils/roleUtil";
|
||||
import { sendMailByContent, sendMailToGuildByContent, sendMailToManyPlayerByContent } from "../mailService";
|
||||
import { Rank } from "../rankService";
|
||||
import { getServerCreateTime } from "../redisService";
|
||||
import { getActivitiesByType, getActivityById } from "./activityService";
|
||||
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getTimeLimitRankData(activityId: number, serverId: number) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let playerData = new TimeLimitRankData(activityData, 0, serverTime);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getTimeLimitRankDataShow(activityId: number, serverId: number) {
|
||||
let playerData = await getTimeLimitRankData(activityId, serverId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description 记录每次活动获得的资金排行榜
|
||||
* @param serverId
|
||||
* @param code
|
||||
* @param fund
|
||||
*/
|
||||
export async function recordGuildFund(serverId: number, guild: GuildType, fund: number) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.TIME_LIMIT_RANK);
|
||||
for(let activity of activities) {
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TimeLimitRankData(activity, 0, serverTime);
|
||||
if(playerData.canRecord() && playerData.rankType == RANK_TYPE.GUILD_FUND) {
|
||||
await ActivityTimeLimitRankModel.addGuildScore(serverId, playerData.activityId, playerData.rankType, guild.code, fund, guild._id);
|
||||
|
||||
let redisKey = getRedisKeyByRankType(playerData.rankType);
|
||||
// 加入排行
|
||||
let r = new Rank(redisKey, { serverId, activityId: playerData.activityId });
|
||||
await r.setRankWithGuildInfo(guild.code, fund, Date.now(), guild, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动结束发送排行榜奖励
|
||||
* @param data {TimeLimitRankData} 活动数据
|
||||
* @returns
|
||||
*/
|
||||
export async function sendRankMail(data: TimeLimitRankData, serverId: number) {
|
||||
let redisKey = getRedisKeyByRankType(data.rankType, true);
|
||||
if (!redisKey) return null;
|
||||
let r = new Rank(redisKey, { activityId: data.activityId, serverId });
|
||||
if(r.infoKey == REDIS_KEY.GUILD_INFO) {
|
||||
let allRank = <GuildRankInfo[]>(await r.getRankByRange());
|
||||
|
||||
for(let { rank, code, name, leader } of allRank) {
|
||||
let reward = data.getRewardByRank(rank);
|
||||
if(reward) {
|
||||
let guild = await GuildModel.findByCode(code, serverId, '+members');
|
||||
// console.log(guild.members)
|
||||
for(let roleId of guild.members) {
|
||||
await sendMailByContent(MAIL_TYPE.TIME_LIMIT_RANK, roleId, {
|
||||
params: [data.tabName,`${rank}`],
|
||||
goods: stringWithTypeToRewardInter(roleId == leader.roleId? reward.rewards: reward.guildRewards)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let allRank = <RoleRankInfo[]>(await r.getRankByRange());
|
||||
let sentRoleIds: string[] = [];
|
||||
for(let { rank, roleId } of allRank) {
|
||||
let reward = data.getRewardByRank(rank);
|
||||
if(reward) {
|
||||
await sendMailByContent(MAIL_TYPE.TIME_LIMIT_RANK, roleId, {
|
||||
params: [data.tabName, `${rank}`],
|
||||
goods: stringWithTypeToRewardInter(reward.rewards)
|
||||
});
|
||||
sentRoleIds.push(roleId);
|
||||
}
|
||||
}
|
||||
let lastReward = data.getRewardByRank(9999);
|
||||
let roles = await RoleModel.findAllRoleForTimeLimitRank(serverId, 16);
|
||||
let roleIds: string[] = [];
|
||||
for(let { roleId } of roles) {
|
||||
if(sentRoleIds.indexOf(roleId) == -1) roleIds.push(roleId);
|
||||
}
|
||||
await sendMailToManyPlayerByContent(MAIL_TYPE.TIME_LIMIT_RANK, roleIds, {
|
||||
params: [data.tabName, '200+'],
|
||||
goods: stringWithTypeToRewardInter(lastReward.rewards)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export async function takeSnapshot(data: TimeLimitRankData, serverId: number) {
|
||||
let redisKey = getRedisKeyByRankType(data.rankType);
|
||||
let targetRedisKey = getRedisKeyByRankType(data.rankType, true);
|
||||
if (!redisKey || !targetRedisKey || redisKey == targetRedisKey) return null;
|
||||
|
||||
|
||||
let insertInfos: ActivityTimeLimitRankModelTypeParam[] = [];
|
||||
let r = new Rank(redisKey, { serverId, activityId: data.activityId });
|
||||
let allRank = await r.getRankDataByRankWithoutDetail();
|
||||
let targetR = new Rank(targetRedisKey, { serverId, activityId: data.activityId });
|
||||
for(let rank of allRank) {
|
||||
await targetR.setRank(rank.myId, rank.scores);
|
||||
|
||||
let insertBaseInfo = {
|
||||
serverId, activityId: data.activityId, rankType: data.rankType, score: rank.scores[0]||0, time: rank.scores[1]||0
|
||||
}
|
||||
if(rank.myId.roleId) {
|
||||
let role = await RoleModel.findByRoleId(rank.myId.roleId, '_id roleId');
|
||||
if(role) insertInfos.push({ ...insertBaseInfo, roleId: role.roleId, role: role._id });
|
||||
} else if(rank.myId.guildCode) {
|
||||
let guild = await GuildModel.findByCode(rank.myId.guildCode, serverId, '_id guildCode');
|
||||
if(guild) insertInfos.push({ ...insertBaseInfo, guildCode: guild.code, guild: guild._id });
|
||||
}
|
||||
}
|
||||
await ActivityTimeLimitRankModel.insertRanks(insertInfos);
|
||||
}
|
||||
|
||||
@@ -1,160 +1,160 @@
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS, TREASURE_HUNT_DATA_TYPE } from '../../consts';
|
||||
import { ActivityTreasureHuntShopModel } from '../../db/ActivityTreasureHuntShop';
|
||||
import { ActivityTreasureHuntTaskModel } from '../../db/ActivityTreasureHuntTask';
|
||||
import { ActivityTreasureHuntTreasureShopModel } from '../../db/ActivityTreasureHuntTreasureShop';
|
||||
import { ActivityTreasureHuntFirstPageModel } from '../../db/ActivityTreasureHuntFirstPage';
|
||||
import { TreasureHuntData } from '../../domain/activityField/treasureHuntField';
|
||||
import { addReward, stringToConsumeParam, stringToRewardParam } from './giftPackageService';
|
||||
import { RewardParam } from '../../domain/activityField/rewardField';
|
||||
import { getActivitiesByType, getActivityById, getActivityByServerId } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { handleCost } from '../role/rewardService';
|
||||
import { ActivityTreasureHuntChallengeModel } from '../../db/ActivityTreasureHuntChallenge';
|
||||
import { ActivityModelType } from '../../db/Activity';
|
||||
|
||||
export async function getPlayerTreasureHuntDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerTreasureHuntData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerTreasureHuntData(activityId: number, serverId: number, roleId: string, dataType: TREASURE_HUNT_DATA_TYPE = TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TreasureHuntData(activityData, createTime, serverTime);
|
||||
if(dataType == TREASURE_HUNT_DATA_TYPE.FIRST_PAGE || dataType == TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let playerTreasureFirstPageRecord = await ActivityTreasureHuntFirstPageModel.findData(serverId, activityId, roleId, playerData.roundIndex);
|
||||
playerData.firstPage.setPlayerFirstPageRecord(playerTreasureFirstPageRecord);
|
||||
}
|
||||
if (dataType == TREASURE_HUNT_DATA_TYPE.SHOP || dataType == TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let playerShopRecord = await ActivityTreasureHuntShopModel.findTreasureData(activityId, roleId, playerData.roundIndex, playerData.todayIndex);
|
||||
playerData.shop.setPlayerShopRecords(playerShopRecord);
|
||||
}
|
||||
if (dataType == TREASURE_HUNT_DATA_TYPE.TASK || dataType == TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let playerTaskRecord = await ActivityTreasureHuntTaskModel.findDataByRoundIndex(serverId, activityId, roleId, playerData.roundIndex);
|
||||
playerData.tasks.setPlayerTaskRecords(playerTaskRecord);
|
||||
}
|
||||
if(dataType == TREASURE_HUNT_DATA_TYPE.TREASURE_SHOP || dataType == TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let playerTreasureShopRecord = await ActivityTreasureHuntTreasureShopModel.findData(activityId, roleId, playerData.roundIndex);
|
||||
playerData.treasureShop.setPlayerTreasureShopRecords(playerTreasureShopRecord);
|
||||
}
|
||||
if(dataType == TREASURE_HUNT_DATA_TYPE.CHALLENGE || dataType == TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let playerRecord = await ActivityTreasureHuntChallengeModel.findData(serverId, activityId, roleId, playerData.roundIndex);
|
||||
playerData.challenge.setChallengeRecord(playerRecord)
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getPlayerTreasureHuntFirstPageData(activityId: number, serverId: number, roleId: string) {
|
||||
return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.FIRST_PAGE);
|
||||
}
|
||||
|
||||
export async function getPlayerTreasureHuntShopData(activityId: number, serverId: number, roleId: string) {
|
||||
return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.SHOP);
|
||||
}
|
||||
|
||||
export async function getPlayerTreasureHuntTaskData(activityId: number, serverId: number, roleId: string) {
|
||||
return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.TASK);
|
||||
}
|
||||
|
||||
export async function getPlayerTreasureHuntChallengeData(activityId: number, serverId: number, roleId: string) {
|
||||
return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.CHALLENGE);
|
||||
}
|
||||
|
||||
export async function getPlayerTreasureHuntTreasureShopData(activityId: number, serverId: number, roleId: string) {
|
||||
return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.TREASURE_SHOP);
|
||||
}
|
||||
|
||||
/**
|
||||
* 购买每日物资
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeShop(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
// let activityData: ActivityModelType = await ActivityModel.findActivity(activityId);
|
||||
let playerData = await getPlayerTreasureHuntShopData(activityId, serverId, roleId,);
|
||||
if (!playerData) {
|
||||
return {
|
||||
code: STATUS.ACTIVITY_MISSING,
|
||||
}
|
||||
}
|
||||
|
||||
let item = playerData.shop.findProductID(productID)
|
||||
|
||||
if (!item) {
|
||||
return {
|
||||
code: STATUS.ACTIVITY_MISSING,
|
||||
}
|
||||
}
|
||||
if (item.buyCount >= item.countMax) {
|
||||
return {
|
||||
code: STATUS.ACTIVITY_MAX_COUNT,
|
||||
}
|
||||
}
|
||||
let cellIndex = item.cellIndex;
|
||||
|
||||
//添加购买记录
|
||||
await ActivityTreasureHuntShopModel.buyShopRecord(activityId, roleId, playerData.roundIndex, playerData.todayIndex, cellIndex, 1);
|
||||
|
||||
let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.TREASURE_HUNT_SHOP_BUY)
|
||||
|
||||
item.buyCount += 1;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkTreasureHuntShop(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false;
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TreasureHuntData(activityData, createTime, serverTime);
|
||||
|
||||
let playerShopRecord = await ActivityTreasureHuntShopModel.findTreasureData(activityData.activityId, roleId, playerData.roundIndex, playerData.todayIndex);
|
||||
playerData.shop.setPlayerShopRecords(playerShopRecord);
|
||||
|
||||
let item = playerData.shop.findProductID(productID)
|
||||
|
||||
if (!item) return false;
|
||||
if (item.buyCount >= item.countMax) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
export async function treasureHuntChallengeConsume(serverId: number, roleId: string, sid: string) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.TREASURE_HUNT);
|
||||
for(let { activityId } of activities) {
|
||||
let playerData = await getPlayerTreasureHuntChallengeData(activityId, serverId, roleId,);
|
||||
if (!playerData) return false;
|
||||
|
||||
if(playerData.canShow()) {
|
||||
let challengeData = playerData.challenge;
|
||||
//消耗资源
|
||||
let consumeStr = challengeData.consume;
|
||||
let consume = stringToConsumeParam(consumeStr)
|
||||
let resourceResult = await handleCost(roleId, sid, consume, ITEM_CHANGE_REASON.TREASURE_HUNT_CHALLENGE);
|
||||
if (!resourceResult) return false;
|
||||
|
||||
let warId = playerData.challenge.randomGK();
|
||||
await ActivityTreasureHuntChallengeModel.setWarId(serverId, activityId, roleId, playerData.roundIndex, warId);
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS, TREASURE_HUNT_DATA_TYPE } from '@consts';
|
||||
import { ActivityTreasureHuntShopModel } from '@db/ActivityTreasureHuntShop';
|
||||
import { ActivityTreasureHuntTaskModel } from '@db/ActivityTreasureHuntTask';
|
||||
import { ActivityTreasureHuntTreasureShopModel } from '@db/ActivityTreasureHuntTreasureShop';
|
||||
import { ActivityTreasureHuntFirstPageModel } from '@db/ActivityTreasureHuntFirstPage';
|
||||
import { TreasureHuntData } from '@domain/activityField/treasureHuntField';
|
||||
import { addReward, stringToConsumeParam, stringToRewardParam } from './giftPackageService';
|
||||
import { RewardParam } from '@domain/activityField/rewardField';
|
||||
import { getActivitiesByType, getActivityById, getActivityByServerId } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { handleCost } from '../role/rewardService';
|
||||
import { ActivityTreasureHuntChallengeModel } from '@db/ActivityTreasureHuntChallenge';
|
||||
import { ActivityModelType } from '@db/Activity';
|
||||
|
||||
export async function getPlayerTreasureHuntDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getPlayerTreasureHuntData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerTreasureHuntData(activityId: number, serverId: number, roleId: string, dataType: TREASURE_HUNT_DATA_TYPE = TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TreasureHuntData(activityData, createTime, serverTime);
|
||||
if(dataType == TREASURE_HUNT_DATA_TYPE.FIRST_PAGE || dataType == TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let playerTreasureFirstPageRecord = await ActivityTreasureHuntFirstPageModel.findData(serverId, activityId, roleId, playerData.roundIndex);
|
||||
playerData.firstPage.setPlayerFirstPageRecord(playerTreasureFirstPageRecord);
|
||||
}
|
||||
if (dataType == TREASURE_HUNT_DATA_TYPE.SHOP || dataType == TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let playerShopRecord = await ActivityTreasureHuntShopModel.findTreasureData(activityId, roleId, playerData.roundIndex, playerData.todayIndex);
|
||||
playerData.shop.setPlayerShopRecords(playerShopRecord);
|
||||
}
|
||||
if (dataType == TREASURE_HUNT_DATA_TYPE.TASK || dataType == TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let playerTaskRecord = await ActivityTreasureHuntTaskModel.findDataByRoundIndex(serverId, activityId, roleId, playerData.roundIndex);
|
||||
playerData.tasks.setPlayerTaskRecords(playerTaskRecord);
|
||||
}
|
||||
if(dataType == TREASURE_HUNT_DATA_TYPE.TREASURE_SHOP || dataType == TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let playerTreasureShopRecord = await ActivityTreasureHuntTreasureShopModel.findData(activityId, roleId, playerData.roundIndex);
|
||||
playerData.treasureShop.setPlayerTreasureShopRecords(playerTreasureShopRecord);
|
||||
}
|
||||
if(dataType == TREASURE_HUNT_DATA_TYPE.CHALLENGE || dataType == TREASURE_HUNT_DATA_TYPE.ALL) {
|
||||
let playerRecord = await ActivityTreasureHuntChallengeModel.findData(serverId, activityId, roleId, playerData.roundIndex);
|
||||
playerData.challenge.setChallengeRecord(playerRecord)
|
||||
}
|
||||
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getPlayerTreasureHuntFirstPageData(activityId: number, serverId: number, roleId: string) {
|
||||
return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.FIRST_PAGE);
|
||||
}
|
||||
|
||||
export async function getPlayerTreasureHuntShopData(activityId: number, serverId: number, roleId: string) {
|
||||
return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.SHOP);
|
||||
}
|
||||
|
||||
export async function getPlayerTreasureHuntTaskData(activityId: number, serverId: number, roleId: string) {
|
||||
return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.TASK);
|
||||
}
|
||||
|
||||
export async function getPlayerTreasureHuntChallengeData(activityId: number, serverId: number, roleId: string) {
|
||||
return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.CHALLENGE);
|
||||
}
|
||||
|
||||
export async function getPlayerTreasureHuntTreasureShopData(activityId: number, serverId: number, roleId: string) {
|
||||
return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.TREASURE_SHOP);
|
||||
}
|
||||
|
||||
/**
|
||||
* 购买每日物资
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeShop(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
// let activityData: ActivityModelType = await ActivityModel.findActivity(activityId);
|
||||
let playerData = await getPlayerTreasureHuntShopData(activityId, serverId, roleId,);
|
||||
if (!playerData) {
|
||||
return {
|
||||
code: STATUS.ACTIVITY_MISSING,
|
||||
}
|
||||
}
|
||||
|
||||
let item = playerData.shop.findProductID(productID)
|
||||
|
||||
if (!item) {
|
||||
return {
|
||||
code: STATUS.ACTIVITY_MISSING,
|
||||
}
|
||||
}
|
||||
if (item.buyCount >= item.countMax) {
|
||||
return {
|
||||
code: STATUS.ACTIVITY_MAX_COUNT,
|
||||
}
|
||||
}
|
||||
let cellIndex = item.cellIndex;
|
||||
|
||||
//添加购买记录
|
||||
await ActivityTreasureHuntShopModel.buyShopRecord(activityId, roleId, playerData.roundIndex, playerData.todayIndex, cellIndex, 1);
|
||||
|
||||
let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.TREASURE_HUNT_SHOP_BUY)
|
||||
|
||||
item.buyCount += 1;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item })
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkTreasureHuntShop(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
|
||||
if(!activityData) return false;
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new TreasureHuntData(activityData, createTime, serverTime);
|
||||
|
||||
let playerShopRecord = await ActivityTreasureHuntShopModel.findTreasureData(activityData.activityId, roleId, playerData.roundIndex, playerData.todayIndex);
|
||||
playerData.shop.setPlayerShopRecords(playerShopRecord);
|
||||
|
||||
let item = playerData.shop.findProductID(productID)
|
||||
|
||||
if (!item) return false;
|
||||
if (item.buyCount >= item.countMax) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
export async function treasureHuntChallengeConsume(serverId: number, roleId: string, sid: string) {
|
||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.TREASURE_HUNT);
|
||||
for(let { activityId } of activities) {
|
||||
let playerData = await getPlayerTreasureHuntChallengeData(activityId, serverId, roleId,);
|
||||
if (!playerData) return false;
|
||||
|
||||
if(playerData.canShow()) {
|
||||
let challengeData = playerData.challenge;
|
||||
//消耗资源
|
||||
let consumeStr = challengeData.consume;
|
||||
let consume = stringToConsumeParam(consumeStr)
|
||||
let resourceResult = await handleCost(roleId, sid, consume, ITEM_CHANGE_REASON.TREASURE_HUNT_CHALLENGE);
|
||||
if (!resourceResult) return false;
|
||||
|
||||
let warId = playerData.challenge.randomGK();
|
||||
await ActivityTreasureHuntChallengeModel.setWarId(serverId, activityId, roleId, playerData.roundIndex, warId);
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -1,71 +1,71 @@
|
||||
import { ACTIVITY_TYPE } from '../../consts';
|
||||
import { ActivityVipRechargeMoneyModel, ActivityVipRechargeMoneyModelType } from '../../db/ActivityVipRechargeMoney';
|
||||
import { VipRechargeMoneyData } from '../../domain/activityField/vipRechargeMoneyField';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function vipRechargeMoneyActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.VIP_RECHARGE_MONEY);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerRecord: ActivityVipRechargeMoneyModelType = await ActivityVipRechargeMoneyModel.findData(serverId, roleId, activityData.activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new VipRechargeMoneyData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerVipRechargeMoneyData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return null;
|
||||
}
|
||||
let playerRecord: ActivityVipRechargeMoneyModelType = await ActivityVipRechargeMoneyModel.findData(serverId, roleId, activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new VipRechargeMoneyData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 统计充值金额
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} RMB 金额
|
||||
*
|
||||
*/
|
||||
export async function addVipRechargeMoney(roleId: string, serverId: number, RMB: number) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.VIP_RECHARGE_MONEY);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
await ActivityVipRechargeMoneyModel.addRMB(serverId, roleId, activityData.activityId, RMB);
|
||||
}
|
||||
|
||||
import { ACTIVITY_TYPE } from '@consts';
|
||||
import { ActivityVipRechargeMoneyModel, ActivityVipRechargeMoneyModelType } from '@db/ActivityVipRechargeMoney';
|
||||
import { VipRechargeMoneyData } from '@domain/activityField/vipRechargeMoneyField';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function vipRechargeMoneyActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.VIP_RECHARGE_MONEY);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerRecord: ActivityVipRechargeMoneyModelType = await ActivityVipRechargeMoneyModel.findData(serverId, roleId, activityData.activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new VipRechargeMoneyData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerVipRechargeMoneyData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return null;
|
||||
}
|
||||
let playerRecord: ActivityVipRechargeMoneyModelType = await ActivityVipRechargeMoneyModel.findData(serverId, roleId, activityId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new VipRechargeMoneyData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 统计充值金额
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} RMB 金额
|
||||
*
|
||||
*/
|
||||
export async function addVipRechargeMoney(roleId: string, serverId: number, RMB: number) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.VIP_RECHARGE_MONEY);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
await ActivityVipRechargeMoneyModel.addRMB(serverId, roleId, activityData.activityId, RMB);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
import { WebViewData } from "../../domain/activityField/webviewField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getWebviewData(activityId: number, serverId: number, roleId: string) {
|
||||
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let playerData = new WebViewData(activityData, createTime, serverTime);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getWebviewDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getWebviewData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
import { WebViewData } from "@domain/activityField/webviewField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getWebviewData(activityId: number, serverId: number, roleId: string) {
|
||||
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
|
||||
let playerData = new WebViewData(activityData, createTime, serverTime);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
export async function getWebviewDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getWebviewData(activityId, serverId, roleId);
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,93 +1,93 @@
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from "../../consts";
|
||||
import { ActivityModelType } from "../../db/Activity";
|
||||
import { ActivityWeeklyFundModel } from "../../db/ActivityWeeklyFund";
|
||||
import { WeeklyFundData } from "../../domain/activityField/weeklyFundField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
import { stringToRewardParam, addReward } from "./giftPackageService";
|
||||
|
||||
/**
|
||||
* 周基金玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getWeeklyFundData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new WeeklyFundData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityWeeklyFundModel.findData(serverId, activityId, roleId);
|
||||
playerData.setPlayerRecord(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 周基金 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getWeeklyFundDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getWeeklyFundData(activityId, serverId, roleId);
|
||||
// console.log('##### weeklyFund', playerData)
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 周基金 是否可以购买
|
||||
* @param roleId 玩家id
|
||||
* @param serverId 服
|
||||
* @param activityData 活动数据
|
||||
* @returns
|
||||
*/
|
||||
export async function checkWeeklyFund(roleId: string, serverId: number, activityData: ActivityModelType) {
|
||||
if(!activityData || activityData.type !== ACTIVITY_TYPE.WEEKLY_FUND) return false;
|
||||
|
||||
let playerRecord = await ActivityWeeklyFundModel.findData(serverId, activityData.activityId, roleId);
|
||||
return !playerRecord;
|
||||
}
|
||||
|
||||
/**
|
||||
* 周基金购买
|
||||
* @param roleId 玩家id
|
||||
* @param roleName 玩家名
|
||||
* @param sid
|
||||
* @param serverId 服
|
||||
* @param activityId 活动
|
||||
* @param productID 商品id
|
||||
* @returns
|
||||
*/
|
||||
export async function makeWeeklyFund(roleId: string, roleName: string, sid: string, serverId: number, activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.WEEKLY_FUND) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new WeeklyFundData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityWeeklyFundModel.findData(serverId, activityData.activityId, roleId);
|
||||
if(playerRecord) {
|
||||
return STATUS.ORDER_CANNOT_BUY;
|
||||
}
|
||||
|
||||
await ActivityWeeklyFundModel.buy(serverId, activityId, roleId, productID);
|
||||
|
||||
let rewardParamArr = stringToRewardParam(playerData.onceReward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.ACT_WEEKLY_FUND_BUY);
|
||||
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { activityId: activityId })
|
||||
}
|
||||
}
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from "@consts";
|
||||
import { ActivityModelType } from "@db/Activity";
|
||||
import { ActivityWeeklyFundModel } from "@db/ActivityWeeklyFund";
|
||||
import { WeeklyFundData } from "@domain/activityField/weeklyFundField";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getActivityById } from "./activityService";
|
||||
import { stringToRewardParam, addReward } from "./giftPackageService";
|
||||
|
||||
/**
|
||||
* 周基金玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getWeeklyFundData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new WeeklyFundData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityWeeklyFundModel.findData(serverId, activityId, roleId);
|
||||
playerData.setPlayerRecord(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 周基金 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getWeeklyFundDataShow(activityId: number, serverId: number, roleId: string) {
|
||||
let playerData = await getWeeklyFundData(activityId, serverId, roleId);
|
||||
// console.log('##### weeklyFund', playerData)
|
||||
if(playerData && playerData.canShow && playerData.canShow()) {
|
||||
return playerData.getShowResult();
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 周基金 是否可以购买
|
||||
* @param roleId 玩家id
|
||||
* @param serverId 服
|
||||
* @param activityData 活动数据
|
||||
* @returns
|
||||
*/
|
||||
export async function checkWeeklyFund(roleId: string, serverId: number, activityData: ActivityModelType) {
|
||||
if(!activityData || activityData.type !== ACTIVITY_TYPE.WEEKLY_FUND) return false;
|
||||
|
||||
let playerRecord = await ActivityWeeklyFundModel.findData(serverId, activityData.activityId, roleId);
|
||||
return !playerRecord;
|
||||
}
|
||||
|
||||
/**
|
||||
* 周基金购买
|
||||
* @param roleId 玩家id
|
||||
* @param roleName 玩家名
|
||||
* @param sid
|
||||
* @param serverId 服
|
||||
* @param activityId 活动
|
||||
* @param productID 商品id
|
||||
* @returns
|
||||
*/
|
||||
export async function makeWeeklyFund(roleId: string, roleName: string, sid: string, serverId: number, activityId: number, productID: string) {
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (!activityData) {
|
||||
return STATUS.ACTIVITY_MISSING;
|
||||
}
|
||||
if (activityData.type !== ACTIVITY_TYPE.WEEKLY_FUND) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new WeeklyFundData(activityData, createTime, serverTime);
|
||||
let playerRecord = await ActivityWeeklyFundModel.findData(serverId, activityData.activityId, roleId);
|
||||
if(playerRecord) {
|
||||
return STATUS.ORDER_CANNOT_BUY;
|
||||
}
|
||||
|
||||
await ActivityWeeklyFundModel.buy(serverId, activityId, roleId, productID);
|
||||
|
||||
let rewardParamArr = stringToRewardParam(playerData.onceReward);
|
||||
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.ACT_WEEKLY_FUND_BUY);
|
||||
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { activityId: activityId })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,99 +1,99 @@
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from '../../consts';
|
||||
import { ActivityModelType } from '../../db/Activity';
|
||||
import { UserOrderModel, UserOrderModelType } from '../../db/UserOrder';
|
||||
import { RewardParam } from '../../domain/activityField/rewardField';
|
||||
import { YuanBaoShopData } from '../../domain/activityField/yuanBaoShopField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function yuanbaoActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.YUAN_BAO_SHOP);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerRecord: UserOrderModelType[] = await UserOrderModel.findOrderByActivityID(activityData.activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new YuanBaoShopData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerYuanbaoShopData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord: UserOrderModelType[] = await UserOrderModel.findOrderByActivityID(activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new YuanBaoShopData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 结算奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeYuanbaoShopReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let records = await UserOrderModel.findSuccessOrderByProductID(productID, roleId, activityId);
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (activityData.type !== ACTIVITY_TYPE.YUAN_BAO_SHOP) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new YuanBaoShopData(activityData, createTime, serverTime);
|
||||
let item = playerData.findItem(productID);
|
||||
|
||||
let rewardParamArr: Array<RewardParam> = [];
|
||||
if (records.length == 0) {//首充
|
||||
rewardParamArr = rewardParamArr.concat(stringToRewardParam(item.baseReward));
|
||||
rewardParamArr = rewardParamArr.concat(stringToRewardParam(item.firstReward));
|
||||
} else {
|
||||
rewardParamArr = rewardParamArr.concat(stringToRewardParam(item.baseReward));
|
||||
rewardParamArr = rewardParamArr.concat(stringToRewardParam(item.extraReward));
|
||||
}
|
||||
let arr: Array<RewardParam> = [];
|
||||
for (let obj of rewardParamArr) {
|
||||
let index = arr.findIndex(reward => { return reward.type == obj.type && reward.id == obj.id });
|
||||
if (index != -1) {
|
||||
arr[index].count += obj.count;
|
||||
} else {
|
||||
arr.push(obj);
|
||||
}
|
||||
}
|
||||
|
||||
let result = await addReward(roleId, roleName, sid, serverId, arr, ITEM_CHANGE_REASON.YUANBAO_SHOP_BUY)
|
||||
item.buyCount += 1;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item, activityId: activityData.activityId })
|
||||
}
|
||||
}
|
||||
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from '@consts';
|
||||
import { ActivityModelType } from '@db/Activity';
|
||||
import { UserOrderModel, UserOrderModelType } from '@db/UserOrder';
|
||||
import { RewardParam } from '@domain/activityField/rewardField';
|
||||
import { YuanBaoShopData } from '@domain/activityField/yuanBaoShopField';
|
||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||
import { getActivitiesByType, getActivityById } from './activityService';
|
||||
import { addReward, stringToRewardParam } from './giftPackageService';
|
||||
|
||||
/**
|
||||
* 获取活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} type 活动类型 ACTIVITY_TYPE
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
|
||||
export async function yuanbaoActivity(serverId: number, roleId: string) {
|
||||
let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.YUAN_BAO_SHOP);
|
||||
if (activityArray.length == 0) {
|
||||
return null;
|
||||
}
|
||||
let activityData = activityArray[0];
|
||||
let playerRecord: UserOrderModelType[] = await UserOrderModel.findOrderByActivityID(activityData.activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new YuanBaoShopData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 玩家活动数据
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
*
|
||||
*/
|
||||
export async function getPlayerYuanbaoShopData(activityId: number, serverId: number, roleId: string) {
|
||||
let activityData = await getActivityById(activityId);
|
||||
let playerRecord: UserOrderModelType[] = await UserOrderModel.findOrderByActivityID(activityId, roleId);
|
||||
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new YuanBaoShopData(activityData, createTime, serverTime);
|
||||
playerData.setPlayerRecords(playerRecord);
|
||||
return playerData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 结算奖励
|
||||
*
|
||||
* @param {number} serverId 区Id
|
||||
* @param {number} activityId 活动Id
|
||||
* @param {string} roleId 角色Id
|
||||
* @param {string} productID 商品ID
|
||||
*
|
||||
*/
|
||||
export async function makeYuanbaoShopReward(roleId: string, roleName: string, sid: string, serverId: number,
|
||||
activityId: number, productID: string) {
|
||||
let records = await UserOrderModel.findSuccessOrderByProductID(productID, roleId, activityId);
|
||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
||||
if (activityData.type !== ACTIVITY_TYPE.YUAN_BAO_SHOP) {
|
||||
return STATUS.ACTIVITY_TYPE_ERROR;
|
||||
}
|
||||
let createTime = await getRoleCreateTime(roleId);
|
||||
let serverTime = await getServerCreateTime(serverId);
|
||||
let playerData = new YuanBaoShopData(activityData, createTime, serverTime);
|
||||
let item = playerData.findItem(productID);
|
||||
|
||||
let rewardParamArr: Array<RewardParam> = [];
|
||||
if (records.length == 0) {//首充
|
||||
rewardParamArr = rewardParamArr.concat(stringToRewardParam(item.baseReward));
|
||||
rewardParamArr = rewardParamArr.concat(stringToRewardParam(item.firstReward));
|
||||
} else {
|
||||
rewardParamArr = rewardParamArr.concat(stringToRewardParam(item.baseReward));
|
||||
rewardParamArr = rewardParamArr.concat(stringToRewardParam(item.extraReward));
|
||||
}
|
||||
let arr: Array<RewardParam> = [];
|
||||
for (let obj of rewardParamArr) {
|
||||
let index = arr.findIndex(reward => { return reward.type == obj.type && reward.id == obj.id });
|
||||
if (index != -1) {
|
||||
arr[index].count += obj.count;
|
||||
} else {
|
||||
arr.push(obj);
|
||||
}
|
||||
}
|
||||
|
||||
let result = await addReward(roleId, roleName, sid, serverId, arr, ITEM_CHANGE_REASON.YUANBAO_SHOP_BUY)
|
||||
item.buyCount += 1;
|
||||
return {
|
||||
code: 0,
|
||||
data: Object.assign(result, { item, activityId: activityData.activityId })
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user