private void Initialize() { try { var logManager = Sahara.GetServer().GetLogManager(); var stopwatch = Stopwatch.StartNew(); using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); mysqlConnection.SetQuery("SELECT * FROM `badge_definitions`"); var badgeTable = mysqlConnection.GetTable(); foreach (DataRow badge in badgeTable.Rows) { var badgeCode = Convert.ToString(badge["code"]).ToUpper(); if (!_badges.ContainsKey(badgeCode)) { _badges.Add(badgeCode, new BadgeDefinition(badgeCode, Convert.ToString(badge["required_right"]))); } } mysqlConnection.CloseConnection(); } stopwatch.Stop(); logManager.Log("Loaded Badge Manager [" + stopwatch.ElapsedMilliseconds + "ms]", LogType.Information); } catch (Exception) { // ignored } }
private bool BanValueFound(string banValue, out ModerationBan moderationBan) { if (!_moderationBans.TryGetValue(banValue, out moderationBan)) { moderationBan = null; return(false); } if (!moderationBan.HasExpired) { return(true); } using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); mysqlConnection.AddParameter("type", moderationBan.BanType == ModerationBanType.ByIp ? "ip" : moderationBan.BanType == ModerationBanType.ByMachine ? "machine" : "username"); mysqlConnection.AddParameter("value", banValue); mysqlConnection.SetQuery("DELETE FROM `bans` WHERE `bantype` = @type AND `value` = @value LIMIT 1"); mysqlConnection.RunQuery(); mysqlConnection.CloseConnection(); } if (_moderationBans.ContainsKey(banValue)) { _moderationBans.Remove(banValue); } return(false); }
public PacketManager() { _IncomingPackets = new Dictionary <int, IPacket>(); _logManager = Sahara.GetServer().GetLogManager(); AddPackets(); }
public bool MachineBanFound(string machineId) { ModerationBan machineBan; if (!BanValueFound(machineId, out machineBan)) { return(true); } using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); mysqlConnection.AddParameter("value", machineId); mysqlConnection.SetQuery("SELECT * FROM `bans` WHERE `bantype` = 'machine' AND `value` = @value LIMIT 1"); var banRow = mysqlConnection.GetRow(); if (banRow != null) { return(true); } mysqlConnection.CloseConnection(); RemoveBan(machineId); return(false); } }
private void LoadRoomModels(bool clearBefore = false) { if (clearBefore && _roomModels.Count > 0) { _roomModels.Clear(); } using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); mysqlConnection.SetQuery("SELECT `id`, `door_x`, `door_y`, `door_z`, `door_dir`, `heightmap`, `public_items`, `club_only`, `poolmap`, `wall_height` FROM `room_models` WHERE `custom` = '0'"); var roomModelsTable = mysqlConnection.GetTable(); if (roomModelsTable == null) { return; } foreach (DataRow roomModelRow in roomModelsTable.Rows) { _roomModels.Add(Convert.ToString(roomModelRow["id"]), new RoomModel(Convert.ToInt32(roomModelRow["door_x"]), Convert.ToInt32(roomModelRow["door_y"]), Convert.ToDouble(roomModelRow["door_z"]), Convert.ToInt32(roomModelRow["door_dir"]), Convert.ToString(roomModelRow["heightmap"]), Convert.ToString(roomModelRow["public_items"]), Convert.ToInt32(roomModelRow["club_only"]).ToString() == "1", Convert.ToString(roomModelRow["poolmap"]), Convert.ToInt32(roomModelRow["wall_height"]))); } mysqlConnection.CloseConnection(); } }
public Player(Socket playerSocket) { _playerSocket = playerSocket; _playerPacketHandler = new PlayerPacketHandler(this); _buffer = new byte[8000]; _logManager = Sahara.GetServer().GetLogManager(); }
public void AddBan(string moderatorUsername, ModerationBanType banType, string banValue, string banReason, double expireTimestamp) { var type = (banType == ModerationBanType.ByIp ? "ip" : banType == ModerationBanType.ByMachine ? "machine" : "user"); using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); mysqlConnection.AddParameter("banType", type); mysqlConnection.AddParameter("banValue", banValue); mysqlConnection.AddParameter("reason", banReason); mysqlConnection.AddParameter("expireTimestamp", expireTimestamp); mysqlConnection.AddParameter("moderatorUsername", moderatorUsername); mysqlConnection.AddParameter("addedTimestamp", UnixTimestampGenerator.GetNow()); mysqlConnection.SetQuery("REPLACE INTO `bans` (`bantype`, `value`, `reason`, `expire`, `added_by`, `added_date`) VALUES (@banType, @banValue, @reason, @expireTimestamp, @moderatorUsername, @addedTimestamp)"); mysqlConnection.RunQuery(); mysqlConnection.CloseConnection(); } if (banType != ModerationBanType.ByMachine && banType != ModerationBanType.ByUsername) { return; } if (!_moderationBans.ContainsKey(banValue)) { _moderationBans.Add(banValue, new ModerationBan(banType, banValue, banReason, expireTimestamp)); } }
private void OnAcceptConnection(IAsyncResult asyncResult) { try { if (_serverSocket == null) { return; } var server = (Socket)asyncResult.AsyncState; var client = server.EndAccept(asyncResult); var newPlayer = new Player(client); if (!Sahara.GetServer().GetGameManager().GetPlayerManager().TryAddPlayer(newPlayer)) { _logManager.Log("Error trying to add player.", LogType.Error); } } catch (SocketException socketException) { var method = System.Reflection.MethodBase.GetCurrentMethod().Name; _logManager.Log("Error in " + method + ": " + socketException.Message, LogType.Error); _logManager.Log(socketException.StackTrace, LogType.Error); } finally { _serverSocket?.BeginAccept(OnAcceptConnection, _serverSocket); } }
public PlayerProcessor(Player player) { _player = player; _timerInterval = 60000; _logManager = Sahara.GetServer().GetLogManager(); _resetEvent = new AutoResetEvent(true); _processTimer = new Timer(OnProcess, null, _timerInterval, _timerInterval); }
public ServerStatusUpdater() { var stopwatch = Stopwatch.StartNew(); _secondsInterval = 1; _serverStatusUpdateTimer = new Timer(Update, null, _secondsInterval, _secondsInterval); stopwatch.Stop(); Sahara.GetServer().GetLogManager().Log("Loaded Server Updater [" + stopwatch.ElapsedMilliseconds + "ms]", LogType.Information); }
public AchievementManager() { var stopwatch = Stopwatch.StartNew(); this._achievements = new Dictionary <string, Achievement>(); AchievementLoader.TryGetAllAchievements(out _achievements); stopwatch.Stop(); Sahara.GetServer().GetLogManager().Log("Loaded Achievement Manager [" + stopwatch.ElapsedMilliseconds + "ms]", LogType.Information); }
public PermissionManager() { _permissions = new Dictionary <int, Permission>(); _permissionCommands = new Dictionary <string, PermissionCommand>(); _permissionGroups = new Dictionary <int, PermissionGroup>(); _permissionGroupRights = new Dictionary <int, List <string> >(); _permissionSubscriptionRights = new Dictionary <int, List <string> >(); _logManager = Sahara.GetServer().GetLogManager(); InitializePermissions(); }
public static bool TryGetAllAchievements(out Dictionary <string, Achievement> achievements) { try { achievements = new Dictionary <string, Achievement>(); using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); mysqlConnection.SetQuery("SELECT `id`, `category`, `group_name`, `level`, `reward_pixels`, `reward_points`, `progress_needed`, `game_id` FROM `achievements`"); var achievementTable = mysqlConnection.GetTable(); if (achievementTable == null) { achievements = null; return(false); } foreach (DataRow achievement in achievementTable.Rows) { var achievementId = Convert.ToInt32(achievement["id"]); var achievementCategory = Convert.ToString(achievement["category"]); var achievementGroupName = Convert.ToString(achievement["group_name"]); var achievementLevelId = Convert.ToInt32(achievement["level"]); var achievementLevelPixels = Convert.ToInt32(achievement["reward_pixels"]); var achievementLevelPoints = Convert.ToInt32(achievement["reward_points"]); var progressionRequires = Convert.ToInt32(achievement["progress_needed"]); var achievementGameId = Convert.ToInt32(achievement["game_id"]); var achievementLevel = new AchievementLevel(achievementLevelId, achievementLevelPixels, achievementLevelPoints, progressionRequires); if (!achievements.ContainsKey(achievementGroupName)) { var newAchievement = new Achievement(achievementId, achievementCategory, achievementGroupName, achievementGameId); newAchievement.AddNewLevel(achievementLevel); achievements.Add(achievementGroupName, newAchievement); } else { achievements[achievementGroupName].AddNewLevel(achievementLevel); } } mysqlConnection.CloseConnection(); } return(true); } catch (Exception) { achievements = null; return(false); } }
public SocketManager() { var stopwatch = Stopwatch.StartNew(); _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _logManager = Sahara.GetServer().GetLogManager(); Listen(); stopwatch.Stop(); _logManager.Log("Loaded Socket Manager [" + stopwatch.ElapsedMilliseconds + "ms]", LogType.Information); }
public RoomManager() { var stopwatch = Stopwatch.StartNew(); _roomModels = new Dictionary <string, RoomModel>(); _rooms = new ConcurrentDictionary <int, Room>(); _roomInformation = new ConcurrentDictionary <int, RoomInformation>(); LoadRoomModels(); stopwatch.Stop(); Sahara.GetServer().GetLogManager().Log("Loaded Room Manager [" + stopwatch.ElapsedMilliseconds + "ms]", LogType.Information); }
private void LoadModeration() { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); LoadModerationPresets(mysqlConnection); LoadModerationCategorys(mysqlConnection); LoadModerationMessages(mysqlConnection); LoadModerationBans(mysqlConnection); mysqlConnection.CloseConnection(); } }
public static bool TryGetData(Player player, out PlayerData playerData) { try { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); mysqlConnection.SetQuery("SELECT * FROM `users` WHERE `id` = '1' LIMIT 1"); //mysqlConnection.AddParameter("ticket", 1); var playerDataRow = mysqlConnection.GetRow(); if (playerDataRow == null) { Sahara.GetServer().GetLogManager().Log(player.AuthTicket + "", LogType.Warning); playerData = null; return(false); } var p = new PlayerData(player, 1, "", "", "", 0, 0, 0, "100,100,100", true, true, true, 1); playerData = p; if (CachedPlayerData.ContainsKey(Convert.ToInt32(playerDataRow["id"]))) { PlayerData tempData = null; CachedPlayerData.TryRemove(Convert.ToInt32(playerDataRow["id"]), out tempData); tempData = null; } CachedPlayerData.TryAdd(Convert.ToInt32(playerDataRow["id"]), playerData); mysqlConnection.CloseConnection(); } return(true); } catch (Exception exception) { var logManager = Sahara.GetServer().GetLogManager(); var method = System.Reflection.MethodBase.GetCurrentMethod().Name; logManager.Log($"Error in {method}: {exception.Message}", LogType.Warning); logManager.Log(exception.StackTrace, LogType.Warning); playerData = null; return(false); } }
private void InitializePermissions() { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); LoadPermissions(mysqlConnection); LoadCommandPermissions(mysqlConnection); LoadPermissionGroups(mysqlConnection); LoadPermissionRights(mysqlConnection); LoadPermissionSubscriptions(mysqlConnection); mysqlConnection.CloseConnection(); } }
private void Update(object obj) { if ((DateTime.Now - _lastUpdate).TotalSeconds <= _secondsInterval) { return; } var serverUptime = DateTime.Now - Sahara.GetServer().StartedTime; var days = serverUptime.Days + " day" + (serverUptime.Days != 1 ? "s" : "") + ", "; var hours = serverUptime.Hours + " hour" + (serverUptime.Hours != 1 ? "s" : "") + ", and "; var minutes = serverUptime.Minutes + " minute" + (serverUptime.Minutes != 1 ? "s" : ""); var uptimeString = days + hours + minutes; Console.Title = Sahara.GetServer().GetServerInformation().ServerName + " - Uptime: " + uptimeString; _lastUpdate = DateTime.Now; }
private void LoadQuests() { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); try { if (_playerQuests.Count >= 1) { return; } mysqlConnection.AddParameter("userId", _playerId); mysqlConnection.SetQuery("SELECT `quest_id`,`progress` FROM `user_quests` WHERE `user_id` = @userId"); var questsTable = mysqlConnection.GetTable(); if (questsTable == null) { return; } foreach (DataRow quest in questsTable.Rows) { var questId = Convert.ToInt32(quest["quest_id"]); if (_playerQuests.ContainsKey(questId)) { _playerQuests.Remove(questId); } _playerQuests.Add(questId, Convert.ToInt32(quest["progress"])); } } catch (Exception exception) { var method = System.Reflection.MethodBase.GetCurrentMethod().Name; _logManager.Log($"Error in {method}: {exception.Message}", LogType.Error); _logManager.Log(exception.StackTrace, LogType.Error); } finally { mysqlConnection.CloseConnection(); } } }
private void LoadRelationships() { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); try { mysqlConnection.AddParameter("userId", _playerId); mysqlConnection.SetQuery( "SELECT `id`, `target`, `type` FROM `user_relationships` WHERE `user_id` = @userId"); var relationshipsTable = mysqlConnection.GetTable(); if (relationshipsTable == null) { return; } foreach (DataRow relationship in relationshipsTable.Rows) { if (_playerRelationships.ContainsKey(Convert.ToInt32(relationship["id"]))) { continue; } _playerRelationships.Add(Convert.ToInt32(relationship["target"]), new PlayerRelationship(Convert.ToInt32(relationship["id"]), Convert.ToInt32(relationship["target"]), (PlayerRelationshipType)Convert.ToInt32(relationship["type"].ToString()))); } } catch (Exception exception) { var method = System.Reflection.MethodBase.GetCurrentMethod().Name; _logManager.Log($"Error in {method}: {exception.Message}", LogType.Error); _logManager.Log(exception.StackTrace, LogType.Error); } finally { mysqlConnection.CloseConnection(); } } }
private void LoadAchievements() { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { try { mysqlConnection.OpenConnection(); if (!_playerAchievements.IsEmpty) { return; } mysqlConnection.SetQuery("SELECT `group`,`level`,`progress` FROM `user_achievements` WHERE `userid` = @userid"); mysqlConnection.AddParameter("userid", _playerId); var achievementsTable = mysqlConnection.GetTable(); if (achievementsTable == null) { return; } foreach (DataRow achievemenRow in achievementsTable.Rows) { _playerAchievements.TryAdd(Convert.ToString(achievemenRow["group"]), new PlayerAchievement(Convert.ToString(achievemenRow["group"]), Convert.ToInt32(achievemenRow["level"]), Convert.ToInt32(achievemenRow["progress"]))); } } catch (Exception exception) { var method = System.Reflection.MethodBase.GetCurrentMethod().Name; _logManager.Log($"Error in {method}: {exception.Message}", LogType.Error); _logManager.Log(exception.StackTrace, LogType.Error); } finally { mysqlConnection.CloseConnection(); } } }
public PlayerData(Player player, int playerId, string username, string motto, string look, int homeRoom, int rank, int achievementScore, string clientVolume, bool chatPreference, bool allowMessengerInvites, bool focusPreference, int vipRank) { _player = player; _playerId = playerId; _username = username; _motto = motto; _look = look; _homeRoom = homeRoom; _rank = rank; _achievementScore = achievementScore; _clientVolumes = new List <int>(); _chatPreference = chatPreference; _allowMessengerInvites = allowMessengerInvites; _focusPreference = focusPreference; _vipRank = vipRank; _permissionManagement = new PermissionManagement(_player); _playerAchievements = new ConcurrentDictionary <string, PlayerAchievement>(); _favouriteRoomIds = new List <int>(); _mutedUsers = new List <int>(); _badgeManagement = new BadgeManagement(_player); _inventoryManagement = new InventoryManagement(_player); _playerQuests = new Dictionary <int, int>(); _playerBuddies = new Dictionary <int, MessengerBuddy>(); _playersRooms = new List <RoomInformation>(); _playerRelationships = new Dictionary <int, PlayerRelationship>(); _effectManagement = new EffectManagement(_player); _clothingManagement = new ClothingManagement(_player); _logManager = Sahara.GetServer().GetLogManager(); _processor = new PlayerProcessor(_player); foreach (var volumeString in clientVolume.Split(',')) { if (string.IsNullOrEmpty(volumeString)) { continue; } var volumeValue = 0; _clientVolumes.Add(int.TryParse(volumeString, out volumeValue) ? int.Parse(volumeString) : 100); } }
private void LoadRooms() { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); try { mysqlConnection.AddParameter("userId", _playerId); mysqlConnection.SetQuery("SELECT * FROM `rooms` WHERE `owner` = @userId LIMIT 200"); var roomsTable = mysqlConnection.GetTable(); if (roomsTable == null) { return; } foreach (DataRow playerRoom in roomsTable.Rows) { RoomInformation roomInformation; if (Sahara.GetServer().GetGameManager().GetRoomManager().TryGetRoomInformation(Convert.ToInt32(playerRoom["id"]), out roomInformation)) { _playersRooms.Add(roomInformation); } } } catch (Exception exception) { var method = System.Reflection.MethodBase.GetCurrentMethod().Name; _logManager.Log($"Error in {method}: {exception.Message}", LogType.Error); _logManager.Log(exception.StackTrace, LogType.Error); } finally { mysqlConnection.CloseConnection(); } } }
public void LoadClothingParts() { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); mysqlConnection.AddParameter("id", _player.GetPlayerData().PlayerId); mysqlConnection.SetQuery("SELECT `id`, `part_id`, `part` FROM `user_clothing` WHERE `user_id` = @id"); var clothingTable = mysqlConnection.GetTable(); if (clothingTable == null) { return; } foreach (DataRow clothing in clothingTable.Rows) { _clothingParts.TryAdd(Convert.ToInt32(clothing["part_id"]), new ClothingParts(Convert.ToInt32(clothing["id"]), Convert.ToString(clothing["part"]), Convert.ToInt32(clothing["part_id"]))); } mysqlConnection.CloseConnection(); } }
private void LoadIgnores() { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { try { mysqlConnection.OpenConnection(); if (_mutedUsers.Count >= 1) { return; } mysqlConnection.AddParameter("userId", _playerId); mysqlConnection.SetQuery("SELECT `ignore_id` FROM `user_ignores` WHERE `user_id` = @userId"); var mutedUsersTable = mysqlConnection.GetTable(); if (mutedUsersTable == null) { return; } foreach (DataRow mutedUser in mutedUsersTable.Rows) { _mutedUsers.Add(Convert.ToInt32(mutedUser["ignore_id"])); } } catch (Exception exception) { var method = System.Reflection.MethodBase.GetCurrentMethod().Name; _logManager.Log($"Error in {method}: {exception.Message}", LogType.Error); _logManager.Log(exception.StackTrace, LogType.Error); } finally { mysqlConnection.CloseConnection(); } } }
public void LoadEffects() { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); mysqlConnection.AddParameter("id", _player.GetPlayerData().PlayerId); mysqlConnection.SetQuery("SELECT * FROM `user_effects` WHERE `user_id` = @id"); var effectsTable = mysqlConnection.GetTable(); if (effectsTable == null) { return; } foreach (DataRow effect in effectsTable.Rows) { _effects.TryAdd(Convert.ToInt32(effect["id"]), new Effect(Convert.ToInt32(effect["id"]), Convert.ToInt32(effect["effect_id"]), Convert.ToDouble(effect["total_duration"]), Convert.ToInt32(effect["is_activated"]).ToString() == "1", Convert.ToDouble(effect["activated_stamp"]), Convert.ToInt32(effect["quantity"]))); } mysqlConnection.CloseConnection(); } }
public ConfigManager(string configFile) { _configItems = new Dictionary <string, string>(); var logManager = Sahara.GetServer().GetLogManager(); try { if (File.Exists(configFile)) { var stopwatch = Stopwatch.StartNew(); _configItems = File.ReadLines(configFile) .Where(IsConfigurationLine) .Select(line => line.Split('=')) .ToDictionary(line => line[0], line => line[1]); stopwatch.Stop(); logManager.Log("Loaded Config Data [" + stopwatch.ElapsedMilliseconds + "ms]", LogType.Information); } else { _configItems.Add("database.host", "localhost"); _configItems.Add("database.username", "root"); _configItems.Add("database.password", ""); _configItems.Add("database.name", "database"); _configItems.Add("database.port", "3306"); _configItems.Add("database.max_connections", "10000"); logManager.Log("Using config defaults", LogType.Information); } } catch (Exception exception) { var method = System.Reflection.MethodBase.GetCurrentMethod().Name; logManager.Log($"Error in {method}: {exception.Message}", LogType.Error); logManager.Log(exception.StackTrace, LogType.Error); } }
public void GiveBadge(string badgeCode, bool addToDatabase) { if (_playerBadges.ContainsKey(badgeCode)) { return; } BadgeDefinition badgeDefinition; if (!Sahara.GetServer().GetGameManager().GetBadgeManager().TryGetBadge(badgeCode.ToUpper(), out badgeDefinition) || badgeDefinition.PermissionRequired.Length > 0 && !_player.GetPlayerData().GetPermissionManagement().HasPermission(badgeDefinition.PermissionRequired)) { return; } _playerBadges.Add(badgeCode, new Badge(badgeCode, 0)); if (addToDatabase) { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); mysqlConnection.AddParameter("id", _player.GetPlayerData().PlayerId); mysqlConnection.AddParameter("badge", badgeCode); mysqlConnection.SetQuery("INSERT INTO user_badges `user_id`, `badge_id`, `badge_slot` VALUES (@id, @badge, 0)"); mysqlConnection.RunQuery(); mysqlConnection.CloseConnection(); } } if (_player == null) { return; } _player.SendMessage(new BadgesMessageComposer(_player)); _player.SendMessage(new FurniListNotificationMessageComposer(1, 4)); }
private void LoadSubscriptions() { using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection()) { mysqlConnection.OpenConnection(); mysqlConnection.SetQuery("SELECT * FROM `subscriptions`"); var subscriptionTable = mysqlConnection.GetTable(); if (subscriptionTable == null) { return; } foreach (DataRow subscription in subscriptionTable.Rows) { if (!_subscriptions.ContainsKey(Convert.ToInt32(subscription["id"]))) { _subscriptions.Add(Convert.ToInt32(subscription["id"]), new SubscriptionInformation(Convert.ToInt32(subscription["id"]), Convert.ToString(subscription["badge_code"]), Convert.ToString(subscription["name"]), Convert.ToInt32(subscription["credits"]), Convert.ToInt32(subscription["respects"]), Convert.ToInt32(subscription["duckets"]))); } } mysqlConnection.CloseConnection(); } }