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.
138 lines
4.1 KiB
138 lines
4.1 KiB
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])); |
|
} |
|
}
|
|
|