import { SufPassiveSkill, PrePassiveSkill, PassiveSkill, CounterSkill } from './base'; import i18n from '../i18n'; import { BattleRole, callDmgPercent, replace } from '@/tool'; import { ControlBuff, CritDmgBuff, CritDmgReducBuff } from './buff'; const { t } = i18n; //森罗万象 export class SLWX extends PrePassiveSkill { name: string = 'SLWX'; percent: number = 30; desc(): string { return replace(t('skill.SLWX.1'), [this.percent]); } trigger(owner: BattleRole, target: BattleRole): boolean { return true; } takeEffect(owner: BattleRole, target: BattleRole): void { const extra = owner.extraAttr; extra.atkPercent += this.percent; extra.dmgPercent = callDmgPercent(extra.dmgPercent, this.percent); extra.crit += this.percent; extra.critDmg += this.percent; } } //金刚琢 export class JinGangZhuo extends SufPassiveSkill { name: string = 'jinggangzhuo'; rate: number = 10; last: number = 2; desc(): string { return replace(t('skill.jinggangzhuo.1'), [this.rate, this.last]); } trigger(owner: BattleRole, target: BattleRole): boolean { return owner.dmg > 0 && Math.random() < this.rate / 100; } takeEffect(owner: BattleRole, target: BattleRole): void { target.putBuff(new ControlBuff(this.name, this.last)); owner.extraDmgLog(replace(t('skill.jinggangzhuo.2'), [this.last])); } } //奉邪 export class FengXie extends SufPassiveSkill { name: string = 'fengxie'; critDmg: number = 50; layer: number = 0; maxLayer: number = 5; desc(): string { return replace(t('skill.fengxie.1'), [this.critDmg, this.maxLayer]); } trigger(owner: BattleRole, target: BattleRole): boolean { return owner.dmg > 0; } takeEffect(owner: BattleRole, target: BattleRole): void { const fengxie = new CritDmgBuff(this.name, this.critDmg, 9999, this.maxLayer); if (owner.crit) { owner.putBuff(fengxie); owner.gainLog(replace(t('skill.fengxie.2'), [fengxie.layer])); } else { owner.attackBuff.delete(this.name); owner.debuffLog(t('skill.fengxie.3')); } } } //噬忠 export class ShiZhong extends CounterSkill { name: string = 'shizhong'; critDmgReduc: number = 50; layer: number = 0; maxLayer: number = 3; desc(): string { return replace(t('skill.shizhong.1'), [this.critDmgReduc, this.maxLayer]); } trigger(owner: BattleRole, target: BattleRole): boolean { return target.crit; } takeEffect(owner: BattleRole, target: BattleRole): void { const shizhong = new CritDmgReducBuff(this.name, this.critDmgReduc, 9999, this.maxLayer); owner.putBuff(shizhong); owner.gainLog(replace(t('skill.shizhong.2'), [shizhong.layer])); } } //神赏 export class ShenShang extends SufPassiveSkill { name: string = 'shenshang'; rate: number = 20; hp: number = 10000; desc(): string { return replace(t('skill.shenshang.1'), [this.rate, this.hp]); } trigger(owner: BattleRole, target: BattleRole): boolean { return owner.crit && Math.random() < this.rate / 100; } takeEffect(owner: BattleRole, target: BattleRole): void { owner.addHp(this.hp); owner.gainLog(replace(t('skill.shenshang.2'), [this.hp])); } } //痛觉反击 export class TongJueFanJi extends CounterSkill { name: string = 'tongjuefanji'; percent: number = 100; desc(): string { return replace(t('skill.tongjuefanji.1'), [this.percent]); } trigger(owner: BattleRole, target: BattleRole): boolean { return target.crit; } takeEffect(owner: BattleRole, target: BattleRole): void { if (!owner.action) { const log = replace(t('skill.tongjuefanji.3'), [t(owner.type)]); owner.debuffLog(log); return; } owner.skillPercent = this.percent; owner.callDmg(target); target.addHp(-1 * owner.dmg); owner.atteckLog(replace(t('skill.tongjuefanji.2'), [t(target.type), owner.dmg])); } }