弹出礼包:添加两种条件

This commit is contained in:
luying
2022-08-04 17:28:35 +08:00
parent 01b63099cf
commit 0d1eb9c7b6
8 changed files with 37 additions and 23 deletions

View File

@@ -1,17 +1,13 @@
import { Application, BackendSession, HandlerService, } from 'pinus';
import { resResult, splitString } from '../../../pubUtils/util';
import { ACTIVITY_RESOURCES_TYPE, CURRENCY_BY_TYPE, STATUS, CURRENCY_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, ACTIVITY_TYPE, DEBUG_MAGIC_WORD, PUSH_ROUTE, } from '../../../consts';
import { resResult, } from '../../../pubUtils/util';
import { STATUS, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, ACTIVITY_TYPE, DEBUG_MAGIC_WORD, PUSH_ROUTE, } from '../../../consts';
import { checkPopUpCondition, getPopUpShopData, getPopUpShopDataShow } from '../../../services/activity/popUpShopService';
import { ActivityModel, ActivityModelType } from '../../../db/Activity';
import { ActivityPopUpShopModel, ActivityPopUpShopModelType } from '../../../db/ActivityPopUpShop';
import { PopUpShopData } from '../../../domain/activityField/popUpShopField';
import { ActivityPopUpShopModel } from '../../../db/ActivityPopUpShop';
import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/activity/giftPackageService';
import { RewardParam } from '../../../domain/activityField/rewardField';
import { handleCost } from '../../../services/role/rewardService';
import moment = require('moment');
import { getActivitiesByType, getActivityById, pushActivities } from '../../../services/activity/activityService';
import { setInterval } from 'timers';
import { sendMessageToUser, sendMessageToUserWithSuc } from '../../../services/pushService';
import { sendMessageToUserWithSuc } from '../../../services/pushService';
export default function (app: Application) {
new HandlerService(app, {});

View File

@@ -1,5 +1,5 @@
import { STATUS } from './../../../consts/statusCode';
import { HANG_UP_CONSTS, ITEM_CHANGE_REASON, MSG_SOURCE, REDIS_KEY } from './../../../consts';
import { HANG_UP_CONSTS, ITEM_CHANGE_REASON, MSG_SOURCE, POP_UP_SHOP_CONDITION_TYPE, REDIS_KEY } from './../../../consts';
import { TaskHero, TowerTaskRecModel, TowerTaskRecType } from './../../../db/TowerTaskRec';
import { HangUpSpdUpRecModel } from './../../../db/HangUpSpdUpRec';
import { HangUpRecordModel } from './../../../db/HangUpRecord';
@@ -20,6 +20,7 @@ import { RewardInter } from '../../../pubUtils/interface';
import { combineItems } from '../../../services/role/util';
import { checkTaskInSkipTower } from '../../../services/task/taskService';
import { Rank } from '../../../services/rankService';
import { checkPopUpCondition } from '../../../services/activity/popUpShopService';
export default function(app: Application) {
return new TowerBattleHandler(app);
@@ -297,12 +298,13 @@ export class TowerBattleHandler {
let sid = session.get('sid');
let role = await RoleModel.findByRoleId(roleId);
let dicTower = gameData.tower.get(role.towerLv);
let oldTowerLv = role.towerLv;
let dicTower = gameData.tower.get(oldTowerLv);
if(!dicTower.canSkip) {
return resResult(STATUS.TOWER_CANNOT_SKIP);
}
let { warStatus, heroes: recHeroes } = await getTowerRecByLv(roleId, role.towerLv);
let { warStatus, heroes: recHeroes } = await getTowerRecByLv(roleId, oldTowerLv);
// 检查战力是否足够
let heroes = await HeroModel.findByRole(roleId, [{ field: 'ce', sortBy: -1 }], 'hid ce job', true);
@@ -344,6 +346,7 @@ export class TowerBattleHandler {
let r = new Rank(REDIS_KEY.TOWER_RANK, { serverId });
await r.setRankWithRoleInfo(roleId, role.towerLv - 1, role.towerUpTime.getTime(), role);
await checkTaskInSkipTower(serverId, roleId, sid, role.towerLv);
await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.TOWER, { oldLv: oldTowerLv - 1, newLv: role.towerLv - 1 })
return resResult(STATUS.SUCCESS, { ...data, goods });
}

View File

@@ -11,7 +11,7 @@ import { findIndex, pick } from 'underscore';
import { SclResultInter, SclPosInter } from '../../../pubUtils/interface';
import { SchoolModel } from '../../../db/School';
import { getTeraphStrengthenResult, getSchoolList } from '../../../services/roleService'
import { HERO_SYSTEM_TYPE, LINEUP_NUM, ROLE_SELECT, REDIS_KEY, TASK_TYPE, DEFAULT_HEROES, DEFAULT_HERO_LV, DEFAULT_ITEMS, DEFAULT_EQUIPS, DEFAULT_GOLD, DEFAULT_COIN, DEBUG_MAGIC_WORD, COUNTER, DEFAULT_LV, ITEM_CHANGE_REASON, PUSH_ROUTE } from '../../../consts';
import { HERO_SYSTEM_TYPE, LINEUP_NUM, ROLE_SELECT, REDIS_KEY, TASK_TYPE, DEFAULT_HEROES, DEFAULT_HERO_LV, DEFAULT_ITEMS, DEFAULT_EQUIPS, DEFAULT_GOLD, DEFAULT_COIN, DEBUG_MAGIC_WORD, COUNTER, DEFAULT_LV, ITEM_CHANGE_REASON, PUSH_ROUTE, POP_UP_SHOP_CONDITION_TYPE } from '../../../consts';
import { checkBattleHeroesByHid, roleLevelup } from '../../../services/normalBattleService';
import { Rank } from '../../../services/rankService';
import { updateUserInfo } from '../../../services/redisService';
@@ -28,6 +28,7 @@ import { createHeroes } from '../../../services/role/createHero';
import { calculateCeWithHero, calculateCeWithRole } from '../../../services/playerCeService';
import { sendMessageToUserWithSuc } from '../../../services/pushService';
import { GuildLeader } from '../../../domain/rank';
import { checkPopUpCondition } from '../../../services/activity/popUpShopService';
export default function (app: Application) {
new HandlerService(app, {});
@@ -100,7 +101,8 @@ export class RoleHandler {
let { curRole } = await calculateCeWithRole(HERO_SYSTEM_TYPE.TITLE, roleId, serverId, sid, update);
// 任务
await checkTask(serverId, roleId, sid, TASK_TYPE.ROLE_TITLE, { oldTitle: title, title: update.title });
await checkTask(serverId, roleId, sid, TASK_TYPE.ROLE_TITLE, { oldTitle: title, title: update.title }); // 弹出礼包
await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.TITLE, { oldLv: title, newLv: update.title });
return resResult(STATUS.SUCCESS, { roleId, title: curRole.title });
}

View File

@@ -72,9 +72,9 @@ export async function checkPopUpConditionWhenGuildActivityEnd() {
let i = -1;
let interval = setInterval(async () => {
if (++i < n) {
console.log('****', i)
// console.log('****', i)
let users = allOnlineUsers.slice(i * PUSH_BATCH, (i + 1) * PUSH_BATCH - 1);
console.log('****', users)
// console.log('****', users)
for(let { serverId, roleId, sid } of users) {
await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.AUCTION, {}, sid);
}

View File

@@ -1,6 +1,6 @@
import { HeroModel, HeroType } from './../db/Hero';
import { HangUpRecordModel } from './../db/HangUpRecord';
import { HANG_UP_CONSTS, REDIS_KEY, TASK_TYPE, TOWER_FORBIDDEN_CHARA_TYPE, TOWER_TASK_STATUS, MAIL_TYPE, MSG_SOURCE } from './../consts';
import { HANG_UP_CONSTS, REDIS_KEY, TASK_TYPE, TOWER_FORBIDDEN_CHARA_TYPE, TOWER_TASK_STATUS, MAIL_TYPE, MSG_SOURCE, POP_UP_SHOP_CONDITION_TYPE } from './../consts';
import { BattleRecordModel } from './../db/BattleRecord';
import { TowerRecordModel } from './../db/TowerRecord';
import { RoleModel, RoleType } from './../db/Role';
@@ -19,6 +19,7 @@ import { DicTowerTask } from '../pubUtils/dictionary/DicTowerTask';
import * as dicParam from '../pubUtils/dicParam';
import { getVipHungupReward } from './activity/monthlyTicketService';
import { pushTowerMsg } from './sysChatService';
import { checkPopUpCondition } from './activity/popUpShopService';
/**
* 获取当前镇念塔状态
@@ -240,6 +241,8 @@ export async function towerBattleEnd(sid: string, roleId: string, serverId: numb
await checkAndStartHungUp(roleId, roleName, role.towerLv);
// 任务
await checkTask(serverId, roleId, sid, TASK_TYPE.BATTLE_TOWER_LV, { towerLv: role.towerLv - 1 });
await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.TOWER, { oldLv: towerLv - 1, newLv: role.towerLv - 1 })
pushTowerMsg(roleId, roleName, serverId, MSG_SOURCE.TOWER_SUC, role.towerLv - 1);
}
return {

View File

@@ -195,6 +195,8 @@ export enum POP_UP_SHOP_CONDITION_TYPE {
PVP = 6, // pvp
EQUIP_STAR = 7, // 装备精炼
AUCTION = 8, // 拍卖行
TITLE = 9, // 爵位到达x
TOWER = 10, // 镇念塔到达x层
}
export enum POP_UP_SHOP_REFRESH_TIME_TYPE {

View File

@@ -62,6 +62,7 @@ export class NewHeroGiftData extends ActivityBase {
let dataObj: NewHeroGiftDataInDb = JSON.parse(data);
this.hid = dataObj.hid;
this.position = dataObj.position;
this.consumePoint = dataObj.consumePoint;
this.explain = dataObj.explain
let arr = dataObj.rewards||[];
for (let obj of arr) {

View File

@@ -83,6 +83,10 @@ export class PopUpShopData extends ActivityBase {
}
}
public findByConditionType(conditionType: number) {
return this.packages.filter(cur => cur.conditionType == conditionType);
}
//解析玩家开启的商店记录
public setPlayerRecords(datas: ActivityPopUpShopModelType[], latestRecords: ActivityPopUpShopModelType[], totalPay: number, lv: number) {
if (!datas) return;
@@ -221,10 +225,9 @@ export class PopUpShopPackage {
if(data.beginTime <= now && data.endTime > now) { // 正在进行中
for(let itemData of data.items) {
let item = this.findItemByProductID(itemData.productID);
let item = this.findItemById(itemData.id);
if(item) {
item.setPlayerRecords(data, itemData);
console.log('#### item.isPushing', item.isPushing)
if(item.isPushing) this.isPushing = true;
}
}
@@ -237,7 +240,7 @@ export class PopUpShopPackage {
}
for(let itemData of data.items) {
let item = this.findItemByProductID(itemData.productID);
let item = this.findItemById(itemData.id);
if(item) {
item.addPushCnt();
}
@@ -332,7 +335,7 @@ export class PopUpShopPackage {
this.addPlayerRecord(popUpShopRec);
let items: PopUpShopItemShow[] = [];
for(let item of popUpShopRec.items) {
let itemObj = this.findItemByProductID(item.productID);
let itemObj = this.findItemById(item.id);
if(itemObj && itemObj.isPushing) {
let obj = new PopUpShopItemShow(itemObj);
items.push(obj);
@@ -432,6 +435,10 @@ export class PopShopItem {
return param.equipStar >= this.conditionParam[0];
case POP_UP_SHOP_CONDITION_TYPE.AUCTION:
return true;
case POP_UP_SHOP_CONDITION_TYPE.TITLE:
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];
default:
return false;
}
@@ -439,10 +446,10 @@ export class PopShopItem {
public checkKeyTime() {
let keyItem = this.parent.keyItem;
console.log('####', keyItem)
// console.log('####', keyItem)
for(let key of keyItem) {
let hasCurKey = this.rewardInter.find(cur => cur.id == key.gid);
console.log('#### hasCurKey', hasCurKey, key.hasBoughtCnt, key.max)
// console.log('#### hasCurKey', hasCurKey, key.hasBoughtCnt, key.max)
if(hasCurKey && key.hasBoughtCnt > key.max) return false;
}
return true;
@@ -469,7 +476,7 @@ export class PopUpShopKeyItem {
}
addHasBoughtCnt(items: ActivityPopUpShopItem[]) {
console.log('###### addHasBoughtCnt', items)
// console.log('###### addHasBoughtCnt', items)
for(let { rewards, hasBoughtCnt } of items) {
for(let { id, count } of rewards) {
if(id == this.gid) this.hasBoughtCnt += count * hasBoughtCnt;