2025-11-14 23:09:16 +08:00
|
|
|
package controller
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"blazing/common/socket/errorcode"
|
2026-03-04 22:47:21 +08:00
|
|
|
"blazing/modules/player/model"
|
2025-11-18 22:16:55 +00:00
|
|
|
"sync/atomic"
|
2025-11-15 22:17:43 +00:00
|
|
|
|
2025-11-19 16:11:02 +08:00
|
|
|
"blazing/logic/service/common"
|
2025-11-14 23:09:16 +08:00
|
|
|
"blazing/logic/service/fight"
|
|
|
|
|
"blazing/logic/service/fight/info"
|
|
|
|
|
"blazing/logic/service/player"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 接收战斗或者取消战斗的包
|
2026-04-05 07:24:36 +08:00
|
|
|
func (h Controller) OnPlayerHandleFightInvite(data *HandleFightInviteInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
2026-04-02 23:05:18 +08:00
|
|
|
if c.IsArenaPVPLocked() {
|
2025-11-21 02:40:27 +08:00
|
|
|
return nil, errorcode.ErrorCodes.ErrSystemError
|
|
|
|
|
}
|
|
|
|
|
if c.GetSpace().Owner.UserID == data.UserID {
|
|
|
|
|
return nil, errorcode.ErrorCodes.ErrSystemError
|
|
|
|
|
}
|
|
|
|
|
if !atomic.CompareAndSwapUint32(&c.Fightinfo.Mode, 0, data.Mode) { //邀请前提是自己没在战斗
|
2025-11-18 23:41:31 +00:00
|
|
|
return nil, errorcode.ErrorCodes.ErrInBattle
|
|
|
|
|
|
2025-11-17 17:36:24 +00:00
|
|
|
}
|
2025-11-21 02:40:27 +08:00
|
|
|
|
2026-02-25 16:18:10 +08:00
|
|
|
r := c.CanFight()
|
|
|
|
|
if c.CanFight() != 0 {
|
|
|
|
|
return nil, r
|
2025-12-01 23:31:48 +08:00
|
|
|
}
|
|
|
|
|
|
2025-11-21 02:40:27 +08:00
|
|
|
//c.Fightinfo.Status = info.BattleMode.FIGHT_WITH_NPC
|
|
|
|
|
|
2025-11-20 15:19:13 +08:00
|
|
|
resp := &info.S2C_NOTE_HANDLE_FIGHT_INVITE{
|
|
|
|
|
UserID: c.Info.UserID,
|
|
|
|
|
Nick: c.Info.Nick,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, v := range c.HavePVPinfo {
|
2025-11-21 02:40:27 +08:00
|
|
|
if v.GetInfo().UserID == data.UserID && v.Getfightinfo().Mode == data.Mode {
|
2026-01-03 01:35:32 +08:00
|
|
|
|
2025-11-20 15:19:13 +08:00
|
|
|
resp.Result = data.Flag
|
2026-01-03 01:35:32 +08:00
|
|
|
if resp.Result == 0 {
|
|
|
|
|
|
|
|
|
|
v.SendPackCmd(2502, &resp)
|
|
|
|
|
atomic.StoreUint32(&c.Fightinfo.Mode, 0)
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|
}
|
2025-11-20 15:19:13 +08:00
|
|
|
// 检查邀请者的邀请是否有效(对方已取消邀请)
|
|
|
|
|
if v.Getfightinfo().Status == 0 {
|
|
|
|
|
resp.Result = 4 // 邀请已取消
|
|
|
|
|
v.SendPackCmd(2502, &resp)
|
2025-11-21 02:40:27 +08:00
|
|
|
atomic.StoreUint32(&c.Fightinfo.Mode, 0)
|
2025-11-20 15:19:13 +08:00
|
|
|
return
|
|
|
|
|
}
|
2026-03-24 01:38:02 +08:00
|
|
|
|
|
|
|
|
_, err = fight.NewFight(v, c, v.GetInfo().PetList, c.GetInfo().PetList, func(foi model.FightOverInfo) {
|
2025-11-20 15:19:13 +08:00
|
|
|
|
2026-02-07 00:18:14 +08:00
|
|
|
//println("好友对战测试", foi.Reason)
|
|
|
|
|
|
2025-11-20 15:19:13 +08:00
|
|
|
})
|
2025-11-16 20:30:17 +00:00
|
|
|
|
2025-11-20 15:19:13 +08:00
|
|
|
if err <= 0 { //成功发起对战
|
|
|
|
|
c.HavePVPinfo = make([]common.PlayerI, 0)
|
|
|
|
|
return
|
|
|
|
|
} else {
|
|
|
|
|
resp.Result = 3
|
|
|
|
|
v.SendPackCmd(2502, &resp)
|
2025-11-21 02:40:27 +08:00
|
|
|
atomic.StoreUint32(&c.Fightinfo.Mode, 0)
|
2025-11-20 15:19:13 +08:00
|
|
|
return
|
|
|
|
|
}
|
2025-11-15 23:02:46 +00:00
|
|
|
|
2025-11-20 15:19:13 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
atomic.StoreUint32(&c.Fightinfo.Status, 0)
|
2025-11-19 16:11:02 +08:00
|
|
|
return
|
2025-11-14 23:09:16 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 邀请其他人进行战斗
|
2026-04-05 07:24:36 +08:00
|
|
|
func (h Controller) OnPlayerInviteOtherFight(data *InviteToFightInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
2026-04-02 23:05:18 +08:00
|
|
|
if c.IsArenaPVPLocked() {
|
2025-11-21 02:40:27 +08:00
|
|
|
return nil, errorcode.ErrorCodes.ErrSystemError
|
|
|
|
|
}
|
|
|
|
|
if c.GetSpace().Owner.ChallengerID == c.Info.UserID {
|
|
|
|
|
return nil, errorcode.ErrorCodes.ErrSystemError
|
|
|
|
|
}
|
|
|
|
|
if c.GetSpace().Owner.UserID == data.UserID {
|
|
|
|
|
return nil, errorcode.ErrorCodes.ErrSystemError
|
|
|
|
|
}
|
2025-11-20 15:19:13 +08:00
|
|
|
// c.Fightinfo.PlayerID = data.UserID
|
2025-11-18 23:41:31 +00:00
|
|
|
c.Fightinfo.Mode = data.Mode
|
2025-11-20 05:57:29 +08:00
|
|
|
c.Fightinfo.Status = 1
|
2025-11-20 15:19:13 +08:00
|
|
|
// c.Fightinfo.Type = 0
|
|
|
|
|
|
|
|
|
|
v, ok := c.GetSpace().User.Load(data.UserID)
|
2025-11-14 23:09:16 +08:00
|
|
|
|
2025-11-20 15:19:13 +08:00
|
|
|
if ok {
|
|
|
|
|
v.InvitePlayer(c)
|
|
|
|
|
|
|
|
|
|
}
|
2025-11-14 23:09:16 +08:00
|
|
|
return nil, 0
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-18 23:41:31 +00:00
|
|
|
// 取消队列
|
2026-04-05 07:24:36 +08:00
|
|
|
func (h Controller) OnPlayerCanceledOtherInviteFight(data *InviteFightCancelInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
2025-11-21 02:40:27 +08:00
|
|
|
atomic.StoreUint32(&c.Fightinfo.Mode, 0) //设置状态为0
|
2025-11-20 15:19:13 +08:00
|
|
|
return
|
2025-11-14 23:09:16 +08:00
|
|
|
}
|