import { ActionSkill, Attack, Control, PrePassiveSkill, StartPassiveSkill, SufPassiveSkill } from './base'; import { createt } from '../i18n'; import { replace, BattleRole } from '@/tool'; import { ControlBuff, CritDmgBuff, DmgPercentBuff, DmgReducBuff, GanDian, KuiLan, LiuXue } from './buff'; const t = createt(''); const st = createt('skill.'); //冰刃 export class IceBlade extends SufPassiveSkill { name: string = 'iceBlade'; rate: number = 15; percent: number = 1000; last: number = 1; desc(): string { return replace(st('iceBlade.1'), [this.rate, this.percent, this.last]); } trigger(owner: BattleRole, target: BattleRole): boolean { return owner.crit && Math.random() < this.rate / 100; } takeEffect(owner: BattleRole, target: BattleRole): void { const additional = Math.ceil((owner.atk * this.percent) / 100); target.addHp(-1 * additional); target.putBuff(new ControlBuff(this.name, this.last)); owner.extraDmgLog(replace(st('iceBlade.2'), [additional, t(target.type), this.last])); } } // 求爱 export class QiuAi extends Attack { name: string = 'qiuai'; order: number = 998; percent: number = 240; desc(): string { return replace(st('qiuai.1'), [this.percent]); } } //见红 export class SeeRed extends ActionSkill { name: string = 'seeRed'; layer: number = 5; cd: number = 5; last: number = 5; desc(): string { return replace(st('seeRed.1'), [this.layer, this.last]) + replace(st('seeRed.2'), [this.cd]); } use(owner: BattleRole, target: BattleRole): void { owner.skillPercent = 0; const liuxue = new LiuXue(this.layer, this.last); target.putBuff(liuxue); owner.extraDmgLog(replace(st('user'), [t(owner.type), st(this.name + '.0')]) + replace(st('seeRed.1'), [this.layer, this.last])); } } //鳍刺 export class QiCi extends SufPassiveSkill { name: string = 'qici'; rate: number = 30; layer: number = 3; last: number = 4; desc(): string { return replace(st('qici.1'), [this.rate, this.layer, this.last]); } trigger(owner: BattleRole, target: BattleRole): boolean { return owner.dmg > 0 && Math.random() < this.rate / 100; } takeEffect(owner: BattleRole, target: BattleRole): void { const liuxue = new LiuXue(this.layer, this.last); target.putBuff(liuxue); owner.extraDmgLog(replace(st('qici.2'), [t(target.type), this.layer, this.last])); } } //暴虐 export class BaoNue extends SufPassiveSkill { name: string = 'baonue'; rate: number = 30; last: number = 2; desc(): string { return replace(st('baonue.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 { const liuxue = new LiuXue(9999, this.last); target.putBuff(liuxue); owner.extraDmgLog(replace(st('baonue.2'), [t(target.type), this.last])); } } //扎心 export class ZhaXin extends StartPassiveSkill { name: string = 'zhaxin'; critDmg: number = 200; desc(): string { return replace(st('zhaxin.1'), [this.critDmg]); } takeEffect(owner: BattleRole, target: BattleRole): void { const zhaxin = new CritDmgBuff(this.name, this.critDmg, 9999); owner.putBuff(zhaxin); } } //鳌之毒 export class AoZhiDu extends SufPassiveSkill { name: string = 'aozhidu'; last: number = 2; desc(): string { return replace(st('aozhidu.1'), [this.last]); } trigger(owner: BattleRole, target: BattleRole): boolean { return owner.dmg > 0; } takeEffect(owner: BattleRole, target: BattleRole): void { const aozhidu = new KuiLan('kuilan', this.last); target.putBuff(aozhidu); owner.extraDmgLog(replace(st('aozhidu.2'), [t(target.type), this.last, aozhidu.layer])); } } //十九叉 export class ShiJiuCha extends SufPassiveSkill { name: string = 'shijiucha'; times: number = 19; cout: number = 0; desc(): string { return replace(st('shijiucha.1'), [this.times]); } trigger(owner: BattleRole, target: BattleRole): boolean { return owner.dmg > 0; } takeEffect(owner: BattleRole, target: BattleRole): void { this.cout++; if (this.cout >= 10) { this.cout = 0; const dmg = owner.dmg * this.times; owner.extraDmgLog(replace(st('shijiucha.2'), [t(owner.type), dmg])); } } } //剑气动四方 export class JianQiDongSiFang extends StartPassiveSkill { name: string = 'jianqidongsifang'; dmgPercent: number = 50; dmgReduc: number = -20; desc(): string { return replace(st('jianqidongsifang.1'), [this.dmgPercent, this.dmgReduc * -1]); } takeEffect(owner: BattleRole, target: BattleRole): void { const buff1 = new DmgPercentBuff(this.name, this.dmgPercent, 9999); owner.putBuff(buff1); const buff2 = new DmgReducBuff(this.name, this.dmgReduc, 9999); owner.putBuff(buff2); } } //暴风雪 export class BaoFengXue extends Control { name: string = 'baofengxue'; cd: number = 10; last: number = 3; rate: number = 100; bossRate: number = 65; desc(): string { return replace(st('baofengxue.1'), [this.last, this.cd, this.bossRate]); } } // 波动杀意 export class BoDongShaYi extends PrePassiveSkill { name: string = 'bodongshayi'; precent: number = 10; maxLayer: number = 15; desc(): string { return replace(st('bodongshayi.1'), [this.precent, this.maxLayer]); } trigger(owner: BattleRole, target: BattleRole): boolean { return true; } takeEffect(owner: BattleRole, target: BattleRole): void { const shayi: any = owner.attackBuff.get('shayi'); if (shayi) { shayi.percent = this.precent; shayi.maxLayer = this.maxLayer; } } } // 利刃咒 export class LiRenZhou extends SufPassiveSkill { name: string = 'lirenzhou'; precent: number = 3; layer: number[] = [1, 3]; maxLayer: number = 14; desc(): string { return replace(st('lirenzhou.1'), [this.layer[0], this.layer[1], this.maxLayer, this.precent]); } trigger(owner: BattleRole, target: BattleRole): boolean { return true; } takeEffect(owner: BattleRole, target: BattleRole): void { const lirenzhou = new DmgPercentBuff(this.name, this.precent, 9999, this.maxLayer); const layer = this.layer[0] + Math.floor(Math.random() * (this.layer[1] - this.layer[0] + 1)); lirenzhou.layer = layer; owner.putBuff(lirenzhou); owner.atteckLog(replace(st('lirenzhou.2'), [layer, lirenzhou.layer])); } } // 刀刃风暴 export class DaoRenFengBao extends Attack { order: number = 11; name: string = 'daorenfengbao'; dmgPrecent: number = 80; desc(): string { return replace(st('daorenfengbao.1'), [this.dmgPrecent]); } beforeAtk(owner: BattleRole, target: BattleRole): void { if (owner.action) { return; } else { const lirenzhou = owner.attackBuff.get('lirenzhou'); if (lirenzhou && lirenzhou.layer == lirenzhou.maxLayer) { owner.action = this; } } } use(owner: BattleRole, target: BattleRole): void { const lirenzhou: any = owner.attackBuff.get('lirenzhou'); this.percent = lirenzhou.layer * this.dmgPrecent; super.use(owner, target); lirenzhou.layer = 0; } } //流萤 export class LiuYing extends SufPassiveSkill { name: string = 'liuying'; rate: number = 60; layer: number = 1; maxLayer: number = 3; percent: number = 600; last: number = 3; curLayer: number = 0; desc(): string { return replace(st('liuying.1'), [this.rate, this.layer, this.maxLayer, this.percent, this.last]); } trigger(owner: BattleRole, target: BattleRole): boolean { return owner.dmg > 0 && Math.random() < this.rate / 100; } takeEffect(owner: BattleRole, target: BattleRole): void { this.curLayer += this.layer; owner.extraDmgLog(replace(st('liuying.2'), [t(owner.type), this.layer, this.maxLayer, this.curLayer])); if (this.curLayer >= this.maxLayer) { const additional = Math.ceil((owner.atk * this.percent) / 100); target.addHp(-1 * additional); const gandian = new GanDian(this.last); target.putBuff(gandian); this.curLayer = 0; owner.extraDmgLog(replace(st('liuying.3'), [t(owner.type), additional, this.last])); } } }