diff --git a/common/data/xmlres/skill.go b/common/data/xmlres/skill.go index 657e623d5..d1b6b22d9 100644 --- a/common/data/xmlres/skill.go +++ b/common/data/xmlres/skill.go @@ -61,7 +61,7 @@ type Move struct { DmgBindLv int `xml:"DmgBindLv,attr,omitempty"` //使对方受到的伤害值等于自身的等级 PwrBindDv int `xml:"PwrBindDv,attr,omitempty"` //威力(power)取决于自身的潜力(个体值) PwrDouble int `xml:"PwrDouble,attr,omitempty"` //攻击时,若对方处于异常状态, 则威力翻倍; - + DmgBindHpDv int `xml:"DmgBindHpDv,attr,omitempty"` //使对方受到的伤害值等于自身的体力值 SideEffect string `xml:"SideEffect,attr,omitempty"` SideEffectArg string `xml:"SideEffectArg,attr,omitempty"` SideEffectS []int diff --git a/logic/service/fight/input/fight.go b/logic/service/fight/input/fight.go index 5435ea925..981284056 100644 --- a/logic/service/fight/input/fight.go +++ b/logic/service/fight/input/fight.go @@ -418,7 +418,34 @@ func (i *Input) CalculatePower(deftype *Input, skill *info.SkillEntity) decimal. t, _ := element.Calculator.GetOffensiveMultiplier(skill.Type().ID, deftype.CurrentPet.Type().ID) typeRate = decimal.NewFromFloat(t) + // 8. DmgBindLv: 使对方受到的伤害值等于等级; 默认: 0 + // 9. PwrBindDv: 1,威力(power)取决于潜力(个体值)*5; 2,威力(power)取决于最大体力*1/3+潜力(个体值); 默认: 0 + // 10. PwrDouble: 攻击时,若对方处于异常状态, 则威力翻倍; + // 11. DmgBindHpDv: 造成的伤害等于自身剩余体力*1/2+潜力(个体值); 默认: 0 + if skill.DmgBindLv != 0 { + baseDamage = decimal.NewFromInt(int64(deftype.CurrentPet.Info.Level)) + } + if skill.PwrBindDv != 0 { + if skill.PwrBindDv == 1 { + baseDamage = decimal.NewFromInt(int64(i.CurrentPet.Info.Dv * 5)) + } + if skill.PwrBindDv == 2 { + baseDamage = decimal.NewFromInt(int64(i.CurrentPet.Info.Hp/3 + i.CurrentPet.Info.Dv)) + } + + } + if skill.PwrDouble != 0 { + + if deftype.StatEffect_Exist_all() { + baseDamage = baseDamage.Mul(decimal.NewFromInt(2)) + } + + } + if skill.DmgBindHpDv != 0 { + baseDamage = decimal.NewFromInt(int64(i.CurrentPet.Info.Hp/2 + i.CurrentPet.Info.Dv)) + + } damage := baseDamage. Mul(skill.CriticalsameTypeBonus()). // 同属性加成 Mul(typeRate). // 克制系数 diff --git a/logic/service/fight/input/node.go b/logic/service/fight/input/node.go index e6b5621a4..7c91451e8 100644 --- a/logic/service/fight/input/node.go +++ b/logic/service/fight/input/node.go @@ -85,7 +85,7 @@ func (c *Input) GetEffect(etype EnumEffectType, id int) Effect { } func (c *Input) StatEffect_Exist(id int) bool { for _, v := range c.Effects { - if v.ID() == id && v.Alive() { + if v.ID()+int(EffectType.Status) == id && v.Alive() { return true } @@ -93,7 +93,16 @@ func (c *Input) StatEffect_Exist(id int) bool { return false } +func (c *Input) StatEffect_Exist_all() bool { + for _, v := range c.Effects { + if v.ID() >= int(EffectType.Status) && v.ID() < int(EffectType.Sub) && v.Alive() { + return true + } + } + + return false +} func (c *Input) GetCurrAttr(id int) *model.PetInfo { //todo 获取前GetEffect