feat(fight): 实现玩家对战邀请功能及PVP模式处理

This commit is contained in:
1
2025-08-27 05:10:10 +00:00
parent 17f253efcb
commit a2fe2515d2
4 changed files with 69 additions and 1 deletions

View File

@@ -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
}