Browse Source

新增BUFF类

1.新增BUFF类
2.buff相关技能逻辑调整,战斗逻辑调整
3.新增神话装备:龙腾护心镜
v1.0
许孟阳 2 weeks ago
parent
commit
e6eae111f1
  1. 1
      src/config/equips/neck.ts
  2. 4
      src/config/i18n/zh/euips.ts
  3. 18
      src/config/i18n/zh/skills.ts
  4. 5
      src/config/skill/armor.ts
  5. 6
      src/config/skill/base.ts
  6. 112
      src/config/skill/buff.ts
  7. 1
      src/config/skill/index.ts
  8. 57
      src/config/skill/neck.ts
  9. 44
      src/config/skill/ring.ts
  10. 3
      src/config/skill/weapon.ts
  11. 75
      src/tool/caller/battle.ts
  12. 11
      src/views/dungeon/battle.vue

1
src/config/equips/neck.ts

@ -45,6 +45,7 @@ export const neckColorfulCategorys: Categorys[] = [ @@ -45,6 +45,7 @@ export const neckColorfulCategorys: Categorys[] = [
],
'ShaYi'
),
new Categorys('longteng', 'neck/龙腾护心镜.png', [{ type: 'hp', valCoefficient: 3 }], 'LongTeng'),
];
export const neckUniqueCategorys: Categorys[] = [

4
src/config/i18n/zh/euips.ts

@ -99,14 +99,14 @@ export const neck = { @@ -99,14 +99,14 @@ export const neck = {
duanji: ['断·极', '若众生都断了情欲,那世间岂不是一色苍凉。'],
hushi: ['虎视', '我看见了你,偷丹贼。 ----三仙的丹房'],
xuenu: ['血怒', '我们都曾把愤怒埋藏在鲜血里。'],
guiyan: ['鬼眼', '多少楼台平山演,鬼使飞阁绿林空。'],
longteng: ['龙腾护心镜', '腾龙即出,四海来朝。'],
chitong: ['赤瞳金玉坠', '传闻为仙族神器。佩戴者回洞悉敌人的弱点。'],
fannao: ['百八烦恼珠', '求人不如求己。'],
zhuxian: ['诛仙', '原来,神的身体流动的血,都是冷的。'],
fodengyou: ['佛灯油', '听说灵山永寂,灯影不摇,我若去了,便叫它风起云动。 ----黄风大圣'],
guiyan: ['鬼眼', '多少楼台平山演,鬼使飞阁绿林空。'],
aige: ['姜氏哀歌', '这悲伤的歌声浸透了这条项链,你听。'],
limao: ['狸猫内丹', '影中之影,幻中之幻。'],
longteng: ['龙腾护心镜', '腾龙即出,四海来朝。'],
lenglong: ['冷龙', '避暑圣物。'],
liuli: ['琉璃碎片', '有人在人间寻找了它整整五百年。'],
nvwangfeng: ['女王蜂项链', '以毒攻毒,百毒不侵。'],

18
src/config/i18n/zh/skills.ts

@ -1,12 +1,12 @@ @@ -1,12 +1,12 @@
export const action = '主动';
export const passive = '被动';
export const control = ['${0}使用了${1},', '${0}被控制${1}回合', '控制失败', '${0}被控制,无法释放技能,剩余${1}回合'];
export const control = ['${0}使用了${1},', '${0}被控制${1}回合', '控制失败', '${0}被控制,无法释放技能。'];
export const crit = ['触发了暴击'];
export const attack = ['普通攻击', '伤害倍率100%', '${0}使用了${1}${4},对${2}造成了${3}点伤害'];
export const iceBlade = ['冰刃', '暴击时有${0}几率释放冰线冲击,附加${1}%攻击力的伤害和${2}回合冰冻效果。', '触发了冰刃,附加${0}点伤害,冰冻${1}${2}回合'];
export const seeRed = ['见红', '伤害倍率${0}%,冷却${1}回合。'];
export const seeRed = ['见红', '伤害倍率${0}%,并使目标进入${2}回合流血状态,冷却${1}回合。'];
export const qici = ['鳍刺', '攻击时有${0}%概率对目标造成流血,持续${1}回合。'];
export const bhxdjc = [
@ -23,18 +23,24 @@ export const duan = ['断', '攻击目标后,若目标血量低于${0}%,则 @@ -23,18 +23,24 @@ export const duan = ['断', '攻击目标后,若目标血量低于${0}%,则
export const hongyan = ['红眼', '生命低于${0}%时,提高${1}点基础攻击力,且攻击附加${2}%攻击力的伤害。', '血量低于${0}%,触发红眼,附加${1}点伤害。'];
export const shayi = [
'杀意',
'攻击时增加一层杀意(提升${0}%基础攻击力),被暴击则减少${1}层,杀意最多叠加${2}层。',
'攻击时增加一层杀意(每层杀意提升${0}%基础攻击力),被暴击则减少${1}层,杀意最多叠加${2}层。',
'增加一层杀意,当前${0}层',
'被暴击,减少${0}层杀意。',
];
export const numu = ['怒目', '被攻击时提升${0}%基础攻击力,最多叠加${1}层。', '增加一层怒目,当前${0}层'];
export const longteng = ['龙腾护佑', '获得${0}%伤害减免,被攻击时有${1}%概率获得${2}%生命上限的护盾。', '触发龙腾护佑,获得${0}点护盾。'];
export const SLWX = ['森罗万象', '增加${0}%攻击加成、伤害加成、暴击率、暴击伤害。'];
export const jinggangzhuo = ['金刚琢', '攻击时有${0}%几率使目标进入缴械状态${1}回合。', '触发金刚镯,目标缴械${0}回合'];
export const fengxie = ['奉邪', '每次暴击,增加${0}%的暴击伤害,最多叠加${1}层,未暴击时层数清零。', '触发奉邪,当前${0}层。', '奉邪层数清零。'];
export const shizhong = ['噬忠', '每次被暴击,增加${0}%的暴击伤害减免,最多叠加${1}层,持续到战斗结束。', '触发噬忠,当前${0}层。'];
export const shenshang = ['神赏', '暴击时有${0}%概率恢复自身生命${1}点。', '触发神赏,恢复生命${0}点。'];
export const tongjuefanji = ['痛觉反击', '每次受到暴击时,对目标使用刺痛反击,伤害倍率${0}%。', '触发反击,对${0}造成${1}点伤害。'];
export const tongjuefanji = [
'痛觉反击',
'每次受到暴击时,对目标使用刺痛反击,伤害倍率${0}%。',
'触发反击,对${0}造成${1}点伤害。',
'${0}被控制,无法释放技能。',
];
export const fate = ['化缘', '副本掉落金币奖励提高${0}%。'];
export const vampire = ['汲血', '生命偷取${0}%。', '触发汲血,偷取${0}点生命'];
@ -51,6 +57,10 @@ export const furenpihu = [ @@ -51,6 +57,10 @@ export const furenpihu = [
'血量低于${0}%,触发白骨夫人的庇护,获得${1}%伤害减免',
];
export const atkbuff = ['提升${0}点基础攻击力。', '提升${0}%基础攻击力。'];
export const critbuff = ['提升${0}%暴击率。', '提升${0}%暴击伤害。', '提升${0}%暴击减免。', '提升${0}%暴击伤害减免。'];
export const defbuff = ['提升${0}点防御。', '提升${0}%防御。', '获得${0}%伤害减免。'];
//未实装,待补充
export const ruiyayin = ['锐牙印', '攻击时有${0}概率偷取目标${1}%暴击率,持续${2}回合。'];

5
src/config/skill/armor.ts

@ -16,8 +16,9 @@ export class BHXDJC extends PrePassiveSkill { @@ -16,8 +16,9 @@ export class BHXDJC extends PrePassiveSkill {
return owner.attr.curHp / owner.attr.hp < this.hpPercent / 100;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
owner.shield = Math.ceil((owner.attr.hp * this.shieldPercentOfHp) / 100);
owner.battleLog(replace(t('skill.bhxdjc.2'), [owner.shield]));
const shield = Math.ceil((owner.attr.hp * this.shieldPercentOfHp) / 100);
owner.shield += shield;
owner.battleLog(replace(t('skill.bhxdjc.2'), [shield]));
}
}
//铁壁

6
src/config/skill/base.ts

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
import { BattleRole, callReducPercent, replace } from '@/tool';
import { type_boss } from '@/config';
import i18n from '../i18n';
import { ControlAbnormal } from './buff';
const { t } = i18n;
export interface Skill {
order: number;
@ -139,11 +140,10 @@ export abstract class Control extends ActionSkill { @@ -139,11 +140,10 @@ export abstract class Control extends ActionSkill {
abstract rate: number;
abstract bossRate: number;
use(owner: BattleRole, target: BattleRole) {
owner.dmg = 0;
const rate = target.type == type_boss ? this.bossRate : this.rate;
let log = t('skill.control.2');
if (Math.random() < rate / 100) {
target.control = target.control > this.last ? target.control : this.last;
target.putBuff(new ControlAbnormal(this.name, this.last));
log = replace(t('skill.control.1'), [t(target.type), this.last]);
}
log = log = replace(t('skill.control.0'), [t(owner.type), t('skill.' + this.name + '.0')]) + log;
@ -170,7 +170,7 @@ export class Attack extends ActionSkill { @@ -170,7 +170,7 @@ export class Attack extends ActionSkill {
}
}
}
//主动增益技能(buff)
//主动增益技能
export abstract class BuffSkill extends ActionSkill {
abstract last: number;
rmdLast = 0;

112
src/config/skill/buff.ts

@ -0,0 +1,112 @@ @@ -0,0 +1,112 @@
import { BattleRole, callDmgReduc, replace } from '@/tool';
import i18n from '../i18n';
const { t } = i18n;
//增益BUFF
export abstract class Buff {
order: number = 1;
type: string = 'buff';
name: string;
layer: number = 1;
maxLayer: number = 1;
last: number;
constructor(name: string, last: number, maxLayer?: number) {
this.name = name;
this.last = last;
this.maxLayer = maxLayer || 1;
}
abstract desc(): string;
check(): boolean {
if (this.layer <= 0) {
return false;
}
if (this.last > 0) {
this.last--;
}
return this.last > 0;
}
addLayer(add: number) {
const n = this.layer + add;
if (n > this.maxLayer) {
this.layer = this.maxLayer;
} else if (n < 0) {
this.layer = 0;
} else {
this.layer = n;
}
}
abstract takeEffect(owner: BattleRole): void;
}
//减益BUFF
export abstract class Debuff extends Buff {
type: string = 'debuff';
}
//异常
export abstract class Abnormal extends Buff {
type: string = 'abnormal';
}
//百分比增益BUFF
export abstract class PercentBuff extends Buff {
percent: number;
constructor(name: string, percent: number, last: number, maxLayer?: number) {
super(name, last, maxLayer);
this.percent = percent;
}
abstract desc(): string;
abstract takeEffect(owner: BattleRole): void;
}
//攻击增益BUFF
export class AtkPercentBuff extends PercentBuff {
desc(): string {
return replace(t('skill.atkbuff.1'), [this.percent * this.layer]);
}
takeEffect(owner: BattleRole): void {
owner.extraAttr.baseAtk += (this.percent / 100) * this.layer * owner.attr.baseAtk;
}
}
//爆伤增益BUFF
export class CritDmgBuff extends PercentBuff {
desc(): string {
return replace(t('skill.critbuff.1'), [this.percent * this.layer]);
}
takeEffect(owner: BattleRole): void {
owner.extraAttr.critDmg += this.percent * this.layer;
}
}
//爆伤减免增益BUFF
export class CritDmgReducBuff extends PercentBuff {
desc(): string {
return replace(t('skill.critbuff.3'), [this.percent * this.layer]);
}
takeEffect(owner: BattleRole): void {
owner.extraAttr.critDmgReduc += this.percent * this.layer;
}
}
//伤害减免增益BUFF
export class DmgReducBuff extends Buff {
dmgReduc: number;
constructor(name: string, dmgReduc: number, last: number, maxLayer?: number) {
super(name, last, maxLayer);
this.dmgReduc = dmgReduc;
}
desc(): string {
return replace(t('skill.defbuff.2'), [this.dmgReduc * this.layer]);
}
takeEffect(owner: BattleRole): void {
owner.extraAttr.dmgReduc = callDmgReduc(owner.extraAttr.dmgReduc, this.dmgReduc);
}
}
//控制异常
export class ControlAbnormal extends Abnormal {
constructor(name: string, last: number) {
super(name, last);
}
desc(): string {
return t('skill.' + this.name + '.0');
}
takeEffect(owner: BattleRole): void {
owner.action = null;
}
}

1
src/config/skill/index.ts

@ -6,3 +6,4 @@ export * from './ring'; @@ -6,3 +6,4 @@ export * from './ring';
export * from './jewelry';
export * from './bracers';
export * from './pants';
export * from './buff';

57
src/config/skill/neck.ts

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
import { SufPassiveSkill, PassiveSkill, PrePassiveSkill } from './base';
import { SufPassiveSkill, PassiveSkill, PrePassiveSkill, CounterSkill } from './base';
import i18n from '../i18n';
import { BattleRole, replace } from '@/tool';
import { AtkPercentBuff, DmgReducBuff } from './buff';
const { t } = i18n;
//断
@ -44,35 +45,34 @@ export class HongYan extends PrePassiveSkill { @@ -44,35 +45,34 @@ export class HongYan extends PrePassiveSkill {
}
}
//杀意
export class ShaYi extends PrePassiveSkill {
export class ShaYi extends SufPassiveSkill {
name: string = 'shayi';
atkPercent: number = 3;
layer: number = 0;
maxLayer: number = 10;
reduc: number = 3;
desc(): string {
return replace(t('skill.shayi.1'), [this.atkPercent, this.reduc, this.maxLayer]);
}
trigger(owner: BattleRole, target: BattleRole): boolean {
return true;
return owner.dmg > 0;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
owner.extraAttr.baseAtk += (this.atkPercent / 100) * this.layer * owner.attr.baseAtk;
}
afterAtk(owner: BattleRole, target: BattleRole): void {
this.layer < this.maxLayer && this.layer++;
owner.battleLog(replace(t('skill.shayi.2'), [this.layer]));
const shayi = new AtkPercentBuff(this.name, this.atkPercent, 9999, this.maxLayer);
owner.putBuff(shayi);
owner.battleLog(replace(t('skill.shayi.2'), [shayi.layer]));
}
onAtked(owner: BattleRole, target: BattleRole): void {
if (target.crit) {
this.layer -= this.reduc;
this.layer < 0 && (this.layer = 0);
owner.battleLog(replace(t('skill.shayi.2'), [this.reduc]));
const shayi = new AtkPercentBuff(this.name, this.atkPercent, 9999, this.maxLayer);
shayi.layer = -1 * this.reduc;
owner.putBuff(shayi);
owner.battleLog(replace(t('skill.shayi.3'), [this.reduc]));
}
}
}
//怒目
export class NuMu extends PrePassiveSkill {
export class NuMu extends CounterSkill {
name: string = 'numu';
atkPercent: number = 3;
layer: number = 0;
@ -81,15 +81,32 @@ export class NuMu extends PrePassiveSkill { @@ -81,15 +81,32 @@ export class NuMu extends PrePassiveSkill {
return replace(t('skill.numu.1'), [this.atkPercent, this.maxLayer]);
}
trigger(owner: BattleRole, target: BattleRole): boolean {
return true;
return target.dmg > 0;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
owner.extraAttr.baseAtk += (this.atkPercent / 100) * this.layer * owner.attr.baseAtk;
const numu = new AtkPercentBuff(this.name, this.atkPercent, 9999, this.maxLayer);
owner.putBuff(numu);
owner.battleLog(replace(t('skill.numu.2'), [numu.layer]));
}
onAtked(owner: BattleRole, target: BattleRole): void {
if (target.dmg > 0) {
this.layer < this.maxLayer && this.layer++;
owner.battleLog(replace(t('skill.numu.2'), [this.layer]));
}
}
//longteng
export class LongTeng extends CounterSkill {
name: string = 'longteng';
dmgReduc: number = 8;
rate: number = 8;
shieldPercentOfHp: number = 8;
desc(): string {
return replace(t('skill.longteng.1'), [this.dmgReduc, this.rate, this.shieldPercentOfHp]);
}
beforeBattle(owner: BattleRole, target: BattleRole): void {
owner.putBuff(new DmgReducBuff(this.name, this.dmgReduc, 9999));
}
trigger(owner: BattleRole, target: BattleRole): boolean {
return target.dmg > 0 && Math.random() < this.rate / 100;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
const shield = Math.ceil((owner.attr.hp * this.shieldPercentOfHp) / 100);
owner.shield += shield;
owner.battleLog(replace(t('skill.longteng.2'), [shield]));
}
}

44
src/config/skill/ring.ts

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
import { SufPassiveSkill, PrePassiveSkill, PassiveSkill, CounterSkill } from './base';
import i18n from '../i18n';
import { BattleRole, callDmgPercent, replace } from '@/tool';
import { ControlAbnormal, CritDmgBuff, CritDmgReducBuff } from './buff';
const { t } = i18n;
//森罗万象
@ -34,13 +35,13 @@ export class JinGangZhuo extends SufPassiveSkill { @@ -34,13 +35,13 @@ export class JinGangZhuo extends SufPassiveSkill {
return Math.random() < this.rate / 100;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
target.control = target.control > this.last ? target.control : this.last;
target.putBuff(new ControlAbnormal(this.name, this.last));
owner.battleLog(replace(t('skill.jinggangzhuo.2'), [this.last]));
}
}
//奉邪
export class FengXie extends PassiveSkill {
export class FengXie extends SufPassiveSkill {
name: string = 'fengxie';
critDmg: number = 50;
layer: number = 0;
@ -48,31 +49,23 @@ export class FengXie extends PassiveSkill { @@ -48,31 +49,23 @@ export class FengXie extends PassiveSkill {
desc(): string {
return replace(t('skill.fengxie.1'), [this.critDmg, this.maxLayer]);
}
beforeAtk(owner: BattleRole, target: BattleRole): void {
this.takeEffect(owner, target);
}
trigger(owner: BattleRole, target: BattleRole): boolean {
return owner.crit;
return owner.dmg > 0;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
owner.extraAttr.critDmg = this.critDmg * this.layer;
}
afterAtk(owner: BattleRole, target: BattleRole): void {
if (!this.trigger(owner, target)) {
return;
}
if (this.layer < this.maxLayer) {
this.layer++;
owner.battleLog(replace(t('skill.fengxie.2'), [this.layer]));
const fengxie = new CritDmgBuff(this.name, this.critDmg, 9999, this.maxLayer);
if (owner.crit) {
owner.putBuff(fengxie);
owner.battleLog(replace(t('skill.fengxie.2'), [fengxie.layer]));
} else {
this.layer = 0;
owner.buff.delete(this.name);
owner.battleLog(t('skill.fengxie.3'));
}
}
}
//噬忠
export class ShiZhong extends PassiveSkill {
export class ShiZhong extends CounterSkill {
name: string = 'shizhong';
critDmgReduc: number = 50;
layer: number = 0;
@ -80,20 +73,13 @@ export class ShiZhong extends PassiveSkill { @@ -80,20 +73,13 @@ export class ShiZhong extends PassiveSkill {
desc(): string {
return replace(t('skill.shizhong.1'), [this.critDmgReduc, this.maxLayer]);
}
beforeAtk(owner: BattleRole, target: BattleRole): void {
this.takeEffect(owner, target);
}
trigger(owner: BattleRole, target: BattleRole): boolean {
return target.crit;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
owner.extraAttr.critDmgReduc = this.critDmgReduc * this.layer;
}
onAtked(owner: BattleRole, target: BattleRole): void {
if (this.trigger(owner, target)) {
this.layer < this.maxLayer && this.layer++;
owner.battleLog(replace(t('skill.shizhong.2'), [this.layer]));
}
const shizhong = new CritDmgReducBuff(this.name, this.critDmgReduc, 9999, this.maxLayer);
owner.putBuff(shizhong);
owner.battleLog(replace(t('skill.shizhong.2'), [shizhong.layer]));
}
}
@ -125,8 +111,8 @@ export class TongJueFanJi extends CounterSkill { @@ -125,8 +111,8 @@ export class TongJueFanJi extends CounterSkill {
return target.crit;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
if (owner.control > 0) {
const log = replace(t('skill.control.3'), [t(owner.type), owner.control]);
if (!owner.action) {
const log = replace(t('skill.tongjuefanji.3'), [t(owner.type)]);
owner.battleLog(log);
return;
}

3
src/config/skill/weapon.ts

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
import { Attack, SufPassiveSkill } from './base';
import i18n from '../i18n';
import { replace, BattleRole } from '@/tool';
import { ControlAbnormal } from './buff';
const { t } = i18n;
export class IceBlade extends SufPassiveSkill {
@ -17,7 +18,7 @@ export class IceBlade extends SufPassiveSkill { @@ -17,7 +18,7 @@ export class IceBlade extends SufPassiveSkill {
takeEffect(owner: BattleRole, target: BattleRole): void {
const additional = Math.ceil((owner.atk * this.percent) / 100);
target.addHp(-1 * additional);
target.control = target.control > this.last ? target.control : this.last;
target.putBuff(new ControlAbnormal(this.name, this.last));
owner.battleLog(replace(t('skill.iceBlade.2'), [additional, t(target.type), this.last]));
}
}

75
src/tool/caller/battle.ts

@ -9,7 +9,9 @@ export class BattleRole { @@ -9,7 +9,9 @@ export class BattleRole {
passives: Skills.Skill[] = new Array();
commit;
type: string;
control: number = 0;
buff: Map<string, Skills.Buff> = new Map();
debuff: Map<string, Skills.Buff> = new Map();
abnormal: Map<string, Skills.Buff> = new Map();
//临时状态
action: Skills.ActionSkill | null = null;
atk: number = 0;
@ -77,6 +79,10 @@ export class BattleRole { @@ -77,6 +79,10 @@ export class BattleRole {
this.passives.forEach((skill) => {
skill.beforeAtk(this, target);
});
//攻击前计算自身增益buff和异常buff以及目标减益
this.callBuff();
this.callAbnormal();
target.callDebuff();
this.action?.use(this, target);
//攻击后触发的被动技能
this.passives.forEach((skill) => {
@ -137,13 +143,6 @@ export class BattleRole { @@ -137,13 +143,6 @@ export class BattleRole {
* @returns
*/
callDmg = (target: BattleRole) => {
//被控制时无法攻击
if (this.control > 0) {
const log = replace(t('skill.control.3'), [t(this.type), this.control]);
this.battleLog(log);
this.control--;
return;
}
const attr = this.attr;
const extra = this.extraAttr;
const baseAtk = attr.baseAtk + extra.baseAtk; //基础攻击
@ -155,7 +154,7 @@ export class BattleRole { @@ -155,7 +154,7 @@ export class BattleRole {
this.crit = Math.random() < crit / 100;
if (this.crit) {
let critDmg = attr.critDmg + extra.critDmg - target.attr.critDmgReduc - target.extraAttr.critDmg; //目标最终承受暴击伤害
critDmg < 100 ? 100 : critDmg; //暴击伤害不低于100%
critDmg = critDmg < 100 ? 100 : critDmg; //暴击伤害不低于100%
this.baseDmg *= critDmg / 100; //暴击时目标承受伤害
}
const reducPercent = callReducPercent(target.attr.def + target.extraAttr.def, target.attr.lv); //目标防御提供的减伤比例
@ -163,9 +162,53 @@ export class BattleRole { @@ -163,9 +162,53 @@ export class BattleRole {
const takeDmgPercent = (1 - reducPercent) * (1 - dmgReduc / 100); //目标承受伤害比例
const bloc = target.attr.bloc + target.extraAttr.bloc; //目标格挡值
this.dmg = Math.ceil(this.baseDmg * takeDmgPercent - bloc); //目标承受伤害
this.dmg < 1 && (this.dmg = 1);
};
putBuff(buff: Skills.Buff) {
const name = buff.name;
const type = buff.type;
const exit: Skills.Buff = this[type].get(name);
this[type].set(name, buff);
if (exit) {
buff.addLayer(exit.layer);
}
}
callBuff() {
this.buff.forEach((value: Skills.Buff, key: string) => {
value.takeEffect(this);
});
}
callAbnormal() {
this.abnormal.forEach((value: Skills.Buff, key: string) => {
value.takeEffect(this);
});
}
callDebuff() {
this.debuff.forEach((value: Skills.Buff, key: string) => {
value.takeEffect(this);
});
}
checkBuff() {
checkBuf(this.buff);
checkBuf(this.abnormal);
checkBuf(this.debuff);
}
}
const checkBuf = (map: Map<string, Skills.Buff>) => {
const keys: string[] = new Array();
map.forEach((value: Skills.Buff, key: string, map: Map<String, Skills.Buff>) => {
if (!value || !value.check()) {
keys.push(key);
}
});
keys.forEach((key: string) => {
map.delete(key);
});
};
export const createBattleRole = (player: Player, monster: Monster, commit) => {
const playerRole = new BattleRole(player.attribute, commit, 'player');
const palyerEquips = [player.weapon, player.armor, player.neck, player.ring, player.jewelry, player.pants, player.shoes, player.bracers];
@ -180,6 +223,20 @@ export const createBattleRole = (player: Player, monster: Monster, commit) => { @@ -180,6 +223,20 @@ export const createBattleRole = (player: Player, monster: Monster, commit) => {
return { player: playerRole, monster: monsterRole };
};
export const battleOneBout = (player: BattleRole, monster: BattleRole): boolean => {
player.attack(monster);
if (player.isDeath() || monster.isDeath()) {
return true;
}
monster.attack(player);
if (player.isDeath() || monster.isDeath()) {
return true;
}
player.checkBuff();
monster.checkBuff();
return false;
};
/**
*
* @param equip

11
src/views/dungeon/battle.vue

@ -17,7 +17,7 @@ import { useStore } from "vuex"; @@ -17,7 +17,7 @@ import { useStore } from "vuex";
import { computed, nextTick, onMounted, ref, watch } from "vue";
import { useI18n } from "vue3-i18n";
import { dungeon_icon, player_move_time, player_battle_time, difficultys } from "@/config";
import { createBattleRole, BattleRole, replace } from "@/tool";
import { createBattleRole, battleOneBout, BattleRole, replace } from "@/tool";
const { t } = useI18n();
const { state, commit, dispatch } = useStore();
@ -150,13 +150,8 @@ const battleWithMonster = (monster) => { @@ -150,13 +150,8 @@ const battleWithMonster = (monster) => {
const oneBout = (player: BattleRole, monster: BattleRole, battleTime: number) => {
return new Promise((resolve, reject) => {
battle.value.timeOut = setTimeout(() => {
player.attack(monster);
if (player.isDeath() || monster.isDeath()) {
resolve(true);
return;
}
monster.attack(player);
if (player.isDeath() || monster.isDeath()) {
const finished = battleOneBout(player, monster);
if (finished) {
resolve(true);
return;
}

Loading…
Cancel
Save