feat(fight): 优化战斗属性计算和技能命中逻辑
- 更新了战斗中属性比较和技能命中的计算方式 - 调整了属性提升和状态效果的处理逻辑 - 优化了属性值的计算方法,确保结果至少为1 - 修改了技能准确性的计算公式
This commit is contained in:
@@ -51,7 +51,7 @@ func (f *FightC) Compare(a, b BattleActionI) (BattleActionI, BattleActionI) {
|
||||
return a, b
|
||||
}
|
||||
|
||||
p2 = int(f.Opp.GetProp(4)) - int(f.Our.GetProp(4))
|
||||
p2 = int(f.Opp.GetProp(4, false)) - int(f.Our.GetProp(4, false))
|
||||
if p2 > 0 {
|
||||
return b, a
|
||||
} else if p2 < 0 {
|
||||
|
||||
@@ -14,7 +14,7 @@ type Effect0 struct {
|
||||
|
||||
// 技能命中计算
|
||||
func (this *Effect0) IsHit(opp *input.Input, skill *info.SkillEntity) {
|
||||
skill.AttackTimeC() //计算命中
|
||||
skill.AttackTimeC(int(opp.GetProp(5, true))) //计算命中
|
||||
}
|
||||
|
||||
// 比如xx技能无效
|
||||
|
||||
@@ -538,11 +538,18 @@ func (f *FightC) enterturn(fattack, sattack BattleActionI) {
|
||||
ret.FAttack.LostHp = uint32(f.First.Damage.IntPart()) //先手方造成血量
|
||||
ret.SAttack.RemainHp = int32(f.Second.CurrentPet.Info.Hp)
|
||||
ret.SAttack.LostHp = uint32(f.Second.Damage.IntPart()) //后手方造成血量
|
||||
ret.FAttack.Prop.Accuracy = 6
|
||||
ret.SAttack.Prop.Accuracy = 6
|
||||
ret.SAttack.Status.Poisoned_1 = 1
|
||||
ret.FAttack.Status.Poisoned_1 = 1
|
||||
//ret.SAttack.Status.Poisoned_1 = 1
|
||||
|
||||
for i := 0; i < 6; i++ { //堆叠属性提升
|
||||
ret.FAttack.Prop[i] = int8(attacker.GetProp(i, true))
|
||||
ret.FAttack.Prop[i] = int8(defender.GetProp(i, true))
|
||||
}
|
||||
for i := 0; i < 20; i++ { //堆叠状态剩余回合
|
||||
ate, _ := attacker.GetStatusEffect(i)
|
||||
ret.FAttack.Status[i] = int8(ate.Duration(0))
|
||||
dte, _ := defender.GetStatusEffect(i)
|
||||
ret.FAttack.Status[i] = int8(dte.Duration(0))
|
||||
}
|
||||
|
||||
f.Broadcast(func(ff *input.Input) {
|
||||
|
||||
ff.Player.SendAttackValue(ret)
|
||||
|
||||
@@ -173,20 +173,20 @@ func CreateBattlePetEntity(info *model.PetInfo, rand *rand.Rand) *BattlePetEntit
|
||||
// value 基础属性值
|
||||
// stat 状态变化值(可正可负)
|
||||
// 返回// 返回计算后的实际属性值,确保结果至少为1
|
||||
func CalculateRealValue(value uint32, stat int) uint32 {
|
||||
func CalculateRealValue(value int, stat int) int {
|
||||
if stat == 0 {
|
||||
if value <= 0 {
|
||||
return 1
|
||||
}
|
||||
return value
|
||||
} else if stat > 0 {
|
||||
r := uint32(float64(value) * (float64(stat+2) / 2.0))
|
||||
r := int(float64(value) * (float64(stat+2) / 2.0))
|
||||
if r <= 0 {
|
||||
return 1
|
||||
}
|
||||
return r
|
||||
} else {
|
||||
r := uint32(float64(value) * (2.0 / float64(2-stat)))
|
||||
r := int(float64(value) * (2.0 / float64(2-stat)))
|
||||
if r <= 0 {
|
||||
return 1
|
||||
}
|
||||
|
||||
@@ -213,7 +213,7 @@ func (a *SkillEntity) GetAccuracy(level int) uint32 {
|
||||
}
|
||||
|
||||
if level > 6 || level == 0 { //强化等级
|
||||
return uint32(CalculateRealValue(uint32(a.Accuracy), level))
|
||||
return uint32(CalculateRealValue((a.Accuracy), level))
|
||||
}
|
||||
var temp float64
|
||||
switch level {
|
||||
|
||||
@@ -88,15 +88,20 @@ func InitPropEffect(id int, t Effect) {
|
||||
}
|
||||
|
||||
// * battle_lv: atk(0), def(1), sp_atk(2), sp_def(3), spd(4), accuracy(5)
|
||||
func (c *Input) GetProp(id int) uint32 {
|
||||
// 是否需要真实提升
|
||||
func (c *Input) GetProp(id int, istue bool) int {
|
||||
//todo 插入获取前
|
||||
|
||||
t, ok := NodeM[id+2000000]
|
||||
if ok {
|
||||
if id < 5 {
|
||||
return info.CalculateRealValue(c.CurrentPet.Info.Prop[id], t.GetMaxStack())
|
||||
if istue {
|
||||
return t.GetMaxStack()
|
||||
}
|
||||
return info.CalculateRealValue(int(c.CurrentPet.Info.Prop[id]), t.GetMaxStack())
|
||||
}
|
||||
|
||||
//命中就直接返回
|
||||
return t.GetMaxStack()
|
||||
}
|
||||
|
||||
//todo 插入获取后函数
|
||||
|
||||
Reference in New Issue
Block a user