一个全随机的刷装备小游戏
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

179 lines
4.8 KiB

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;
}
}
//百分比减益DEBUFF
export abstract class PercentDebuff extends Debuff {
percent: number;
constructor(name: string, percent: number, last: number, maxLayer?: number) {
super(name, last, maxLayer);
this.percent = percent;
}
}
//固定数值减益DEBUFF
export abstract class ConstantDebuff extends Debuff {
number: number;
constructor(name: string, number: number, last: number, maxLayer?: number) {
super(name, last, maxLayer);
this.number = number;
}
}
//基础攻击百分比增益BUFF
export class BaseAtkPercentBuff 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 AtkPercentBuff extends PercentBuff {
desc(): string {
return replace(t('skill.atkbuff.2'), [this.percent * this.layer]);
}
takeEffect(owner: BattleRole): void {
owner.extraAttr.atkPercent += this.percent;
}
}
//爆伤增益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;
owner.battleLog(replace(t('skill.control.2'), [t('skill.' + this.name + '.0'), t(owner.type)]));
}
}
//溃烂
export class KuiLan extends PercentDebuff {
desc(): string {
return replace(t('skill.kongbulingyu.2'), [this.percent]);
}
takeEffect(owner: BattleRole): void {
owner.extraAttr.def += owner.attr.def * (this.percent / -100);
}
}
//恐怖领域
export class KBLYDebuff extends ConstantDebuff {
desc(): string {
return replace(t('skill.kongbulingyu.2'), [this.number]);
}
takeEffect(owner: BattleRole): void {
owner.extraAttr.def -= this.number;
}
}
//灵感
export class LingGanBuff extends PercentBuff {
desc(): string {
return replace(t('skill.linggan.1'), [this.percent]);
}
takeEffect(owner: BattleRole): void {
owner.addHp(Math.ceil(owner.attr.hp * (this.percent / 100)));
}
}
//流血
export class LiuXue extends Abnormal {
percent: number = 2;
constructor(layer: number, last: number) {
super('liuxue', last, 10);
this.layer = layer;
}
desc(): string {
return replace(t('skill.liuxue.0'), [this.percent]);
}
takeEffect(owner: BattleRole): void {
const dmg = Math.ceil(owner.attr.curHp * (this.percent / 100) * this.layer);
owner.addHp(-1 * dmg);
owner.battleLog(replace(t('skill.liuxue.1'), [this.layer, t(owner.type), dmg]));
}
}