diff --git a/logic/controller/fight_base.go b/logic/controller/fight_base.go
index 7738d41d1..751146158 100644
--- a/logic/controller/fight_base.go
+++ b/logic/controller/fight_base.go
@@ -68,7 +68,7 @@ func (h Controller) Capture(data *fight.CatchMonsterInboundInfo, c *player.Playe
// 加载进度
func (h Controller) LoadPercent(data *fight.LoadPercentInboundInfo, c *player.Player) (result *info.LoadPercentOutboundInfo, err errorcode.ErrorCode) {
if c.FightC == nil {
- return nil, errorcode.ErrorCodes.ErrBattleEnded
+ return nil, -1
}
c.FightC.LoadPercent(c, int32(data.Percent))
diff --git a/logic/controller/fight_leitai.go b/logic/controller/fight_leitai.go
index 81a8ed03f..dec5898ac 100644
--- a/logic/controller/fight_leitai.go
+++ b/logic/controller/fight_leitai.go
@@ -23,10 +23,7 @@ func (h Controller) ARENA_SET_OWENR(data *fight.ARENA_SET_OWENR, c *player.Playe
c.Fightinfo.Mode = 0 //取消队列匹配
if atomic.CompareAndSwapUint32(&c.GetSpace().Owner.Flag, 0, 1) {
- c.GetSpace().Owner.UserID = c.GetInfo().UserID //添加用户ID
- c.GetSpace().Owner.Nick = c.GetInfo().Nick
- c.GetSpace().ARENA_Player = c //添加用户
-
+ c.GetSpace().Owner.Set(c)
c.GetSpace().Broadcast(c, 2419, c.GetSpace().Owner)
c.SendPackCmd(2419, c.GetSpace().Owner)
return
@@ -50,21 +47,42 @@ func (h Controller) ARENA_FIGHT_OWENR(data *fight.ARENA_FIGHT_OWENR, c *player.P
if c.Info.UserID == c.GetSpace().Owner.UserID {
return nil, errorcode.ErrorCodes.ErrNoEligiblePokemon
}
+
+ if c.GetSpace().Owner.ARENA_Player == nil {
+ return nil, errorcode.ErrorCodes.ErrSystemError200007
+ }
+
+ if !c.GetSpace().Owner.ARENA_Player.CanFight() {
+ c.GetSpace().Owner.Set(c)
+ c.GetSpace().Broadcast(c, 2419, &c.GetSpace().Owner)
+ c.SendPackCmd(2419, &c.GetSpace().Owner)
+ return
+ }
//原子操作,修改擂台状态
if atomic.CompareAndSwapUint32(&c.GetSpace().Owner.Flag, 1, 2) {
//成功发起擂台挑战后才修改我放状态
c.Fightinfo.Mode = info.BattleMode.SINGLE_MODE
c.Fightinfo.Status = info.BattleMode.FIGHT_ARENA
- _, err = fight.NewFight(c, c.GetSpace().ARENA_Player, func(foi *info.FightOverInfo) { //我方邀请擂主挑战,我方先手
+ _, err = fight.NewFight(c, c.GetSpace().Owner.ARENA_Player, func(foi *info.FightOverInfo) { //我方邀请擂主挑战,我方先手
if foi.Reason != 0 && foi.WinnerId == c.GetInfo().UserID { //异常退出
- c.GetSpace().ARENA_Player = nil
+
c.GetSpace().Owner.Reset()
c.GetSpace().Broadcast(c, 2419, &c.GetSpace().Owner)
c.SendPackCmd(2419, &c.GetSpace().Owner)
+ }
+
+ if foi.Reason == 0 { //异常退出
+
+ if foi.WinnerId == c.GetInfo().UserID {
+ c.Info.MaxArenaWins += 1
+ } else {
+ c.GetSpace().Owner.ARENA_Player.GetInfo().MaxArenaWins += 1
+ }
+
}
//todo 擂主输了,那就直接让他放弃擂台
@@ -75,11 +93,7 @@ func (h Controller) ARENA_FIGHT_OWENR(data *fight.ARENA_FIGHT_OWENR, c *player.P
//c.GetSpace().Broadcast(c, 2419, &c.GetSpace().Owner)
//c.SendPackCmd(2419, &c.GetSpace().Owner)
} else {
- //发起失败,改回1
- // c.GetSpace().Owner.HostWins = 0 //连胜重置
- // c.GetSpace().Owner.UserID = c.GetInfo().UserID //添加用户ID
- // c.GetSpace().Owner.Nick = c.GetInfo().Nick
- // c.GetSpace().ARENA_Player = c //添加用户
+
atomic.StoreUint32(&c.GetSpace().Owner.Flag, 1)
}
@@ -107,9 +121,11 @@ func (h Controller) ARENA_GET_INFO(data *fight.ARENA_GET_INFO, c *player.Player)
// 都需要通过2419包广播更新擂台状态
func (h Controller) ARENA_UPFIGHT(data *fight.ARENA_UPFIGHT, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
//原子操作,修改擂台状态
-
+ if atomic.LoadUint32(&c.GetSpace().Owner.UserID) != c.GetInfo().UserID { //说明已经有人了
+ return nil, errorcode.ErrorCodes.ErrChampionCannotCancel
+ }
if atomic.CompareAndSwapUint32(&c.GetSpace().Owner.UserID, c.GetInfo().UserID, 0) {
- c.GetSpace().ARENA_Player = nil
+
c.GetSpace().Owner.Reset()
c.GetSpace().Broadcast(c, 2419, &c.GetSpace().Owner)
@@ -129,19 +145,11 @@ func (h Controller) ARENA_UPFIGHT(data *fight.ARENA_UPFIGHT, c *player.Player) (
func (h Controller) ARENA_OWENR_ACCE(data *fight.ARENA_OWENR_ACCE, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
s := c.GetSpace()
- if atomic.LoadUint32(&s.Owner.UserID) != c.GetInfo().UserID && c.GetInfo().UserID != atomic.LoadUint32(&s.Owner.ChallengerID) { //说明已经有人了
- return nil, -1
- }
- if c.GetInfo().UserID == atomic.LoadUint32(&s.Owner.UserID) {
- c.Info.MaxArenaWins += 1
- s.Owner.HostWins += 1 //连胜+1
- } else {
- s.Owner.HostWins = 0 //连胜重置
- s.Owner.UserID = c.GetInfo().UserID //添加用户ID
- s.Owner.Nick = c.GetInfo().Nick
- s.ARENA_Player = c //添加用户
+ if atomic.LoadUint32(&c.GetSpace().Owner.UserID) != c.GetInfo().UserID && c.GetInfo().UserID != atomic.LoadUint32(&c.GetSpace().Owner.ChallengerID) { //说明已经有人了
+ return nil, errorcode.ErrorCodes.ErrChampionCannotCancel
}
+ s.Owner.Set(c)
atomic.StoreUint32(&s.Owner.Flag, 1)
diff --git a/logic/controller/fight_pvp_king.go b/logic/controller/fight_pvp_king.go
index 63be84894..b35b02dc4 100644
--- a/logic/controller/fight_pvp_king.go
+++ b/logic/controller/fight_pvp_king.go
@@ -50,7 +50,7 @@ func (h Controller) PET_King(data *fight.PetKingJoinInboundInfo, c *player.Playe
c.Fightinfo.Mode = info.BattleMode.MULTI_MODE
}
err = c.JoinFight(func(p common.PlayerI) bool {
- fight.NewFight(p, c, func(foi *info.FightOverInfo) {
+ _, err = fight.NewFight(p, c, func(foi *info.FightOverInfo) {
if foi.Reason == 0 { //我放获胜
if foi.WinnerId == c.GetInfo().UserID {
c.Info.MonKingWin += 1
@@ -60,7 +60,10 @@ func (h Controller) PET_King(data *fight.PetKingJoinInboundInfo, c *player.Playe
}
}) ///开始对战,房主方以及被邀请方
+ if err > 0 { //说明有报错
+ return false
+ }
return true
})
diff --git a/logic/controller/user.go b/logic/controller/user.go
index 1c401eafe..c213a3a68 100644
--- a/logic/controller/user.go
+++ b/logic/controller/user.go
@@ -36,6 +36,7 @@ func (h Controller) UserMoreInfo(data *user.MoreUserInfoInboundInfo, c *player.P
return ret, 0
}
+// 射击
func (h Controller) Aimat(data *user.AimatInboundInfo, c *player.Player) (result *user.AimatOutboundInfo, err errorcode.ErrorCode) {
result = &user.AimatOutboundInfo{
diff --git a/logic/service/fight/boss/NewSeIdx_36.go b/logic/service/fight/boss/NewSeIdx_36.go
index 731107618..54e2a04e4 100644
--- a/logic/service/fight/boss/NewSeIdx_36.go
+++ b/logic/service/fight/boss/NewSeIdx_36.go
@@ -1,6 +1,7 @@
package effect
import (
+ "blazing/logic/service/fight/action"
"blazing/logic/service/fight/info"
"blazing/logic/service/fight/input"
@@ -15,8 +16,18 @@ type NewSel36 struct {
round int
}
-func (e *NewSel36) Damage_DIV_ex(t *info.DamageZone) bool {
+func (e *NewSel36) Turn_Start(fattack *action.SelectSkillAction, sattack *action.SelectSkillAction) {
e.round++
+ if e.round >= 5 {
+ e.round = 0
+ e.index++
+ if e.index >= len(e.Args()) {
+ e.index = 0
+
+ }
+ }
+}
+func (e *NewSel36) Damage_DIV_ex(t *info.DamageZone) bool {
e.Ctx().Our.AttackValue.State = uint32(e.Args()[e.index])
@@ -32,22 +43,11 @@ func (e *NewSel36) Damage_DIV_ex(t *info.DamageZone) bool {
return true
}
- if e.Args()[e.index] == e.Ctx().SkillEntity.Type {
+ if e.Args()[e.index] != e.Ctx().SkillEntity.Type {
- if e.round >= 5 {
- e.round = 0
- e.index++
- if e.index >= len(e.Args()) {
- e.index = 0
-
- }
- }
-
- return true
+ t.Damage = decimal.NewFromInt(0)
}
- t.Damage = decimal.NewFromInt(0)
-
return true
}
func init() {
diff --git a/logic/service/fight/info/battle.go b/logic/service/fight/info/battle.go
index b49c8e46c..123b9a67c 100644
--- a/logic/service/fight/info/battle.go
+++ b/logic/service/fight/info/battle.go
@@ -94,11 +94,11 @@ type DefaultEndData struct {
type EnumBattleOverReason int
var BattleOverReason = enum.New[struct {
- PlayerOffline EnumBattleOverReason `enum:"1"` //掉线
- PlayerOVerTime EnumBattleOverReason `enum:"2"` //超时
- PlayerCaptureSuccess EnumBattleOverReason `enum:"3"` //捕捉成功
- DefaultEnd EnumBattleOverReason `enum:"4"` //默认结束
- PlayerEscape EnumBattleOverReason `enum:"5"` //逃跑
+ PlayerOffline EnumBattleOverReason `enum:"1"` //掉线
+ PlayerOVerTime EnumBattleOverReason `enum:"2"` //超时
+ NOTwind EnumBattleOverReason `enum:"3"` //打成平手
+ DefaultEnd EnumBattleOverReason `enum:"4"` //默认结束
+ PlayerEscape EnumBattleOverReason `enum:"5"` //逃跑
}]()
// 战斗模式
diff --git a/logic/service/fight/loop.go b/logic/service/fight/loop.go
index b23a47925..d22925a8f 100644
--- a/logic/service/fight/loop.go
+++ b/logic/service/fight/loop.go
@@ -254,7 +254,7 @@ func (f *FightC) handleItemAction(a *action.UseItemAction) {
CatchTime: uint32(f.Opp.CurrentPet.Info.CatchTime),
PetId: uint32(f.Opp.CurrentPet.ID),
}))
- //f.Reason = info.BattleOverReason.PlayerCatch
+ //f.Reason = info.BattleOverReason.PlayerCaptureSuccess
//f.WinnerId = 0 //捕捉成功不算胜利
f.closefight = true
diff --git a/logic/service/player/fight.go b/logic/service/player/fight.go
index 097d14a84..c0804625f 100644
--- a/logic/service/player/fight.go
+++ b/logic/service/player/fight.go
@@ -24,7 +24,7 @@ func (p *Player) JoinFight(fn func(p common.PlayerI) bool) errorcode.ErrorCode {
if v.GetInfo().UserID != p.Info.UserID {
//确认是乱斗模式
- if v.Getfightinfo() == p.Getfightinfo() {
+ if v.Getfightinfo() == p.Getfightinfo() && p.CanFight() {
// p.Fightinfo = nil //先将自身的准备信息置空
// //value.PVPinfo = nil
diff --git a/logic/service/space/arena.go b/logic/service/space/arena.go
index 613864b58..ecfc45b78 100644
--- a/logic/service/space/arena.go
+++ b/logic/service/space/arena.go
@@ -1,7 +1,13 @@
package space
+import (
+ "blazing/logic/service/common"
+ "sync/atomic"
+)
+
type ARENA struct {
- Flag uint32 // 0=清除ArenaInfo(flag为0时其他字段全为空) 1=站上擂台的信息 2=挑战中的信息
+ ARENA_Player common.PlayerI `struc:"skip"`
+ Flag uint32 // 0=清除ArenaInfo(flag为0时其他字段全为空) 1=站上擂台的信息 2=挑战中的信息
UserID uint32
Nick string `struc:"[16]byte"`
HostWins uint32 // 应该是擂台人的连胜数
@@ -16,4 +22,24 @@ func (t *ARENA) Reset() {
t.HostWins = 0
t.ChallengerID = 0
+ t.ARENA_Player = nil
+
+}
+
+func (t *ARENA) Set(c common.PlayerI) bool {
+
+ if c.GetInfo().UserID == atomic.LoadUint32(&t.UserID) {
+
+ t.HostWins += 1 //连胜+1
+
+ } else {
+ t.HostWins = 0 //连胜重置
+ t.UserID = c.GetInfo().UserID //添加用户ID
+ t.Nick = c.GetInfo().Nick
+ t.ARENA_Player = c //添加用户
+ }
+
+ atomic.StoreUint32(&t.Flag, 1)
+
+ return true
}
diff --git a/logic/service/space/in_out.go b/logic/service/space/in_out.go
index 59adaa9ce..8a8a4372b 100644
--- a/logic/service/space/in_out.go
+++ b/logic/service/space/in_out.go
@@ -35,7 +35,6 @@ func (s *Space) Broadcast(c common.PlayerI, cmd uint32, data any) {
func (s *Space) LeaveMap(c common.PlayerI) {
if atomic.CompareAndSwapUint32(&s.Owner.UserID, c.GetInfo().UserID, 0) {
- s.ARENA_Player = nil
s.Owner.Reset()
diff --git a/logic/service/space/space.go b/logic/service/space/space.go
index 17e3d9c42..953ec550e 100644
--- a/logic/service/space/space.go
+++ b/logic/service/space/space.go
@@ -18,9 +18,8 @@ type Space struct {
Super uint32
//SuperValue *int32
//ID uint32 // 地图ID
- Name string //地图名称
- Owner ARENA
- ARENA_Player common.PlayerI
+ Name string //地图名称
+ Owner ARENA
}
// NewSyncMap 创建一个新的玩家同步map
diff --git a/logic/service/user/chat.go b/logic/service/user/chat.go
index 84092d5ea..0519176bc 100644
--- a/logic/service/user/chat.go
+++ b/logic/service/user/chat.go
@@ -68,7 +68,7 @@ type S2CDanceAction struct {
type C2SPEOPLE_TRANSFROM struct {
Head common.TomeeHeader `cmd:"2111" struc:"skip"`
- // Reserve 固定参数(值为 10001)
+ // Reserve uint32// 固定参数(值为 10001)
SuitID uint32 `struc:"uint32,big"`
}
type S2CPEOPLE_TRANSFROM struct {
diff --git a/public/config/bossbuff和特性.xml b/public/config/bossbuff和特性.xml
index 2a88f644f..6d4ce36fd 100644
--- a/public/config/bossbuff和特性.xml
+++ b/public/config/bossbuff和特性.xml
@@ -485,7 +485,7 @@
-