Exemplo n.º 1
0
        void SendNotInArenaTeamPacket(ArenaTypes type)
        {
            ArenaError arenaError = new ArenaError();

            arenaError.ErrorType = ArenaErrorType.NoTeam;
            arenaError.TeamSize  = (byte)type;                               // team type (2=2v2, 3=3v3, 5=5v5), can be used for custom types...
            SendPacket(arenaError);
        }
Exemplo n.º 2
0
        public BattlegroundQueueTypeId BGQueueTypeId(BattlegroundTypeId bgTypeId, ArenaTypes arenaType)
        {
            switch (bgTypeId)
            {
            case BattlegroundTypeId.AB:
                return(BattlegroundQueueTypeId.AB);

            case BattlegroundTypeId.AV:
                return(BattlegroundQueueTypeId.AV);

            case BattlegroundTypeId.EY:
                return(BattlegroundQueueTypeId.EY);

            case BattlegroundTypeId.IC:
                return(BattlegroundQueueTypeId.IC);

            case BattlegroundTypeId.TP:
                return(BattlegroundQueueTypeId.TP);

            case BattlegroundTypeId.BFG:
                return(BattlegroundQueueTypeId.BFG);

            case BattlegroundTypeId.RB:
                return(BattlegroundQueueTypeId.RB);

            case BattlegroundTypeId.SA:
                return(BattlegroundQueueTypeId.SA);

            case BattlegroundTypeId.WS:
                return(BattlegroundQueueTypeId.WS);

            case BattlegroundTypeId.AA:
            case BattlegroundTypeId.BE:
            case BattlegroundTypeId.DS:
            case BattlegroundTypeId.NA:
            case BattlegroundTypeId.RL:
            case BattlegroundTypeId.RV:
                switch (arenaType)
                {
                case ArenaTypes.Team2v2:
                    return(BattlegroundQueueTypeId.Arena2v2);

                case ArenaTypes.Team3v3:
                    return(BattlegroundQueueTypeId.Arena3v3);

                case ArenaTypes.Team5v5:
                    return(BattlegroundQueueTypeId.Arena5v5);

                default:
                    return(BattlegroundQueueTypeId.None);
                }

            default:
                return(BattlegroundQueueTypeId.None);
            }
        }
Exemplo n.º 3
0
        public void ScheduleQueueUpdate(uint arenaMatchmakerRating, ArenaTypes arenaType, BattlegroundQueueTypeId bgQueueTypeId, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id)
        {
            //we will use only 1 number created of bgTypeId and bracket_id
            ulong scheduleId = ((ulong)arenaMatchmakerRating << 32) | ((uint)arenaType << 24) | ((uint)bgQueueTypeId << 16) | ((uint)bgTypeId << 8) | (uint)bracket_id;

            if (!m_QueueUpdateScheduler.Contains(scheduleId))
            {
                m_QueueUpdateScheduler.Add(scheduleId);
            }
        }
Exemplo n.º 4
0
        // create a new Battleground that will really be used to play
        public Battleground CreateNewBattleground(BattlegroundTypeId originalBgTypeId, PvpDifficultyRecord bracketEntry, ArenaTypes arenaType, bool isRated)
        {
            BattlegroundTypeId bgTypeId = GetRandomBG(originalBgTypeId);

            // get the template BG
            Battleground bg_template = GetBattlegroundTemplate(bgTypeId);

            if (bg_template == null)
            {
                Log.outError(LogFilter.Battleground, "Battleground: CreateNewBattleground - bg template not found for {0}", bgTypeId);
                return(null);
            }

            if (bgTypeId == BattlegroundTypeId.RB || bgTypeId == BattlegroundTypeId.AA)
            {
                return(null);
            }

            // create a copy of the BG template
            Battleground bg = bg_template.GetCopy();

            bool isRandom = bgTypeId != originalBgTypeId && !bg.isArena();

            bg.SetBracket(bracketEntry);
            bg.SetInstanceID(Global.MapMgr.GenerateInstanceId());
            bg.SetClientInstanceID(CreateClientVisibleInstanceId(isRandom ? BattlegroundTypeId.RB : bgTypeId, bracketEntry.GetBracketId()));
            bg.Reset();                                // reset the new bg (set status to status_wait_queue from status_none)
            bg.SetStatus(BattlegroundStatus.WaitJoin); // start the joining of the bg
            bg.SetArenaType(arenaType);
            bg.SetTypeID(originalBgTypeId);
            bg.SetRandomTypeID(bgTypeId);
            bg.SetRated(isRated);
            bg.SetRandom(isRandom);
            bg.SetQueueId((ulong)bgTypeId | 0x1F10000000000000);

            // Set up correct min/max player counts for scoreboards
            if (bg.isArena())
            {
                uint maxPlayersPerTeam = 0;
                switch (arenaType)
                {
                case ArenaTypes.Team2v2:
                    maxPlayersPerTeam = 2;
                    break;

                case ArenaTypes.Team3v3:
                    maxPlayersPerTeam = 3;
                    break;

                case ArenaTypes.Team5v5:
                    maxPlayersPerTeam = 5;
                    break;
                }

                bg.SetMaxPlayersPerTeam(maxPlayersPerTeam);
                bg.SetMaxPlayers(maxPlayersPerTeam * 2);
            }

            return(bg);
        }
Exemplo n.º 5
0
 public void BuildBattlegroundStatusFailed(out BattlefieldStatusFailed battlefieldStatus, Battleground bg, Player pPlayer, uint ticketId, ArenaTypes arenaType, GroupJoinBattlegroundResult result, ObjectGuid errorGuid = default(ObjectGuid))
 {
     battlefieldStatus = new BattlefieldStatusFailed();
     battlefieldStatus.Ticket.RequesterGuid = pPlayer.GetGUID();
     battlefieldStatus.Ticket.Id            = ticketId;
     battlefieldStatus.Ticket.Type          = RideType.Battlegrounds;
     battlefieldStatus.Ticket.Time          = (int)pPlayer.GetBattlegroundQueueJoinTime(BGQueueTypeId(bg.GetTypeID(), arenaType));
     battlefieldStatus.QueueID = bg.GetQueueId();
     battlefieldStatus.Reason  = (int)result;
     if (!errorGuid.IsEmpty() && (result == GroupJoinBattlegroundResult.NotInBattleground || result == GroupJoinBattlegroundResult.JoinTimedOut))
     {
         battlefieldStatus.ClientID = errorGuid;
     }
 }
Exemplo n.º 6
0
 public void BuildBattlegroundStatusQueued(out BattlefieldStatusQueued battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, uint avgWaitTime, ArenaTypes arenaType, bool asGroup)
 {
     battlefieldStatus = new BattlefieldStatusQueued();
     BuildBattlegroundStatusHeader(ref battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType);
     battlefieldStatus.AverageWaitTime        = avgWaitTime;
     battlefieldStatus.AsGroup                = asGroup;
     battlefieldStatus.SuspendedQueue         = false;
     battlefieldStatus.EligibleForMatchmaking = true;
     battlefieldStatus.WaitTime               = Time.GetMSTimeDiffToNow(joinTime);
 }
Exemplo n.º 7
0
 public void BuildBattlegroundStatusActive(out BattlefieldStatusActive battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, ArenaTypes arenaType)
 {
     battlefieldStatus = new BattlefieldStatusActive();
     BuildBattlegroundStatusHeader(ref battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType);
     battlefieldStatus.ShutdownTimer = bg.GetRemainingTime();
     battlefieldStatus.ArenaFaction  = (byte)(player.GetBGTeam() == Team.Horde ? TeamId.Horde : TeamId.Alliance);
     battlefieldStatus.LeftEarly     = false;
     battlefieldStatus.StartTimer    = bg.GetElapsedTime();
     battlefieldStatus.Mapid         = bg.GetMapId();
 }
Exemplo n.º 8
0
 public void BuildBattlegroundStatusNeedConfirmation(out BattlefieldStatusNeedConfirmation battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, uint timeout, ArenaTypes arenaType)
 {
     battlefieldStatus = new BattlefieldStatusNeedConfirmation();
     BuildBattlegroundStatusHeader(ref battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType);
     battlefieldStatus.Mapid   = bg.GetMapId();
     battlefieldStatus.Timeout = timeout;
     battlefieldStatus.Role    = 0;
 }
Exemplo n.º 9
0
 void BuildBattlegroundStatusHeader(ref BattlefieldStatusHeader header, Battleground bg, Player player, uint ticketId, uint joinTime, ArenaTypes arenaType)
 {
     header.Ticket = new RideTicket();
     header.Ticket.RequesterGuid = player.GetGUID();
     header.Ticket.Id            = ticketId;
     header.Ticket.Type          = RideType.Battlegrounds;
     header.Ticket.Time          = (int)joinTime;
     header.QueueID         = bg.GetQueueId();
     header.RangeMin        = (byte)bg.GetMinLevel();
     header.RangeMax        = (byte)bg.GetMaxLevel();
     header.TeamSize        = (byte)(bg.isArena() ? arenaType : 0);
     header.InstanceID      = bg.GetClientInstanceID();
     header.RegisteredMatch = bg.isRated();
     header.TournamentRules = false;
 }
Exemplo n.º 10
0
        // create a new Battleground that will really be used to play
        public Battleground CreateNewBattleground(BattlegroundTypeId originalBgTypeId, PvpDifficultyRecord bracketEntry, ArenaTypes arenaType, bool isRated)
        {
            BattlegroundTypeId bgTypeId = GetRandomBG(originalBgTypeId);

            // get the template BG
            Battleground bg_template = GetBattlegroundTemplate(bgTypeId);

            if (bg_template == null)
            {
                Log.outError(LogFilter.Battleground, "Battleground: CreateNewBattleground - bg template not found for {0}", bgTypeId);
                return(null);
            }

            if (bgTypeId == BattlegroundTypeId.RB || bgTypeId == BattlegroundTypeId.AA)
            {
                return(null);
            }

            // create a copy of the BG template
            Battleground bg = bg_template.GetCopy();

            bool isRandom = bgTypeId != originalBgTypeId && !bg.IsArena();

            bg.SetBracket(bracketEntry);
            bg.SetInstanceID(Global.MapMgr.GenerateInstanceId());
            bg.SetClientInstanceID(CreateClientVisibleInstanceId(isRandom ? BattlegroundTypeId.RB : bgTypeId, bracketEntry.GetBracketId()));
            bg.Reset();                                // reset the new bg (set status to status_wait_queue from status_none)
            bg.SetStatus(BattlegroundStatus.WaitJoin); // start the joining of the bg
            bg.SetArenaType(arenaType);
            bg.SetRandomTypeID(bgTypeId);
            bg.SetRated(isRated);
            bg.SetRandom(isRandom);

            return(bg);
        }
Exemplo n.º 11
0
        void HandleBattlemasterJoinArena(BattlemasterJoinArena packet)
        {
            // ignore if we already in BG or BG queue
            if (GetPlayer().InBattleground())
            {
                return;
            }

            ArenaTypes arenatype = (ArenaTypes)ArenaTeam.GetTypeBySlot(packet.TeamSizeIndex);

            //check existence
            Battleground bg = Global.BattlegroundMgr.GetBattlegroundTemplate(BattlegroundTypeId.AA);

            if (!bg)
            {
                Log.outError(LogFilter.Network, "Battleground: template bg (all arenas) not found");
                return;
            }

            if (Global.DisableMgr.IsDisabledFor(DisableType.Battleground, (uint)BattlegroundTypeId.AA, null))
            {
                GetPlayer().SendSysMessage(CypherStrings.ArenaDisabled);
                return;
            }

            BattlegroundTypeId      bgTypeId      = bg.GetTypeID();
            BattlegroundQueueTypeId bgQueueTypeId = Global.BattlegroundMgr.BGQueueTypeId(bgTypeId, arenatype);
            PVPDifficultyRecord     bracketEntry  = Global.DB2Mgr.GetBattlegroundBracketByLevel(bg.GetMapId(), GetPlayer().getLevel());

            if (bracketEntry == null)
            {
                return;
            }

            Group grp = GetPlayer().GetGroup();

            // no group found, error
            if (!grp)
            {
                return;
            }
            if (grp.GetLeaderGUID() != GetPlayer().GetGUID())
            {
                return;
            }

            uint ateamId = GetPlayer().GetArenaTeamId(packet.TeamSizeIndex);
            // check real arenateam existence only here (if it was moved to group.CanJoin .. () then we would ahve to get it twice)
            ArenaTeam at = Global.ArenaTeamMgr.GetArenaTeamById(ateamId);

            if (at == null)
            {
                GetPlayer().GetSession().SendNotInArenaTeamPacket(arenatype);
                return;
            }

            // get the team rating for queuing
            uint arenaRating      = at.GetRating();
            uint matchmakerRating = at.GetAverageMMR(grp);

            // the arenateam id must match for everyone in the group

            if (arenaRating <= 0)
            {
                arenaRating = 1;
            }

            BattlegroundQueue bgQueue = Global.BattlegroundMgr.GetBattlegroundQueue(bgQueueTypeId);

            uint           avgTime = 0;
            GroupQueueInfo ginfo   = null;

            ObjectGuid errorGuid;
            var        err = grp.CanJoinBattlegroundQueue(bg, bgQueueTypeId, (uint)arenatype, (uint)arenatype, true, packet.TeamSizeIndex, out errorGuid);

            if (err == 0)
            {
                Log.outDebug(LogFilter.Battleground, "Battleground: arena team id {0}, leader {1} queued with matchmaker rating {2} for type {3}", GetPlayer().GetArenaTeamId(packet.TeamSizeIndex), GetPlayer().GetName(), matchmakerRating, arenatype);

                ginfo   = bgQueue.AddGroup(GetPlayer(), grp, bgTypeId, bracketEntry, arenatype, true, false, arenaRating, matchmakerRating, ateamId);
                avgTime = bgQueue.GetAverageQueueWaitTime(ginfo, bracketEntry.GetBracketId());
            }

            for (GroupReference refe = grp.GetFirstMember(); refe != null; refe = refe.next())
            {
                Player member = refe.GetSource();
                if (!member)
                {
                    continue;
                }

                if (err != 0)
                {
                    BattlefieldStatusFailed battlefieldStatus;
                    Global.BattlegroundMgr.BuildBattlegroundStatusFailed(out battlefieldStatus, bg, GetPlayer(), 0, arenatype, err, errorGuid);
                    member.SendPacket(battlefieldStatus);
                    continue;
                }

                // add to queue
                uint queueSlot = member.AddBattlegroundQueueId(bgQueueTypeId);

                BattlefieldStatusQueued battlefieldStatusQueued;
                Global.BattlegroundMgr.BuildBattlegroundStatusQueued(out battlefieldStatusQueued, bg, member, queueSlot, ginfo.JoinTime, avgTime, arenatype, true);
                member.SendPacket(battlefieldStatusQueued);

                Log.outDebug(LogFilter.Battleground, "Battleground: player joined queue for arena as group bg queue type {0} bg type {1}: GUID {2}, NAME {3}", bgQueueTypeId, bgTypeId, member.GetGUID().ToString(), member.GetName());
            }

            Global.BattlegroundMgr.ScheduleQueueUpdate(matchmakerRating, arenatype, bgQueueTypeId, bgTypeId, bracketEntry.GetBracketId());
        }
Exemplo n.º 12
0
        void HandleRequestBattlefieldStatus(RequestBattlefieldStatus packet)
        {
            // we must update all queues here
            Battleground bg = null;

            for (byte i = 0; i < SharedConst.MaxPlayerBGQueues; ++i)
            {
                BattlegroundQueueTypeId bgQueueTypeId = GetPlayer().GetBattlegroundQueueTypeId(i);
                if (bgQueueTypeId == 0)
                {
                    continue;
                }

                BattlegroundTypeId bgTypeId  = Global.BattlegroundMgr.BGTemplateId(bgQueueTypeId);
                ArenaTypes         arenaType = Global.BattlegroundMgr.BGArenaType(bgQueueTypeId);
                if (bgTypeId == GetPlayer().GetBattlegroundTypeId())
                {
                    bg = GetPlayer().GetBattleground();
                    //i cannot check any variable from player class because player class doesn't know if player is in 2v2 / 3v3 or 5v5 arena
                    //so i must use bg pointer to get that information
                    if (bg && bg.GetArenaType() == arenaType)
                    {
                        BattlefieldStatusActive battlefieldStatus;
                        Global.BattlegroundMgr.BuildBattlegroundStatusActive(out battlefieldStatus, bg, GetPlayer(), i, GetPlayer().GetBattlegroundQueueJoinTime(bgQueueTypeId), arenaType);
                        SendPacket(battlefieldStatus);
                        continue;
                    }
                }

                //we are sending update to player about queue - he can be invited there!
                //get GroupQueueInfo for queue status
                BattlegroundQueue bgQueue = Global.BattlegroundMgr.GetBattlegroundQueue(bgQueueTypeId);
                GroupQueueInfo    ginfo;
                if (!bgQueue.GetPlayerGroupInfoData(GetPlayer().GetGUID(), out ginfo))
                {
                    continue;
                }

                if (ginfo.IsInvitedToBGInstanceGUID != 0)
                {
                    bg = Global.BattlegroundMgr.GetBattleground(ginfo.IsInvitedToBGInstanceGUID, bgTypeId);
                    if (!bg)
                    {
                        continue;
                    }

                    BattlefieldStatusNeedConfirmation battlefieldStatus;
                    Global.BattlegroundMgr.BuildBattlegroundStatusNeedConfirmation(out battlefieldStatus, bg, GetPlayer(), i, GetPlayer().GetBattlegroundQueueJoinTime(bgQueueTypeId), Time.GetMSTimeDiff(Time.GetMSTime(), ginfo.RemoveInviteTime), arenaType);
                    SendPacket(battlefieldStatus);
                }
                else
                {
                    bg = Global.BattlegroundMgr.GetBattlegroundTemplate(bgTypeId);
                    if (!bg)
                    {
                        continue;
                    }

                    // expected bracket entry
                    PVPDifficultyRecord bracketEntry = Global.DB2Mgr.GetBattlegroundBracketByLevel(bg.GetMapId(), GetPlayer().getLevel());
                    if (bracketEntry == null)
                    {
                        continue;
                    }

                    uint avgTime = bgQueue.GetAverageQueueWaitTime(ginfo, bracketEntry.GetBracketId());
                    BattlefieldStatusQueued battlefieldStatus;
                    Global.BattlegroundMgr.BuildBattlegroundStatusQueued(out battlefieldStatus, bg, GetPlayer(), i, GetPlayer().GetBattlegroundQueueJoinTime(bgQueueTypeId), avgTime, arenaType, ginfo.Players.Count > 1);
                    SendPacket(battlefieldStatus);
                }
            }
        }
Exemplo n.º 13
0
 public achievement_arena_kills(string name, ArenaTypes arenaType) : base(name)
 {
     _arenaType = arenaType;
 }
Exemplo n.º 14
0
 public BattlegroundQueueTypeId BGQueueTypeId(ushort battlemasterListId, BattlegroundQueueIdType type, bool rated, ArenaTypes teamSize)
 {
     return(new BattlegroundQueueTypeId(battlemasterListId, (byte)type, rated, (byte)teamSize));
 }