private void LoadBots() { List <RoomBot> bots = ButterflyEnvironment.GetGame().GetBotManager().GetBotsForRoom(this.RoomId); foreach (RoomBot bot in bots) { RoomUser NewUser = DeployBot(bot); NewUser.SetPos(bot.X, bot.Y, bot.Z); } }
public ServerPacket TeleportUser(RoomUser pUser, Point pNextCoord, int pRollerID, double NextZ) { ServerPacket serverMessage = new ServerPacket(ServerPacketHeader.SlideObjectBundleMessageComposer); serverMessage.WriteInteger(pUser.X); serverMessage.WriteInteger(pUser.Y); serverMessage.WriteInteger(pNextCoord.X); serverMessage.WriteInteger(pNextCoord.Y); serverMessage.WriteInteger(0); serverMessage.WriteInteger(pRollerID); serverMessage.WriteInteger(2); serverMessage.WriteInteger(pUser.VirtualId); serverMessage.WriteString(TextHandling.GetString(pUser.Z)); serverMessage.WriteString(TextHandling.GetString(NextZ)); pUser.SetPos(pNextCoord.X, pNextCoord.Y, NextZ); return(serverMessage); }
internal RoomUser DeployBot(RoomBot Bot, Pet PetData) { RoomUser BotUser = new RoomUser(0, room.RoomId, primaryPrivateUserID++, room, false); int PersonalID = secondaryPrivateUserID++; BotUser.InternalRoomID = PersonalID; //this.UserList[PersonalID] = BotUser; userlist.Add(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((int)Bot.BotId, BotUser.VirtualId, room.RoomId, BotUser, room); BotUser.PetData = PetData; BotUser.PetData.VirtualId = BotUser.VirtualId; } else { BotUser.BotAI.Init(-1, BotUser.VirtualId, room.RoomId, BotUser, room); } UpdateUserStatus(BotUser, false); BotUser.UpdateNeeded = true; ServerMessage EnterMessage = new ServerMessage(28); EnterMessage.AppendInt32(1); BotUser.Serialize(EnterMessage, room.GetGameMap().gotPublicPool); room.SendMessage(EnterMessage); BotUser.BotAI.OnSelfEnterRoom(); if (BotUser.BotData.AiType == AIType.Guide) { room.guideBotIsCalled = true; } if (BotUser.IsPet) { if (pets.ContainsKey(BotUser.PetData.PetId)) //Pet allready placed { pets[BotUser.PetData.PetId] = BotUser; } else { pets.Add(BotUser.PetData.PetId, BotUser); } petCount++; } return(BotUser); }
private void OnUserAdd(object sender, EventArgs args) { try { KeyValuePair <int, RoomUser> userPair = (KeyValuePair <int, RoomUser>)sender; RoomUser user = userPair.Value; if (user == null || user.GetClient() == null || user.GetClient().GetHabbo() == null) { return; } GameClient session = user.GetClient(); if (session == null || session.GetHabbo() == null) { return; } if (userCount >= room.UsersMax && user.GetClient().GetHabbo().Rank < 4) { ServerMessage msg = new ServerMessage(33); msg.AppendInt32(4008); session.SendMessage(msg); return; } if (session.GetHabbo() != null && session.GetHabbo().userGroup != null) { Group group = session.GetHabbo().userGroup; if (!room.groups.ContainsKey(group.groupID)) { room.groups.Add(group.groupID, group); } } if (!user.IsSpectator) { DynamicRoomModel Model = room.GetGameMap().Model; if (room.IsPublic && session.SetDoorPos) { user.SetPos(session.newDoorPos.X, session.newDoorPos.Y, room.GetGameMap().StaticModel.SqFloorHeight[session.newDoorPos.X, session.newDoorPos.Y]); user.SetRot(Model.DoorOrientation, false); session.SetDoorPos = false; } else { user.SetPos(Model.DoorX, Model.DoorY, Model.DoorZ); user.SetRot(Model.DoorOrientation, false); } if (room.CheckRights(session, true)) { user.AddStatus("flatcrtl", "useradmin"); } else if (room.CheckRights(session)) { user.AddStatus("flatcrtl", ""); } user.CurrentItemEffect = ItemEffectType.None; //UpdateUserEffect(User, User.X, User.Y); if (!user.IsBot && user.GetClient().GetHabbo().IsTeleporting) { RoomItem Item = room.GetRoomItemHandler().GetItem(user.GetClient().GetHabbo().TeleporterId); if (Item != null) { user.SetPos(Item.GetX, Item.GetY, Item.GetZ); user.SetRot(Item.Rot, false); Item.InteractingUser2 = session.GetHabbo().Id; Item.ExtraData = "2"; Item.UpdateState(false, true); } } user.GetClient().GetHabbo().IsTeleporting = false; user.GetClient().GetHabbo().TeleporterId = 0; ServerMessage EnterMessage = new ServerMessage(28); EnterMessage.AppendInt32(1); user.Serialize(EnterMessage, room.GetGameMap().gotPublicPool); room.SendMessage(EnterMessage); if (room.Owner != session.GetHabbo().Username&& !room.IsPublic) { ButterflyEnvironment.GetGame().GetQuestManager().ProgressUserQuest(user.GetClient(), HabboHotel.Quests.QuestType.SOCIAL_VISIT); } } if (session.GetHabbo().GetMessenger() != null) { session.GetHabbo().GetMessenger().OnStatusChanged(true); } if (!user.IsSpectator) { foreach (RoomUser roomUser in UserList.Values) { if (!user.IsBot) { continue; } roomUser.BotAI.OnUserEnterRoom(user); } } user.GetClient().GetMessageHandler().OnRoomUserAdd(); if (OnUserEnter != null) { OnUserEnter(user, null); } if (room.GotMusicController()) { room.GetRoomMusicController().OnNewUserEnter(user); } } catch (Exception e) { Logging.LogCriticalException(e.ToString()); } }