2025-09-23 19:49:17 +00:00
|
|
|
|
package input
|
|
|
|
|
|
|
2025-09-23 23:33:15 +00:00
|
|
|
|
import (
|
|
|
|
|
|
element "blazing/common/data/Element"
|
|
|
|
|
|
"blazing/logic/service/fight/info"
|
|
|
|
|
|
|
2025-09-23 23:35:53 +00:00
|
|
|
|
"github.com/mohae/deepcopy"
|
2025-09-23 23:33:15 +00:00
|
|
|
|
"github.com/shopspring/decimal"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2025-09-23 19:49:17 +00:00
|
|
|
|
func (u *Input) Death() {
|
|
|
|
|
|
|
|
|
|
|
|
u.CurrentPet.Info.Hp = 0
|
|
|
|
|
|
|
|
|
|
|
|
//todo 待实现死亡effet
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 1是添加,-1是减少,0是清除
|
2025-09-23 19:50:11 +00:00
|
|
|
|
func (u *Input) SetProp(prop, level int) {
|
2025-09-23 22:34:02 +00:00
|
|
|
|
|
|
|
|
|
|
if level == 0 { //说明是消强
|
|
|
|
|
|
//todo 消强交互
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2025-09-23 19:49:17 +00:00
|
|
|
|
//todo 待交互
|
|
|
|
|
|
|
|
|
|
|
|
u.AttackValue.Prop[prop] = u.AttackValue.Prop[prop] + int8(level)
|
|
|
|
|
|
|
|
|
|
|
|
//todo 待交互
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2025-09-23 23:33:15 +00:00
|
|
|
|
func (i *Input) GetAction(opp *Input) {
|
2025-09-23 22:34:02 +00:00
|
|
|
|
//使用1#技能,实际上要按照四个技能权重去使用
|
2025-09-23 23:33:15 +00:00
|
|
|
|
i.FightC.UseSkill(i.Player, int32(i.FightC.GetCurrPET(i.Player).Skills[0].ID))
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-23 23:35:53 +00:00
|
|
|
|
// todo获取属性,待实现获取后改回原属性
|
2025-09-24 12:40:13 +08:00
|
|
|
|
func (i *Input) Prop(in *Input, f func()) {
|
2025-09-23 23:48:22 +00:00
|
|
|
|
oldour := deepcopy.Copy(i.CurrentPet).(*info.BattlePetEntity)
|
|
|
|
|
|
//oldouo := deepcopy.Copy(opp.CurrentPet).(*info.BattlePetEntity)
|
|
|
|
|
|
i.Exec(func(t Effect) bool { //属性获取前
|
2025-09-23 23:35:53 +00:00
|
|
|
|
|
2025-09-23 23:48:22 +00:00
|
|
|
|
t.BeferAttr(i.CurrentPet) //使XX为XX
|
2025-09-23 23:35:53 +00:00
|
|
|
|
return true
|
|
|
|
|
|
})
|
2025-09-23 23:48:22 +00:00
|
|
|
|
|
2025-09-24 12:40:13 +08:00
|
|
|
|
oldourr := deepcopy.Copy(in.CurrentPet).(*info.BattlePetEntity)
|
|
|
|
|
|
in.Exec(func(t Effect) bool { //属性获取后
|
2025-09-24 00:05:28 +00:00
|
|
|
|
|
2025-09-24 12:40:13 +08:00
|
|
|
|
t.AfterAttr(i.CurrentPet) //视为xx 需要在里面判断来源
|
|
|
|
|
|
return true
|
|
|
|
|
|
})
|
2025-09-23 23:48:22 +00:00
|
|
|
|
f()
|
2025-09-24 12:40:13 +08:00
|
|
|
|
in.CurrentPet = oldourr
|
|
|
|
|
|
|
2025-09-23 23:48:22 +00:00
|
|
|
|
i.CurrentPet = oldour //恢复
|
|
|
|
|
|
//opp.CurrentPet = oldouo //恢复
|
2025-09-23 23:35:53 +00:00
|
|
|
|
}
|
2025-09-24 20:51:42 +00:00
|
|
|
|
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 //恢复
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2025-09-23 23:35:53 +00:00
|
|
|
|
|
2025-09-23 23:33:15 +00:00
|
|
|
|
// 计算技能威力
|
2025-09-24 12:40:13 +08:00
|
|
|
|
func (i *Input) CalculatePower(deftype *Input, skill *info.SkillEntity) decimal.Decimal {
|
2025-09-23 23:33:15 +00:00
|
|
|
|
|
2025-09-24 20:51:42 +00:00
|
|
|
|
|
2025-09-23 23:33:15 +00:00
|
|
|
|
// 1. 计算等级因子 (level * 0.4 + 2)
|
|
|
|
|
|
levelFactor := decimal.NewFromInt(int64(i.CurrentPet.Info.Level)).
|
|
|
|
|
|
Mul(decimal.NewFromFloat(0.4)).Add(decimal.NewFromInt(2))
|
|
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
|
attackDec decimal.Decimal //攻击值
|
|
|
|
|
|
defenseDec decimal.Decimal //防御值
|
|
|
|
|
|
|
|
|
|
|
|
)
|
2025-09-24 12:40:13 +08:00
|
|
|
|
|
2025-09-23 23:33:15 +00:00
|
|
|
|
switch skill.Category() { //判断技能类型
|
|
|
|
|
|
case info.Category.PHYSICAL:
|
2025-09-24 12:40:13 +08:00
|
|
|
|
i.Prop(i, func() { //我方取我方攻击
|
|
|
|
|
|
attackDec = decimal.NewFromInt(int64(i.CurrentPet.Info.Prop[0]))
|
|
|
|
|
|
})
|
|
|
|
|
|
deftype.Prop(i, func() { //我方取敌方防御
|
|
|
|
|
|
defenseDec = decimal.NewFromInt(int64(deftype.CurrentPet.Info.Prop[1]))
|
2025-09-23 23:33:15 +00:00
|
|
|
|
|
2025-09-24 12:40:13 +08:00
|
|
|
|
})
|
2025-09-23 23:33:15 +00:00
|
|
|
|
|
|
|
|
|
|
case info.Category.SPECIAL:
|
|
|
|
|
|
|
2025-09-24 12:40:13 +08:00
|
|
|
|
i.Prop(i, func() { //我方取我方攻击
|
|
|
|
|
|
attackDec = decimal.NewFromInt(int64(i.CurrentPet.Info.Prop[2]))
|
|
|
|
|
|
})
|
|
|
|
|
|
deftype.Prop(i, func() { //我方取敌方防御
|
|
|
|
|
|
defenseDec = decimal.NewFromInt(int64(deftype.CurrentPet.Info.Prop[3]))
|
|
|
|
|
|
|
|
|
|
|
|
})
|
2025-09-23 23:33:15 +00:00
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
return decimal.NewFromInt(0)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 5. 基础伤害公式:等级因子 * 威力因子 * 攻击 / 防御 / 50 + 2
|
|
|
|
|
|
baseDamage := levelFactor.
|
|
|
|
|
|
Mul(decimal.NewFromInt(int64(skill.Power))).
|
|
|
|
|
|
Mul(attackDec).
|
|
|
|
|
|
Div(defenseDec).
|
|
|
|
|
|
Div(decimal.NewFromInt(50)).
|
|
|
|
|
|
Add(decimal.NewFromInt(2))
|
|
|
|
|
|
|
2025-09-24 12:40:13 +08:00
|
|
|
|
var typeRate decimal.Decimal
|
|
|
|
|
|
|
|
|
|
|
|
deftype.Prop(i, func() { //我方取敌方属性,得到敌方的实际和我方的视为
|
|
|
|
|
|
t, _ := element.NewElementCalculator().GetOffensiveMultiplier(skill.Type().ID, deftype.CurrentPet.Type().ID)
|
2025-09-23 23:33:15 +00:00
|
|
|
|
|
2025-09-24 12:40:13 +08:00
|
|
|
|
typeRate = decimal.NewFromFloat(t)
|
|
|
|
|
|
|
|
|
|
|
|
})
|
2025-09-23 23:33:15 +00:00
|
|
|
|
|
|
|
|
|
|
damage := baseDamage.
|
|
|
|
|
|
Mul(skill.CriticalsameTypeBonus()). // 同属性加成
|
|
|
|
|
|
Mul(typeRate). // 克制系数
|
|
|
|
|
|
|
|
|
|
|
|
Mul(skill.Criticalrandom()) //随机波动
|
|
|
|
|
|
|
|
|
|
|
|
return damage
|
2025-09-23 20:53:47 +00:00
|
|
|
|
|
|
|
|
|
|
}
|