예제 #1
0
        public void SendLfgQueueStatus(LfgQueueStatusData queueData)
        {
            Log.outDebug(LogFilter.Lfg, "SMSG_LFG_QUEUE_STATUS {0} state: {1} dungeon: {2}, waitTime: {3}, " +
                         "avgWaitTime: {4}, waitTimeTanks: {5}, waitTimeHealer: {6}, waitTimeDps: {7}, queuedTime: {8}, tanks: {9}, healers: {10}, dps: {11}",
                         GetPlayerInfo(), Global.LFGMgr.GetState(GetPlayer().GetGUID()), queueData.dungeonId, queueData.waitTime, queueData.waitTimeAvg,
                         queueData.waitTimeTank, queueData.waitTimeHealer, queueData.waitTimeDps, queueData.queuedTime, queueData.tanks, queueData.healers, queueData.dps);

            LFGQueueStatus lfgQueueStatus = new LFGQueueStatus();

            RideTicket ticket = Global.LFGMgr.GetTicket(GetPlayer().GetGUID());

            if (ticket != null)
            {
                lfgQueueStatus.Ticket = ticket;
            }
            lfgQueueStatus.Slot                 = queueData.queueId;
            lfgQueueStatus.AvgWaitTimeMe        = (uint)queueData.waitTime;
            lfgQueueStatus.AvgWaitTime          = (uint)queueData.waitTimeAvg;
            lfgQueueStatus.AvgWaitTimeByRole[0] = (uint)queueData.waitTimeTank;
            lfgQueueStatus.AvgWaitTimeByRole[1] = (uint)queueData.waitTimeHealer;
            lfgQueueStatus.AvgWaitTimeByRole[2] = (uint)queueData.waitTimeDps;
            lfgQueueStatus.LastNeeded[0]        = queueData.tanks;
            lfgQueueStatus.LastNeeded[1]        = queueData.healers;
            lfgQueueStatus.LastNeeded[2]        = queueData.dps;
            lfgQueueStatus.QueuedTime           = queueData.queuedTime;

            SendPacket(lfgQueueStatus);
        }
예제 #2
0
        public void UpdateQueueTimers(byte queueId, long currTime)
        {
            Log.outDebug(LogFilter.Lfg, "Updating queue timers...");
            foreach (var itQueue in QueueDataStore)
            {
                LfgQueueData queueinfo  = itQueue.Value;
                uint         dungeonId  = queueinfo.dungeons.FirstOrDefault();
                uint         queuedTime = (uint)(currTime - queueinfo.joinTime);
                LfgRoles     role       = LfgRoles.None;
                int          waitTime   = -1;

                if (!waitTimesTankStore.ContainsKey(dungeonId))
                {
                    waitTimesTankStore[dungeonId] = new LfgWaitTime();
                }
                if (!waitTimesHealerStore.ContainsKey(dungeonId))
                {
                    waitTimesHealerStore[dungeonId] = new LfgWaitTime();
                }
                if (!waitTimesDpsStore.ContainsKey(dungeonId))
                {
                    waitTimesDpsStore[dungeonId] = new LfgWaitTime();
                }
                if (!waitTimesAvgStore.ContainsKey(dungeonId))
                {
                    waitTimesAvgStore[dungeonId] = new LfgWaitTime();
                }

                int wtTank   = waitTimesTankStore[dungeonId].time;
                int wtHealer = waitTimesHealerStore[dungeonId].time;
                int wtDps    = waitTimesDpsStore[dungeonId].time;
                int wtAvg    = waitTimesAvgStore[dungeonId].time;

                foreach (var itPlayer in queueinfo.roles)
                {
                    role |= itPlayer.Value;
                }
                role &= ~LfgRoles.Leader;

                switch (role)
                {
                case LfgRoles.None:                                    // Should not happen - just in case
                    waitTime = -1;
                    break;

                case LfgRoles.Tank:
                    waitTime = wtTank;
                    break;

                case LfgRoles.Healer:
                    waitTime = wtHealer;
                    break;

                case LfgRoles.Damage:
                    waitTime = wtDps;
                    break;

                default:
                    waitTime = wtAvg;
                    break;
                }

                if (string.IsNullOrEmpty(queueinfo.bestCompatible))
                {
                    FindBestCompatibleInQueue(itQueue.Key, itQueue.Value);
                }

                LfgQueueStatusData queueData = new LfgQueueStatusData(queueId, dungeonId, waitTime, wtAvg, wtTank, wtHealer, wtDps, queuedTime, queueinfo.tanks, queueinfo.healers, queueinfo.dps);
                foreach (var itPlayer in queueinfo.roles)
                {
                    ObjectGuid pguid = itPlayer.Key;
                    Global.LFGMgr.SendLfgQueueStatus(pguid, queueData);
                }
            }
        }