镇念塔:禁用角色
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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, // 国家
|
||||||
}
|
}
|
||||||
@@ -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: '藏宝图不足' },
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user