Example #1
0
        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;
                }
            }
        }
Example #2
0
        public void SendLfgRoleChosen(ObjectGuid guid, LfgRoles roles)
        {
            RoleChosen roleChosen = new RoleChosen();

            roleChosen.Player   = guid;
            roleChosen.RoleMask = roles;
            roleChosen.Accepted = roles > 0;
            SendPacket(roleChosen);
        }
Example #3
0
        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());
        }
Example #4
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(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);
                }
            }
        }
Example #5
0
 public void SetRoles(LfgRoles roles)
 {
     m_Roles = roles;
 }