public void UpdateBestCompatibleInQueue(ObjectGuid guid, LfgQueueData queueData, string key, Dictionary <ObjectGuid, LfgRoles> roles) { byte storedSize = (byte)(string.IsNullOrEmpty(queueData.bestCompatible) ? 0 : queueData.bestCompatible.Count(p => p == '|') + 1); byte size = (byte)(key.Count(p => p == '|') + 1); if (size <= storedSize) { return; } Log.outDebug(LogFilter.Lfg, "UpdateBestCompatibleInQueue: Changed ({0}) to ({1}) as best compatible group for {2}", queueData.bestCompatible, key, guid); queueData.bestCompatible = key; queueData.tanks = SharedConst.LFGTanksNeeded; queueData.healers = SharedConst.LFGHealersNeeded; queueData.dps = SharedConst.LFGDPSNeeded; foreach (var it in roles) { LfgRoles role = it.Value; if (role.HasAnyFlag(LfgRoles.Tank)) { --queueData.tanks; } else if (role.HasAnyFlag(LfgRoles.Healer)) { --queueData.healers; } else { --queueData.dps; } } }
public void SendLfgRoleChosen(ObjectGuid guid, LfgRoles roles) { RoleChosen roleChosen = new RoleChosen(); roleChosen.Player = guid; roleChosen.RoleMask = roles; roleChosen.Accepted = roles > 0; SendPacket(roleChosen); }
public static string GetRolesString(LfgRoles roles) { StringBuilder rolesstr = new(); if (roles.HasAnyFlag(LfgRoles.Tank)) { rolesstr.Append("Tank"); } if (roles.HasAnyFlag(LfgRoles.Healer)) { if (rolesstr.Capacity != 0) { rolesstr.Append(", "); } rolesstr.Append("Healer"); } if (roles.HasAnyFlag(LfgRoles.Damage)) { if (rolesstr.Capacity != 0) { rolesstr.Append(", "); } rolesstr.Append("Damage"); } if (roles.HasAnyFlag(LfgRoles.Leader)) { if (rolesstr.Capacity != 0) { rolesstr.Append(", "); } rolesstr.Append("Leader"); } if (rolesstr.Capacity == 0) { rolesstr.Append("None"); } return(rolesstr.ToString()); }
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(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); } } }
public void SetRoles(LfgRoles roles) { m_Roles = roles; }