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

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]));
}
}