Core/GuildFinder: Remove as preparation for 9.1.5
Port From (https://github.com/TrinityCore/TrinityCore/commit/edc94e8ae8c5ddd46b53c706161a5511b3a3bcc3)
This commit is contained in:
@@ -259,36 +259,4 @@ namespace Framework.Constants
|
|||||||
public const uint Arena3v3 = 1200000;
|
public const uint Arena3v3 = 1200000;
|
||||||
public const uint Arena5v5 = 2000000;
|
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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_BY_ID, "DELETE FROM character_cuf_profiles WHERE guid = ? AND id = ?");
|
||||||
PrepareStatement(CharStatements.DEL_CHAR_CUF_PROFILES, "DELETE FROM character_cuf_profiles WHERE guid = ?");
|
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
|
// 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");
|
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_BY_ID,
|
||||||
DEL_CHAR_CUF_PROFILES,
|
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,
|
REP_CALENDAR_EVENT,
|
||||||
DEL_CALENDAR_EVENT,
|
DEL_CALENDAR_EVENT,
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ public static class Global
|
|||||||
//Guild
|
//Guild
|
||||||
public static PetitionManager PetitionMgr { get { return PetitionManager.Instance; } }
|
public static PetitionManager PetitionMgr { get { return PetitionManager.Instance; } }
|
||||||
public static GuildManager GuildMgr { get { return GuildManager.Instance; } }
|
public static GuildManager GuildMgr { get { return GuildManager.Instance; } }
|
||||||
public static GuildFinderManager GuildFinderMgr { get { return GuildFinderManager.Instance; } }
|
|
||||||
|
|
||||||
//Social
|
//Social
|
||||||
public static CalendarManager CalendarMgr { get { return CalendarManager.Instance; } }
|
public static CalendarManager CalendarMgr { get { return CalendarManager.Instance; } }
|
||||||
|
|||||||
@@ -142,8 +142,6 @@ namespace Game.Guilds
|
|||||||
|
|
||||||
DB.Characters.CommitTransaction(trans);
|
DB.Characters.CommitTransaction(trans);
|
||||||
|
|
||||||
Global.GuildFinderMgr.DeleteGuild(GetGUID());
|
|
||||||
|
|
||||||
Global.GuildMgr.RemoveGuild(m_id);
|
Global.GuildMgr.RemoveGuild(m_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1587,8 +1585,6 @@ namespace Game.Guilds
|
|||||||
joinNotificationPacket.VirtualRealmAddress = Global.WorldMgr.GetVirtualRealmAddress();
|
joinNotificationPacket.VirtualRealmAddress = Global.WorldMgr.GetVirtualRealmAddress();
|
||||||
BroadcastPacket(joinNotificationPacket);
|
BroadcastPacket(joinNotificationPacket);
|
||||||
|
|
||||||
Global.GuildFinderMgr.RemoveAllMembershipRequestsFromPlayer(guid);
|
|
||||||
|
|
||||||
// Call scripts if member was succesfully added (and stored to database)
|
// Call scripts if member was succesfully added (and stored to database)
|
||||||
Global.ScriptMgr.OnGuildAddMember(this, player, rankId);
|
Global.ScriptMgr.OnGuildAddMember(this, player, rankId);
|
||||||
|
|
||||||
|
|||||||
@@ -1,517 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2012-2020 CypherCore <http://github.com/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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
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>
|
|
||||||
{
|
|
||||||
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<ulong>(0));
|
|
||||||
byte availability = result.Read<byte>(1);
|
|
||||||
byte classRoles = result.Read<byte>(2);
|
|
||||||
byte interests = result.Read<byte>(3);
|
|
||||||
byte level = result.Read<byte>(4);
|
|
||||||
bool listed = (result.Read<byte>(5) != 0);
|
|
||||||
string comment = result.Read<string>(6);
|
|
||||||
|
|
||||||
uint guildTeam = TeamId.Alliance;
|
|
||||||
ChrRacesRecord raceEntry = CliDB.ChrRacesStorage.LookupByKey(result.Read<byte>(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<ulong>(0));
|
|
||||||
ObjectGuid playerId = ObjectGuid.Create(HighGuid.Player, result.Read<ulong>(1));
|
|
||||||
byte availability = result.Read<byte>(2);
|
|
||||||
byte classRoles = result.Read<byte>(3);
|
|
||||||
byte interests = result.Read<byte>(4);
|
|
||||||
string comment = result.Read<string>(5);
|
|
||||||
long submitTime = result.Read<long>(6);
|
|
||||||
|
|
||||||
MembershipRequest request = new(playerId, guildId, availability, classRoles, interests, comment, submitTime);
|
|
||||||
|
|
||||||
if (!_membershipRequestsByGuild.ContainsKey(guildId))
|
|
||||||
_membershipRequestsByGuild[guildId] = new Dictionary<ObjectGuid, MembershipRequest>();
|
|
||||||
|
|
||||||
_membershipRequestsByGuild[guildId][playerId] = request;
|
|
||||||
|
|
||||||
if (!_membershipRequestsByPlayer.ContainsKey(playerId))
|
|
||||||
_membershipRequestsByPlayer[playerId] = new Dictionary<ObjectGuid, MembershipRequest>();
|
|
||||||
|
|
||||||
_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<ObjectGuid, MembershipRequest>();
|
|
||||||
_membershipRequestsByGuild[guildGuid][request.GetPlayerGUID()] = request;
|
|
||||||
|
|
||||||
if (!_membershipRequestsByPlayer.ContainsKey(request.GetPlayerGUID()))
|
|
||||||
_membershipRequestsByPlayer[request.GetPlayerGUID()] = new Dictionary<ObjectGuid, MembershipRequest>();
|
|
||||||
_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<MembershipRequest> GetAllMembershipRequestsForPlayer(ObjectGuid playerGuid)
|
|
||||||
{
|
|
||||||
List<MembershipRequest> 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<LFGuildSettings> GetGuildsMatchingSetting(LFGuildPlayer settings, uint faction)
|
|
||||||
{
|
|
||||||
List<LFGuildSettings> 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<ObjectGuid, MembershipRequest> GetAllMembershipRequestsForGuild(ObjectGuid guildGuid) { return _membershipRequestsByGuild.LookupByKey(guildGuid); }
|
|
||||||
|
|
||||||
public LFGuildSettings GetGuildSettings(ObjectGuid guildGuid) { return _guildSettings.LookupByKey(guildGuid); }
|
|
||||||
|
|
||||||
Dictionary<ObjectGuid, LFGuildSettings> _guildSettings = new();
|
|
||||||
Dictionary<ObjectGuid, Dictionary<ObjectGuid, MembershipRequest>> _membershipRequestsByGuild = new();
|
|
||||||
Dictionary<ObjectGuid, Dictionary<ObjectGuid, MembershipRequest>> _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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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.
|
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
|
// Shouldn't interfere with character deletion though
|
||||||
|
|
||||||
Global.GuildFinderMgr.RemoveAllMembershipRequestsFromPlayer(charDelete.Guid);
|
|
||||||
Global.CalendarMgr.RemoveAllPlayerEventsAndInvites(charDelete.Guid);
|
Global.CalendarMgr.RemoveAllPlayerEventsAndInvites(charDelete.Guid);
|
||||||
Player.DeleteFromDB(charDelete.Guid, accountId);
|
Player.DeleteFromDB(charDelete.Guid, accountId);
|
||||||
|
|
||||||
|
|||||||
@@ -1,256 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2012-2020 CypherCore <http://github.com/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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
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<MembershipRequest> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,343 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2012-2020 CypherCore <http://github.com/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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
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<uint>(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<LFGuildBrowseData> 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<LFGuildApplicationData> 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<GuildPostData> 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<LFGuildRecruitData> 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<uint>(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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -818,7 +818,6 @@ namespace Game
|
|||||||
Log.outInfo(LogFilter.ServerLoading, "Loading Guilds...");
|
Log.outInfo(LogFilter.ServerLoading, "Loading Guilds...");
|
||||||
Global.GuildMgr.LoadGuilds();
|
Global.GuildMgr.LoadGuilds();
|
||||||
|
|
||||||
Global.GuildFinderMgr.LoadFromDB();
|
|
||||||
|
|
||||||
Log.outInfo(LogFilter.ServerLoading, "Loading ArenaTeams...");
|
Log.outInfo(LogFilter.ServerLoading, "Loading ArenaTeams...");
|
||||||
Global.ArenaTeamMgr.LoadArenaTeams();
|
Global.ArenaTeamMgr.LoadArenaTeams();
|
||||||
|
|||||||
Reference in New Issue
Block a user