/// <summary> /// Initializes a new instance of the <see cref="GenericBot"/> class. /// </summary> /// <param name="roomBot">The room bot.</param> /// <param name="virtualId">The virtual identifier.</param> /// <param name="botId">The bot identifier.</param> /// <param name="type">The type.</param> /// <param name="isBartender">if set to <c>true</c> [is bartender].</param> /// <param name="speechInterval">The speech interval.</param> internal GenericBot(RoomBot roomBot, int virtualId, int botId, AIType type, bool isBartender, int speechInterval) { _id = botId; _virtualId = virtualId; _isBartender = isBartender; _speechInterval = speechInterval < 2 ? 2000 : speechInterval * 1000; // Get random speach if (roomBot != null && roomBot.AutomaticChat && roomBot.RandomSpeech != null && roomBot.RandomSpeech.Any()) _chatTimer = new Timer(ChatTimerTick, null, _speechInterval, _speechInterval); _actionCount = Random.Next(10, 30 + virtualId); }
/// <summary> /// Generates the bot from row. /// </summary> /// <param name="row">The row.</param> /// <returns>RoomBot.</returns> internal static RoomBot GenerateBotFromRow(DataRow row) { if (row == null) return null; var id = Convert.ToUInt32(row["id"]); List<string> speeches = null; if (!row.IsNull("speech") && !string.IsNullOrEmpty(row["speech"].ToString())) speeches = row["speech"].ToString().Split(';').ToList(); RoomBot bot = new RoomBot(id, Convert.ToUInt32(row["user_id"]), AIType.Generic, row["is_bartender"].ToString() == "1"); bot.Update(Convert.ToUInt32(row["room_id"]), (string)row["walk_mode"], (string)row["name"], (string)row["motto"], (string)row["look"], int.Parse(row["x"].ToString()), int.Parse(row["y"].ToString()), int.Parse(row["z"].ToString()), 4, 0, 0, 0, 0, speeches, null, (string)row["gender"], (int)row["dance"], (int)row["speaking_interval"], Convert.ToInt32(row["automatic_chat"]) == 1, Convert.ToInt32(row["mix_phrases"]) == 1); return bot; }
/// <summary> /// Adds the bot. /// </summary> /// <param name="bot">The bot.</param> internal void AddBot(RoomBot bot) { _isUpdated = false; if (bot == null || _inventoryBots.Contains(bot.BotId)) return; bot.RoomId = 0u; _inventoryBots.Add(bot.BotId, bot); }
/// <summary> /// Deploys the bot. /// </summary> /// <param name="bot">The bot.</param> /// <param name="petData">The pet data.</param> /// <returns>RoomUser.</returns> internal RoomUser DeployBot(RoomBot bot, Pet petData) { var virtualId = _primaryPrivateUserId++; var roomUser = new RoomUser(0u, UserRoom.RoomId, virtualId, UserRoom, false); var num = _secondaryPrivateUserId++; roomUser.InternalRoomId = num; UserList.TryAdd(num, roomUser); OnUserAdd(roomUser); var model = UserRoom.GetGameMap().Model; var coord = new Point(bot.X, bot.Y); if ((bot.X > 0) && (bot.Y >= 0) && (bot.X < model.MapSizeX) && (bot.Y < model.MapSizeY)) { UserRoom.GetGameMap().AddUserToMap(roomUser, coord); roomUser.SetPos(bot.X, bot.Y, bot.Z); roomUser.SetRot(bot.Rot, false); } else { bot.X = model.DoorX; bot.Y = model.DoorY; roomUser.SetPos(model.DoorX, model.DoorY, model.DoorZ); roomUser.SetRot(model.DoorOrientation, false); } bot.RoomUser = roomUser; roomUser.BotData = bot; roomUser.BotAI = bot.GenerateBotAI(roomUser.VirtualId, (int)bot.BotId); if (roomUser.IsPet) { roomUser.BotAI.Init(bot.BotId, roomUser.VirtualId, UserRoom.RoomId, roomUser, UserRoom); roomUser.PetData = petData; roomUser.PetData.VirtualId = roomUser.VirtualId; } else { roomUser.BotAI.Init(bot.BotId, roomUser.VirtualId, UserRoom.RoomId, roomUser, UserRoom); } UpdateUserStatus(roomUser, false); roomUser.UpdateNeeded = true; var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("SetRoomUserMessageComposer")); serverMessage.AppendInteger(1); roomUser.Serialize(serverMessage, UserRoom.GetGameMap().GotPublicPool); UserRoom.SendMessage(serverMessage); roomUser.BotAI.OnSelfEnterRoom(); if (roomUser.IsPet) { if (_pets.Contains(roomUser.PetData.PetId)) _pets[roomUser.PetData.PetId] = roomUser; else _pets.Add(roomUser.PetData.PetId, roomUser); PetCount++; } roomUser.BotAI.Modified(); if (roomUser.BotData.AiType != AIType.Generic) return roomUser; if (_bots.Contains(roomUser.BotData.BotId)) _bots[roomUser.BotData.BotId] = roomUser; else _bots.Add(roomUser.BotData.BotId, roomUser); serverMessage.Init(LibraryParser.OutgoingRequest("DanceStatusMessageComposer")); serverMessage.AppendInteger(roomUser.VirtualId); serverMessage.AppendInteger(roomUser.BotData.DanceId); UserRoom.SendMessage(serverMessage); PetCount++; return roomUser; }
internal void PlantMonsterplant(RoomItem mopla, Room room) { int rarity = 0, internalRarity = 0; if (room == null || mopla == null) return; if ((mopla.GetBaseItem().InteractionType != Interaction.Moplaseed) && (mopla.GetBaseItem().InteractionType != Interaction.RareMoplaSeed)) return; if (string.IsNullOrEmpty(mopla.ExtraData) || mopla.ExtraData == "0") rarity = 1; if (!string.IsNullOrEmpty(mopla.ExtraData) && mopla.ExtraData != "0") rarity = int.TryParse(mopla.ExtraData, out internalRarity) ? internalRarity : 1; var getX = mopla.X; var getY = mopla.Y; room.GetRoomItemHandler().RemoveFurniture(Session, mopla.Id, false); var pet = CatalogManager.CreatePet(Session.GetHabbo().Id, "Monsterplant", 16, "0", "0", rarity); Response.Init(LibraryParser.OutgoingRequest("SendMonsterplantIdMessageComposer")); Response.AppendInteger(pet.PetId); SendResponse(); using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor()) queryReactor.RunFastQuery(string.Concat("UPDATE bots SET room_id = '", room.RoomId, "', x = '", getX, "', y = '", getY, "' WHERE id = '", pet.PetId, "'")); pet.PlacedInRoom = true; pet.RoomId = room.RoomId; var bot = new RoomBot(pet.PetId, pet.OwnerId, pet.RoomId, AiType.Pet, "freeroam", pet.Name, "", pet.Look, getX, getY, 0.0, 4, 0, 0, 0, 0, null, null, "", 0, false); room.GetRoomUserManager().DeployBot(bot, pet); if (pet.DbState != DatabaseUpdateState.NeedsInsert) pet.DbState = DatabaseUpdateState.NeedsUpdate; using (var queryreactor2 = Azure.GetDatabaseManager().GetQueryReactor()) { queryreactor2.RunFastQuery(string.Format("DELETE FROM items_rooms WHERE id = {0}", mopla.Id)); room.GetRoomUserManager().SavePets(queryreactor2); } }
/// <summary> /// Deploys the bot. /// </summary> /// <param name="bot">The bot.</param> /// <returns>RoomUser.</returns> internal RoomUser DeployBot(RoomBot bot) { return _roomUserManager.DeployBot(bot, null); }
/// <summary> /// Initializes the pets. /// </summary> internal void InitPets() { using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor()) { queryReactor.SetQuery($"SELECT * FROM bots WHERE room_id = '{RoomId}' AND ai_type='pet'"); var table = queryReactor.GetTable(); if (table == null) return; foreach (DataRow dataRow in table.Rows) { queryReactor.SetQuery($"SELECT * FROM pets_data WHERE id = '{dataRow["id"]}' LIMIT 1"); var row = queryReactor.GetRow(); if (row == null) continue; var pet = CatalogManager.GeneratePetFromRow(dataRow, row); var bot = new RoomBot(pet.PetId, Convert.ToUInt32(RoomData.OwnerId), AiType.Pet, false); bot.Update(RoomId, "freeroam", pet.Name, "", pet.Look, pet.X, pet.Y, ((int) pet.Z), 4, 0, 0, 0, 0, null, null, "", 0, 0, false, false); _roomUserManager.DeployBot(bot, pet); } } }