diff --git a/logic/service/fight/effect/effect_damage.go b/logic/service/fight/effect/effect_damage.go index 9026cb12..64e95593 100644 --- a/logic/service/fight/effect/effect_damage.go +++ b/logic/service/fight/effect/effect_damage.go @@ -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 } diff --git a/logic/service/fight/input/attr.go b/logic/service/fight/input/attr.go index 813fec14..8d329ce2 100644 --- a/logic/service/fight/input/attr.go +++ b/logic/service/fight/input/attr.go @@ -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)) diff --git a/logic/service/fight/input/effecti.go b/logic/service/fight/input/effecti.go index 3a622a39..b8387ab6 100644 --- a/logic/service/fight/input/effecti.go +++ b/logic/service/fight/input/effecti.go @@ -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) // 技能命中前触发 diff --git a/logic/service/fight/node/skill.go b/logic/service/fight/node/skill.go index 34f1ce19..226eda5d 100644 --- a/logic/service/fight/node/skill.go +++ b/logic/service/fight/node/skill.go @@ -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) { + +}