Files
bl/logic/service/player/fight.go

110 lines
2.3 KiB
Go

package player
import (
"blazing/logic/service/common"
"blazing/logic/service/fight/info"
)
// 邀请玩家加入战斗 邀请者,被邀请者,邀请模式
func (lw *Player) InvitePlayerToBattle(pinfo *info.PVPinfo) {
lw.PVPinfo = pinfo
Mainplayer.Range(func(key uint32, value *Player) bool {
if key == uint32(pinfo.PlayerID) {
value.HavePVPinfo = append([]*Player{lw}, value.HavePVPinfo...)
t1 := NewTomeeHeader(2501, value.Info.UserID)
t := info.NoteInviteToFightOutboundInfo{
UserID: lw.Info.UserID,
Nick: lw.Info.Nick,
Mode: pinfo.Mode,
}
value.SendPack(t1.Pack(&t))
return false
}
return true
})
}
// 取消对战邀请
func (lw *Player) CancelBattle() {
if lw.PVPinfo == nil {
return
}
Mainplayer.Range(func(key uint32, value *Player) bool {
if key == uint32(lw.PVPinfo.PlayerID) {
for idx, v := range value.HavePVPinfo {
if v != nil && v.GetInfo().UserID == lw.PVPinfo.PlayerID {
value.HavePVPinfo = append(value.HavePVPinfo[:idx], value.HavePVPinfo[idx+1:]...)
}
}
return false
}
return true
})
lw.PVPinfo = nil
}
func (p *Player) SendLoadPercent(b info.LoadPercentOutboundInfo) {
t1 := NewTomeeHeader(2441, p.Info.UserID)
p.SendPack(t1.Pack(&b)) //准备包由各自发,因为协议不一样
}
// 同意对战
func (lw *Player) AgreeBattle(userid, flag uint32, mode info.EnumBattleMode) (bool, common.PlayerI) {
defer func(p *Player) {
p.HavePVPinfo = make([]*Player, 0)
}(lw) //删除对方的邀请信息
for _, v := range lw.HavePVPinfo {
if v == nil || v.Info.UserID != userid || v.PVPinfo == nil {
continue
}
t1 := NewTomeeHeader(2502, v.Info.UserID)
ret := &info.S2C_NOTE_HANDLE_FIGHT_INVITE{
UserID: lw.Info.UserID,
Nick: lw.Info.Nick,
}
if flag == 0 { //拒绝对战
v.SendPack(t1.Pack(ret))
return false, nil
}
if !lw.IsLogin { //玩家未登录
ret.Result = 4
v.SendPack(t1.Pack(ret))
return false, nil
}
if v.Info.UserID == userid && v.PVPinfo.Mode == mode { //成功找到,同意对战
if lw.CanFight() &&v.CanFight(){
ret.Result = 1
v.SendPack(t1.Pack(ret))
return true, v
} else {
ret.Result = 3
v.SendPack(t1.Pack(ret))
return false, nil
}
}
return false, nil
} //如果对方掉线
return false, nil
}