Пример #1
0
        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
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        public PacketManager()
        {
            _IncomingPackets = new Dictionary <int, IPacket>();
            _logManager      = Sahara.GetServer().GetLogManager();

            AddPackets();
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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();
            }
        }
Пример #6
0
 public Player(Socket playerSocket)
 {
     _playerSocket        = playerSocket;
     _playerPacketHandler = new PlayerPacketHandler(this);
     _buffer     = new byte[8000];
     _logManager = Sahara.GetServer().GetLogManager();
 }
Пример #7
0
        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));
            }
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
 public PlayerProcessor(Player player)
 {
     _player        = player;
     _timerInterval = 60000;
     _logManager    = Sahara.GetServer().GetLogManager();
     _resetEvent    = new AutoResetEvent(true);
     _processTimer  = new Timer(OnProcess, null, _timerInterval, _timerInterval);
 }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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();
        }
Пример #13
0
        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);
            }
        }
Пример #14
0
        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);
        }
Пример #15
0
        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);
        }
Пример #16
0
        private void LoadModeration()
        {
            using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection())
            {
                mysqlConnection.OpenConnection();

                LoadModerationPresets(mysqlConnection);
                LoadModerationCategorys(mysqlConnection);
                LoadModerationMessages(mysqlConnection);
                LoadModerationBans(mysqlConnection);

                mysqlConnection.CloseConnection();
            }
        }
Пример #17
0
        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);
            }
        }
Пример #18
0
        private void InitializePermissions()
        {
            using (var mysqlConnection = Sahara.GetServer().GetMySql().GetConnection())
            {
                mysqlConnection.OpenConnection();

                LoadPermissions(mysqlConnection);
                LoadCommandPermissions(mysqlConnection);
                LoadPermissionGroups(mysqlConnection);
                LoadPermissionRights(mysqlConnection);
                LoadPermissionSubscriptions(mysqlConnection);

                mysqlConnection.CloseConnection();
            }
        }
Пример #19
0
        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;
        }
Пример #20
0
        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();
                }
            }
        }
Пример #21
0
        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();
                }
            }
        }
Пример #22
0
        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();
                }
            }
        }
Пример #23
0
        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);
            }
        }
Пример #24
0
        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();
                }
            }
        }
Пример #25
0
        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();
            }
        }
Пример #26
0
        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();
                }
            }
        }
Пример #27
0
        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();
            }
        }
Пример #28
0
        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);
            }
        }
Пример #29
0
        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));
        }
Пример #30
0
        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();
            }
        }