diff --git a/game-server/app/servers/activity/handler/popUpShopHandler.ts b/game-server/app/servers/activity/handler/popUpShopHandler.ts index 5f342af72..7b1877312 100644 --- a/game-server/app/servers/activity/handler/popUpShopHandler.ts +++ b/game-server/app/servers/activity/handler/popUpShopHandler.ts @@ -44,7 +44,11 @@ export class PopUpShopHandler { let { conditionType } = msg; if( conditionType != POP_UP_SHOP_CONDITION_TYPE.GACHA_RES_NOT_ENOUGH && - conditionType != POP_UP_SHOP_CONDITION_TYPE.TERAPH_RES_NOT_ENOUGH + conditionType != POP_UP_SHOP_CONDITION_TYPE.TERAPH_RES_NOT_ENOUGH && + conditionType != POP_UP_SHOP_CONDITION_TYPE.STONE_NOT_ENOUGH && + conditionType != POP_UP_SHOP_CONDITION_TYPE.EQUIP_STAR_NOT_ENOUGH && + conditionType != POP_UP_SHOP_CONDITION_TYPE.FAVOR_NOT_ENOUGH && + conditionType != POP_UP_SHOP_CONDITION_TYPE.EXP_NOT_ENOUGH ) { return resResult(STATUS.WRONG_PARMS); } diff --git a/shared/consts/constModules/activityConst.ts b/shared/consts/constModules/activityConst.ts index 41448c108..13aa66055 100644 --- a/shared/consts/constModules/activityConst.ts +++ b/shared/consts/constModules/activityConst.ts @@ -218,6 +218,10 @@ export enum POP_UP_SHOP_CONDITION_TYPE { AUCTION = 8, // 拍卖行 TITLE = 9, // 爵位到达x TOWER = 10, // 镇念塔到达x层 + STONE_NOT_ENOUGH = 11, // 地魄石不足 + EQUIP_STAR_NOT_ENOUGH = 12, // 精炼道具不足 + FAVOR_NOT_ENOUGH = 13, // 好感道具不足 + EXP_NOT_ENOUGH = 14, // 经验道具不足 } export enum POP_UP_SHOP_REFRESH_TIME_TYPE { diff --git a/shared/domain/activityField/popUpShopField.ts b/shared/domain/activityField/popUpShopField.ts index 14f11e4e4..891246600 100644 --- a/shared/domain/activityField/popUpShopField.ts +++ b/shared/domain/activityField/popUpShopField.ts @@ -19,6 +19,7 @@ interface PopUpShopPackageInDb { id: number; // 弹出礼包id conditionType: number; // 条件类型 canLvUp: number; // 是否可升降 + canVipLvFirst: number; // 是否优先vip等级,当不购买的时候就降级 items: PopUpShopItemInDb[]; // 礼包 duration: number; // 礼包弹出之后,持续时间,单位小时 keyItem: PopUpShopKeyItemIbDb[]; // 关键资源限制,refreshDay内可以获得Y个 @@ -154,6 +155,7 @@ export class PopUpShopPackage { id: number; // 弹出礼包id conditionType: number; // 条件类型 canLvUp: number; // 是否可升降 + canVipLvFirst: number; // 是否优先vip等级,当不购买的时候就降级 checkPushingItem: number; // 是否在同类型礼包 duration: number; // 礼包弹出之后,持续时间,单位小时 refreshTimeType: number; // 刷新时间类型,0-不复现 1-自然日 2-自然周 3-自然月 4-从beginTime开始固定天 @@ -170,6 +172,7 @@ export class PopUpShopPackage { // setPlayerRecord的时候处理的数据 hasPushCnt: number = 0; // 已经推过几次了 hasPassCnt: number = 0; // 已经被连续无视过几次 + latestPassItemId: number = 0; // 最近一次无视了的 latestItemId: number = 0; // 升降礼包,最近一次的那档id latestBought: boolean = false; // 最近一次是否购买 @@ -180,6 +183,7 @@ export class PopUpShopPackage { this.id = data.id; this.conditionType = data.conditionType; this.canLvUp = data.canLvUp; + this.canVipLvFirst = data.canVipLvFirst; this.duration = data.duration; this.checkPushingItem = data.checkPushingItem; this.refreshTimeType = data.refreshTimeType; @@ -234,8 +238,10 @@ export class PopUpShopPackage { } else if (data.beginTime < now && data.endTime < now) { // 已经结束了的 if(data.hasBought) { // 是否看到了,但是没有买 this.hasPassCnt = 0; + this.latestPassItemId = 0; } else { this.hasPassCnt ++; + this.latestPassItemId = data.items[0].id; } } @@ -277,20 +283,46 @@ export class PopUpShopPackage { if(!minItem) minItem = item; if(!maxItem || maxItem.id > item.id) maxItem = item; - if(this.canLvUp == 1) { // 升降礼包 - if(this.latestBought && item.id == this.latestItemId + 1 ) { // 最近一次买了,升级 - items.push(item); - } else if(!this.latestBought && item.id == this.latestItemId - 1 ) { - items.push(item); - } - } else { + if(this.checkLvUpCanPush(item) && this.checkVipUpFirstCanPush(item)) { items.push(item); } } + if (this.canVipLvFirst == 1) { + items.sort((a, b) => a.id - b.id); + let maxItem = items[items.length - 1]; + if (maxItem) { + items = items.filter(cur => cur.param == maxItem.param); + } + } + if(!items.length && maxItem && minItem) items.push(this.latestBought? maxItem: minItem); return items; } + private checkLvUpCanPush(item: PopShopItem) { + if(this.canLvUp == 1) { // 升降礼包 + if(this.latestBought && item.id == this.latestItemId + 1 ) { // 最近一次买了,升级 + return true + } else if(!this.latestBought && item.id == this.latestItemId - 1 ) { + return true + } else { + return false + } + } else { + return true + } + } + + // 优先显示vip等级,如果忽视过了就降级 + private checkVipUpFirstCanPush(item: PopShopItem) { + if (this.canVipLvFirst == 1) { + let maxPassItemId = this.latestPassItemId; + let dicItem = maxPassItemId > 0 && this.findItemById(maxPassItemId); + if (dicItem && dicItem.param == item.param) return false; + } + return true; + } + public async getEffectTime() { let now = new Date(); let beginTime = now; @@ -440,6 +472,11 @@ export class PopShopItem { return param.oldLv < this.conditionParam[0] && param.newLv >= this.conditionParam[0]; case POP_UP_SHOP_CONDITION_TYPE.TOWER: return param.oldLv < this.conditionParam[0] && param.newLv >= this.conditionParam[0]; + case POP_UP_SHOP_CONDITION_TYPE.STONE_NOT_ENOUGH: + case POP_UP_SHOP_CONDITION_TYPE.EQUIP_STAR_NOT_ENOUGH: + case POP_UP_SHOP_CONDITION_TYPE.FAVOR_NOT_ENOUGH: + case POP_UP_SHOP_CONDITION_TYPE.EXP_NOT_ENOUGH: + return true; default: return false; }