feat(破解封号): 防破解实时封号
This commit is contained in:
@@ -3,7 +3,7 @@ import { BattleRecordModel } from '../../../db/BattleRecord';
|
|||||||
import { BattleSweepRecordModel } from '../../../db/BattleSweepRecord';
|
import { BattleSweepRecordModel } from '../../../db/BattleSweepRecord';
|
||||||
import { BattleCheatRecModel } from '../../../db/BattleCheatRec';
|
import { BattleCheatRecModel } from '../../../db/BattleCheatRec';
|
||||||
import { genCode, getReasonByWarType, getWarTypeName } from '../../../pubUtils/util';
|
import { genCode, getReasonByWarType, getWarTypeName } from '../../../pubUtils/util';
|
||||||
import { WAR_TYPE, EVENT_STATUS, REDIS_KEY, KING_EXP_RATIO_TYPE, TA_EVENT, ITEM_CHANGE_REASON } from '../../../consts';
|
import { WAR_TYPE, EVENT_STATUS, REDIS_KEY, KING_EXP_RATIO_TYPE, TA_EVENT, ITEM_CHANGE_REASON, BLOCK_TYPE, CHECT_BLOCK_TYPE, CHECT_BATTLE_TYPE } from '../../../consts';
|
||||||
import { checkDaily, checkDailyAndIncrease } from '../../../services/dailyBattleService';
|
import { checkDaily, checkDailyAndIncrease } from '../../../services/dailyBattleService';
|
||||||
import { checkTowerWar, towerBattleEnd } from '../../../services/battleService';
|
import { checkTowerWar, towerBattleEnd } from '../../../services/battleService';
|
||||||
import { WarReward } from '../../../services/warRewardService';
|
import { WarReward } from '../../../services/warRewardService';
|
||||||
@@ -33,6 +33,7 @@ import { addItems } from '../../../services/role/rewardService';
|
|||||||
import { treasureHuntChallengeConsume } from '../../../services/activity/treasureHuntService';
|
import { treasureHuntChallengeConsume } from '../../../services/activity/treasureHuntService';
|
||||||
import { combineItems } from '../../../services/role/util';
|
import { combineItems } from '../../../services/role/util';
|
||||||
import { isHeroHidden } from '../../../services/dataService';
|
import { isHeroHidden } from '../../../services/dataService';
|
||||||
|
import { getRoleOnlineInfo, redisClient, roleLeave } from '../../../services/redisService';
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
new HandlerService(app, {});
|
new HandlerService(app, {});
|
||||||
@@ -61,7 +62,7 @@ export class NormalBattleHandler {
|
|||||||
if (ap < warInfo.cost) {
|
if (ap < warInfo.cost) {
|
||||||
return resResult(STATUS.BATTLE_ACTION_POINT_LACK);
|
return resResult(STATUS.BATTLE_ACTION_POINT_LACK);
|
||||||
}
|
}
|
||||||
if(role.lv < warInfo.lvLimited) {
|
if (role.lv < warInfo.lvLimited) {
|
||||||
return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH);
|
return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
// 前置关卡是否挑战过
|
// 前置关卡是否挑战过
|
||||||
@@ -75,7 +76,7 @@ export class NormalBattleHandler {
|
|||||||
|
|
||||||
let { isOK, hids, heroes, lineup } = await checkBattleHeroes(roleId, seqIds);
|
let { isOK, hids, heroes, lineup } = await checkBattleHeroes(roleId, seqIds);
|
||||||
if (!isOK) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
|
if (!isOK) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
|
||||||
if(isHeroHidden(...hids)) return resResult(STATUS.HERO_IS_HIDDEN);
|
if (isHeroHidden(...hids)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||||
|
|
||||||
const battleCode = genCode(8); // 关卡唯一值
|
const battleCode = genCode(8); // 关卡唯一值
|
||||||
let dailyNum = {};
|
let dailyNum = {};
|
||||||
@@ -177,7 +178,7 @@ export class NormalBattleHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let role = await RoleModel.findByRoleId(roleId, 'lv vipStartTime warStar warCount refWarCount roleId');
|
let role = await RoleModel.findByRoleId(roleId, 'lv vipStartTime warStar warCount refWarCount roleId');
|
||||||
let apJson = await setAp(serverId, roleId, ip, role.lv, isSuccess? -1 * warInfo.cost: 0, sid, getReasonByWarType(warInfo.warType)); // 扣除体力
|
let apJson = await setAp(serverId, roleId, ip, role.lv, isSuccess ? -1 * warInfo.cost : 0, sid, getReasonByWarType(warInfo.warType)); // 扣除体力
|
||||||
if (!apJson) {
|
if (!apJson) {
|
||||||
return resResult(STATUS.BATTLE_ACTION_POINT_LACK);
|
return resResult(STATUS.BATTLE_ACTION_POINT_LACK);
|
||||||
}
|
}
|
||||||
@@ -192,17 +193,17 @@ export class NormalBattleHandler {
|
|||||||
let dailyNum = {};
|
let dailyNum = {};
|
||||||
let towerStatus = null;
|
let towerStatus = null;
|
||||||
let dungeonNum = {};
|
let dungeonNum = {};
|
||||||
if(warInfo.warType == WAR_TYPE.NORMAL || warInfo.warType == WAR_TYPE.MAIN_ELITE) {
|
if (warInfo.warType == WAR_TYPE.NORMAL || warInfo.warType == WAR_TYPE.MAIN_ELITE) {
|
||||||
if(!isFirst) {
|
if (!isFirst) {
|
||||||
let checkResult = await checkWarCountAndInc(battleId, isSuccess?1:0, role, false);
|
let checkResult = await checkWarCountAndInc(battleId, isSuccess ? 1 : 0, role, false);
|
||||||
if (checkResult.code != 0) {
|
if (checkResult.code != 0) {
|
||||||
return checkResult
|
return checkResult
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (warInfo.warType == WAR_TYPE.DAILY) {
|
if (warInfo.warType == WAR_TYPE.DAILY) {
|
||||||
let checkResult = await checkDailyAndIncrease(roleId, warStar, battleId, isSuccess?1:0, false, stars, role);
|
let checkResult = await checkDailyAndIncrease(roleId, warStar, battleId, isSuccess ? 1 : 0, false, stars, role);
|
||||||
if (checkResult.status == -1) {
|
if (checkResult.status == -1) {
|
||||||
return checkResult.resResult;
|
return checkResult.resResult;
|
||||||
}
|
}
|
||||||
@@ -224,7 +225,7 @@ export class NormalBattleHandler {
|
|||||||
warReward.setFixReward(towerEndResult.data.towerReward)
|
warReward.setFixReward(towerEndResult.data.towerReward)
|
||||||
}
|
}
|
||||||
} else if (warInfo.warType == WAR_TYPE.MYSTERY) {
|
} else if (warInfo.warType == WAR_TYPE.MYSTERY) {
|
||||||
let checkResult = await checkDungeonAndIncrease(roleId, isSuccess?1:0, false, battleId);
|
let checkResult = await checkDungeonAndIncrease(roleId, isSuccess ? 1 : 0, false, battleId);
|
||||||
let role = await RoleModel.saveDungeonHero(roleId, battleId, heroes, isSuccess);
|
let role = await RoleModel.saveDungeonHero(roleId, battleId, heroes, isSuccess);
|
||||||
if (role) {
|
if (role) {
|
||||||
await saveDungeonFirst(role, battleId, BattleRecord);
|
await saveDungeonFirst(role, battleId, BattleRecord);
|
||||||
@@ -235,7 +236,7 @@ export class NormalBattleHandler {
|
|||||||
}
|
}
|
||||||
dungeonNum = Object.assign(dungeonNum, checkResult.data)
|
dungeonNum = Object.assign(dungeonNum, checkResult.data)
|
||||||
} else if (warInfo.warType == WAR_TYPE.NORMAL) {
|
} else if (warInfo.warType == WAR_TYPE.NORMAL) {
|
||||||
if(isSuccess) {
|
if (isSuccess) {
|
||||||
let role = await RoleModel.updateMainWarId(roleId, battleId, nowSeconds());
|
let role = await RoleModel.updateMainWarId(roleId, battleId, nowSeconds());
|
||||||
if (role) {
|
if (role) {
|
||||||
let r = new Rank(REDIS_KEY.MAIN_RANK, { serverId });
|
let r = new Rank(REDIS_KEY.MAIN_RANK, { serverId });
|
||||||
@@ -243,7 +244,7 @@ export class NormalBattleHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (warInfo.warType == WAR_TYPE.MAIN_ELITE) {
|
} else if (warInfo.warType == WAR_TYPE.MAIN_ELITE) {
|
||||||
if(isSuccess) {
|
if (isSuccess) {
|
||||||
let role = await RoleModel.updateMainEliteWarId(roleId, battleId, nowSeconds());
|
let role = await RoleModel.updateMainEliteWarId(roleId, battleId, nowSeconds());
|
||||||
if (role) {
|
if (role) {
|
||||||
let r = new Rank(REDIS_KEY.MAIN_ELITE_RANK, { serverId });
|
let r = new Rank(REDIS_KEY.MAIN_ELITE_RANK, { serverId });
|
||||||
@@ -266,7 +267,7 @@ export class NormalBattleHandler {
|
|||||||
isFirst = await challengeNewHeroGK(serverId, roleId, activityId, battleId)
|
isFirst = await challengeNewHeroGK(serverId, roleId, activityId, battleId)
|
||||||
}
|
}
|
||||||
} else if (warInfo.warType == WAR_TYPE.ACT_TREASURE_HUNT) {
|
} else if (warInfo.warType == WAR_TYPE.ACT_TREASURE_HUNT) {
|
||||||
if(isSuccess) {
|
if (isSuccess) {
|
||||||
await treasureHuntChallengeConsume(serverId, roleId, sid);
|
await treasureHuntChallengeConsume(serverId, roleId, sid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -276,7 +277,7 @@ export class NormalBattleHandler {
|
|||||||
if (isFirst) {
|
if (isFirst) {
|
||||||
// await switchOnFunc(roleId, FUNC_OPT_TYPE.BATTLE_END, battleId, session);
|
// await switchOnFunc(roleId, FUNC_OPT_TYPE.BATTLE_END, battleId, session);
|
||||||
warReward.setCondition(0, true);
|
warReward.setCondition(0, true);
|
||||||
reportTAEvent(roleId, TA_EVENT.GK_FIRST_PASS, { war_id: battleId, war_type: getWarTypeName(warInfo.warType), pass_time: Date.now(), pass_duration: nowSeconds() - getSeconds(createdAt), hero_list: dbHeroes });
|
reportTAEvent(roleId, TA_EVENT.GK_FIRST_PASS, { war_id: battleId, war_type: getWarTypeName(warInfo.warType), pass_time: Date.now(), pass_duration: nowSeconds() - getSeconds(createdAt), hero_list: dbHeroes });
|
||||||
pushMysteryFirstMsg(roleId, roleName, serverId, warInfo.warType, warInfo.war_id);
|
pushMysteryFirstMsg(roleId, roleName, serverId, warInfo.warType, warInfo.war_id);
|
||||||
pushVestigeFirstMsg(roleId, roleName, serverId, warInfo.warType, warInfo.war_id);
|
pushVestigeFirstMsg(roleId, roleName, serverId, warInfo.warType, warInfo.war_id);
|
||||||
}
|
}
|
||||||
@@ -319,7 +320,7 @@ export class NormalBattleHandler {
|
|||||||
let sid = session.get('sid');
|
let sid = session.get('sid');
|
||||||
let serverId = session.get('serverId');
|
let serverId = session.get('serverId');
|
||||||
let ip = session.get('ip');
|
let ip = session.get('ip');
|
||||||
|
|
||||||
let warInfo = gameData.war.get(battleId);
|
let warInfo = gameData.war.get(battleId);
|
||||||
if (!warInfo) {
|
if (!warInfo) {
|
||||||
return resResult(STATUS.BATTLE_MISS_INFO);
|
return resResult(STATUS.BATTLE_MISS_INFO);
|
||||||
@@ -331,13 +332,13 @@ export class NormalBattleHandler {
|
|||||||
return resResult(STATUS.BATTLE_SWEEP_CONDITION_STAR);
|
return resResult(STATUS.BATTLE_SWEEP_CONDITION_STAR);
|
||||||
}
|
}
|
||||||
let role = await RoleModel.findByRoleId(roleId, 'lv warCount refWarCount roleId');
|
let role = await RoleModel.findByRoleId(roleId, 'lv warCount refWarCount roleId');
|
||||||
if(role.lv < warInfo.lvLimited) {
|
if (role.lv < warInfo.lvLimited) {
|
||||||
return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH);
|
return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
// 扫荡次数
|
// 扫荡次数
|
||||||
let dailyNum = {};
|
let dailyNum = {};
|
||||||
let dungeonNum = {};
|
let dungeonNum = {};
|
||||||
if(warInfo.warType == WAR_TYPE.NORMAL || warInfo.warType == WAR_TYPE.MAIN_ELITE) {
|
if (warInfo.warType == WAR_TYPE.NORMAL || warInfo.warType == WAR_TYPE.MAIN_ELITE) {
|
||||||
let checkResult = await checkWarCountAndInc(battleId, count, role, true);
|
let checkResult = await checkWarCountAndInc(battleId, count, role, true);
|
||||||
if (checkResult.code != 0) {
|
if (checkResult.code != 0) {
|
||||||
return checkResult
|
return checkResult
|
||||||
@@ -383,7 +384,7 @@ export class NormalBattleHandler {
|
|||||||
|
|
||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
battleId, count,
|
battleId, count,
|
||||||
battleGoods: result,
|
battleGoods: result,
|
||||||
dailyNum, dungeonNum,
|
dailyNum, dungeonNum,
|
||||||
...actordata
|
...actordata
|
||||||
});
|
});
|
||||||
@@ -432,11 +433,11 @@ export class NormalBattleHandler {
|
|||||||
let vipStartTime: number = session.get('vipStartTime');
|
let vipStartTime: number = session.get('vipStartTime');
|
||||||
|
|
||||||
let battleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode);
|
let battleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode);
|
||||||
if(!battleRecord || battleRecord.roleId != roleId || battleRecord.battleId != warId) {
|
if (!battleRecord || battleRecord.roleId != roleId || battleRecord.battleId != warId) {
|
||||||
return resResult(STATUS.WRONG_PARMS);
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
}
|
}
|
||||||
let maxRegretCnt = getVipRegretCnt(vipStartTime);
|
let maxRegretCnt = getVipRegretCnt(vipStartTime);
|
||||||
return resResult(STATUS.SUCCESS, { regretCnt: battleRecord.regretCnt||0, maxRegretCnt });
|
return resResult(STATUS.SUCCESS, { regretCnt: battleRecord.regretCnt || 0, maxRegretCnt });
|
||||||
}
|
}
|
||||||
|
|
||||||
// 记录悔棋次数
|
// 记录悔棋次数
|
||||||
@@ -447,17 +448,17 @@ export class NormalBattleHandler {
|
|||||||
let vipStartTime: number = session.get('vipStartTime');
|
let vipStartTime: number = session.get('vipStartTime');
|
||||||
|
|
||||||
let battleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode);
|
let battleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode);
|
||||||
if(!battleRecord || battleRecord.roleId != roleId || battleRecord.battleId != warId) {
|
if (!battleRecord || battleRecord.roleId != roleId || battleRecord.battleId != warId) {
|
||||||
return resResult(STATUS.WRONG_PARMS);
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
}
|
}
|
||||||
let maxRegretCnt = getVipRegretCnt(vipStartTime);
|
let maxRegretCnt = getVipRegretCnt(vipStartTime);
|
||||||
let regretCnt = battleRecord.regretCnt||0;
|
let regretCnt = battleRecord.regretCnt || 0;
|
||||||
if(regretCnt + count > maxRegretCnt) {
|
if (regretCnt + count > maxRegretCnt) {
|
||||||
return resResult(STATUS.BATTLE_REGRET_MAX);
|
return resResult(STATUS.BATTLE_REGRET_MAX);
|
||||||
}
|
}
|
||||||
battleRecord = await BattleRecordModel.incRegretCnt(battleCode, count);
|
battleRecord = await BattleRecordModel.incRegretCnt(battleCode, count);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { regretCnt: battleRecord.regretCnt||0, maxRegretCnt });
|
return resResult(STATUS.SUCCESS, { regretCnt: battleRecord.regretCnt || 0, maxRegretCnt });
|
||||||
}
|
}
|
||||||
|
|
||||||
async getMainStarBox(msg: {}, session: BackendSession) {
|
async getMainStarBox(msg: {}, session: BackendSession) {
|
||||||
@@ -471,8 +472,8 @@ export class NormalBattleHandler {
|
|||||||
// 关卡列表
|
// 关卡列表
|
||||||
async receiveChapterBox(msg: { chapter: number, id: number, warType: number }, session: BackendSession) {
|
async receiveChapterBox(msg: { chapter: number, id: number, warType: number }, session: BackendSession) {
|
||||||
const { id, chapter, warType } = msg;
|
const { id, chapter, warType } = msg;
|
||||||
if(!isNumber(id)) return resResult(STATUS.WRONG_PARMS);
|
if (!isNumber(id)) return resResult(STATUS.WRONG_PARMS);
|
||||||
|
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let roleName = session.get('roleName');
|
let roleName = session.get('roleName');
|
||||||
let sid = session.get('sid');
|
let sid = session.get('sid');
|
||||||
@@ -482,18 +483,18 @@ export class NormalBattleHandler {
|
|||||||
let rewards: RewardInter[] = [];
|
let rewards: RewardInter[] = [];
|
||||||
let star = getStarOfChapter(role.warStar, warType, chapter);
|
let star = getStarOfChapter(role.warStar, warType, chapter);
|
||||||
|
|
||||||
let boxIds = id == 0? gameData.mainBoxByChapter.get(`${warType}_${chapter}`): [id];
|
let boxIds = id == 0 ? gameData.mainBoxByChapter.get(`${warType}_${chapter}`) : [id];
|
||||||
|
|
||||||
for(let id of boxIds) {
|
for (let id of boxIds) {
|
||||||
let dicBox = gameData.mainBox.get(id);
|
let dicBox = gameData.mainBox.get(id);
|
||||||
if(dicBox && dicBox.chapter == chapter && dicBox.warType == warType) {
|
if (dicBox && dicBox.chapter == chapter && dicBox.warType == warType) {
|
||||||
if(star >= dicBox.star && role.receivedBox.indexOf(id) == -1) {
|
if (star >= dicBox.star && role.receivedBox.indexOf(id) == -1) {
|
||||||
rewards.push(...dicBox.reward);
|
rewards.push(...dicBox.reward);
|
||||||
ids.push(id);
|
ids.push(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(ids.length <= 0) return resResult(STATUS.BATTLE_NO_BOX_CAN_RECEIVE);
|
if (ids.length <= 0) return resResult(STATUS.BATTLE_NO_BOX_CAN_RECEIVE);
|
||||||
role = await RoleModel.receivedBox(roleId, ids);
|
role = await RoleModel.receivedBox(roleId, ids);
|
||||||
let goods = await addItems(roleId, roleName, sid, rewards, ITEM_CHANGE_REASON.RECEIVE_CHAPTER_BOX)
|
let goods = await addItems(roleId, roleName, sid, rewards, ITEM_CHANGE_REASON.RECEIVE_CHAPTER_BOX)
|
||||||
|
|
||||||
@@ -506,7 +507,7 @@ export class NormalBattleHandler {
|
|||||||
// 关卡列表
|
// 关卡列表
|
||||||
async receiveWarReward(msg: { chapter: number, warType: number }, session: BackendSession) {
|
async receiveWarReward(msg: { chapter: number, warType: number }, session: BackendSession) {
|
||||||
const { chapter, warType } = msg;
|
const { chapter, warType } = msg;
|
||||||
|
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let roleName = session.get('roleName');
|
let roleName = session.get('roleName');
|
||||||
let sid = session.get('sid');
|
let sid = session.get('sid');
|
||||||
@@ -515,16 +516,16 @@ export class NormalBattleHandler {
|
|||||||
let { warStar, receivedWarIds = [] } = role;
|
let { warStar, receivedWarIds = [] } = role;
|
||||||
let warIds: number[] = [];
|
let warIds: number[] = [];
|
||||||
let rewards: RewardInter[] = [];
|
let rewards: RewardInter[] = [];
|
||||||
let mainWarRewards = gameData.mainWarReward.get(`${warType}_${chapter}`)??[];
|
let mainWarRewards = gameData.mainWarReward.get(`${warType}_${chapter}`) ?? [];
|
||||||
|
|
||||||
for(let { warId, cityReward } of mainWarRewards) {
|
for (let { warId, cityReward } of mainWarRewards) {
|
||||||
let index = warStar.findIndex(cur => cur.id == warId);
|
let index = warStar.findIndex(cur => cur.id == warId);
|
||||||
if(index != -1 && receivedWarIds.indexOf(warId) == -1) {
|
if (index != -1 && receivedWarIds.indexOf(warId) == -1) {
|
||||||
rewards.push(...cityReward);
|
rewards.push(...cityReward);
|
||||||
warIds.push(warId);
|
warIds.push(warId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(warIds.length <= 0) return resResult(STATUS.BATTLE_NO_WAR_REWARD_CAN_RECEIVE);
|
if (warIds.length <= 0) return resResult(STATUS.BATTLE_NO_WAR_REWARD_CAN_RECEIVE);
|
||||||
role = await RoleModel.receiveWarRewards(roleId, warIds);
|
role = await RoleModel.receiveWarRewards(roleId, warIds);
|
||||||
let goods = await addItems(roleId, roleName, sid, rewards, ITEM_CHANGE_REASON.RECEIVE_CHAPTER_BOX)
|
let goods = await addItems(roleId, roleName, sid, rewards, ITEM_CHANGE_REASON.RECEIVE_CHAPTER_BOX)
|
||||||
|
|
||||||
@@ -543,6 +544,47 @@ export class NormalBattleHandler {
|
|||||||
if (!rec) {
|
if (!rec) {
|
||||||
return resResult(STATUS.BATTLE_CHECK_REC_SAVE_ERR);
|
return resResult(STATUS.BATTLE_CHECK_REC_SAVE_ERR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await this.blockByRecordBattleCheat(roleId, type);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS);
|
return resResult(STATUS.SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 防破解实时封号
|
||||||
|
* @param {string} roleId
|
||||||
|
* @param {number} type 查封类型(封除类型不为200)
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async blockByRecordBattleCheat(roleId: string, type: number) {
|
||||||
|
if (type && type === CHECT_BATTLE_TYPE) {
|
||||||
|
// console.log("blockByRecordBattleCheat----type=", type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置redis开关
|
||||||
|
const isCheckBlock = await redisClient().getAsync(REDIS_KEY.IS_CHECT_BLOCK);
|
||||||
|
if (!isCheckBlock || isCheckBlock == undefined) {
|
||||||
|
await redisClient().setAsync(REDIS_KEY.IS_CHECT_BLOCK, `${CHECT_BLOCK_TYPE.OPEN}`);;
|
||||||
|
}
|
||||||
|
if (isCheckBlock && parseInt(isCheckBlock) != CHECT_BLOCK_TYPE.OPEN) {
|
||||||
|
console.log("blockByRecordBattleCheat-防破解查封功能已关闭!!!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const blockType: BLOCK_TYPE = BLOCK_TYPE.BLOCK;
|
||||||
|
const blockReason: string = "使用第三方软件, 封停账号, 封停时间为:" + new Date();;
|
||||||
|
let role = await RoleModel.updateRoleInfo(roleId, { blockType, blockReason });
|
||||||
|
if (!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||||
|
|
||||||
|
let { isOnline, sid } = await getRoleOnlineInfo(roleId);
|
||||||
|
if (isOnline) {
|
||||||
|
await this.app.rpc.connector.connectorRemote.setOtherUserSession.toServer(sid, [{ roleId, blockType }]);
|
||||||
|
await this.app.rpc.connector.connectorRemote.remoteLogin.toServer(sid, roleId, STATUS.BLOCKED);
|
||||||
|
await roleLeave(roleId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ export const PUSH_INTERVAL = 5 * 1000; // 分批时间,5秒一批
|
|||||||
export const CLOSE_LOGIN_WHEN_ONLINE_MAX = 1; // 是否在服务器达到最大在线人数限制时关闭登录
|
export const CLOSE_LOGIN_WHEN_ONLINE_MAX = 1; // 是否在服务器达到最大在线人数限制时关闭登录
|
||||||
export const MAX_ONLINE_USER_COUNT = 100000; // 最大在线人数限制
|
export const MAX_ONLINE_USER_COUNT = 100000; // 最大在线人数限制
|
||||||
|
|
||||||
|
export const CHECT_BATTLE_TYPE = 200; //非异常战斗类型
|
||||||
|
|
||||||
export enum TIME_OUTPUT_TYPE {
|
export enum TIME_OUTPUT_TYPE {
|
||||||
DATE = 1,
|
DATE = 1,
|
||||||
STAMP_10 = 2,
|
STAMP_10 = 2,
|
||||||
@@ -277,6 +279,9 @@ export enum REDIS_KEY {
|
|||||||
PUBLIC_ACCOUNT_GIFT = 'pubAccGiftChannel', // 公众号频道
|
PUBLIC_ACCOUNT_GIFT = 'pubAccGiftChannel', // 公众号频道
|
||||||
SEND_GIFT_CODE = 'sendGiftCodeChannel', // 礼包码频道
|
SEND_GIFT_CODE = 'sendGiftCodeChannel', // 礼包码频道
|
||||||
MAX_ONLINE_USERS = 'maxOnlineUsers', // 最高在线人数限制
|
MAX_ONLINE_USERS = 'maxOnlineUsers', // 最高在线人数限制
|
||||||
|
IS_CHECT_BLOCK = 'isCheckBlock', // 防破解检测封号开关,0-开,1-关
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 各排行榜对应hash的key
|
// 各排行榜对应hash的key
|
||||||
@@ -1321,4 +1326,10 @@ export enum TEAM_TYPE {
|
|||||||
LADDER = 2, // 名将擂台
|
LADDER = 2, // 名将擂台
|
||||||
VESTIGE = 3, // 遗迹
|
VESTIGE = 3, // 遗迹
|
||||||
GVG_BATTLE = 4, // 激战期
|
GVG_BATTLE = 4, // 激战期
|
||||||
|
}
|
||||||
|
|
||||||
|
// 异常战斗封号开关
|
||||||
|
export enum CHECT_BLOCK_TYPE{
|
||||||
|
OPEN = 0, //开
|
||||||
|
CLOSE = 1, //关
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user