internal static ServerMessage Compose(List<Achievement> Achievements) { ServerMessage Message = new ServerMessage(627); //627 Message.AppendInt32(Achievements.Count); foreach (Achievement Achievement in Achievements) { string DisplayName = Achievement.GroupName; if (DisplayName.StartsWith("ACH_")) { DisplayName = DisplayName.Substring(4); } Message.AppendStringWithBreak(DisplayName); Message.AppendInt32(Achievement.Levels.Count); foreach (AchievementLevel Level in Achievement.Levels.Values) { Message.AppendInt32(Level.Level); Message.AppendInt32(Level.Requirement); } } return Message; }
internal void Serialize(ref ServerMessage packet) { packet.AppendInt32(timeSpoken.Hour); packet.AppendInt32(timeSpoken.Minute); packet.AppendUInt(userID); packet.AppendStringWithBreak(username); packet.AppendStringWithBreak(message); }
internal void Serialize(ServerMessage Message) { Message.AppendInt32(BackgroundImage); Message.AppendInt32(ForegroundImage); Message.AppendInt32(Items.Count); foreach (KeyValuePair<int, int> Item in Items) { Message.AppendInt32(Item.Key); Message.AppendInt32(Item.Value); } }
internal static ServerMessage SerializeUpdate(MessengerBuddy friend) { ServerMessage reply = new ServerMessage(13); reply.AppendInt32(0); reply.AppendInt32(1); reply.AppendInt32(0); friend.Serialize(reply); reply.AppendBoolean(false); return reply; }
internal static ServerMessage Compose(int PlaylistCapacity, List<SongInstance> Playlist) { ServerMessage Message = new ServerMessage(334); Message.AppendInt32(PlaylistCapacity); Message.AppendInt32(Playlist.Count); foreach (SongInstance Song in Playlist) { Message.AppendUInt(Song.DiskItem.itemID); Message.AppendUInt(Song.SongData.Id); } return Message; }
internal void MoveBall(RoomItem item, GameClient mover, int newX, int newY) { if (item == null || mover == null) return; if (!room.GetGameMap().itemCanBePlacedHere(newX, newY)) return; Point oldRoomCoord = item.Coordinate; bool itemIsOnGameItem = GameItemOverlaps(item); Double NewZ = room.GetGameMap().Model.SqFloorHeight[newX, newY]; ServerMessage Message = new ServerMessage(95); Message.AppendUInt(item.Id); Message.AppendInt32(3508); Message.AppendInt32(item.Coordinate.X); Message.AppendInt32(item.Coordinate.Y); Message.AppendInt32(newX); Message.AppendInt32(newY); Message.AppendInt32(4); Message.AppendStringWithBreak(NewZ.ToString()); Message.AppendStringWithBreak("H11"); Message.AppendInt32(-1); Message.AppendInt32(0); room.SendMessage(Message); ServerMessage mMessage = new ServerMessage(); mMessage.Init(230); // Cf mMessage.AppendInt32(item.Coordinate.X); mMessage.AppendInt32(item.Coordinate.Y); mMessage.AppendInt32(newX); mMessage.AppendInt32(newY); mMessage.AppendInt32(1); mMessage.AppendUInt(item.Id); mMessage.AppendStringWithBreak(item.GetZ.ToString().Replace(',', '.')); mMessage.AppendStringWithBreak(NewZ.ToString().Replace(',', '.')); mMessage.AppendInt32(0); room.SendMessage(mMessage); if (oldRoomCoord.X == newX && oldRoomCoord.Y == newY) return; room.GetRoomItemHandler().SetFloorItem(mover, item, newX, newY, item.Rot, false, false, false, false); if (!itemIsOnGameItem) HandleFootballGameItems(new Point(newX, newY), room.GetRoomUserManager().GetRoomUserByHabbo(mover.GetHabbo().Id)); }
public static ServerMessage Compose(List<SongData> Songs) { ServerMessage Message = new ServerMessage(300); Message.AppendInt32(Songs.Count); foreach (SongData Song in Songs) { Message.AppendUInt(Song.Id); Message.AppendStringWithBreak(Song.Name); Message.AppendStringWithBreak(Song.Data); Message.AppendInt32(Song.LengthMiliseconds); Message.AppendStringWithBreak(Song.Artist); } return Message; }
internal static ServerMessage SerializeSearchResults(string Query) { DataTable Results = null; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == Pici.Storage.Database.DatabaseType.MySQL) dbClient.setQuery("SELECT id,title FROM help_topics WHERE title LIKE @query OR body LIKE @query LIMIT 25"); else dbClient.setQuery("SELECT TOP 25 id,title FROM help_topics WHERE title LIKE @query OR body LIKE @query"); dbClient.addParameter("query", Query + "%"); Results = dbClient.getTable(); } // HII[KBCan I pay to be unbanned? ServerMessage Search = new ServerMessage(521); if (Results == null) { Search.AppendBoolean(false); return Search; } Search.AppendInt32(Results.Rows.Count); foreach (DataRow Row in Results.Rows) { Search.AppendUInt(Convert.ToUInt32(Row["id"])); Search.AppendStringWithBreak((string)Row["title"]); } return Search; }
internal void SerializeFloor(ServerMessage Message, Boolean Inventory) { Message.AppendUInt(Id); Message.AppendStringWithBreak(mBaseItem.Type.ToString().ToUpper()); Message.AppendUInt(Id); Message.AppendInt32(GetBaseItem().SpriteId); Message.AppendInt32(1); Message.AppendStringWithBreak(ExtraData); Message.AppendBoolean(GetBaseItem().AllowRecycle); Message.AppendBoolean(GetBaseItem().AllowTrade); Message.AppendBoolean(GetBaseItem().AllowInventoryStack); Message.AppendBoolean(Marketplace.CanSellItem(this)); Message.AppendInt32(-1); Message.AppendStringWithBreak(""); Message.AppendInt32(0); }
internal static ServerMessage Compose(GameClient Session, List<Achievement> Achievements) { ServerMessage Message = new ServerMessage(436); //436 Message.AppendInt32(Achievements.Count); foreach (Achievement Achievement in Achievements) { UserAchievement UserData = Session.GetHabbo().GetAchievementData(Achievement.GroupName); int TargetLevel = (UserData != null ? UserData.Level + 1 : 1); int TotalLevels = Achievement.Levels.Count; if (TargetLevel > TotalLevels) { TargetLevel = TotalLevels; } AchievementLevel TargetLevelData = Achievement.Levels[TargetLevel]; Message.AppendUInt(Achievement.Id); // Unknown (ID?) Message.AppendInt32(TargetLevel); // Target level Message.AppendStringWithBreak(Achievement.GroupName + TargetLevel); // Target name/desc/badge Message.AppendInt32(TargetLevelData.Requirement); // Progress req/target Message.AppendInt32(TargetLevelData.RewardPixels); // Pixel reward Message.AppendInt32(TargetLevelData.RewardPoints); // Unknown(??) Message.AppendInt32(UserData != null ? UserData.Progress : 0); // Current progress Message.AppendBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AppendStringWithBreak(Achievement.Category); // Category Message.AppendInt32(TotalLevels); // Total amount of levels } return Message; }
internal ServerMessage Serialize(GameClient Session) { ServerMessage Message = new ServerMessage(370); Message.AppendStringWithBreak(Session.GetHabbo().Id + ""); Message.AppendStringWithBreak(Session.GetHabbo().Username); Message.AppendStringWithBreak(RoomId + ""); Message.AppendInt32(Category); Message.AppendStringWithBreak(Name); Message.AppendStringWithBreak(Description); Message.AppendStringWithBreak(StartTime); Message.AppendInt32(Tags.Count); foreach (string Tag in Tags.ToArray()) { Message.AppendStringWithBreak(Tag); } return Message; }
internal static ServerMessage Compose(uint SongId, int PlaylistItemNumber, int SyncTimestampMs) { ServerMessage Message = new ServerMessage(327); if (SongId == 0) { Message.AppendInt32(-1); Message.AppendInt32(-1); Message.AppendInt32(-1); Message.AppendInt32(-1); Message.AppendInt32(0); } else { Message.AppendUInt(SongId); Message.AppendInt32(PlaylistItemNumber); Message.AppendUInt(SongId); Message.AppendInt32(0); Message.AppendInt32(SyncTimestampMs); } return Message; }
public bool Handle(RoomUser user, Team team, RoomItem item) { if (user != null && !user.IsBot && user.GetClient() != null) { ServerMessage servermsg = new ServerMessage(); servermsg.Init(25); servermsg.AppendInt32(user.VirtualId); servermsg.AppendStringWithBreak(message); servermsg.AppendBoolean(false); user.GetClient().SendMessage(servermsg); handler.OnEvent(itemID); return true; } return false; }
internal static ServerMessage Compose(Achievement Achievement, int Level, int PointReward, int PixelReward) { ServerMessage Message = new ServerMessage(437); Message.AppendUInt(Achievement.Id); // Achievement ID Message.AppendInt32(Level); // Achieved level Message.AppendInt32(144); // Unknown. Random useless number. Message.AppendStringWithBreak(Achievement.GroupName + Level); // Achieved name Message.AppendInt32(PointReward); // Point reward Message.AppendInt32(PixelReward); // Pixel reward Message.AppendInt32(0); // Unknown. Message.AppendInt32(10); // Unknown. Message.AppendInt32(21); // Unknown. (Extra reward?) Message.AppendStringWithBreak(Level > 1 ? Achievement.GroupName + (Level - 1) : string.Empty); Message.AppendStringWithBreak(Achievement.Category); return Message; }
internal void Serialize(ServerMessage Message) { try { Message.AppendUInt(Id); Message.AppendStringWithBreak(Name); Message.AppendInt32(CreditsCost); if (CrystalCost > 0) { Message.AppendInt32(CrystalCost); Message.AppendInt32(4); // Hearts } else { Message.AppendInt32(PixelsCost); Message.AppendInt32(0); // Page Type; 0 = nothing, 1 = Snowflakes, 2 = hearts, 3 = ? } Message.AppendInt32(1); Message.AppendStringWithBreak(GetBaseItem().Type.ToString()); Message.AppendInt32(GetBaseItem().SpriteId); if (Name.Contains("wallpaper_single") || Name.Contains("floor_single") || Name.Contains("landscape_single")) { string[] Analyze = Name.Split('_'); Message.AppendStringWithBreak(Analyze[2]); } else if (this.songID > 0 && GetBaseItem().InteractionType == InteractionType.musicdisc) { Message.AppendStringWithBreak(songID.ToString()); } else { Message.AppendStringWithBreak(string.Empty); } Message.AppendInt32(Amount); Message.AppendInt32(-1); Message.AppendInt32(0); } catch { Console.WriteLine("Unable to load furniture item " + Id + ": " + Name); } }
internal static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) { ServerMessage Message = new ServerMessage(913); Message.AppendUInt(Achievement.Id); // Unknown (ID?) Message.AppendInt32(TargetLevel); // Target level Message.AppendStringWithBreak(Achievement.GroupName + TargetLevel); // Target name/desc/badge Message.AppendInt32(TargetLevelData.Requirement); // Progress req/target Message.AppendInt32(TargetLevelData.RewardPixels); // Pixel reward Message.AppendInt32(TargetLevelData.RewardPoints); // Unknown(??) Message.AppendInt32(UserData != null ? UserData.Progress : 0); // Current progress Message.AppendBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AppendStringWithBreak(Achievement.Category); // Category Message.AppendInt32(TotalLevels); // Total amount of levels return Message; }
internal void UpdateUserStatus(RoomUser User, bool cyclegameitems) { if (User == null) return; bool isBot = User.IsBot; if (isBot) cyclegameitems = false; if (User.Statusses.ContainsKey("lay") || User.Statusses.ContainsKey("sit")) { User.Statusses.Remove("lay"); User.Statusses.Remove("sit"); User.UpdateNeeded = true; } //List<RoomItem> ItemsOnSquare = GetFurniObjects(User.X, User.Y); CoordItemSearch ItemSearch = new CoordItemSearch(room.GetGameMap().CoordinatedItems); List<RoomItem> ItemsOnSquare = ItemSearch.GetAllRoomItemForSquare(User.X, User.Y); double newZ = room.GetGameMap().SqAbsoluteHeight(User.X, User.Y, ItemsOnSquare); if (newZ != User.Z) { User.Z = newZ; if (User.isFlying) User.Z += 4 + (0.5 * Math.Sin(0.7 * User.flyk)); User.UpdateNeeded = true; } DynamicRoomModel Model = room.GetGameMap().Model; if (Model.SqState[User.X, User.Y] == SquareState.SEAT) { if (!User.Statusses.ContainsKey("sit")) { User.Statusses.Add("sit", "1.0"); } User.Z = Model.SqFloorHeight[User.X, User.Y]; if (User.isFlying) User.Z += 4 + (0.5 * Math.Sin(0.7 * User.flyk)); User.RotHead = Model.SqSeatRot[User.X, User.Y]; User.RotBody = Model.SqSeatRot[User.X, User.Y]; User.UpdateNeeded = true; } foreach (RoomItem Item in ItemsOnSquare) { if (cyclegameitems) { Item.UserWalksOnFurni(User); } if (Item.GetBaseItem().IsSeat) { if (!User.Statusses.ContainsKey("sit")) { User.Statusses.Add("sit", TextHandling.GetString(Item.GetBaseItem().Height)); } User.Z = Item.GetZ; if (User.isFlying) User.Z += 4 + (0.5 * Math.Sin(0.7 * User.flyk)); User.RotHead = Item.Rot; User.RotBody = Item.Rot; User.UpdateNeeded = true; } switch (Item.GetBaseItem().InteractionType) { case InteractionType.bed: { if (!User.Statusses.ContainsKey("lay")) { User.Statusses.Add("lay", TextHandling.GetString(Item.GetBaseItem().Height) + " null"); } User.Z = Item.GetZ; if (User.isFlying) User.Z += 4 + (0.2 * 0.5 * Math.Sin(0.7 * User.flyk)); User.RotHead = Item.Rot; User.RotBody = Item.Rot; User.UpdateNeeded = true; break; } case InteractionType.fbgate: { if (cyclegameitems) { if (User.team != Item.team) User.team = Item.team; else if (User.team == Item.team) User.team = Team.none; if (!string.IsNullOrEmpty(Item.Figure)) { //User = GetUserForSquare(Item.Coordinate.X, Item.Coordinate.Y); if (User != null && !User.IsBot) { if (User.Coordinate == Item.Coordinate) { if (User.GetClient().GetHabbo().Gender != Item.Gender && User.GetClient().GetHabbo().Look != Item.Figure) { User.GetClient().GetHabbo().tempGender = User.GetClient().GetHabbo().Gender; User.GetClient().GetHabbo().tempLook = User.GetClient().GetHabbo().Look; User.GetClient().GetHabbo().Gender = Item.Gender; User.GetClient().GetHabbo().Look = Item.Figure; } else { User.GetClient().GetHabbo().Gender = User.GetClient().GetHabbo().tempGender; User.GetClient().GetHabbo().Look = User.GetClient().GetHabbo().tempLook; } ServerMessage RoomUpdate = new ServerMessage(266); RoomUpdate.AppendInt32(User.VirtualId); RoomUpdate.AppendStringWithBreak(User.GetClient().GetHabbo().Look); RoomUpdate.AppendStringWithBreak(User.GetClient().GetHabbo().Gender.ToLower()); RoomUpdate.AppendStringWithBreak(User.GetClient().GetHabbo().Motto); room.SendMessage(RoomUpdate); } } } } break; } //33: Red //34: Green //35: Blue //36: Yellow case InteractionType.banzaigategreen: case InteractionType.banzaigateblue: case InteractionType.banzaigatered: case InteractionType.banzaigateyellow: { if (cyclegameitems) { int effectID = (int)Item.team + 32; AvatarEffectsInventoryComponent efectmanager = User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent(); if (User.team != Item.team) { User.team = Item.team; if (efectmanager.CurrentEffect != effectID) efectmanager.ApplyCustomEffect(effectID); } else { if (efectmanager.CurrentEffect == effectID) efectmanager.ApplyCustomEffect(0); User.team = Team.none; } } break; } case InteractionType.freezeyellowgate: case InteractionType.freezeredgate: case InteractionType.freezegreengate: case InteractionType.freezebluegate: { if (cyclegameitems) { int effectID = (int)Item.team + 39; AvatarEffectsInventoryComponent efectmanager = User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent(); if (User.team != Item.team) { User.team = Item.team; if (efectmanager.CurrentEffect != effectID) efectmanager.ApplyCustomEffect(effectID); } else { if (efectmanager.CurrentEffect == effectID) efectmanager.ApplyCustomEffect(0); User.team = Team.none; } ServerMessage message = new ServerMessage(700); message.AppendBoolean((User.team != Team.none)); User.GetClient().SendMessage(message); } break; } case InteractionType.banzaitele: { room.GetGameItemHandler().onTeleportRoomUserEnter(User, Item); break; } } } if (cyclegameitems) { if (room.GotSoccer()) room.GetSoccer().OnUserWalk(User); if (room.GotBanzai()) room.GetBanzai().OnUserWalk(User); //if (room.GotFreeze()) room.GetFreeze().OnUserWalk(User); } }
internal ServerMessage SerializeStatusUpdates(Boolean All) { List<RoomUser> Users = new List<RoomUser>(); foreach (RoomUser User in UserList.Values) { if (!All) { if (!User.UpdateNeeded) continue; User.UpdateNeeded = false; } Users.Add(User); } if (Users.Count == 0) return null; ServerMessage Message = new ServerMessage(34); Message.AppendInt32(Users.Count); foreach (RoomUser User in Users) User.SerializeStatus(Message); return Message; }
internal void RemoveBot(int VirtualId, bool Kicked) { RoomUser User = GetRoomUserByVirtualId(VirtualId); if (User == null || !User.IsBot) { return; } if (User.IsPet) { pets.Remove(User.PetData.PetId); petCount--; } User.BotAI.OnSelfLeaveRoom(Kicked); ServerMessage LeaveMessage = new ServerMessage(29); LeaveMessage.AppendInt32(User.VirtualId); room.SendMessage(LeaveMessage); userlist.Remove(User.InternalRoomID); //freeIDs[User.InternalRoomID] = null; }
internal ServerMessage SerializeFriends() { ServerMessage reply = new ServerMessage(12); reply.AppendInt32(600); reply.AppendInt32(200); reply.AppendInt32(600); reply.AppendInt32(900); reply.AppendBoolean(false); reply.AppendInt32(friends.Count); foreach (MessengerBuddy friend in friends.Values) { friend.Serialize(reply); } return reply; }
private void RemoveRoomUser(RoomUser user) { UserList.Remove(user.InternalRoomID); user.InternalRoomID = -1; room.GetGameMap().GameMap[user.X, user.Y] = user.SqState; room.GetGameMap().RemoveUserFromMap(user, new Point(user.X, user.Y)); ServerMessage LeaveMessage = new ServerMessage(29); LeaveMessage.AppendInt32(user.VirtualId); room.SendMessage(LeaveMessage); }
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) { PiciEnvironment.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()); } }
internal void UpdateBadges() { Session.GetHabbo().GetBadgeComponent().ResetSlots(); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("UPDATE user_badges SET badge_slot = 0 WHERE user_id = " + Session.GetHabbo().Id); } if (Request.RemainingLength > 0) { while (Request.RemainingLength > 0) { int Slot = Request.PopWiredInt32(); string Badge = Request.PopFixedString(); if (Badge.Length == 0) { continue; } if (!Session.GetHabbo().GetBadgeComponent().HasBadge(Badge) || Slot < 1 || Slot > 5) { return; } Session.GetHabbo().GetBadgeComponent().GetBadge(Badge).Slot = Slot; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("UPDATE user_badges SET badge_slot = " + Slot + " WHERE badge_id = @badge AND user_id = " + Session.GetHabbo().Id + ""); dbClient.addParameter("badge", Badge); dbClient.runQuery(); } } PiciEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.PROFILE_BADGE); } ServerMessage Message = new ServerMessage(228); Message.AppendUInt(Session.GetHabbo().Id); Message.AppendInt32(Session.GetHabbo().GetBadgeComponent().EquippedCount); foreach (Badge Badge in Session.GetHabbo().GetBadgeComponent().BadgeList.Values) { if (Badge.Slot <= 0) { continue; } Message.AppendInt32(Badge.Slot); Message.AppendString(Badge.Code); } if (Session.GetHabbo().InRoom&& PiciEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId) != null) { PiciEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId).SendMessage(Message); } else { Session.SendMessage(Message); } }
internal ServerMessage SerializeRequests() { ServerMessage reply = new ServerMessage(314); reply.AppendInt32(requests.Count); reply.AppendInt32(requests.Count); foreach (MessengerRequest request in requests.Values) { request.Serialize(reply); } return reply; }
private ServerMessage UpdateItemOnRoller(RoomItem pItem, Point NextCoord, uint pRolledID, Double NextZ) { ServerMessage mMessage = new ServerMessage(); mMessage.Init(230); // Cf mMessage.AppendInt32(pItem.GetX); mMessage.AppendInt32(pItem.GetY); mMessage.AppendInt32(NextCoord.X); mMessage.AppendInt32(NextCoord.Y); mMessage.AppendInt32(1); mMessage.AppendUInt(pItem.Id); mMessage.AppendStringWithBreak(TextHandling.GetString(pItem.GetZ)); mMessage.AppendStringWithBreak(TextHandling.GetString(NextZ)); mMessage.AppendUInt(pRolledID); //room.SendMessage(mMessage); //SetFloorItem(null, pItem, NextCoord.X, NextCoord.Y, pItem.Rot, false, true); SetFloorItem(pItem, NextCoord.X, NextCoord.Y, NextZ); return mMessage; }
internal override void OnUserSay(Rooms.RoomUser User, string Message) { if (Gamemap.TileDistance(GetRoomUser().X, GetRoomUser().Y, User.X, User.Y) > 8) { return; } BotResponse Response = GetBotData().GetResponse(Message); if (Response == null) { return; } switch (Response.ResponseType.ToLower()) { case "say": GetRoomUser().Chat(null, Response.ResponseText, false); break; case "shout": GetRoomUser().Chat(null, Response.ResponseText, true); break; case "whisper": ServerMessage TellMsg = new ServerMessage(25); TellMsg.AppendInt32(GetRoomUser().VirtualId); TellMsg.AppendStringWithBreak(Response.ResponseText); TellMsg.AppendBoolean(false); User.GetClient().SendMessage(TellMsg); break; } if (Response.ServeId >= 1) { User.CarryItem(Response.ServeId); } }
internal ServerMessage PerformSearch(string query) { List<SearchResult> results = SearchResultFactory.GetSearchResult(query); List<SearchResult> existingFriends = new List<SearchResult>(); List<SearchResult> othersUsers = new List<SearchResult>(); foreach (SearchResult result in results) { if (FriendshipExists(result.userID)) existingFriends.Add(result); else othersUsers.Add(result); } ServerMessage reply = new ServerMessage(435); reply.AppendInt32(existingFriends.Count); foreach (SearchResult result in existingFriends) { result.Searialize(reply); } reply.AppendInt32(othersUsers.Count); foreach (SearchResult result in othersUsers) { result.Searialize(reply); } return reply; }
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; }
internal ServerMessage UpdateUserOnRoller(RoomUser pUser, Point pNextCoord, uint pRollerID, Double NextZ) { ServerMessage mMessage = new ServerMessage(); mMessage.Init(230); // Cf mMessage.AppendInt32(pUser.X); mMessage.AppendInt32(pUser.Y); mMessage.AppendInt32(pNextCoord.X); mMessage.AppendInt32(pNextCoord.Y); mMessage.AppendInt32(0); mMessage.AppendUInt(pRollerID); mMessage.AppendString("J"); mMessage.AppendInt32(pUser.VirtualId); mMessage.AppendStringWithBreak(TextHandling.GetString(pUser.Z)); mMessage.AppendStringWithBreak(TextHandling.GetString(NextZ)); room.GetGameMap().UpdateUserMovement(new Point(pUser.X, pUser.Y), new Point(pNextCoord.X, pNextCoord.Y), pUser); room.GetGameMap().GameMap[pUser.X, pUser.Y] = 1; pUser.X = pNextCoord.X; pUser.Y = pNextCoord.Y; pUser.Z = NextZ; room.GetGameMap().GameMap[pUser.X, pUser.Y] = 0; return mMessage; }
internal void OnCycle(ref int idleCount) { ToRemove.Clear(); int userCounter = 0; foreach (RoomUser User in UserList.Values) { if (!isValid(User)) { if (User.GetClient() != null) RemoveUserFromRoom(User.GetClient(), false, false); else RemoveRoomUser(User); } bool updated = false; User.IdleTime++; if (!User.IsAsleep && User.IdleTime >= 600) { User.IsAsleep = true; ServerMessage FallAsleep = new ServerMessage(486); FallAsleep.AppendInt32(User.VirtualId); FallAsleep.AppendBoolean(true); room.SendMessage(FallAsleep); } if (User.NeedsAutokick && !ToRemove.Contains(User)) { ToRemove.Add(User); continue; } if (User.CarryItemID > 0) { User.CarryTimer--; if (User.CarryTimer <= 0) User.CarryItem(0); } if (room.GotFreeze()) { room.GetFreeze().CycleUser(User); } if (User.isFlying) User.OnFly(); if (User.SetStep) { if (room.GetGameMap().CanWalk(User.SetX, User.SetY, User.AllowOverride)) { room.GetGameMap().UpdateUserMovement(new Point(User.Coordinate.X, User.Coordinate.Y), new Point(User.SetX, User.SetY), User); List<RoomItem> items = room.GetGameMap().GetCoordinatedItems(new Point(User.X, User.Y)); User.X = User.SetX; User.Y = User.SetY; User.Z = User.SetZ; if (User.isFlying) User.Z += 4 + 0.5 * Math.Sin(0.7 * User.flyk); foreach (RoomItem item in items) { item.UserWalksOffFurni(User); } if (User.X == room.GetGameMap().Model.DoorX && User.Y == room.GetGameMap().Model.DoorY && !ToRemove.Contains(User) && !User.IsBot) { ToRemove.Add(User); continue; } if (room.IsPublic) { room.GetGameMap().HandleRoomLinks(User); } UpdateUserStatus(User, true); } User.SetStep = false; } if (User.IsWalking && !User.Freezed) { Gamemap map = room.GetGameMap(); SquarePoint Point = DreamPathfinder.GetNextStep(User.X, User.Y, User.GoalX, User.GoalY, map.GameMap, map.ItemHeightMap, map.Model.MapSizeX, map.Model.MapSizeY, User.AllowOverride, map.DiagonalEnabled); if (Point.X == User.X && Point.Y == User.Y) //No path found, or reached goal (: { User.IsWalking = false; User.RemoveStatus("mv"); UpdateUserStatus(User, false); } else { int nextX = Point.X; int nextY = Point.Y; User.RemoveStatus("mv"); double nextZ = room.GetGameMap().SqAbsoluteHeight(nextX, nextY); User.Statusses.Remove("lay"); User.Statusses.Remove("sit"); if (!User.isFlying) User.AddStatus("mv", nextX + "," + nextY + "," + TextHandling.GetString(nextZ)); else User.AddStatus("mv", nextX + "," + nextY + "," + TextHandling.GetString(nextZ + 4 + (0.5 * Math.Sin(0.7 * User.flyk)))); int newRot = Rotation.Calculate(User.X, User.Y, nextX, nextY, User.moonwalkEnabled); User.RotBody = newRot; User.RotHead = newRot; User.SetStep = true; User.SetX = nextX; User.SetY = nextY; User.SetZ = nextZ; UpdateUserEffect(User, User.SetX, User.SetY); updated = true; room.GetGameMap().GameMap[User.X, User.Y] = User.SqState; // REstore the old one User.SqState = room.GetGameMap().GameMap[User.SetX, User.SetY];//Backup the new one if (!room.AllowWalkthrough) room.GetGameMap().GameMap[nextX, nextY] = 0; } User.UpdateNeeded = true; } else { if (User.Statusses.ContainsKey("mv")) { User.RemoveStatus("mv"); User.UpdateNeeded = true; } } if (User.IsBot) User.BotAI.OnTimerTick(); else { userCounter++; } if (!updated) UpdateUserEffect(User, User.X, User.Y); } if (userCounter == 0) idleCount++; foreach (RoomUser toRemove in ToRemove) { GameClient client = PiciEnvironment.GetGame().GetClientManager().GetClientByUserID(toRemove.HabboId); if (client != null) { RemoveUserFromRoom(client, true, false); client.CurrentRoomUserID = -1; } else RemoveRoomUser(toRemove); } if (userCount != userCounter) { UpdateUserCount(userCounter); } }
internal void DeliverInstantMessageError(int ErrorId, UInt32 ConversationId) { /* 3 = Your friend is muted and cannot reply. 4 = Your message was not sent because you are muted. 5 = Your friend is not online. 6 = Receiver is not your friend anymore. 7 = Your friend is busy. 8 = Your friend is wanking*/ ServerMessage reply = new ServerMessage(261); reply.AppendInt32(ErrorId); reply.AppendUInt(ConversationId); GetClient().SendMessage(reply); }
internal void ChangeLook() { if (Session.GetHabbo().MutantPenalty) { Session.SendNotif("Because of a penalty or restriction on your account, you are not allowed to change your look."); return; } string Gender = Request.PopFixedString().ToUpper(); string Look = PiciEnvironment.FilterInjectionChars(Request.PopFixedString()); if (!AntiMutant.ValidateLook(Look, Gender)) { return; } PiciEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.PROFILE_CHANGE_LOOK); Session.GetHabbo().Look = PiciEnvironment.FilterFigure(Look); Session.GetHabbo().Gender = Gender.ToLower(); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("UPDATE users SET look = @look, gender = @gender WHERE id = " + Session.GetHabbo().Id); dbClient.addParameter("look", Look); dbClient.addParameter("gender", Gender); dbClient.runQuery(); } PiciEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(Session, "ACH_AvatarLooks", 1); Session.GetMessageHandler().GetResponse().Init(266); Session.GetMessageHandler().GetResponse().AppendInt32(-1); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Session.GetHabbo().Look); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Session.GetHabbo().Gender.ToLower()); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Session.GetHabbo().Motto); Session.GetMessageHandler().SendResponse(); if (Session.GetHabbo().InRoom) { Room Room = Session.GetHabbo().CurrentRoom; if (Room == null) { return; } RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id); if (User == null) { return; } ServerMessage RoomUpdate = new ServerMessage(266); RoomUpdate.AppendInt32(User.VirtualId); RoomUpdate.AppendStringWithBreak(Session.GetHabbo().Look); RoomUpdate.AppendStringWithBreak(Session.GetHabbo().Gender.ToLower()); RoomUpdate.AppendStringWithBreak(Session.GetHabbo().Motto); Room.SendMessage(RoomUpdate); } }