一个全随机的刷装备小游戏
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.

113 lines
3.8 KiB

import { SufPassiveSkill, PassiveSkill, PrePassiveSkill, CounterSkill } from './base';
import i18n from '../i18n';
import { BattleRole, replace } from '@/tool';
import { BaseAtkPercentBuff, DmgReducBuff } from './buff';
const { t } = i18n;
//断
export class Duan extends SufPassiveSkill {
name: string = 'duan';
hpPercent: number = 20;
order: number = 999;
dmg: number = 999999999;
desc(): string {
return replace(t('skill.duan.1'), [this.hpPercent]);
}
trigger(owner: BattleRole, target: BattleRole): boolean {
return owner.dmg > 0 && target.attr.curHp / target.attr.hp < this.hpPercent / 100;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
target.addHp(-1 * this.dmg);
owner.battleLog(replace(t('skill.duan.2'), [this.hpPercent, this.dmg]));
}
}
//红眼
export class HongYan extends PrePassiveSkill {
name: string = 'hongyan';
hpPercent: number = 65;
atk: number = 2000;
atkPercent: number = 200;
desc(): string {
return replace(t('skill.hongyan.1'), [this.hpPercent, this.atk, this.atkPercent]);
}
trigger(owner: BattleRole, target: BattleRole): boolean {
return owner.attr.curHp / owner.attr.hp < this.hpPercent / 100;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
owner.extraAttr.baseAtk += this.atk;
}
afterAtk(owner: BattleRole, target: BattleRole): void {
if (this.trigger(owner, target)) {
const additional = Math.ceil((owner.atk * this.atkPercent) / 100);
target.addHp(-1 * additional);
owner.battleLog(replace(t('skill.hongyan.2'), [this.hpPercent, additional]));
}
}
}
//杀意
export class ShaYi extends SufPassiveSkill {
name: string = 'shayi';
atkPercent: number = 3;
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 owner.dmg > 0;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
const shayi = new BaseAtkPercentBuff(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) {
const shayi = new BaseAtkPercentBuff(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 CounterSkill {
name: string = 'numu';
atkPercent: number = 3;
layer: number = 0;
maxLayer: number = 10;
desc(): string {
return replace(t('skill.numu.1'), [this.atkPercent, this.maxLayer]);
}
trigger(owner: BattleRole, target: BattleRole): boolean {
return target.dmg > 0;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
const numu = new BaseAtkPercentBuff(this.name, this.atkPercent, 9999, this.maxLayer);
owner.putBuff(numu);
owner.battleLog(replace(t('skill.numu.2'), [numu.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]));
}
}