refactor(fight/effect): 重构技能威力计算逻辑,优化暴击判定方式并新增BeforeSkill接口
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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) // 技能命中前触发
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user