예제 #1
0
 protected Date GetCreated(LibraryParser parser)
 {
     using (var stream = Open()) {
         Date created;
         using (var reader = parser.Open(stream, out created))
             return created;
     }
 }
예제 #2
0
        /// <summary>
        /// Completes the user talent.
        /// </summary>
        /// <param name="Session">The session.</param>
        /// <param name="Talent">The talent.</param>
        internal void CompleteUserTalent(GameClient Session, Talent Talent)
        {
            if (Session == null || Session.GetHabbo() == null || Session.GetHabbo().CurrentTalentLevel < Talent.Level || Session.GetHabbo().Talents.ContainsKey(Talent.Id))
            {
                return;
            }
            if (!this.LevelIsCompleted(Session, Talent.Type, Talent.Level))
            {
                return;
            }
            if (!string.IsNullOrEmpty(Talent.Prize) && Talent.PrizeBaseItem > 0u)
            {
                Item item = Plus.GetGame().GetItemManager().GetItem(Talent.PrizeBaseItem);
                Plus.GetGame().GetCatalog().DeliverItems(Session, item, 1, "", 0, 0, "");
            }
            var value = new UserTalent(Talent.Id, 1);

            Session.GetHabbo().Talents.Add(Talent.Id, value);
            using (IQueryAdapter queryReactor = Plus.GetDatabaseManager().GetQueryReactor())
            {
                queryReactor.RunFastQuery(string.Concat(new object[]
                {
                    "REPLACE INTO users_talents VALUES (",
                    Session.GetHabbo().Id,
                    ", ",
                    Talent.Id,
                    ", ",
                    1,
                    ");"
                }));
            }
            var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("TalentLevelUpMessageComposer"));

            serverMessage.AppendString(Talent.Type);
            serverMessage.AppendInteger(Talent.Level);
            serverMessage.AppendInteger(0);
            if (Talent.Type == "citizenship" && Talent.Level == 4)
            {
                serverMessage.AppendInteger(2);
                serverMessage.AppendString("HABBO_CLUB_VIP_7_DAYS");
                serverMessage.AppendInteger(7);
                serverMessage.AppendString(Talent.Prize);
                serverMessage.AppendInteger(0);
            }
            else
            {
                serverMessage.AppendInteger(1);
                serverMessage.AppendString(Talent.Prize);
                serverMessage.AppendInteger(0);
            }

            Session.SendMessage(serverMessage);

            if (Talent.Type == "citizenship")
            {
                if (Talent.Level == 3)
                {
                    Plus.GetGame().GetAchievementManager().ProgressUserAchievement(Session, "ACH_Citizenship", 1);
                }
                else if (Talent.Level == 4)
                {
                    Session.GetHabbo().GetSubscriptionManager().AddSubscription(7);
                    using (IQueryAdapter queryReactor = Plus.GetDatabaseManager().GetQueryReactor())
                    {
                        queryReactor.RunFastQuery(string.Concat(new object[]
                        {
                            "UPDATE users SET talent_status = 'helper' WHERE id = ",
                            Session.GetHabbo().Id,
                            ";"
                        }));
                    }
                }
            }
        }
예제 #3
0
        internal void BanzaiEnd()
        {
            IsBanzaiActive = false;
            _room.GetGameManager().StopGame();
            _floorMap = null;
            _room.GetWiredHandler().ExecuteWired(Interaction.TriggerGameEnd);

            Team winningTeam = _room.GetGameManager().GetWinningTeam();

            _room.GetGameManager().UnlockGates();

            foreach (RoomItem roomItem in BanzaiTiles.Values)
            {
                if (roomItem.Team == winningTeam)
                {
                    roomItem.InteractionCount       = 0;
                    roomItem.InteractionCountHelper = 0;
                    roomItem.UpdateNeeded           = true;
                }
                else if (roomItem.Team == Team.None)
                {
                    roomItem.ExtraData = "0";
                    roomItem.UpdateState();
                }
            }

            if (winningTeam == Team.None)
            {
                return;
            }

            foreach (RoomUser avatar in _room.GetRoomUserManager().GetRoomUsers())
            {
                if (avatar.Team != Team.None && Yupi.GetUnixTimeStamp() - _timestarted > 5.0)
                {
                    Yupi.GetGame()
                    .GetAchievementManager()
                    .ProgressUserAchievement(avatar.GetClient(), "ACH_BattleBallTilesLocked",
                                             avatar.LockedTilesCount);
                    Yupi.GetGame()
                    .GetAchievementManager()
                    .ProgressUserAchievement(avatar.GetClient(), "ACH_BattleBallPlayer", 1);
                }

                if ((winningTeam == Team.Red && avatar.CurrentEffect != 33) ||
                    (winningTeam == Team.Green && avatar.CurrentEffect != 34) ||
                    (winningTeam == Team.Blue && avatar.CurrentEffect != 35) ||
                    (winningTeam == Team.Yellow && avatar.CurrentEffect != 36))
                {
                    continue;
                }
                //todo: clean this up not sure yet.

                if (Yupi.GetUnixTimeStamp() - _timestarted > 5.0)
                {
                    Yupi.GetGame()
                    .GetAchievementManager()
                    .ProgressUserAchievement(avatar.GetClient(), "ACH_BattleBallWinner", 1);
                }

                ServerMessage waveAtWin = new ServerMessage(LibraryParser.OutgoingRequest("RoomUserActionMessageComposer"));
                waveAtWin.AppendInteger(avatar.VirtualId);
                waveAtWin.AppendInteger(1);
                _room.SendMessage(waveAtWin);
            }
            _field.Destroy();
        }
예제 #4
0
파일: Plus.cs 프로젝트: Mereos/HabboEMU
        /// <summary>
        /// Main Void, Initializes the Emulator.
        /// </summary>
        internal static void Initialize()
        {
            #region Precheck

            Console.Title    = "CityRP está iniciando..";
            ServerStarted    = DateTime.Now;
            _defaultEncoding = Encoding.Default;

            #endregion Precheck

            #region Database Connection

            CultureInfo = CultureInfo.CreateSpecificCulture("en-GB");
            try
            {
                ConfigurationData.Load(Path.Combine(Application.StartupPath, "Settings/main.ini"), false);
                RoleplayData.Load(Path.Combine(Application.StartupPath, "Settings/Roleplay/settings.ini"), true);

                DatabaseConnectionType = ConfigurationData.Data["db.type"];
                var mySqlConnectionStringBuilder = new MySqlConnectionStringBuilder
                {
                    Server                = (ConfigurationData.Data["db.hostname"]),
                    Port                  = (uint.Parse(ConfigurationData.Data["db.port"])),
                    UserID                = (ConfigurationData.Data["db.username"]),
                    Password              = (ConfigurationData.Data["db.password"]),
                    Database              = (ConfigurationData.Data["db.name"]),
                    MinimumPoolSize       = (uint.Parse(ConfigurationData.Data["db.pool.minsize"])),
                    MaximumPoolSize       = (uint.Parse(ConfigurationData.Data["db.pool.maxsize"])),
                    Pooling               = (true),
                    AllowZeroDateTime     = (true),
                    ConvertZeroDateTime   = (true),
                    DefaultCommandTimeout = (300),
                    ConnectionTimeout     = (10)
                };
                var mySqlConnectionStringBuilder2 = mySqlConnectionStringBuilder;
                Manager = new DatabaseManager(mySqlConnectionStringBuilder2.ToString(), DatabaseConnectionType);
                using (var queryReactor = GetDatabaseManager().GetQueryReactor())
                {
                    ConfigData = new ConfigData(queryReactor);
                    PetCommandHandler.Init(queryReactor);
                    PetLocale.Init(queryReactor);
                    OfflineMessages = new Dictionary <uint, List <OfflineMessage> >();
                    OfflineMessage.InitOfflineMessages(queryReactor);
                }

                #endregion Database Connection

                #region Packets Registering

                ConsoleTimer       = (int.Parse(ConfigurationData.Data["console.clear.time"]));
                ConsoleTimerOn     = (bool.Parse(ConfigurationData.Data["console.clear.enabled"]));
                FriendRequestLimit = ((uint)int.Parse(ConfigurationData.Data["client.maxrequests"]));


                LibraryParser.Incoming = new Dictionary <int, LibraryParser.StaticRequestHandler>();
                LibraryParser.Library  = new Dictionary <string, string>();
                LibraryParser.Outgoing = new Dictionary <string, int>();
                LibraryParser.Config   = new Dictionary <string, string>();

                LibraryParser.RegisterLibrary();
                LibraryParser.RegisterOutgoing();
                LibraryParser.RegisterIncoming();
                LibraryParser.RegisterConfig();

                #endregion Packets Registering

                #region Game Initalizer

                ExtraSettings.RunExtraSettings();
                CrossDomainPolicy.Set();
                _game = new Game(int.Parse(ConfigurationData.Data["game.tcp.conlimit"]));
                _game.GetNavigator().LoadNewPublicRooms();
                _game.ContinueLoading();

                #endregion Game Initalizer

                #region Languages Parser

                ServerLanguage = (Convert.ToString(ConfigurationData.Data["system.lang"]));
                _languages     = new Languages(ServerLanguage);

                #endregion Languages Parser

                #region Environment SetUp

                if (ConsoleTimerOn)
                {
                    Out.WriteLine("Console Clear Timer is enable with " + ConsoleTimer + " seconds.");
                }

                _connectionManager = new ConnectionHandling(int.Parse(ConfigurationData.Data["game.tcp.port"]),
                                                            int.Parse(ConfigurationData.Data["game.tcp.conlimit"]),
                                                            int.Parse(ConfigurationData.Data["game.tcp.conperip"]),
                                                            ConfigurationData.Data["game.tcp.enablenagles"].ToLower() == "true");

                if (LibraryParser.Config["Crypto.Enabled"] == "true")
                {
                    Handler.Initialize(LibraryParser.Config["Crypto.RSA.N"], LibraryParser.Config["Crypto.RSA.D"], LibraryParser.Config["Crypto.RSA.E"]);
                }

                _connectionManager.init();

                LibraryParser.Initialize();

                #endregion Environment SetUp

                #region Tasks and MusSystem

                if (ConsoleTimerOn)
                {
                    Timer = new Timer {
                        Interval = ConsoleTimer
                    };
                    Timer.Elapsed += TimerElapsed;
                    Timer.Start();
                }

                if (ConfigurationData.Data.ContainsKey("StaffAlert.MinRank"))
                {
                    StaffAlertMinRank = uint.Parse(ConfigurationData.Data["StaffAlert.MinRank"]);
                }

                if (ConfigurationData.Data.ContainsKey("SeparatedTasksInMainLoops.enabled") &&
                    ConfigurationData.Data["SeparatedTasksInMainLoops.enabled"] == "true")
                {
                    SeparatedTasksInMainLoops = true;
                }
                if (ConfigurationData.Data.ContainsKey("SeparatedTasksInGameClientManager.enabled") &&
                    ConfigurationData.Data["SeparatedTasksInGameClientManager.enabled"] == "true")
                {
                    SeparatedTasksInGameClientManager = true;
                }
                if (ConfigurationData.Data.ContainsKey("Debug"))
                {
                    if (ConfigurationData.Data["Debug"] == "true")
                    {
                        DebugMode = true;
                    }
                }

                TimeSpan TimeUsed = DateTime.Now - ServerStarted;

                Out.WriteLine("CityRP >> Started (" + TimeUsed.Seconds + "s, " + TimeUsed.Milliseconds + "ms)", "", ConsoleColor.Green);
                IsLive = true;

                using (var queryReactor = GetDatabaseManager().GetQueryReactor())
                {
                    queryReactor.RunFastQuery("UPDATE server_settings SET value = '1' WHERE variable = 'status'");
                }
            }
            catch (Exception e)
            {
                Out.WriteLine("Error in main.ini: Configuration file is invalid" + Environment.NewLine + e.Message, "", ConsoleColor.Red);
                Out.WriteLine("Please press Y to get more details or press other Key to Exit", "", ConsoleColor.Red);

                var key = Console.ReadKey();
                if (key.Key == ConsoleKey.Y)
                {
                    Console.WriteLine();
                    Out.WriteLine(
                        Environment.NewLine + "[Message] Error Details: " + Environment.NewLine + e.StackTrace +
                        Environment.NewLine + e.InnerException + Environment.NewLine + e.TargetSite +
                        Environment.NewLine + "[Message ]Press Any Key To Exit", "", ConsoleColor.Red);
                    Console.ReadKey();
                    Environment.Exit(1);
                }
                else
                {
                    Environment.Exit(1);
                }
            }

            #endregion Tasks and MusSystem
        }
예제 #5
0
        /// <summary>
        ///     Composes the page.
        /// </summary>
        /// <param name="page">The page.</param>
        /// <returns>ServerMessage.</returns>
        internal static ServerMessage ComposePage(CatalogPage page)
        {
            ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("CataloguePageMessageComposer"));

            message.AppendInteger(page.PageId);

            switch (page.Layout)
            {
            case "frontpage":
                message.AppendString("NORMAL");
                message.AppendString("frontpage4");
                message.AppendInteger(2);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendInteger(2);
                message.AppendString(page.Text1);
                message.AppendString(page.Text2);
                message.AppendInteger(0);
                message.AppendInteger(-1);
                message.AppendBool(false);
                break;

            case "roomads":
                message.AppendString("NORMAL");
                message.AppendString("roomads");
                message.AppendInteger(2);
                message.AppendString("events_header");
                message.AppendString("");
                message.AppendInteger(2);
                message.AppendString(page.Text1);
                message.AppendString("");
                break;

            case "builders_club_frontpage_normal":
                message.AppendString("NORMAL");
                message.AppendString("builders_club_frontpage");
                message.AppendInteger(0);
                message.AppendInteger(1);
                message.AppendString(page.LayoutHeadline);
                message.AppendInteger(3);
                message.AppendInteger(8554);
                message.AppendString("builders_club_1_month");
                message.AppendString("");
                message.AppendInteger(2560000);
                message.AppendInteger(2560000);
                message.AppendInteger(1024);
                message.AppendInteger(0);
                message.AppendInteger(0);
                message.AppendBool(false);
                message.AppendInteger(8606);
                message.AppendString("builders_club_14_days");
                message.AppendString("");
                message.AppendInteger(2560000);
                message.AppendInteger(2560000);
                message.AppendInteger(1024);
                message.AppendInteger(0);
                message.AppendInteger(0);
                message.AppendBool(false);
                message.AppendInteger(8710);
                message.AppendString("builders_club_31_days");
                message.AppendString("");
                message.AppendInteger(2560000);
                message.AppendInteger(2560000);
                message.AppendInteger(1024);
                message.AppendInteger(0);
                message.AppendInteger(0);
                message.AppendBool(false);
                break;

            case "bots":
                message.AppendString("NORMAL");
                message.AppendString("bots");
                message.AppendInteger(2);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendInteger(3);
                message.AppendString(page.Text1);
                message.AppendString(page.Text2);
                message.AppendString(page.TextDetails);
                break;

            case "badge_display":
                message.AppendString("NORMAL");
                message.AppendString("badge_display");
                message.AppendInteger(2);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendInteger(3);
                message.AppendString(page.Text1);
                message.AppendString(page.Text2);
                message.AppendString(page.TextDetails);
                break;

            case "info_loyalty":
            case "info_duckets":
                message.AppendString("NORMAL");
                message.AppendString(page.Layout);
                message.AppendInteger(1);
                message.AppendString(page.LayoutHeadline);
                message.AppendInteger(1);
                message.AppendString(page.Text1);
                break;

            case "sold_ltd_items":
                message.AppendString("NORMAL");
                message.AppendString("sold_ltd_items");
                message.AppendInteger(2);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendInteger(3);
                message.AppendString(page.Text1);
                message.AppendString(page.Text2);
                message.AppendString(page.TextDetails);
                break;

            case "recycler_info":
                message.AppendString("NORMAL");
                message.AppendString(page.Layout);
                message.AppendInteger(2);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendInteger(3);
                message.AppendString(page.Text1);
                message.AppendString(page.Text2);
                message.AppendString(page.TextDetails);
                break;

            case "recycler_prizes":
                message.AppendString("NORMAL");
                message.AppendString("recycler_prizes");
                message.AppendInteger(1);
                message.AppendString("catalog_recycler_headline3");
                message.AppendInteger(1);
                message.AppendString(page.Text1);
                break;

            case "spaces_new":
            case "spaces":
                message.AppendString("NORMAL");
                message.AppendString("spaces_new");
                message.AppendInteger(1);
                message.AppendString(page.LayoutHeadline);
                message.AppendInteger(1);
                message.AppendString(page.Text1);
                break;

            case "recycler":
                message.AppendString("NORMAL");
                message.AppendString("recycler");
                message.AppendInteger(2);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendInteger(1);
                message.AppendString(page.Text1);
                break;

            case "trophies":
                message.AppendString("NORMAL");
                message.AppendString("trophies");
                message.AppendInteger(1);
                message.AppendString(page.LayoutHeadline);
                message.AppendInteger(2);
                message.AppendString(page.Text1);
                message.AppendString(page.TextDetails);
                break;

            case "pets":
            case "pets2":
            case "pets3":
                message.AppendString("NORMAL");
                message.AppendString(page.Layout);
                message.AppendInteger(2);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendInteger(4);
                message.AppendString(page.Text1);
                message.AppendString(page.Text2);
                message.AppendString(page.TextDetails);
                message.AppendString(page.TextTeaser);
                break;

            case "soundmachine":
                message.AppendString("NORMAL");
                message.AppendString(page.Layout);
                message.AppendInteger(2);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendInteger(2);
                message.AppendString(page.Text1);
                message.AppendString(page.TextDetails);
                break;

            case "vip_buy":
                message.AppendString("NORMAL");
                message.AppendString(page.Layout);
                message.AppendInteger(2);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendInteger(0);
                break;

            case "guild_custom_furni":
                message.AppendString("NORMAL");
                message.AppendString("guild_custom_furni");
                message.AppendInteger(3);
                message.AppendString(page.LayoutHeadline);
                message.AppendString("");
                message.AppendString("");
                message.AppendInteger(3);
                message.AppendString(page.Text1);
                message.AppendString(page.TextDetails);
                message.AppendString(page.Text2);
                break;

            case "guild_frontpage":
                message.AppendString("NORMAL");
                message.AppendString("guild_frontpage");
                message.AppendInteger(2);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendInteger(3);
                message.AppendString(page.Text1);
                message.AppendString(page.TextDetails);
                message.AppendString(page.Text2);
                break;

            case "guild_forum":
                message.AppendString("NORMAL");
                message.AppendString("guild_forum");
                message.AppendInteger(0);
                message.AppendInteger(2);
                message.AppendString(page.Text1);
                message.AppendString(page.Text2);
                break;

            case "club_gifts":
                message.AppendString("NORMAL");
                message.AppendString("club_gifts");
                message.AppendInteger(1);
                message.AppendString(page.LayoutHeadline);
                message.AppendInteger(1);
                message.AppendString(page.Text1);
                break;

            case "default_3x3":
                message.AppendString("NORMAL");
                message.AppendString(page.Layout);
                message.AppendInteger(3);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendString(page.LayoutSpecial);
                message.AppendInteger(3);
                message.AppendString(page.Text1);
                message.AppendString(page.TextDetails);
                message.AppendString(page.TextTeaser);
                break;

            default:
                message.AppendString("NORMAL");
                message.AppendString(page.Layout);
                message.AppendInteger(3);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendString(page.LayoutSpecial);
                message.AppendInteger(4);
                message.AppendString(page.Text1);
                message.AppendString(page.Text2);
                message.AppendString(page.TextTeaser);
                message.AppendString(page.TextDetails);
                break;

            case "builders_3x3":
                message.AppendString("BUILDERS_CLUB");
                message.AppendString("default_3x3");
                message.AppendInteger(3);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendString(page.LayoutSpecial);
                message.AppendInteger(3);
                message.AppendString(page.Text1);
                message.AppendString(page.TextDetails.Replace("[10]", Convert.ToChar(10).ToString())
                                     .Replace("[13]", Convert.ToChar(13).ToString()));
                message.AppendString(page.TextTeaser.Replace("[10]", Convert.ToChar(10).ToString())
                                     .Replace("[13]", Convert.ToChar(13).ToString()));
                break;

            case "builders_3x3_color":
                message.AppendString("BUILDERS_CLUB");
                message.AppendString("default_3x3_color_grouping");
                message.AppendInteger(3);
                message.AppendString(page.LayoutHeadline);
                message.AppendString(page.LayoutTeaser);
                message.AppendString(page.LayoutSpecial);
                message.AppendInteger(3);
                message.AppendString(page.Text1);
                message.AppendString(page.TextDetails.Replace("[10]", Convert.ToChar(10).ToString())
                                     .Replace("[13]", Convert.ToChar(13).ToString()));
                message.AppendString(page.TextTeaser.Replace("[10]", Convert.ToChar(10).ToString())
                                     .Replace("[13]", Convert.ToChar(13).ToString()));
                break;

            case "builders_club_frontpage":
                message.AppendString("BUILDERS_CLUB");
                message.AppendString("builders_club_frontpage");
                message.AppendInteger(0);
                message.AppendInteger(1);
                message.AppendString(page.LayoutHeadline);
                message.AppendInteger(3);
                message.AppendInteger(8554);
                message.AppendString("builders_club_1_month");
                message.AppendString("");
                message.AppendInteger(2560000);
                message.AppendInteger(2560000);
                message.AppendInteger(1024);
                message.AppendInteger(0);
                message.AppendInteger(0);
                message.AppendBool(false);
                message.AppendInteger(8606);
                message.AppendString("builders_club_14_days");
                message.AppendString("");
                message.AppendInteger(2560000);
                message.AppendInteger(2560000);
                message.AppendInteger(1024);
                message.AppendInteger(0);
                message.AppendInteger(0);
                message.AppendBool(false);
                message.AppendInteger(8710);
                message.AppendString("builders_club_31_days");
                message.AppendString("");
                message.AppendInteger(2560000);
                message.AppendInteger(2560000);
                message.AppendInteger(1024);
                message.AppendInteger(0);
                message.AppendInteger(0);
                message.AppendBool(false);
                break;

            case "builders_club_addons":
                message.AppendString("BUILDERS_CLUB");
                message.AppendString("builders_club_addons");
                message.AppendInteger(0);
                message.AppendInteger(1);
                message.AppendString(page.LayoutHeadline);
                break;

            case "builders_club_addons_normal":
                message.AppendString("NORMAL");
                message.AppendString("builders_club_addons");
                message.AppendInteger(0);
                message.AppendInteger(1);
                message.AppendString(page.LayoutHeadline);
                break;
            }

            if (page.Layout.StartsWith("frontpage") || page.Layout == "vip_buy" || page.Layout == "recycler")
            {
                message.AppendInteger(0);
            }
            else
            {
                message.AppendInteger(page.Items.Count);

                foreach (CatalogItem item in page.Items.Values)
                {
                    ComposeItem(item, message);
                }
            }

            message.AppendInteger(-1);
            message.AppendBool(false);

            return(message);
        }
예제 #6
0
        /// <summary>
        ///     Composes the index.
        /// </summary>
        /// <param name="rank">The rank.</param>
        /// <param name="type">The type.</param>
        /// <returns>ServerMessage.</returns>
        internal static ServerMessage ComposeIndex(uint rank, string type)
        {
            IEnumerable <CatalogPage> pages =
                Yupi.GetGame().GetCatalog().Categories.Values.OfType <CatalogPage>().ToList();

            IOrderedEnumerable <CatalogPage> sortedPages = pages.Where(x => x.ParentId == -2 && x.MinRank <= rank).OrderBy(x => x.OrderNum);

            if (type == "NORMAL")
            {
                sortedPages = pages.Where(x => x.ParentId == -1 && x.MinRank <= rank).OrderBy(x => x.OrderNum);
            }

            ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("CatalogueIndexMessageComposer"));

            message.AppendBool(true);
            message.AppendInteger(0);
            message.AppendInteger(-1);
            message.AppendString("root");
            message.AppendString(string.Empty);
            message.AppendInteger(0);
            message.AppendInteger(sortedPages.Count());

            foreach (CatalogPage cat in sortedPages)
            {
                message.AppendBool(cat.Visible);
                message.AppendInteger(cat.IconImage);
                message.AppendInteger(cat.PageId);
                message.AppendString(cat.CodeName);
                message.AppendString(cat.Caption);
                message.AppendInteger(cat.FlatOffers.Count);

                foreach (uint i in cat.FlatOffers.Keys)
                {
                    message.AppendInteger(i);
                }

                IOrderedEnumerable <CatalogPage> sortedSubPages =
                    pages.Where(x => x.ParentId == cat.PageId && x.MinRank <= rank).OrderBy(x => x.OrderNum);

                message.AppendInteger(sortedSubPages.Count());

                foreach (CatalogPage subCat in sortedSubPages)
                {
                    message.AppendBool(subCat.Visible);
                    message.AppendInteger(subCat.IconImage);
                    message.AppendInteger(subCat.PageId);
                    message.AppendString(subCat.CodeName);
                    message.AppendString(subCat.Caption);
                    message.AppendInteger(subCat.FlatOffers.Count);

                    foreach (uint i2 in subCat.FlatOffers.Keys)
                    {
                        message.AppendInteger(i2);
                    }

                    message.AppendInteger(0);
                }
            }

            message.AppendBool(false);
            message.AppendString(type);

            return(message);
        }
예제 #7
0
        public override void OnTrigger(GameClient session, RoomItem item, int request, bool hasRights)
        {
            if (!item.ExtraData.Contains('\u0005'.ToString()))
            {
                return;
            }

            string[] array = item.ExtraData.Split('\u0005');

            session.GetHabbo().Gender = array[0].ToUpper() == "F" ? "F" : "M";

            Dictionary <string, string> dictionary = new Dictionary <string, string>();

            dictionary.Clear();

            string[] array2 = array[1].Split('.');

            foreach (string text in array2)
            {
                string[] array3 = session.GetHabbo().Look.Split('.');

                foreach (string text2 in array3)
                {
                    if (text2.Split('-')[0] == text.Split('-')[0])
                    {
                        if (dictionary.ContainsKey(text2.Split('-')[0]) && !dictionary.ContainsValue(text))
                        {
                            dictionary.Remove(text2.Split('-')[0]);
                            dictionary.Add(text2.Split('-')[0], text);
                        }
                        else
                        {
                            if (!dictionary.ContainsKey(text2.Split('-')[0]) && !dictionary.ContainsValue(text))
                            {
                                dictionary.Add(text2.Split('-')[0], text);
                            }
                        }
                    }
                    else
                    {
                        if (!dictionary.ContainsKey(text2.Split('-')[0]))
                        {
                            dictionary.Add(text2.Split('-')[0], text2);
                        }
                    }
                }
            }

            string text3 = dictionary.Values.Aggregate("", (current1, current) => $"{current1}{current}.");

            session.GetHabbo().Look = text3.TrimEnd('.');

            using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
            {
                queryReactor.SetQuery(
                    $"UPDATE users SET look = @look, gender = @gender WHERE id = {session.GetHabbo().Id}");
                queryReactor.AddParameter("look", session.GetHabbo().Look);
                queryReactor.AddParameter("gender", session.GetHabbo().Gender);
                queryReactor.RunQuery();
            }

            session.GetMessageHandler()
            .GetResponse()
            .Init(LibraryParser.OutgoingRequest("UpdateUserDataMessageComposer"));
            session.GetMessageHandler().GetResponse().AppendInteger(-1);
            session.GetMessageHandler().GetResponse().AppendString(session.GetHabbo().Look);
            session.GetMessageHandler().GetResponse().AppendString(session.GetHabbo().Gender.ToLower());
            session.GetMessageHandler().GetResponse().AppendString(session.GetHabbo().Motto);
            session.GetMessageHandler().GetResponse().AppendInteger(session.GetHabbo().AchievementPoints);
            session.GetMessageHandler().SendResponse();

            RoomUser roomUserByHabbo = item.GetRoom().GetRoomUserManager().GetRoomUserByHabbo(session.GetHabbo().Id);

            ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("UpdateUserDataMessageComposer"));

            serverMessage.AppendInteger(roomUserByHabbo.VirtualId);
            serverMessage.AppendString(session.GetHabbo().Look);
            serverMessage.AppendString(session.GetHabbo().Gender.ToLower());
            serverMessage.AppendString(session.GetHabbo().Motto);
            serverMessage.AppendInteger(session.GetHabbo().AchievementPoints);

            session.GetHabbo().CurrentRoom.SendMessage(serverMessage);
        }
예제 #8
0
파일: Pet.cs 프로젝트: sgf/Yupi
        /// <summary>
        ///     Serializes the information.
        /// </summary>
        /// <returns>ServerMessage.</returns>
        internal ServerMessage SerializeInfo()
        {
            ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("PetInfoMessageComposer"));

            serverMessage.AppendInteger(PetId);
            serverMessage.AppendString(Name);

            if (Type == 16)
            {
                serverMessage.AppendInteger(MoplaBreed.GrowingStatus);
                serverMessage.AppendInteger(7);
            }
            else
            {
                serverMessage.AppendInteger(Level);
                serverMessage.AppendInteger(MaxLevel);
            }

            serverMessage.AppendInteger(Experience);
            serverMessage.AppendInteger(ExperienceGoal);
            serverMessage.AppendInteger(Energy);
            serverMessage.AppendInteger(MaxEnergy);
            serverMessage.AppendInteger(Nutrition);
            serverMessage.AppendInteger(MaxNutrition);
            serverMessage.AppendInteger(Respect);
            serverMessage.AppendInteger(OwnerId);
            serverMessage.AppendInteger(Age);
            serverMessage.AppendString(OwnerName);
            serverMessage.AppendInteger(Type == 16 ? 0 : 1);
            serverMessage.AppendBool(HaveSaddle);
            serverMessage.AppendBool(false); //mountingId
            serverMessage.AppendInteger(0);
            serverMessage.AppendInteger(AnyoneCanRide);

            if (Type == 16)
            {
                serverMessage.AppendBool(MoplaBreed.LiveState == MoplaState.Grown);
            }
            else
            {
                serverMessage.AppendBool(false);
            }

            serverMessage.AppendBool(false);
            if (Type == 16)
            {
                serverMessage.AppendBool(MoplaBreed.LiveState == MoplaState.Dead);
            }
            else
            {
                serverMessage.AppendBool(false);
            }

            serverMessage.AppendInteger(Rarity);

            if (Type == 16u)
            {
                serverMessage.AppendInteger(129600);
                int lastHealthSeconds = (int)(LastHealth - DateTime.Now).TotalSeconds;
                int untilGrownSeconds = (int)(UntilGrown - DateTime.Now).TotalSeconds;

                if (lastHealthSeconds < 0)
                {
                    lastHealthSeconds = 0;
                }

                if (untilGrownSeconds < 0)
                {
                    untilGrownSeconds = 0;
                }

                switch (MoplaBreed.LiveState)
                {
                case MoplaState.Dead:
                    serverMessage.AppendInteger(0);
                    serverMessage.AppendInteger(0);
                    break;

                case MoplaState.Grown:
                    serverMessage.AppendInteger(lastHealthSeconds);
                    serverMessage.AppendInteger(0);
                    break;

                default:
                    serverMessage.AppendInteger(lastHealthSeconds);
                    serverMessage.AppendInteger(untilGrownSeconds);
                    break;
                }
            }
            else
            {
                serverMessage.AppendInteger(-1);
                serverMessage.AppendInteger(-1);
                serverMessage.AppendInteger(-1);
            }

            serverMessage.AppendBool(true); // Allow breed?

            return(serverMessage);
        }
예제 #9
0
 /// <summary>
 ///     Handles the request.
 /// </summary>
 /// <param name="request">The request.</param>
 internal void HandleRequest(ClientMessage request)
 {
     Request = request;
     LibraryParser.HandlePacket(this, request);
 }
예제 #10
0
        /// <summary>
        ///     Informations the retrieve.
        /// </summary>
        internal void InfoRetrieve()
        {
            if (Session?.GetHabbo() == null)
            {
                return;
            }

            Habbo habbo = Session.GetHabbo();

            bool tradeLocked       = Session.GetHabbo().CheckTrading();
            bool canUseFloorEditor = true;

            //ServerExtraSettings.EveryoneUseFloor || Session.GetHabbo().Vip || Session.GetHabbo().Rank >= 4;

            Response.Init(LibraryParser.OutgoingRequest("UserObjectMessageComposer"));
            Response.AppendInteger(habbo.Id);
            Response.AppendString(habbo.UserName);
            Response.AppendString(habbo.Look);
            Response.AppendString(habbo.Gender.ToUpper());
            Response.AppendString(habbo.Motto);
            Response.AppendString(string.Empty);
            Response.AppendBool(false);
            Response.AppendInteger(habbo.Respect);
            Response.AppendInteger(habbo.DailyRespectPoints);
            Response.AppendInteger(habbo.DailyPetRespectPoints);
            Response.AppendBool(true);
            Response.AppendString(habbo.LastOnline.ToString(CultureInfo.InvariantCulture));
            Response.AppendBool(habbo.CanChangeName);
            Response.AppendBool(false);
            SendResponse();

            Response.Init(LibraryParser.OutgoingRequest("BuildersClubMembershipMessageComposer"));
            Response.AppendInteger(Session.GetHabbo().BuildersExpire);
            Response.AppendInteger(Session.GetHabbo().BuildersItemsMax);
            Response.AppendInteger(2);
            SendResponse();

            Response.Init(LibraryParser.OutgoingRequest("SendPerkAllowancesMessageComposer"));
            Response.AppendInteger(11);

            Response.AppendString("BUILDER_AT_WORK");
            Response.AppendString(string.Empty);
            Response.AppendBool(canUseFloorEditor);

            Response.AppendString("VOTE_IN_COMPETITIONS");
            Response.AppendString("requirement.unfulfilled.helper_level_2");
            Response.AppendBool(false);

            Response.AppendString("USE_GUIDE_TOOL");
            Response.AppendString((Session.GetHabbo().TalentStatus == "helper" &&
                                   Session.GetHabbo().CurrentTalentLevel >= 4) || (Session.GetHabbo().Rank >= 4)
                ? string.Empty
                : "requirement.unfulfilled.helper_level_4");
            Response.AppendBool((Session.GetHabbo().TalentStatus == "helper" &&
                                 Session.GetHabbo().CurrentTalentLevel >= 4) || (Session.GetHabbo().Rank >= 4));

            Response.AppendString("JUDGE_CHAT_REVIEWS");
            Response.AppendString("requirement.unfulfilled.helper_level_6");
            Response.AppendBool(false);

            Response.AppendString("NAVIGATOR_ROOM_THUMBNAIL_CAMERA");
            Response.AppendString(string.Empty);
            Response.AppendBool(true);

            Response.AppendString("CALL_ON_HELPERS");
            Response.AppendString(string.Empty);
            Response.AppendBool(true);

            Response.AppendString("CITIZEN");
            Response.AppendString(string.Empty);
            Response.AppendBool(Session.GetHabbo().TalentStatus == "helper" ||
                                Session.GetHabbo().CurrentTalentLevel >= 4);

            Response.AppendString("MOUSE_ZOOM");
            Response.AppendString(string.Empty);
            Response.AppendBool(false);

            Response.AppendString("TRADE");
            Response.AppendString(tradeLocked ? string.Empty : "requirement.unfulfilled.no_trade_lock");
            Response.AppendBool(tradeLocked);

            Response.AppendString("CAMERA");
            Response.AppendString(string.Empty);
            Response.AppendBool(ServerExtraSettings.EnableBetaCamera);

            Response.AppendString("NAVIGATOR_PHASE_TWO_2014");
            Response.AppendString(string.Empty);
            Response.AppendBool(true);

            SendResponse();

            Session.GetHabbo().InitMessenger();

            GetResponse().Init(LibraryParser.OutgoingRequest("CitizenshipStatusMessageComposer"));
            GetResponse().AppendString("citizenship");
            GetResponse().AppendInteger(1);
            GetResponse().AppendInteger(4);
            SendResponse();

            GetResponse().Init(LibraryParser.OutgoingRequest("GameCenterGamesListMessageComposer"));
            GetResponse().AppendInteger(1);
            GetResponse().AppendInteger(18);
            GetResponse().AppendString("elisa_habbo_stories");
            GetResponse().AppendString("000000");
            GetResponse().AppendString("ffffff");
            GetResponse().AppendString("");
            GetResponse().AppendString("");
            SendResponse();

            GetResponse().Init(LibraryParser.OutgoingRequest("AchievementPointsMessageComposer"));
            GetResponse().AppendInteger(Session.GetHabbo().AchievementPoints);
            SendResponse();

            GetResponse().Init(LibraryParser.OutgoingRequest("FigureSetIdsMessageComposer"));
            Session.GetHabbo().ClothesManagerManager.Serialize(GetResponse());
            SendResponse();

            Session.SendMessage(Yupi.GetGame().GetNavigator().SerializePromotionCategories());

            if (Yupi.GetGame().GetTargetedOfferManager().CurrentOffer != null)
            {
                Yupi.GetGame().GetTargetedOfferManager().GenerateMessage(GetResponse());

                SendResponse();
            }
        }
예제 #11
0
        public bool Execute(params object[] stuff)
        {
            if (stuff[0] == null)
            {
                return(false);
            }
            var user = (RoomUser)stuff[0];
            var item = (Interaction)stuff[1];

            if (_mBanned.Contains(item))
            {
                return(false);
            }

            if (user == null)
            {
                return(false);
            }

            var amountLeft = int.Parse(OtherExtraString2);
            var often      = int.Parse(OtherExtraString);

            bool premied = false;

            if (amountLeft == 0)
            {
                var message = new ServerMessage(LibraryParser.OutgoingRequest("WiredRewardAlertMessageComposer"));
                message.AppendInteger(0);
                user.GetClient().SendMessage(message);

                return(true);
            }

            foreach (var dataStr in OtherString.Split(';'))
            {
                var dataArray = dataStr.Split(',');

                var isbadge    = dataArray[0] == "0";
                var code       = dataArray[1];
                var percentage = int.Parse(dataArray[2]);

                var random = Plus.GetRandomNumber(0, 100);

                var message =
                    new ServerMessage(LibraryParser.OutgoingRequest("WiredRewardAlertMessageComposer"));

                if (often == 0 && random <= percentage)
                {
                    continue;
                }
                premied = true;

                if (isbadge)
                {
                    if (user.GetClient().GetHabbo().GetBadgeComponent().HasBadge(code))
                    {
                        message.AppendInteger(1);
                        user.GetClient().SendMessage(message);
                    }
                    else
                    {
                        user.GetClient()
                        .GetHabbo()
                        .GetBadgeComponent()
                        .GiveBadge(code, true, user.GetClient(), true);

                        message.AppendInteger(7);
                        user.GetClient().SendMessage(message);
                    }
                }
                else //item or effect
                {
                    var roomItem = Plus.GetGame().GetItemManager().GetItem(uint.Parse(code));
                    if (roomItem == null)
                    {
                        continue;
                    }

                    if (roomItem.Type == 'e') // is effect
                    {
                        user.GetClient()
                        .GetHabbo()
                        .GetAvatarEffectsInventoryComponent().AddNewEffect(roomItem.SpriteId, 3600, 1);
                    }
                    else
                    {
                        user.GetClient()
                        .GetHabbo()
                        .GetInventoryComponent()
                        .AddNewItem(0u, roomItem.ItemId, "0", 0u, true, false, 0, 0, "");
                        user.GetClient()
                        .SendMessage(
                            new ServerMessage(LibraryParser.OutgoingRequest("UpdateInventoryMessageComposer")));
                    }

                    message.AppendInteger(6);
                    user.GetClient().SendMessage(message);
                }
            }

            if (!premied)
            {
                var message = new ServerMessage(LibraryParser.OutgoingRequest("WiredRewardAlertMessageComposer"));
                message.AppendInteger(4);
                user.GetClient().SendMessage(message);
            }
            return(true);
        }
예제 #12
0
        public override void OnTrigger(GameClient session, RoomItem item, int request, bool hasRights)
        {
            if (session == null)
            {
                return;
            }

            RoomUser roomUserByHabbo = item.GetRoom().GetRoomUserManager().GetRoomUserByHabbo(session.GetHabbo().Id);

            if (roomUserByHabbo == null)
            {
                return;
            }

            if (PathFinder.GetDistance(roomUserByHabbo.X, roomUserByHabbo.Y, item.X, item.Y) > 1)
            {
                roomUserByHabbo.MoveTo(item.X + 1, item.Y);
            }

            if (Math.Abs(roomUserByHabbo.X - item.X) < 2 && Math.Abs(roomUserByHabbo.Y - item.Y) < 2)
            {
                roomUserByHabbo.SetRot(
                    PathFinder.CalculateRotation(roomUserByHabbo.X, roomUserByHabbo.Y, item.X, item.Y), false);

                Room  room  = item.GetRoom();
                Point point = new Point(0, 0);

                switch (roomUserByHabbo.RotBody)
                {
                case 4:
                    point = new Point(item.X, item.Y + 1);
                    break;

                case 0:
                    point = new Point(item.X, item.Y - 1);
                    break;

                case 6:
                    point = new Point(item.X - 1, item.Y);
                    break;

                default:
                    if (roomUserByHabbo.RotBody != 2)
                    {
                        return;
                    }

                    point = new Point(item.X + 1, item.Y);
                    break;
                }

                if (!room.GetGameMap().ValidTile2(point.X, point.Y))
                {
                    return;
                }

                List <RoomItem> coordinatedItems = room.GetGameMap().GetCoordinatedItems(point);

                if (coordinatedItems.Any(i => !i.GetBaseItem().Stackable))
                {
                    return;
                }

                double num = item.GetRoom().GetGameMap().SqAbsoluteHeight(point.X, point.Y);

                ServerMessage serverMessage = new ServerMessage();

                serverMessage.Init(LibraryParser.OutgoingRequest("ItemAnimationMessageComposer"));

                serverMessage.AppendInteger(item.X);
                serverMessage.AppendInteger(item.Y);
                serverMessage.AppendInteger(point.X);
                serverMessage.AppendInteger(point.Y);
                serverMessage.AppendInteger(1);
                serverMessage.AppendInteger(item.Id);
                serverMessage.AppendString(item.Z.ToString(Yupi.CultureInfo));
                serverMessage.AppendString(num.ToString(Yupi.CultureInfo));
                serverMessage.AppendInteger(0);

                room.SendMessage(serverMessage);

                item.GetRoom()
                .GetRoomItemHandler()
                .SetFloorItem(roomUserByHabbo.GetClient(), item, point.X, point.Y, item.Rot, false, false, false);
            }
        }
예제 #13
0
        /// <summary>
        /// Invokes the command.
        /// </summary>
        /// <param name="inputData">The input data.</param>
        internal static void InvokeCommand(string inputData)
        {
            if (string.IsNullOrEmpty(inputData) && Logging.DisabledState)
            {
                return;
            }

            Console.WriteLine();

            if (Logging.DisabledState == false)
            {
                Logging.DisabledState = true;
                Console.WriteLine("Console writing disabled. Waiting for user input.");
                return;
            }

            try
            {
                string[] parameters = inputData.Split(' ');

                switch (parameters[0])
                {
                    #region Roleplay

                case "wualert":
                {
                    if (parameters[1] == null)
                    {
                        Console.WriteLine("Please enter the users username!");
                    }

                    string name   = parameters[1].ToString();
                    string Notice = HabboHotel.Misc.ChatCommandHandler.MergeParams(parameters, 2);

                    bool       dced = false;
                    GameClient User = null;
                    foreach (GameClient mClient in Plus.GetGame().GetClientManager().Clients.Values)
                    {
                        if (mClient == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().CurrentRoom == null)
                        {
                            continue;
                        }
                        if (mClient.GetConnection() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().UserName.ToLower() == name.ToLower())
                        {
                            User = mClient;
                            dced = true;
                        }
                    }

                    if (dced)
                    {
                        User.SendWhisper("[Alert][Private]: " + Notice);
                        Console.WriteLine("Successfully alerted " + name.ToLower() + " :: '" + Notice + "'", ConsoleColor.Red);
                    }
                }
                break;

                case "walert":
                {
                    string Notice = HabboHotel.Misc.ChatCommandHandler.MergeParams(parameters, 1);

                    lock (Plus.GetGame().GetClientManager().Clients.Values)
                    {
                        foreach (GameClient mClient in Plus.GetGame().GetClientManager().Clients.Values)
                        {
                            if (mClient == null)
                            {
                                continue;
                            }
                            if (mClient.GetHabbo() == null)
                            {
                                continue;
                            }
                            if (mClient.GetHabbo().CurrentRoom == null)
                            {
                                continue;
                            }
                            if (mClient.GetConnection() == null)
                            {
                                continue;
                            }
                            mClient.SendWhisperBubble("[Alert][Global]: " + Notice, 33);
                        }
                    }

                    Console.WriteLine("Whisper Alerted: '" + Notice + "'", ConsoleColor.DarkGreen);
                }
                break;

                case "halert":
                {
                    string        Notice     = HabboHotel.Misc.ChatCommandHandler.MergeParams(parameters, 1);
                    ServerMessage HotelAlert = new ServerMessage(LibraryParser.OutgoingRequest("BroadcastNotifMessageComposer"));
                    HotelAlert.AppendString(Notice + "\r\n" + "- FluxRP");



                    Plus.GetGame().GetClientManager().QueueBroadcaseMessage(HotelAlert);

                    Console.WriteLine("Hotel Alerted: '" + Notice + "'", ConsoleColor.DarkGreen);
                }
                break;

                case "ban":
                {
                    if (parameters[1] == null)
                    {
                        Console.WriteLine("Please enter the users username!");
                    }

                    string     name = parameters[1].ToString();
                    bool       dced = false;
                    GameClient User = null;
                    foreach (GameClient mClient in Plus.GetGame().GetClientManager().Clients.Values)
                    {
                        if (mClient == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().CurrentRoom == null)
                        {
                            continue;
                        }
                        if (mClient.GetConnection() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().UserName.ToLower() == name.ToLower())
                        {
                            User = mClient;
                            dced = true;
                        }
                    }

                    if (dced)
                    {
                        User.GetConnection().Dispose();

                        Console.WriteLine("Successfully banned " + name.ToLower(), ConsoleColor.Red);

                        using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                        {
                            dbClient.RunFastQuery("INSERT INTO users_bans(bantype,value,reason) VALUES('user','" + User.GetHabbo().UserName + "','Automatic Ban via Console [Urgent]')");
                        }
                    }
                    else
                    {
                        using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                        {
                            dbClient.RunFastQuery("INSERT INTO bans(bantype,value,reason) VALUES('user','" + name.ToLower() + "','Automatic Ban via Console [Urgent]')");
                        }

                        Console.WriteLine("Successfully banned " + name.ToLower(), ConsoleColor.Red);
                    }
                }
                break;

                case "derank":
                {
                    if (parameters[1] == null)
                    {
                        Console.WriteLine("Please enter the users username!");
                    }

                    string name = parameters[1].ToString();

                    bool       dced = false;
                    GameClient User = null;
                    foreach (GameClient mClient in Plus.GetGame().GetClientManager().Clients.Values)
                    {
                        if (mClient == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().CurrentRoom == null)
                        {
                            continue;
                        }
                        if (mClient.GetConnection() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().UserName.ToLower() == name.ToLower())
                        {
                            User = mClient;
                            dced = true;
                        }
                    }

                    if (dced)
                    {
                        User.GetConnection().Dispose();

                        Console.WriteLine("Successfully deranked " + name.ToLower(), ConsoleColor.Red);


                        using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                        {
                            dbClient.RunFastQuery("UPDATE users SET rank = '1' WHERE username = '******'");
                        }
                    }
                    else
                    {
                        using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                        {
                            dbClient.RunFastQuery("UPDATE users SET rank = '1' WHERE username = '******'");
                        }

                        Console.WriteLine("Successfully deranked " + name.ToLower(), ConsoleColor.Red);
                    }
                }
                break;

                case "dc":
                {
                    if (parameters[1] == null)
                    {
                        Console.WriteLine("Please enter the users username!");
                    }

                    string     name = parameters[1].ToString();
                    bool       dced = false;
                    GameClient User = null;
                    foreach (GameClient mClient in Plus.GetGame().GetClientManager().Clients.Values)
                    {
                        if (mClient == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().CurrentRoom == null)
                        {
                            continue;
                        }
                        if (mClient.GetConnection() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().UserName.ToLower() == name.ToLower())
                        {
                            User = mClient;
                            dced = true;
                        }
                    }

                    if (dced)
                    {
                        User.GetConnection().Dispose();
                        Console.WriteLine("Successfully disconnected " + name.ToLower(), ConsoleColor.Red);
                    }
                }
                break;

                    #endregion

                case "shutdown":
                case "close":
                {
                    using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                    {
                        dbClient.RunFastQuery("UPDATE server_settings SET value = '2' WHERE variable = 'status'");
                    }

                    Logging.DisablePrimaryWriting(true);
                    Out.WriteLine("Shutdown Initalized", "", ConsoleColor.DarkYellow);
                    Plus.PerformShutDown(false);
                    Console.WriteLine();
                    return;
                }

                case "restart":
                {
                    using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                    {
                        dbClient.RunFastQuery("UPDATE server_status SET status = 2 where id = 1");
                    }

                    Logging.LogMessage(string.Format("Server Restarting at {0}", DateTime.Now));
                    Logging.DisablePrimaryWriting(true);
                    Out.WriteLine("Restart Initialized", "", ConsoleColor.DarkYellow);
                    Plus.PerformShutDown(true);
                    Console.WriteLine();
                    return;
                }

                case "fixrooms":
                {
                    List <Room> roomsToUnload = new List <Room>();
                    foreach (Room room30 in Plus.GetGame().GetRoomManager().LoadedRooms.Values)
                    {
                        if ((room30 != null))
                        {
                            roomsToUnload.Add(room30);
                            //Plus.GetGame().GetRoomManager().UnloadRoom(room30);
                        }
                    }
                    foreach (Room roomj in roomsToUnload)
                    {
                        Plus.GetGame().GetRoomManager().UnloadRoom(roomj, "fixrooms");
                    }
                    roomsToUnload = null;

                    var message = new ServerMessage(LibraryParser.OutgoingRequest("MOTDNotificationMessageComposer"));
                    message.AppendInteger(1);
                    message.AppendString("Hey Guys,\n\nAll rooms have been unloaded. This could be because:\n1. Room glitches\n2. Manual room changes\n3. Room migration\n\nPlease reload the client to prevent any errors. Thank you!");
                    GetGame().GetClientManager().QueueBroadcaseMessage(message);

                    break;
                }

                case "flush":
                {
                    if (parameters.Length < 2)
                    {
                        Console.WriteLine("You need to specify a parameter within your command. Type help for more information");
                    }
                    else
                    {
                        switch (parameters[1])
                        {
                        case "database":
                        {
                            Plus.GetDatabaseManager().Destroy();
                            Console.WriteLine("Closed old connections");
                            break;
                        }

                        case "settings":
                        {
                            if (parameters.Length < 3)
                            {
                                Console.WriteLine("You need to specify a parameter within your command. Type help for more information");
                            }
                            else
                            {
                                switch (parameters[2])
                                {
                                case "catalog":
                                {
                                    Console.WriteLine("Flushing catalog settings");

                                    using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                                    {
                                        GetGame().GetCatalog().Initialize(dbClient);
                                    }

                                    GetGame()
                                    .GetClientManager()
                                    .QueueBroadcaseMessage(
                                        new ServerMessage(LibraryParser.OutgoingRequest("PublishShopMessageComposer")));

                                    Console.WriteLine("Catalog flushed");

                                    break;
                                }

                                case "modeldata":
                                {
                                    Console.WriteLine("Flushing modeldata");
                                    using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                                    {
                                        GetGame().GetRoomManager().LoadModels(dbClient);
                                    }
                                    Console.WriteLine("Models flushed");

                                    break;
                                }

                                case "bans":
                                {
                                    Console.WriteLine("Flushing bans");
                                    using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                                    {
                                        GetGame().GetBanManager().Init();
                                    }
                                    Console.WriteLine("Bans flushed");

                                    break;
                                }
                                }
                            }
                            break;
                        }

                        case "console":
                        {
                            Console.Clear();
                            break;
                        }

                        case "memory":
                        {
                            GC.Collect();
                            Console.WriteLine("Memory flushed!");

                            break;
                        }

                        default:
                        {
                            UnknownCommand(inputData);
                            break;
                        }
                        }
                    }

                    break;
                }

                case "view":
                {
                    switch (parameters[1])
                    {
                    case "console":
                    {
                        Console.WriteLine("Press ENTER for disabling console writing");
                        Logging.DisabledState = false;
                        break;
                    }
                    }
                    break;
                }

                case "alert":
                {
                    var str     = inputData.Substring(6);
                    var message = new ServerMessage(LibraryParser.OutgoingRequest("BroadcastNotifMessageComposer"));
                    message.AppendString(str);
                    message.AppendString(string.Empty);
                    GetGame().GetClientManager().QueueBroadcaseMessage(message);
                    Console.WriteLine("[{0}] was sent!", str);
                    return;
                }

                case "clear":
                    Console.Clear();
                    return;

                case "help":
                    Console.WriteLine("shutdown/close - for safe shutting down PlusEmulator");
                    Console.WriteLine("clear - Clear all text");
                    Console.WriteLine("alert (msg) - send alert to Every1!");
                    Console.WriteLine("flush/reload");
                    Console.WriteLine("   - catalog");
                    Console.WriteLine("   - modeldata");
                    Console.WriteLine("   - bans");
                    Console.WriteLine("   - packets (reload packets ids)");
                    Console.WriteLine("   - filter");
                    Console.WriteLine();
                    return;

                default:
                    UnknownCommand(inputData);
                    break;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error in command [" + inputData + "]: " + e.ToString());
            }

            Console.WriteLine();
        }
예제 #14
0
        /// <summary>
        /// Invokes the command.
        /// </summary>
        /// <param name="inputData">The input data.</param>
        internal static void InvokeCommand(string inputData)
        {
            if (string.IsNullOrEmpty(inputData) && ServerLogManager.DisabledState)
            {
                return;
            }

            Console.WriteLine();

            try
            {
                if (inputData == null)
                {
                    return;
                }

                string[] strArray = inputData.Split(' ');

                switch (strArray[0])
                {
                case "shutdown":
                case "close":
                    ServerLogManager.DisablePrimaryWriting(true);
                    Writer.WriteLine("Shutdown Initalized", "Yupi.Life", ConsoleColor.DarkYellow);
                    Yupi.PerformShutDown(false);
                    Console.WriteLine();
                    break;

                case "restart":
                    ServerLogManager.LogMessage($"Server Restarting at {DateTime.Now}");
                    ServerLogManager.DisablePrimaryWriting(true);
                    Writer.WriteLine("Restart Initialized", "Yupi.Life", ConsoleColor.DarkYellow);
                    Yupi.PerformShutDown(true);
                    Console.WriteLine();
                    break;

                case "flush":
                case "reload":
                    if (strArray.Length >= 2)
                    {
                        break;
                    }
                    Console.WriteLine("Please specify parameter. Type 'help' to know more about Console Commands");
                    Console.WriteLine();
                    break;

                case "alert":
                {
                    string        str     = inputData.Substring(6);
                    ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("BroadcastNotifMessageComposer"));
                    message.AppendString(str);
                    message.AppendString(string.Empty);
                    GetGame().GetClientManager().QueueBroadcaseMessage(message);
                    Console.WriteLine("[{0}] was sent!", str);
                    return;
                }

                case "clear":
                    Console.Clear();
                    break;

                case "status":
                    TimeSpan uptime = DateTime.Now - Yupi.ServerStarted;

                    Console.WriteLine("Server status:");
                    Console.WriteLine();
                    Console.WriteLine("Uptime:");
                    Console.WriteLine("\tDays:    {0}", uptime.Days);
                    Console.WriteLine("\tHours:   {0}", uptime.Hours);
                    Console.WriteLine("\tMinutes: {0}", uptime.Minutes);
                    Console.WriteLine();
                    Console.WriteLine("Stats:");
                    Console.WriteLine("\tAccepted Connections: {0}", Yupi.GetConnectionManager().Manager.AcceptedConnections);
                    Console.WriteLine("\tActive Threads: {0}", Process.GetCurrentProcess().Threads.Count);
                    Console.WriteLine();
                    Console.WriteLine();
                    break;

                case "gcinfo":
                {
                    Console.WriteLine("Mode: " + GCSettings.LatencyMode);
                    Console.WriteLine("Is server GC: " + GCSettings.IsServerGC);

                    break;
                }

                case "memstat":
                {
                    Console.WriteLine("GC status:");
                    Console.WriteLine("\tGeneration supported: " + GC.MaxGeneration);
                    Console.WriteLine("\tLatency mode: " + GCSettings.LatencyMode);
                    Console.WriteLine("\tIs server GC: " + GCSettings.IsServerGC);
                    Console.WriteLine();
                    break;
                }

                case "memory":
                {
                    GC.Collect();
                    Console.WriteLine("Memory flushed");

                    break;
                }

                case "help":
                    Console.WriteLine("shutdown/close - for safe shutting down Yupi");
                    Console.WriteLine("clear - Clear all text");
                    Console.WriteLine("memory - Call gargabe collector");
                    Console.WriteLine("alert (msg) - send alert to Every1!");
                    Console.WriteLine("flush/reload");
                    Console.WriteLine("   - catalog");
                    Console.WriteLine("   - modeldata");
                    Console.WriteLine("   - bans");
                    Console.WriteLine("   - packets (reload packets ids)");
                    Console.WriteLine("   - filter");
                    Console.WriteLine();
                    break;

                default:
                    UnknownCommand(inputData);
                    break;
                }

                switch (strArray[1])
                {
                case "database":
                    Console.WriteLine("Database destroyed");
                    Console.WriteLine();
                    break;

                case "packets":
                    LibraryParser.ReloadDictionarys();
                    Console.WriteLine("> Packets Reloaded Suceffuly...");
                    Console.WriteLine();
                    break;

                case "catalog":
                case "shop":
                case "catalogus":
                    FurnitureDataManager.SetCache();
                    using (IQueryAdapter adapter = Yupi.GetDatabaseManager().GetQueryReactor()) GetGame().GetCatalog().Initialize(adapter);
                    FurnitureDataManager.Clear();

                    GetGame()
                    .GetClientManager()
                    .QueueBroadcaseMessage(
                        new ServerMessage(LibraryParser.OutgoingRequest("PublishShopMessageComposer")));
                    Console.WriteLine("Catalogue was re-loaded.");
                    Console.WriteLine();
                    break;

                case "modeldata":
                    using (IQueryAdapter adapter2 = Yupi.GetDatabaseManager().GetQueryReactor()) GetGame().GetRoomManager().LoadModels(adapter2);
                    Console.WriteLine("Room models were re-loaded.");
                    Console.WriteLine();
                    break;

                case "bans":
                    using (IQueryAdapter adapter3 = Yupi.GetDatabaseManager().GetQueryReactor()) GetGame().GetBanManager().LoadBans(adapter3);
                    Console.WriteLine("Bans were re-loaded");
                    Console.WriteLine();
                    break;

                case "filter":
                    UserChatInputFilter.Reload();
                    BlackWordsManager.Reload();
                    break;

                default:
                    UnknownCommand(inputData);
                    Console.WriteLine();
                    break;
                }
            }
            catch (Exception)
            {
                // ignored
            }
        }
예제 #15
0
        public static void SaveWired(GameClient session, RoomItem item, ClientMessage request)
        {
            if (item == null || !item.IsWired)
            {
                return;
            }

            Room room = item.GetRoom();

            WiredHandler wiredHandler = room?.GetWiredHandler();

            if (wiredHandler == null)
            {
                return;
            }

            switch (item.GetBaseItem().InteractionType)
            {
            case Interaction.TriggerTimer:
            {
                request.GetInteger();
                IWiredItem wired = wiredHandler.GetWired(item);
                int        delay = request.GetInteger() * 500;
                wired.Delay = delay;
                wiredHandler.ReloadWired(wired);
                break;
            }

            case Interaction.TriggerRoomEnter:
            {
                request.GetInteger();
                string     otherString = request.GetString();
                IWiredItem wired       = wiredHandler.GetWired(item);
                wired.OtherString = otherString;
                wiredHandler.ReloadWired(wired);
                break;
            }

            case Interaction.TriggerLongRepeater:
            {
                request.GetInteger();
                int        delay  = request.GetInteger() * 5000;
                IWiredItem wired2 = wiredHandler.GetWired(item);
                wired2.Delay = delay;
                wiredHandler.ReloadWired(wired2);
                break;
            }

            case Interaction.TriggerRepeater:
            {
                request.GetInteger();
                int        delay  = request.GetInteger() * 500;
                IWiredItem wired2 = wiredHandler.GetWired(item);
                wired2.Delay = delay;
                wiredHandler.ReloadWired(wired2);
                break;
            }

            case Interaction.TriggerOnUserSay:
            {
                request.GetInteger();
                int        num          = request.GetInteger();
                string     otherString2 = request.GetString();
                IWiredItem wired3       = wiredHandler.GetWired(item);
                wired3.OtherString = otherString2;
                wired3.OtherBool   = num == 1;
                wiredHandler.ReloadWired(wired3);
                break;
            }

            case Interaction.TriggerStateChanged:
            {
                request.GetInteger();
                request.GetString();
                List <RoomItem> furniItems = GetFurniItems(request, room);
                int             num2       = request.GetInteger();
                IWiredItem      wired4     = wiredHandler.GetWired(item);
                wired4.Delay = num2 * 500;
                wired4.Items = furniItems;
                wiredHandler.ReloadWired(wired4);
                break;
            }

            case Interaction.TriggerWalkOnFurni:
            case Interaction.ActionChase:
            case Interaction.ActionResetTimer:
            {
                request.GetInteger();
                request.GetString();
                List <RoomItem> furniItems2 = GetFurniItems(request, room);
                int             num3        = request.GetInteger();
                IWiredItem      wired5      = wiredHandler.GetWired(item);
                wired5.Delay = num3 * 500;
                wired5.Items = furniItems2;
                wiredHandler.ReloadWired(wired5);
                break;
            }

            case Interaction.TriggerWalkOffFurni:
            {
                request.GetInteger();
                request.GetString();
                List <RoomItem> furniItems3 = GetFurniItems(request, room);
                int             num4        = request.GetInteger();
                IWiredItem      wired6      = wiredHandler.GetWired(item);
                wired6.Delay = num4 * 500;
                wired6.Items = furniItems3;
                wiredHandler.ReloadWired(wired6);
                break;
            }

            case Interaction.ActionMoveRotate:
            case Interaction.ActionMoveToDir:
            {
                request.GetInteger();
                int dir = request.GetInteger();
                int rot = request.GetInteger();
                request.GetString();
                List <RoomItem> furniItems4 = GetFurniItems(request, room);
                int             delay       = request.GetInteger();
                IWiredItem      wired7      = wiredHandler.GetWired(item);
                wired7.Items       = furniItems4;
                wired7.Delay       = delay * 500;
                wired7.OtherString = $"{dir};{rot}";
                wiredHandler.ReloadWired(wired7);
                break;
            }

            case Interaction.ActionShowMessage:
            case Interaction.ActionKickUser:
            {
                request.GetInteger();
                string     otherString3 = request.GetString();
                IWiredItem wired8       = wiredHandler.GetWired(item);
                wired8.OtherString = otherString3;
                wiredHandler.ReloadWired(wired8);
                break;
            }

            case Interaction.ActionTeleportTo:
            {
                request.GetInteger();
                request.GetString();
                List <RoomItem> furniItems5 = GetFurniItems(request, room);
                int             num8        = request.GetInteger();
                IWiredItem      wired9      = wiredHandler.GetWired(item);
                wired9.Items = furniItems5;
                wired9.Delay = num8 * 500;
                wiredHandler.ReloadWired(wired9);
                break;
            }

            case Interaction.ActionToggleState:
            {
                request.GetInteger();
                request.GetString();
                List <RoomItem> furniItems6 = GetFurniItems(request, room);
                int             num9        = request.GetInteger();
                IWiredItem      wired10     = wiredHandler.GetWired(item);
                wired10.Items = furniItems6;
                wired10.Delay = num9 * 500;
                wiredHandler.ReloadWired(wired10);
                break;
            }

            case Interaction.ActionGiveReward:
            {
                if (!session.GetHabbo().HasFuse("fuse_use_superwired"))
                {
                    return;
                }

                request.GetInteger();
                int  often  = request.GetInteger();
                bool unique = request.GetIntegerAsBool();
                int  limit  = request.GetInteger();
                request.GetInteger();
                string          extrainfo   = request.GetString();
                List <RoomItem> furniItems7 = GetFurniItems(request, room);
                IWiredItem      wired11     = wiredHandler.GetWired(item);
                wired11.Items             = furniItems7;
                wired11.Delay             = 0;
                wired11.OtherBool         = unique;
                wired11.OtherString       = extrainfo;
                wired11.OtherExtraString  = often.ToString();
                wired11.OtherExtraString2 = limit.ToString();
                wiredHandler.ReloadWired(wired11);
                break;
            }

            case Interaction.ActionMuteUser:
            {
                request.GetInteger();
                int             minutes     = request.GetInteger() * 500;
                string          message     = request.GetString();
                List <RoomItem> furniItems7 = GetFurniItems(request, room);
                IWiredItem      wired11     = wiredHandler.GetWired(item);
                wired11.Items       = furniItems7;
                wired11.Delay       = minutes;
                wired11.OtherBool   = false;
                wired11.OtherString = message;
                wiredHandler.ReloadWired(wired11);
                break;
            }

            case Interaction.TriggerScoreAchieved:
            {
                request.GetInteger();
                int pointsRequired = request.GetInteger();

                IWiredItem wired11 = wiredHandler.GetWired(item);
                wired11.Delay       = 0;
                wired11.OtherString = pointsRequired.ToString();
                wiredHandler.ReloadWired(wired11);
                break;
            }

            case Interaction.ConditionItemsMatches:
            case Interaction.ConditionItemsDontMatch:
            case Interaction.ActionPosReset:
            {
                request.GetInteger();
                bool actualExtraData = request.GetIntegerAsBool();
                bool actualRot       = request.GetIntegerAsBool();
                bool actualPosition  = request.GetIntegerAsBool();

                string booleans = $"{actualExtraData},{actualRot},{actualPosition}".ToLower();

                request.GetString();
                List <RoomItem> items = GetFurniItems(request, room);

                int        delay = request.GetInteger() * 500;
                IWiredItem wiry  = wiredHandler.GetWired(item);

                string dataToSave       = string.Empty;
                string extraStringForWi = string.Empty;

                foreach (RoomItem aItem in items)
                {
                    if (aItem.GetBaseItem().InteractionType == Interaction.Dice)
                    {
                        // Why have a RETURN here?
                        dataToSave += string.Format("0|0|0|0,0,0", aItem.Id, aItem.ExtraData, aItem.Rot, aItem.X,
                                                    aItem.Y, aItem.Z);
                        extraStringForWi +=
                            $"{aItem.Id},{(actualExtraData ? aItem.ExtraData : "N")},{(actualRot ? aItem.Rot.ToString() : "N")},{(actualPosition ? aItem.X.ToString() : "N")},{(actualPosition ? aItem.Y.ToString() : "N")}";

                        return;
                    }

                    dataToSave       += $"{aItem.Id}|{aItem.ExtraData}|{aItem.Rot}|{aItem.X},{aItem.Y},{aItem.Z}";
                    extraStringForWi +=
                        $"{aItem.Id},{(actualExtraData ? aItem.ExtraData : "N")},{(actualRot ? aItem.Rot.ToString() : "N")},{(actualPosition ? aItem.X.ToString() : "N")},{(actualPosition ? aItem.Y.ToString() : "N")}";

                    if (aItem == items.Last())
                    {
                        continue;
                    }

                    dataToSave       += "/";
                    extraStringForWi += ";";
                }

                wiry.Items             = items;
                wiry.Delay             = delay;
                wiry.OtherBool         = true;
                wiry.OtherString       = booleans;
                wiry.OtherExtraString  = dataToSave;
                wiry.OtherExtraString2 = extraStringForWi;
                wiredHandler.ReloadWired(wiry);
                break;
            }

            case Interaction.ConditionGroupMember:
            case Interaction.ConditionNotGroupMember:
            case Interaction.TriggerCollision:
            {
                break;
            }

            case Interaction.ConditionHowManyUsersInRoom:
            case Interaction.ConditionNegativeHowManyUsers:
            {
                request.GetInteger();
                int minimum = request.GetInteger();
                int maximum = request.GetInteger();

                string     ei      = $"{minimum},{maximum}";
                IWiredItem wired12 = wiredHandler.GetWired(item);
                wired12.Items       = new List <RoomItem>();
                wired12.OtherString = ei;
                wiredHandler.ReloadWired(wired12);
                break;
            }

            case Interaction.ConditionUserNotWearingEffect:
            case Interaction.ConditionUserWearingEffect:
            {
                request.GetInteger();
                int        effect  = request.GetInteger();
                IWiredItem wired12 = wiredHandler.GetWired(item);
                wired12.Items       = new List <RoomItem>();
                wired12.OtherString = effect.ToString();
                wiredHandler.ReloadWired(wired12);
                break;
            }

            case Interaction.ConditionUserWearingBadge:
            case Interaction.ConditionUserNotWearingBadge:
            case Interaction.ConditionUserHasFurni:
            {
                request.GetInteger();
                string     badge   = request.GetString();
                IWiredItem wired12 = wiredHandler.GetWired(item);
                wired12.Items       = new List <RoomItem>();
                wired12.OtherString = badge;
                wiredHandler.ReloadWired(wired12);
                break;
            }

            case Interaction.ConditionDateRangeActive:
            {
                request.GetInteger();

                int startDate = request.GetInteger();
                int endDate   = request.GetInteger();

                IWiredItem wired12 = wiredHandler.GetWired(item);
                wired12.Items       = new List <RoomItem>();
                wired12.OtherString = $"{startDate},{endDate}";

                if (startDate == 0)
                {
                    wired12.OtherString = string.Empty;
                    session.SendNotif(Yupi.GetLanguage().GetVar("user_wired_con_date_range"));
                }

                wiredHandler.ReloadWired(wired12);
                break;
            }

            case Interaction.ConditionFurnisHaveUsers:
            case Interaction.ConditionTriggerOnFurni:
            case Interaction.ConditionFurniTypeMatches:
            case Interaction.ConditionFurnisHaveNotUsers:
            case Interaction.ConditionTriggererNotOnFurni:
            case Interaction.ConditionFurniTypeDontMatch:
            {
                request.GetInteger();
                request.GetString();
                List <RoomItem> furniItems = GetFurniItems(request, room);
                IWiredItem      wired12    = wiredHandler.GetWired(item);

                wired12.Items = furniItems;
                wiredHandler.ReloadWired(wired12);
                break;
            }

            case Interaction.ConditionFurniHasFurni:
            case Interaction.ConditionFurniHasNotFurni:
            {
                request.GetInteger();
                bool allItems = request.GetIntegerAsBool();
                request.GetString();

                List <RoomItem> furniItems = GetFurniItems(request, room);
                IWiredItem      wired      = wiredHandler.GetWired(item);

                wired.OtherBool = allItems;
                wired.Items     = furniItems;
                wiredHandler.ReloadWired(wired);
                break;
            }

            case Interaction.ActionGiveScore:
            {
                request.GetInteger();
                int scoreToGive     = request.GetInteger();
                int maxTimesPerGame = request.GetInteger();

                string newExtraInfo = $"{scoreToGive},{maxTimesPerGame}";

                List <RoomItem> furniItems8 = GetFurniItems(request, room);
                IWiredItem      wired12     = wiredHandler.GetWired(item);
                wired12.Items       = furniItems8;
                wired12.OtherString = newExtraInfo;
                wiredHandler.ReloadWired(wired12);
                break;
            }

            case Interaction.ActionJoinTeam:
            {
                request.GetInteger();
                int        team  = request.GetInteger();
                IWiredItem wired = wiredHandler.GetWired(item);
                wired.Delay = team * 500;
                wiredHandler.ReloadWired(wired);
                break;
            }

            case Interaction.ActionBotTalk:
            {
                request.GetInteger();
                bool       type  = request.GetIntegerAsBool();
                string[]   data  = request.GetString().Split((char)9);
                IWiredItem wired = wiredHandler.GetWired(item);
                wired.OtherBool        = type;
                wired.OtherString      = data[0];
                wired.OtherExtraString = data[1];
                wiredHandler.ReloadWired(wired);
                break;
            }

            case Interaction.ActionBotClothes:
            {
                request.GetInteger();
                string[]   data  = request.GetString().Split((char)9);
                IWiredItem wired = wiredHandler.GetWired(item);
                wired.OtherString      = data[0];
                wired.OtherExtraString = data[1];
                wiredHandler.ReloadWired(wired);
                break;
            }

            case Interaction.ActionBotTeleport:
            {
                request.GetInteger();
                string          botName    = request.GetString();
                List <RoomItem> furniItems = GetFurniItems(request, room);
                IWiredItem      wired      = wiredHandler.GetWired(item);
                wired.Items       = furniItems;
                wired.OtherString = botName;
                wiredHandler.ReloadWired(wired);
                break;
            }

            case Interaction.ActionBotGiveHanditem:
            {
                request.GetInteger();
                int        handitem = request.GetInteger();
                string     botName  = request.GetString();
                IWiredItem wired    = wiredHandler.GetWired(item);
                wired.OtherString = botName;
                wired.Delay       = handitem * 500;
                wiredHandler.ReloadWired(wired);
                break;
            }

            case Interaction.ActionBotMove:
            {
                request.GetInteger();
                string          botName    = request.GetString();
                List <RoomItem> furniItems = GetFurniItems(request, room);
                IWiredItem      wired      = wiredHandler.GetWired(item);
                wired.Items       = furniItems;
                wired.OtherString = botName;
                wiredHandler.ReloadWired(wired);
                break;
            }

            case Interaction.ActionCallStacks:
            {
                request.GetInteger();
                request.GetString();
                List <RoomItem> furniItems = GetFurniItems(request, room);
                IWiredItem      wired      = wiredHandler.GetWired(item);
                int             num        = request.GetInteger();
                wired.Items = furniItems;
                wired.Delay = num * 500;
                wiredHandler.ReloadWired(wired);
                break;
            }

            case Interaction.ActionBotTalkToAvatar:
            {
                request.GetInteger();
                bool       type  = request.GetIntegerAsBool();
                string[]   data  = request.GetString().Split((char)9);
                IWiredItem wired = wiredHandler.GetWired(item);
                wired.OtherBool        = type;
                wired.OtherString      = data[0];
                wired.OtherExtraString = data[1];
                wiredHandler.ReloadWired(wired);
                break;
            }

            case Interaction.ConditionTimeMoreThan:
            case Interaction.ConditionTimeLessThan:
            {
                request.GetInteger();
                int        time    = request.GetInteger();
                IWiredItem wired12 = wiredHandler.GetWired(item);
                Console.WriteLine(time);
                wired12.Delay = time * 500;
                wiredHandler.ReloadWired(wired12);
                break;
            }

            case Interaction.ConditionUserHasHanditem:
            {
                request.GetInteger();
                int        handitem = request.GetInteger();
                IWiredItem wired    = wiredHandler.GetWired(item);
                wired.Delay = handitem * 500;
                wiredHandler.ReloadWired(wired);
                break;
            }
            }

            session.SendMessage(new ServerMessage(LibraryParser.OutgoingRequest("SaveWiredMessageComposer")));
        }
예제 #16
0
파일: Pet.cs 프로젝트: sgf/Yupi
        /// <summary>
        ///     Adds the experience.
        /// </summary>
        /// <param name="amount">The amount.</param>
        internal void AddExperience(int amount)
        {
            int oldExperienceGoal = ExperienceGoal;

            Experience += amount;

            if (Experience >= 51900)
            {
                return;
            }

            if (DbState != DatabaseUpdateState.NeedsInsert)
            {
                DbState = DatabaseUpdateState.NeedsUpdate;
            }

            if (Room == null)
            {
                return;
            }

            ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AddPetExperienceMessageComposer"));

            serverMessage.AppendInteger(PetId);
            serverMessage.AppendInteger(VirtualId);
            serverMessage.AppendInteger(amount);
            Room.SendMessage(serverMessage);

            if (Experience < oldExperienceGoal)
            {
                return;
            }

            GameClient ownerSession = Yupi.GetGame().GetClientManager().GetClientByUserId(OwnerId);

            Dictionary <uint, PetCommand> totalPetCommands = PetCommandHandler.GetAllPetCommands();

            Dictionary <uint, PetCommand> petCommands = PetCommandHandler.GetPetCommandByPetType(Type);

            if (ownerSession == null)
            {
                return;
            }

            ServerMessage levelNotify = new ServerMessage(LibraryParser.OutgoingRequest("NotifyNewPetLevelMessageComposer"));

            SerializeInventory(levelNotify, true);

            ownerSession.SendMessage(levelNotify);

            ServerMessage tp = new ServerMessage();

            tp.Init(LibraryParser.OutgoingRequest("PetTrainerPanelMessageComposer"));

            tp.AppendInteger(PetId);

            tp.AppendInteger(totalPetCommands.Count);

            foreach (uint sh in totalPetCommands.Keys)
            {
                tp.AppendInteger(sh);
            }

            tp.AppendInteger(petCommands.Count);

            foreach (uint sh in petCommands.Keys)
            {
                tp.AppendInteger(sh);
            }

            ownerSession.SendMessage(tp);
        }
예제 #17
0
        public void OnTrigger(GameClient session, RoomItem item, int request, bool hasRights)
        {
            if (session == null || item == null || item.GetRoom() == null || !hasRights)
            {
                return;
            }

            var wired = item.GetRoom().GetWiredHandler().GetWired(item);

            if (wired == null)
            {
                return;
            }

            var extraInfo    = wired.OtherString;
            var flag         = wired.OtherBool;
            var delay        = wired.Delay / 500;
            var list         = wired.Items.Where(roomItem => roomItem != null).ToList();
            var extraString  = wired.OtherExtraString;
            var extraString2 = wired.OtherExtraString2;

            switch (item.GetBaseItem().InteractionType)
            {
            case Interaction.TriggerTimer:
            {
                var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage.AppendBool(false);
                serverMessage.AppendInteger(5);
                serverMessage.AppendInteger(list.Count);
                foreach (var current in list)
                {
                    serverMessage.AppendInteger(current.Id);
                }
                serverMessage.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage.AppendInteger(item.Id);
                serverMessage.AppendString(extraInfo);
                serverMessage.AppendInteger(1);
                serverMessage.AppendInteger(1);
                serverMessage.AppendInteger(1);
                serverMessage.AppendInteger(3);
                serverMessage.AppendInteger(0);
                serverMessage.AppendInteger(0);
                session.SendMessage(serverMessage);
                return;
            }

            case Interaction.TriggerRoomEnter:
            {
                var serverMessage2 = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage2.AppendBool(false);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(list.Count);
                foreach (var current2 in list)
                {
                    serverMessage2.AppendInteger(current2.Id);
                }
                serverMessage2.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage2.AppendInteger(item.Id);
                serverMessage2.AppendString(extraInfo);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(7);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(0);
                session.SendMessage(serverMessage2);
                return;
            }

            case Interaction.TriggerGameEnd:
            {
                var serverMessage3 = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage3.AppendBool(false);
                serverMessage3.AppendInteger(0);
                serverMessage3.AppendInteger(list.Count);
                foreach (var current3 in list)
                {
                    serverMessage3.AppendInteger(current3.Id);
                }
                serverMessage3.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage3.AppendInteger(item.Id);
                serverMessage3.AppendString(extraInfo);
                serverMessage3.AppendInteger(0);
                serverMessage3.AppendInteger(0);
                serverMessage3.AppendInteger(8);
                serverMessage3.AppendInteger(0);
                serverMessage3.AppendInteger(0);
                serverMessage3.AppendInteger(0);
                session.SendMessage(serverMessage3);
                return;
            }

            case Interaction.TriggerGameStart:
            {
                var serverMessage4 = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage4.AppendBool(false);
                serverMessage4.AppendInteger(0);
                serverMessage4.AppendInteger(list.Count);
                foreach (var current4 in list)
                {
                    serverMessage4.AppendInteger(current4.Id);
                }
                serverMessage4.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage4.AppendInteger(item.Id);
                serverMessage4.AppendString(extraInfo);
                serverMessage4.AppendInteger(0);
                serverMessage4.AppendInteger(0);
                serverMessage4.AppendInteger(8);
                serverMessage4.AppendInteger(0);
                serverMessage4.AppendInteger(0);
                serverMessage4.AppendInteger(0);
                session.SendMessage(serverMessage4);
                return;
            }

            case Interaction.TriggerLongRepeater:
            {
                var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage.AppendBool(false);
                serverMessage.AppendInteger(5);
                serverMessage.AppendInteger(0);
                serverMessage.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage.AppendInteger(item.Id);
                serverMessage.AppendString("");
                serverMessage.AppendInteger(1);
                serverMessage.AppendInteger(delay / 10);     //fix
                serverMessage.AppendInteger(0);
                serverMessage.AppendInteger(12);
                serverMessage.AppendInteger(0);
                session.SendMessage(serverMessage);
                return;
            }

            case Interaction.TriggerRepeater:
            {
                var serverMessage5 = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage5.AppendBool(false);
                serverMessage5.AppendInteger(5);
                serverMessage5.AppendInteger(list.Count);
                foreach (var current5 in list)
                {
                    serverMessage5.AppendInteger(current5.Id);
                }
                serverMessage5.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage5.AppendInteger(item.Id);
                serverMessage5.AppendString(extraInfo);
                serverMessage5.AppendInteger(1);
                serverMessage5.AppendInteger(delay);
                serverMessage5.AppendInteger(0);
                serverMessage5.AppendInteger(6);
                serverMessage5.AppendInteger(0);
                serverMessage5.AppendInteger(0);
                session.SendMessage(serverMessage5);
                return;
            }

            case Interaction.TriggerOnUserSay:
            {
                var serverMessage6 = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage6.AppendBool(false);
                serverMessage6.AppendInteger(0);
                serverMessage6.AppendInteger(list.Count);
                foreach (var current6 in list)
                {
                    serverMessage6.AppendInteger(current6.Id);
                }
                serverMessage6.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage6.AppendInteger(item.Id);
                serverMessage6.AppendString(extraInfo);
                serverMessage6.AppendInteger(0);
                serverMessage6.AppendInteger(0);
                serverMessage6.AppendInteger(0);
                serverMessage6.AppendInteger(0);
                serverMessage6.AppendInteger(0);
                serverMessage6.AppendInteger(0);
                session.SendMessage(serverMessage6);
                return;
            }

            case Interaction.TriggerScoreAchieved:
            {
                var serverMessage7 = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage7.AppendBool(false);
                serverMessage7.AppendInteger(5);
                serverMessage7.AppendInteger(0);
                serverMessage7.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage7.AppendInteger(item.Id);
                serverMessage7.AppendString("");
                serverMessage7.AppendInteger(1);
                serverMessage7.AppendInteger((String.IsNullOrWhiteSpace(extraInfo)) ? 100 : int.Parse(extraInfo));
                serverMessage7.AppendInteger(0);
                serverMessage7.AppendInteger(10);
                serverMessage7.AppendInteger(0);
                serverMessage7.AppendInteger(0);
                session.SendMessage(serverMessage7);
                return;
            }

            case Interaction.TriggerStateChanged:
            {
                var serverMessage8 = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage8.AppendBool(false);
                serverMessage8.AppendInteger(5);
                serverMessage8.AppendInteger(list.Count);
                foreach (var current8 in list)
                {
                    serverMessage8.AppendInteger(current8.Id);
                }
                serverMessage8.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage8.AppendInteger(item.Id);
                serverMessage8.AppendString(extraInfo);
                serverMessage8.AppendInteger(0);
                serverMessage8.AppendInteger(0);
                serverMessage8.AppendInteger(1);
                serverMessage8.AppendInteger(delay);
                serverMessage8.AppendInteger(0);
                serverMessage8.AppendInteger(0);
                session.SendMessage(serverMessage8);
                return;
            }

            case Interaction.TriggerWalkOnFurni:
            {
                var serverMessage9 = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage9.AppendBool(false);
                serverMessage9.AppendInteger(5);
                serverMessage9.AppendInteger(list.Count);
                foreach (var current9 in list)
                {
                    serverMessage9.AppendInteger(current9.Id);
                }
                serverMessage9.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage9.AppendInteger(item.Id);
                serverMessage9.AppendString(extraInfo);
                serverMessage9.AppendInteger(0);
                serverMessage9.AppendInteger(0);
                serverMessage9.AppendInteger(1);
                serverMessage9.AppendInteger(0);
                serverMessage9.AppendInteger(0);
                serverMessage9.AppendInteger(0);
                session.SendMessage(serverMessage9);
                return;
            }

            case Interaction.ActionMuteUser:
            {
                var serverMessage18 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage18.AppendBool(false);
                serverMessage18.AppendInteger(5);
                serverMessage18.AppendInteger(0);
                serverMessage18.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage18.AppendInteger(item.Id);
                serverMessage18.AppendString(extraInfo);
                serverMessage18.AppendInteger(1);
                serverMessage18.AppendInteger(delay);
                serverMessage18.AppendInteger(0);
                serverMessage18.AppendInteger(20);
                serverMessage18.AppendInteger(0);
                serverMessage18.AppendInteger(0);
                session.SendMessage(serverMessage18);
                return;
            }

            case Interaction.TriggerWalkOffFurni:
            {
                var serverMessage10 = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage10.AppendBool(false);
                serverMessage10.AppendInteger(5);
                serverMessage10.AppendInteger(list.Count);
                foreach (var current10 in list)
                {
                    serverMessage10.AppendInteger(current10.Id);
                }
                serverMessage10.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage10.AppendInteger(item.Id);
                serverMessage10.AppendString(extraInfo);
                serverMessage10.AppendInteger(0);
                serverMessage10.AppendInteger(0);
                serverMessage10.AppendInteger(1);
                serverMessage10.AppendInteger(0);
                serverMessage10.AppendInteger(0);
                serverMessage10.AppendInteger(0);
                serverMessage10.AppendInteger(0);
                session.SendMessage(serverMessage10);
                return;
            }

            case Interaction.TriggerCollision:
            {
                var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage.AppendBool(false);
                serverMessage.AppendInteger(5);
                serverMessage.AppendInteger(0);
                serverMessage.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage.AppendInteger(item.Id);
                serverMessage.AppendString(string.Empty);
                serverMessage.AppendInteger(0);
                serverMessage.AppendInteger(0);
                serverMessage.AppendInteger(11);
                serverMessage.AppendInteger(0);
                session.SendMessage(serverMessage);
                return;
            }

            case Interaction.ActionGiveScore:
            {
                // Por hacer.
                var serverMessage11 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage11.AppendBool(false);
                serverMessage11.AppendInteger(5);
                serverMessage11.AppendInteger(0);
                serverMessage11.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage11.AppendInteger(item.Id);
                serverMessage11.AppendString("");
                serverMessage11.AppendInteger(2);
                if (String.IsNullOrWhiteSpace(extraInfo))
                {
                    serverMessage11.AppendInteger(10);    // Puntos a dar
                    serverMessage11.AppendInteger(1);     // Numero de veces por equipo
                }
                else
                {
                    var integers = extraInfo.Split(',');
                    serverMessage11.AppendInteger(int.Parse(integers[0]));     // Puntos a dar
                    serverMessage11.AppendInteger(int.Parse(integers[1]));     // Numero de veces por equipo
                }
                serverMessage11.AppendInteger(0);
                serverMessage11.AppendInteger(6);
                serverMessage11.AppendInteger(0);
                serverMessage11.AppendInteger(0);
                serverMessage11.AppendInteger(0);
                session.SendMessage(serverMessage11);
                return;
            }

            case Interaction.ConditionGroupMember:
            case Interaction.ConditionNotGroupMember:
            {
                var message = new ServerMessage(LibraryParser.OutgoingRequest("WiredConditionMessageComposer"));
                message.AppendBool(false);
                message.AppendInteger(5);
                message.AppendInteger(0);
                message.AppendInteger(item.GetBaseItem().SpriteId);
                message.AppendInteger(item.Id);
                message.AppendString("");
                message.AppendInteger(0);
                message.AppendInteger(0);
                message.AppendInteger(10);
                session.SendMessage(message);
                return;
            }

            case Interaction.ConditionItemsMatches:
            case Interaction.ConditionItemsDontMatch:
            {
                var serverMessage21 =
                    new ServerMessage(LibraryParser.OutgoingRequest("WiredConditionMessageComposer"));
                serverMessage21.AppendBool(false);
                serverMessage21.AppendInteger(5);
                serverMessage21.AppendInteger(list.Count);
                foreach (var current20 in list)
                {
                    serverMessage21.AppendInteger(current20.Id);
                }
                serverMessage21.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage21.AppendInteger(item.Id);
                serverMessage21.AppendString(extraString2);
                serverMessage21.AppendInteger(3);

                if (String.IsNullOrWhiteSpace(extraInfo) || !extraInfo.Contains(","))
                {
                    serverMessage21.AppendInteger(0);
                    serverMessage21.AppendInteger(0);
                    serverMessage21.AppendInteger(0);
                }
                else
                {
                    var boolz = extraInfo.Split(',');

                    foreach (var stringy in boolz)
                    {
                        serverMessage21.AppendInteger(stringy.ToLower() == "true" ? 1 : 0);
                    }
                }
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(0);
                session.SendMessage(serverMessage21);
                return;
            }

            case Interaction.ActionPosReset:
            {
                var serverMessage12 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage12.AppendBool(false);
                serverMessage12.AppendInteger(5);
                serverMessage12.AppendInteger(list.Count);
                foreach (var current12 in list)
                {
                    serverMessage12.AppendInteger(current12.Id);
                }
                serverMessage12.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage12.AppendInteger(item.Id);
                serverMessage12.AppendString(extraString2);
                serverMessage12.AppendInteger(3);

                if (String.IsNullOrWhiteSpace(extraInfo))
                {
                    serverMessage12.AppendInteger(0);
                    serverMessage12.AppendInteger(0);
                    serverMessage12.AppendInteger(0);
                }
                else
                {
                    var boolz = extraInfo.Split(',');

                    foreach (var stringy in boolz)
                    {
                        serverMessage12.AppendInteger(stringy.ToLower() == "true" ? 1 : 0);
                    }
                }
                serverMessage12.AppendInteger(0);
                serverMessage12.AppendInteger(3);
                serverMessage12.AppendInteger(delay);     // Delay
                serverMessage12.AppendInteger(0);
                session.SendMessage(serverMessage12);
                return;
            }

            case Interaction.ActionMoveRotate:
            case Interaction.ActionMoveToDir:
            {
                var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage.AppendBool(false);
                serverMessage.AppendInteger(5);

                serverMessage.AppendInteger(list.Count(roomItem => roomItem != null));
                foreach (var roomItem in list.Where(roomItem => roomItem != null))
                {
                    serverMessage.AppendInteger(roomItem.Id);
                }

                serverMessage.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage.AppendInteger(item.Id);
                serverMessage.AppendString(string.Empty);
                serverMessage.AppendInteger(2);
                serverMessage.AppendIntegersArray(extraInfo, ';', 2);
                serverMessage.AppendInteger(0);
                serverMessage.AppendInteger(4);
                serverMessage.AppendInteger(delay);
                serverMessage.AppendInteger(0);
                serverMessage.AppendInteger(0);
                session.SendMessage(serverMessage);
                return;
            }

            case Interaction.ActionResetTimer:
            {
                var serverMessage14 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage14.AppendBool(false);
                serverMessage14.AppendInteger(5);
                serverMessage14.AppendInteger(list.Count);
                foreach (var current14 in list)
                {
                    serverMessage14.AppendInteger(current14.Id);
                }
                serverMessage14.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage14.AppendInteger(item.Id);
                serverMessage14.AppendString(extraInfo);
                serverMessage14.AppendInteger(0);
                serverMessage14.AppendInteger(0);
                serverMessage14.AppendInteger(0);
                serverMessage14.AppendInteger(0);
                serverMessage14.AppendInteger(0);
                serverMessage14.AppendInteger(0);
                session.SendMessage(serverMessage14);
                return;
            }

            case Interaction.ActionShowMessage:
            case Interaction.ActionKickUser:
            {
                var serverMessage15 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage15.AppendBool(false);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(list.Count);
                foreach (var current15 in list)
                {
                    serverMessage15.AppendInteger(current15.Id);
                }
                serverMessage15.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage15.AppendInteger(item.Id);
                serverMessage15.AppendString(extraInfo);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(7);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                session.SendMessage(serverMessage15);
                return;
            }

            case Interaction.ActionTeleportTo:
            {
                var serverMessage16 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage16.AppendBool(false);
                serverMessage16.AppendInteger(5);

                serverMessage16.AppendInteger(list.Count);
                foreach (var roomItem in list)
                {
                    serverMessage16.AppendInteger(roomItem.Id);
                }

                serverMessage16.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage16.AppendInteger(item.Id);
                serverMessage16.AppendString(extraInfo);
                serverMessage16.AppendInteger(0);
                serverMessage16.AppendInteger(8);
                serverMessage16.AppendInteger(0);
                serverMessage16.AppendInteger(delay);
                serverMessage16.AppendInteger(0);
                serverMessage16.AppendByte(2);
                session.SendMessage(serverMessage16);
                return;
            }

            case Interaction.ActionToggleState:
            {
                var serverMessage17 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage17.AppendBool(false);
                serverMessage17.AppendInteger(5);
                serverMessage17.AppendInteger(list.Count);
                foreach (var current17 in list)
                {
                    serverMessage17.AppendInteger(current17.Id);
                }
                serverMessage17.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage17.AppendInteger(item.Id);
                serverMessage17.AppendString(extraInfo);
                serverMessage17.AppendInteger(0);
                serverMessage17.AppendInteger(8);
                serverMessage17.AppendInteger(0);
                serverMessage17.AppendInteger(delay);
                serverMessage17.AppendInteger(0);
                serverMessage17.AppendInteger(0);
                session.SendMessage(serverMessage17);
                return;
            }

            case Interaction.ActionGiveReward:
            {
                var serverMessage18 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage18.AppendBool(false);
                serverMessage18.AppendInteger(5);
                serverMessage18.AppendInteger(0);
                serverMessage18.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage18.AppendInteger(item.Id);
                serverMessage18.AppendString(extraInfo);
                serverMessage18.AppendInteger(3);
                serverMessage18.AppendInteger(extraString == "" ? 0 : int.Parse(extraString));
                serverMessage18.AppendInteger(flag ? 1 : 0);
                serverMessage18.AppendInteger(extraString2 == "" ? 0 : int.Parse(extraString2));
                serverMessage18.AppendInteger(0);
                serverMessage18.AppendInteger(17);
                serverMessage18.AppendInteger(0);
                serverMessage18.AppendInteger(0);
                session.SendMessage(serverMessage18);
                return;
            }

            case Interaction.ConditionHowManyUsersInRoom:
            case Interaction.ConditionNegativeHowManyUsers:
            {
                var serverMessage19 =
                    new ServerMessage(LibraryParser.OutgoingRequest("WiredConditionMessageComposer"));
                serverMessage19.AppendBool(false);
                serverMessage19.AppendInteger(5);
                serverMessage19.AppendInteger(0);
                serverMessage19.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage19.AppendInteger(item.Id);
                serverMessage19.AppendString("");
                serverMessage19.AppendInteger(2);
                if (String.IsNullOrWhiteSpace(extraInfo))
                {
                    serverMessage19.AppendInteger(1);
                    serverMessage19.AppendInteger(50);
                }
                else
                {
                    foreach (var integers in extraInfo.Split(','))
                    {
                        serverMessage19.AppendInteger(int.Parse(integers));
                    }
                }
                serverMessage19.AppendBool(false);
                serverMessage19.AppendInteger(0);
                serverMessage19.AppendInteger(1290);
                session.SendMessage(serverMessage19);
                return;
            }

            case Interaction.ConditionFurnisHaveUsers:
            case Interaction.ConditionStatePos:
            case Interaction.ConditionTriggerOnFurni:
            case Interaction.ConditionFurniHasFurni:
            case Interaction.ConditionFurniTypeMatches:
            case Interaction.ConditionFurniHasNotFurni:
            case Interaction.ConditionFurnisHaveNotUsers:
            case Interaction.ConditionFurniTypeDontMatch:
            case Interaction.ConditionTriggererNotOnFurni:
            {
                var serverMessage19 =
                    new ServerMessage(LibraryParser.OutgoingRequest("WiredConditionMessageComposer"));
                serverMessage19.AppendBool(false);
                serverMessage19.AppendInteger(5);
                serverMessage19.AppendInteger(list.Count);
                foreach (var current18 in list)
                {
                    serverMessage19.AppendInteger(current18.Id);
                }
                serverMessage19.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage19.AppendInteger(item.Id);
                serverMessage19.AppendInteger(0);
                serverMessage19.AppendInteger(0);
                serverMessage19.AppendInteger(0);
                serverMessage19.AppendBool(false);
                serverMessage19.AppendBool(true);
                session.SendMessage(serverMessage19);
                return;
            }

            case Interaction.ConditionTimeLessThan:
            case Interaction.ConditionTimeMoreThan:
            {
                var serverMessage21 =
                    new ServerMessage(LibraryParser.OutgoingRequest("WiredConditionMessageComposer"));
                serverMessage21.AppendBool(false);
                serverMessage21.AppendInteger(5);
                serverMessage21.AppendInteger(list.Count);
                foreach (var current20 in list)
                {
                    serverMessage21.AppendInteger(current20.Id);
                }
                serverMessage21.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage21.AppendInteger(item.Id);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(0);
                session.SendMessage(serverMessage21);
                return;
            }

            case Interaction.ConditionUserWearingEffect:
            case Interaction.ConditionUserNotWearingEffect:
            {
                int effect;
                int.TryParse(extraInfo, out effect);
                var serverMessage21 =
                    new ServerMessage(LibraryParser.OutgoingRequest("WiredConditionMessageComposer"));
                serverMessage21.AppendBool(false);
                serverMessage21.AppendInteger(5);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage21.AppendInteger(item.Id);
                serverMessage21.AppendString("");
                serverMessage21.AppendInteger(1);
                serverMessage21.AppendInteger(effect);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(12);
                session.SendMessage(serverMessage21);
                return;
            }

            case Interaction.ConditionUserWearingBadge:
            case Interaction.ConditionUserNotWearingBadge:
            case Interaction.ConditionUserHasFurni:
            {
                var serverMessage21 =
                    new ServerMessage(LibraryParser.OutgoingRequest("WiredConditionMessageComposer"));
                serverMessage21.AppendBool(false);
                serverMessage21.AppendInteger(5);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage21.AppendInteger(item.Id);
                serverMessage21.AppendString(extraInfo);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(11);
                session.SendMessage(serverMessage21);
                return;
            }

            case Interaction.ConditionDateRangeActive:
            {
                var date1 = 0;
                var date2 = 0;

                try
                {
                    var strArray = extraInfo.Split(',');
                    date1 = int.Parse(strArray[0]);
                    date2 = int.Parse(strArray[1]);
                }
                catch
                {
                }

                var serverMessage21 =
                    new ServerMessage(LibraryParser.OutgoingRequest("WiredConditionMessageComposer"));
                serverMessage21.AppendBool(false);
                serverMessage21.AppendInteger(5);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage21.AppendInteger(item.Id);
                serverMessage21.AppendString(extraInfo);
                serverMessage21.AppendInteger(2);
                serverMessage21.AppendInteger(date1);
                serverMessage21.AppendInteger(date2);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(24);
                session.SendMessage(serverMessage21);
                return;
            }

            case Interaction.ActionJoinTeam:
            {
                var serverMessage15 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage15.AppendBool(false);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage15.AppendInteger(item.Id);
                serverMessage15.AppendString(extraInfo);
                serverMessage15.AppendInteger(1);
                serverMessage15.AppendInteger(delay);     // Team (1-4)
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(9);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                session.SendMessage(serverMessage15);
                return;
            }

            case Interaction.ActionLeaveTeam:
            {
                var serverMessage15 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage15.AppendBool(false);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage15.AppendInteger(item.Id);
                serverMessage15.AppendString(extraInfo);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(10);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                session.SendMessage(serverMessage15);
                return;
            }

            case Interaction.TriggerBotReachedAvatar:
            {
                var serverMessage2 = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage2.AppendBool(false);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(list.Count);
                foreach (var current2 in list)
                {
                    serverMessage2.AppendInteger(current2.Id);
                }
                serverMessage2.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage2.AppendInteger(item.Id);
                serverMessage2.AppendString(extraInfo);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(14);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(0);
                session.SendMessage(serverMessage2);
                return;
            }

            case Interaction.TriggerBotReachedStuff:
            {
                var serverMessage2 = new ServerMessage(LibraryParser.OutgoingRequest("WiredTriggerMessageComposer"));
                serverMessage2.AppendBool(false);
                serverMessage2.AppendInteger(5);
                serverMessage2.AppendInteger(list.Count);
                foreach (var current2 in list)
                {
                    serverMessage2.AppendInteger(current2.Id);
                }
                serverMessage2.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage2.AppendInteger(item.Id);
                serverMessage2.AppendString(extraInfo);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(13);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(0);
                serverMessage2.AppendInteger(0);
                session.SendMessage(serverMessage2);
                return;
            }

            case Interaction.ActionBotClothes:
            {
                var serverMessage15 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage15.AppendBool(false);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage15.AppendInteger(item.Id);
                serverMessage15.AppendString(extraInfo + (char)9 + extraString);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(26);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                session.SendMessage(serverMessage15);
                return;
            }

            case Interaction.ActionBotFollowAvatar:
            {
                var serverMessage15 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage15.AppendBool(false);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage15.AppendInteger(item.Id);
                serverMessage15.AppendString(extraInfo);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(25);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                session.SendMessage(serverMessage15);
                return;
            }

            case Interaction.ActionBotGiveHanditem:
            {
                var serverMessage15 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage15.AppendBool(false);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage15.AppendInteger(item.Id);
                serverMessage15.AppendString(extraInfo);
                serverMessage15.AppendInteger(1);
                serverMessage15.AppendInteger(delay);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(24);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                session.SendMessage(serverMessage15);
                return;
            }

            case Interaction.ActionBotMove:
            {
                var serverMessage15 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage15.AppendBool(false);
                serverMessage15.AppendInteger(5);
                serverMessage15.AppendInteger(list.Count);
                foreach (var current2 in list)
                {
                    serverMessage15.AppendInteger(current2.Id);
                }
                serverMessage15.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage15.AppendInteger(item.Id);
                serverMessage15.AppendString(extraInfo);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(22);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                session.SendMessage(serverMessage15);
                return;
            }

            case Interaction.ActionBotTalk:
            {
                var serverMessage15 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage15.AppendBool(false);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage15.AppendInteger(item.Id);
                serverMessage15.AppendString(extraInfo + (char)9 + extraString);
                serverMessage15.AppendInteger(1);
                serverMessage15.AppendInteger(Plus.BoolToInteger(flag));
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(23);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                session.SendMessage(serverMessage15);
                return;
            }

            case Interaction.ActionBotTalkToAvatar:
            {
                var serverMessage15 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage15.AppendBool(false);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage15.AppendInteger(item.Id);
                serverMessage15.AppendString(extraInfo);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(27);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                session.SendMessage(serverMessage15);
                return;
            }

            case Interaction.ActionBotTeleport:
            {
                var serverMessage15 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage15.AppendBool(false);
                serverMessage15.AppendInteger(5);
                serverMessage15.AppendInteger(list.Count);
                foreach (var current2 in list)
                {
                    serverMessage15.AppendInteger(current2.Id);
                }
                serverMessage15.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage15.AppendInteger(item.Id);
                serverMessage15.AppendString(extraInfo);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(21);
                serverMessage15.AppendInteger(0);
                serverMessage15.AppendInteger(0);
                session.SendMessage(serverMessage15);
                return;
            }

            case Interaction.ActionChase:
            {
                var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage.AppendBool(false);
                serverMessage.AppendInteger(5);

                serverMessage.AppendInteger(list.Count);
                foreach (var roomItem in list)
                {
                    serverMessage.AppendInteger(roomItem.Id);
                }

                serverMessage.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage.AppendInteger(item.Id);
                serverMessage.AppendString(string.Empty);
                serverMessage.AppendInteger(0);
                serverMessage.AppendInteger(0);
                serverMessage.AppendInteger(11);
                serverMessage.AppendInteger(0);

                serverMessage.AppendInteger(0);

                session.SendMessage(serverMessage);
                return;
            }

            case Interaction.ConditionBotHasHanditem:
            {
                var serverMessage21 =
                    new ServerMessage(LibraryParser.OutgoingRequest("WiredConditionMessageComposer"));
                serverMessage21.AppendBool(false);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage21.AppendInteger(item.Id);
                serverMessage21.AppendString(extraInfo);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(0);
                serverMessage21.AppendInteger(25);
                session.SendMessage(serverMessage21);
                return;
            }

            case Interaction.ArrowPlate:
            case Interaction.PressurePad:
            case Interaction.RingPlate:
            case Interaction.ColorTile:
            case Interaction.ColorWheel:
            case Interaction.FloorSwitch1:
            case Interaction.FloorSwitch2:
            case Interaction.FireGate:
            case Interaction.GlassFoor:
                break;

            case Interaction.SpecialRandom:
            {
                var serverMessage24 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage24.AppendBool(false);
                serverMessage24.AppendInteger(5);
                serverMessage24.AppendInteger(list.Count);
                foreach (var current23 in list)
                {
                    serverMessage24.AppendInteger(current23.Id);
                }
                serverMessage24.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage24.AppendInteger(item.Id);
                serverMessage24.AppendString(extraInfo);
                serverMessage24.AppendInteger(0);
                serverMessage24.AppendInteger(8);
                serverMessage24.AppendInteger(0);
                serverMessage24.AppendInteger(0);
                serverMessage24.AppendInteger(0);
                serverMessage24.AppendInteger(0);
                session.SendMessage(serverMessage24);
                return;
            }

            case Interaction.SpecialUnseen:
            {
                var serverMessage25 = new ServerMessage(LibraryParser.OutgoingRequest("WiredEffectMessageComposer"));
                serverMessage25.AppendBool(false);
                serverMessage25.AppendInteger(5);
                serverMessage25.AppendInteger(list.Count);
                foreach (var current24 in list)
                {
                    serverMessage25.AppendInteger(current24.Id);
                }
                serverMessage25.AppendInteger(item.GetBaseItem().SpriteId);
                serverMessage25.AppendInteger(item.Id);
                serverMessage25.AppendString(extraInfo);
                serverMessage25.AppendInteger(0);
                serverMessage25.AppendInteger(8);
                serverMessage25.AppendInteger(0);
                serverMessage25.AppendInteger(0);
                serverMessage25.AppendInteger(0);
                serverMessage25.AppendInteger(0);
                session.SendMessage(serverMessage25);
                return;
            }

            default:
                return;
            }
        }
예제 #18
0
        /// <summary>
        /// Loads this instance.
        /// </summary>
        public static void Load()
        {
            Cache.Clear();

            var message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));

            message.AppendString("furni_placement_error");
            message.AppendInteger(1);
            message.AppendString("message");
            message.AppendString("${room.error.cant_set_item}");
            Cache.Add(StaticMessage.ErrorCantSetItem, message.GetReversedBytes());

            message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
            message.AppendString("furni_placement_error");
            message.AppendInteger(1);
            message.AppendString("message");
            message.AppendString("${room.error.cant_set_not_owner}");
            Cache.Add(StaticMessage.ErrorCantSetNotOwner, message.GetReversedBytes());

            message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
            message.AppendString("game_promo_small");
            message.AppendInteger(4);
            message.AppendString("title");
            message.AppendString("${generic.notice}");
            message.AppendString("message");
            message.AppendString("Now, the commands page opens in a different way");
            message.AppendString("linkUrl");
            message.AppendString("event:habbopages/chat/newway");
            message.AppendString("linkTitle");
            message.AppendString("${mod.alert.link}");
            Cache.Add(StaticMessage.NewWayToOpenCommandsList, message.GetReversedBytes());

            message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
            message.AppendString("");
            message.AppendInteger(4);
            message.AppendString("title");
            message.AppendString("${generic.notice}");
            message.AppendString("message");
            message.AppendString("${catalog.gift_wrapping.receiver_not_found.title}");
            message.AppendString("linkUrl");
            message.AppendString("event:");
            message.AppendString("linkTitle");
            message.AppendString("ok");
            Cache.Add(StaticMessage.UserNotFound, message.GetReversedBytes());

            message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
            message.AppendString("");
            message.AppendInteger(4);
            message.AppendString("title");
            message.AppendString("${generic.notice}");
            message.AppendString("message");
            message.AppendString("You've exceeded the maximum furnis in inventory. Only furnis 2800 will show if you want to see the others, places some Furni in your rooms.");
            message.AppendString("linkUrl");
            message.AppendString("event:");
            message.AppendString("linkTitle");
            message.AppendString("ok");
            Cache.Add(StaticMessage.AdviceMaxItems, message.GetReversedBytes());

            message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
            message.AppendString("");
            message.AppendInteger(4);
            message.AppendString("title");
            message.AppendString("${generic.notice}");
            message.AppendString("message");
            message.AppendString("You've exceeded the maximum furnis in inventory. You can not buy more until you desagas some furnis.");
            message.AppendString("linkUrl");
            message.AppendString("event:");
            message.AppendString("linkTitle");
            message.AppendString("ok");
            Cache.Add(StaticMessage.AdvicePurchaseMaxItems, message.GetReversedBytes());
        }
예제 #19
0
        /// <summary>
        /// Serializes the user chatlog.
        /// </summary>
        /// <param name="userId">The user identifier.</param>
        /// <returns>ServerMessage.</returns>
        internal static ServerMessage SerializeUserChatlog(uint userId)
        {
            ServerMessage result;

            using (IQueryAdapter queryReactor = Plus.GetDatabaseManager().GetQueryReactor())
            {
                queryReactor.SetQuery(string.Format("SELECT room_id FROM users_chatlogs WHERE user_id = {0} ORDER BY timestamp DESC LIMIT 1", userId));
                DataTable table         = queryReactor.GetTable();
                var       serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("ModerationToolUserChatlogMessageComposer"));
                serverMessage.AppendInteger(userId);
                serverMessage.AppendString(Plus.GetGame().GetClientManager().GetNameById(userId));
                if (table != null)
                {
                    serverMessage.AppendInteger(table.Rows.Count);
                    IEnumerator enumerator = table.Rows.GetEnumerator();
                    try
                    {
                        while (enumerator.MoveNext())
                        {
                            var dataRow = (DataRow)enumerator.Current;
                            queryReactor.SetQuery(string.Concat(new object[]
                            {
                                "SELECT user_id,timestamp,message FROM users_chatlogs WHERE room_id = ",
                                (uint)dataRow["room_id"],
                                " AND user_id = ",
                                userId,
                                " ORDER BY timestamp DESC LIMIT 500"
                            }));
                            DataTable table2   = queryReactor.GetTable();
                            RoomData  roomData = Plus.GetGame().GetRoomManager().GenerateRoomData((uint)dataRow["room_id"]);
                            if (table2 != null)
                            {
                                serverMessage.AppendByte(1);
                                serverMessage.AppendShort(2);
                                serverMessage.AppendString("roomName");
                                serverMessage.AppendByte(2);
                                serverMessage.AppendString(roomData == null ? "This room was deleted" : roomData.Name);
                                serverMessage.AppendString("roomId");
                                serverMessage.AppendByte(1);
                                serverMessage.AppendInteger((uint)dataRow["room_id"]);
                                serverMessage.AppendShort(table2.Rows.Count);
                                IEnumerator enumerator2 = table2.Rows.GetEnumerator();
                                try
                                {
                                    while (enumerator2.MoveNext())
                                    {
                                        var   dataRow2   = (DataRow)enumerator2.Current;
                                        Habbo habboForId = Plus.GetHabboById((uint)dataRow2["user_id"]);
                                        Plus.UnixToDateTime((double)dataRow2["timestamp"]);
                                        if (habboForId == null)
                                        {
                                            return(null);
                                        }
                                        serverMessage.AppendInteger(((int)(Plus.GetUnixTimeStamp() - (double)dataRow2["timestamp"])));

                                        serverMessage.AppendInteger(habboForId.Id);
                                        serverMessage.AppendString(habboForId.UserName);
                                        serverMessage.AppendString(dataRow2["message"].ToString());
                                        serverMessage.AppendBool(false);
                                    }
                                    continue;
                                }
                                finally
                                {
                                    var disposable = enumerator2 as IDisposable;
                                    if (disposable != null)
                                    {
                                        disposable.Dispose();
                                    }
                                }
                            }
                            serverMessage.AppendByte(1);
                            serverMessage.AppendShort(0);
                            serverMessage.AppendShort(0);
                        }
                        goto IL_29B;
                    }
                    finally
                    {
                        var disposable2 = enumerator as IDisposable;
                        if (disposable2 != null)
                        {
                            disposable2.Dispose();
                        }
                    }
                }
                serverMessage.AppendInteger(0);
IL_29B:
                result = serverMessage;
            }
            return(result);
        }
예제 #20
0
        public static bool CanAttack(GameClient User1, GameClient User2, bool Weapon = false)
        {
            #region Fundamental Null Checks
            if (User2 == null)
            {
                User1.SendWhisper("This user was not found in this room!");
                return(false);
            }

            if (User2.GetHabbo() == null)
            {
                User1.SendWhisper("This user was not found in this room!");
                return(false);
            }

            if (User2.GetHabbo().CurrentRoom == null)
            {
                User1.SendWhisper("This user was not found in this room!");
                return(false);
            }

            if (User2.GetHabbo().CurrentRoom != User1.GetHabbo().CurrentRoom)
            {
                User1.SendWhisper("This user was not found in this room!");
                return(false);
            }
            #endregion

            Room     Room      = User1.GetHabbo().CurrentRoom;
            RoomUser RoomUser1 = User1.GetHabbo().GetRoomUser();
            RoomUser RoomUser2 = User2.GetHabbo().GetRoomUser();

            Vector2D Pos1 = new Vector2D(RoomUser1.X, RoomUser1.Y);
            Vector2D Pos2 = new Vector2D(RoomUser2.X, RoomUser2.Y);

            #region Cooldown Checks
            if (!Weapon)
            {
                if (User1.GetRoleplay().CoolDown > 0)
                {
                    User1.SendWhisper("You are cooling down! [" + User1.GetRoleplay().CoolDown + "/3]");
                    return(false);
                }
            }
            #endregion

            #region Game Checks
            if (User2.GetRoleplay().inColourWars&& !User1.GetRoleplay().inColourWars)
            {
                Room mRoom = RoleplayManager.GenerateRoom(ColourManager.MainLobby);
                User1.GetRoleplay().RequestedTaxi_Arrived      = false;
                User1.GetRoleplay().RecentlyCalledTaxi         = true;
                User1.GetRoleplay().RecentlyCalledTaxi_Timeout = 10;
                User1.GetRoleplay().RequestedTaxiDestination   = mRoom;
                User1.GetRoleplay().RequestedTaxi = true;
                User1.GetRoleplay().taxiTimer     = new taxiTimer(User1);
                User1.SendNotif("You cannot attack this person as they are in color wars! Please taxi out of the color wars room.");
                return(false);
            }
            if (User1.GetRoleplay().inColourWars&& !User2.GetRoleplay().inColourWars)
            {
                User1.SendNotif("You cannot attack this person as they are not in color wars!");
                return(false);
            }
            #endregion

            #region Special Checks
            if (User1.GetRoleplay().RayFrozen)
            {
                User1.SendWhisper("You cannot do this as you are frozen!");
                return(false);
            }
            #endregion

            if (!Weapon)
            {
                #region Fundamental Checks
                if (Room.RoomData.Description.Contains("NOHIT") && RoleplayManager.PurgeTime == false)
                {
                    User1.SendWhisper("Sorry, but this is a no hitting zone!");
                    User1.GetRoleplay().CoolDown = 3;
                    return(false);
                }
                #endregion

                #region Secondary Checks

                if (Room.RoomData.Description.Contains("SAFEZONE"))
                {
                    User1.SendWhisper("Sorry, but this is a safezone!");
                    User1.GetRoleplay().CoolDown = 3;
                    return(false);
                }
                if (Room.RoomData.Description.Contains("BRAWL") && !User1.GetRoleplay().inBrawl&& !User1.GetRoleplay().Brawl)
                {
                    User1.SendWhisper("You are not in a brawl, so you cannot do this!");
                    return(false);
                }
                if (User2.GetRoleplay().usingPlane)
                {
                    User1.SendWhisper("You cannot hit this user as they are in the sky!");
                    User1.GetRoleplay().CoolDown = 3;
                    return(false);
                }
                if (User1.GetRoleplay().Energy <= 0 && !User1.GetRoleplay().inColourWars)
                {
                    User1.SendWhisper("You do not have enough energy to do this!");
                    return(false);
                }
                if (User1.GetRoleplay().Dead)
                {
                    User1.SendWhisper("Cannot complete this action while you are dead!");
                    User1.GetRoleplay().CoolDown = 3;
                    return(false);
                }

                if (User1.GetRoleplay().Jailed)
                {
                    User1.SendWhisper("Cannot complete this action while you are jailed!");
                    User1.GetRoleplay().CoolDown = 3;
                    return(false);
                }

                if (User2.GetRoleplay().Dead)
                {
                    User1.SendWhisper("Cannot complete this action as this user is dead!");
                    User1.GetRoleplay().CoolDown = 3;
                    return(false);
                }

                if (User2.GetRoleplay().Jailed)
                {
                    User1.SendWhisper("Cannot complete this action as this user is jailed!");
                    User1.GetRoleplay().CoolDown = 3;
                    return(false);
                }

                if (RoomUser1.Stunned)
                {
                    User1.SendWhisper("Cannot complete this action while you are stunned!");
                    User1.GetRoleplay().CoolDown = 3;
                    return(false);
                }
                if (RoomUser2.IsAsleep)
                {
                    User1.SendWhisper("Cannot complete this action as this user is AFK!");
                    User1.GetRoleplay().CoolDown = 3;
                    return(false);
                }
                if (User1.GetRoleplay().IsNoob&& !User1.GetHabbo().CurrentRoom.RoomData.Description.Contains("COLOR") && !User1.GetHabbo().CurrentRoom.RoomData.Description.Contains("MAFIA"))
                {
                    if (!User1.GetRoleplay().NoobWarned)
                    {
                        User1.SendNotif("If you choose to do this again your temporary God Protection will be disabled!");
                        User1.GetRoleplay().NoobWarned = true;
                        return(false);
                    }
                    else
                    {
                        using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                        {
                            dbClient.RunFastQuery("UPDATE rp_stats SET is_noob = 0 WHERE id = '" + User1.GetHabbo().Id + "'");
                        }

                        User1.SendWhisper("Your god protection has been disabled!");
                        User1.GetRoleplay().IsNoob = false;
                        User1.GetRoleplay().SaveQuickStat("is_noob", "0");
                    }
                }

                if (User2.GetRoleplay().IsNoob&& !User1.GetHabbo().CurrentRoom.RoomData.Description.Contains("COLOR") && !User1.GetHabbo().CurrentRoom.RoomData.Description.Contains("MAFIA") && !User1.GetHabbo().CurrentRoom.RoomData.Description.Contains("NPA"))
                {
                    User1.SendWhisper("Cannot complete this action as this user is under God Protection!");
                    return(false);
                }
                #endregion

                #region Final Checks
                if (RoleplayManager.WithinAttackDistance(RoomUser1, RoomUser2))
                {
                }
                else if (RoleplayManager.Distance(Pos1, Pos2) > 2 && RoleplayManager.Distance(Pos1, Pos2) <= 4)
                {
                    RoomUser1.LastBubble = 3;

                    User1.Shout("*Swings at " + User2.GetHabbo().UserName + ", but misses*");
                    User1.GetRoleplay().CoolDown = 3;

                    RoomUser1.LastBubble = 0;
                    return(false);
                }
                else if (RoleplayManager.Distance(Pos1, Pos2) >= 5)
                {
                    User1.SendWhisper("You are too far away!");
                    User1.GetRoleplay().CoolDown = 3;
                    return(false);
                }
                #endregion
            }
            else if (Weapon)
            {
                #region Fundamental Checks
                if (User1.GetRoleplay().Energy < WeaponManager.WeaponsData[User1.GetRoleplay().Equiped].Need_Energy)
                {
                    User1.SendWhisper("You do not have enough energy to do this!");
                    return(false);
                }
                if (User1.GetRoleplay().inBrawl == true)
                {
                    User1.SendWhisper("Cannot do this in a Brawl");
                    return(false);
                }

                if (User1.GetRoleplay().Dead)
                {
                    User1.SendWhisper("Cannot complete this action while you are dead!");
                    return(false);
                }

                if (User1.GetRoleplay().Jailed)
                {
                    User1.SendWhisper("Cannot complete this action while you are jailed!");
                    return(false);
                }

                if (User2.GetRoleplay().Dead)
                {
                    User1.SendWhisper("Cannot complete this action as this user is dead!");
                    return(false);
                }

                if (User2.GetRoleplay().Jailed)
                {
                    User1.SendWhisper("Cannot complete this action as this user is jailed!");
                    return(false);
                }

                if (RoomUser1.Stunned)
                {
                    User1.SendWhisper("Cannot complete this action while you are stunned!");
                    return(false);
                }
                if (RoomUser2.IsAsleep)
                {
                    User1.SendWhisper("Cannot complete this action as this user is AFK!");
                    return(false);
                }
                if (RoomUser1.IsAsleep)
                {
                    User1.SendWhisper("Cannot complete this action as this user is AFK!");
                    return(false);
                }
                if (User1.GetRoleplay().IsNoob&& !User1.GetHabbo().CurrentRoom.RoomData.Description.Contains("COLOR") && !User1.GetHabbo().CurrentRoom.RoomData.Description.Contains("MAFIA"))
                {
                    if (!User1.GetRoleplay().NoobWarned)
                    {
                        User1.SendNotif("If you choose to do this again your temporary God Protection will be disabled!");
                        User1.GetRoleplay().NoobWarned = true;
                        return(false);
                    }
                    else
                    {
                        using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                        {
                            dbClient.RunFastQuery("UPDATE rp_stats SET is_noob = 0 WHERE id = '" + User1.GetHabbo().Id + "'");
                        }

                        User1.SendWhisper("Your god protection has been disabled!");
                        User1.GetRoleplay().IsNoob = false;
                        User1.GetRoleplay().SaveQuickStat("is_noob", "0");
                    }
                }

                if (User2.GetRoleplay().IsNoob&& !User1.GetHabbo().CurrentRoom.RoomData.Description.Contains("COLOR") && !User1.GetHabbo().CurrentRoom.RoomData.Description.Contains("MAFIA") && !User1.GetHabbo().CurrentRoom.RoomData.Description.Contains("NPA"))
                {
                    User1.SendWhisper("Cannot complete this action as this user is under God Protection!");
                    return(false);
                }
                #endregion

                #region Secondary Checks
                if (Room.RoomData.Description.Contains("NOSHOOT") && RoleplayManager.PurgeTime == false)
                {
                    User1.SendWhisper("Sorry, but this is a non shooting zone!");
                    return(false);
                }
                if (Room.RoomData.Description.Contains("SAFEZONE"))
                {
                    User1.SendWhisper("Sorry, but this is a safe zone!");
                    return(false);
                }
                if (User1.GetRoleplay().Equiped == null)
                {
                    User1.SendWhisper("You have not equiped a weapon!");
                    return(false);
                }
                if (!WeaponManager.WeaponsData[User1.GetRoleplay().Equiped].Type.ToLower().Contains("gun"))
                {
                    User1.SendWhisper("The weapon you have equiped is not a gun!");
                    return(false);
                }
                if (User2.GetRoleplay().usingPlane&& !WeaponManager.WeaponsData[User1.GetRoleplay().Equiped].Name.ToLower().Contains("rpg"))
                {
                    User1.Shout("*Attempts to shoot " + User2.GetHabbo().UserName + ", but misses as they are in a plane*");
                    User1.GetRoleplay().GunShots++;
                    return(false);
                }
                int MyJobId   = User1.GetRoleplay().JobId;
                int MyJobRank = User1.GetRoleplay().JobRank;
                if (User1.GetRoleplay().Bullets <= 0 && (!JobManager.JobRankData[MyJobId, MyJobRank].hasRights("army") && !User1.GetRoleplay().Working))
                {
                    User1.SendWhisper("You do not have any bullets!");
                    return(false);
                }
                if (User1.GetRoleplay().Intelligence < WeaponManager.WeaponsData[User1.GetRoleplay().Equiped].Min_Intel)
                {
                    User1.SendWhisper("You must have an intelligence level of at least " + WeaponManager.WeaponsData[User1.GetRoleplay().Equiped].Min_Intel + " to use this weapon!");
                    return(false);
                }
                if (User1.GetRoleplay().Strength + User1.GetRoleplay().savedSTR < WeaponManager.WeaponsData[User1.GetRoleplay().Equiped].Need_Str)
                {
                    User1.SendWhisper("You must have a strength level of at least " + WeaponManager.WeaponsData[User1.GetRoleplay().Equiped].Need_Str + " to use this weapon!");
                    return(false);
                }
                if (User1.GetRoleplay().GunShots >= WeaponManager.WeaponsData[User1.GetRoleplay().Equiped].Reload_Time)
                {
                    RoomUser1.LastBubble = 3;

                    User1.Shout("*Reloads their " + WeaponManager.WeaponsData[User1.GetRoleplay().Equiped].DisplayName + ", and loads more bullets*");

                    RoomUser1.LastBubble = 0;
                    ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("FloodFilterMessageComposer"));
                    message.AppendInteger(5);
                    RoomUser1.IsGunReloaded    = true;
                    RoomUser1.ReloadExpiryTime = Plus.GetUnixTimeStamp() + 5;
                    User1.SendMessage(message);

                    User1.GetRoleplay().GunShots = 0;
                    // will re-inplement this later -> HabboHotel.Misc.ChatCommandHandler.Parse(User1, ":shoot " + TargetUser1.GetHabbo().UserName);
                    return(false);
                }
                #endregion

                #region Final Checks
                if (RoleplayManager.Distance(Pos1, Pos2) > WeaponManager.WeaponsData[User1.GetRoleplay().Equiped].Range)
                {
                    /*if (Misc.Distance(Pos1, Pos2) > weaponManager.WeaponsData[User1.GetRoleplay().Equiped].Range + 4)
                     * {
                     *  User1.SendWhisper("You must be closer to do this!");
                     *  return false;
                     * }*/

                    RoomUser1.LastBubble = 3;

                    User1.Shout("*Shoots their " + WeaponManager.WeaponsData[User1.GetRoleplay().Equiped].Name + " at " + User2.GetHabbo().UserName + ", but misses*");

                    RoomUser1.LastBubble = 0;
                    User1.GetRoleplay().GunShots++;
                    return(false);
                }
                #endregion
            }

            return(true);
        }
예제 #21
0
        /// <summary>
        /// Serializes the tool.
        /// </summary>
        /// <param name="session">The session.</param>
        /// <returns>ServerMessage.</returns>
        internal ServerMessage SerializeTool(GameClient session)
        {
            var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("LoadModerationToolMessageComposer"));

            serverMessage.AppendInteger(Tickets.Count);
            foreach (var current in Tickets)
            {
                current.Serialize(serverMessage);
            }
            serverMessage.AppendInteger(UserMessagePresets.Count);
            foreach (var current2 in UserMessagePresets)
            {
                serverMessage.AppendString(current2);
            }

            IEnumerable <ModerationTemplate> enumerable = (from x in ModerationTemplates.Values
                                                           where x.Category == -1
                                                           select x).ToArray();

            serverMessage.AppendInteger(enumerable.Count());
            using (var enumerator3 = enumerable.GetEnumerator())
            {
                var first = true;
                while (enumerator3.MoveNext())
                {
                    var template = enumerator3.Current;
                    IEnumerable <ModerationTemplate> enumerable2 = (from x in ModerationTemplates.Values
                                                                    where x.Category == (long)((ulong)template.Id)
                                                                    select x).ToArray();
                    serverMessage.AppendString(template.CName);
                    serverMessage.AppendBool(first);
                    serverMessage.AppendInteger(enumerable2.Count());
                    foreach (var current3 in enumerable2)
                    {
                        serverMessage.AppendString(current3.Caption);
                        serverMessage.AppendString(current3.BanMessage);
                        serverMessage.AppendInteger(current3.BanHours);
                        serverMessage.AppendInteger(Plus.BoolToInteger(current3.AvatarBan));
                        serverMessage.AppendInteger(Plus.BoolToInteger(current3.Mute));
                        serverMessage.AppendInteger(Plus.BoolToInteger(current3.TradeLock));
                        serverMessage.AppendString(current3.WarningMessage);
                        serverMessage.AppendBool(true); //showHabboWay
                    }
                    first = false;
                }
            }

            // but = button
            serverMessage.AppendBool(true);                                        //ticket_queue_but
            serverMessage.AppendBool(session.GetHabbo().HasFuse("fuse_chatlogs")); //chatlog_but
            serverMessage.AppendBool(session.GetHabbo().HasFuse("fuse_alert"));    //message_but
            serverMessage.AppendBool(true);                                        //modaction_but
            serverMessage.AppendBool(session.GetHabbo().HasFuse("fuse_ban"));      //ban_but
            serverMessage.AppendBool(true);
            serverMessage.AppendBool(session.GetHabbo().HasFuse("fuse_kick"));     //kick_but

            serverMessage.AppendInteger(RoomMessagePresets.Count);
            foreach (var current4 in RoomMessagePresets)
            {
                serverMessage.AppendString(current4);
            }

            return(serverMessage);
        }
예제 #22
0
        /// <summary>
        ///     Composes the club purchase page.
        /// </summary>
        /// <param name="session">The session.</param>
        /// <param name="windowId">The window identifier.</param>
        /// <returns>ServerMessage.</returns>
        internal static ServerMessage ComposeClubPurchasePage(GameClient session, int windowId)
        {
            ServerMessage      message        = new ServerMessage(LibraryParser.OutgoingRequest("CatalogueClubPageMessageComposer"));
            List <CatalogItem> habboClubItems = Yupi.GetGame().GetCatalog().HabboClubItems;

            message.AppendInteger(habboClubItems.Count);

            foreach (CatalogItem item in habboClubItems)
            {
                message.AppendInteger(item.Id);
                message.AppendString(item.Name);
                message.AppendBool(false);
                message.AppendInteger(item.CreditsCost);

                if (item.DiamondsCost > 0)
                {
                    message.AppendInteger(item.DiamondsCost);
                    message.AppendInteger(105);
                }
                else
                {
                    message.AppendInteger(item.DucketsCost);
                    message.AppendInteger(0);
                }

                message.AppendBool(true);
                string[] fuckingArray = item.Name.Split('_');
                double   dayTime      = 31;

                if (item.Name.Contains("DAY"))
                {
                    dayTime = int.Parse(fuckingArray[3]);
                }
                else if (item.Name.Contains("MONTH"))
                {
                    int monthTime = int.Parse(fuckingArray[3]);
                    dayTime = monthTime * 31;
                }
                else if (item.Name.Contains("YEAR"))
                {
                    int yearTimeOmg = int.Parse(fuckingArray[3]);
                    dayTime = yearTimeOmg * 31 * 12;
                }

                DateTime newExpiryDate = DateTime.Now.AddDays(dayTime);

                if (session.GetHabbo().GetSubscriptionManager().HasSubscription)
                {
                    newExpiryDate =
                        Yupi.UnixToDateTime(session.GetHabbo().GetSubscriptionManager().GetSubscription().ExpireTime)
                        .AddDays(dayTime);
                }

                message.AppendInteger((int)dayTime / 31);
                message.AppendInteger((int)dayTime);
                message.AppendBool(false);
                message.AppendInteger((int)dayTime);
                message.AppendInteger(newExpiryDate.Year);
                message.AppendInteger(newExpiryDate.Month);
                message.AppendInteger(newExpiryDate.Day);
            }

            message.AppendInteger(windowId);
            return(message);
        }
예제 #23
0
        /// <summary>
        ///     Progresses the user achievement.
        /// </summary>
        /// <param name="session">The session.</param>
        /// <param name="achievementGroup">The achievement group.</param>
        /// <param name="progressAmount">The progress amount.</param>
        /// <param name="fromZero">if set to <c>true</c> [from zero].</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        internal bool ProgressUserAchievement(GameClient session, string achievementGroup, uint progressAmount, bool fromZero = false)
        {
            if (Achievements.ContainsKey(achievementGroup) && session?.GetHabbo() != null)
            {
                Achievement achievement = Achievements[achievementGroup];

                Habbo user = session.GetHabbo();

                // Get UserAchievementData, if the user doesn't has the Achievement, create a new.
                UserAchievement userAchievement = user.Achievements.ContainsKey(achievementGroup) ? user.GetAchievementData(achievementGroup) : new UserAchievement(achievementGroup, 0, 0);

                // If is a New Achievement is fromZero
                if (!user.Achievements.ContainsKey(achievementGroup))
                {
                    fromZero = true;
                }

                // If user hasn't the Achievement, after created the new, Must add in Collections.
                if (!user.Achievements.ContainsKey(achievementGroup))
                {
                    user.Achievements.Add(achievementGroup, userAchievement);
                }

                // Get Achievement
                userAchievement = user.Achievements[achievementGroup];

                // Total Levels from this Achievement
                uint achievementLevelsCount = (uint)achievement.Levels.Count;

                // Get User Achievement Level
                uint achievementCurrentLevel = userAchievement.Level;

                // Get User Achievement Progress
                uint achievementCurrentProgress = userAchievement.Progress;

                // If the next Level is the last level must set to Levels.Count (Ex: 38 Levels => .Count = 37 (Max Level in the Array, but .Count 37 == 38, Soo need put Level - 1)
                uint achievementNextLevel = achievementCurrentLevel + 1 > achievementLevelsCount ? achievementLevelsCount : achievementCurrentLevel + 1;

                // Set Achievement Progress
                uint achievementProgress = achievementCurrentProgress + progressAmount;

                // If he has already the Max, something is wrong.
                if (achievementCurrentLevel == achievementLevelsCount)
                {
                    return(false);
                }

                // Get Next Level Data
                AchievementLevel achievementNextLevelData = achievement.Levels[achievementNextLevel];

                // if progress isn't sufficient or, isn't new Achievement
                if (achievementProgress < achievementNextLevelData.Requirement || achievementCurrentLevel >= 1)
                {
                    fromZero = false;
                }

                // If progress is sufficient to next level, or is new Achievement
                if (achievementProgress >= achievementNextLevelData.Requirement || (achievementCurrentLevel < 1))
                {
                    fromZero = true;
                }

                // if is a new level (but level isn't 0)
                if (achievementProgress >= achievementNextLevelData.Requirement)
                {
                    achievementProgress = 0;
                }

                // If is new Level
                if (fromZero)
                {
                    // Set Level
                    userAchievement.SetLevel(achievementNextLevel);

                    // Set Progress
                    userAchievement.SetProgress(achievementProgress);

                    // Give Reward Points
                    user.AchievementPoints += achievementNextLevelData.RewardPoints;
                    user.NotifyNewPixels(achievementNextLevelData.RewardPixels);
                    user.ActivityPoints += achievementNextLevelData.RewardPixels;

                    // Update Points Balance
                    user.UpdateActivityPointsBalance();

                    // Remove old Badge - (Is not problem if is First Level Badge, because if the user hasn't the badg, simply, will not remove.
                    user.GetBadgeComponent().RemoveBadge(Convert.ToString($"{achievementGroup}{achievementNextLevel - 1}"), session);

                    // Give new Badge
                    user.GetBadgeComponent().GiveBadge($"{achievementGroup}{achievementNextLevel}", true, session);

                    // Update in Database
                    using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
                        queryReactor.RunFastQuery($"REPLACE INTO users_achievements VALUES ('{user.Id}', '{achievementGroup}', '{achievementNextLevel}', '{achievementProgress}')");

                    // Send Unlocked Composer
                    session.SendMessage(AchievementUnlockedComposer.Compose(achievement, achievementNextLevel, achievementNextLevelData.RewardPoints, achievementNextLevelData.RewardPixels));

                    // Send Score Composer
                    session.SendMessage(AchievementScoreUpdateComposer.Compose(user.AchievementPoints));

                    // Send Progress Composer
                    session.SendMessage(AchievementProgressComposer.Compose(achievement, achievementNextLevel, achievementNextLevelData, achievementLevelsCount, userAchievement));

                    // Set Talent
                    if (Yupi.GetGame().GetTalentManager().Talents.Values.Any(talent => talent.AchievementGroup == achievementGroup))
                    {
                        Yupi.GetGame().GetTalentManager().CompleteUserTalent(session, Yupi.GetGame().GetTalentManager().GetTalentData(achievementGroup));
                    }
                }
                else
                {
                    // Get Current Level Data
                    AchievementLevel achievementCurrentLevelData = achievement.Levels[achievementCurrentLevel];

                    // It's the Same Level
                    userAchievement.SetLevel(achievementCurrentLevel);

                    // But increase Progress
                    userAchievement.SetProgress(achievementProgress);

                    // Update in Database
                    using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
                        queryReactor.RunFastQuery($"REPLACE INTO users_achievements VALUES ('{user.Id}', '{achievementGroup}', '{achievementCurrentLevel}', '{achievementProgress}')");

                    // Compose Current Data
                    session.SendMessage(AchievementProgressComposer.Compose(achievement, achievementCurrentLevel, achievementCurrentLevelData, achievementLevelsCount, userAchievement));
                }

                // Send User New Data
                GameClientMessageHandler messageHandler = session.GetMessageHandler();

                messageHandler.GetResponse().Init(LibraryParser.OutgoingRequest("UpdateUserDataMessageComposer"));
                messageHandler.GetResponse().AppendInteger(-1);
                messageHandler.GetResponse().AppendString(user.Look);
                messageHandler.GetResponse().AppendString(user.Gender.ToLower());
                messageHandler.GetResponse().AppendString(user.Motto);
                messageHandler.GetResponse().AppendInteger(user.AchievementPoints);

                messageHandler.SendResponse();

                return(true);
            }

            return(false);
        }
예제 #24
0
파일: Freeze.cs 프로젝트: xXSicilyXx/Yupi
        private void FreezeUser(RoomUser user)
        {
            if (user.IsBot || user.ShieldActive || user.Team == Team.None || user.Freezed)
            {
                return;
            }

            user.Freezed       = true;
            user.FreezeCounter = 0;
            --user.FreezeLives;

            if (user.FreezeLives <= 0)
            {
                ServerMessage serverMessage = new ServerMessage();
                serverMessage.Init(LibraryParser.OutgoingRequest("UpdateFreezeLivesMessageComposer"));
                serverMessage.AppendInteger(user.InternalRoomId);
                serverMessage.AppendInteger(user.FreezeLives);
                user.GetClient().SendMessage(serverMessage);
                user.ApplyEffect(-1);
                _room.GetGameManager().AddPointToTeam(user.Team, -10, user);
                TeamManager managerForFreeze = _room.GetTeamManagerForFreeze();
                managerForFreeze.OnUserLeave(user);
                user.Team = Team.None;
                if (ExitTeleport != null)
                {
                    _room.GetGameMap().TeleportToItem(user, ExitTeleport);
                }
                user.Freezed      = false;
                user.SetStep      = false;
                user.IsWalking    = false;
                user.UpdateNeeded = true;
                if (!managerForFreeze.BlueTeam.Any() && !managerForFreeze.RedTeam.Any() &&
                    !managerForFreeze.GreenTeam.Any() && managerForFreeze.YellowTeam.Any())
                {
                    StopGame();
                }
                else if (managerForFreeze.BlueTeam.Any() && !managerForFreeze.RedTeam.Any() &&
                         !managerForFreeze.GreenTeam.Any() && !managerForFreeze.YellowTeam.Any())
                {
                    StopGame();
                }
                else if (!managerForFreeze.BlueTeam.Any() && managerForFreeze.RedTeam.Any() &&
                         !managerForFreeze.GreenTeam.Any() && !managerForFreeze.YellowTeam.Any())
                {
                    StopGame();
                }
                else
                {
                    if (managerForFreeze.BlueTeam.Any() || managerForFreeze.RedTeam.Any() ||
                        !managerForFreeze.GreenTeam.Any() || managerForFreeze.YellowTeam.Any())
                    {
                        return;
                    }
                    StopGame();
                }
            }
            else
            {
                _room.GetGameManager().AddPointToTeam(user.Team, -10, user);
                user.ApplyEffect(12);
                ServerMessage serverMessage = new ServerMessage();
                serverMessage.Init(LibraryParser.OutgoingRequest("UpdateFreezeLivesMessageComposer"));
                serverMessage.AppendInteger(user.InternalRoomId);
                serverMessage.AppendInteger(user.FreezeLives);
                user.GetClient().SendMessage(serverMessage);
            }
        }
예제 #25
0
        public bool Execute(params object[] stuff)
        {
            if (stuff[0] == null)
            {
                return(false);
            }

            RoomUser user = (RoomUser)stuff[0];

            if (stuff[1] == null)
            {
                return(false);
            }

            Interaction item = (Interaction)stuff[1];

            if (_mBanned.Contains(item))
            {
                return(false);
            }

            if (user == null)
            {
                return(false);
            }

            if (OtherExtraString2 == null)
            {
                return(false);
            }

            int amountLeft = Convert.ToInt32(OtherExtraString2);

            bool unique = OtherBool;

            bool premied = false;

            if (amountLeft == 1)
            {
                ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("WiredRewardAlertMessageComposer"));

                message.AppendInteger(0);
                user.GetClient().SendMessage(message);

                return(true);
            }

            foreach (string dataStr in OtherString.Split(';'))
            {
                string[] dataArray = dataStr.Split(',');

                bool   isbadge    = dataArray[0] == "0";
                string code       = dataArray[1];
                int    percentage = int.Parse(dataArray[2]);

                int random = Yupi.GetRandomNumber(0, 100);

                ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("WiredRewardAlertMessageComposer"));

                if (!unique && percentage < random)
                {
                    continue;
                }

                premied = true;

                if (isbadge)
                {
                    if (user.GetClient().GetHabbo().GetBadgeComponent().HasBadge(code))
                    {
                        message.AppendInteger(1);
                        user.GetClient().SendMessage(message);
                    }
                    else
                    {
                        user.GetClient()
                        .GetHabbo()
                        .GetBadgeComponent()
                        .GiveBadge(code, true, user.GetClient(), true);

                        message.AppendInteger(7);
                        user.GetClient().SendMessage(message);
                    }
                }
                else //item or effect
                {
                    Item roomItem = Yupi.GetGame().GetItemManager().GetItem(uint.Parse(code));

                    if (roomItem == null)
                    {
                        continue;
                    }

                    if (roomItem.Type == 'e') // is effect
                    {
                        user.GetClient()
                        .GetHabbo()
                        .GetAvatarEffectsInventoryComponent()
                        .AddNewEffect(roomItem.SpriteId, 3600, 1);
                    }
                    else
                    {
                        user.GetClient()
                        .GetHabbo()
                        .GetInventoryComponent()
                        .AddNewItem(0u, roomItem.Name, "0", 0u, true, false, 0, 0);
                        user.GetClient()
                        .SendMessage(
                            new ServerMessage(LibraryParser.OutgoingRequest("UpdateInventoryMessageComposer")));
                    }

                    message.AppendInteger(6);
                    user.GetClient().SendMessage(message);
                }
            }

            if (!premied)
            {
                ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("WiredRewardAlertMessageComposer"));
                message.AppendInteger(4);
                user.GetClient().SendMessage(message);
            }
            else if (amountLeft > 1)
            {
                amountLeft--;
                OtherExtraString2 = amountLeft.ToString();
            }

            return(true);
        }
예제 #26
0
파일: Plus.cs 프로젝트: Mereos/HabboEMU
        /// <summary>
        /// Shutdown the Emulator
        /// </summary>
        /// <param name="restart">if set to <c>true</c> [restart].</param>
        /// Set a Different Message in Hotel
        internal static void PerformShutDown(bool restart)
        {
            var now = DateTime.Now;

            Cache.StopProcess();

            ShutdownStarted = true;

            var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));

            serverMessage.AppendString("disconnection");
            serverMessage.AppendInteger(2);
            serverMessage.AppendString("title");
            serverMessage.AppendString("Emulator Shutting down");
            serverMessage.AppendString("message");
            serverMessage.AppendString("<b>A technician has applied new updates / fixes, so the hotel is shutting down for these changes to take effect! It will automatically come back in a few seconds! So Long!");
            GetGame().GetClientManager().QueueBroadcaseMessage(serverMessage);

            System.Threading.Thread.Sleep(3000);

            _game.StopGameLoop();
            _game.GetRoomManager().RemoveAllRooms();
            GetGame().GetClientManager().CloseAll();

            GetConnectionManager().Destroy();

            foreach (Guild group in _game.GetGroupManager().Groups.Values)
            {
                group.UpdateForum();
            }

            using (var queryReactor = Manager.GetQueryReactor())
            {
                queryReactor.RunFastQuery("UPDATE users SET online = '0'");
                queryReactor.RunFastQuery("UPDATE rooms_data SET users_now = 0");
                queryReactor.RunFastQuery("UPDATE server_settings SET value = '0' WHERE variable = 'status'");
            }

            _connectionManager.Destroy();
            _game.Destroy();

            try
            {
                Manager.Destroy();
                Out.WriteLine("Game Manager destroyed", "", ConsoleColor.Red);
            }
            catch (Exception e)
            {
                Writer.Writer.LogException("Plus.cs PerformShutDown GameManager" + e);
            }

            TimeSpan timeUsedOnShutdown = DateTime.Now - now;

            Console.WriteLine(" >> CityRP Emulator Successfully Shutdown <<");
            IsLive = false;

            if (restart)
            {
                Process.Start(Assembly.GetEntryAssembly().Location);
            }
            else
            {
                System.Threading.Thread.Sleep(2000);
            }

            Environment.Exit(0);
        }
예제 #27
0
        /// <summary>
        ///     Handles the publicist.
        /// </summary>
        /// <param name="word">The word.</param>
        /// <param name="message">The message.</param>
        /// <param name="method">The method.</param>
        /// <param name="settings">The settings.</param>
        internal void HandlePublicist(string word, string message, string method, BlackWordTypeSettings settings)
        {
            Habbo userPublicist = GetHabbo();

            if (userPublicist != null)
            {
                ServerMessage serverMessage;

                if (userPublicist.Rank < 5 && settings.MaxAdvices == PublicistCount++ && settings.AutoBan)
                {
                    serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
                    serverMessage.AppendString("staffcloud");
                    serverMessage.AppendInteger(2);
                    serverMessage.AppendString("title");
                    serverMessage.AppendString("Staff Internal Alert");
                    serverMessage.AppendString("message");
                    serverMessage.AppendString("O usuário " + userPublicist.UserName + " Fo Banido por Divulgar. A última palavra foi: " + word + ", na frase: " + message);

                    Yupi.GetGame().GetClientManager().StaffAlert(serverMessage);

                    Yupi.GetGame().GetBanManager().BanUser(this, userPublicist.UserName, 788922000.0, "Você está divulgando Hoteis. Será banido para sempre..", true, true);

                    return;
                }

                string alert = settings.Alert.Replace("{0}", userPublicist.UserName);

                alert = alert.Replace("{1}", userPublicist.Id.ToString());
                alert = alert.Replace("{2}", word);
                alert = alert.Replace("{3}", message);
                alert = alert.Replace("{4}", method);

                serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("UsersClassificationMessageComposer"));
                serverMessage.AppendInteger(1);
                serverMessage.AppendInteger(userPublicist.Id);
                serverMessage.AppendString(userPublicist.UserName);
                serverMessage.AppendString("BadWord: " + word);

                Yupi.GetGame()?.GetClientManager()?.StaffAlert(serverMessage);

                if (Yupi.GetGame().GetClientManager() == null)
                {
                    return;
                }

                foreach (GameClient client in Yupi.GetGame().GetClientManager().Clients.Values)
                {
                    if (client?.GetHabbo() == null)
                    {
                        continue;
                    }

                    if (client.CurrentRoomUserId == 0)
                    {
                        continue;
                    }

                    if (client.GetHabbo().Rank < 5)
                    {
                        continue;
                    }

                    serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("WhisperMessageComposer"));
                    serverMessage.AppendInteger(client.CurrentRoomUserId);
                    serverMessage.AppendString(alert);
                    serverMessage.AppendInteger(0);
                    serverMessage.AppendInteger(34);
                    serverMessage.AppendInteger(0);
                    serverMessage.AppendInteger(true);

                    client.SendMessage(serverMessage);
                }
            }
        }
예제 #28
0
파일: PetBot.cs 프로젝트: sgf/Yupi
        /// <summary>
        ///     Called when [user say].
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="msg">The MSG.</param>
        internal override void OnUserSay(RoomUser user, string msg)
        {
            RoomUser roomUser = GetRoomUser();

            if (roomUser.PetData.OwnerId != user.GetClient().GetHabbo().Id)
            {
                return;
            }

            if (string.IsNullOrEmpty(msg))
            {
                msg = " ";
            }

            PetCommand command = PetCommandHandler.GetPetCommandByInput(msg.Substring(1).ToLower());

            if (!command.PetTypes.Contains(roomUser.PetData.Type.ToString()))
            {
                return;
            }

            if (roomUser.PetData.Level < command.MinLevel)
            {
                return;
            }

            if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
            {
                command.CommandAction = "lazy";
            }

            RemovePetStatus();

            roomUser.PetData.AddExperience((int)command.GainedExperience);

            roomUser.Statusses.Add(command.PetStatus, string.Empty);
            roomUser.Statusses.Add("gst", command.PetGesture);

            roomUser.UpdateNeeded = true;

            _actionTimer = 25;
            _energyTimer = 10;

            roomUser.FollowingOwner = null;

            SubtractAttributes();

            /* other gestures that isnt listed */

            // roomUser.Statusses.Add("jmp", "");
            //roomUser.Statusses.Add("gst", "joy");

            //roomUser.AddStatus("lay", "");
            //roomUser.AddStatus("gst", "eyb");

            //roomUser.Statusses.Add("beg", "");
            //roomUser.Statusses.Add("gst", "sml");

            switch (command.CommandAction)
            {
            case "follow":
                roomUser.FollowingOwner = roomUser;

                RemovePetStatus();
                switch (roomUser.RotBody)
                {
                case 0:
                    roomUser.MoveTo(roomUser.X + 2, roomUser.Y);
                    break;

                case 1:
                    roomUser.MoveTo(roomUser.X - 2, roomUser.Y - 2);
                    break;

                case 2:
                    roomUser.MoveTo(roomUser.X, roomUser.Y + 2);
                    break;

                case 3:
                    roomUser.MoveTo(roomUser.X + 2, roomUser.Y - 2);
                    break;

                case 4:
                    roomUser.MoveTo(roomUser.X - 2, roomUser.Y);
                    break;

                case 5:
                    roomUser.MoveTo(roomUser.X + 2, roomUser.Y + 2);
                    break;

                case 6:
                    roomUser.MoveTo(roomUser.X, roomUser.Y - 2);
                    break;

                case 7:
                    roomUser.MoveTo(roomUser.X - 2, roomUser.Y + 2);
                    break;
                }

                break;

            case "breed":
                Point coord = new Point();

                switch (roomUser.PetData.Type)
                {
                case 3:
                    coord = GetRoom().GetRoomItemHandler().GetRandomBreedingTerrier(roomUser.PetData);
                    break;

                case 4:
                    coord = GetRoom().GetRoomItemHandler().GetRandomBreedingBear(roomUser.PetData);
                    break;
                }

                if (coord == new Point())
                {
                    ServerMessage alert = new ServerMessage(LibraryParser.OutgoingRequest("PetBreedErrorMessageComposer"));

                    alert.AppendInteger(0);

                    user.GetClient().SendMessage(alert);
                }

                break;

            case "sleep":
                string[] valueSleep   = PetLocale.GetValue("tired");
                string   messageSleep = valueSleep[new Random().Next(0, valueSleep.Length - 1)];

                roomUser.Chat(null, messageSleep, false, 0);
                break;

            case "unknown":
                string[] valueUnknown   = PetLocale.GetValue("pet.unknowncommand");
                string   messageUnknown = valueUnknown[new Random().Next(0, valueUnknown.Length - 1)];

                roomUser.Chat(null, messageUnknown, false, 0);
                break;

            case "lazy":
                string[] valueLazy   = PetLocale.GetValue("pet.lazy");
                string   messageLazy = valueLazy[new Random().Next(0, valueLazy.Length - 1)];

                roomUser.Chat(null, messageLazy, false, 0);
                break;

            case "nest":
                RemovePetStatus();

                IEnumerable <RoomItem> petNest = GetRoom().GetRoomItemHandler().FloorItems.Values.Where(x => x.GetBaseItem().InteractionType == Interaction.PetNest);

                IEnumerable <RoomItem> enumerable = petNest as RoomItem[] ?? petNest.ToArray();

                // @todo rewrite this to redo actionsss
                if (!enumerable.Any())
                {
                    command.CommandAction = "lazy";
                }

                RoomItem roomItems = enumerable.FirstOrDefault();

                if (roomItems != null)
                {
                    roomUser.MoveTo(roomItems.X, roomItems.Y);
                }

                roomUser.PetData.AddExperience(40);

                break;

            case "default":
                string[] valueDefault   = PetLocale.GetValue("pet.done");
                string   messageDefault = valueDefault[new Random().Next(0, valueDefault.Length - 1)];

                roomUser.Chat(null, messageDefault, false, 0);
                break;
            }
        }
예제 #29
0
        /// <summary>
        ///     Tries the login.
        /// </summary>
        /// <param name="authTicket">The authentication ticket.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        internal bool TryLogin(string authTicket)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(authTicket))
                {
                    return(false);
                }

                string ip = GetConnection().GetIp();

                if (string.IsNullOrEmpty(ip))
                {
                    return(false);
                }

                uint errorCode;

                UserData userData = UserDataFactory.GetUserData(authTicket, out errorCode);

                if (userData?.User == null)
                {
                    return(false);
                }

                if (errorCode == 1 || errorCode == 2)
                {
                    return(false);
                }

                Yupi.GetGame().GetClientManager().RegisterClient(this, userData.UserId, userData.User.UserName);

                _habbo = userData.User;

                userData.User.LoadData(userData);

                bool isBanned = Yupi.GetGame().GetBanManager().CheckIfIsBanned(userData.User.UserName, ip, MachineId);

                if (isBanned)
                {
                    string banReason = Yupi.GetGame().GetBanManager().GetBanReason(userData.User.UserName, ip, MachineId);

                    SendNotifWithScroll(banReason);

                    using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
                    {
                        queryReactor.SetQuery($"SELECT ip_last FROM users WHERE id = {GetHabbo().Id} LIMIT 1");

                        string supaString = queryReactor.GetString();

                        queryReactor.SetQuery($"SELECT COUNT(0) FROM users_bans_access WHERE user_id={_habbo.Id} LIMIT 1");
                        int integer = queryReactor.GetInteger();

                        if (integer > 0)
                        {
                            queryReactor.RunFastQuery("UPDATE users_bans_access SET attempts = attempts + 1, ip='" + supaString + "' WHERE user_id=" + GetHabbo().Id + " LIMIT 1");
                        }
                        else
                        {
                            queryReactor.RunFastQuery("INSERT INTO users_bans_access (user_id, ip) VALUES (" + GetHabbo().Id + ", '" + supaString + "')");
                        }
                    }

                    return(false);
                }

                using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
                    queryReactor.RunFastQuery($"UPDATE users SET ip_last='{ip}' WHERE id={GetHabbo().Id}");

                userData.User.Init(this, userData);

                QueuedServerMessage queuedServerMessage = new QueuedServerMessage(_connection);

                ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("UniqueMachineIDMessageComposer"));

                serverMessage.AppendString(MachineId);
                queuedServerMessage.AppendResponse(serverMessage);

                queuedServerMessage.AppendResponse(
                    new ServerMessage(LibraryParser.OutgoingRequest("AuthenticationOKMessageComposer")));

                ServerMessage serverMessage2 = new ServerMessage(LibraryParser.OutgoingRequest("HomeRoomMessageComposer"));

                serverMessage2.AppendInteger(_habbo.HomeRoom);
                serverMessage2.AppendInteger(_habbo.HomeRoom);
                queuedServerMessage.AppendResponse(serverMessage2);

                serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("MinimailCountMessageComposer"));

                serverMessage.AppendInteger(_habbo.MinimailUnreadMessages);
                queuedServerMessage.AppendResponse(serverMessage);

                serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("FavouriteRoomsMessageComposer"));

                serverMessage.AppendInteger(30);

                if (userData.User.FavoriteRooms == null || !userData.User.FavoriteRooms.Any())
                {
                    serverMessage.AppendInteger(0);
                }
                else
                {
                    serverMessage.AppendInteger(userData.User.FavoriteRooms.Count);

                    foreach (uint i in userData.User.FavoriteRooms)
                    {
                        serverMessage.AppendInteger(i);
                    }
                }

                queuedServerMessage.AppendResponse(serverMessage);

                ServerMessage rightsMessage = new ServerMessage(LibraryParser.OutgoingRequest("UserClubRightsMessageComposer"));

                rightsMessage.AppendInteger(userData.User.GetSubscriptionManager().HasSubscription ? 2 : 0);
                rightsMessage.AppendInteger(userData.User.Rank);
                rightsMessage.AppendInteger(0);
                queuedServerMessage.AppendResponse(rightsMessage);

                serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("EnableNotificationsMessageComposer"));
                serverMessage.AppendBool(true); //isOpen
                serverMessage.AppendBool(false);
                queuedServerMessage.AppendResponse(serverMessage);

                serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("EnableTradingMessageComposer"));
                serverMessage.AppendBool(true);
                queuedServerMessage.AppendResponse(serverMessage);
                userData.User.UpdateCreditsBalance();

                serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("ActivityPointsMessageComposer"));
                serverMessage.AppendInteger(2);
                serverMessage.AppendInteger(0);
                serverMessage.AppendInteger(userData.User.Duckets);
                serverMessage.AppendInteger(5);
                serverMessage.AppendInteger(userData.User.Diamonds);
                queuedServerMessage.AppendResponse(serverMessage);

                if (userData.User.HasFuse("fuse_mod"))
                {
                    queuedServerMessage.AppendResponse(Yupi.GetGame().GetModerationTool().SerializeTool(this));
                }

                queuedServerMessage.AppendResponse(Yupi.GetGame().GetAchievementManager().AchievementDataCached);

                queuedServerMessage.AppendResponse(GetHabbo().GetAvatarEffectsInventoryComponent().GetPacket());
                queuedServerMessage.SendResponse();

                Yupi.GetGame().GetAchievementManager().TryProgressHabboClubAchievements(this);
                Yupi.GetGame().GetAchievementManager().TryProgressRegistrationAchievements(this);
                Yupi.GetGame().GetAchievementManager().TryProgressLoginAchievements(this);

                return(true);
            }
            catch (Exception ex)
            {
                YupiLogManager.LogException(ex, "Registered Login Exception.", "Yupi.Users");
            }

            return(false);
        }
예제 #30
0
        internal static ServerMessage GenerateMessage(Pet pet)
        {
            ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("PetInfoMessageComposer"));

            serverMessage.AppendInteger(pet.PetId);
            serverMessage.AppendString(pet.Name);

            if (pet.Type == "pet_monster")
            {
                serverMessage.AppendInteger(pet.MoplaBreed.GrowingStatus);
                serverMessage.AppendInteger(7);
            }
            else
            {
                serverMessage.AppendInteger(pet.Level);
                serverMessage.AppendInteger(Pet.MaxLevel);
            }

            serverMessage.AppendInteger(pet.Experience);
            serverMessage.AppendInteger(pet.ExperienceGoal);
            serverMessage.AppendInteger(pet.Energy);
            serverMessage.AppendInteger(Pet.MaxEnergy);
            serverMessage.AppendInteger(pet.Nutrition);
            serverMessage.AppendInteger(Pet.MaxNutrition);
            serverMessage.AppendInteger(pet.Respect);
            serverMessage.AppendInteger(pet.OwnerId);
            serverMessage.AppendInteger(pet.Age);
            serverMessage.AppendString(pet.OwnerName);
            serverMessage.AppendInteger(pet.Type == "pet_monster" ? 0 : 1);
            serverMessage.AppendBool(pet.HaveSaddle);
            serverMessage.AppendBool(false);
            serverMessage.AppendInteger(0);
            serverMessage.AppendInteger(pet.AnyoneCanRide);

            if (pet.Type == "pet_monster")
            {
                serverMessage.AppendBool(pet.MoplaBreed.LiveState == MoplaState.Grown);
            }
            else
            {
                serverMessage.AppendBool(false);
            }

            serverMessage.AppendBool(false);

            if (pet.Type == "pet_monster")
            {
                serverMessage.AppendBool(pet.MoplaBreed.LiveState == MoplaState.Dead);
            }
            else
            {
                serverMessage.AppendBool(false);
            }

            serverMessage.AppendInteger(pet.Rarity);

            if (pet.Type == "pet_monster")
            {
                serverMessage.AppendInteger(129600);
                int lastHealthSeconds = (int)(pet.LastHealth - DateTime.Now).TotalSeconds;
                int untilGrownSeconds = (int)(pet.UntilGrown - DateTime.Now).TotalSeconds;

                if (lastHealthSeconds < 0)
                {
                    lastHealthSeconds = 0;
                }

                if (untilGrownSeconds < 0)
                {
                    untilGrownSeconds = 0;
                }

                switch (pet.MoplaBreed.LiveState)
                {
                case MoplaState.Dead:
                    serverMessage.AppendInteger(0);
                    serverMessage.AppendInteger(0);
                    break;

                case MoplaState.Grown:
                    serverMessage.AppendInteger(lastHealthSeconds);
                    serverMessage.AppendInteger(0);
                    break;

                default:
                    serverMessage.AppendInteger(lastHealthSeconds);
                    serverMessage.AppendInteger(untilGrownSeconds);
                    break;
                }
            }
            else
            {
                serverMessage.AppendInteger(-1);
                serverMessage.AppendInteger(-1);
                serverMessage.AppendInteger(-1);
            }

            serverMessage.AppendBool(true);

            return(serverMessage);
        }
예제 #31
0
        public override bool Execute(GameClient session, string[] pms)
        {
            using (IQueryAdapter adapter = Yupi.GetDatabaseManager().GetQueryReactor())
            {
                FurnitureDataManager.SetCache();
                Yupi.GetGame().GetItemManager().LoadItems(adapter);
                Yupi.GetGame().GetCatalog().Initialize(adapter);
                FurnitureDataManager.Clear();
            }

            Yupi.GetGame().GetClientManager().QueueBroadcaseMessage(new ServerMessage(LibraryParser.OutgoingRequest("PublishShopMessageComposer")));

            return(true);
        }