//Blizzless Project 2022 //Blizzless Project 2022 using DiIiS_NA.Core.Logging; //Blizzless Project 2022 using DiIiS_NA.Core.Storage; //Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; //Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; //Blizzless Project 2022 using System.Collections.Generic; //Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.LoginServer.GuildSystem { public static class GuildManager { private static readonly Logger Logger = LogManager.CreateLogger(); public readonly static Dictionary Guilds = new Dictionary(); public static void PreLoadGuilds() { //Logger.Info("Loading Diablo III guilds system..."); List all_guilds = DBSessions.SessionQuery(); List all_guild_members = DBSessions.SessionQuery(); List all_guild_news = DBSessions.SessionQuery(); foreach (var dbGuild in all_guilds) { var guild = new Guild(dbGuild); Guilds.Add(guild.PersistentId, guild); foreach (var dbGuildMember in all_guild_members) if (dbGuildMember.DBGuild.Id == guild.PersistentId) { var gacc = GameAccountManager.GetGameAccountByDBGameAccount(dbGuildMember.DBGameAccount); if (guild.IsClan) guild.ParagonRatings.Add(gacc, gacc.DBGameAccount.ParagonLevel); guild.Members.Add(gacc, dbGuildMember); } foreach (var dbGuildNews in all_guild_news) if (dbGuildNews.DBGuild.Id == guild.PersistentId) { if (dbGuildNews.Time > guild.NewsTime) guild.NewsTime = dbGuildNews.Time; } } } public static Guild CreateNewGuild(GameAccount owner, string name, string tag, bool isClan, uint category, bool isLFM, uint language) { if (DBSessions.SessionQueryWhere(g => g.Name == name || (g.Tag != "" && g.Tag == tag)).Count > 0) return null; var newDBGuild = new DBGuild { Name = name, Tag = tag, Description = "", MOTD = "", Category = (int)category, Language = (int)language, IsLFM = isLFM, IsInviteRequired = isClan, Rating = 0, Creator = owner.DBGameAccount, Ranks = D3.Guild.RankList.CreateBuilder() .AddRanks(D3.Guild.Rank.CreateBuilder().SetRankId(1).SetRankOrder(1).SetName("Leader").SetPermissions(4294967295)) .AddRanks(D3.Guild.Rank.CreateBuilder().SetRankId(2).SetRankOrder(2).SetName("Officer").SetPermissions(212943)) .AddRanks(D3.Guild.Rank.CreateBuilder().SetRankId(4).SetRankOrder(4).SetName("Member").SetPermissions(4163)) .Build().ToByteString().ToByteArray(), Disbanded = false }; DBSessions.SessionSave(newDBGuild); var guild = new Guild(newDBGuild); Guilds.Add(guild.PersistentId, guild); guild.AddMember(owner); return guild; } public static Guild GetGuildById(ulong id) { return Guilds.ContainsKey(id) ? Guilds[id] : null; } public static Guild GetGuildByName(string name) { return Guilds.Values.Where(g => g.Name == name).FirstOrDefault(); } public static List GetClans() { return Guilds.Values.Where(g => g.IsClan).ToList(); } public static List GetCommunities() { return Guilds.Values.Where(g => !g.IsClan).ToList(); } public static void ReplicateGuilds(GameAccount account) { if (account.Clan != null) { account.Clan.NotifyChannels(account); } foreach (var guild in account.Communities) guild.NotifyChannels(account); } } }