refactor(fight/effect): 重构技能威力计算逻辑,优化暴击判定方式并新增BeforeSkill接口

This commit is contained in:
1
2025-09-24 20:51:42 +00:00
parent 726a2d6cb5
commit a4b2e5da9e
4 changed files with 24 additions and 8 deletions

View File

@@ -19,9 +19,10 @@ func (e *Effect0) TurnEnd(opp *input.Input) {
// 使用技能时
func (e *Effect0) OnSkill(opp *input.Input, skill *info.SkillEntity) {
e.Input.Skill(skill, func() { //变威力作用
//变威力作用
e.Stack(int(e.Input.CalculatePower(opp, skill).IntPart()))
e.Stack(int(e.Input.CalculatePower(opp, skill).IntPart()))
})
e.Input.Exec(func(t input.Effect) bool { //计算暴击率加成
@@ -38,7 +39,7 @@ func (this *Effect0) BeforHit(opp *input.Input, skill *info.SkillEntity) {
skill.AttackTimeC(int(opp.GetProp(5, true))) //计算命中
skill.Crit = 0
CritRate := utils.Max(skill.CritRate, 1)
CritRateR := this.Input.FightC.GetRand().Int31n(16)
//CritAtkFirst: 先出手时必定致命一击; 默认: 0
if skill.CritAtkFirst != 0 && this.Input.First {
CritRate = 16
@@ -57,7 +58,7 @@ func (this *Effect0) BeforHit(opp *input.Input, skill *info.SkillEntity) {
}
//todo 暴击伤害
if CritRateR <= int32(CritRate) {
if t, _, _ := this.Input.Player.Roll(625*CritRate, 10000); t {
skill.Crit = 1
}

View File

@@ -58,13 +58,25 @@ func (i *Input) Prop(in *Input, f func()) {
i.CurrentPet = oldour //恢复
//opp.CurrentPet = oldouo //恢复
}
func (i *Input) Skill(in *info.SkillEntity, f func()) {
oldour := deepcopy.Copy(i.CurrentPet).(*info.SkillEntity)
//oldouo := deepcopy.Copy(opp.CurrentPet).(*info.BattlePetEntity)
i.Exec(func(t Effect) bool { //属性获取前
t.BeforeSkill(i,in) //使XX为XX
return true
})
in = oldour //恢复
}
// 计算技能威力
func (i *Input) CalculatePower(deftype *Input, skill *info.SkillEntity) decimal.Decimal {
//威力+区
//威力*区
//todo 待修复input输入
// 1. 计算等级因子 (level * 0.4 + 2)
levelFactor := decimal.NewFromInt(int64(i.CurrentPet.Info.Level)).
Mul(decimal.NewFromFloat(0.4)).Add(decimal.NewFromInt(2))

View File

@@ -10,7 +10,8 @@ type Effect interface {
OnTurnStart(opp *Input) //回合开始
UseSkill(opp *Input) bool //使用技能 可以取消用技能节点
BeforeSkill(opp *Input, skill *info.SkillEntity) //闪避率计算,,实际上是修改命中的判断
OnSkill(opp *Input, skill *info.SkillEntity) //闪避率计算,,实际上是修改命中的判断
// OnSkillPP() bool //技能PP减少节点
// OnCritPreDamage() bool //暴击判定成功且伤害计算前触发
@@ -26,7 +27,7 @@ type Effect interface {
CalculateDamage(opp *Input, skill *info.SkillEntity) //击判定成功且伤害计算前触发
BeforeCalculateDamage(opp *Input, skill *info.SkillEntity) // 最终伤害计算前触发
OnSkill(opp *Input, skill *info.SkillEntity) //闪避率计算,,实际上是修改命中的判断
BeforHit(opp *Input, skill *info.SkillEntity) // 技能命中前触发

View File

@@ -18,4 +18,6 @@ func (e *EffectNode) OnSkill(opp *input.Input, skill *info.SkillEntity) {
func (e *EffectNode) OnSkillPP() bool {
return true
}
func (e *EffectNode) BeforeSkill(opp *input.Input, skill *info.SkillEntity) {
}