示例#1
0
        /// <summary>
        /// Loads the items.
        /// </summary>
        /// <param name="dbClient">The database client.</param>
        internal void LoadItems(IQueryAdapter dbClient)
        {
            Items = new Dictionary <uint, Item>();
            Items.Clear();
            GiftWrappers.Clear();

            dbClient.SetQuery("SELECT * FROM catalog_furnis");
            var table = dbClient.GetTable();

            if (table == null)
            {
                return;
            }
            List <double> heights = null;

            foreach (DataRow dataRow in table.Rows)
            {
                try
                {
                    var    id             = Convert.ToUInt32(dataRow["id"]);
                    var    type           = Convert.ToChar(dataRow["type"]);
                    var    name           = Convert.ToString(dataRow["item_name"]);
                    var    flatId         = Convert.ToInt32(dataRow["flat_id"]);
                    var    stackHeightStr = dataRow["stack_height"].ToString();
                    double stackHeight;
                    uint   modes;
                    uint.TryParse(dataRow["interaction_modes_count"].ToString(), out modes);
                    var    vendingIds           = (string)dataRow["vending_ids"];
                    string variableheights      = Convert.ToString(dataRow["variable_heights"]);
                    var    sub                  = Plus.EnumToBool(dataRow["subscriber"].ToString());
                    var    effect               = (int)dataRow["effectid"];
                    var    stackable            = Convert.ToInt32(dataRow["can_stack"]) == 1;
                    var    allowRecycle         = Convert.ToInt32(dataRow["allow_recycle"]) == 1;
                    var    allowTrade           = Convert.ToInt32(dataRow["allow_trade"]) == 1;
                    var    allowMarketplaceSell = Convert.ToInt32(dataRow["allow_marketplace_sell"]) == 1;
                    var    allowGift            = Convert.ToInt32(dataRow["allow_gift"]) == 1;
                    var    allowInventoryStack  = Convert.ToInt32(dataRow["allow_inventory_stack"]) == 1;
                    var    typeFromString       = InteractionTypes.GetTypeFromString((string)dataRow["interaction_type"]);

                    var sprite = Convert.ToInt32(dataRow["sprite_id"]);

                    int  x = Convert.ToInt32(dataRow["width"]), y = Convert.ToInt32(dataRow["length"]);
                    var  publicName = Convert.ToString(dataRow["item_name"]);
                    bool canWalk = Convert.ToInt32(dataRow["is_walkable"]) == 1, canSit = Convert.ToInt32(dataRow["can_sit"]) == 1, stackMultiple = Plus.EnumToBool(dataRow["stack_multiplier"].ToString());

                    if (name.StartsWith("external_image_wallitem_poster"))
                    {
                        PhotoId = id;
                    }
                    // Special Types of Furnis

                    /*if (name == "landscape" || name == "floor" || name == "wallpaper")
                     * {
                     *  sprite = FurniDataParser.WallItems[name].Id;
                     *  x = 1;
                     *  y = 1;
                     * }
                     * else if (type == 's' && FurniDataParser.FloorItems.ContainsKey(name))
                     * {
                     *  sprite = FurniDataParser.FloorItems[name].Id;
                     *  publicName = FurniDataParser.FloorItems[name].Name;
                     *  x = FurniDataParser.FloorItems[name].X;
                     *  y = FurniDataParser.FloorItems[name].Y;
                     *  canWalk = FurniDataParser.FloorItems[name].CanWalk;
                     *  canSit = FurniDataParser.FloorItems[name].CanSit;
                     * }
                     * else if (type == 'i' && FurniDataParser.WallItems.ContainsKey(name))
                     * {
                     *  sprite = FurniDataParser.WallItems[name].Id;
                     *  publicName = FurniDataParser.WallItems[name].Name;
                     * }
                     * else if (name.StartsWith("a0 pet", StringComparison.InvariantCulture))
                     * {
                     *  x = 1;
                     *  y = 1;
                     *  publicName = name;
                     * }
                     * else if (type != 'e' && type != 'h' && type != 'r' && type != 'b') continue;*/

                    if (name.StartsWith("present_gen"))
                    {
                        GiftWrappers.AddOld((short)sprite);
                    }
                    else if (name.StartsWith("present_wrap*"))
                    {
                        GiftWrappers.Add((short)sprite);
                    }

                    // Stack Height Values
                    if (stackHeightStr.Contains(';'))
                    {
                        var heightsStr = stackHeightStr.Split(';');
                        heights =
                            heightsStr.Select(heightStr => double.Parse(heightStr, CultureInfo.InvariantCulture))
                            .ToList();
                        stackHeight   = heights[0];
                        stackMultiple = true;
                    }
                    else
                    {
                        stackHeight = double.Parse(stackHeightStr, CultureInfo.InvariantCulture);
                    }

                    // If Can Walk
                    if (InteractionTypes.AreFamiliar(GlobalInteractions.Gate, typeFromString) ||
                        typeFromString == Interaction.BanzaiPyramid || name.StartsWith("hole"))
                    {
                        canWalk = false;
                    }

                    // Add Item
                    var value = new Item(id, (int)sprite, publicName, name, type, x, y, stackHeight, stackable, canWalk,
                                         canSit, allowRecycle, allowTrade, allowMarketplaceSell, allowGift, allowInventoryStack,
                                         typeFromString, modes, vendingIds, sub, effect, stackMultiple,
                                         (heights == null ? null : heights.ToArray()), flatId, variableheights);
                    Items.Add(id, value);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    Console.ReadKey();
                    Out.WriteLine(
                        string.Format("Could not load item #{0}, please verify the data is okay.",
                                      Convert.ToUInt32(dataRow[0])), "Plus.Items", ConsoleColor.DarkRed);
                }
            }
        }
示例#2
0
        internal static void Initialize()
        {
            Console.Clear();
            CyberEnvironment.ServerStarted = DateTime.Now;
            Console.SetWindowSize(120, 40);
            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine();
            Console.WriteLine(@"                              ____ _   _ ___  ____ ____    ____ _  _ _  _ _    ____ ___ ____ ____ ");
            Console.WriteLine(@"                              |     \_/  |__] |___ |__/    |___ |\/| |  | |    |__|  |  |  | |__/ ");
            Console.WriteLine(@"                              |___   |   |__] |___ |  \    |___ |  | |__| |___ |  |  |  |__| |  \ ");
            Console.WriteLine();
            Console.WriteLine("                                                Cyber Emulator - Version: " + PrettyBuild);
            Console.WriteLine("                                         based on Plus, developed by Kessiler Rodrigues.");
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("                                                 " + PrettyRelease);
            Console.Title = "Cyber Emulator | Loading data [...]";
            CyberEnvironment.DefaultEncoding = Encoding.Default;
            Console.WriteLine("");

            CyberEnvironment.cultureInfo = CultureInfo.CreateSpecificCulture("en-GB");
            TextHandling.replaceDecimal();
            try
            {
                CyberEnvironment.Configuration = new ConfigurationData(Path.Combine(Application.StartupPath, "config.ini"), false);


                MySqlConnectionStringBuilder mySqlConnectionStringBuilder = new MySqlConnectionStringBuilder();
                mySqlConnectionStringBuilder.Server                = (CyberEnvironment.GetConfig().data["db.hostname"]);
                mySqlConnectionStringBuilder.Port                  = (uint.Parse(CyberEnvironment.GetConfig().data["db.port"]));
                mySqlConnectionStringBuilder.UserID                = (CyberEnvironment.GetConfig().data["db.username"]);
                mySqlConnectionStringBuilder.Password              = (CyberEnvironment.GetConfig().data["db.password"]);
                mySqlConnectionStringBuilder.Database              = (CyberEnvironment.GetConfig().data["db.name"]);
                mySqlConnectionStringBuilder.MinimumPoolSize       = (uint.Parse(CyberEnvironment.GetConfig().data["db.pool.minsize"]));
                mySqlConnectionStringBuilder.MaximumPoolSize       = (uint.Parse(CyberEnvironment.GetConfig().data["db.pool.maxsize"]));
                mySqlConnectionStringBuilder.Pooling               = (true);
                mySqlConnectionStringBuilder.AllowZeroDateTime     = (true);
                mySqlConnectionStringBuilder.ConvertZeroDateTime   = (true);
                mySqlConnectionStringBuilder.DefaultCommandTimeout = (300u);
                mySqlConnectionStringBuilder.ConnectionTimeout     = (10u);
                CyberEnvironment.manager = new DatabaseManager(mySqlConnectionStringBuilder.ToString());

                using (IQueryAdapter queryreactor = CyberEnvironment.GetDatabaseManager().getQueryReactor())
                {
                    ConfigData = new ConfigData(queryreactor);
                    PetLocale.Init(queryreactor);
                    OfflineMessages = new Dictionary <uint, List <OfflineMessage> >();
                    OfflineMessage.InitOfflineMessages(queryreactor);
                    GiftWrappers = new GiftWrappers(queryreactor);
                }

                FriendRequestLimit = (uint)int.Parse(CyberEnvironment.GetConfig().data["client.maxrequests"]);
                if (ExtraSettings.RunExtraSettings())
                {
                    Logging.WriteLine("Loaded an extra settings file.");
                }

                Game = new Game(int.Parse(GetConfig().data["game.tcp.conlimit"]));
                Game.start();

                ConnectionManager = new ConnectionHandling(int.Parse(GetConfig().data["game.tcp.port"]), int.Parse(GetConfig().data["game.tcp.conlimit"]), int.Parse(GetConfig().data["game.tcp.conperip"]), GetConfig().data["game.tcp.enablenagles"].ToLower() == "true");

                HabboCrypto.Initialize(new RsaKeyHolder());
                CyberEnvironment.ConnectionManager.init();
                CyberEnvironment.ConnectionManager.Start();
                StaticClientMessageHandler.Initialize();

                string[] allowedIps = GetConfig().data["mus.tcp.allowedaddr"].Split(';');
                MusSystem = new MusSocket(GetConfig().data["mus.tcp.bindip"], int.Parse(GetConfig().data["mus.tcp.port"]), allowedIps, 0);


                if (Configuration.data.ContainsKey("StaffAlert.MinRank"))
                {
                    StaffAlertMinRank = uint.Parse(CyberEnvironment.GetConfig().data["StaffAlert.MinRank"]);
                }
                if (Configuration.data.ContainsKey("SeparatedTasksInMainLoops.enabled") && Configuration.data["SeparatedTasksInMainLoops.enabled"] == "true")
                {
                    SeparatedTasksInMainLoops = true;
                }
                if (Configuration.data.ContainsKey("SeparatedTasksInGameClientManager.enabled") && Configuration.data["SeparatedTasksInGameClientManager.enabled"] == "true")
                {
                    SeparatedTasksInGameClientManager = true;
                }
                Logging.WriteLine("Game was succesfully loaded.");
                isLive = true;
            }
            catch (KeyNotFoundException ex)
            {
                Logging.WriteLine("Something is missing in your configuration", ConsoleColor.Red);
                Logging.WriteLine(ex.ToString(), ConsoleColor.Yellow);
                Logging.WriteLine("Please type a key to shut down ...", ConsoleColor.Gray);
                Console.ReadKey(true);
                CyberEnvironment.Destroy();
            }
            catch (InvalidOperationException ex1)
            {
                Logging.WriteLine("Something wrong happened: " + ex1.Message, ConsoleColor.Red);
                Logging.WriteLine(ex1.ToString(), ConsoleColor.Yellow);
                Logging.WriteLine("Please type a key to shut down...", ConsoleColor.Gray);
                Console.ReadKey(true);
                CyberEnvironment.Destroy();
            }
            catch (Exception ex2)
            {
                Logging.WriteLine("An exception got caught: " + ex2.Message, ConsoleColor.Red);
                Logging.WriteLine("Type a key to know more about the error", ConsoleColor.Gray);
                Console.ReadKey();
                Logging.WriteLine(ex2.ToString(), ConsoleColor.Yellow);
                Logging.WriteLine("Please type a ket to shut down...", ConsoleColor.Gray);
                Console.ReadKey();
                Environment.Exit(1);
            }
        }