diff --git a/Source/Framework/Constants/GuildConst.cs b/Source/Framework/Constants/GuildConst.cs index 7a2f4363d..755c516d3 100644 --- a/Source/Framework/Constants/GuildConst.cs +++ b/Source/Framework/Constants/GuildConst.cs @@ -259,36 +259,4 @@ namespace Framework.Constants public const uint Arena3v3 = 1200000; public const uint Arena5v5 = 2000000; } - - public enum GuildFinderOptionsInterest - { - Questing = 0x01, - Dungeons = 0x02, - Raids = 0x04, - PVP = 0x08, - RolePlaying = 0x10, - All = Questing | Dungeons | Raids | PVP | RolePlaying - } - - public enum GuildFinderOptionsAvailability - { - Weekdays = 0x1, - Weekends = 0x2, - Always = Weekdays | Weekends - } - - public enum GuildFinderOptionsRoles - { - Tank = 0x1, - Healer = 0x2, - DPS = 0x4, - All = Tank | Healer | DPS - } - - public enum GuildFinderOptionsLevel - { - Any = 0x1, - Max = 0x2, - All = Any | Max - } } diff --git a/Source/Framework/Database/Databases/CharacterDatabase.cs b/Source/Framework/Database/Databases/CharacterDatabase.cs index 89dd92e54..da3dc320c 100644 --- a/Source/Framework/Database/Databases/CharacterDatabase.cs +++ b/Source/Framework/Database/Databases/CharacterDatabase.cs @@ -688,11 +688,6 @@ namespace Framework.Database PrepareStatement(CharStatements.DEL_CHAR_CUF_PROFILES_BY_ID, "DELETE FROM character_cuf_profiles WHERE guid = ? AND id = ?"); PrepareStatement(CharStatements.DEL_CHAR_CUF_PROFILES, "DELETE FROM character_cuf_profiles WHERE guid = ?"); - // Guild Finder - PrepareStatement(CharStatements.REP_GUILD_FINDER_APPLICANT, "REPLACE INTO guild_finder_applicant (guildId, playerGuid, availability, classRole, interests, comment, submitTime) VALUES(?, ?, ?, ?, ?, ?, ?)"); - PrepareStatement(CharStatements.DEL_GUILD_FINDER_APPLICANT, "DELETE FROM guild_finder_applicant WHERE guildId = ? AND playerGuid = ?"); - PrepareStatement(CharStatements.REP_GUILD_FINDER_GUILD_SETTINGS, "REPLACE INTO guild_finder_guild_settings (guildId, availability, classRoles, interests, level, listed, comment) VALUES(?, ?, ?, ?, ?, ?, ?)"); - PrepareStatement(CharStatements.DEL_GUILD_FINDER_GUILD_SETTINGS, "DELETE FROM guild_finder_guild_settings WHERE guildId = ?"); // Items that hold loot or money PrepareStatement(CharStatements.SEL_ITEMCONTAINER_ITEMS, "SELECT container_id, item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_bonus, context, bonus_list_ids FROM item_loot_items"); @@ -1352,10 +1347,6 @@ namespace Framework.Database DEL_CHAR_CUF_PROFILES_BY_ID, DEL_CHAR_CUF_PROFILES, - REP_GUILD_FINDER_APPLICANT, - DEL_GUILD_FINDER_APPLICANT, - REP_GUILD_FINDER_GUILD_SETTINGS, - DEL_GUILD_FINDER_GUILD_SETTINGS, REP_CALENDAR_EVENT, DEL_CALENDAR_EVENT, diff --git a/Source/Game/Globals/Global.cs b/Source/Game/Globals/Global.cs index 52ca1d226..906181811 100644 --- a/Source/Game/Globals/Global.cs +++ b/Source/Game/Globals/Global.cs @@ -51,7 +51,6 @@ public static class Global //Guild public static PetitionManager PetitionMgr { get { return PetitionManager.Instance; } } public static GuildManager GuildMgr { get { return GuildManager.Instance; } } - public static GuildFinderManager GuildFinderMgr { get { return GuildFinderManager.Instance; } } //Social public static CalendarManager CalendarMgr { get { return CalendarManager.Instance; } } diff --git a/Source/Game/Guilds/Guild.cs b/Source/Game/Guilds/Guild.cs index 45da13f75..4686723a1 100644 --- a/Source/Game/Guilds/Guild.cs +++ b/Source/Game/Guilds/Guild.cs @@ -142,8 +142,6 @@ namespace Game.Guilds DB.Characters.CommitTransaction(trans); - Global.GuildFinderMgr.DeleteGuild(GetGUID()); - Global.GuildMgr.RemoveGuild(m_id); } @@ -1587,8 +1585,6 @@ namespace Game.Guilds joinNotificationPacket.VirtualRealmAddress = Global.WorldMgr.GetVirtualRealmAddress(); BroadcastPacket(joinNotificationPacket); - Global.GuildFinderMgr.RemoveAllMembershipRequestsFromPlayer(guid); - // Call scripts if member was succesfully added (and stored to database) Global.ScriptMgr.OnGuildAddMember(this, player, rankId); diff --git a/Source/Game/Guilds/GuildFinderManager.cs b/Source/Game/Guilds/GuildFinderManager.cs deleted file mode 100644 index 04fdaaffd..000000000 --- a/Source/Game/Guilds/GuildFinderManager.cs +++ /dev/null @@ -1,517 +0,0 @@ -/* - * Copyright (C) 2012-2020 CypherCore - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using Framework.Constants; -using Framework.Database; -using Game.DataStorage; -using Game.Entities; -using Game.Networking.Packets; -using System; -using System.Collections.Generic; - -namespace Game.Guilds -{ - public class GuildFinderManager : Singleton - { - GuildFinderManager() { } - - public void LoadFromDB() - { - LoadGuildSettings(); - LoadMembershipRequests(); - } - - void LoadGuildSettings() - { - Log.outInfo(LogFilter.ServerLoading, "Loading guild finder guild-related settings..."); - // 0 1 2 3 4 5 6 7 - SQLResult result = DB.Characters.Query("SELECT gfgs.guildId, gfgs.availability, gfgs.classRoles, gfgs.interests, gfgs.level, gfgs.listed, gfgs.comment, c.race " + - "FROM guild_finder_guild_settings gfgs LEFT JOIN guild_member gm ON gm.guildid=gfgs.guildId LEFT JOIN characters c ON c.guid = gm.guid LIMIT 1"); - - if (result.IsEmpty()) - { - Log.outInfo(LogFilter.ServerLoading, "Loaded 0 guild finder guild-related settings. Table `guild_finder_guild_settings` is empty."); - return; - } - - uint count = 0; - uint oldMSTime = Time.GetMSTime(); - do - { - ObjectGuid guildId = ObjectGuid.Create(HighGuid.Guild, result.Read(0)); - byte availability = result.Read(1); - byte classRoles = result.Read(2); - byte interests = result.Read(3); - byte level = result.Read(4); - bool listed = (result.Read(5) != 0); - string comment = result.Read(6); - - uint guildTeam = TeamId.Alliance; - ChrRacesRecord raceEntry = CliDB.ChrRacesStorage.LookupByKey(result.Read(7)); - if (raceEntry != null) - if (raceEntry.Alliance == 1) - guildTeam = TeamId.Horde; - - LFGuildSettings settings = new(listed, guildTeam, guildId, classRoles, availability, interests, level, comment); - _guildSettings[guildId] = settings; - - ++count; - } while (result.NextRow()); - - Log.outInfo(LogFilter.ServerLoading, "Loaded {0} guild finder guild-related settings in {1} ms.", count, Time.GetMSTimeDiffToNow(oldMSTime)); - } - - void LoadMembershipRequests() - { - Log.outInfo(LogFilter.ServerLoading, "Loading guild finder membership requests..."); - // 0 1 2 3 4 5 6 - SQLResult result = DB.Characters.Query("SELECT guildId, playerGuid, availability, classRole, interests, comment, submitTime FROM guild_finder_applicant"); - - if (result.IsEmpty()) - { - Log.outInfo(LogFilter.ServerLoading, "Loaded 0 guild finder membership requests. Table `guild_finder_applicant` is empty."); - return; - } - - uint count = 0; - uint oldMSTime = Time.GetMSTime(); - do - { - ObjectGuid guildId = ObjectGuid.Create(HighGuid.Guild, result.Read(0)); - ObjectGuid playerId = ObjectGuid.Create(HighGuid.Player, result.Read(1)); - byte availability = result.Read(2); - byte classRoles = result.Read(3); - byte interests = result.Read(4); - string comment = result.Read(5); - long submitTime = result.Read(6); - - MembershipRequest request = new(playerId, guildId, availability, classRoles, interests, comment, submitTime); - - if (!_membershipRequestsByGuild.ContainsKey(guildId)) - _membershipRequestsByGuild[guildId] = new Dictionary(); - - _membershipRequestsByGuild[guildId][playerId] = request; - - if (!_membershipRequestsByPlayer.ContainsKey(playerId)) - _membershipRequestsByPlayer[playerId] = new Dictionary(); - - _membershipRequestsByPlayer[playerId][guildId] = request; - - ++count; - } while (result.NextRow()); - - Log.outInfo(LogFilter.ServerLoading, "Loaded {0} guild finder membership requests in {1} ms.", count, Time.GetMSTimeDiffToNow(oldMSTime)); - } - - public void AddMembershipRequest(ObjectGuid guildGuid, MembershipRequest request) - { - if (!_membershipRequestsByGuild.ContainsKey(guildGuid)) - _membershipRequestsByGuild[guildGuid] = new Dictionary(); - _membershipRequestsByGuild[guildGuid][request.GetPlayerGUID()] = request; - - if (!_membershipRequestsByPlayer.ContainsKey(request.GetPlayerGUID())) - _membershipRequestsByPlayer[request.GetPlayerGUID()] = new Dictionary(); - _membershipRequestsByPlayer[request.GetPlayerGUID()][guildGuid] = request; - - SQLTransaction trans = new(); - PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.REP_GUILD_FINDER_APPLICANT); - stmt.AddValue(0, request.GetGuildGuid().GetCounter()); - stmt.AddValue(1, request.GetPlayerGUID().GetCounter()); - stmt.AddValue(2, request.GetAvailability()); - stmt.AddValue(3, request.GetClassRoles()); - stmt.AddValue(4, request.GetInterests()); - stmt.AddValue(5, request.GetComment()); - stmt.AddValue(6, request.GetSubmitTime()); - trans.Append(stmt); - DB.Characters.CommitTransaction(trans); - - // Notify the applicant his submittion has been added - Player player = Global.ObjAccessor.FindPlayer(request.GetPlayerGUID()); - if (player) - SendMembershipRequestListUpdate(player); - - // Notify the guild master and officers the list changed - Guild guild = Global.GuildMgr.GetGuildById(guildGuid.GetCounter()); - if (guild) - SendApplicantListUpdate(guild); - } - - public void RemoveAllMembershipRequestsFromPlayer(ObjectGuid playerId) - { - var playerDic = _membershipRequestsByPlayer.LookupByKey(playerId); - if (playerDic == null) - return; - - SQLTransaction trans = new(); - foreach (var guid in playerDic.Keys) - { - PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_GUILD_FINDER_APPLICANT); - stmt.AddValue(0, guid.GetCounter()); - stmt.AddValue(1, playerId.GetCounter()); - trans.Append(stmt); - - - // Notify the guild master and officers the list changed - Guild guild = Global.GuildMgr.GetGuildByGuid(guid); - if (guild) - SendApplicantListUpdate(guild); - - if (!_membershipRequestsByGuild.ContainsKey(guid)) - continue; - - var guildDic = _membershipRequestsByGuild[guid]; - guildDic.Remove(playerId); - if (guildDic.Empty()) - _membershipRequestsByGuild.Remove(guid); - } - - DB.Characters.CommitTransaction(trans); - _membershipRequestsByPlayer.Remove(playerId); - } - - public void RemoveMembershipRequest(ObjectGuid playerId, ObjectGuid guildId) - { - if (_membershipRequestsByGuild.ContainsKey(guildId)) - { - var guildDic = _membershipRequestsByGuild[guildId]; - guildDic.Remove(playerId); - if (guildDic.Empty()) - _membershipRequestsByGuild.Remove(guildId); - } - - var playerDic = _membershipRequestsByPlayer.LookupByKey(playerId); - if (playerDic != null) - { - playerDic.Remove(guildId); - if (playerDic.Empty()) - _membershipRequestsByPlayer.Remove(playerId); - } - - SQLTransaction trans = new(); - PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_GUILD_FINDER_APPLICANT); - stmt.AddValue(0, guildId.GetCounter()); - stmt.AddValue(1, playerId.GetCounter()); - trans.Append(stmt); - - DB.Characters.CommitTransaction(trans); - - // Notify the applicant his submittion has been removed - Player player = Global.ObjAccessor.FindPlayer(playerId); - if (player) - SendMembershipRequestListUpdate(player); - - // Notify the guild master and officers the list changed - Guild guild = Global.GuildMgr.GetGuildByGuid(guildId); - if (guild) - SendApplicantListUpdate(guild); - } - - public List GetAllMembershipRequestsForPlayer(ObjectGuid playerGuid) - { - List resultSet = new(); - var playerDic = _membershipRequestsByPlayer.LookupByKey(playerGuid); - if (playerDic == null) - return resultSet; - - foreach (var guildRequestPair in playerDic) - resultSet.Add(guildRequestPair.Value); - - return resultSet; - } - - public byte CountRequestsFromPlayer(ObjectGuid playerId) - { - return (byte)(_membershipRequestsByPlayer.ContainsKey(playerId) ? _membershipRequestsByPlayer[playerId].Count : 0); - } - - public List GetGuildsMatchingSetting(LFGuildPlayer settings, uint faction) - { - List resultSet = new(); - foreach (var guildSettings in _guildSettings.Values) - { - if (!guildSettings.IsListed()) - continue; - - if (guildSettings.GetTeam() != faction) - continue; - - if (!Convert.ToBoolean(guildSettings.GetAvailability() & settings.GetAvailability())) - continue; - - if (!Convert.ToBoolean(guildSettings.GetClassRoles() & settings.GetClassRoles())) - continue; - - if (!Convert.ToBoolean(guildSettings.GetInterests() & settings.GetInterests())) - continue; - - if (!Convert.ToBoolean(guildSettings.GetLevel() & settings.GetLevel())) - continue; - - resultSet.Add(guildSettings); - } - - return resultSet; - } - - public bool HasRequest(ObjectGuid playerId, ObjectGuid guildId) - { - var guildDic = _membershipRequestsByGuild.LookupByKey(guildId); - if (guildDic == null) - return false; - - return guildDic.ContainsKey(playerId); - } - - public void SetGuildSettings(ObjectGuid guildGuid, LFGuildSettings settings) - { - _guildSettings[guildGuid] = settings; - - SQLTransaction trans = new(); - - PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.REP_GUILD_FINDER_GUILD_SETTINGS); - stmt.AddValue(0, settings.GetGUID().GetCounter()); - stmt.AddValue(1, settings.GetAvailability()); - stmt.AddValue(2, settings.GetClassRoles()); - stmt.AddValue(3, settings.GetInterests()); - stmt.AddValue(4, settings.GetLevel()); - stmt.AddValue(5, settings.IsListed()); - stmt.AddValue(6, settings.GetComment()); - trans.Append(stmt); - - DB.Characters.CommitTransaction(trans); - } - - public void DeleteGuild(ObjectGuid guildId) - { - SQLTransaction trans = new(); - PreparedStatement stmt; - var guildDic = _membershipRequestsByGuild.LookupByKey(guildId); - if (guildDic != null) - { - foreach (var guid in guildDic.Keys) - { - stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_GUILD_FINDER_APPLICANT); - stmt.AddValue(0, guildId.GetCounter()); - stmt.AddValue(1, guid.GetCounter()); - trans.Append(stmt); - - if (_membershipRequestsByPlayer.ContainsKey(guid)) - { - var playerDic = _membershipRequestsByPlayer.LookupByKey(guid); - playerDic.Remove(guildId); - if (playerDic.Empty()) - _membershipRequestsByPlayer.Remove(guid); - } - - // Notify the applicant his submition has been removed - Player player = Global.ObjAccessor.FindPlayer(guid); - if (player) - SendMembershipRequestListUpdate(player); - } - } - - stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_GUILD_FINDER_GUILD_SETTINGS); - stmt.AddValue(0, guildId.GetCounter()); - trans.Append(stmt); - - DB.Characters.CommitTransaction(trans); - - _membershipRequestsByGuild.Remove(guildId); - _guildSettings.Remove(guildId); - - // Notify the guild master the list changed (even if he's not a GM any more, not sure if needed) - Guild guild = Global.GuildMgr.GetGuildById(guildId.GetCounter()); - if (guild) - SendApplicantListUpdate(guild); - } - - void SendApplicantListUpdate(Guild guild) - { - LFGuildApplicantListChanged applicantListChanged = new(); - - guild.BroadcastPacketToRank(applicantListChanged, GuildDefaultRanks.Officer); - - Player player = Global.ObjAccessor.FindPlayer(guild.GetLeaderGUID()); - if (player) - player.SendPacket(applicantListChanged); - } - - void SendMembershipRequestListUpdate(Player player) - { - player.SendPacket(new LFGuildApplicationsListChanged()); - } - - public Dictionary GetAllMembershipRequestsForGuild(ObjectGuid guildGuid) { return _membershipRequestsByGuild.LookupByKey(guildGuid); } - - public LFGuildSettings GetGuildSettings(ObjectGuid guildGuid) { return _guildSettings.LookupByKey(guildGuid); } - - Dictionary _guildSettings = new(); - Dictionary> _membershipRequestsByGuild = new(); - Dictionary> _membershipRequestsByPlayer = new(); - } - - public class MembershipRequest - { - public MembershipRequest(MembershipRequest settings) - { - _comment = settings.GetComment(); - - _availability = settings.GetAvailability(); - _classRoles = settings.GetClassRoles(); - _interests = settings.GetInterests(); - _guildId = settings.GetGuildGuid(); - _playerGUID = settings.GetPlayerGUID(); - _time = settings.GetSubmitTime(); - } - - public MembershipRequest(ObjectGuid playerGUID, ObjectGuid guildId, uint availability, uint classRoles, uint interests, string comment, long submitTime) - { - _comment = comment; - _guildId = guildId; - _playerGUID = playerGUID; - _availability = (byte)availability; - _classRoles = (byte)classRoles; - _interests = (byte)interests; - _time = submitTime; - } - - public MembershipRequest() - { - _time = GameTime.GetGameTime(); - } - - public ObjectGuid GetGuildGuid() { return _guildId; } - public ObjectGuid GetPlayerGUID() { return _playerGUID; } - public byte GetAvailability() { return _availability; } - public byte GetClassRoles() { return _classRoles; } - public byte GetInterests() { return _interests; } - public long GetSubmitTime() { return _time; } - public long GetExpiryTime() { return _time + 30 * 24 * 3600; } // Adding 30 days - public string GetComment() { return _comment; } - - string _comment = ""; - - ObjectGuid _guildId; - ObjectGuid _playerGUID; - - byte _availability; - byte _classRoles; - byte _interests; - - long _time; - } - - public class LFGuildPlayer - { - public LFGuildPlayer() - { - _guid = ObjectGuid.Empty; - _roles = 0; - _availability = 0; - _interests = 0; - _level = 0; - } - - public LFGuildPlayer(ObjectGuid guid, uint role, uint availability, uint interests, uint level) - { - _guid = guid; - _roles = (byte)role; - _availability = (byte)availability; - _interests = (byte)interests; - _level = (byte)level; - } - - public LFGuildPlayer(ObjectGuid guid, uint role, uint availability, uint interests, uint level, string comment) - { - _comment = comment; - - _guid = guid; - _roles = (byte)role; - _availability = (byte)availability; - _interests = (byte)interests; - _level = (byte)level; - } - - public LFGuildPlayer(LFGuildPlayer settings) - { - _comment = settings.GetComment(); - _guid = settings.GetGUID(); - _roles = settings.GetClassRoles(); - _availability = settings.GetAvailability(); - _interests = settings.GetInterests(); - _level = settings.GetLevel(); - } - - public ObjectGuid GetGUID() { return _guid; } - public byte GetClassRoles() { return _roles; } - public byte GetAvailability() { return _availability; } - public byte GetInterests() { return _interests; } - public byte GetLevel() { return _level; } - public string GetComment() { return _comment; } - - string _comment = ""; - ObjectGuid _guid; - byte _roles; - byte _availability; - byte _interests; - byte _level; - } - - public class LFGuildSettings : LFGuildPlayer - { - public LFGuildSettings() - { - _listed = false; - _team = TeamId.Alliance; - } - - public LFGuildSettings(bool listed, uint team) - { - _listed = listed; - _team = team; - } - - public LFGuildSettings(bool listed, uint team, ObjectGuid guid, uint role, uint availability, uint interests, uint level) - : base(guid, role, availability, interests, level) - { - _listed = listed; - _team = team; - } - - public LFGuildSettings(bool listed, uint team, ObjectGuid guid, uint role, uint availability, uint interests, uint level, string comment) - : base(guid, role, availability, interests, level, comment) - { - _listed = listed; - _team = team; - } - - public LFGuildSettings(LFGuildSettings settings) - : base(settings) - { - _listed = settings.IsListed(); - _team = settings.GetTeam(); - } - - public bool IsListed() { return _listed; } - void SetListed(bool state) { _listed = state; } - - public uint GetTeam() { return _team; } - - bool _listed; - uint _team; - } -} diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs index 5dcb82e4a..31cc4a714 100644 --- a/Source/Game/Handlers/CharacterHandler.cs +++ b/Source/Game/Handlers/CharacterHandler.cs @@ -635,7 +635,6 @@ namespace Game Global.ScriptMgr.OnPlayerDelete(charDelete.Guid, initAccountId); // To prevent race conditioning, but as it also makes sense, we hand the accountId over for successful delete. // Shouldn't interfere with character deletion though - Global.GuildFinderMgr.RemoveAllMembershipRequestsFromPlayer(charDelete.Guid); Global.CalendarMgr.RemoveAllPlayerEventsAndInvites(charDelete.Guid); Player.DeleteFromDB(charDelete.Guid, accountId); diff --git a/Source/Game/Handlers/GuildFinderHandler.cs b/Source/Game/Handlers/GuildFinderHandler.cs deleted file mode 100644 index 7e0706048..000000000 --- a/Source/Game/Handlers/GuildFinderHandler.cs +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright (C) 2012-2020 CypherCore - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using Framework.Constants; -using Game.Cache; -using Game.Entities; -using Game.Guilds; -using Game.Networking; -using Game.Networking.Packets; -using System; -using System.Collections.Generic; - -namespace Game -{ - public partial class WorldSession - { - [WorldPacketHandler(ClientOpcodes.LfGuildAddRecruit)] - void HandleGuildFinderAddRecruit(LFGuildAddRecruit lfGuildAddRecruit) - { - if (Global.GuildFinderMgr.GetAllMembershipRequestsForPlayer(GetPlayer().GetGUID()).Count >= 10) - return; - - if (!lfGuildAddRecruit.GuildGUID.IsGuild()) - return; - if (!lfGuildAddRecruit.ClassRoles.HasAnyFlag((uint)GuildFinderOptionsRoles.All) || lfGuildAddRecruit.ClassRoles > (uint)GuildFinderOptionsRoles.All) - return; - if (!lfGuildAddRecruit.Availability.HasAnyFlag((uint)GuildFinderOptionsAvailability.Always) || lfGuildAddRecruit.Availability > (uint)GuildFinderOptionsAvailability.Always) - return; - if (!lfGuildAddRecruit.PlayStyle.HasAnyFlag((uint)GuildFinderOptionsInterest.All) || lfGuildAddRecruit.PlayStyle > (uint)GuildFinderOptionsInterest.All) - return; - - MembershipRequest request = new(GetPlayer().GetGUID(), lfGuildAddRecruit.GuildGUID, lfGuildAddRecruit.Availability, - lfGuildAddRecruit.ClassRoles, lfGuildAddRecruit.PlayStyle, lfGuildAddRecruit.Comment, GameTime.GetGameTime()); - Global.GuildFinderMgr.AddMembershipRequest(lfGuildAddRecruit.GuildGUID, request); - } - - [WorldPacketHandler(ClientOpcodes.LfGuildBrowse)] - void HandleGuildFinderBrowse(LFGuildBrowse lfGuildBrowse) - { - if (!lfGuildBrowse.ClassRoles.HasAnyFlag((uint)GuildFinderOptionsRoles.All) || lfGuildBrowse.ClassRoles > (uint)GuildFinderOptionsRoles.All) - return; - if (!lfGuildBrowse.Availability.HasAnyFlag((uint)GuildFinderOptionsAvailability.Always) || lfGuildBrowse.Availability > (uint)GuildFinderOptionsAvailability.Always) - return; - if (!lfGuildBrowse.PlayStyle.HasAnyFlag((uint)GuildFinderOptionsInterest.All) || lfGuildBrowse.PlayStyle > (uint)GuildFinderOptionsInterest.All) - return; - if (lfGuildBrowse.CharacterLevel > WorldConfig.GetIntValue(WorldCfg.MaxPlayerLevel) || lfGuildBrowse.CharacterLevel < 1) - return; - - Player player = GetPlayer(); - - LFGuildPlayer settings = new(player.GetGUID(), lfGuildBrowse.ClassRoles, lfGuildBrowse.Availability, lfGuildBrowse.PlayStyle, (uint)GuildFinderOptionsLevel.Any); - var guildList = Global.GuildFinderMgr.GetGuildsMatchingSetting(settings, (uint)player.GetTeam()); - - LFGuildBrowseResult lfGuildBrowseResult = new(); - for (var i = 0; i < guildList.Count; ++i) - { - LFGuildSettings guildSettings = guildList[i]; - LFGuildBrowseData guildData = new(); - Guild guild = Global.GuildMgr.GetGuildByGuid(guildSettings.GetGUID()); - - guildData.GuildName = guild.GetName(); - guildData.GuildGUID = guild.GetGUID(); - guildData.GuildVirtualRealm = Global.WorldMgr.GetVirtualRealmAddress(); - guildData.GuildMembers = guild.GetMembersCount(); - guildData.GuildAchievementPoints = guild.GetAchievementMgr().GetAchievementPoints(); - guildData.PlayStyle = guildSettings.GetInterests(); - guildData.Availability = guildSettings.GetAvailability(); - guildData.ClassRoles = guildSettings.GetClassRoles(); - guildData.LevelRange = guildSettings.GetLevel(); - guildData.EmblemStyle = guild.GetEmblemInfo().GetStyle(); - guildData.EmblemColor = guild.GetEmblemInfo().GetColor(); - guildData.BorderStyle = guild.GetEmblemInfo().GetBorderStyle(); - guildData.BorderColor = guild.GetEmblemInfo().GetBorderColor(); - guildData.Background = guild.GetEmblemInfo().GetBackgroundColor(); - guildData.Comment = guildSettings.GetComment(); - guildData.Cached = 0; - guildData.MembershipRequested = (sbyte)(Global.GuildFinderMgr.HasRequest(player.GetGUID(), guild.GetGUID()) ? 1 : 0); - - lfGuildBrowseResult.Post.Add(guildData); - } - - player.SendPacket(lfGuildBrowseResult); - } - - [WorldPacketHandler(ClientOpcodes.LfGuildDeclineRecruit)] - void HandleGuildFinderDeclineRecruit(LFGuildDeclineRecruit lfGuildDeclineRecruit) - { - if (!GetPlayer().GetGuild()) - return; - - if (!lfGuildDeclineRecruit.RecruitGUID.IsPlayer()) - return; - - Global.GuildFinderMgr.RemoveMembershipRequest(lfGuildDeclineRecruit.RecruitGUID, GetPlayer().GetGuild().GetGUID()); - } - - [WorldPacketHandler(ClientOpcodes.LfGuildGetApplications)] - void HandleGuildFinderGetApplications(LFGuildGetApplications lfGuildGetApplications) - { - List applicatedGuilds = Global.GuildFinderMgr.GetAllMembershipRequestsForPlayer(GetPlayer().GetGUID()); - LFGuildApplications lfGuildApplications = new(); - lfGuildApplications.NumRemaining = 10 - Global.GuildFinderMgr.CountRequestsFromPlayer(GetPlayer().GetGUID()); - - for (var i = 0; i < applicatedGuilds.Count; ++i) - { - MembershipRequest application = applicatedGuilds[i]; - LFGuildApplicationData applicationData = new(); - - Guild guild = Global.GuildMgr.GetGuildByGuid(application.GetGuildGuid()); - LFGuildSettings guildSettings = Global.GuildFinderMgr.GetGuildSettings(application.GetGuildGuid()); - - applicationData.GuildGUID = application.GetGuildGuid(); - applicationData.GuildVirtualRealm = Global.WorldMgr.GetVirtualRealmAddress(); - applicationData.GuildName = guild.GetName(); - applicationData.ClassRoles = guildSettings.GetClassRoles(); - applicationData.PlayStyle = guildSettings.GetInterests(); - applicationData.Availability = guildSettings.GetAvailability(); - applicationData.SecondsSinceCreated = (uint)(GameTime.GetGameTime() - application.GetSubmitTime()); - applicationData.SecondsUntilExpiration = (uint)(application.GetExpiryTime() - GameTime.GetGameTime()); - applicationData.Comment = application.GetComment(); - - lfGuildApplications.Application.Add(applicationData); - } - - GetPlayer().SendPacket(lfGuildApplications); - } - - [WorldPacketHandler(ClientOpcodes.LfGuildGetGuildPost)] - void HandleGuildFinderGetGuildPost(LFGuildGetGuildPost lfGuildGetGuildPost) - { - Player player = GetPlayer(); - - Guild guild = player.GetGuild(); - if (!guild) // Player must be in guild - return; - - LFGuildPost lfGuildPost = new(); - if (guild.GetLeaderGUID() == player.GetGUID()) - { - LFGuildSettings settings = Global.GuildFinderMgr.GetGuildSettings(guild.GetGUID()); - if (settings == null) - return; - - lfGuildPost.Post.HasValue = true; - lfGuildPost.Post.Value.Active = settings.IsListed(); - lfGuildPost.Post.Value.PlayStyle = settings.GetInterests(); - lfGuildPost.Post.Value.Availability = settings.GetAvailability(); - lfGuildPost.Post.Value.ClassRoles = settings.GetClassRoles(); - lfGuildPost.Post.Value.LevelRange = settings.GetLevel(); - lfGuildPost.Post.Value.Comment = settings.GetComment(); - } - - player.SendPacket(lfGuildPost); - } - - // Lists all recruits for a guild - Misses times - [WorldPacketHandler(ClientOpcodes.LfGuildGetRecruits)] - void HandleGuildFinderGetRecruits(LFGuildGetRecruits lfGuildGetRecruits) - { - Player player = GetPlayer(); - Guild guild = player.GetGuild(); - if (!guild) - return; - - long now = GameTime.GetGameTime(); - LFGuildRecruits lfGuildRecruits = new(); - lfGuildRecruits.UpdateTime = now; - var recruitsList = Global.GuildFinderMgr.GetAllMembershipRequestsForGuild(guild.GetGUID()); - if (recruitsList != null) - { - foreach (var recruitRequestPair in recruitsList) - { - LFGuildRecruitData recruitData = new(); - recruitData.RecruitGUID = recruitRequestPair.Key; - recruitData.RecruitVirtualRealm = Global.WorldMgr.GetVirtualRealmAddress(); - recruitData.Comment = recruitRequestPair.Value.GetComment(); - recruitData.ClassRoles = recruitRequestPair.Value.GetClassRoles(); - recruitData.PlayStyle = recruitRequestPair.Value.GetInterests(); - recruitData.Availability = recruitRequestPair.Value.GetAvailability(); - recruitData.SecondsSinceCreated = (uint)(now - recruitRequestPair.Value.GetSubmitTime()); - recruitData.SecondsUntilExpiration = (uint)(recruitRequestPair.Value.GetExpiryTime() - now); - - CharacterCacheEntry charInfo = Global.CharacterCacheStorage.GetCharacterCacheByGuid(recruitRequestPair.Key); - if (charInfo != null) - { - recruitData.Name = charInfo.Name; - recruitData.CharacterClass = (byte)charInfo.ClassId; - recruitData.CharacterGender = (byte)charInfo.Sex; - recruitData.CharacterLevel = charInfo.Level; - } - - lfGuildRecruits.Recruits.Add(recruitData); - } - } - - player.SendPacket(lfGuildRecruits); - } - - [WorldPacketHandler(ClientOpcodes.LfGuildRemoveRecruit)] - void HandleGuildFinderRemoveRecruit(LFGuildRemoveRecruit lfGuildRemoveRecruit) - { - if (!lfGuildRemoveRecruit.GuildGUID.IsGuild()) - return; - - Global.GuildFinderMgr.RemoveMembershipRequest(GetPlayer().GetGUID(), lfGuildRemoveRecruit.GuildGUID); - } - - // Sent any time a guild master sets an option in the interface and when listing / unlisting his guild - [WorldPacketHandler(ClientOpcodes.LfGuildSetGuildPost)] - void HandleGuildFinderSetGuildPost(LFGuildSetGuildPost lfGuildSetGuildPost) - { - // Level sent is zero if untouched, force to any (from interface). Idk why - if (lfGuildSetGuildPost.LevelRange == 0) - lfGuildSetGuildPost.LevelRange = (uint)GuildFinderOptionsLevel.Any; - - if (!lfGuildSetGuildPost.ClassRoles.HasAnyFlag((uint)GuildFinderOptionsRoles.All) || lfGuildSetGuildPost.ClassRoles > (uint)GuildFinderOptionsRoles.All) - return; - if (!lfGuildSetGuildPost.Availability.HasAnyFlag((uint)GuildFinderOptionsAvailability.Always) || lfGuildSetGuildPost.Availability > (uint)GuildFinderOptionsAvailability.Always) - return; - if (!lfGuildSetGuildPost.PlayStyle.HasAnyFlag((uint)GuildFinderOptionsInterest.All) || lfGuildSetGuildPost.PlayStyle > (uint)GuildFinderOptionsInterest.All) - return; - if (!lfGuildSetGuildPost.LevelRange.HasAnyFlag((uint)GuildFinderOptionsLevel.All) || lfGuildSetGuildPost.LevelRange > (uint)GuildFinderOptionsLevel.All) - return; - - Player player = GetPlayer(); - - if (player.GetGuildId() == 0) // Player must be in guild - return; - - Guild guild = Global.GuildMgr.GetGuildById(player.GetGuildId()); - if (guild == null) - return; - - if (guild.GetLeaderGUID() != player.GetGUID()) - return; - - LFGuildSettings settings = new(lfGuildSetGuildPost.Active, (uint)player.GetTeam(), player.GetGuild().GetGUID(), lfGuildSetGuildPost.ClassRoles, - lfGuildSetGuildPost.Availability, lfGuildSetGuildPost.PlayStyle, lfGuildSetGuildPost.LevelRange, lfGuildSetGuildPost.Comment); - Global.GuildFinderMgr.SetGuildSettings(player.GetGuild().GetGUID(), settings); - } - } -} diff --git a/Source/Game/Networking/Packets/GuildFinderPackets.cs b/Source/Game/Networking/Packets/GuildFinderPackets.cs deleted file mode 100644 index 345aa15a4..000000000 --- a/Source/Game/Networking/Packets/GuildFinderPackets.cs +++ /dev/null @@ -1,343 +0,0 @@ -/* - * Copyright (C) 2012-2020 CypherCore - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using Framework.Constants; -using Framework.Dynamic; -using Game.Entities; -using System; -using System.Collections.Generic; - -namespace Game.Networking.Packets -{ - class LFGuildAddRecruit : ClientPacket - { - public LFGuildAddRecruit(WorldPacket packet) : base(packet) { } - - public override void Read() - { - GuildGUID = _worldPacket.ReadPackedGuid(); - PlayStyle = _worldPacket.ReadUInt32(); - Availability = _worldPacket.ReadUInt32(); - ClassRoles = _worldPacket.ReadUInt32(); - Comment = _worldPacket.ReadString(_worldPacket.ReadBits(10)); - } - - public ObjectGuid GuildGUID; - public uint Availability; - public uint ClassRoles; - public uint PlayStyle; - public string Comment; - } - - class LFGuildApplicationsListChanged : ServerPacket - { - public LFGuildApplicationsListChanged() : base(ServerOpcodes.LfGuildApplicationsListChanged) { } - - public override void Write() { } - } - - class LFGuildApplicantListChanged : ServerPacket - { - public LFGuildApplicantListChanged() : base(ServerOpcodes.LfGuildApplicantListChanged) { } - - public override void Write() { } - } - - class LFGuildBrowse : ClientPacket - { - public LFGuildBrowse(WorldPacket packet) : base(packet) { } - - public override void Read() - { - PlayStyle = _worldPacket.ReadUInt32(); - Availability = _worldPacket.ReadUInt32(); - ClassRoles = _worldPacket.ReadUInt32(); - CharacterLevel = _worldPacket.ReadUInt32(); - } - - public uint CharacterLevel; - public uint Availability; - public uint ClassRoles; - public uint PlayStyle; - } - - class LFGuildBrowseResult : ServerPacket - { - public LFGuildBrowseResult() : base(ServerOpcodes.LfGuildBrowse) { } - - public override void Write() - { - _worldPacket.WriteInt32(Post.Count); - foreach (LFGuildBrowseData guildData in Post) - guildData.Write(_worldPacket); - } - - public List Post = new(); - } - - class LFGuildDeclineRecruit : ClientPacket - { - public LFGuildDeclineRecruit(WorldPacket packet) : base(packet) { } - - public override void Read() - { - RecruitGUID = _worldPacket.ReadPackedGuid(); - } - - public ObjectGuid RecruitGUID; - } - - class LFGuildGetApplications : ClientPacket - { - public LFGuildGetApplications(WorldPacket packet) : base(packet) { } - - public override void Read() { } - } - - class LFGuildApplications : ServerPacket - { - public LFGuildApplications() : base(ServerOpcodes.LfGuildApplications) { } - - public override void Write() - { - _worldPacket.WriteInt32(NumRemaining); - _worldPacket.WriteInt32(Application.Count); - foreach (LFGuildApplicationData application in Application) - application.Write(_worldPacket); - } - - public List Application = new(); - public int NumRemaining; - } - - class LFGuildGetGuildPost : ClientPacket - { - public LFGuildGetGuildPost(WorldPacket packet) : base(packet) { } - - public override void Read() { } - } - - class LFGuildPost : ServerPacket - { - public LFGuildPost() : base(ServerOpcodes.LfGuildPost) { } - - public override void Write() - { - _worldPacket.WriteBit(Post.HasValue); - _worldPacket.FlushBits(); - if (Post.HasValue) - Post.Value.Write(_worldPacket); - } - - public Optional Post; - } - - class LFGuildGetRecruits : ClientPacket - { - public LFGuildGetRecruits(WorldPacket packet) : base(packet) { } - - public override void Read() - { - LastUpdate = _worldPacket.ReadInt64(); - } - - public long LastUpdate; - } - - class LFGuildRecruits : ServerPacket - { - public LFGuildRecruits() : base(ServerOpcodes.LfGuildRecruits) { } - - public override void Write() - { - _worldPacket.WriteInt32(Recruits.Count); - _worldPacket.WriteInt64(UpdateTime); - foreach (LFGuildRecruitData recruit in Recruits) - recruit.Write(_worldPacket); - } - - public List Recruits = new(); - public long UpdateTime; - } - - class LFGuildRemoveRecruit : ClientPacket - { - public LFGuildRemoveRecruit(WorldPacket packet) : base(packet) { } - - public override void Read() - { - GuildGUID = _worldPacket.ReadPackedGuid(); - } - - public ObjectGuid GuildGUID; - } - - class LFGuildSetGuildPost : ClientPacket - { - public LFGuildSetGuildPost(WorldPacket packet) : base(packet) { } - - public override void Read() - { - PlayStyle = _worldPacket.ReadUInt32(); - Availability = _worldPacket.ReadUInt32(); - ClassRoles = _worldPacket.ReadUInt32(); - LevelRange = _worldPacket.ReadUInt32(); - Active = _worldPacket.HasBit(); - Comment = _worldPacket.ReadString(_worldPacket.ReadBits(10)); - } - - public uint Availability; - public uint PlayStyle; - public uint ClassRoles; - public uint LevelRange; - public bool Active; - public string Comment; - } - - //Structs - - class LFGuildBrowseData - { - public void Write(WorldPacket data) - { - data.WriteBits(GuildName.GetByteCount(), 7); - data.WriteBits(Comment.GetByteCount(), 10); - data.WritePackedGuid(GuildGUID); - data.WriteUInt32(GuildVirtualRealm); - data.WriteInt32(GuildMembers); - data.WriteUInt32(GuildAchievementPoints); - data.WriteInt32(PlayStyle); - data.WriteInt32(Availability); - data.WriteInt32(ClassRoles); - data.WriteInt32(LevelRange); - data.WriteUInt32(EmblemStyle); - data.WriteUInt32(EmblemColor); - data.WriteUInt32(BorderStyle); - data.WriteUInt32(BorderColor); - data.WriteUInt32(Background); - data.WriteInt8(Cached); - data.WriteInt8(MembershipRequested); - data.WriteString(GuildName); - data.WriteString(Comment); - } - - public string GuildName = ""; - public ObjectGuid GuildGUID; - public uint GuildVirtualRealm; - public int GuildMembers; - public uint GuildAchievementPoints; - public int PlayStyle; - public int Availability; - public int ClassRoles; - public int LevelRange; - public uint EmblemStyle; - public uint EmblemColor; - public uint BorderStyle; - public uint BorderColor; - public uint Background; - public string Comment = ""; - public sbyte Cached; - public sbyte MembershipRequested; - } - - class LFGuildApplicationData - { - public void Write(WorldPacket data) - { - data.WritePackedGuid(GuildGUID); - data.WriteUInt32(GuildVirtualRealm); - data.WriteInt32(ClassRoles); - data.WriteInt32(PlayStyle); - data.WriteInt32(Availability); - data.WriteUInt32(SecondsSinceCreated); - data.WriteUInt32(SecondsUntilExpiration); - data.WriteBits(GuildName.GetByteCount(), 7); - data.WriteBits(Comment.GetByteCount(), 10); - data.FlushBits(); - data.WriteString(GuildName); - data.WriteString(Comment); - } - - public ObjectGuid GuildGUID; - public uint GuildVirtualRealm; - public string GuildName = ""; - public int ClassRoles; - public int PlayStyle; - public int Availability; - public uint SecondsSinceCreated; - public uint SecondsUntilExpiration; - public string Comment = ""; - } - - class GuildPostData - { - public void Write(WorldPacket data) - { - data.WriteBit(Active); - data.WriteBits(Comment.GetByteCount(), 10); - data.WriteInt32(PlayStyle); - data.WriteInt32(Availability); - data.WriteInt32(ClassRoles); - data.WriteInt32(LevelRange); - data.WriteInt32(SecondsRemaining); - data.WriteString(Comment); - } - - public bool Active; - public int PlayStyle; - public int Availability; - public int ClassRoles; - public int LevelRange; - public int SecondsRemaining; - public string Comment = ""; - } - - class LFGuildRecruitData - { - public void Write(WorldPacket data) - { - data.WritePackedGuid(RecruitGUID); - data.WriteUInt32(RecruitVirtualRealm); - data.WriteInt32(CharacterClass); - data.WriteInt32(CharacterGender); - data.WriteInt32(CharacterLevel); - data.WriteInt32(ClassRoles); - data.WriteInt32(PlayStyle); - data.WriteInt32(Availability); - data.WriteUInt32(SecondsSinceCreated); - data.WriteUInt32(SecondsUntilExpiration); - data.WriteBits(Name.GetByteCount(), 6); - data.WriteBits(Comment.GetByteCount(), 10); - data.FlushBits(); - data.WriteString(Name); - data.WriteString(Comment); - } - - public ObjectGuid RecruitGUID; - public string Name = ""; - public uint RecruitVirtualRealm; - public string Comment = ""; - public int CharacterClass; - public int CharacterGender; - public int CharacterLevel; - public int ClassRoles; - public int PlayStyle; - public int Availability; - public uint SecondsSinceCreated; - public uint SecondsUntilExpiration; - } -} diff --git a/Source/Game/Server/WorldManager.cs b/Source/Game/Server/WorldManager.cs index efc0f3dc3..e9cdcd741 100644 --- a/Source/Game/Server/WorldManager.cs +++ b/Source/Game/Server/WorldManager.cs @@ -818,7 +818,6 @@ namespace Game Log.outInfo(LogFilter.ServerLoading, "Loading Guilds..."); Global.GuildMgr.LoadGuilds(); - Global.GuildFinderMgr.LoadFromDB(); Log.outInfo(LogFilter.ServerLoading, "Loading ArenaTeams..."); Global.ArenaTeamMgr.LoadArenaTeams();