镇念塔:禁用角色
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { HeroModel } from './../db/Hero';
|
||||
import { HangUpRecordModel } from './../db/HangUpRecord';
|
||||
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 { TowerRecordModel } from './../db/TowerRecord';
|
||||
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) };
|
||||
}
|
||||
let { heroes: recHeroes = [], warStatus = [] } = tower;
|
||||
let dicWar = gameData.war.get(battleId);
|
||||
let { fobiddenCharactor } = dicWar;
|
||||
for (let hid of heroes) {
|
||||
if (recHeroes.indexOf(hid) !== -1) {
|
||||
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);
|
||||
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>) {
|
||||
if (succeed) {
|
||||
let battleRec = await BattleRecordModel.getBattleRecordByCode(battleCode);
|
||||
|
||||
@@ -167,3 +167,9 @@ export enum TOWER_TASK_STATUS {
|
||||
FINISH = 2, // 派遣结束
|
||||
RECEIVED = 3, // 已领取
|
||||
}
|
||||
|
||||
export enum TOWER_FORBIDDEN_CHARA_TYPE {
|
||||
CHAR = 1, // 角色
|
||||
JOB = 2, // 职业
|
||||
CAMP = 3, // 国家
|
||||
}
|
||||
@@ -89,6 +89,7 @@ export const STATUS = {
|
||||
TOWER_TASK_MISSING: { code: 20517, simStr: '未找到该任务' },
|
||||
TOWER_HANG_UP_NOT_START: { code: 20518, simStr: '挂机尚未开启' },
|
||||
TOWER_REF_CNT_NOT_ENOUGH: { code: 20519, simStr: '派遣刷新次数不足' },
|
||||
TOWER_HERO_FORBIDDEN: { code: 20520, simStr: '该武将不可使用' },
|
||||
// 寻宝(共斗) 20600 - 20699
|
||||
COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' },
|
||||
COM_BATTLE_BLUEPRT_NOT_FOUND: { code: 20602, simStr: '藏宝图不足' },
|
||||
|
||||
@@ -34,6 +34,8 @@ export interface DicWar {
|
||||
readonly jackpotReward: Array<{id: number, weight: number}>;
|
||||
// 寻宝队友奖励
|
||||
readonly teammateReward: Array<{id: number, count: number}>;
|
||||
// 镇念塔禁用角色
|
||||
readonly fobiddenCharactor: Array<{type: number, id: number}>;
|
||||
}
|
||||
|
||||
export const dicWar = new Map<number, DicWar>();
|
||||
@@ -51,6 +53,7 @@ export function loadWar() {
|
||||
o.detailUIBg = parseDetailUIBg(o.detailUIBg);
|
||||
o.jackpotReward = parseJackpotReward(o.jackpotReward);
|
||||
o.teammateReward = parseFixReward(o.teammateReward);
|
||||
o.fobiddenCharactor = parseForbiddenChara(o.fobiddenCharactor);
|
||||
|
||||
dicWar.set(o.war_id, o);
|
||||
if(o.warType == WAR_TYPE.PVP) {
|
||||
@@ -123,3 +126,16 @@ function parseJackpotReward(str: string = '') {
|
||||
}
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user