import { SufPassiveSkill, PrePassiveSkill, PassiveSkill, CounterSkill } from './base'; import i18n from '../i18n'; import { BattleRole, callDmgPercent, replace } from '@/tool'; 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 Math.random() < this.rate / 100; } takeEffect(owner: BattleRole, target: BattleRole): void { target.control = target.control > this.last ? target.control : this.last; owner.battleLog(replace(t('skill.jinggangzhuo.2'), [this.last])); } } //奉邪 export class FengXie extends PassiveSkill { name: string = 'fengxie'; critDmg: number = 50; layer: number = 0; maxLayer: number = 5; 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; } 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])); } else { this.layer = 0; owner.battleLog(t('skill.fengxie.3')); } } } //噬忠 export class ShiZhong extends PassiveSkill { name: string = 'shizhong'; critDmgReduc: number = 50; layer: number = 0; maxLayer: number = 3; 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])); } } } //神赏 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.battleLog(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.control > 0) { const log = replace(t('skill.control.3'), [t(owner.type), owner.control]); owner.battleLog(log); return; } owner.skillPercent = this.percent; owner.callDmg(target); target.addHp(-1 * owner.dmg); owner.battleLog(replace(t('skill.tongjuefanji.2'), [owner.dmg])); } }