public RoomUser DeployBot(RoomBot Bot, Pet PetData) { var BotUser = new RoomUser(0, _room.RoomId, primaryPrivateUserID++, _room); Bot.VirtualId = primaryPrivateUserID; int PersonalID = secondaryPrivateUserID++; BotUser.InternalRoomID = PersonalID; _users.TryAdd(PersonalID, BotUser); DynamicRoomModel Model = _room.GetGameMap().Model; if ((Bot.X > 0 && Bot.Y > 0) && Bot.X < Model.MapSizeX && Bot.Y < Model.MapSizeY) { BotUser.SetPos(Bot.X, Bot.Y, Bot.Z); BotUser.SetRot(Bot.Rot, false); } else { Bot.X = Model.DoorX; Bot.Y = Model.DoorY; BotUser.SetPos(Model.DoorX, Model.DoorY, Model.DoorZ); BotUser.SetRot(Model.DoorOrientation, false); } BotUser.BotData = Bot; BotUser.BotAI = Bot.GenerateBotAI(BotUser.VirtualId); if (BotUser.IsPet) { BotUser.BotAI.Init(Bot.BotId, BotUser.VirtualId, _room.RoomId, BotUser, _room); BotUser.PetData = PetData; BotUser.PetData.VirtualId = BotUser.VirtualId; } else BotUser.BotAI.Init(Bot.BotId, BotUser.VirtualId, _room.RoomId, BotUser, _room); //UpdateUserStatus(BotUser, false); BotUser.UpdateNeeded = true; _room.SendMessage(new UsersComposer(BotUser)); if (BotUser.IsPet) { if (_pets.ContainsKey(BotUser.PetData.PetId)) //Pet allready placed _pets[BotUser.PetData.PetId] = BotUser; else _pets.TryAdd(BotUser.PetData.PetId, BotUser); petCount++; } else if (BotUser.IsBot) { if (_bots.ContainsKey(BotUser.BotData.BotId)) _bots[BotUser.BotData.BotId] = BotUser; else _bots.TryAdd(BotUser.BotData.Id, BotUser); _room.SendMessage(new DanceComposer(BotUser, BotUser.BotData.DanceId)); } return BotUser; }
public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet) { if (!Session.GetHabbo().InRoom) return; Room Room = null; if (!PlusEnvironment.GetGame().GetRoomManager().TryGetRoom(Session.GetHabbo().CurrentRoomId, out Room)) return; if ((Room.AllowPets == 0 && !Room.CheckRights(Session, true)) || !Room.CheckRights(Session, true)) { Session.SendMessage(new RoomErrorNotifComposer(1)); return; } if (Room.GetRoomUserManager().PetCount > PlusStaticGameSettings.RoomPetPlacementLimit) { Session.SendMessage(new RoomErrorNotifComposer(2));//5 = I have too many. return; } Pet Pet = null; if (!Session.GetHabbo().GetInventoryComponent().TryGetPet(Packet.PopInt(), out Pet)) return; if (Pet == null) return; if (Pet.PlacedInRoom) { Session.SendNotification("This pet is already in the room?"); return; } int X = Packet.PopInt(); int Y = Packet.PopInt(); if (!Room.GetGameMap().CanWalk(X, Y, false)) { Session.SendMessage(new RoomErrorNotifComposer(4)); return; } RoomUser OldPet = null; if (Room.GetRoomUserManager().TryGetPet(Pet.PetId, out OldPet)) { Room.GetRoomUserManager().RemoveBot(OldPet.VirtualId, false); } Pet.X = X; Pet.Y = Y; Pet.PlacedInRoom = true; Pet.RoomId = Room.RoomId; List<RandomSpeech> RndSpeechList = new List<RandomSpeech>(); RoomBot RoomBot = new RoomBot(Pet.PetId, Pet.RoomId, "pet", "freeroam", Pet.Name, "", Pet.Look, X, Y, 0, 0, 0, 0, 0, 0, ref RndSpeechList, "", 0, Pet.OwnerId, false, 0, false, 0); if (RoomBot == null) return; Room.GetRoomUserManager().DeployBot(RoomBot, Pet); Pet.DBState = DatabaseUpdateState.NeedsUpdate; Room.GetRoomUserManager().UpdatePets(); Pet ToRemove = null; if (!Session.GetHabbo().GetInventoryComponent().TryRemovePet(Pet.PetId, out ToRemove)) { log.Error("Error whilst removing pet: " + ToRemove.PetId); return; } Session.SendMessage(new PetInventoryComposer(Session.GetHabbo().GetInventoryComponent().GetPets())); }