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); }
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); } } }