From 908287b77d3be32a064a870712a73742c4d2241b Mon Sep 17 00:00:00 2001 From: mengyxu Date: Fri, 16 May 2025 22:44:25 +0800 Subject: [PATCH] =?UTF-8?q?BUFF=E7=B1=BB=E4=BB=A3=E7=A0=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=A4=9A=E4=BB=B6=E7=A5=9E?= =?UTF-8?q?=E8=AF=9D=E8=A3=85=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 伤心刺、鳌之毒、十九叉、青光、暴雪、杀意 --- public/img/equips/weapon/剑姬.png | Bin 5869 -> 0 bytes .../{九灵·元圣.png => 十九叉.png} | Bin public/img/equips/weapon/鸣血.png | Bin 6131 -> 0 bytes src/config/equips/weapon.ts | 72 ++++++++++- src/config/i18n/zh/euips.ts | 11 +- src/config/i18n/zh/skills.ts | 9 +- src/config/skill/armor.ts | 11 +- src/config/skill/base.ts | 4 +- src/config/skill/bracers.ts | 7 +- src/config/skill/buff.ts | 99 ++++++++------ src/config/skill/neck.ts | 5 +- src/config/skill/ring.ts | 6 +- src/config/skill/weapon.ts | 122 ++++++++++++++++-- src/tool/caller/battle.ts | 37 +++--- 14 files changed, 285 insertions(+), 98 deletions(-) delete mode 100644 public/img/equips/weapon/剑姬.png rename public/img/equips/weapon/{九灵·元圣.png => 十九叉.png} (100%) delete mode 100644 public/img/equips/weapon/鸣血.png diff --git a/public/img/equips/weapon/剑姬.png b/public/img/equips/weapon/剑姬.png deleted file mode 100644 index f46631c5667342a90fdca290cdd9fe736b31ce3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5869 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 FV1l=d{pJ7w diff --git a/src/config/equips/weapon.ts b/src/config/equips/weapon.ts index 0285853..b8cd768 100644 --- a/src/config/equips/weapon.ts +++ b/src/config/equips/weapon.ts @@ -34,12 +34,78 @@ export const weaponColorfulCategorys: Categorys[] = [ 'kantou', 'weapon/砍头.png', [ - { type: 'atk', valCoefficient: 1.6 }, - { type: 'crit', valCoefficient: 1.5 }, - { type: 'critDmg', valCoefficient: 1.5 }, + { type: 'atk', valCoefficient: 1.6 }, + { type: 'crit', valCoefficient: 1.5 }, + { type: 'critDmg', valCoefficient: 1.5 }, ], 'BaoNue' ), + new WeaponCategory( + 'shangxin', + 'weapon/伤心刺.png', + [ + { type: 'atk', valCoefficient: 1.8 }, + { type: 'crit', valCoefficient: 1.2 }, + { type: 'critDmg', valCoefficient: 1.8 }, + ], + 'ZhaXin' + ), + new WeaponCategory( + 'aozhidu', + 'weapon/鳌之毒.png', + [ + { type: 'atk', valCoefficient: 1.6 }, + { type: 'bloc', valCoefficient: 1.2 }, + { type: 'hp', valCoefficient: 1.6 }, + ], + 'AoZhiDu' + ), + new WeaponCategory( + 'shijiucha', + 'weapon/十九叉.png', + [ + { type: 'atk', valCoefficient: 1.2 }, + { type: 'def', valCoefficient: 1.6 }, + { type: 'hp', valCoefficient: 1.6 }, + ], + 'ShiJiuCha', + 0.98 + ), + new WeaponCategory('datiecheng', 'weapon/大铁城.png', [ + { type: 'atk', valCoefficient: 4.2 }, + { type: 'critDmg', valCoefficient: 4.2 }, + ]), + new WeaponCategory( + 'qingguang', + 'weapon/青光.png', + [ + { type: 'atk', valCoefficient: 1.5 }, + { type: 'crit', valCoefficient: 1.5 }, + { type: 'critDmg', valCoefficient: 1.5 }, + ], + 'JianQiDongSiFang', + 0.8 + ), + new WeaponCategory( + 'baoxue', + 'weapon/暴雪.png', + [ + { type: 'atk', valCoefficient: 1.8 }, + { type: 'crit', valCoefficient: 1.5 }, + { type: 'critDmg', valCoefficient: 1.3 }, + ], + 'BaoFengXue' + ), + new WeaponCategory( + 'shayi', + 'weapon/杀意.png', + [ + { type: 'atk', valCoefficient: 2.8 }, + { type: 'crit', valCoefficient: 1.5 }, + ], + 'BoDongShaYi', + 0.9 + ), ]; export const weaponUniqueCategorys: WeaponCategory[] = [ diff --git a/src/config/i18n/zh/euips.ts b/src/config/i18n/zh/euips.ts index e831f93..f460817 100644 --- a/src/config/i18n/zh/euips.ts +++ b/src/config/i18n/zh/euips.ts @@ -15,26 +15,25 @@ export const weapon = { qiuai: ['求爱', '我不是在求你爱我,而是,不接受我的爱,你就要死。 ----琵琶精'], qici: ['鳍刺', '这美丽簪成了夺命的刺。多少年后,你还记得是谁曾以此为你绾起青丝。'], kantou: ['砍头', '你知道比砍头更痛苦的是什么吗?'], + shangxin: ['伤心刺', '比砍头更痛苦的,是伤心。'], aozhidu: ['鳌之毒', '相思有毒,曲终无怨。'], + shijiucha: ['十九叉', '每个人都至少有两面。但据说它的主人会有十九个人格。'], + datiecheng: ['大铁城', '其重如一整座冥铁打造的郢都城。'], + qingguang: ['青光', '你活着看到的最后东西是一道青光。'], baoxue: ['暴雪', '铁匠将交付时间推延了二十四次。'], + shayi: ['杀意', '仇敌,莫让吾听闻汝名。'], chengba: ['称霸', '霸者不藏其锋,以天地为鞘。'], chulian: ['初恋', '我的初恋在月亮之上。 ----八戒'], - datiecheng: ['大铁城', '其重如一整座冥铁打造的郢都城。'], duwu: ['黩武', '若未用够最后一丝力气,如何能甘心。'], emeng: ['噩梦', '我最近的噩梦,都和一只猴子有关...... ----增长天王'], heifeng: ['黑风', '这把斧子一直不肯相信它的主人已经死去。'], shishen: ['弑神', '从斩妖台流落到地府的禁忌之物,慎用。'], - jianji: ['剑姬', '美人蒙尘,以诗有缘。'], jlys: ['九灵·元圣', '当坐骑总比没命了强。'], - shangxin: ['伤心刺', '比砍头更痛苦的,是伤心。'], llzx: ['冷龙之心', '长九尺三寸,苍青之气盘绕九十三匝。'], lmlr: ['狸猫利刃', '比时光还要无情。'], liuying: ['流萤', '若不困顿於林野,必凄惶於道路。'], liubuxiang: ['六不像', '汝若身披业火,当一念不起,六欲尽灭。'], longxian: ['龙衔', '天之西北有幽冥无日之国,有龙衔烛而照之也。'], - mingxue: ['鸣血', '别想让他停下来,它已经饥渴难耐了。'], - qingguang: ['青光', '你活着看到的最后东西是一道青光。'], - shayi: ['杀意', '仇敌,莫让吾听闻汝名。'], siyu: ['私语', '你爱的不是我,而是灵山项上那个在绚烂中毁灭的金蝉子。 ----唐僧'], tianzhao: ['天照', '神的叹息'], wuzhe: ['无遮', '知识自境之心。'], diff --git a/src/config/i18n/zh/skills.ts b/src/config/i18n/zh/skills.ts index e668251..02772f7 100644 --- a/src/config/i18n/zh/skills.ts +++ b/src/config/i18n/zh/skills.ts @@ -10,6 +10,12 @@ export const iceBlade = ['冰刃', '暴击时有${0}几率释放冰线冲击,附 export const seeRed = ['见红', '对目标施加${0}层流血,持续${1}回合。', '冷却${0}回合。']; export const qici = ['鳍刺', '攻击时有${0}%概率对目标施加${1}层流血,持续${2}回合。', '触发鳍刺,对${0}施加${1}层流血,持续${2}回合。']; export const baonue = ['暴虐', '攻击时有${0}%概率使目标筋脉爆裂,施加满层流血,持续${1}回合。', '触发暴虐,对${0}施加满层流血,持续${2}回合。']; +export const zhaxin = ['扎心', '获得${0}%暴击伤害加成。']; +export const aozhidu = ['鳌之毒', '攻击时使目标进入溃烂状态${0}回合。', '触发鳌之毒,${0}进入溃烂状态${1}回合']; +export const shijiucha = ['十九叉', '每九次攻击获得连刺状态,使得第十次攻击附加${0}倍伤害。', '${0}触发十九叉连刺,附加${0}点伤害']; +export const jianqidongsifang = ['剑气动四方', '攻击造成的伤害增加${0}%,但被攻击时受到的伤害也增加${1}%。']; +export const baofengxue = ['暴风雪', '使目标进入冰冻状态${0}回合,冷却${1}回合。对boss只有${2}%成功率。']; +export const bodongshayi = ['波动杀意', '每层杀意提升的基础攻击力提高到${0}%,并且杀意最多可以叠加${1}层']; export const bhxdjc = [ '百花羞的矜持', @@ -72,9 +78,10 @@ export const linggan = ['灵感', '每回合回复${0}%生命。']; export const wankang = ['顽抗', '被攻击时反弹${0}%所受伤害,最大反弹值等于${1}%生命上限。', '${0}触发顽抗,反弹${1}点伤害']; export const wuwei = ['五味', '获得${0}%伤害减免。']; -export const atkbuff = ['提升${0}点基础攻击力。', '提升${0}%基础攻击力。', '提升${0}%攻击加成。']; +export const atkbuff = ['提升${0}点基础攻击力。', '提升${0}%基础攻击力。', '提升${0}%攻击加成。', '提升${0}%伤害加成。']; export const critbuff = ['提升${0}%暴击率。', '提升${0}%暴击伤害。', '提升${0}%暴击减免。', '提升${0}%暴击伤害减免。']; export const defbuff = ['提升${0}点防御。', '提升${0}%防御。', '获得${0}%伤害减免。']; +export const blocbuff = ['提升${0}点格挡。', '提升${0}%格挡。']; export const kuilan = '防御降低${0}%。'; export const liuxue = ['每回合流失%{0}当前生命值', '受(${0}层)流血影响,${1}损失${2}生命值。']; diff --git a/src/config/skill/armor.ts b/src/config/skill/armor.ts index c802d22..b8a9854 100644 --- a/src/config/skill/armor.ts +++ b/src/config/skill/armor.ts @@ -1,6 +1,7 @@ -import { PrePassiveSkill, BuffSkill, CounterSkill } from './base'; +import { PrePassiveSkill, BuffSkill, CounterSkill, StartPassiveSkill } from './base'; import i18n from '../i18n'; import { BattleRole, callDmgReduc, replace } from '@/tool'; +import { BlocPercentBuff } from './buff'; const { t } = i18n; //百花羞的矜持 @@ -70,16 +71,14 @@ export class JinGuangHuShen extends CounterSkill { } } //牢不可破 -export class LaoBuKePo extends PrePassiveSkill { +export class LaoBuKePo extends StartPassiveSkill { name: string = 'laobukepo'; percent: number = 200; desc(): string { return replace(t('skill.laobukepo.1'), [this.percent]); } - trigger(owner: BattleRole, target: BattleRole): boolean { - return true; - } takeEffect(owner: BattleRole, target: BattleRole): void { - owner.extraAttr.bloc += owner.attr.bloc * (this.percent / 100); + const laobukepo = new BlocPercentBuff(this.name, this.percent, 9999); + owner.putBuff(laobukepo); } } diff --git a/src/config/skill/base.ts b/src/config/skill/base.ts index ca31aeb..3200154 100644 --- a/src/config/skill/base.ts +++ b/src/config/skill/base.ts @@ -1,7 +1,7 @@ import { BattleRole, callReducPercent, replace } from '@/tool'; import { type_boss } from '@/config'; import i18n from '../i18n'; -import { ControlAbnormal } from './buff'; +import { ControlBuff } from './buff'; const { t } = i18n; export interface Skill { order: number; @@ -152,7 +152,7 @@ export abstract class Control extends ActionSkill { const rate = target.type == type_boss ? this.bossRate : this.rate; let log = t('skill.control.1'); if (Math.random() < rate / 100) { - target.putBuff(new ControlAbnormal(this.name, this.last)); + target.putBuff(new ControlBuff(this.name, this.last)); log = replace(t('skill.control.0'), [t(target.type), this.last]); } log = log = replace(t('skill.user'), [t(owner.type), t('skill.' + this.name + '.0')]) + log; diff --git a/src/config/skill/bracers.ts b/src/config/skill/bracers.ts index f4b7e67..4ff0eb5 100644 --- a/src/config/skill/bracers.ts +++ b/src/config/skill/bracers.ts @@ -36,17 +36,16 @@ export class DaLiDan extends StartPassiveSkill { //剧毒 export class JuDu extends CounterSkill { name: string = 'judu'; - rate: number = 80; - percent: number = 50; + rate: number = 60; last: number = 2; desc(): string { - return replace(t('skill.judu.1'), [this.rate, this.last]) + replace(t('skill.kuilan'), [this.percent]); + return replace(t('skill.judu.1'), [this.rate, this.last]); } trigger(owner: BattleRole, target: BattleRole): boolean { return Math.random() < this.rate / 100; } takeEffect(owner: BattleRole, target: BattleRole): void { - const judu = new KuiLan('kuilan', this.percent, this.last); + const judu = new KuiLan('kuilan', this.last); target.putBuff(judu); owner.battleLog(replace(t('skill.judu.2'), [t(target.type), this.last])); } diff --git a/src/config/skill/buff.ts b/src/config/skill/buff.ts index 970ca8b..8ebe780 100644 --- a/src/config/skill/buff.ts +++ b/src/config/skill/buff.ts @@ -1,11 +1,11 @@ -import { BattleRole, callDmgReduc, replace } from '@/tool'; +import { BattleRole, callDmgPercent, callDmgReduc, replace } from '@/tool'; import i18n from '../i18n'; const { t } = i18n; -//增益BUFF +//BUFF export abstract class Buff { order: number = 1; - type: string = 'buff'; + abstract type: string; name: string; layer: number = 1; maxLayer: number = 1; @@ -38,40 +38,57 @@ export abstract class Buff { } abstract takeEffect(owner: BattleRole): void; } -//减益BUFF -export abstract class Debuff extends Buff { - type: string = 'debuff'; +//攻击时触发的BUFF +export abstract class AttackBuff extends Buff { + type: string = 'attackBuff'; } -//异常 -export abstract class Abnormal extends Buff { - type: string = 'abnormal'; +//被攻击时触发的BUFF +export abstract class AttackedBuff extends Buff { + type: string = 'attackedBuff'; } -//百分比增益BUFF -export abstract class PercentBuff extends Buff { +///攻击时触发的百分比BUFF +export abstract class PercentAttackBuff extends AttackBuff { percent: number; constructor(name: string, percent: number, last: number, maxLayer?: number) { super(name, last, maxLayer); this.percent = percent; } } -//百分比减益DEBUFF -export abstract class PercentDebuff extends Debuff { +//被攻击时触发的百分比BUFF +export abstract class PercentAttackedBuff extends AttackedBuff { percent: number; constructor(name: string, percent: number, last: number, maxLayer?: number) { super(name, last, maxLayer); this.percent = percent; } } -//固定数值减益DEBUFF -export abstract class ConstantDebuff extends Debuff { +//被攻击时触发的固定数值BUFF +export abstract class ConstantAttackBuff extends AttackedBuff { number: number; constructor(name: string, number: number, last: number, maxLayer?: number) { super(name, last, maxLayer); this.number = number; } } -//基础攻击百分比增益BUFF -export class BaseAtkPercentBuff extends PercentBuff { +//被攻击时触发的固定数值BUFF +export abstract class ConstantAttackedBuff extends AttackedBuff { + number: number; + constructor(name: string, number: number, last: number, maxLayer?: number) { + super(name, last, maxLayer); + this.number = number; + } +} +//伤害加成增减益BUFF +export class DmgPercentBuff extends PercentAttackBuff { + desc(): string { + return replace(t('skill.atkbuff.3'), [this.percent * this.layer]); + } + takeEffect(owner: BattleRole): void { + owner.extraAttr.dmgPercent = callDmgPercent(owner.extraAttr.dmgPercent, this.percent); + } +} +//基础攻击百分比增减益BUFF +export class BaseAtkPercentBuff extends PercentAttackBuff { desc(): string { return replace(t('skill.atkbuff.1'), [this.percent * this.layer]); } @@ -79,8 +96,8 @@ export class BaseAtkPercentBuff extends PercentBuff { owner.extraAttr.baseAtk += (this.percent / 100) * this.layer * owner.attr.baseAtk; } } -//攻击加成增益BUFF -export class AtkPercentBuff extends PercentBuff { +//攻击加成增减益BUFF +export class AtkPercentBuff extends PercentAttackBuff { desc(): string { return replace(t('skill.atkbuff.2'), [this.percent * this.layer]); } @@ -88,8 +105,8 @@ export class AtkPercentBuff extends PercentBuff { owner.extraAttr.atkPercent += this.percent; } } -//爆伤增益BUFF -export class CritDmgBuff extends PercentBuff { +//爆伤增减益BUFF +export class CritDmgBuff extends PercentAttackBuff { desc(): string { return replace(t('skill.critbuff.1'), [this.percent * this.layer]); } @@ -97,8 +114,8 @@ export class CritDmgBuff extends PercentBuff { owner.extraAttr.critDmg += this.percent * this.layer; } } -//爆伤减免增益BUFF -export class CritDmgReducBuff extends PercentBuff { +//爆伤减免增减益BUFF +export class CritDmgReducBuff extends PercentAttackedBuff { desc(): string { return replace(t('skill.critbuff.3'), [this.percent * this.layer]); } @@ -106,23 +123,26 @@ export class CritDmgReducBuff extends PercentBuff { owner.extraAttr.critDmgReduc += this.percent * this.layer; } } - -//伤害减免增益BUFF -export class DmgReducBuff extends Buff { - dmgReduc: number; - constructor(name: string, dmgReduc: number, last: number, maxLayer?: number) { - super(name, last, maxLayer); - this.dmgReduc = dmgReduc; +//伤害减免增减益BUFF +export class DmgReducBuff extends PercentAttackedBuff { + desc(): string { + return replace(t('skill.defbuff.2'), [this.percent * this.layer]); } + takeEffect(owner: BattleRole): void { + owner.extraAttr.dmgReduc = callDmgReduc(owner.extraAttr.dmgReduc, this.percent); + } +} +//格挡百分比增减益BUFF +export class BlocPercentBuff extends PercentAttackedBuff { desc(): string { - return replace(t('skill.defbuff.2'), [this.dmgReduc * this.layer]); + return replace(t('skill.blocbuff.2'), [this.percent * this.layer]); } takeEffect(owner: BattleRole): void { - owner.extraAttr.dmgReduc = callDmgReduc(owner.extraAttr.dmgReduc, this.dmgReduc); + owner.extraAttr.bloc += Math.ceil(owner.attr.bloc * this.percent); } } //控制异常 -export class ControlAbnormal extends Abnormal { +export class ControlBuff extends AttackBuff { constructor(name: string, last: number) { super(name, last); } @@ -135,7 +155,10 @@ export class ControlAbnormal extends Abnormal { } } //溃烂 -export class KuiLan extends PercentDebuff { +export class KuiLan extends PercentAttackedBuff { + constructor(name: string, last: number) { + super(name, 50, last); + } desc(): string { return replace(t('skill.kongbulingyu.2'), [this.percent]); } @@ -144,7 +167,7 @@ export class KuiLan extends PercentDebuff { } } //恐怖领域 -export class KBLYDebuff extends ConstantDebuff { +export class KBLYDebuff extends ConstantAttackedBuff { desc(): string { return replace(t('skill.kongbulingyu.2'), [this.number]); } @@ -153,7 +176,7 @@ export class KBLYDebuff extends ConstantDebuff { } } //灵感 -export class LingGanBuff extends PercentBuff { +export class LingGanBuff extends PercentAttackBuff { desc(): string { return replace(t('skill.linggan.1'), [this.percent]); } @@ -162,12 +185,12 @@ export class LingGanBuff extends PercentBuff { } } //流血 -export class LiuXue extends Abnormal { +export class LiuXue extends AttackBuff { percent: number = 2; maxLayer: number = 10; constructor(layer: number, last: number) { super('liuxue', last); - this.layer = layer > this.maxLayer ? this.maxLayer :layer; + this.layer = layer > this.maxLayer ? this.maxLayer : layer; } desc(): string { return replace(t('skill.liuxue.0'), [this.percent]); diff --git a/src/config/skill/neck.ts b/src/config/skill/neck.ts index 6e7e936..7da152b 100644 --- a/src/config/skill/neck.ts +++ b/src/config/skill/neck.ts @@ -51,6 +51,7 @@ export class ShaYi extends SufPassiveSkill { atkPercent: number = 3; maxLayer: number = 10; reduc: number = 3; + retains: string[] = ['percent', 'maxLayer']; desc(): string { return replace(st('shayi.1'), [this.atkPercent, this.reduc, this.maxLayer]); } @@ -59,14 +60,14 @@ export class ShaYi extends SufPassiveSkill { } takeEffect(owner: BattleRole, target: BattleRole): void { const shayi = new BaseAtkPercentBuff(this.name, this.atkPercent, 9999, this.maxLayer); - owner.putBuff(shayi); + owner.putBuff(shayi, this.retains); owner.battleLog(replace(st('shayi.2'), [shayi.layer])); } onAtked(owner: BattleRole, target: BattleRole): void { if (target.crit) { const shayi = new BaseAtkPercentBuff(this.name, this.atkPercent, 9999, this.maxLayer); shayi.layer = -1 * this.reduc; - owner.putBuff(shayi); + owner.putBuff(shayi, this.retains); owner.battleLog(replace(st('shayi.3'), [this.reduc])); } } diff --git a/src/config/skill/ring.ts b/src/config/skill/ring.ts index 99cf3ef..f807b2c 100644 --- a/src/config/skill/ring.ts +++ b/src/config/skill/ring.ts @@ -1,7 +1,7 @@ import { SufPassiveSkill, PrePassiveSkill, PassiveSkill, CounterSkill } from './base'; import i18n from '../i18n'; import { BattleRole, callDmgPercent, replace } from '@/tool'; -import { ControlAbnormal, CritDmgBuff, CritDmgReducBuff } from './buff'; +import { ControlBuff, CritDmgBuff, CritDmgReducBuff } from './buff'; const { t } = i18n; //森罗万象 @@ -35,7 +35,7 @@ export class JinGangZhuo extends SufPassiveSkill { return Math.random() < this.rate / 100; } takeEffect(owner: BattleRole, target: BattleRole): void { - target.putBuff(new ControlAbnormal(this.name, this.last)); + target.putBuff(new ControlBuff(this.name, this.last)); owner.battleLog(replace(t('skill.jinggangzhuo.2'), [this.last])); } } @@ -58,7 +58,7 @@ export class FengXie extends SufPassiveSkill { owner.putBuff(fengxie); owner.battleLog(replace(t('skill.fengxie.2'), [fengxie.layer])); } else { - owner.buff.delete(this.name); + owner.attackBuff.delete(this.name); owner.battleLog(t('skill.fengxie.3')); } } diff --git a/src/config/skill/weapon.ts b/src/config/skill/weapon.ts index 0c9bddb..634cb7c 100644 --- a/src/config/skill/weapon.ts +++ b/src/config/skill/weapon.ts @@ -1,8 +1,10 @@ -import { ActionSkill, Attack, PassiveSkill, SufPassiveSkill } from './base'; -import i18n from '../i18n'; +import { ActionSkill, Attack, Control, PassiveSkill, PrePassiveSkill, StartPassiveSkill, SufPassiveSkill } from './base'; +import { createt } from '../i18n'; import { replace, BattleRole } from '@/tool'; -import { ControlAbnormal, LiuXue } from './buff'; -const { t } = i18n; +import { BaseAtkPercentBuff, ControlBuff, CritDmgBuff, DmgPercentBuff, DmgReducBuff, KuiLan, LiuXue } from './buff'; + +const t = createt(''); +const st = createt('skill.'); //冰刃 export class IceBlade extends SufPassiveSkill { name: string = 'iceBlade'; @@ -10,7 +12,7 @@ export class IceBlade extends SufPassiveSkill { percent: number = 1000; last: number = 1; desc(): string { - return replace(t('skill.iceBlade.1'), [this.rate, this.percent, this.last]); + 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; @@ -18,8 +20,8 @@ export class IceBlade extends SufPassiveSkill { takeEffect(owner: BattleRole, target: BattleRole): void { const additional = Math.ceil((owner.atk * this.percent) / 100); target.addHp(-1 * additional); - target.putBuff(new ControlAbnormal(this.name, this.last)); - owner.battleLog(replace(t('skill.iceBlade.2'), [additional, t(target.type), this.last])); + target.putBuff(new ControlBuff(this.name, this.last)); + owner.battleLog(replace(st('iceBlade.2'), [additional, t(target.type), this.last])); } } //见红 @@ -29,13 +31,13 @@ export class SeeRed extends ActionSkill { cd: number = 5; last: number = 5; desc(): string { - return replace(t('skill.seeRed.1'), [this.layer, this.last]) + replace(t('skill.seeRed.2'), [this.cd]); + 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.battleLog(replace(t('skill.user'), [t(owner.type), t('skill.' + this.name + '.0')]) + replace(t('skill.seeRed.1'), [this.layer, this.last])); + owner.battleLog(replace(st('user'), [t(owner.type), st(this.name + '.0')]) + replace(st('seeRed.1'), [this.layer, this.last])); } } //鳍刺 @@ -45,7 +47,7 @@ export class QiCi extends SufPassiveSkill { layer: number = 3; last: number = 4; desc(): string { - return replace(t('skill.qici.1'), [this.rate, this.layer, this.last]); + 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; @@ -53,7 +55,7 @@ export class QiCi extends SufPassiveSkill { takeEffect(owner: BattleRole, target: BattleRole): void { const liuxue = new LiuXue(this.layer, this.last); target.putBuff(liuxue); - owner.battleLog(replace(t('skill.qici.2'), [t(target.type), this.layer, this.last])); + owner.battleLog(replace(st('qici.2'), [t(target.type), this.layer, this.last])); } } //暴虐 @@ -62,7 +64,7 @@ export class BaoNue extends SufPassiveSkill { rate: number = 30; last: number = 2; desc(): string { - return replace(t('skill.baonue.1'), [this.rate, this.last]); + return replace(st('baonue.1'), [this.rate, this.last]); } trigger(owner: BattleRole, target: BattleRole): boolean { return owner.dmg > 0 && Math.random() < this.rate / 100; @@ -70,6 +72,100 @@ export class BaoNue extends SufPassiveSkill { takeEffect(owner: BattleRole, target: BattleRole): void { const liuxue = new LiuXue(9999, this.last); target.putBuff(liuxue); - owner.battleLog(replace(t('skill.baonue.2'), [t(target.type), this.last])); + owner.battleLog(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.battleLog(replace(st('aozhidu.2'), [t(target.type), this.last])); + } +} +//十九叉 +export class ShiJiuCha extends SufPassiveSkill { + name: string = 'shijiucha'; + times: number = 9; + 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.battleLog(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.dmgPercent, 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'; + perent: number = 6; + maxLayer: number = 15; + desc(): string { + return replace(st('bodongshayi.1'), [this.perent, 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.perent; + shayi.maxLayer = this.maxLayer; + } } } diff --git a/src/tool/caller/battle.ts b/src/tool/caller/battle.ts index b381305..64a7cad 100644 --- a/src/tool/caller/battle.ts +++ b/src/tool/caller/battle.ts @@ -9,9 +9,8 @@ export class BattleRole { passives: Skills.Skill[] = new Array(); commit; type: string; - buff: Map = new Map(); - debuff: Map = new Map(); - abnormal: Map = new Map(); + attackBuff: Map = new Map(); + attackedBuff: Map = new Map(); //临时状态 action: Skills.ActionSkill | null = null; atk: number = 0; @@ -79,10 +78,9 @@ export class BattleRole { this.passives.forEach((skill) => { skill.beforeAtk(this, target); }); - //攻击前计算自身增益buff和异常buff以及目标减益 - this.callBuff(); - this.callAbnormal(); - target.callDebuff(); + //攻击前计算双方BUFF + this.callAttackBuff(); + target.callAttackedBuff(); this.action?.use(this, target); //攻击后触发的被动技能 this.passives.forEach((skill) => { @@ -166,35 +164,34 @@ export class BattleRole { this.dmg = dmg < 1 ? 1 : dmg; }; - putBuff(buff: Skills.Buff) { + putBuff(buff: Skills.AttackBuff, retains?: string[]) { const name = buff.name; const type = buff.type; const exit: Skills.Buff = this[type].get(name); this[type].set(name, buff); if (exit) { + if (retains) { + retains.forEach((key) => { + buff[key] = exit[key]; + }); + } buff.addLayer(exit.layer); } } - callBuff() { - this.buff.forEach((value: Skills.Buff, key: string) => { - value.takeEffect(this); - }); - } - callAbnormal() { - this.abnormal.forEach((value: Skills.Buff, key: string) => { + callAttackBuff() { + this.attackBuff.forEach((value: Skills.Buff, key: string) => { value.takeEffect(this); }); } - callDebuff() { - this.debuff.forEach((value: Skills.Buff, key: string) => { + callAttackedBuff() { + this.attackedBuff.forEach((value: Skills.Buff, key: string) => { value.takeEffect(this); }); } checkBuff() { - checkBuf(this.buff); - checkBuf(this.abnormal); - checkBuf(this.debuff); + checkBuf(this.attackBuff); + checkBuf(this.attackedBuff); } }