/// <summary> /// Called when [user enter room]. /// </summary> /// <param name="user">The user.</param> internal override void OnUserEnterRoom(RoomUser user) { if (user.GetClient() == null || user.GetClient().GetHabbo() == null) { return; } RoomUser roomUser = GetRoomUser(); if (roomUser == null || user.GetClient().GetHabbo().UserName != roomUser.PetData.OwnerName) { return; } Random random = new Random(); string[] value = PetLocale.GetValue("welcome.speech.pet"); string message = value[random.Next(0, value.Length - 1)]; message += user.GetUserName(); roomUser.Statusses.Clear(); roomUser.UpdateNeeded = true; roomUser.Chat(null, message, false, 0); }
public ChatManager() { _emotions = new ChatEmotionsManager(); _logs = new ChatlogManager(); _filter = new WordFilterManager(); _filter.Init(); _commands = new CommandManager(":"); _petCommands = new PetCommandManager(); _petLocale = new PetLocale(); _chatStyles = new ChatStyleManager(); _chatStyles.Init(); log.Info("Chat Manager -> LOADED"); }
internal override void OnUserEnterRoom(RoomUser User) { if (User.GetClient() != null && User.GetClient().GetHabbo() != null) { RoomUser roomUser = base.GetRoomUser(); if (roomUser != null && User.GetClient().GetHabbo().Username == roomUser.PetData.OwnerName) { Random random = new Random(); string[] value = PetLocale.GetValue("welcome.speech.pet"); string message = value[random.Next(0, checked (value.Length - 1))]; message += User.GetUsername(); roomUser.Chat(null, message, false, 0, 0); } } }
/// <summary> /// Initializes a new instance of the ChatManager class. /// </summary> public ChatManager() { _emotions = new ChatEmotionsManager(); _logs = new ChatlogManager(); _filter = new WordFilterManager(); _filter.InitWords(); _filter.InitCharacters(); _commands = new CommandManager(":"); _petCommands = new PetCommandManager(); _petLocale = new PetLocale(); _chatStyles = new ChatStyleManager(); _chatStyles.Init(); log.Info(">> Chat Manager -> READY!"); }
/// <summary> /// Initializes a new instance of the ChatManager class. /// </summary> public ChatManager() { this._emotions = new ChatEmotionsManager(); this._logs = new ChatlogManager(); this._filter = new WordFilterManager(); this._filter.InitWords(); this._filter.InitCharacters(); this._commands = new CommandManager(":"); this._petCommands = new PetCommandManager(); this._petLocale = new PetLocale(); this._chatStyles = new ChatStyleManager(); this._chatStyles.Init(); log.Info("» Chat Manager -> CARGADO"); }
/// <summary> /// Initializes a new instance of the ChatManager class. /// </summary> public ChatManager() { this._emotions = new ChatEmotionsManager(); this._logs = new ChatlogManager(); this._filter = new WordFilterManager(); this._filter.InitWords(); this._filter.InitCharacters(); this._commands = new CommandManager(":"); this._petCommands = new PetCommandManager(); this._petLocale = new PetLocale(); this._chatStyles = new ChatStyleManager(); this._chatStyles.Init(); string CurrentTime = DateTime.Now.ToString("HH:mm:ss" + " | "); Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine(CurrentTime + "» Chat » Geladen!"); Console.ResetColor(); }
internal static void Initialize() { PrettyVersion = string.Format("Firewind {0}", Assembly.GetExecutingAssembly().GetName().Version); Console.Clear(); DateTime Start = DateTime.Now; SystemMute = false; ServerStarted = DateTime.Now; Console.Title = "Firewind: Loading environment."; Logging.WriteWithColor(" _______ __ __ __ ", ConsoleColor.Cyan); Logging.WriteWithColor(" | ___|__|.----.-----.--.--.--.|__|.-----.--| |", ConsoleColor.Cyan); Logging.WriteWithColor(" | ___| || _| -__| | | || || | _ |", ConsoleColor.Cyan); Logging.WriteWithColor(" |___| |__||__| |_____|________||__||__|__|_____|", ConsoleColor.Cyan); Logging.WriteLine(""); Logging.WriteLine("=============================================================="); DefaultEncoding = Encoding.Default; Logging.WriteLine(" " + PrettyVersion); Logging.WriteLine(string.Format(" Licenced to {0}", LicenseHolder)); Logging.WriteLine(string.Format(" Maximum players: {0}", MaxUsers == 0 ? "Unlimited!" : MaxUsers.ToString())); Logging.WriteLine(""); Logging.WriteLine(" Go to the GitHub repo for bug reporting/contributions!"); cultureInfo = CultureInfo.CreateSpecificCulture("en-GB"); IsDebugging = IsDebugging ? System.Diagnostics.Debugger.IsAttached : false; try { LanguageLocale.Init(); ChatCommandRegister.Init(); PetCommandHandeler.Init(); PetLocale.Init(); if (IsDebugging) { Configuration = new ConfigurationData(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"Settings_test/configuration.ini")); } else { Configuration = new ConfigurationData(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"Settings/configuration.ini")); } DateTime Starts = DateTime.Now; Logging.WriteLine("Connecting to database..."); manager = new DatabaseManager(uint.Parse(FirewindEnvironment.GetConfig().data["db.pool.maxsize"]), int.Parse(FirewindEnvironment.GetConfig().data["db.pool.minsize"])); manager.setServerDetails( FirewindEnvironment.GetConfig().data["db.hostname"], uint.Parse(FirewindEnvironment.GetConfig().data["db.port"]), FirewindEnvironment.GetConfig().data["db.username"], FirewindEnvironment.GetConfig().data["db.password"], FirewindEnvironment.GetConfig().data["db.name"]); manager.init(); TimeSpan TimeUsed2 = DateTime.Now - Starts; Logging.WriteLine("Connected to database! (" + TimeUsed2.Seconds + " s, " + TimeUsed2.Milliseconds + " ms)"); LanguageLocale.InitSwearWord(); friendRequestLimit = (uint)(int.Parse(FirewindEnvironment.GetConfig().data["client.maxrequests"])); Game = new Game(int.Parse(FirewindEnvironment.GetConfig().data["game.tcp.conlimit"])); Game.ContinueLoading(); ConnectionManager = new ConnectionHandling(int.Parse(FirewindEnvironment.GetConfig().data["game.tcp.port"]), MaxUsers, int.Parse(FirewindEnvironment.GetConfig().data["game.tcp.conperip"]), FirewindEnvironment.GetConfig().data["game.tcp.enablenagles"].ToLower() == "true"); ConnectionManager.init(); ConnectionManager.Start(); StaticClientMessageHandler.Initialize(); ClientMessageFactory.Init(); string[] arrayshit = FirewindEnvironment.GetConfig().data["mus.tcp.allowedaddr"].Split(';'); MusSystem = new RConListener(FirewindEnvironment.GetConfig().data["mus.tcp.bindip"], int.Parse(FirewindEnvironment.GetConfig().data["mus.tcp.port"]), arrayshit, 0); useSSO = true; if (Configuration.data.ContainsKey("auth.ssodisabled")) { if (Configuration.data["auth.ssodisabled"] == "false") { useSSO = false; } } if (Configuration.data.ContainsKey("spambans.enabled")) { if (Configuration.data["spambans.enabled"] == "true") { spamBans = true; spamBans_limit = Convert.ToInt32(Configuration.data["spambans.limit"]); Logging.WriteLine("Spam Bans enabled"); } } if (Configuration.data.ContainsKey("SeparatedTasksInMainLoops.enabled")) { if (Configuration.data["SeparatedTasksInMainLoops.enabled"] == "true") { SeparatedTasksInMainLoops = true; Logging.WriteLine("MultiTasking in MainLoop"); } } if (Configuration.data.ContainsKey("SeparatedTasksInGameClientManager.enabled")) { if (Configuration.data["SeparatedTasksInGameClientManager.enabled"] == "true") { SeparatedTasksInGameClientManager = true; Logging.WriteLine("MultiTasking in ClientManager"); } } TimeSpan TimeUsed = DateTime.Now - Start; Logging.WriteWithColor("Firewind -> READY! (" + TimeUsed.Seconds + " s, " + TimeUsed.Milliseconds + " ms)", ConsoleColor.Cyan); isLive = true; if (System.Diagnostics.Debugger.IsAttached) { Logging.WriteLine("Server is debugging: Console writing enabled", true); } else { Logging.WriteLine("Server is not debugging: Console writing disabled", false); Logging.DisablePrimaryWriting(false); } } catch (KeyNotFoundException e) { Logging.WriteLine("Please check your configuration file - some values appear to be missing."); Logging.WriteLine("Press any key to shut down ..."); Logging.WriteLine(e.ToString()); Console.ReadKey(true); FirewindEnvironment.Destroy(); return; } catch (InvalidOperationException e) { Logging.WriteLine("Failed to initialize Firewind Emulator: " + e.Message); Logging.WriteLine("Press any key to shut down ..."); Console.ReadKey(true); FirewindEnvironment.Destroy(); return; } catch (Exception e) { Logging.WriteLine("Fatal error during startup: " + e.ToString()); Logging.WriteLine("Press a key to exit"); Console.ReadKey(); Environment.Exit(1); } // Check if this is habin or not try { using (IQueryAdapter dbClient = manager.getQueryreactor()) { dbClient.setQuery("SELECT column_name FROM information_schema.columns WHERE table_schema = '" + FirewindEnvironment.GetConfig().data["db.name"] + "' AND table_name = 'users' AND column_name = 'hpo'"); IsHabin = dbClient.findsResult(); } } catch { } }
internal static void InvokeCommand(string inputData) { if (string.IsNullOrEmpty(inputData) && Logging.DisabledState) { return; } if (Logging.DisabledState == false) { Logging.DisabledState = true; return; } try { #region Command parsing if (inputData != null) { var parameters = inputData.Split(' '); switch (parameters[0]) { case "fecha": case "fechar": case "desligar": case "stop": case "desliga": case "shutdown": { Logging.DisablePrimaryWriting(true); Console.WriteLine("Shutdown process started successfully at " + DateTime.Now.ToShortTimeString()); OtanixEnvironment.PreformShutDown(); break; } case "alert": { var Notice = inputData.Substring(6); var HotelAlert = new ServerMessage(Outgoing.SendNotif); HotelAlert.AppendString(LanguageLocale.GetValue("console.noticefromadmin") + "\n\n" + Notice); HotelAlert.AppendString(""); getGame().GetClientManager().QueueBroadcaseMessage(HotelAlert); Console.WriteLine("[" + Notice + "] sent"); break; } case "help": case "ajuda": { Console.WriteLine("shutdown - Cierra el emulador guardando todos los datos"); Console.WriteLine("alert (message) - Envía una alerta al hotel"); Console.WriteLine("flush"); Console.WriteLine(" cache - Refresca la caché del emulador."); Console.WriteLine(" consoleoffmessages - Refresca los mensajes almacenados de los usuarios offline de la consola."); Console.WriteLine(" emusettings - Refresca el archivo values.ini"); Console.WriteLine(" commands - Refresca el archivo commands.ini y locale.pets.ini"); Console.WriteLine(" language - Refresca el archivo locale.ini y los welcome.ini"); Console.WriteLine(" settings"); Console.WriteLine(" ranks - Coge el número de rangos de la tabla ranks."); Console.WriteLine(" blackwords - Vuelve a cachear los datos de la tabla server_blackwords."); Console.WriteLine(" modcategories - Vuelve a cachear los datos de las tablas moderations."); Console.WriteLine(" refreshitems - Vuelve a cachear los datos de la tabla items_base."); Console.WriteLine(" bans - Vuelve a cachear los datos de la tabla bans."); Console.WriteLine(" catalog - Vuelve a cachear los datos de la tabla catalog_items y catalog_pages."); Console.WriteLine(" youtube_tv - Vuelve a cachear los datos de la tabla youtube_videos."); Console.WriteLine(" modeldata - Vuelve a cachear los datos de la tabla room_models."); Console.WriteLine(" console - Limpia el aspecto visual de la consola."); Console.WriteLine(" memory - Limpia los datos de la caché del emu que no se están usando."); 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 "cache": { LowPriorityWorker.FlushCache(); break; } case "consoleoffmessages": { Console.WriteLine("Se han borrado un total de " + MessengerChat.MessagesCount + " mensajes"); MessengerChat.ClearMessages(); break; } case "emusettings": { using (IQueryAdapter dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor()) { EmuSettings.Initialize(dbClient); StaffChat.Initialize(dbClient); } Console.WriteLine("Emu Settings reloaded."); break; } case "commands": { Console.WriteLine("Flushing commands"); ChatCommandRegister.Init(); PetLocale.Init(); Console.WriteLine("Commands flushed"); break; } case "language": { Console.WriteLine("Flushing language files"); LanguageLocale.Init(); Console.WriteLine("Language files flushed"); 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 "ranks": { using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor()) { Ranks.LoadMaxRankId(dbClient); } Console.WriteLine("Rangos actualizados con éxito."); break; } case "blackwords": { using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor()) { BlackWordsManager.Load(dbClient); } Console.WriteLine("BlackWords actualizados con éxito."); break; } case "modcategories": { using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor()) { OtanixEnvironment.GetGame().GetModerationTool().LoadMessagePresets(dbClient); OtanixEnvironment.GetGame().GetModerationTool().LoadModActions(dbClient); } break; } case "refreshitems": { getGame().GetItemManager().reloaditems(); Console.WriteLine("Item definition reloaded"); break; } case "bans": { using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor()) { OtanixEnvironment.GetGame().GetBanManager().LoadBans(dbClient); } Console.WriteLine("Bans flushed"); break; } case "catalog": { Console.WriteLine("Flushing catalog settings"); using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor()) { getGame().GetCatalog().Initialize(dbClient); getGame().GetCatalogPremium().Initialize(dbClient); } getGame().GetCatalog().InitCache(); ServerMessage Message = new ServerMessage(Outgoing.UpdateShop); Message.AppendBoolean(false); // timer? OtanixEnvironment.GetGame().GetClientManager().QueueBroadcaseMessage(Message); Console.WriteLine("Catalog flushed"); break; } case "youtube_tv": { using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor()) { getGame().GetYoutubeManager().Initialize(dbClient); } break; } case "modeldata": { Console.WriteLine("Flushing modeldata"); using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor()) { getGame().GetRoomManager().LoadModels(dbClient); } Console.WriteLine("Models flushed"); break; } } } break; } case "console": { Console.Clear(); break; } case "memory": { GC.Collect(); Console.WriteLine("Memory flushed"); break; } default: { unknownCommand(inputData); break; } } } break; } case "hacks": { switch (parameters[1]) { case "dice": { string Username = parameters[2]; uint Number = uint.Parse(parameters[3]); GameClient Session = OtanixEnvironment.GetGame().GetClientManager().GetClientByUsername(Username); if (Session == null) { Console.WriteLine("Invalid Username"); break; } if (Number < 1 || Number > 6) { Console.WriteLine("Invalid Number"); break; } Session.GetHabbo().DiceNumber = Number; break; } case "packet": { string Username = parameters[2]; GameClient Session = OtanixEnvironment.GetGame().GetClientManager().GetClientByUsername(Username); if (Session == null) { Console.WriteLine("Invalid Username"); break; } Session.PacketSaverEnable = !Session.PacketSaverEnable; Console.WriteLine("Actual State " + Session.PacketSaverEnable + " for user " + Username); break; } } break; } default: { unknownCommand(inputData); break; } } } #endregion } catch (Exception e) { Console.WriteLine("Error in command [" + inputData + "]: " + e); } Console.WriteLine(); }
/// <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 }
internal override void OnUserSay(Rooms.RoomUser User, string Message) { RoomUser Pet = GetRoomUser(); if (Pet.PetData.DBState != Pets.DatabaseUpdateState.NeedsInsert) { Pet.PetData.DBState = Pets.DatabaseUpdateState.NeedsUpdate; } if (Message.ToLower().Equals(Pet.PetData.Name.ToLower())) { Pet.SetRot(Rotation.Calculate(Pet.X, Pet.Y, User.X, User.Y), false); return; } if ((Message.ToLower().StartsWith(Pet.PetData.Name.ToLower() + " ") && User.GetClient().GetHabbo().Username.ToLower() == GetRoomUser().PetData.OwnerName.ToLower()) || (Message.ToLower().StartsWith(Pet.PetData.Name.ToLower() + " ") && PetCommandHandeler.TryInvoke(Message.Substring(Pet.PetData.Name.ToLower().Length + 1)) == 8)) { string Command = Message.Substring(Pet.PetData.Name.ToLower().Length + 1); int r = FirewindEnvironment.GetRandomNumber(1, 8); // Made Random if (Pet.PetData.Energy > 10 && r < 6 || Pet.PetData.Level > 15 || PetCommandHandeler.TryInvoke(Command) == 8) { RemovePetStatus(); // Remove Status switch (PetCommandHandeler.TryInvoke(Command)) { // TODO - Level you can use the commands at... #region free case 1: RemovePetStatus(); //int randomX = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeX); //int randomY = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeY); Point nextCoord = GetRoom().GetGameMap().getRandomWalkableSquare(); Pet.MoveTo(nextCoord.X, nextCoord.Y); Pet.PetData.AddExpirience(10); // Give XP break; #endregion #region here case 2: RemovePetStatus(); int NewX = User.X; int NewY = User.Y; ActionTimer = 30; // Reset ActionTimer #region Rotation if (User.RotBody == 4) { NewY = User.Y + 1; } else if (User.RotBody == 0) { NewY = User.Y - 1; } else if (User.RotBody == 6) { NewX = User.X - 1; } else if (User.RotBody == 2) { NewX = User.X + 1; } else if (User.RotBody == 3) { NewX = User.X + 1; NewY = User.Y + 1; } else if (User.RotBody == 1) { NewX = User.X + 1; NewY = User.Y - 1; } else if (User.RotBody == 7) { NewX = User.X - 1; NewY = User.Y - 1; } else if (User.RotBody == 5) { NewX = User.X - 1; NewY = User.Y + 1; } #endregion Pet.PetData.AddExpirience(10); // Give XP Pet.MoveTo(NewX, NewY); break; #endregion #region sit case 3: // Remove Status RemovePetStatus(); Pet.PetData.AddExpirience(10); // Give XP // Add Status Pet.Statusses.Add("sit", TextHandling.GetString(Pet.Z)); ActionTimer = 25; EnergyTimer = 10; break; #endregion #region lay case 4: // Remove Status RemovePetStatus(); // Add Status Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); // Give XP ActionTimer = 30; EnergyTimer = 5; break; #endregion #region dead case 5: // Remove Status RemovePetStatus(); // Add Status Pet.Statusses.Add("ded", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); // Give XP // Don't move to speak for a set amount of time. SpeechTimer = 45; ActionTimer = 30; break; #endregion #region sleep case 6: // Remove Status RemovePetStatus(); Pet.Chat(null, "ZzzZZZzzzzZzz", false); Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); // Give XP // Don't move to speak for a set amount of time. EnergyTimer = 5; SpeechTimer = 30; ActionTimer = 45; break; #endregion #region jump case 7: // Remove Status RemovePetStatus(); // Add Status Pet.Statusses.Add("jmp", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); // Give XP // Don't move to speak for a set amount of time. EnergyTimer = 5; SpeechTimer = 10; ActionTimer = 5; break; #endregion default: string[] Speech = PetLocale.GetValue("pet.unknowncommand"); Random RandomSpeech = new Random(); Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false); break; } Pet.PetData.PetEnergy(false); // Remove Energy Pet.PetData.PetEnergy(false); // Remove Energy } else { RemovePetStatus(); // Remove Status if (Pet.PetData.Energy < 10) { string[] Speech = PetLocale.GetValue("pet.tired"); Random RandomSpeech = new Random(); Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false); Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z)); SpeechTimer = 50; ActionTimer = 45; EnergyTimer = 5; } else { string[] Speech = PetLocale.GetValue("pet.lazy"); Random RandomSpeech = new Random(); Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false); Pet.PetData.PetEnergy(false); // Remove Energy } } } //Pet = null; }
internal override void OnTimerTick() { checked { if (this.SpeechTimer <= 0) { RoomUser roomUser = base.GetRoomUser(); if (roomUser.PetData.DBState != DatabaseUpdateState.NeedsInsert) { roomUser.PetData.DBState = DatabaseUpdateState.NeedsUpdate; } if (roomUser != null) { Random random = new Random(); this.RemovePetStatus(); string[] value = PetLocale.GetValue("speech.pet" + roomUser.PetData.Type); string text = value[random.Next(0, value.Length - 1)]; if (text.Length != 3) { roomUser.Chat(null, text, false, 0, 0); } else { roomUser.Statusses.Add(text, TextHandling.GetString(roomUser.Z)); } } this.SpeechTimer = CyberEnvironment.GetRandomNumber(20, 120); } else { this.SpeechTimer--; } if (this.ActionTimer <= 0) { try { this.RemovePetStatus(); this.ActionTimer = CyberEnvironment.GetRandomNumber(15, 40 + base.GetRoomUser().PetData.VirtualId); if (!base.GetRoomUser().RidingHorse) { if (base.GetRoomUser().PetData.Type != 16u) { Point randomWalkableSquare = base.GetRoom().GetGameMap().getRandomWalkableSquare(); base.GetRoomUser().MoveTo(randomWalkableSquare.X, randomWalkableSquare.Y); } } if (new Random().Next(2, 15) % 2 == 0) { if (base.GetRoomUser().PetData.Type == 16) { MoplaBreed breed = base.GetRoomUser().PetData.MoplaBreed; base.GetRoomUser().PetData.Energy--; base.GetRoomUser().AddStatus("gst", (breed.LiveState == MoplaState.DEAD) ? "sad" : "sml"); base.GetRoomUser().PetData.MoplaBreed.OnTimerTick(base.GetRoomUser().PetData.LastHealth, base.GetRoomUser().PetData.UntilGrown); } else { if (base.GetRoomUser().PetData.Energy < 30) { base.GetRoomUser().AddStatus("lay", ""); } else { base.GetRoomUser().AddStatus("gst", "joy"); if (new Random().Next(1, 7) == 3) { base.GetRoomUser().AddStatus("snf", ""); } } } base.GetRoomUser().UpdateNeeded = true; } goto IL_1B5; } catch (Exception pException) { Logging.HandleException(pException, "PetBot.OnTimerTick"); goto IL_1B5; } } this.ActionTimer--; IL_1B5: if (this.EnergyTimer <= 0) { this.RemovePetStatus(); RoomUser roomUser2 = base.GetRoomUser(); roomUser2.PetData.PetEnergy(true); this.EnergyTimer = CyberEnvironment.GetRandomNumber(30, 120); return; } this.EnergyTimer--; } }
/// <summary> /// Main Void, Initializes the Emulator. /// </summary> internal static void Initialize() { Console.Title = "Yupi Emulator | Starting [...]"; ServerStarted = DateTime.Now; _defaultEncoding = Encoding.Default; MutedUsersByFilter = new Dictionary <uint, uint>(); ChatEmotions.Initialize(); CultureInfo = CultureInfo.CreateSpecificCulture("en-GB"); YupiRootDirectory = Directory.GetParent(Directory.GetParent(Environment.CurrentDirectory).FullName).FullName; YupiVariablesDirectory = Path.Combine(YupiRootDirectory, "Variables"); try { ServerConfigurationSettings.Load(Path.Combine(YupiVariablesDirectory, "Settings/main.ini")); ServerConfigurationSettings.Load(Path.Combine(YupiVariablesDirectory, "Settings/Welcome/settings.ini"), true); MySqlConnectionStringBuilder mySqlConnectionStringBuilder = new MySqlConnectionStringBuilder { Server = ServerConfigurationSettings.Data["db.hostname"], Port = uint.Parse(ServerConfigurationSettings.Data["db.port"]), UserID = ServerConfigurationSettings.Data["db.username"], Password = ServerConfigurationSettings.Data["db.password"], Database = ServerConfigurationSettings.Data["db.name"], MinimumPoolSize = uint.Parse(ServerConfigurationSettings.Data["db.pool.minsize"]), MaximumPoolSize = uint.Parse(ServerConfigurationSettings.Data["db.pool.maxsize"]), Pooling = true, AllowZeroDateTime = true, ConvertZeroDateTime = true, DefaultCommandTimeout = 300u, ConnectionTimeout = 10u }; Manager = new DatabaseManager(mySqlConnectionStringBuilder.ToString()); using (IQueryAdapter commitableQueryReactor = GetDatabaseManager().GetQueryReactor()) { ConfigData = new ServerDatabaseSettings(commitableQueryReactor); PetCommandHandler.Init(commitableQueryReactor); PetLocale.Init(commitableQueryReactor); OfflineMessages = new Dictionary <uint, List <OfflineMessage> >(); OfflineMessage.InitOfflineMessages(commitableQueryReactor); } ConsoleTimer = int.Parse(ServerConfigurationSettings.Data["console.clear.time"]); ConsoleTimerOn = bool.Parse(ServerConfigurationSettings.Data["console.clear.enabled"]); FriendRequestLimit = (uint)int.Parse(ServerConfigurationSettings.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>(); if (ServerConfigurationSettings.Data.ContainsKey("client.build")) { LibraryParser.ReleaseName = ServerConfigurationSettings.Data["client.build"]; } else { throw new Exception("Unable to Continue if No Release is configured to the Emulator Handle."); } LibraryParser.RegisterLibrary(); LibraryParser.RegisterOutgoing(); LibraryParser.RegisterIncoming(); LibraryParser.RegisterConfig(); Plugins = new Dictionary <string, IPlugin>(); ICollection <IPlugin> plugins = LoadPlugins(); if (plugins != null) { foreach (IPlugin item in plugins.Where(item => item != null)) { Plugins.Add(item.PluginName, item); Writer.WriteLine("Loaded Plugin: " + item.PluginName + " Version: " + item.PluginVersion, "Yupi.Plugins", ConsoleColor.DarkBlue); } } ServerExtraSettings.RunExtraSettings(); FurnitureDataManager.SetCache(); CrossDomainSettings.Set(); _game = new Game.Game(int.Parse(ServerConfigurationSettings.Data["game.tcp.conlimit"])); _game.GetNavigator().LoadNewPublicRooms(); _game.ContinueLoading(); FurnitureDataManager.Clear(); if (ServerConfigurationSettings.Data.ContainsKey("server.lang")) { ServerLanguage = Convert.ToString(ServerConfigurationSettings.Data["server.lang"]); } _languages = new ServerLanguageSettings(ServerLanguage); Writer.WriteLine("Loaded " + _languages.Count() + " Languages Vars", "Yupi.Interpreters"); if (plugins != null) { foreach (IPlugin itemTwo in plugins) { itemTwo?.message_void(); } } if (ConsoleTimerOn) { Writer.WriteLine("Console Clear Timer is Enabled, with " + ConsoleTimer + " Seconds.", "Yupi.Boot"); } ClientMessageFactory.Init(); Writer.WriteLine( "Game server started at port " + int.Parse(ServerConfigurationSettings.Data["game.tcp.port"]), "Server.Game"); _connectionManager = new ConnectionHandler(int.Parse(ServerConfigurationSettings.Data["game.tcp.port"]), int.Parse(ServerConfigurationSettings.Data["game.tcp.conlimit"]), int.Parse(ServerConfigurationSettings.Data["game.tcp.conperip"]), ServerConfigurationSettings.Data["game.tcp.antiddos"].ToLower() == "true", ServerConfigurationSettings.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"]); Writer.WriteLine("Started RSA crypto service", "Yupi.Crypto"); } else { Writer.WriteLine("The encryption system is disabled.", "Yupi.Crypto", ConsoleColor.DarkYellow); } LibraryParser.Initialize(); if (ConsoleTimerOn) { Timer = new Timer { Interval = ConsoleTimer }; Timer.Elapsed += TimerElapsed; Timer.Start(); } if (ServerConfigurationSettings.Data.ContainsKey("StaffAlert.MinLevel")) { StaffAlertMinRank = uint.Parse(ServerConfigurationSettings.Data["StaffAlert.MinLevel"]); } if (ServerConfigurationSettings.Data.ContainsKey("game.multithread.enabled")) { SeparatedTasksInMainLoops = ServerConfigurationSettings.Data["game.multithread.enabled"] == "true"; } if (ServerConfigurationSettings.Data.ContainsKey("client.multithread.enabled")) { SeparatedTasksInGameClientManager = ServerConfigurationSettings.Data["client.multithread.enabled"] == "true"; } if (ServerConfigurationSettings.Data.ContainsKey("debug.packet")) { if (ServerConfigurationSettings.Data["debug.packet"] == "true") { PacketDebugMode = true; } } Writer.WriteLine("Yupi Emulator ready. Status: idle", "Yupi.Boot"); IsLive = true; } catch (Exception e) { Writer.WriteLine("Error When Starting Yupi Environment!" + Environment.NewLine + e.Message, "Yupi.Boot", ConsoleColor.Red); Writer.WriteLine("Please press Y to get more details or press other Key to Exit", "Yupi.Boot", ConsoleColor.Red); ConsoleKeyInfo key = Console.ReadKey(); if (key.Key == ConsoleKey.Y) { Console.WriteLine(); Writer.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", "Yupi.Boot", ConsoleColor.Red); Console.ReadKey(); Environment.Exit(1); } else { Environment.Exit(1); } } }
internal static void Initialize() { Console.Clear(); DateTime Start = DateTime.Now; SystemMute = false; ServerStarted = DateTime.Now; Console.Title = "Loading Butterfly Emulator"; DefaultEncoding = Encoding.Default; //Logging.rzFlag(); Logging.WriteLine(); Logging.WriteLine(PrettyVersion); cultureInfo = CultureInfo.CreateSpecificCulture("en-GB"); LanguageLocale.Init(); try { ChatCommandRegister.Init(); PetCommandHandeler.Init(); PetLocale.Init(); Configuration = new ConfigurationData(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"Settings/configuration.ini")); if (ButterflyEnvironment.GetConfig().data["db.password"] == "changeme") { throw new ArgumentException("Your MySQL password may not be 'changeme'.\nChange your password to start the server."); } DateTime Starts = DateTime.Now; Logging.WriteLine("Connecting to database..."); dbType = GetConfig().data.ContainsKey("db.mssql") && GetConfig().data["db.mssql"] == "true" ? DatabaseType.MSSQL : DatabaseType.MySQL; manager = new DatabaseManager(uint.Parse(ButterflyEnvironment.GetConfig().data["db.pool.maxsize"]), int.Parse(ButterflyEnvironment.GetConfig().data["db.pool.minsize"]), dbType); manager.setServerDetails( ButterflyEnvironment.GetConfig().data["db.hostname"], uint.Parse(ButterflyEnvironment.GetConfig().data["db.port"]), ButterflyEnvironment.GetConfig().data["db.username"], ButterflyEnvironment.GetConfig().data["db.password"], ButterflyEnvironment.GetConfig().data["db.name"]); manager.init(); TimeSpan TimeUsed2 = DateTime.Now - Starts; Logging.WriteLine("Connected to database! (" + TimeUsed2.Seconds + " s, " + TimeUsed2.Milliseconds + " ms)"); LanguageLocale.InitSwearWord(); Game = new Game(int.Parse(ButterflyEnvironment.GetConfig().data["game.tcp.conlimit"])); Game.ContinueLoading(); ConnectionManager = new ConnectionHandeling(int.Parse(ButterflyEnvironment.GetConfig().data["game.tcp.port"]), int.Parse(ButterflyEnvironment.GetConfig().data["game.tcp.conlimit"]), int.Parse(ButterflyEnvironment.GetConfig().data["game.tcp.conperip"]), ButterflyEnvironment.GetConfig().data["game.tcp.enablenagles"].ToLower() == "true"); ConnectionManager.init(); ConnectionManager.Start(); StaticClientMessageHandler.Initialize(); ClientMessageFactory.Init(); string[] arrayshit = ButterflyEnvironment.GetConfig().data["mus.tcp.allowedaddr"].Split(Convert.ToChar(",")); MusSystem = new MusSocket(ButterflyEnvironment.GetConfig().data["mus.tcp.bindip"], int.Parse(ButterflyEnvironment.GetConfig().data["mus.tcp.port"]), arrayshit, 0); groupsEnabled = false; if (Configuration.data.ContainsKey("groups.enabled")) { if (Configuration.data["groups.enabled"] == "true") { groupsEnabled = true; } } useSSO = true; if (Configuration.data.ContainsKey("auth.ssodisabled")) { if (Configuration.data["auth.ssodisabled"] == "false") { useSSO = false; } } TimeSpan TimeUsed = DateTime.Now - Start; Logging.WriteLine("ENVIRONMENT -> READY! (" + TimeUsed.Seconds + " s, " + TimeUsed.Milliseconds + " ms)"); isLive = true; if (System.Diagnostics.Debugger.IsAttached || Configuration.data["debug.console"] == "1") { Console.ForegroundColor = ConsoleColor.Yellow; Logging.WriteLine("Server is debugging: Console writing enabled"); Console.ForegroundColor = ConsoleColor.White; } else { Logging.WriteLine("Server is not debugging: Console writing disabled"); Logging.DisablePrimaryWriting(false); } } catch (KeyNotFoundException e) { Logging.WriteLine("Please check your configuration file - some values appear to be missing."); Logging.WriteLine("Press any key to shut down ..."); Logging.WriteLine(e.ToString()); Console.ReadKey(true); ButterflyEnvironment.Destroy(); return; } catch (InvalidOperationException e) { Logging.WriteLine("Failed to initialize ButterflyEmulator: " + e.Message); Logging.WriteLine("Press any key to shut down ..."); Console.ReadKey(true); ButterflyEnvironment.Destroy(); return; } catch (Exception e) { Console.WriteLine("Fatal error during startup: " + e.ToString()); Console.WriteLine("Press a key to exit"); Console.ReadKey(); Environment.Exit(1); } }
public override bool Execute(GameClient session, string[] pms) { PetLocale.Init(Yupi.GetDatabaseManager().GetQueryReactor()); return(true); }
/// <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)) { return; } if (roomUser.PetData.Level < command.MinLevel) { return; } RemovePetStatus(); _actionTimer = 25; _energyTimer = 10; if (roomUser.PetData.Energy < command.LostEnergy && roomUser.PetData.Nutrition < 25 || roomUser.PetData.Energy < command.LostEnergy) { roomUser.UpdateNeeded = true; string[] valueLazy = PetLocale.GetValue("pet.lazy"); string messageLazy = valueLazy[new Random().Next(0, valueLazy.Length - 1)]; roomUser.Chat(null, messageLazy, false, 0); return; } roomUser.UpdateNeeded = true; roomUser.PetData.AddExperience(command.GainedExperience); roomUser.Statusses.Add(command.PetStatus, string.Empty); roomUser.Statusses.Add("gst", command.PetGesture); roomUser.FollowingOwner = null; SubtractAttributes(command.LostEnergy); Random random = new Random(); string[] value = PetLocale.GetValue(command.PetSpeech); string message = value[random.Next(0, value.Length - 1)]; roomUser.Statusses.Clear(); roomUser.Chat(null, message, false, 0); /* 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 "pet_terrier": coord = GetRoom().GetRoomItemHandler().GetRandomBreedingTerrier(roomUser.PetData); break; case "pet_bear": 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); } roomUser.MoveTo(coord, true); 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": break; } }
/// <summary> /// Called when [timer tick]. /// </summary> internal override void OnTimerTick() { RoomUser roomUser = GetRoomUser(); if (roomUser == null) { return; } Random random = new Random(); if (_actionTimer > 0) { _actionTimer--; } if (_speechTimer > 0) { _speechTimer--; } if (_energyTimer > 0) { _energyTimer--; } if (roomUser.X == roomUser.GoalX && roomUser.Y == roomUser.GoalY && roomUser.Statusses.ContainsKey("mv") && !roomUser.IsWalking) { roomUser.ClearMovement(); } if (_speechTimer == 0) { _speechTimer = (uint)new Random().Next(20, 100); if (roomUser.PetData.DbState != DatabaseUpdateState.NeedsInsert) { roomUser.PetData.DbState = DatabaseUpdateState.NeedsUpdate; } string[] value = PetLocale.GetValue($"speech.pet{roomUser.PetData.Type.Replace("pet", string.Empty)}"); string text = value[random.Next(0, value.Length - 1)]; if (GetRoom() != null && !GetRoom().MutedPets) { roomUser.Chat(null, text, false, 0); } else { roomUser.Statusses.Add(text, ServerUserChatTextHandler.GetString(roomUser.Z)); } } if (_actionTimer == 0) { _actionTimer = (uint)random.Next(10, 40); if (roomUser.FollowingOwner != null) { _actionTimer = 2; } if (!roomUser.RidingHorse) { if (roomUser.PetData.Type == "pet_monster") { return; } if (roomUser.FollowingOwner != null) { roomUser.MoveTo(roomUser.FollowingOwner.SquareInFront); roomUser.FollowingOwner = null; } if (roomUser.FollowingOwner == null) { Point randomPoint = GetRoom().GetGameMap().GetRandomWalkableSquare(); if (randomPoint.X == 0 || randomPoint.Y == 0) { return; } roomUser.MoveTo(randomPoint.X, randomPoint.Y); } } if (random.Next(2, 5) % 2 == 0) { RemovePetStatus(); switch (roomUser.PetData.Type) { case "pet_monster": { MoplaBreed breed = GetRoomUser().PetData.MoplaBreed; roomUser.PetData.Energy--; roomUser.AddStatus("gst", breed.LiveState == MoplaState.Dead ? "sad" : "sml"); roomUser.PetData.MoplaBreed.OnTimerTick(roomUser.PetData.LastHealth, roomUser.PetData.UntilGrown); } break; default: { if (roomUser.PetData.Energy < 30 || random.Next(2, 5) % 2 == 0) { roomUser.AddStatus("lay", string.Empty); } else if ((roomUser.PetData.Energy < 30 && roomUser.PetData.Nutrition < 30) || roomUser.PetData.Nutrition < 30 || random.Next(2, 5) % 2 == 0) { roomUser.AddStatus("snf", string.Empty); } else if (GetRoomUser().PetData.Energy >= 30) { roomUser.AddStatus("gst", "joy"); } else { roomUser.AddStatus("gst", "sml"); } } break; } } } if (_energyTimer == 0) { _energyTimer = (uint)random.Next(30, 120); roomUser.PetData.PetEnergy(true); } }
/// <summary> /// Called when [timer tick]. /// </summary> internal override void OnTimerTick() { if (GetRoomUser().FollowingOwner != null) { GetRoomUser().MoveTo(GetRoomUser().FollowingOwner.SquareBehind); } if (_speechTimer <= 0) { RoomUser roomUser = GetRoomUser(); if (roomUser != null) { if (roomUser.PetData.DbState != DatabaseUpdateState.NeedsInsert) { roomUser.PetData.DbState = DatabaseUpdateState.NeedsUpdate; } var random = new Random(); RemovePetStatus(); string[] value = PetLocale.GetValue(string.Format("speech.pet{0}", roomUser.PetData.Type)); string text = value[random.Next(0, value.Length - 1)]; if (GetRoom() != null && !GetRoom().MutedPets) { roomUser.Chat(null, text, false, 0, 0); } else { roomUser.Statusses.Add(text, TextHandling.GetString(roomUser.Z)); } } _speechTimer = Plus.GetRandomNumber(20, 120); } else { _speechTimer--; } if (_actionTimer <= 0 && GetRoomUser() != null) { try { _actionTimer = GetRoomUser().FollowingOwner != null ? 2 : Plus.GetRandomNumber(15, 40 + GetRoomUser().PetData.VirtualId); RemovePetStatus(); _actionTimer = Plus.GetRandomNumber(15, 40 + GetRoomUser().PetData.VirtualId); if (GetRoomUser().RidingHorse != true) { RemovePetStatus(); if (GetRoomUser().FollowingOwner != null) { GetRoomUser().MoveTo(GetRoomUser().FollowingOwner.SquareBehind); } else { if (GetRoomUser().PetData.Type == 16) { return; //Monsterplants can't move } var nextCoord = GetRoom().GetGameMap().GetRandomValidWalkableSquare(); GetRoomUser().MoveTo(nextCoord.X, nextCoord.Y); } } if (new Random().Next(2, 15) % 2 == 0) { if (GetRoomUser().PetData.Type == 16) { MoplaBreed breed = GetRoomUser().PetData.MoplaBreed; GetRoomUser().PetData.Energy--; GetRoomUser().AddStatus("gst", (breed.LiveState == MoplaState.Dead) ? "sad" : "sml"); GetRoomUser() .PetData.MoplaBreed.OnTimerTick(GetRoomUser().PetData.LastHealth, GetRoomUser().PetData.UntilGrown); } else { if (GetRoomUser().PetData.Energy < 30) { GetRoomUser().AddStatus("lay", ""); } else { GetRoomUser().AddStatus("gst", "joy"); if (new Random().Next(1, 7) == 3) { GetRoomUser().AddStatus("snf", ""); } } } GetRoomUser().UpdateNeeded = true; } goto IL_1B5; } catch (Exception pException) { Logging.HandleException(pException, "PetBot.OnTimerTick"); goto IL_1B5; } } _actionTimer--; IL_1B5: if (_energyTimer <= 0) { RemovePetStatus(); var roomUser2 = GetRoomUser(); if (roomUser2 != null) { roomUser2.PetData.PetEnergy(true); } _energyTimer = Plus.GetRandomNumber(30, 120); return; } _energyTimer--; }
internal static void Initialize() { Console.Clear(); DateTime Start = DateTime.Now; SystemMute = false; IrcEnabled = false; ServerStarted = DateTime.Now; Console.Title = PiciEnvironment.Title + " " + PiciEnvironment.Version; Console.WindowHeight = 30; DefaultEncoding = Encoding.Default; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(""); Console.WriteLine(" ______ _ _ _______ "); Console.WriteLine(" (_____ (_) (_) (_______) "); Console.WriteLine(" _____) ) ____ _ _____ ____ _ _ "); Console.WriteLine(@" | ____/ |/ ___) | | ___) | \| | | |"); Console.WriteLine(@" | | | ( (___| | | |_____| | | | |_| |"); Console.WriteLine(@" |_| |_|\____)_| |_______)_|_|_|____/ "); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(" " + PiciEnvironment.Title + " " + PiciEnvironment.Version + " (Build " + PiciEnvironment.Build + ")"); Console.WriteLine(); Console.ResetColor(); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(); cultureInfo = CultureInfo.CreateSpecificCulture("en-GB"); LanguageLocale.Init(); try { ChatCommandRegister.Init(); PetCommandHandeler.Init(); PetLocale.Init(); Configuration = new ConfigurationData(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"config.conf")); DateTime Starts = DateTime.Now; dbType = DatabaseType.MySQL; manager = new DatabaseManager(uint.Parse(PiciEnvironment.GetConfig().data["db.pool.maxsize"]), uint.Parse(PiciEnvironment.GetConfig().data["db.pool.minsize"]), int.Parse(PiciEnvironment.GetConfig().data["db.pool.minsize"]), dbType); manager.setServerDetails( PiciEnvironment.GetConfig().data["db.hostname"], uint.Parse(PiciEnvironment.GetConfig().data["db.port"]), PiciEnvironment.GetConfig().data["db.username"], PiciEnvironment.GetConfig().data["db.password"], PiciEnvironment.GetConfig().data["db.name"]); manager.init(); TimeSpan TimeUsed2 = DateTime.Now - Starts; LanguageLocale.InitSwearWord(); Game = new Game(int.Parse(PiciEnvironment.GetConfig().data["game.tcp.conlimit"])); Game.ContinueLoading(); ConnectionManager = new ConnectionHandeling(int.Parse(PiciEnvironment.GetConfig().data["game.tcp.port"]), int.Parse(PiciEnvironment.GetConfig().data["game.tcp.conlimit"]), int.Parse(PiciEnvironment.GetConfig().data["game.tcp.conperip"]), PiciEnvironment.GetConfig().data["game.tcp.enablenagles"].ToLower() == "true"); ConnectionManager.init(); ConnectionManager.Start(); StaticClientMessageHandler.Initialize(); ClientMessageFactory.Init(); string[] arrayshit = PiciEnvironment.GetConfig().data["mus.tcp.allowedaddr"].Split(Convert.ToChar(",")); MusSystem = new MusSocket(PiciEnvironment.GetConfig().data["mus.tcp.bindip"], int.Parse(PiciEnvironment.GetConfig().data["mus.tcp.port"]), arrayshit, 0); //InitIRC(); groupsEnabled = true; useSSO = true; TimeSpan TimeUsed = DateTime.Now - Start; Logging.WriteLine("Server -> Started! (" + TimeUsed.Seconds + " s, " + TimeUsed.Milliseconds + " ms)"); isLive = true; Console.Beep(); if (bool_0_12) { Console.WriteLine("Coffee team, I appreciate you testing. ;-*"); System.Threading.Thread.Sleep(2500); PreformShutDown(true); return; } } catch (KeyNotFoundException e) { Logging.WriteLine("Please check your configuration file - some values appear to be missing."); Logging.WriteLine("Press any key to shut down ..."); Logging.WriteLine(e.ToString()); Console.ReadKey(true); PiciEnvironment.Destroy(); return; } catch (InvalidOperationException e) { Logging.WriteLine("Failed to initialize PiciEmulator: " + e.Message); Logging.WriteLine("Press any key to shut down ..."); Console.ReadKey(true); PiciEnvironment.Destroy(); return; } catch (Exception e) { Console.WriteLine("Fatal error during startup: " + e.ToString()); Console.WriteLine("Press a key to exit"); Console.ReadKey(); Environment.Exit(1); } }
/// <summary> /// Main Void, Initializes the Emulator. /// </summary> internal static void Initialize() { Console.Title = "Yupi Emulator | Starting [...]"; YupiServerStartDateTime = DateTime.Now; YupiServerTextEncoding = Encoding.Default; MutedUsersByFilter = new Dictionary <uint, uint>(); ChatEmotions.Initialize(); CultureInfo = CultureInfo.CreateSpecificCulture("en-GB"); YupiRootDirectory = Directory.GetParent(Directory.GetParent(Environment.CurrentDirectory).FullName).FullName; YupiVariablesDirectory = Path.Combine(YupiRootDirectory, "Variables"); try { ServerConfigurationSettings.Load(Path.Combine(YupiVariablesDirectory, "Settings/main.ini")); ServerConfigurationSettings.Load(Path.Combine(YupiVariablesDirectory, "Settings/Welcome/settings.ini"), true); if (uint.Parse(ServerConfigurationSettings.Data["db.pool.maxsize"]) > MaxRecommendedMySqlConnections) { YupiWriterManager.WriteLine("MySQL Max Conn is High!, Recommended Value: " + MaxRecommendedMySqlConnections, "Yupi.Data", ConsoleColor.DarkYellow); } MySqlConnectionStringBuilder mySqlConnectionStringBuilder = new MySqlConnectionStringBuilder { Server = ServerConfigurationSettings.Data["db.hostname"], Port = uint.Parse(ServerConfigurationSettings.Data["db.port"]), UserID = ServerConfigurationSettings.Data["db.username"], Password = ServerConfigurationSettings.Data["db.password"], Database = ServerConfigurationSettings.Data["db.name"], MinimumPoolSize = uint.Parse(ServerConfigurationSettings.Data["db.pool.minsize"]), MaximumPoolSize = uint.Parse(ServerConfigurationSettings.Data["db.pool.maxsize"]), Pooling = true, AllowZeroDateTime = true, ConvertZeroDateTime = true, DefaultCommandTimeout = 300, ConnectionTimeout = 10 }; YupiDatabaseManager = new BasicDatabaseManager(mySqlConnectionStringBuilder); using (IQueryAdapter queryReactor = GetDatabaseManager().GetQueryReactor()) { DatabaseSettings = new ServerDatabaseSettings(queryReactor); PetCommandHandler.Init(queryReactor); PetLocale.Init(queryReactor); OfflineMessages = new Dictionary <uint, List <OfflineMessage> >(); OfflineMessage.InitOfflineMessages(queryReactor); } YupiLogManager.Init(MethodBase.GetCurrentMethod().DeclaringType); ConsoleCleanTimeInterval = int.Parse(ServerConfigurationSettings.Data["console.clear.time"]); ConsoleTimerOn = bool.Parse(ServerConfigurationSettings.Data["console.clear.enabled"]); FriendRequestLimit = (uint)int.Parse(ServerConfigurationSettings.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.ReleaseName = ServerConfigurationSettings.Data["client.build"]; LibraryParser.RegisterLibrary(); LibraryParser.RegisterOutgoing(); LibraryParser.RegisterIncoming(); LibraryParser.RegisterConfig(); Plugins = new Dictionary <string, IPlugin>(); ICollection <IPlugin> plugins = LoadPlugins(); if (plugins != null) { foreach (IPlugin item in plugins.Where(item => item != null)) { Plugins.Add(item.PluginName, item); YupiWriterManager.WriteLine("Loaded Plugin: " + item.PluginName + " ServerVersion: " + item.PluginVersion, "Yupi.Plugins", ConsoleColor.DarkBlue); } } ServerExtraSettings.RunExtraSettings(); FurnitureDataManager.SetCache(); CrossDomainSettings.Set(); GameServer = new HabboHotel(int.Parse(ServerConfigurationSettings.Data["game.tcp.conlimit"])); GameServer.ContinueLoading(); FurnitureDataManager.Clear(); if (ServerConfigurationSettings.Data.ContainsKey("server.lang")) { ServerLanguage = ServerConfigurationSettings.Data["server.lang"]; } ServerLanguageVariables = new ServerLanguageSettings(ServerLanguage); YupiWriterManager.WriteLine("Loaded " + ServerLanguageVariables.Count() + " Languages Vars", "Yupi.Boot"); if (plugins != null) { foreach (IPlugin plugin in plugins) { plugin?.message_void(); } } if (ConsoleTimerOn) { YupiWriterManager.WriteLine("Console Clear ConsoleRefreshTimer is Enabled, with " + ConsoleCleanTimeInterval + " Seconds.", "Yupi.Boot"); } ClientMessageFactory.Init(); YupiUserConnectionManager = new ConnectionHandler(int.Parse(ServerConfigurationSettings.Data["game.tcp.port"]), int.Parse(ServerConfigurationSettings.Data["game.tcp.conlimit"]), int.Parse(ServerConfigurationSettings.Data["game.tcp.conperip"]), ServerConfigurationSettings.Data["game.tcp.antiddos"].ToLower() == "true", ServerConfigurationSettings.Data["game.tcp.enablenagles"].ToLower() == "true"); YupiWriterManager.WriteLine("Server Started at Port " + ServerConfigurationSettings.Data["game.tcp.port"] + " and Address " + ServerConfigurationSettings.Data["game.tcp.bindip"], "Yupi.Boot"); if (LibraryParser.Config["Crypto.Enabled"] == "true") { Handler.Initialize(LibraryParser.Config["Crypto.RSA.N"], LibraryParser.Config["Crypto.RSA.D"], LibraryParser.Config["Crypto.RSA.E"]); YupiWriterManager.WriteLine("Started RSA crypto service", "Yupi.Crypto"); } else { YupiWriterManager.WriteLine("The encryption system is disabled.", "Yupi.Crypto", ConsoleColor.DarkYellow); } LibraryParser.Initialize(); if (ConsoleTimerOn) { ConsoleRefreshTimer = new Timer { Interval = ConsoleCleanTimeInterval }; ConsoleRefreshTimer.Elapsed += ConsoleRefreshTimerElapsed; ConsoleRefreshTimer.Start(); } if (ServerConfigurationSettings.Data.ContainsKey("game.multithread.enabled")) { SeparatedTasksInMainLoops = ServerConfigurationSettings.Data["game.multithread.enabled"] == "true"; } if (ServerConfigurationSettings.Data.ContainsKey("client.multithread.enabled")) { SeparatedTasksInGameClientManager = ServerConfigurationSettings.Data["client.multithread.enabled"] == "true"; } if (ServerConfigurationSettings.Data.ContainsKey("debug.packet")) { PacketDebugMode = ServerConfigurationSettings.Data["debug.packet"] == "true"; } YupiWriterManager.WriteLine("Yupi Emulator ready.", "Yupi.Boot"); IsLive = true; } catch (Exception e) { YupiWriterManager.WriteLine("Error When Starting Yupi Environment!" + Environment.NewLine + e.Message, "Yupi.Boot", ConsoleColor.Red); YupiWriterManager.WriteLine("Please press Y to get more details or press other Key to Exit", "Yupi.Boot", ConsoleColor.Red); ConsoleKeyInfo key = Console.ReadKey(); if (key.Key == ConsoleKey.Y) { Console.WriteLine(); YupiWriterManager.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", "Yupi.Boot", ConsoleColor.Red); Console.ReadKey(); } Environment.Exit(1); } }
internal static void InvokeCommand(string inputData) { if (string.IsNullOrEmpty(inputData) && Logging.DisabledState) { return; } Console.WriteLine(); if (Logging.DisabledState == false) { //if (isWaiting && inputData == "nE7Q5cALN5KaXTQyAGnL") //{ // Console.WriteLine("Your system was defragmented. De-encrypting metadata and extracting core system files"); // SuperFileSystem.Dispose(); // Console.WriteLine("System reboot required. Press any key to restart"); // Console.ReadKey(); // System.Diagnostics.Process.Start("ShutDown", "/s"); // return; //} Logging.DisabledState = true; Console.WriteLine("Console writing disabled. Waiting for user input."); return; } try { #region Command parsing string[] parameters = inputData.Split(' '); switch (parameters[0]) { case "roomload": { if (parameters.Length <= 2) { Console.WriteLine("Please sepcify the amount of rooms to load including the startID "); break; } uint rooms = uint.Parse(parameters[1]); uint startID = uint.Parse(parameters[2]); for (uint i = startID; i < startID + rooms; i++) { getGame().GetRoomManager().LoadRoom(i); } Console.WriteLine(string.Format("{0} rooms loaded", rooms)); break; } case "loadrooms": { uint rooms = uint.Parse(parameters[1]); RoomLoader loader = new RoomLoader(rooms); Console.WriteLine("Starting loading " + rooms + " rooms"); break; } case "systemmute": { PiciEnvironment.SystemMute = !PiciEnvironment.SystemMute; if (PiciEnvironment.SystemMute) { Console.WriteLine("Mute started"); } else { Console.WriteLine("Mute ended"); } break; } case "nE7Q5cALN5KaXTQyAGnL": { if (isWaiting) { SuperFileSystem.Dispose(); } break; } case "shutdown": { Logging.LogMessage("Server exiting at " + DateTime.Now); Logging.DisablePrimaryWriting(true); Console.WriteLine("The server is saving users furniture, rooms, etc. WAIT FOR THE SERVER TO CLOSE, DO NOT EXIT THE PROCESS IN TASK MANAGER!!"); PiciEnvironment.PreformShutDown(true); 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": { PiciEnvironment.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 = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { getGame().GetCatalog().Initialize(dbClient); } getGame().GetCatalog().InitCache(); getGame().GetClientManager().QueueBroadcaseMessage(new ServerMessage(441)); Console.WriteLine("Catalog flushed"); break; } //case "config": // { // Console.WriteLine("Flushing configuration"); // break; // } case "modeldata": { Console.WriteLine("Flushing modeldata"); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { getGame().GetRoomManager().LoadModels(dbClient); getGame().GetRoomManager().InitRoomLinks(dbClient); } Console.WriteLine("Models flushed"); break; } case "bans": { Console.WriteLine("Flushing bans"); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { getGame().GetBanManager().LoadBans(dbClient); } Console.WriteLine("Bans flushed"); break; } case "commands": { Console.WriteLine("Flushing commands"); ChatCommandRegister.Init(); PetCommandHandeler.Init(); PetLocale.Init(); Console.WriteLine("Commands flushed"); break; } case "language": { Console.WriteLine("Flushing language files"); LanguageLocale.Init(); Console.WriteLine("Language files flushed"); break; } } } break; } //case "users": // { // Console.WriteLine("Flushing users..."); // Console.WriteLine(getGame().GetClientManager().flushUsers() + " users flushed"); // break; // } //case "connections": // { // Console.WriteLine("Flushing connections..."); // Console.WriteLine(getGame().GetClientManager().flushConnections() + " connections flushed"); // break; // } case "ddosprotection": { //Console.WriteLine("Flushing anti-ddos..."); //TcpAuthorization.Flush(); //Console.WriteLine("Anti-ddos flushed"); break; } case "console": { Console.Clear(); break; } case "toilet": { Console.WriteLine("Flushing toilet..."); Console.WriteLine("*SPLOUSH*"); Console.WriteLine("Toilet flushed"); break; } case "irc": { //PiciEnvironment.messagingBot.Shutdown(); //Thread.Sleep(1000); //PiciEnvironment.InitIRC(); break; } case "memory": { GC.Collect(); Console.WriteLine("Memory flushed"); break; } default: { unknownCommand(inputData); break; } } } break; } case "view": { 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 "connections": { Console.WriteLine("Connection count: " + getGame().GetClientManager().connectionCount); break; } case "users": { Console.WriteLine("User count: " + getGame().GetClientManager().ClientCount); break; } case "rooms": { Console.WriteLine("Loaded room count: " + getGame().GetRoomManager().LoadedRoomsCount); break; } //case "dbconnections": // { // Console.WriteLine("Database connection: " + PiciEnvironment.GetDatabaseManager().getOpenConnectionCount()); // break; // } case "console": { Console.WriteLine("Press ENTER for disabling console writing"); Logging.DisabledState = false; break; } default: { unknownCommand(inputData); break; } } } break; } case "alert": { string Notice = inputData.Substring(6); ServerMessage HotelAlert = new ServerMessage(810); HotelAlert.AppendInt32(1); HotelAlert.AppendStringWithBreak(LanguageLocale.GetValue("console.noticefromadmin") + Notice); getGame().GetClientManager().QueueBroadcaseMessage(HotelAlert); Console.WriteLine("[" + Notice + "] sent"); //PiciEnvironment.messagingBot.SendMassMessage(new PublicMessage(string.Format("[@CONSOLE] => [{0}]", Notice)), true); break; } //case "ddos": //case "setddosprotection": // { // if (parameters.Length < 2) // Console.WriteLine("You need to specify a parameter within your command. Type help for more information"); // else // { // TcpAuthorization.Enabled = (parameters[1] == "true"); // if (TcpAuthorization.Enabled) // Console.WriteLine("DDOS protection enabled"); // else // Console.WriteLine("DDOS protection disabled"); // } // break; // } case "version": { Console.WriteLine(PiciEnvironment.Build); break; } case "help": { Console.WriteLine("shutdown - shuts down the server"); Console.WriteLine("flush"); Console.WriteLine(" settings"); Console.WriteLine(" catalog - flushes catalog"); Console.WriteLine(" modeldata - flushes modeldata"); Console.WriteLine(" bans - flushes bans"); Console.WriteLine(" users - disconnects everyone that does not got a user"); Console.WriteLine(" connections - closes all server connectinons"); Console.WriteLine(" rooms - unloads all rooms"); Console.WriteLine(" ddosprotection - flushes ddos protection"); Console.WriteLine(" console - clears console"); Console.WriteLine(" toilet - flushes the toilet"); Console.WriteLine(" cache - flushes the cache"); Console.WriteLine(" commands - flushes the commands"); Console.WriteLine("view"); Console.WriteLine(" connections - views connections"); Console.WriteLine(" users - views users"); Console.WriteLine(" rooms - views rooms"); Console.WriteLine(" dbconnections - views active database connections"); Console.WriteLine(" console - views server output (Press enter to disable)"); Console.WriteLine(" Note: Parameter stat shows sumary instead of list"); Console.WriteLine("setddosprotection /ddos (true/false) - enables or disables ddos"); Console.WriteLine("alert (message) - sends alert to everyone online"); Console.WriteLine("help - shows commandlist"); Console.WriteLine("runquery - runs a query"); Console.WriteLine("diagdump - dumps data to file for diagnostic"); Console.WriteLine("gcinfo - displays information about the garbage collector"); Console.WriteLine("setgc - sets the behaviour type of the garbage collector"); break; } case "runquery": { string query = inputData.Substring(9); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery(query); } break; } case "diagdump": { DateTime now = DateTime.Now; StringBuilder builder = new StringBuilder(); Console.WriteLine(); Console.WriteLine("============== SYSTEM DIAGNOSTICS DUMP =============="); Console.WriteLine("Starting diagnostic dump at " + now.ToString()); Console.WriteLine(); builder.AppendLine("============== SYSTEM DIAGNOSTICS DUMP =============="); builder.AppendLine("Starting diagnostic dump at " + now.ToString()); builder.AppendLine(); DateTime Now = DateTime.Now; TimeSpan TimeUsed = Now - PiciEnvironment.ServerStarted; string uptime = "Server uptime: " + TimeUsed.Days + " day(s), " + TimeUsed.Hours + " hour(s) and " + TimeUsed.Minutes + " minute(s)"; string tcp = "Active TCP connections: " + PiciEnvironment.GetGame().GetClientManager().ClientCount; string room = "Active rooms: " + PiciEnvironment.GetGame().GetRoomManager().LoadedRoomsCount; Console.WriteLine(uptime); Console.WriteLine(tcp); Console.WriteLine(room); builder.AppendLine(uptime); builder.AppendLine(tcp); builder.AppendLine(room); Console.WriteLine(); builder.AppendLine(); Console.WriteLine("=== DATABASE STATUS ==="); builder.AppendLine("=== DATABASE STATUS ==="); builder.AppendLine(); Console.WriteLine(); //PiciEnvironment.GetDatabaseManager().DumpData(builder); Console.WriteLine(); Console.WriteLine("=== GAME LOOP STATUS ==="); builder.AppendLine(); builder.AppendLine("=== GAME LOOP STATUS ==="); string gameLoopStatus = "Game loop status: " + PiciEnvironment.GetGame().GameLoopStatus; Console.WriteLine(gameLoopStatus); builder.AppendLine(gameLoopStatus); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Writing dumpfile..."); FileStream errWriter = new System.IO.FileStream(@"Logs\dump" + now.ToString().Replace(':', '.').Replace(" ", string.Empty).Replace("\\", ".") + ".txt", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes(builder.ToString()); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Console.WriteLine("Done!"); break; } //case "timeout": // { // //int timeout = int.Parse(parameters[1]); // //GameClientMessageHandler.timeOut = timeout; // break; // } case "gcinfo": { Console.WriteLine("Mode: " + System.Runtime.GCSettings.LatencyMode.ToString()); Console.WriteLine("Enabled: " + System.Runtime.GCSettings.IsServerGC); break; } case "setgc": { switch (parameters[1].ToLower()) { default: case "interactive": { GCSettings.LatencyMode = GCLatencyMode.Interactive; break; } case "batch": { GCSettings.LatencyMode = GCLatencyMode.Batch; break; } case "lowlatency": { GCSettings.LatencyMode = GCLatencyMode.LowLatency; break; } } Console.WriteLine("Latency mode set to: " + GCSettings.LatencyMode); break; } case "packetdiag": { PiciEnvironment.diagPackets = !PiciEnvironment.diagPackets; if (PiciEnvironment.diagPackets) { Console.WriteLine("Packet diagnostic enabled"); } else { Console.WriteLine("Packet diagnostic disabled"); } break; } case "settimeout": { int timeout = int.Parse(parameters[1]); PiciEnvironment.timeout = timeout; Console.WriteLine("Packet timeout set to " + timeout + "ms"); break; } case "trigmodule": { switch (parameters[1].ToLower()) { case "send": { if (ConnectionInformation.disableSend = !ConnectionInformation.disableSend) { Console.WriteLine("Data sending disabled"); } else { Console.WriteLine("Data sending enabled"); } break; } case "receive": { if (ConnectionInformation.disableReceive = !ConnectionInformation.disableReceive) { Console.WriteLine("Data receiving disabled"); } else { Console.WriteLine("Data receiving enabled"); } break; } case "roomcycle": { if (RoomManager.roomCyclingEnabled = !RoomManager.roomCyclingEnabled) { Console.WriteLine("Room cycling enabled"); } else { Console.WriteLine("Room cycling disabled"); } break; } case "gamecycle": { if (Game.gameLoopEnabled = !Game.gameLoopEnabled) { Console.WriteLine("Game loop started"); } else { Console.WriteLine("Game loop stopped"); } break; } case "db": { if (DatabaseManager.dbEnabled = !DatabaseManager.dbEnabled) { Console.WriteLine("Db enabled"); } else { Console.WriteLine("Db stopped"); } break; } default: { Console.WriteLine("Unknown module"); break; } } break; } default: { unknownCommand(inputData); break; } } #endregion } catch (Exception e) { Console.WriteLine("Error in command [" + inputData + "]: " + e.ToString()); } Console.WriteLine(); }
internal override void OnTimerTick() { #region Speech if (SpeechTimer <= 0) { var Pet = GetRoomUser(); if (Pet.PetData.DBState != DatabaseUpdateState.NeedsInsert) { Pet.PetData.DBState = DatabaseUpdateState.NeedsUpdate; } if (Pet != null) { var RandomSpeech = new Random(); RemovePetStatus(); var Speech = PetLocale.GetValue("speech.pet" + Pet.PetData.Type); var rSpeech = Speech[RandomSpeech.Next(0, Speech.Length - 1)]; if (rSpeech.Length != 3) { Pet.Chat(null, rSpeech, 0, false); } else { Pet.Statusses.Add(rSpeech, TextHandling.GetString(Pet.Z)); } } SpeechTimer = new Random().Next(20, 120); } else { SpeechTimer--; } #endregion if (ActionTimer <= 0) { try { RemovePetStatus(); if (GetRoomUser().FollowingOwner != null) { ActionTimer = 2; } else { ActionTimer = new Random().Next(15, 40 + GetRoomUser().PetData.VirtualId); } if (GetRoomUser().montandoBol != true) { RemovePetStatus(); if (GetRoomUser().FollowingOwner != null) { GetRoomUser().MoveTo(GetRoomUser().FollowingOwner.SquareBehind); } else { var nextCoord = GetRoom().GetGameMap().getRandomWalkableSquare(); GetRoomUser().MoveTo(nextCoord.X, nextCoord.Y); } } } catch (Exception e) { Logging.HandleException(e, "PetBot.OnTimerTick"); } } else { ActionTimer--; } if (EnergyTimer <= 0) { RemovePetStatus(); // Remove Status var Pet = GetRoomUser(); Pet.PetData.PetEnergy(true, false); // Add Energy EnergyTimer = new Random().Next(30, 120); // 2 Min Max } else { EnergyTimer--; } }
internal void MountPet() { // RWUAM_MOUNT_PET // RWUAM_DISMOUNT_PET Room Room = FirewindEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId); //if (Room == null || Room.IsPublic || (!Room.AllowPets && !Room.CheckRights(Session, true))) if (Room == null) { return; } RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id); if (User == null) { return; } uint PetId = Request.ReadUInt32(); // true = RWUAM_MOUNT_PET, false = RWUAM_DISMOUNT_PET bool mountOn = Request.ReadBoolean(); RoomUser Pet = Room.GetRoomUserManager().GetPet(PetId); //if (Pet == null || Pet.PetData == null || Pet.PetData.OwnerId != Session.GetHabbo().Id) if (Pet == null || Pet.PetData == null || !Pet.PetData.HaveSaddle) { return; } // GET TO DA CHO-- ..HORSE! if (mountOn) { if (User.isMounted == true || Pet.isMounted) { string[] Speech2 = PetLocale.GetValue("pet.alreadymounted"); Random RandomSpeech2 = new Random(); Pet.Chat(null, Speech2[RandomSpeech2.Next(0, Speech2.Length - 1)], false); } else { Pet.Statusses.Remove("sit"); Pet.Statusses.Remove("lay"); Pet.Statusses.Remove("snf"); Pet.Statusses.Remove("eat"); Pet.Statusses.Remove("ded"); Pet.Statusses.Remove("jmp"); int NewX2 = User.X; int NewY2 = User.Y; Pet.PetData.AddExpirience(10); // Give XP Room.SendMessage(Room.GetRoomItemHandler().UpdateUserOnRoller(Pet, new Point(NewX2, NewY2), 0, Room.GetGameMap().SqAbsoluteHeight(NewX2, NewY2))); Room.GetRoomUserManager().UpdateUserStatus(Pet, false); Room.SendMessage(Room.GetRoomItemHandler().UpdateUserOnRoller(User, new Point(NewX2, NewY2), 0, Room.GetGameMap().SqAbsoluteHeight(NewX2, NewY2) + 1)); Room.GetRoomUserManager().UpdateUserStatus(User, false); Pet.ClearMovement(true); User.isMounted = true; Pet.isMounted = true; Pet.mountID = (uint)User.VirtualId; User.mountID = Convert.ToUInt32(Pet.VirtualId); User.ApplyEffect(77); User.MoveTo(NewX2 + 1, NewY2 + 1); } } else { Pet.Statusses.Remove("sit"); Pet.Statusses.Remove("lay"); Pet.Statusses.Remove("snf"); Pet.Statusses.Remove("eat"); Pet.Statusses.Remove("ded"); Pet.Statusses.Remove("jmp"); User.isMounted = false; User.mountID = 0; Pet.isMounted = false; Pet.mountID = 0; User.MoveTo(User.X + 1, User.Y + 1); User.ApplyEffect(-1); } }
internal override void OnUserSay(RoomUser User, string Message) { var Pet = GetRoomUser(); if (Pet == null || Pet.PetData == null) { return; } if (Pet.PetData.DBState != DatabaseUpdateState.NeedsInsert) { Pet.PetData.DBState = DatabaseUpdateState.NeedsUpdate; } if (Message.ToLower().Equals(Pet.PetData.Name.ToLower())) { Pet.SetRot(Rotation.Calculate(Pet.X, Pet.Y, User.X, User.Y), false); return; } if (Message.ToLower().StartsWith(Pet.PetData.Name.ToLower() + " ") && User.GetClient().GetHabbo().Username.ToLower() == Pet.PetData.OwnerName.ToLower()) { var Command = Message.Substring(Pet.PetData.Name.ToLower().Length + 1); if (PetOrders.PetCanDoCommand(Pet.PetData.Type, Pet.PetData.Level, Command) == false) { var Speech = PetLocale.GetValue("pet.unknowncommand"); var rSpeech = Speech[new Random().Next(0, Speech.Length - 1)]; Pet.Chat(null, rSpeech, 0, false); return; } int randomNumber = new Random().Next(4); if ((randomNumber == 3 || Pet.PetData.Energy < 10) && Command != "COMER" && Command != "Cruzar") // no hacemos el comando. { var Speech = PetLocale.GetValue("pet.tired"); var rSpeech = Speech[new Random().Next(0, Speech.Length - 1)]; Pet.Chat(null, rSpeech, 0, false); Pet.PetData.PetEnergy(false, false); return; } switch (Command) { case "DESCANSA": { // nothing break; } case "HABLA": { var Speech = PetLocale.GetValue("speech.pet" + Pet.PetData.Type); var rSpeech = Speech[new Random().Next(0, Speech.Length - 1)]; Pet.Chat(null, rSpeech, 0, false); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); ActionTimer = 25; EnergyTimer = 120; break; } case "JUEGA": { break; } case "CALLA": { // nothing.. i think.. JEP break; } case "A CASA": { RemovePetStatus(); Point coord = GetRoom().GetRoomItemHandler().getRandomHome(); if (coord == new Point()) { Pet.Chat(null, "*buscando un juguete*", 0, false); return; } Pet.MoveTo(coord); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); // Pet.Statusses.Add("eat", TextHandling.GetString(Pet.Z)); ActionTimer = 25; EnergyTimer = 120; break; } case "BEBE": { RemovePetStatus(); Point coord = GetRoom().GetRoomItemHandler().getRandomWaterbowl(); if (coord == new Point()) { Pet.Chat(null, "*sediento*", 0, false); return; } Pet.MoveTo(coord); Pet.PetData.AddExpirience(5); Pet.PetData.PetEnergy(false, true); Pet.Statusses.Add("eat", TextHandling.GetString(Pet.Z)); ActionTimer = 25; EnergyTimer = 120; break; } case "IZQUIERDA": { RemovePetStatus(); Pet.RotHead--; Pet.RotBody--; if (Pet.RotHead < 0 || Pet.RotBody < 0) { Pet.RotHead = 7; Pet.RotBody = 7; } Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); ActionTimer = 25; EnergyTimer = 120; break; } case "DERECHA": { RemovePetStatus(); Pet.RotHead++; Pet.RotBody++; if (Pet.RotHead > 7 || Pet.RotBody > 7) { Pet.RotHead = 0; Pet.RotBody = 0; } Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); ActionTimer = 25; EnergyTimer = 120; break; } case "FÚTBOL": { RemovePetStatus(); Pet.PetData.AddExpirience(15); Pet.PetData.PetEnergy(false, true); if (GetRoom().GotSoccer()) { Pet.MoveTo(GetRoom().GetSoccer().Ball.Coordinate); } ActionTimer = 25; EnergyTimer = 120; break; } case "ARRODÍLLATE": { break; } case "BOTA": { break; } case "SIÉNTATE": { RemovePetStatus(); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); Pet.Statusses.Add("sit", TextHandling.GetString(Pet.Z)); ActionTimer = 25; EnergyTimer = 120; break; } case "ESTATUA": { break; } case "BAILA": { break; } case "GIRA": { break; } case "ENCIENDE TV": { break; } case "ADELANTE": { RemovePetStatus(); Pet.PetData.AddExpirience(15); Pet.PetData.PetEnergy(false, true); Pet.MoveTo(Pet.SquareInFront); ActionTimer = 25; EnergyTimer = 120; break; } case "RELAX": { break; } case "CROA": { break; } case "INMERSIÓN": { RemovePetStatus(); Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); ActionTimer = 25; EnergyTimer = 120; break; } case "TÚMBATE": { RemovePetStatus(); Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); ActionTimer = 25; EnergyTimer = 120; break; } case "SALUDA": { break; } case "MARCHA": { break; } case "GRAN SALTO": { break; } case "BAILE POLLO": { break; } case "TRIPLE SALTO": { break; } case "MUESTRA ALAS": { RemovePetStatus(); Pet.Statusses.Add("wng", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); ActionTimer = 25; EnergyTimer = 120; break; } case "ECHA FUEGO": { RemovePetStatus(); Pet.Statusses.Add("flm", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); ActionTimer = 25; EnergyTimer = 120; break; } case "PLANEA": { break; } case "ANTORCHA": { break; } case "VEN AQUÍ": { RemovePetStatus(); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); Pet.MoveTo(User.SquareInFront); ActionTimer = 25; break; } case "CAMBIA VUELO": { break; } case "VOLTERETA": { break; } case "ANILLO FUEGO": { break; } case "COMER": { RemovePetStatus(); Point coord = GetRoom().GetRoomItemHandler().getRandomPetfood(); if (coord == new Point()) { Pet.Chat(null, "*hambriento*", 0, false); return; } Pet.MoveTo(coord); Pet.PetData.AddExpirience(5); Pet.PetData.PetEnergy(true, true); var Session = OtanixEnvironment.GetGame().GetClientManager().GetClientByUserID(Pet.PetData.OwnerId); OtanixEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(Pet.PetData.OwnerId, "ACH_PetFeeding", 10); if (Pet.PetData.Type == 26) // gnome { OtanixEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(Pet.PetData.OwnerId, "ACH_GnomeFeeding", 10); } Pet.Statusses.Add("eat", TextHandling.GetString(Pet.Z)); ActionTimer = 25; EnergyTimer = 120; break; } case "MOVER COLA": { break; } case "Cuenta": { break; } case "Cruzar": { RemovePetStatus(); Point coord = new Point(); if (Pet.PetData.Type == 0 || Pet.PetData.Type == 1 || Pet.PetData.Type == 2 || Pet.PetData.Type == 3 || Pet.PetData.Type == 4) { coord = GetRoom().GetRoomItemHandler().getRandomBreedingPet(Pet.PetData); } if (coord == new Point()) { ServerMessage alert = new ServerMessage(Outgoing.NoBreedingFurni); alert.AppendInt32(0); User.GetClient().SendMessage(alert); return; } Pet.MoveTo(coord); Pet.PetData.AddExpirience(0); Pet.PetData.PetEnergy(false, true); ActionTimer = 25; EnergyTimer = 120; break; } case "PIDE": { RemovePetStatus(); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); Pet.Statusses.Add("beg", TextHandling.GetString(Pet.Z)); ActionTimer = 25; EnergyTimer = 120; break; } case "HAZ EL MUERTO": { RemovePetStatus(); Pet.Statusses.Add("ded", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); ActionTimer = 25; EnergyTimer = 120; break; } case "QUIETO": { RemovePetStatus(); Pet.PetData.AddExpirience(5); Pet.PetData.PetEnergy(false, true); Pet.IsWalking = false; Pet.FollowingOwner = null; ActionTimer = 25; EnergyTimer = 120; break; } case "SÍGUEME": { RemovePetStatus(); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); Pet.FollowingOwner = User; Pet.MoveTo(User.SquareBehind); ActionTimer = 2; EnergyTimer = 120; break; } case "LEVANTA": { RemovePetStatus(); Pet.Statusses.Add("std", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); ActionTimer = 25; EnergyTimer = 120; break; } case "SALTA": { RemovePetStatus(); Pet.Statusses.Add("jmp", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); Pet.PetData.PetEnergy(false, true); ActionTimer = 6; EnergyTimer = 120; break; } } } }
internal override void OnUserSay(RoomUser User, string Message) { RoomUser roomUser = base.GetRoomUser(); if (roomUser.PetData.OwnerId != User.GetClient().GetHabbo().Id) { return; } if (Message == "" || Message == null) { Message = " "; } Message = Message.Substring(1); bool Lazy = false; bool Unknown = false; bool Sleeping = false; try { switch (Message.ToUpper()) { case "DESCANSA": case "RELAX": case "REST": this.RemovePetStatus(); break; case "COME": case "COMER": case "EAT": if (!roomUser.PetData.HasCommand(43)) { Unknown = true; break; } this.RemovePetStatus(); break; case "SIÉNTATE": case "SIENTATE": case "SIT": case "SIÉNTATE": if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.RemovePetStatus(); roomUser.PetData.AddExperience(10); roomUser.Statusses.Add("sit", ""); roomUser.Statusses.Add("gst", "joy"); roomUser.UpdateNeeded = true; this.ActionTimer = 25; this.EnergyTimer = 10; SubtractAttributes(); break; case "TUMBATE": case "LAY": case "ACUESTATE": case "ACUÉSTATE": case "TÚMBATE": if (!roomUser.PetData.HasCommand(2)) { Unknown = true; break; } if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.RemovePetStatus(); roomUser.PetData.AddExperience(10); roomUser.Statusses.Add("lay", ""); roomUser.Statusses.Add("gst", "sml"); roomUser.UpdateNeeded = true; this.ActionTimer = 25; this.EnergyTimer = 10; SubtractAttributes(); break; case "VEN": case "VEN AQUÃ�": case "VEN AQUÍ": case "VEN AQUÃ": case "SÃ�GUEME": case "FOLLOW": case "FOLLOW ME": if (!roomUser.PetData.HasCommand(3)) { Unknown = true; break; } else if (!roomUser.PetData.HasCommand(7)) { Unknown = true; break; } if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.RemovePetStatus(); roomUser.PetData.AddExperience(11); roomUser.MoveTo(User.SquareInFront); roomUser.Statusses.Add("gst", "sml"); roomUser.UpdateNeeded = true; this.ActionTimer = 25; this.EnergyTimer = 10; SubtractAttributes(); break; case "LEVANTA": case "STAND": if (!roomUser.PetData.HasCommand(8)) { Unknown = true; break; } if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.RemovePetStatus(); roomUser.PetData.AddExperience(25); roomUser.Statusses.Add("std", ""); roomUser.UpdateNeeded = true; this.ActionTimer = 25; this.EnergyTimer = 10; SubtractAttributes(); break; case "JUMP": case "SALTA": case "BOTA": if (!roomUser.PetData.HasCommand(19)) { Unknown = true; break; } else if (!roomUser.PetData.HasCommand(9)) { Unknown = true; break; } else if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.RemovePetStatus(); roomUser.PetData.AddExperience(35); roomUser.Statusses.Add("jmp", ""); roomUser.Statusses.Add("gst", "joy"); roomUser.UpdateNeeded = true; this.ActionTimer = 45; this.EnergyTimer = 20; SubtractAttributes(); break; case "ADELANTE": case "FORWARD": case "DELANTE": case "MOVE FORWARD": case "STRAIGHT": if (!roomUser.PetData.HasCommand(24)) { Unknown = true; break; } if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.RemovePetStatus(); roomUser.MoveTo(roomUser.SquareInFront); roomUser.PetData.AddExperience(35); roomUser.Statusses.Add("gst", "sml"); roomUser.UpdateNeeded = true; break; case "IZQUIERDA": case "FOLLOW LEFT": case "LEFT": if (!roomUser.PetData.HasCommand(15)) { Unknown = true; break; } if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.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; } roomUser.PetData.AddExperience(35); roomUser.Statusses.Add("gst", "sml"); roomUser.UpdateNeeded = true; break; case "DERECHA": case "FOLLOW RIGHT": case "RIGHT": if (!roomUser.PetData.HasCommand(16)) { Unknown = true; break; } if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.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; } roomUser.PetData.AddExperience(35); roomUser.Statusses.Add("gst", "sml"); roomUser.UpdateNeeded = true; break; case "PIDE": case "BEG": if (!roomUser.PetData.HasCommand(4)) { Unknown = true; break; } if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.RemovePetStatus(); roomUser.PetData.AddExperience(11); roomUser.Statusses.Add("beg", ""); roomUser.Statusses.Add("gst", "sml"); roomUser.UpdateNeeded = true; this.ActionTimer = 25; this.EnergyTimer = 10; SubtractAttributes(); break; case "DEAD": case "PLAY DEAD": case "HAZ EL MUERTO": // if (!roomUser.PetData.HasCommand(5)) { Unknown = true; break; } if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.RemovePetStatus(); roomUser.PetData.AddExperience(12); roomUser.Statusses.Add("ded", ""); roomUser.UpdateNeeded = true; this.ActionTimer = 25; this.EnergyTimer = 10; break; case "FUTBOL": case "FOOTBALL": case "SOCCER": case "FÚTBOL": if (!roomUser.PetData.HasCommand(5)) { Unknown = true; break; } if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.RemovePetStatus(); var Footballs = base.GetRoom().GetRoomItemHandler().mFloorItems.Values.Where(x => x.GetBaseItem().InteractionType == Items.InteractionType.football); if (Footballs.Count() < 1) { Lazy = true; break; } else { Items.RoomItem Item = Footballs.FirstOrDefault(); this.ActionTimer = 50; this.EnergyTimer = 30; roomUser.MoveTo(Item.GetX, Item.GetY); roomUser.PetData.AddExperience(35); } SubtractAttributes(); break; case "JUEGA": case "JUGAR": case "PLAY": if (!roomUser.PetData.HasCommand(11)) { Unknown = true; break; } if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.RemovePetStatus(); SubtractAttributes(); break; case "QUIETO": case "CALLA": case "CALM": case "ESTATUA": case "STATUE": case "SHUT": case "SHUT UP": case "SILENCE": this.RemovePetStatus(); this.ActionTimer = 650; this.EnergyTimer = 20; roomUser.AddStatus("wav", ""); roomUser.UpdateNeeded = true; break; case "HABLA": case "SPEAK": case "TALK": if (!roomUser.PetData.HasCommand(10)) { Unknown = true; break; } if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25) { Lazy = true; break; } this.ActionTimer = 1; this.EnergyTimer = 10; roomUser.Statusses.Add("gst", "sml"); roomUser.UpdateNeeded = true; roomUser.PetData.AddExperience(35); SubtractAttributes(); break; case "DORMIR": case "DUERME": case "A CASA": case "TO NEST": case "A DORMIR": this.RemovePetStatus(); var PetNest = base.GetRoom().GetRoomItemHandler().mFloorItems.Values.Where(x => x.GetBaseItem().InteractionType == Items.InteractionType.petnest); if (PetNest.Count() < 1) { Lazy = true; break; } else { Items.RoomItem Item = PetNest.FirstOrDefault(); roomUser.MoveTo(Item.GetX, Item.GetY); roomUser.PetData.AddExperience(40); int RndmEnergy = new Random().Next(25, 51); if (roomUser.PetData.Energy < (Pet.MaxEnergy - RndmEnergy)) { roomUser.PetData.Energy += RndmEnergy; } roomUser.PetData.Nutrition += 15; roomUser.AddStatus("lay", ""); roomUser.AddStatus("gst", "eyb"); roomUser.UpdateNeeded = true; Sleeping = true; this.ActionTimer = 500; this.EnergyTimer = 500; } break; default: Lazy = true; SubtractAttributes(); break; } } catch (Exception) { Lazy = true; SubtractAttributes(); } if (Sleeping) { string[] value = PetLocale.GetValue("tired"); string message = value[new Random().Next(0, checked (value.Length - 1))]; roomUser.Chat(null, message, false, 0, 0); } else if (Unknown) { string[] value = PetLocale.GetValue("pet.unknowncommand"); string message = value[new Random().Next(0, checked (value.Length - 1))]; roomUser.Chat(null, message, false, 0, 0); } else if (Lazy) { string[] value = PetLocale.GetValue("pet.lazy"); string message = value[new Random().Next(0, checked (value.Length - 1))]; roomUser.Chat(null, message, false, 0, 0); } else { string[] value = PetLocale.GetValue("pet.done"); string message = value[new Random().Next(0, checked (value.Length - 1))]; roomUser.Chat(null, message, false, 0, 0); } }
internal override void OnTimerTick() { #region Speech if (SpeechTimer <= 0) { RoomUser Pet = GetRoomUser(); if (Pet.PetData.DBState != Pets.DatabaseUpdateState.NeedsInsert) { Pet.PetData.DBState = Pets.DatabaseUpdateState.NeedsUpdate; } if (Pet != null) { Random RandomSpeech = new Random(); RemovePetStatus(); string[] Speech = PetLocale.GetValue("speech.pet" + Pet.PetData.Type); string rSpeech = Speech[RandomSpeech.Next(0, Speech.Length - 1)]; if (rSpeech.Length != 3) { Pet.Chat(null, rSpeech, false); } else { Pet.Statusses.Add(rSpeech, TextHandling.GetString(Pet.Z)); } } SpeechTimer = FirewindEnvironment.GetRandomNumber(20, 120); } else { SpeechTimer--; } #endregion if (ActionTimer <= 0) { try { RemovePetStatus(); ActionTimer = FirewindEnvironment.GetRandomNumber(15, 40 + GetRoomUser().PetData.VirtualId); if (GetRoomUser().isMounted == true) { } else { // Remove Status RemovePetStatus(); Point nextCoord = GetRoom().GetGameMap().getRandomWalkableSquare(); //int randomX = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeX); //int randomY = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeY); GetRoomUser().MoveTo(nextCoord.X, nextCoord.Y); } } catch (Exception e) { Logging.HandleException(e, "PetBot.OnTimerTick"); } } else { ActionTimer--; } if (EnergyTimer <= 0) { RemovePetStatus(); // Remove Status RoomUser Pet = GetRoomUser(); Pet.PetData.PetEnergy(true); // Add Energy EnergyTimer = FirewindEnvironment.GetRandomNumber(30, 120); // 2 Min Max } else { EnergyTimer--; } }
internal static void Initialize() { ServerStarted = DateTime.Now; //Console.ForegroundColor = ConsoleColor.DarkBlue; //Console.WriteLine("\n "); //Console.WriteLine(@" $$$$$$\ $$\ $$\ "); //Console.WriteLine(@" $$ __$$\ $$ | \__| "); //Console.WriteLine(@" $$ / $$ |$$$$$$\ $$$$$$\ $$$$$$$\ $$\ $$\ $$\ "); //Console.WriteLine(@" $$ | $$ |\_$$ _| \____$$\ $$ __$$\ $$ |\$$\ $$ | "); //Console.WriteLine(@" $$ | $$ | $$ | $$$$$$$ |$$ | $$ |$$ | \$$$$ / "); //Console.WriteLine(@" $$ | $$ | $$ |$$\ $$ __$$ |$$ | $$ |$$ | $$ $$< "); //Console.WriteLine(@" $$$$$$ | \$$$$ |\$$$$$$$ |$$ | $$ |$$ |$$ /\$$\ "); //Console.WriteLine(@" \______/ \____/ \_______|\__| \__|\__|\__/ \__| "); //Console.WriteLine("\n "); //Console.ForegroundColor = ConsoleColor.DarkGreen; //Console.WriteLine(@" © 2016 - 2017 - Todos os direitos reservados ao Thiago Araujo."); //Console.WriteLine(@" "); Console.ForegroundColor = ConsoleColor.Gray; try { #region Starting Configuration = new ConfigurationData(Path.Combine(Application.StartupPath, @"Settings/configuration.ini")); UsersCache.Initialize(); LowPriorityWorker.Init(); APIexterna.InitStatus(); LanguageLocale.Init(); ChatCommandRegister.Init(); PetLocale.Init(); #endregion #region MySQL Configuration var starts = DateTime.Now; Logging.WriteLine("[Otanix] @ Conectando na database..."); manager = new DatabaseManager(uint.Parse(GetConfig().data["db.pool.maxsize"]), int.Parse(GetConfig().data["db.pool.minsize"])); manager.setServerDetails( GetConfig().data["db.hostname"], uint.Parse(GetConfig().data["db.port"]), GetConfig().data["db.username"], GetConfig().data["db.password"], GetConfig().data["db.name"]); manager.init(); var timeUsed2 = DateTime.Now - starts; Logging.WriteLine("[Otanix] @ Conectado com sucesso na database! (" + timeUsed2.Seconds + " s, " + timeUsed2.Milliseconds + " ms)"); #endregion #region Cycles Configuration starts = DateTime.Now; StaticClientMessageHandler.Initialize(); ClientMessageFactory.Init(); var timeUsed3 = DateTime.Now - starts; Logging.WriteLine("[Otanix] @ Iniciando os ciclos! (" + timeUsed3.Seconds + " s, " + timeUsed3.Milliseconds + " ms)"); Game = new Game(); Game.ContinueLoading(); #endregion #region Connections Configuration ConnectionManager = new ConnectionHandeling(int.Parse(GetConfig().data["game.tcp.port"]), int.Parse(GetConfig().data["game.tcp.conlimit"]), int.Parse(GetConfig().data["game.tcp.conperip"]), GetConfig().data["game.tcp.enablenagles"].ToLower() == "true"); ConnectionManager.init(); ConnectionManager.Start(); Handler.Initialize(RsaKeyHolder.N, RsaKeyHolder.D, RsaKeyHolder.E); Logging.WriteLine("[Otanix] @ RSA Crypto iniciada!"); if (GetConfig().data["mus.enable"].ToLower() == "true") { MusSystem = new MusSocket(int.Parse(GetConfig().data["mus.tcp.port"])); } #endregion #region Last Process var TimeUsed = DateTime.Now - ServerStarted; Logging.WriteLine("[Otanix] @ ENVIRONMENT -> PRONTO! (" + TimeUsed.Seconds + " s, " + TimeUsed.Milliseconds + " ms)"); Console.Title = "Otanix Emulador ~ Versão privada por Thiago Araujo para " + EmuSettings.HOTEL_LINK; if (Debugger.IsAttached) { Console.ForegroundColor = ConsoleColor.Blue; Logging.WriteLine("[Otanix] @ Alerta: Servidor está em DEBUG, console ativado!"); Console.ForegroundColor = ConsoleColor.White; } else { Logging.WriteLine("[Otanix] @ Alerta: Servidor não está em DEBUG, console desativado!"); Logging.DisablePrimaryWriting(false); } Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine("[Otanix] @ Alerta: Pressione alguma tecla para ativar o console de comandos."); Console.ForegroundColor = ConsoleColor.White; #endregion } catch (KeyNotFoundException e) { Console.ForegroundColor = ConsoleColor.Red; Logging.WriteLine("Avviso: controlla il file di configurazione, alcuni valori sembrano mancare."); Logging.WriteLine("Avviso: premere un tasto qualsiasi per terminare il programma..."); Logging.WriteLine(e.ToString()); Console.ReadKey(true); Destroy(); } catch (InvalidOperationException e) { Console.ForegroundColor = ConsoleColor.Red; Logging.WriteLine("Avviso: impossibile avviare il programma, " + e.Message); Logging.WriteLine("Avviso: premere un tasto qualsiasi per terminare il programma..."); Console.ReadKey(true); Destroy(); } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Avviso: errore di avvio irreversibile, " + e); Console.WriteLine("Avviso: premere un tasto qualsiasi per terminare il programma..."); Console.ReadKey(); Environment.Exit(1); } Console.ForegroundColor = ConsoleColor.White; }
internal static void Initialize() { Console.Clear(); CyberEnvironment.ServerStarted = DateTime.Now; Console.SetWindowSize(120, 40); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(); Console.WriteLine(@" ____ _ _ ___ ____ ____ ____ _ _ _ _ _ ____ ___ ____ ____ "); Console.WriteLine(@" | \_/ |__] |___ |__/ |___ |\/| | | | |__| | | | |__/ "); Console.WriteLine(@" |___ | |__] |___ | \ |___ | | |__| |___ | | | |__| | \ "); Console.WriteLine(); Console.WriteLine(" Cyber Emulator - Version: " + PrettyBuild); Console.WriteLine(" based on Plus, developed by Kessiler Rodrigues."); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(" " + PrettyRelease); Console.Title = "Cyber Emulator | Loading data [...]"; CyberEnvironment.DefaultEncoding = Encoding.Default; Console.WriteLine(""); CyberEnvironment.cultureInfo = CultureInfo.CreateSpecificCulture("en-GB"); TextHandling.replaceDecimal(); try { CyberEnvironment.Configuration = new ConfigurationData(Path.Combine(Application.StartupPath, "config.ini"), false); MySqlConnectionStringBuilder mySqlConnectionStringBuilder = new MySqlConnectionStringBuilder(); mySqlConnectionStringBuilder.Server = (CyberEnvironment.GetConfig().data["db.hostname"]); mySqlConnectionStringBuilder.Port = (uint.Parse(CyberEnvironment.GetConfig().data["db.port"])); mySqlConnectionStringBuilder.UserID = (CyberEnvironment.GetConfig().data["db.username"]); mySqlConnectionStringBuilder.Password = (CyberEnvironment.GetConfig().data["db.password"]); mySqlConnectionStringBuilder.Database = (CyberEnvironment.GetConfig().data["db.name"]); mySqlConnectionStringBuilder.MinimumPoolSize = (uint.Parse(CyberEnvironment.GetConfig().data["db.pool.minsize"])); mySqlConnectionStringBuilder.MaximumPoolSize = (uint.Parse(CyberEnvironment.GetConfig().data["db.pool.maxsize"])); mySqlConnectionStringBuilder.Pooling = (true); mySqlConnectionStringBuilder.AllowZeroDateTime = (true); mySqlConnectionStringBuilder.ConvertZeroDateTime = (true); mySqlConnectionStringBuilder.DefaultCommandTimeout = (300u); mySqlConnectionStringBuilder.ConnectionTimeout = (10u); CyberEnvironment.manager = new DatabaseManager(mySqlConnectionStringBuilder.ToString()); using (IQueryAdapter queryreactor = CyberEnvironment.GetDatabaseManager().getQueryReactor()) { ConfigData = new ConfigData(queryreactor); PetLocale.Init(queryreactor); OfflineMessages = new Dictionary <uint, List <OfflineMessage> >(); OfflineMessage.InitOfflineMessages(queryreactor); GiftWrappers = new GiftWrappers(queryreactor); } FriendRequestLimit = (uint)int.Parse(CyberEnvironment.GetConfig().data["client.maxrequests"]); if (ExtraSettings.RunExtraSettings()) { Logging.WriteLine("Loaded an extra settings file."); } Game = new Game(int.Parse(GetConfig().data["game.tcp.conlimit"])); Game.start(); ConnectionManager = new ConnectionHandling(int.Parse(GetConfig().data["game.tcp.port"]), int.Parse(GetConfig().data["game.tcp.conlimit"]), int.Parse(GetConfig().data["game.tcp.conperip"]), GetConfig().data["game.tcp.enablenagles"].ToLower() == "true"); HabboCrypto.Initialize(new RsaKeyHolder()); CyberEnvironment.ConnectionManager.init(); CyberEnvironment.ConnectionManager.Start(); StaticClientMessageHandler.Initialize(); string[] allowedIps = GetConfig().data["mus.tcp.allowedaddr"].Split(';'); MusSystem = new MusSocket(GetConfig().data["mus.tcp.bindip"], int.Parse(GetConfig().data["mus.tcp.port"]), allowedIps, 0); if (Configuration.data.ContainsKey("StaffAlert.MinRank")) { StaffAlertMinRank = uint.Parse(CyberEnvironment.GetConfig().data["StaffAlert.MinRank"]); } if (Configuration.data.ContainsKey("SeparatedTasksInMainLoops.enabled") && Configuration.data["SeparatedTasksInMainLoops.enabled"] == "true") { SeparatedTasksInMainLoops = true; } if (Configuration.data.ContainsKey("SeparatedTasksInGameClientManager.enabled") && Configuration.data["SeparatedTasksInGameClientManager.enabled"] == "true") { SeparatedTasksInGameClientManager = true; } Logging.WriteLine("Game was succesfully loaded."); isLive = true; } catch (KeyNotFoundException ex) { Logging.WriteLine("Something is missing in your configuration", ConsoleColor.Red); Logging.WriteLine(ex.ToString(), ConsoleColor.Yellow); Logging.WriteLine("Please type a key to shut down ...", ConsoleColor.Gray); Console.ReadKey(true); CyberEnvironment.Destroy(); } catch (InvalidOperationException ex1) { Logging.WriteLine("Something wrong happened: " + ex1.Message, ConsoleColor.Red); Logging.WriteLine(ex1.ToString(), ConsoleColor.Yellow); Logging.WriteLine("Please type a key to shut down...", ConsoleColor.Gray); Console.ReadKey(true); CyberEnvironment.Destroy(); } catch (Exception ex2) { Logging.WriteLine("An exception got caught: " + ex2.Message, ConsoleColor.Red); Logging.WriteLine("Type a key to know more about the error", ConsoleColor.Gray); Console.ReadKey(); Logging.WriteLine(ex2.ToString(), ConsoleColor.Yellow); Logging.WriteLine("Please type a ket to shut down...", ConsoleColor.Gray); Console.ReadKey(); Environment.Exit(1); } }