活动:月卡权限
This commit is contained in:
@@ -20,7 +20,8 @@ export default class Activity_Monthly_Ticket extends BaseModel {
|
||||
endTime: Date; // 结束时间
|
||||
@prop({ required: true })
|
||||
dayIndex: number; // 结算到第几天,从0开始,1表示第一天已经领取过(包括邮件发放)
|
||||
|
||||
@prop({ required: true })
|
||||
isForever: boolean; // 是否是永久卡
|
||||
|
||||
//记录领取的天数
|
||||
public static async setDayIndex(serverId: number, roleId: string, activityId: number, dayIndex: number) {
|
||||
@@ -37,8 +38,8 @@ export default class Activity_Monthly_Ticket extends BaseModel {
|
||||
}
|
||||
|
||||
//购买月卡
|
||||
public static async buyMonthlyTicket(serverId: number, roleId: string, activityId: number, activityType: number, endTime: Date) {
|
||||
await ActivityMonthlyTicketModel.findOneAndUpdate({ serverId, roleId, activityId, activityType }, { $set: { endTime, dayIndex: 0 } }, { upsert: true, new: true }).lean();
|
||||
public static async buyMonthlyTicket(serverId: number, roleId: string, activityId: number, activityType: number, endTime: Date, isForever: boolean) {
|
||||
await ActivityMonthlyTicketModel.findOneAndUpdate({ serverId, roleId, activityId, activityType }, { $set: { endTime, dayIndex: 0, isForever } }, { upsert: true, new: true }).lean();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ class Goods {
|
||||
count: number; // 这次挂机没来得及领取的
|
||||
}
|
||||
|
||||
class NotReceivedGoods {
|
||||
export class NotReceivedGoods {
|
||||
@prop({ required: true })
|
||||
cnt: number; // 加速的次数
|
||||
@prop({ required: true, default: [], type: Goods, _id: false })
|
||||
|
||||
@@ -193,13 +193,9 @@ export default class Role extends BaseModel {
|
||||
topLineupCe: number; // 最强x人战力
|
||||
@prop({ required: true, type: TopHero, default: [], _id: false })
|
||||
topLineup: Array<TopHero>; // 总战力
|
||||
@prop({ required: true, default: 100 })
|
||||
tili: number; // 体力值
|
||||
@prop({ required: false, set: (val: boolean) => val, get: () => true })
|
||||
isReducedCe: boolean; // 如果战力没有缩过就会返回false,缩过了就会返回true
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
vLv: number; // VIP 等级
|
||||
@prop({ required: true, default: 100 })
|
||||
gold: number; // 总金币
|
||||
@prop({ required: true, default: 0 })
|
||||
@@ -234,6 +230,12 @@ export default class Role extends BaseModel {
|
||||
@prop({ required: true, default: 0 })
|
||||
quitTime: number; // 更新 / 登录时间
|
||||
|
||||
// 月卡相关
|
||||
@prop({ required: true, default: 0 })
|
||||
vipStartTime: number; // 永久卡开始时间
|
||||
@prop({ required: true, default: 0 })
|
||||
isVip: boolean; // 是否购买了永久月卡
|
||||
|
||||
// 天梯相关
|
||||
@prop({ required: true, default: 1 })
|
||||
towerLv: number; // 天梯当前层数
|
||||
@@ -402,11 +404,6 @@ export default class Role extends BaseModel {
|
||||
return role;
|
||||
}
|
||||
|
||||
public static async deleteAccount(roleId: string) {
|
||||
let result = await RoleModel.deleteMany({ roleId });
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async addCoin(roleId: string, cnt: number, lean = true) {
|
||||
let result: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { coin: cnt } }, { "new": true, "upsert": true }).lean(lean);
|
||||
return result;
|
||||
@@ -740,6 +737,11 @@ export default class Role extends BaseModel {
|
||||
return role;
|
||||
}
|
||||
|
||||
// 购买永久月卡
|
||||
public static async buyForeverTicket(roleId: string) {
|
||||
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $set: { vipStartTime: Date.now(), isVip: true } }, { new: true }).lean();
|
||||
return role;
|
||||
}
|
||||
|
||||
private static getSearchObj(form: SearchRoleParam) {
|
||||
let searchObj = {};
|
||||
|
||||
@@ -4,41 +4,45 @@ import { ActivityMonthlyTicketModelType } from '../../db/ActivityMonthlyTicket';
|
||||
import { deltaDays } from '../../pubUtils/util';
|
||||
import { ActivityBase } from './activityField';
|
||||
|
||||
interface MonthlyTickerInDb {
|
||||
name: string; // 月卡名字
|
||||
id: number; // 序列
|
||||
productID: string; // 商品id vip月卡商品ID
|
||||
price: number ; // 价格
|
||||
isForever: boolean; // 是否是永久卡
|
||||
days: number; // 持续天数,永久卡的话这里填0
|
||||
baseReward: string; // 每天领取的奖励 "2&1&1"
|
||||
firstReward: string;// 首次购买获得的奖励 "2&1&1"
|
||||
imageName: string; // 图片名
|
||||
rebate: number; // 返利倍数
|
||||
}
|
||||
|
||||
// 月卡数据
|
||||
export class MonthlyTicketData extends ActivityBase {
|
||||
|
||||
name: string = '';//名称
|
||||
id: number = 0;//序列
|
||||
productID: string = '';//商品id
|
||||
price: number = 0;//价格
|
||||
days: number = 0;//持续天数
|
||||
baseReward: string = '';//每天领取的奖励
|
||||
firstReward: string = '';//首次购买获得的奖励
|
||||
name: string = ''; // 名称
|
||||
id: number = 0; // 序列
|
||||
productID: string = ''; // 商品id
|
||||
price: number = 0; // 价格
|
||||
days: number = 0; // 持续天数
|
||||
baseReward: string = ''; // 每天领取的奖励
|
||||
firstReward: string = ''; // 首次购买获得的奖励
|
||||
imageName: string = '';
|
||||
rebate: number = 0;//返利倍数
|
||||
rebate: number = 0; // 返利倍数
|
||||
isForever: boolean = false; // 是否是永久卡
|
||||
|
||||
endTime: number = 0;//结束时间
|
||||
dayIndex: number = 0;//已经领取了几天
|
||||
isOpen: boolean = false;//是否开启中
|
||||
todayIndex: number = 0;//现在可以领取第几天的奖励
|
||||
//解析玩家领取记录
|
||||
public setPlayerRecords(data: ActivityMonthlyTicketModelType) {
|
||||
if (!data) {//没有购买月卡
|
||||
return;
|
||||
}
|
||||
this.dayIndex = data.dayIndex;
|
||||
this.endTime = moment(data.endTime).valueOf();
|
||||
if (moment(new Date).valueOf() < this.endTime) {
|
||||
this.isOpen = true;
|
||||
this.todayIndex = deltaDays(moment(data.createdAt).startOf('d').toDate(), new Date) + 1;
|
||||
} else {
|
||||
this.todayIndex = 0;
|
||||
}
|
||||
cardEndTime: number = 0; // 结束时间
|
||||
dayIndex: number = 0; // 已经领取了几天
|
||||
isOpen: boolean = false; // 是否开启中
|
||||
todayIndex: number = 0; // 现在可以领取第几天的奖励
|
||||
|
||||
constructor(activityData: ActivityModelType, createTime: number) {
|
||||
super(activityData, createTime)
|
||||
this.initData(activityData.data)
|
||||
}
|
||||
|
||||
public initData(data: string) {
|
||||
let dataObj = JSON.parse(data);
|
||||
let dataObj: MonthlyTickerInDb = JSON.parse(data);
|
||||
|
||||
this.id = dataObj.id;
|
||||
this.name = dataObj.name;
|
||||
@@ -49,18 +53,22 @@ export class MonthlyTicketData extends ActivityBase {
|
||||
this.firstReward = dataObj.firstReward;
|
||||
this.imageName = dataObj.imageName;
|
||||
this.rebate = dataObj.rebate;
|
||||
|
||||
this.isOpen = false;
|
||||
this.todayIndex = 0;
|
||||
this.dayIndex = 0;
|
||||
this.endTime = 0;
|
||||
}
|
||||
public canShow() { // 开始结束时间用于判断是否购买了月卡了,所以直接显示
|
||||
return true
|
||||
this.isForever = dataObj.isForever;
|
||||
}
|
||||
|
||||
constructor(activityData: ActivityModelType, createTime: number) {
|
||||
super(activityData, createTime)
|
||||
this.initData(activityData.data)
|
||||
//解析玩家领取记录
|
||||
public setPlayerRecords(data: ActivityMonthlyTicketModelType) {
|
||||
if (!data) {//没有购买月卡
|
||||
return;
|
||||
}
|
||||
this.dayIndex = data.dayIndex;
|
||||
this.cardEndTime = data.isForever? moment(data.endTime).valueOf(): this.endTime;
|
||||
if (data.isForever || moment(new Date).valueOf() < this.cardEndTime) {
|
||||
this.isOpen = true;
|
||||
this.todayIndex = deltaDays(moment(data.createdAt).startOf('d').toDate(), new Date) + 1;
|
||||
} else {
|
||||
this.todayIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -68,6 +68,7 @@ export class RechargeMoneyData extends ActivityBase {
|
||||
}
|
||||
|
||||
public pull() {
|
||||
this.ticketCnt --;
|
||||
let percent = this.percent;
|
||||
let randPercent = percent.filter(cur => {
|
||||
let hasAllGet = true;
|
||||
@@ -88,6 +89,7 @@ export class RechargeMoneyData extends ActivityBase {
|
||||
}
|
||||
}
|
||||
let result = getRandSingleEelm(elems);
|
||||
result.setHasGet(true);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,9 +17,6 @@ export class RankParam {
|
||||
@prop({ required: true })
|
||||
lv: number = 0;
|
||||
|
||||
@prop({ required: true })
|
||||
vLv?: number = 0;
|
||||
|
||||
@prop({ required: true })
|
||||
guildName: string = "";
|
||||
|
||||
@@ -44,7 +41,6 @@ export class RankParam {
|
||||
constructor(role: RoleUpdate|RankParam, fromDb: boolean) {
|
||||
if(role.roleName) this.roleName = role.roleName;
|
||||
if(role.lv) this.lv = role.lv;
|
||||
if(role.vLv) this.vLv = role.vLv;
|
||||
if(role.head) this.head = role.head;
|
||||
if(role.frame) this.frame = role.frame;
|
||||
if(role.spine) this.spine = role.spine;
|
||||
|
||||
@@ -255,3 +255,16 @@ export const LINK = {
|
||||
export const REBORN = {
|
||||
REBORON_HERO: 500, // 武将重生元宝数量
|
||||
};
|
||||
export const VIP = {
|
||||
VIP_GUILD_DONATE_COST_GOLD_RATIO: 0.5, // 军团贡献元宝,按照捐献所需要的元宝自动乘以倍率
|
||||
VIP_TOWER_SKIP_CE_RATIO_WITHOUT_VIP: 2, // 镇念塔没有月卡的时候所需要的战力倍数
|
||||
VIP_TOWER_SKIP_CE_RATIO_WITH_VIP: 1.2, // 镇念塔有月卡的时候所需要的战力倍数
|
||||
VIP_TOWER_TASK_CAN_SEND_AT_ONCE_WITHOUT_VIP: 0, // 镇念没有月卡是否可以被一键悬赏
|
||||
VIP_TOWER_TASK_CAN_SEND_AT_ONCE_WITH_VIP: 1, // 镇念塔有月卡是否可以被一键悬赏
|
||||
VIP_TOWER_HUNG_UP_RATIO: 1.2, // 镇念塔挂机奖励加成倍率,在dic_zyz_tower的rewardOfcollect基础上直接乘以这个倍数
|
||||
VIP_REGRET_CNT_WITHOUT_VIP: 0, // 没有月卡时候的悔棋次数
|
||||
VIP_REGRET_CNT_WITH_VIP: 1, // 有月卡时候的悔棋次数
|
||||
VIP_PVP_CHALLENGE_COUNTS_ADD: 2, // pvp上限增加,如果有月卡,在PVP.PVP_CHALLENGE_COUNTS的基础上增加X次
|
||||
VIP_DAILY_TIMERS_PER_DAY_ADD: 2, // 每日任务免费次数增加,如果有月卡,在dic_daily的timesPerDay的基础上增加多少次
|
||||
VIP_DUNGEON_CONST_FREE_ADD: 2, // 秘境免费次数增加,如果有月卡,在DUNGEON_CONST.DUNGEON_CONST_FREE的基础上加多少次
|
||||
};
|
||||
|
||||
@@ -135,6 +135,10 @@ export function getJewelRandSe(id: number, seid: number) {
|
||||
return new RandSe(id, dicRandom.id, rand);
|
||||
}
|
||||
|
||||
export function getGoldId() {
|
||||
return CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取元宝物品 { id, count }
|
||||
* @param count 元宝数量
|
||||
|
||||
Reference in New Issue
Block a user