diff --git a/logic/service/fight/effect/effect_62.go b/logic/service/fight/effect/effect_62.go index 0a1fa3d6..4beed70c 100644 --- a/logic/service/fight/effect/effect_62.go +++ b/logic/service/fight/effect/effect_62.go @@ -41,13 +41,13 @@ func (this *Effect62) TurnEnd(e *input.Input) { } -func (this *Effect62)SkillUseEnd(*input.Input) { - if this.Hide { //如果还在隐藏,就直接返回 - //return true +func (e *Effect62) SkillUseEnd(opp *input.Input) { + if !e.Hide { //如果还在隐藏,就直接返回 + defer e.NotALive() //失效 + e.Input.Death() //本只死亡 + } - defer func() { //延迟处理 - //this.GetBattle().Effects[this.GetInput().UserID].RemoveEffect(this) //如果生效就移除 - }() + //否则触发秒杀 在对面使用技能后 //return true diff --git a/logic/service/fight/info/BattlePetEntity.go b/logic/service/fight/info/BattlePetEntity.go index 27fc3087..24622005 100644 --- a/logic/service/fight/info/BattlePetEntity.go +++ b/logic/service/fight/info/BattlePetEntity.go @@ -7,58 +7,11 @@ import ( "blazing/modules/blazing/model" "math/rand" "sync" - - "github.com/shopspring/decimal" - "github.com/tnnmigga/enum" ) // 战斗属性类型 type EnumAttrType int -// 精灵 -const Pet_O_Ctx = "PET_O" -const Pet_T_Ctx = "PET_T" - -// 这里获得攻击,防御,特工,特防,速度 -// * battle_lv: atk(0), def(1), sp_atk(2), sp_def(3), spd(4), accuracy(5) -// * battle_attr: 0:hp, 1:atk, 2:def, 3:sp_atk, 4:sp_def, 5:spd -// func (a *BattlePetEntity) Value(tt uint32) uint32 { - -// offsetAtk := unsafe.Offsetof(a.Info.Attack) // c字段的偏移量(通常为4+16=20) -// // 2. 将结构体指针转换为原始内存地址(uintptr) -// baseAddr := uintptr(unsafe.Pointer(&offsetAtk)) -// fmt.Println(*(*uint32)(unsafe.Pointer(&baseAddr))) -// addrA := unsafe.Pointer(baseAddr + 4*uintptr(tt)) //根据0是攻击 -// offsetAtkP := unsafe.Offsetof(a.Prop.Attack) // c字段的偏移量(通常为4+16=20) -// // 2. 将结构体指针转换为原始内存地址(uintptr) -// baseAddrp := uintptr(unsafe.Pointer(&offsetAtkP)) -// fmt.Println(*(*uint32)(unsafe.Pointer(&offsetAtkP))) -// addrB := unsafe.Pointer(baseAddrp + 4*uintptr(tt)) //根据0是攻击 -// fmt.Println(*(*uint32)(addrA)) -// ret := uint32(calculateRealValue(int64(*(*uint32)(addrA)), int(*(*byte)(addrB)))) -// return ret -// } -// func (a *BattlePetEntity) Speed() uint32 { -// return uint32(calculateRealValue(int64(a.Info.Speed), int(a.Prop.Speed))) - -// } -// func (a *BattlePetEntity) Attack() uint32 { -// return uint32(calculateRealValue(int64(a.Info.Attack), int(a.Prop.Attack))) - -// } -// func (a *BattlePetEntity) Defense() uint32 { -// return uint32(calculateRealValue(int64(a.Info.Defence), int(a.Prop.Defence))) - -// } -// func (a *BattlePetEntity) SAttack() uint32 { -// return uint32(calculateRealValue(int64(a.Info.SpecialAttack), int(a.Prop.SpecialAttack))) - -// } -// func (a *BattlePetEntity) SDefense() uint32 { -// return uint32(calculateRealValue(int64(a.Info.SpecialDefence), int(a.Prop.SpecialDefence))) - -// } - // 辅助函数:取整数绝对值(处理负等级) func abs(x int8) int8 { if x < 0 { @@ -77,70 +30,8 @@ type BattlePetEntity struct { //Status StatusDict //精灵的状态 //能力提升属性 //Prop PropDict - NotAlive bool `struc:"skip"` - DamageZone map[EnumCategory]map[EnumsZoneType]map[EnumsZoneType][]float64 // 三维map 伤害类型-》增还是减-》加还是乘-》值 -} - -// 获得指定的+-区 -func (s *BattlePetEntity) GetAddValue(e EnumCategory, c EnumsZoneType) decimal.Decimal { - - t, ok := s.DamageZone[e][c][DamageZone.add] - if ok { - var ttt decimal.Decimal - - for _, v := range t { - t1 := decimal.NewFromFloat(v) - ttt.Add(t1) - } - return ttt - } - return decimal.NewFromFloat(0) -} - -// 获得指定的*/区 -func (s *BattlePetEntity) GetMulValue(e EnumCategory, c EnumsZoneType) decimal.Decimal { - - t, ok := s.DamageZone[e][c][DamageZone.nul] - if ok { - var ttt decimal.Decimal - - for _, v := range t { - t1 := decimal.NewFromFloat(v) - ttt.Mul(t1) - } - return ttt - } - - return decimal.NewFromFloat(0) - -} - -// 设置指定的值 -// 三维map 伤害类型-》增还是减-》加还是乘-》值 -func (s *BattlePetEntity) PutDamageZone(e EnumCategory, dtype EnumsZoneType, value float64, ftype EnumsZoneType) { - s.DamageZone[e][dtype][ftype] = append(s.DamageZone[e][dtype][ftype], value) - // switch dtype { //判断伤害节点段 - - // //case Zone.Power: //特判乘算区的乘运算 - - // default: - // switch ftype { //判断设置哪个算区 - - // case true: // 乘算区 - // old := s.GetAddValue(e) - - // new := decimal.NewFromFloat(value) - // s.DamageZone[dtype] = float64(old.Add(new).IntPart()) - - // case false: // 加算区 - // old := s.GetMulValue(e) - - // new := decimal.NewFromFloat(value) - // s.DamageZone[dtype] = float64(old.Add(new).IntPart()) - - // } - // } - + NotAlive bool `struc:"skip"` + //DamageZone map[EnumCategory]map[EnumsZoneType]map[EnumsZoneType][]float64 // 三维map 伤害类型-》增还是减-》加还是乘-》值 } // 创建精灵实例 @@ -153,18 +44,7 @@ func CreateBattlePetEntity(info *model.PetInfo, rand *rand.Rand) *BattlePetEntit //todo 技能信息应该每回合进行深拷贝,保证每次的技能效果都是不一样的 ret.Skills[i] = CreateSkill(&info.SkillList[i], rand, ret) } - ret.DamageZone = make(map[EnumCategory]map[EnumsZoneType]map[EnumsZoneType][]float64) //初始化第一层类型 - for _, v := range enum.Values[EnumCategory](Category) { - ret.DamageZone[v] = make(map[EnumsZoneType]map[EnumsZoneType][]float64) //初始化第二层是否是加还是减 - for _, t := range enum.Values[EnumsZoneType](DamageC) { - ret.DamageZone[v][t] = make(map[EnumsZoneType][]float64) //初始化第三层时乘还是加 - for _, s := range enum.Values[EnumsZoneType](DamageC) { - ret.DamageZone[v][t][s] = make([]float64, 0) //初始化第四层 数组 - - } - } - } return ret } @@ -203,7 +83,6 @@ func (u *BattlePetEntity) Type() *element.ElementCombination { } - //todo 待实现获取精灵的类型 - return ff } + diff --git a/logic/service/fight/info/BattleSkillEntity.go b/logic/service/fight/info/BattleSkillEntity.go index a7f1407b..9bf6b283 100644 --- a/logic/service/fight/info/BattleSkillEntity.go +++ b/logic/service/fight/info/BattleSkillEntity.go @@ -249,8 +249,7 @@ func (s *SkillEntity) CalculatePower(deftype *BattlePetEntity) decimal.Decimal { // 2. 计算威力因子 (基础威力 + 加算) * 乘算 //powerAdd := decimal.NewFromFloat(s.GetAddValue(EnumCategory., true)) //威力加算区 - powerAdd_all := s.Pet.GetAddValue(Category.ALL, DamageC.boost) - powerMul_all := s.Pet.GetMulValue(Category.ALL, DamageC.boost) + var ( powerAdd_p decimal.Decimal //威力加算 @@ -262,15 +261,13 @@ func (s *SkillEntity) CalculatePower(deftype *BattlePetEntity) decimal.Decimal { switch s.Category() { //判断技能类型 case Category.PHYSICAL: - powerAdd_p = powerAdd_all.Add(s.Pet.GetAddValue(Category.PHYSICAL, DamageC.boost)) - powerMul_p = powerMul_all.Add(s.Pet.GetMulValue(Category.PHYSICAL, DamageC.boost)) + attackDec = decimal.NewFromInt(int64(s.Pet.Info.Prop[0])) defenseDec = decimal.NewFromInt(int64(s.Pet.Info.Prop[1])) //damageReduction = decimal.NewFromFloat(s.DamageZone[DamageMultiplierZoneEnum.ATK_RESISTANCE]) case Category.SPECIAL: - powerAdd_p = powerAdd_all.Add(s.Pet.GetAddValue(Category.SPECIAL, DamageC.boost)) - powerMul_p = powerMul_all.Add(s.Pet.GetMulValue(Category.SPECIAL, DamageC.boost)) + attackDec = decimal.NewFromInt(int64(s.Pet.Info.Prop[2])) defenseDec = decimal.NewFromInt(int64(s.Pet.Info.Prop[3])) //damageReduction = decimal.NewFromFloat(s.DamageZone[DamageMultiplierZoneEnum.SP_ATK_RESISTANCE]) diff --git a/logic/service/fight/input/input.go b/logic/service/fight/input/input.go index fd8f8177..6282439e 100644 --- a/logic/service/fight/input/input.go +++ b/logic/service/fight/input/input.go @@ -57,6 +57,14 @@ func (i *Input) GetPet(id uint32) (ii *info.BattlePetEntity, Reason info.ChangeP } +func (u *Input) Death() { + + + u.CurrentPet.Info.Hp = 0 + + //todo 待实现死亡effet + +} // GetStatusBonus 获取最高的状态倍率 // 遍历状态数组,返回存在的状态中最高的倍率(无状态则返回1.0) func (i *Input) GetStatusBonus() float64 {