镇念塔:禁用角色

This commit is contained in:
luying
2021-08-18 20:24:57 +08:00
parent 18dfafd036
commit 0e3756978c
4 changed files with 51 additions and 1 deletions

View File

@@ -1,7 +1,7 @@
import { HeroModel } from './../db/Hero'; import { HeroModel } from './../db/Hero';
import { HangUpRecordModel } from './../db/HangUpRecord'; import { HangUpRecordModel } from './../db/HangUpRecord';
import { pinus } from 'pinus'; import { pinus } from 'pinus';
import { HANG_UP_CONSTS, REDIS_KEY, TASK_TYPE, TIME_OUTPUT_TYPE, GOLD_COST_RATIO, TOWER_TASK_STATUS, MAIL_TYPE } from './../consts'; import { HANG_UP_CONSTS, REDIS_KEY, TASK_TYPE, TOWER_FORBIDDEN_CHARA_TYPE, TOWER_TASK_STATUS, MAIL_TYPE } from './../consts';
import { BattleRecordModel } from './../db/BattleRecord'; import { BattleRecordModel } from './../db/BattleRecord';
import { TowerRecordModel } from './../db/TowerRecord'; import { TowerRecordModel } from './../db/TowerRecord';
import { RoleModel, RoleType } from './../db/Role'; import { RoleModel, RoleType } from './../db/Role';
@@ -158,10 +158,16 @@ export async function checkTowerWar(roleId: string, battleId: number, heroes: Ar
return { status: -1, resResult: resResult(STATUS.TOWER_NOT_FOUND) }; return { status: -1, resResult: resResult(STATUS.TOWER_NOT_FOUND) };
} }
let { heroes: recHeroes = [], warStatus = [] } = tower; let { heroes: recHeroes = [], warStatus = [] } = tower;
let dicWar = gameData.war.get(battleId);
let { fobiddenCharactor } = dicWar;
for (let hid of heroes) { for (let hid of heroes) {
if (recHeroes.indexOf(hid) !== -1) { if (recHeroes.indexOf(hid) !== -1) {
return { status: -1, resResult: resResult(STATUS.TOWER_DUPLICATE_HERO) }; return { status: -1, resResult: resResult(STATUS.TOWER_DUPLICATE_HERO) };
} }
if(checkForbiddenChar(hid, fobiddenCharactor)) {
return { status: -1, resResult: resResult(STATUS.TOWER_HERO_FORBIDDEN) };
}
} }
const curWarStatus = warStatus.find(elem => elem.warId == battleId); const curWarStatus = warStatus.find(elem => elem.warId == battleId);
if (curWarStatus && curWarStatus.status) { if (curWarStatus && curWarStatus.status) {
@@ -175,6 +181,27 @@ export async function checkTowerWar(roleId: string, battleId: number, heroes: Ar
}; };
} }
function checkForbiddenChar(hid: number, fobiddenCharactor: {type: number, id: number}[]) {
let dicHero = gameData.hero.get(hid);
let dicJob = gameData.job.get(dicHero.jobid);
let flag = false;
for(let { type, id } of fobiddenCharactor) {
switch(type) {
case TOWER_FORBIDDEN_CHARA_TYPE.CHAR:
if(id == hid) flag = true;
break;
case TOWER_FORBIDDEN_CHARA_TYPE.JOB:
if(id == dicJob.job_class) flag = true;
break;
case TOWER_FORBIDDEN_CHARA_TYPE.CAMP:
if(id == dicHero.camp) flag = true;
break;
}
if(flag) break;
}
return flag;
}
export async function towerBattleEnd(sid: string, funcs: number[], roleId: string, serverId: number, battleCode: string, battleId: number, succeed: boolean, heroes: Array<number>) { export async function towerBattleEnd(sid: string, funcs: number[], roleId: string, serverId: number, battleCode: string, battleId: number, succeed: boolean, heroes: Array<number>) {
if (succeed) { if (succeed) {
let battleRec = await BattleRecordModel.getBattleRecordByCode(battleCode); let battleRec = await BattleRecordModel.getBattleRecordByCode(battleCode);

View File

@@ -166,4 +166,10 @@ export enum TOWER_TASK_STATUS {
DOINING = 1, // 已派遣,进行中 DOINING = 1, // 已派遣,进行中
FINISH = 2, // 派遣结束 FINISH = 2, // 派遣结束
RECEIVED = 3, // 已领取 RECEIVED = 3, // 已领取
}
export enum TOWER_FORBIDDEN_CHARA_TYPE {
CHAR = 1, // 角色
JOB = 2, // 职业
CAMP = 3, // 国家
} }

View File

@@ -89,6 +89,7 @@ export const STATUS = {
TOWER_TASK_MISSING: { code: 20517, simStr: '未找到该任务' }, TOWER_TASK_MISSING: { code: 20517, simStr: '未找到该任务' },
TOWER_HANG_UP_NOT_START: { code: 20518, simStr: '挂机尚未开启' }, TOWER_HANG_UP_NOT_START: { code: 20518, simStr: '挂机尚未开启' },
TOWER_REF_CNT_NOT_ENOUGH: { code: 20519, simStr: '派遣刷新次数不足' }, TOWER_REF_CNT_NOT_ENOUGH: { code: 20519, simStr: '派遣刷新次数不足' },
TOWER_HERO_FORBIDDEN: { code: 20520, simStr: '该武将不可使用' },
// 寻宝(共斗) 20600 - 20699 // 寻宝(共斗) 20600 - 20699
COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' }, COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' },
COM_BATTLE_BLUEPRT_NOT_FOUND: { code: 20602, simStr: '藏宝图不足' }, COM_BATTLE_BLUEPRT_NOT_FOUND: { code: 20602, simStr: '藏宝图不足' },

View File

@@ -34,6 +34,8 @@ export interface DicWar {
readonly jackpotReward: Array<{id: number, weight: number}>; readonly jackpotReward: Array<{id: number, weight: number}>;
// 寻宝队友奖励 // 寻宝队友奖励
readonly teammateReward: Array<{id: number, count: number}>; readonly teammateReward: Array<{id: number, count: number}>;
// 镇念塔禁用角色
readonly fobiddenCharactor: Array<{type: number, id: number}>;
} }
export const dicWar = new Map<number, DicWar>(); export const dicWar = new Map<number, DicWar>();
@@ -51,6 +53,7 @@ export function loadWar() {
o.detailUIBg = parseDetailUIBg(o.detailUIBg); o.detailUIBg = parseDetailUIBg(o.detailUIBg);
o.jackpotReward = parseJackpotReward(o.jackpotReward); o.jackpotReward = parseJackpotReward(o.jackpotReward);
o.teammateReward = parseFixReward(o.teammateReward); o.teammateReward = parseFixReward(o.teammateReward);
o.fobiddenCharactor = parseForbiddenChara(o.fobiddenCharactor);
dicWar.set(o.war_id, o); dicWar.set(o.war_id, o);
if(o.warType == WAR_TYPE.PVP) { if(o.warType == WAR_TYPE.PVP) {
@@ -122,4 +125,17 @@ function parseJackpotReward(str: string = '') {
result.push({id: parseInt(id), weight: parseInt(weight)}); result.push({id: parseInt(id), weight: parseInt(weight)});
} }
return result return result
}
function parseForbiddenChara(str: string = '') {
let result = new Array<{type: number, id: number}>();
if(!str) return result;
let decodeArr = decodeArrayListStr(str);
for(let [type, id] of decodeArr) {
if(isNaN(parseInt(type)) || isNaN(parseInt(id))) {
throw new Error('data table format wrong');
}
result.push({type: parseInt(type), id: parseInt(id)});
}
return result
} }