feat(fight): 实现玩家对战邀请功能及PVP模式处理
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/tnnmigga/enum"
|
||||
)
|
||||
|
||||
type Player struct {
|
||||
@@ -21,6 +22,7 @@ type Player struct {
|
||||
StopChan chan struct{} //停止刷怪协程
|
||||
IsFighting bool
|
||||
context.Context
|
||||
Playerinvite uint32 //当前邀请的玩家ID
|
||||
}
|
||||
|
||||
// PlayerOption 定义配置 Player 的函数类型
|
||||
@@ -129,3 +131,40 @@ func (lw *Player) CompleteLogin() {
|
||||
close(lw.loginChan) // 关闭通道以通知所有等待者
|
||||
}
|
||||
}
|
||||
|
||||
// 战斗模式
|
||||
type EnumBattleMode int
|
||||
|
||||
var BattleMode_PVP = enum.New[struct {
|
||||
PVP_1V1 EnumBattleMode `enum:"1"`
|
||||
PVP_6V6 EnumBattleMode `enum:"2"`
|
||||
}]()
|
||||
var Playerinvitemap map[uint32][]Playerinvite = make(map[uint32][]Playerinvite) //玩家邀请信息 ,比如一个玩家被多人邀请对战
|
||||
|
||||
type Playerinvite struct { //挂载到[]Playerinvite上? 被邀请者->邀请者
|
||||
InviteID uint32 // 邀请者
|
||||
InviteTime EnumBattleMode //游戏模式
|
||||
}
|
||||
|
||||
// 邀请玩家加入战斗 邀请者,被邀请者,邀请模式
|
||||
func (lw *Player) InvitePlayerToBattle(target int64, mode EnumBattleMode) {
|
||||
t, ok := Playerinvitemap[uint32(target)] //被邀请者是否被邀请过
|
||||
if ok { //说明存在被邀请
|
||||
t = append(t, Playerinvite{uint32(lw.UserID), mode})
|
||||
Playerinvitemap[uint32(target)] = t
|
||||
} else {
|
||||
Playerinvitemap[uint32(target)] = []Playerinvite{{uint32(lw.UserID), mode}}
|
||||
}
|
||||
|
||||
lw.Playerinvite = uint32(target)
|
||||
}
|
||||
|
||||
// 取消对战邀请
|
||||
func (lw *Player) CancelBattle() {
|
||||
|
||||
if lw.Playerinvite == 0 {
|
||||
return
|
||||
}
|
||||
delete(Playerinvitemap, uint32(lw.Playerinvite)) //删除玩家邀请信息
|
||||
lw.Playerinvite = 0
|
||||
}
|
||||
|
||||
@@ -68,3 +68,11 @@ func (h Controller) OnReadyToFight(data *fight.ReadyToFightInboundInfo, c *entit
|
||||
c.SendPack(t1.Pack(&rett))
|
||||
return nil, -1
|
||||
}
|
||||
|
||||
/**
|
||||
* 接收战斗或者取消战斗的包
|
||||
*/
|
||||
func (h Controller) OnPlayerHandleFightInvite(data *fight.HandleFightInviteInboundInfo, c *entity.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
||||
|
||||
return nil, -1
|
||||
}
|
||||
|
||||
@@ -8,9 +8,11 @@ var BattleMode_PVP = enum.New[struct {
|
||||
PVP_1V1 EnumBattleMode `enum:"1"`
|
||||
PVP_6V6 EnumBattleMode `enum:"2"`
|
||||
}]()
|
||||
var Playerinvitemap map[uint32][]Playerinvite //玩家邀请信息 ,比如一个玩家被多人邀请对战
|
||||
var Playerinvitemap map[uint32][]Playerinvite = make(map[uint32][]Playerinvite) //玩家邀请信息 ,比如一个玩家被多人邀请对战
|
||||
|
||||
type Playerinvite struct { //挂载到[]Playerinvite上? 被邀请者->邀请者
|
||||
InviteID uint32 // 邀请者
|
||||
InviteTime EnumBattleMode //游戏模式
|
||||
}
|
||||
|
||||
|
||||
|
||||
19
logic/service/fight/pvp.go
Normal file
19
logic/service/fight/pvp.go
Normal file
@@ -0,0 +1,19 @@
|
||||
package fight
|
||||
|
||||
import "blazing/common/socket/handler"
|
||||
|
||||
// HandleFightInviteInboundInfo 处理战斗邀请的入站消息
|
||||
// 回空包就行
|
||||
type HandleFightInviteInboundInfo struct {
|
||||
Head handler.TomeeHeader `cmd:"2403" struc:"[0]pad"`
|
||||
UserID uint32 `json:"userId" codec:"userId,uint"` // 邀请我对战人的userid
|
||||
Flag uint32 `json:"flag" codec:"flag,uint"` // 1为同意对战 0为取消对战
|
||||
Mode uint32 `json:"mode" codec:"mode,uint"` // 战斗类型 1 = 1v1 2 = 6v6
|
||||
}
|
||||
|
||||
// 2502的回复包 PVP邀请消息
|
||||
type NoteHandleFightInviteOutboundInfo struct {
|
||||
UserID uint32
|
||||
Nickname string `struc:"[16]byte"` // 固定长度16字节
|
||||
Result uint32 // 0=拒绝 1=同意 2=在线超6小时 3=无出战精灵 4=不在线
|
||||
}
|
||||
Reference in New Issue
Block a user