fix(fight): 战斗修改
This commit is contained in:
@@ -45,9 +45,9 @@ func Geteffect(etype EnumEffectType, id int) Effect {
|
||||
|
||||
// * battle_lv: atk(0), def(1), sp_atk(2), sp_def(3), spd(4), accuracy(5)
|
||||
// 是否需要真实提升
|
||||
func (c *Input) GetProp(id int, istue bool) int {
|
||||
func (our *Input) GetProp(id int, istue bool) int {
|
||||
// 获取基础属性值
|
||||
baseValue := int(c.AttackValue.Prop[id])
|
||||
baseValue := int(our.AttackValue.Prop[id])
|
||||
|
||||
// 命中情况直接返回基础值(优先判断)
|
||||
if id >= 5 {
|
||||
@@ -60,7 +60,7 @@ func (c *Input) GetProp(id int, istue bool) int {
|
||||
}
|
||||
|
||||
// 计算实际值(这里可以插入后续优化的函数调用)
|
||||
realValue := info.CalculateRealValue(int(c.CurrentPet.Info.Prop[id]), baseValue)
|
||||
realValue := info.CalculateRealValue(int(our.CurrentPet.Info.Prop[id]), baseValue)
|
||||
|
||||
// todo: 插入获取后处理函数,例如:
|
||||
// realValue = postProcessValue(realValue, id, c)
|
||||
@@ -69,11 +69,11 @@ func (c *Input) GetProp(id int, istue bool) int {
|
||||
|
||||
}
|
||||
|
||||
func (c *Input) GetEffect(etype EnumEffectType, id int) Effect {
|
||||
func (our *Input) GetEffect(etype EnumEffectType, id int) Effect {
|
||||
var ret []Effect
|
||||
|
||||
eid := id + int(etype)
|
||||
for _, v := range c.Effects {
|
||||
for _, v := range our.Effects {
|
||||
if v.ID() == eid && v.Alive() {
|
||||
ret = append(ret, v)
|
||||
}
|
||||
@@ -84,16 +84,16 @@ func (c *Input) GetEffect(etype EnumEffectType, id int) Effect {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (c *Input) StatEffect_Exist(id int) bool {
|
||||
t := c.GetEffect(EffectType.Status, id)
|
||||
func (our *Input) StatEffect_Exist(id int) bool {
|
||||
t := our.GetEffect(EffectType.Status, id)
|
||||
if t == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
return t.Alive()
|
||||
}
|
||||
func (c *Input) StatEffect_Exist_all() bool {
|
||||
for _, v := range c.Effects {
|
||||
func (our *Input) StatEffect_Exist_all() bool {
|
||||
for _, v := range our.Effects {
|
||||
if v.ID() >= int(EffectType.Status) && v.ID() < int(EffectType.Sub) && v.Alive() {
|
||||
return true
|
||||
}
|
||||
@@ -102,10 +102,10 @@ func (c *Input) StatEffect_Exist_all() bool {
|
||||
|
||||
return false
|
||||
}
|
||||
func (c *Input) GetCurrAttr(id int) *model.PetInfo {
|
||||
func (our *Input) GetCurrAttr(id int) *model.PetInfo {
|
||||
|
||||
//todo 获取前GetEffect
|
||||
return c.CurrentPet.Info
|
||||
return our.CurrentPet.Info
|
||||
|
||||
//todo 获取后GetEffect
|
||||
}
|
||||
@@ -124,23 +124,23 @@ func equalInts(a, b []int) bool {
|
||||
}
|
||||
return true
|
||||
}
|
||||
func (c *Input) AddEffects(e ...Effect) {
|
||||
func (our *Input) AddEffects(e ...Effect) {
|
||||
|
||||
for _, v := range e {
|
||||
|
||||
// v.Alive()
|
||||
c.AddEffect(v)
|
||||
our.AddEffect(v)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
func (c *Input) AddEffect(e Effect) {
|
||||
func (our *Input) AddEffect(e Effect) {
|
||||
e.Alive(true) //添加后默认激活
|
||||
//todo 免疫
|
||||
//TODO 先激活
|
||||
fmt.Println("产生回合数", e.ID(), e.Duration())
|
||||
// 如果已有同 ID 的效果,尝试叠加
|
||||
for _, v := range c.Effects {
|
||||
for _, v := range our.Effects {
|
||||
if v == e {
|
||||
return //完全相同,跳过执行
|
||||
}
|
||||
@@ -173,18 +173,20 @@ func (c *Input) AddEffect(e Effect) {
|
||||
}
|
||||
//无限叠加,比如能力提升类buff
|
||||
// 如果没有同 ID 的效果,直接添加
|
||||
c.Effects = append(c.Effects, e)
|
||||
our.Effects = append(our.Effects, e)
|
||||
|
||||
}
|
||||
|
||||
// ForEachEffectBool 遍历所有 Effect,执行“无参数、返回 bool”的方法
|
||||
// 参数 fn:接收单个 Effect,返回 bool(如 func(e Effect) bool { return e.OnBattleStart() })
|
||||
// 返回值:所有 Effect 的方法返回值列表
|
||||
func (c *Input) Exec(fn func(Effect) bool) bool {
|
||||
func (our *Input) Exec(fn func(Effect) bool) bool {
|
||||
result := true
|
||||
for _, value := range c.Effects {
|
||||
for _, value := range our.Effects {
|
||||
if value.Alive() {
|
||||
|
||||
value.Ctx().Our = our
|
||||
value.Ctx().Opp = our.Opp
|
||||
value.Ctx().DamageZone = &info.DamageZone{}
|
||||
if !fn(value) { //存在false,但是仍然要向下执行
|
||||
result = false //如果是false,说明存在阻止向下执行的effect,比如免疫能力提升效果
|
||||
}
|
||||
@@ -195,10 +197,13 @@ func (c *Input) Exec(fn func(Effect) bool) bool {
|
||||
|
||||
return result
|
||||
}
|
||||
func (c *Input) ExecCace(fn func(Effect) bool) bool {
|
||||
func (our *Input) ExecCace(fn func(Effect) bool) bool {
|
||||
result := true
|
||||
for _, value := range c.EffectCache {
|
||||
|
||||
for _, value := range our.EffectCache {
|
||||
value.Ctx().Our = our
|
||||
value.Ctx().Opp = our.Opp
|
||||
value.Ctx().DamageZone = &info.DamageZone{}
|
||||
if !fn(value) { //存在false,但是仍然要向下执行
|
||||
result = false //如果是false,说明存在阻止向下执行的effect,比如免疫能力提升效果
|
||||
}
|
||||
@@ -209,8 +214,8 @@ func (c *Input) ExecCace(fn func(Effect) bool) bool {
|
||||
}
|
||||
|
||||
// 消除回合类效果 efftype 输入是消对方的还是自己的,false是自己,true是对方
|
||||
func (c *Input) CancelTurn() {
|
||||
for _, value := range c.Effects {
|
||||
func (our *Input) CancelTurn() {
|
||||
for _, value := range our.Effects {
|
||||
if value.Duration() > 0 { //false是自身,true是对方,反转后为真就是自己的
|
||||
//slice = append(slice[:i], slice[i+1:]...)
|
||||
value.Alive(false)
|
||||
@@ -221,13 +226,13 @@ func (c *Input) CancelTurn() {
|
||||
}
|
||||
|
||||
// 消除全部
|
||||
func (c *Input) CancelAll(in *Input) {
|
||||
if in == c { //消除自身
|
||||
c.Effects = make([]Effect, 0)
|
||||
func (our *Input) CancelAll(in *Input) {
|
||||
if in == our { //消除自身
|
||||
our.Effects = make([]Effect, 0)
|
||||
return
|
||||
}
|
||||
|
||||
for _, value := range c.Effects {
|
||||
for _, value := range our.Effects {
|
||||
if value.GetInput() == in { //false是自身,true是对方,反转后为真就是自己的
|
||||
//slice = append(slice[:i], slice[i+1:]...)
|
||||
value.Alive(false)
|
||||
|
||||
Reference in New Issue
Block a user