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