internal void GenerateMessage(ServerMessage message) { message.Init(LibraryParser.OutgoingRequest("TargetedOfferMessageComposer")); message.AppendInteger(1);//show message.AppendInteger(Id); message.AppendString(Identifier); message.AppendString(Identifier); message.AppendInteger(CostCredits); if (CostDiamonds > 0) { message.AppendInteger(CostDiamonds); message.AppendInteger(105); } else { message.AppendInteger(CostDuckets); message.AppendInteger(0); } message.AppendInteger(PurchaseLimit); var TimeLeft = ExpirationTime - AzureEmulator.GetUnixTimeStamp(); message.AppendInteger(TimeLeft); message.AppendString(Title); message.AppendString(Description); message.AppendString(Image); message.AppendString(""); message.StartArray(); foreach (string Product in Products) { message.AppendString(Product); message.SaveArray(); } message.EndArray(); }
public override void Execute(GameClient session, string[] pms) { ushort result; ushort.TryParse(pms[0], out result); if (result > 4) { session.SendWhisper(TextManager.GetText("command_dance_false")); result = 0; } var message = new ServerMessage(); message.Init(LibraryParser.OutgoingRequest("DanceStatusMessageComposer")); message.AppendInteger(session.CurrentRoomUserId); message.AppendInteger(result); session.GetHabbo().CurrentRoom.SendMessage(message); }
internal ServerMessage AppendEntrySubmitMessage(ServerMessage message, int status, Room room = null) { message.Init(LibraryParser.OutgoingRequest("CompetitionEntrySubmitResultMessageComposer")); message.AppendInteger(Id); message.AppendString(Name); message.AppendInteger(status); // 0 : roomSent - 1 : send room - 2 : confirm register - 3 : neededFurnis - 4 : doorClosed - 6 : acceptRules if (status != 3) { message.AppendInteger(0); message.AppendInteger(0); } else { message.StartArray(); foreach (var furni in RequiredFurnis) { message.AppendString(furni); message.SaveArray(); } message.EndArray(); if (room == null) message.AppendInteger(0); else { message.StartArray(); foreach (var furni in RequiredFurnis) { if (!room.GetRoomItemHandler().HasFurniByItemName(furni)) { message.AppendString(furni); message.SaveArray(); } } message.EndArray(); } } return message; }
public override bool Execute(GameClient session, string[] pms) { var message = string.Join(" ", pms); if (string.IsNullOrEmpty(message)) return true; foreach (var client in Azure.GetGame().GetClientManager().Clients.Values) { var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("WhisperMessageComposer")); serverMessage.AppendInteger(client.CurrentRoomUserId); serverMessage.AppendString(message); serverMessage.AppendInteger(0); serverMessage.AppendInteger(36); serverMessage.AppendInteger(0); serverMessage.AppendInteger(-1); client.SendMessage(serverMessage); } return true; }
public override void Execute(GameClient session, string[] pms) { var room = session.GetHabbo().CurrentRoom; if (!session.GetHabbo().CurrentRoom.RoomMuted) { session.SendWhisper("Room isn't muted."); return; } session.GetHabbo().CurrentRoom.RoomMuted = false; var message = new ServerMessage(); message.Init(LibraryParser.OutgoingRequest("AlertNotificationMessageComposer")); message.AppendString("Room is now UnMuted."); message.AppendString(""); room.SendMessage(message); AzureEmulator.GetGame() .GetModerationTool().LogStaffEntry(session.GetHabbo().UserName, string.Empty, "Room Unmute", "Room UnMuted"); }
internal static void GenerateMessage(ServerMessage message, TargetedOffer offer) { message.Init(LibraryParser.OutgoingRequest("TargetedOfferMessageComposer")); message.AppendInteger(1); message.AppendInteger(offer.Id); message.AppendString(offer.Identifier); message.AppendString(offer.Identifier); message.AppendInteger(offer.CostCredits); if (offer.CostDiamonds > 0) { message.AppendInteger(offer.CostDiamonds); message.AppendInteger(105); } else { message.AppendInteger(offer.CostDuckets); message.AppendInteger(0); } message.AppendInteger(offer.PurchaseLimit); var timeLeft = offer.ExpirationTime - Azure.GetUnixTimeStamp(); message.AppendInteger(timeLeft); message.AppendString(offer.Title); message.AppendString(offer.Description); message.AppendString(offer.Image); message.AppendString(string.Empty); message.StartArray(); foreach (var product in offer.Products) { message.AppendString(product); message.SaveArray(); } message.EndArray(); }
/// <summary> /// Adds the experience. /// </summary> /// <param name="amount">The amount.</param> internal void AddExperience(int amount) { { var oldExperienceGoal = ExperienceGoal; Experience += amount; if (Experience >= 51900) return; if (DbState != DatabaseUpdateState.NeedsInsert) DbState = DatabaseUpdateState.NeedsUpdate; if (Room == null) return; ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AddPetExperienceMessageComposer")); serverMessage.AppendInteger(PetId); serverMessage.AppendInteger(VirtualId); serverMessage.AppendInteger(amount); Room.SendMessage(serverMessage); if (Experience < oldExperienceGoal) return; var ownerSession = AzureEmulator.GetGame().GetClientManager().GetClientByUserId(OwnerId); // Reset pet commands PetCommands.Clear(); PetCommands = PetCommandHandler.GetPetCommands(this); if (ownerSession == null) return; ServerMessage levelNotify = new ServerMessage(LibraryParser.OutgoingRequest("NotifyNewPetLevelMessageComposer")); SerializeInventory(levelNotify, true); ownerSession.SendMessage(levelNotify); ServerMessage tp = new ServerMessage(); tp.Init(LibraryParser.OutgoingRequest("PetTrainerPanelMessageComposer")); tp.AppendInteger(PetId); List<short> availableCommands = new List<short>(); tp.AppendInteger(PetCommands.Count); foreach (short sh in PetCommands.Keys) { tp.AppendInteger(sh); if (PetCommands[sh]) availableCommands.Add(sh); } tp.AppendInteger(availableCommands.Count); foreach (short sh in availableCommands) tp.AppendInteger(sh); ownerSession.SendMessage(tp); } }
public void OnTrigger(GameClient session, RoomItem item, int request, bool hasRights) { if (session == null) { return; } RoomUser roomUserByHabbo = item.GetRoom().GetRoomUserManager().GetRoomUserByHabbo(session.GetHabbo().Id); if (roomUserByHabbo == null) { return; } if (PathFinder.GetDistance(roomUserByHabbo.X, roomUserByHabbo.Y, item.X, item.Y) > 1) { roomUserByHabbo.MoveTo(item.SquareInFront); } if (Math.Abs(roomUserByHabbo.X - item.X) < 2 && Math.Abs(roomUserByHabbo.Y - item.Y) < 2) { roomUserByHabbo.SetRot(PathFinder.CalculateRotation(roomUserByHabbo.X, roomUserByHabbo.Y, item.X, item.Y), false); Room room = item.GetRoom(); var point = new Point(0, 0); switch (roomUserByHabbo.RotBody) { case 4: point = new Point(item.X, item.Y + 1); break; case 0: point = new Point(item.X, item.Y - 1); break; case 6: point = new Point(item.X - 1, item.Y); break; default: if (roomUserByHabbo.RotBody != 2) { return; } point = new Point(item.X + 1, item.Y); break; } if (!room.GetGameMap().ValidTile2(point.X, point.Y)) { return; } var coordinatedItems = room.GetGameMap().GetCoordinatedItems(point); if (coordinatedItems.Any(i => !i.GetBaseItem().Stackable)) return; double num = item.GetRoom().GetGameMap().SqAbsoluteHeight(point.X, point.Y); var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("ItemAnimationMessageComposer")); serverMessage.AppendInteger(item.X); serverMessage.AppendInteger(item.Y); serverMessage.AppendInteger(point.X); serverMessage.AppendInteger(point.Y); serverMessage.AppendInteger(1); serverMessage.AppendInteger(item.Id); serverMessage.AppendString(item.Z.ToString(AzureEmulator.CultureInfo)); serverMessage.AppendString(num.ToString(AzureEmulator.CultureInfo)); serverMessage.AppendInteger(0); room.SendMessage(serverMessage); item.GetRoom().GetRoomItemHandler().SetFloorItem(roomUserByHabbo.GetClient(), item, point.X, point.Y, item.Rot, false, false, false); } }
/// <summary> /// Serializes the ticket chatlog. /// </summary> /// <param name="ticket">The ticket.</param> /// <param name="roomData">The room data.</param> /// <param name="timestamp">The timestamp.</param> /// <returns>ServerMessage.</returns> /// <exception cref="System.NullReferenceException">No room found.</exception> internal static ServerMessage SerializeTicketChatlog(SupportTicket ticket, RoomData roomData, double timestamp) { var message = new ServerMessage(); RoomData room = AzureEmulator.GetGame().GetRoomManager().GenerateRoomData(ticket.RoomId); //if (room == null) //{ // throw new NullReferenceException("No room found."); //} message.Init(LibraryParser.OutgoingRequest("ModerationToolIssueChatlogMessageComposer")); message.AppendInteger(ticket.TicketId); message.AppendInteger(ticket.SenderId); message.AppendInteger(ticket.ReportedId); message.AppendInteger(ticket.RoomId); message.AppendByte(1); message.AppendShort(2); message.AppendString("roomName"); message.AppendByte(2); message.AppendString(ticket.RoomName); message.AppendString("roomId"); message.AppendByte(1); message.AppendInteger(ticket.RoomId); var tempChatlogs = room.RoomChat.Reverse().Skip(Math.Max(0, room.RoomChat.Count() - 60)).Take(60).ToList(); message.AppendShort(tempChatlogs.Count()); foreach (var chatLog in tempChatlogs) { chatLog.Serialize(ref message); } tempChatlogs = null; return message; }
/// <summary> /// Serializes the room chatlog. /// </summary> /// <param name="roomId">The room identifier.</param> /// <returns>ServerMessage.</returns> /// <exception cref="System.NullReferenceException">No room found.</exception> internal static ServerMessage SerializeRoomChatlog(uint roomId) { var message = new ServerMessage(); Room room = AzureEmulator.GetGame().GetRoomManager().LoadRoom(roomId); message.Init(LibraryParser.OutgoingRequest("ModerationToolRoomChatlogMessageComposer")); message.AppendByte(1); //type message.AppendShort(2); message.AppendString("roomName"); message.AppendByte(2); message.AppendString(room.RoomData.Name); message.AppendString("roomId"); message.AppendByte(1); message.AppendInteger(room.RoomData.Id); if (room != null) { var tempChatlogs = room.RoomData.RoomChat.Reverse().Skip(Math.Max(0, room.RoomData.RoomChat.Count() - 150)).Take(150).ToList(); message.AppendShort(tempChatlogs.Count()); foreach (var chatLog in tempChatlogs) { chatLog.Serialize(ref message); } tempChatlogs = null; } else { DateTime Date = AzureEmulator.UnixToDateTime(1413672144); message.AppendInteger((DateTime.Now - Date).Seconds); // niet goed denk ik message.AppendInteger(1); message.AppendString("*Kamer is niet geladen!*"); message.AppendString(""); message.AppendBool(false); } return message; }
private void FreezeUser(RoomUser user) { if (user.IsBot || user.ShieldActive || user.Team == Team.None || user.Freezed) return; user.Freezed = true; user.FreezeCounter = 0; --user.FreezeLives; if (user.FreezeLives <= 0) { var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("UpdateFreezeLivesMessageComposer")); serverMessage.AppendInteger(user.InternalRoomId); serverMessage.AppendInteger(user.FreezeLives); user.GetClient().SendMessage(serverMessage); user.ApplyEffect(-1); _room.GetGameManager().AddPointToTeam(user.Team, -10, user); var managerForFreeze = _room.GetTeamManagerForFreeze(); managerForFreeze.OnUserLeave(user); user.Team = Team.None; if (ExitTeleport != null) _room.GetGameMap().TeleportToItem(user, ExitTeleport); user.Freezed = false; user.SetStep = false; user.IsWalking = false; user.UpdateNeeded = true; if (!managerForFreeze.BlueTeam.Any() && !managerForFreeze.RedTeam.Any() && !managerForFreeze.GreenTeam.Any() && managerForFreeze.YellowTeam.Any()) StopGame(); else if (managerForFreeze.BlueTeam.Any() && !managerForFreeze.RedTeam.Any() && !managerForFreeze.GreenTeam.Any() && !managerForFreeze.YellowTeam.Any()) StopGame(); else if (!managerForFreeze.BlueTeam.Any() && managerForFreeze.RedTeam.Any() && !managerForFreeze.GreenTeam.Any() && !managerForFreeze.YellowTeam.Any()) StopGame(); else { if (managerForFreeze.BlueTeam.Any() || managerForFreeze.RedTeam.Any() || !managerForFreeze.GreenTeam.Any() || managerForFreeze.YellowTeam.Any()) return; StopGame(); } } else { _room.GetGameManager().AddPointToTeam(user.Team, -10, user); user.ApplyEffect(12); var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("UpdateFreezeLivesMessageComposer")); serverMessage.AppendInteger(user.InternalRoomId); serverMessage.AppendInteger(user.FreezeLives); user.GetClient().SendMessage(serverMessage); } }
/// <summary> /// News the height map. /// </summary> /// <returns>ServerMessage.</returns> private ServerMessage NewHeightMap() { var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("HeightMapMessageComposer")); serverMessage.AppendInteger(Model.MapSizeX); { serverMessage.AppendInteger(Model.MapSizeX * Model.MapSizeY); for (Int32 i = 0; i < Model.MapSizeY; i++) for (Int32 j = 0; j < Model.MapSizeX; j++) serverMessage.AppendShort((short)(SqAbsoluteHeight(j, i) * 256)); // serverMessage.AppendShort(this.Model.SqFloorHeight[j, i] * 256); return serverMessage; } }
/// <summary> /// Serializes the event information. /// </summary> /// <param name="roomId">The room identifier.</param> internal void SerializeEventInfo(uint roomId) { Room room = AzureEmulator.GetGame().GetRoomManager().GetRoom(roomId); if (room == null) { return; } RoomEvent @event = GetEvent(roomId); if (@event == null || @event.HasExpired) { return; } if (!RoomHasEvents(roomId)) { return; } var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("RoomEventMessageComposer")); serverMessage.AppendInteger(roomId); serverMessage.AppendInteger(room.RoomData.OwnerId); serverMessage.AppendString(room.RoomData.Owner); serverMessage.AppendInteger(1); serverMessage.AppendInteger(1); serverMessage.AppendString(@event.Name); serverMessage.AppendString(@event.Description); serverMessage.AppendInteger(0); serverMessage.AppendInteger( ((int)Math.Floor((@event.Time - AzureEmulator.GetUnixTimeStamp()) / 60.0))); serverMessage.AppendInteger(@event.Category); room.SendMessage(serverMessage); }
/// <summary> /// Sends the new items. /// </summary> /// <param name="id">The identifier.</param> internal void SendNewItems(uint id) { var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("NewInventoryObjectMessageComposer")); serverMessage.AppendInteger(1); serverMessage.AppendInteger(1); serverMessage.AppendInteger(1); serverMessage.AppendInteger(id); _mClient.SendMessage(serverMessage); }
/// <summary> /// Serializes the bot inventory. /// </summary> /// <returns>ServerMessage.</returns> internal ServerMessage SerializeBotInventory() { var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("BotInventoryMessageComposer")); serverMessage.AppendInteger(_inventoryBots.Count); foreach (RoomBot current in _inventoryBots.Values) { serverMessage.AppendInteger(current.BotId); serverMessage.AppendString(current.Name); serverMessage.AppendString(current.Motto); serverMessage.AppendString("m"); serverMessage.AppendString(current.Look); } return serverMessage; }
/// <summary> /// Updates the user status. /// </summary> /// <param name="user">The user.</param> /// <param name="cycleGameItems">if set to <c>true</c> [cyclegameitems].</param> internal void UpdateUserStatus(RoomUser user, bool cycleGameItems) { if (user == null) return; if (user.IsSitting == false) { if (user.Statusses.ContainsKey("sit")) { user.Statusses.Remove("sit"); user.UpdateNeeded = true; } } if (user.IsLyingDown == false) { if (user.Statusses.ContainsKey("lay")) { user.Statusses.Remove("lay"); user.UpdateNeeded = true; } } var isBot = user.IsBot; if (isBot) cycleGameItems = false; try { var coordItemSearch = new CoordItemSearch(UserRoom.GetGameMap().CoordinatedItems); var allRoomItemForSquare = coordItemSearch.GetAllRoomItemForSquare(user.X, user.Y); var itemsOnSquare = UserRoom.GetGameMap().GetCoordinatedItems(new Point(user.X, user.Y)); var newZ = UserRoom.GetGameMap().SqAbsoluteHeight(user.X, user.Y, itemsOnSquare) + ((user.RidingHorse && user.IsPet == false) ? 1 : 0); if (Math.Abs(newZ - user.Z) > 0) { user.Z = newZ; user.UpdateNeeded = true; } if (!allRoomItemForSquare.Any()) user.LastItem = 0; using (var enumerator = allRoomItemForSquare.GetEnumerator()) { while (enumerator.MoveNext()) { var item = enumerator.Current; item.UserWalksOnFurni(user); if (cycleGameItems) { AzureEmulator.GetGame() .GetQuestManager() .ProgressUserQuest(user.GetClient(), QuestType.StandOn, item.GetBaseItem().ItemId); } if (item.GetBaseItem().IsSeat) { if (!user.Statusses.ContainsKey("sit")) if (item.GetBaseItem().StackMultipler && !string.IsNullOrWhiteSpace(item.ExtraData)) if (item.ExtraData != "0") { var num2 = Convert.ToInt32(item.ExtraData); user.Statusses.Add("sit", item.GetBaseItem().ToggleHeight[num2].ToString(CultureInfo.InvariantCulture) .Replace(',', '.')); } else { user.Statusses.Add("sit", Convert.ToString(item.GetBaseItem().Height)); } else { user.Statusses.Add("sit", Convert.ToString(item.GetBaseItem().Height)); } if (Math.Abs(user.Z - item.Z) > 0 || user.RotBody != item.Rot) { user.Z = item.Z; user.RotHead = item.Rot; user.RotBody = item.Rot; user.UpdateNeeded = true; } } var interactionType = item.GetBaseItem().InteractionType; switch (interactionType) { case Interaction.QuickTeleport: case Interaction.GuildGate: case Interaction.WalkInternalLink: { item.Interactor.OnUserWalk(user.GetClient(), item, user); break; } case Interaction.None: break; case Interaction.PressurePadBed: case Interaction.Bed: { if (!user.Statusses.ContainsKey("lay")) user.Statusses.Add("lay", TextHandling.GetString(item.GetBaseItem().Height)); else if (user.Statusses["lay"] != TextHandling.GetString(item.GetBaseItem().Height)) user.Statusses["lay"] = TextHandling.GetString(item.GetBaseItem().Height); user.Z = item.Z; user.RotHead = item.Rot; user.RotBody = item.Rot; user.UpdateNeeded = true; if (item.GetBaseItem().InteractionType == Interaction.PressurePadBed) { item.ExtraData = "1"; item.UpdateState(); } break; } case Interaction.Guillotine: { if (!user.Statusses.ContainsKey("lay")) user.Statusses.Add("lay", TextHandling.GetString(item.GetBaseItem().Height)); else if (user.Statusses["lay"] != TextHandling.GetString(item.GetBaseItem().Height)) user.Statusses["lay"] = TextHandling.GetString(item.GetBaseItem().Height); user.Z = item.Z; user.RotBody = item.Rot; item.ExtraData = "1"; item.UpdateState(); var avatarEffectsInventoryComponent = user.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent(); avatarEffectsInventoryComponent.ActivateCustomEffect(133); break; } case Interaction.FootballGate: break; case Interaction.BanzaiGateBlue: case Interaction.BanzaiGateRed: case Interaction.BanzaiGateYellow: case Interaction.BanzaiGateGreen: { int Effect = (int)item.Team + 32; var teamManagerForBanzai = user.GetClient().GetHabbo().CurrentRoom.GetTeamManagerForBanzai(); var avatarEffectsInventoryComponent = user.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent(); if (user.Team == Team.none) { if (!teamManagerForBanzai.CanEnterOnTeam(item.Team)) break; if (user.Team != Team.none) teamManagerForBanzai.OnUserLeave(user); user.Team = item.Team; teamManagerForBanzai.AddUser(user); if (avatarEffectsInventoryComponent.CurrentEffect != Effect) avatarEffectsInventoryComponent.ActivateCustomEffect(Effect); break; } if (user.Team != Team.none && user.Team != item.Team) { teamManagerForBanzai.OnUserLeave(user); user.Team = Team.none; avatarEffectsInventoryComponent.ActivateCustomEffect(0); break; } teamManagerForBanzai.OnUserLeave(user); if (avatarEffectsInventoryComponent.CurrentEffect == Effect) avatarEffectsInventoryComponent.ActivateCustomEffect(0); user.Team = Team.none; break; } case Interaction.Jump: break; case Interaction.Pinata: { if (!user.IsWalking || item.ExtraData.Length <= 0) break; var num5 = int.Parse(item.ExtraData); if (num5 >= 100 || user.CurrentEffect != 158) break; var num6 = num5 + 1; item.ExtraData = num6.ToString(); item.UpdateState(); AzureEmulator.GetGame() .GetAchievementManager() .ProgressUserAchievement(user.GetClient(), "ACH_PinataWhacker", 1, false); if (num6 == 100) { AzureEmulator.GetGame().GetPinataHandler().DeliverRandomPinataItem(user, UserRoom, item); AzureEmulator.GetGame() .GetAchievementManager() .ProgressUserAchievement(user.GetClient(), "ACH_PinataBreaker", 1, false); } break; } case Interaction.TileStackMagic: case Interaction.Poster: break; case Interaction.Tent: case Interaction.BedTent: if (user.LastItem == item.Id) break; if (!user.IsBot && !user.OnCampingTent) { var serverMessage22 = new ServerMessage(); serverMessage22.Init( LibraryParser.OutgoingRequest("UpdateFloorItemExtraDataMessageComposer")); serverMessage22.AppendString(item.Id.ToString()); serverMessage22.AppendInteger(0); serverMessage22.AppendString("1"); user.GetClient().SendMessage(serverMessage22); user.OnCampingTent = true; user.LastItem = item.Id; } break; case Interaction.RunWaySage: { var num7 = new Random().Next(1, 4); item.ExtraData = num7.ToString(); item.UpdateState(); break; } case Interaction.Shower: case Interaction.ChairState: case Interaction.PressurePad: { item.ExtraData = "1"; item.UpdateState(); break; } case Interaction.BanzaiTele: { if (user.IsWalking) UserRoom.GetGameItemHandler().OnTeleportRoomUserEnter(user, item); break; } case Interaction.FreezeYellowGate: case Interaction.FreezeRedGate: case Interaction.FreezeGreenGate: case Interaction.FreezeBlueGate: { if (cycleGameItems) { var num4 = (int)(item.Team + 39); var teamManagerForFreeze = user.GetClient().GetHabbo().CurrentRoom.GetTeamManagerForFreeze(); var avatarEffectsInventoryComponent2 = user.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent(); if (user.Team != item.Team) { if (teamManagerForFreeze.CanEnterOnTeam(item.Team)) { if (user.Team != Team.none) teamManagerForFreeze.OnUserLeave(user); user.Team = item.Team; teamManagerForFreeze.AddUser(user); if (avatarEffectsInventoryComponent2.CurrentEffect != num4) avatarEffectsInventoryComponent2.ActivateCustomEffect(num4); } } else { teamManagerForFreeze.OnUserLeave(user); if (avatarEffectsInventoryComponent2.CurrentEffect == num4) avatarEffectsInventoryComponent2.ActivateCustomEffect(0); user.Team = Team.none; } var serverMessage33 = new ServerMessage( LibraryParser.OutgoingRequest("UserIsPlayingFreezeMessageComposer")); serverMessage33.AppendBool(user.Team != Team.none); user.GetClient().SendMessage(serverMessage33); } break; } } if (item.GetBaseItem().InteractionType == Interaction.BedTent) user.OnCampingTent = true; user.LastItem = item.Id; } } if (user.IsSitting && user.TeleportEnabled) { user.Z -= 0.35; user.UpdateNeeded = true; } if (!cycleGameItems) return; if (UserRoom.GotSoccer()) UserRoom.GetSoccer().OnUserWalk(user); if (UserRoom.GotBanzai()) UserRoom.GetBanzai().OnUserWalk(user); UserRoom.GetFreeze().OnUserWalk(user); } catch (Exception e) { Logging.HandleException(e, "RoomUserManager.cs:UpdateUserStatus"); } }
/// <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; }
/// <summary> /// Handles the <see cref="E:UserAdd" /> event. /// </summary> /// <param name="sender">The sender.</param> /// <param name="args">The <see cref="EventArgs"/> instance containing the event data.</param> /// <param name="user"></param> private void OnUserAdd(RoomUser user) { try { if (user == null || user.GetClient() == null || user.GetClient().GetHabbo() == null) return; var client = user.GetClient(); if (client == null || client.GetHabbo() == null || UserRoom == null) return; if (!user.IsSpectator) { var model = UserRoom.GetGameMap().Model; if (model == null) return; user.SetPos(model.DoorX, model.DoorY, model.DoorZ); user.SetRot(model.DoorOrientation, false); user.AddStatus(UserRoom.CheckRights(client, true) ? "flatctrl 4" : "flatctrl 1", string.Empty); user.CurrentItemEffect = ItemEffectType.None; if (!user.IsBot && client.GetHabbo().IsTeleporting) { client.GetHabbo().IsTeleporting = false; client.GetHabbo().TeleportingRoomId = 0; var item = UserRoom.GetRoomItemHandler().GetItem(client.GetHabbo().TeleporterId); if (item != null) { item.ExtraData = "2"; item.UpdateState(false, true); user.SetPos(item.X, item.Y, item.Z); user.SetRot(item.Rot, false); item.InteractingUser2 = client.GetHabbo().Id; item.ExtraData = "0"; item.UpdateState(false, true); } } if (!user.IsBot && client.GetHabbo().IsHopping) { client.GetHabbo().IsHopping = false; client.GetHabbo().HopperId = 0; var item2 = UserRoom.GetRoomItemHandler().GetItem(client.GetHabbo().HopperId); if (item2 != null) { item2.ExtraData = "1"; item2.UpdateState(false, true); user.SetPos(item2.X, item2.Y, item2.Z); user.SetRot(item2.Rot, false); user.AllowOverride = false; item2.InteractingUser2 = client.GetHabbo().Id; item2.ExtraData = "2"; item2.UpdateState(false, true); } } if (!user.IsSpectator) { var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("SetRoomUserMessageComposer")); serverMessage.AppendInteger(1); user.Serialize(serverMessage, UserRoom.GetGameMap().GotPublicPool); UserRoom.SendMessage(serverMessage); } if (!user.IsBot) { var serverMessage2 = new ServerMessage(); serverMessage2.Init(LibraryParser.OutgoingRequest("UpdateUserDataMessageComposer")); serverMessage2.AppendInteger(user.VirtualId); serverMessage2.AppendString(client.GetHabbo().Look); serverMessage2.AppendString(client.GetHabbo().Gender.ToLower()); serverMessage2.AppendString(client.GetHabbo().Motto); serverMessage2.AppendInteger(client.GetHabbo().AchievementPoints); UserRoom.SendMessage(serverMessage2); } if (UserRoom.RoomData.Owner != client.GetHabbo().UserName) { AzureEmulator.GetGame() .GetQuestManager() .ProgressUserQuest(client, QuestType.SocialVisit, 0u); AzureEmulator.GetGame() .GetAchievementManager() .ProgressUserAchievement(client, "ACH_RoomEntry", 1, false); } } if (client.GetHabbo().GetMessenger() != null) client.GetHabbo().GetMessenger().OnStatusChanged(true); client.GetMessageHandler().OnRoomUserAdd(); //if (client.GetHabbo().HasFuse("moderator")) client.GetHabbo().GetAvatarEffectsInventoryComponent().ActivateCustomEffect(102); //if (client.GetHabbo().Rank == Convert.ToUInt32(AzureEmulator.GetDbConfig().DbData["ambassador.minrank"])) client.GetHabbo().GetAvatarEffectsInventoryComponent().ActivateCustomEffect(178); if (OnUserEnter != null) OnUserEnter(user, null); if (UserRoom.GotMusicController() && UserRoom.GotMusicController()) UserRoom.GetRoomMusicController().OnNewUserEnter(user); UserRoom.OnUserEnter(user); } catch (Exception ex) { Logging.LogCriticalException(ex.ToString()); } }
internal bool UserCanWalkInTile(RoomUser RoomUsers) { // Check if User CanWalk... if ((UserRoom.GetGameMap().CanWalk(RoomUsers.SetX, RoomUsers.SetY, RoomUsers.AllowOverride)) || (RoomUsers.RidingHorse)) { // Let's Update his Movement... UserRoom.GetGameMap().UpdateUserMovement(new Point(RoomUsers.Coordinate.X, RoomUsers.Coordinate.Y), new Point(RoomUsers.SetX, RoomUsers.SetY), RoomUsers); var HasItemInPlace = UserRoom.GetGameMap().GetCoordinatedItems(new Point(RoomUsers.X, RoomUsers.Y)); // Set His Actual X,Y,Z Position... RoomUsers.X = RoomUsers.SetX; RoomUsers.Y = RoomUsers.SetY; RoomUsers.Z = RoomUsers.SetZ; // Check Sub Items Interactionables foreach (var RoomItem in HasItemInPlace.ToArray()) { RoomItem.UserWalksOffFurni(RoomUsers); switch (RoomItem.GetBaseItem().InteractionType) { case Interaction.RunWaySage: case Interaction.ChairState: case Interaction.Shower: case Interaction.PressurePad: case Interaction.PressurePadBed: case Interaction.Guillotine: RoomItem.ExtraData = "0"; RoomItem.UpdateState(); break; case Interaction.Tent: case Interaction.BedTent: if (!RoomUsers.IsBot && RoomUsers.OnCampingTent) { var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("UpdateFloorItemExtraDataMessageComposer")); serverMessage.AppendString(RoomItem.Id.ToString()); serverMessage.AppendInteger(0); serverMessage.AppendString("0"); RoomUsers.GetClient().SendMessage(serverMessage); RoomUsers.OnCampingTent = false; } break; case Interaction.None: break; } } // Let's Update user Status.. UpdateUserStatus(RoomUsers, true); return false; } return true; }
/// <summary> /// Serializes the group information. /// </summary> /// <param name="group">The group.</param> /// <param name="response">The response.</param> /// <param name="session">The session.</param> /// <param name="room">The room.</param> /// <param name="newWindow">if set to <c>true</c> [new window].</param> internal void SerializeGroupInfo(Guild group, ServerMessage response, GameClient session, Room room, bool newWindow = false) { if (room == null || group == null) return; DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); DateTime dateTime2 = dateTime.AddSeconds(group.CreateTime); response.Init(LibraryParser.OutgoingRequest("GroupDataMessageComposer")); response.AppendInteger(group.Id); response.AppendBool(true); response.AppendInteger(group.State); response.AppendString(group.Name); response.AppendString(group.Description); response.AppendString(group.Badge); response.AppendInteger(group.RoomId); response.AppendString((AzureEmulator.GetGame().GetRoomManager().GenerateRoomData(group.RoomId) == null) ? "No room found.." : AzureEmulator.GetGame().GetRoomManager().GenerateRoomData(group.RoomId).Name); response.AppendInteger((group.CreatorId == session.GetHabbo().Id) ? 3 : (group.Requests.Contains(session.GetHabbo().Id) ? 2 : (group.Members.ContainsKey(session.GetHabbo().Id) ? 1 : 0))); response.AppendInteger(group.Members.Count); response.AppendBool(session.GetHabbo().FavouriteGroup == group.Id); response.AppendString(string.Format("{0}-{1}-{2}", dateTime2.Day.ToString("00"), dateTime2.Month.ToString("00"), dateTime2.Year)); response.AppendBool(group.CreatorId == session.GetHabbo().Id); response.AppendBool(group.Admins.ContainsKey(session.GetHabbo().Id)); response.AppendString((AzureEmulator.GetHabboById(group.CreatorId) == null) ? string.Empty : AzureEmulator.GetHabboById(group.CreatorId).UserName); response.AppendBool(newWindow); response.AppendBool(group.AdminOnlyDeco == 0u); response.AppendInteger(group.Requests.Count); response.AppendBool(group.HasForum); room.SendMessage(response); }
/// <summary> /// Serializes the messenger action. /// </summary> /// <param name="type">The type.</param> /// <param name="name">The name.</param> internal void SerializeMessengerAction(int type, string name) { if (GetClient() == null) return; var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("ConsoleMessengerActionMessageComposer")); serverMessage.AppendString(GetClient().GetHabbo().Id.ToString()); serverMessage.AppendInteger(type); serverMessage.AppendString(name); foreach (var current in Friends.Values.Where(current => current.Client != null)) current.Client.SendMessage(serverMessage); }
/// <summary> /// Updates the item on roller. /// </summary> /// <param name="item">The item.</param> /// <param name="nextCoord">The next coord.</param> /// <param name="rolledId">The rolled identifier.</param> /// <param name="nextZ">The next z.</param> /// <returns>ServerMessage.</returns> internal ServerMessage UpdateItemOnRoller(RoomItem item, Point nextCoord, uint rolledId, double nextZ) { var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("ItemAnimationMessageComposer")); serverMessage.AppendInteger(item.X); serverMessage.AppendInteger(item.Y); serverMessage.AppendInteger(nextCoord.X); serverMessage.AppendInteger(nextCoord.Y); serverMessage.AppendInteger(1); serverMessage.AppendInteger(item.Id); serverMessage.AppendString(TextHandling.GetString(item.Z)); serverMessage.AppendString(TextHandling.GetString(nextZ)); serverMessage.AppendInteger(rolledId); SetFloorItem(item, nextCoord.X, nextCoord.Y, nextZ); return serverMessage; }
/// <summary> /// Serializes the room data. /// </summary> /// <param name="message">The message.</param> /// <param name="session">The session.</param> /// <param name="isNotReload">if set to <c>true</c> [from view].</param> /// <param name="sendRoom">if set to <c>true</c> [send room].</param> /// <param name="show">if set to <c>true</c> [show].</param> internal void SerializeRoomData(ServerMessage message, GameClient session, bool isNotReload, bool? sendRoom = false, bool show = true) { var room = Azure.GetGame().GetRoomManager().GetRoom(session.GetHabbo().CurrentRoomId); message.Init(LibraryParser.OutgoingRequest("RoomDataMessageComposer")); message.AppendBool(show); //flatId Serialize(message, true, !isNotReload); message.AppendBool(isNotReload); message.AppendBool(Azure.GetGame().GetNavigator() != null && Azure.GetGame().GetNavigator().GetPublicItem(Id) != null); // staffPick message.AppendBool(!isNotReload || session.GetHabbo().HasFuse("fuse_mod")); // bypass bell, pass ... message.AppendBool(room != null && room.RoomMuted); //roomMuted message.AppendInteger(WhoCanMute); message.AppendInteger(WhoCanKick); message.AppendInteger(WhoCanBan); message.AppendBool(room != null && room.CheckRights(session, true)); message.AppendInteger(ChatType); message.AppendInteger(ChatBalloon); message.AppendInteger(ChatSpeed); message.AppendInteger(ChatMaxDistance); message.AppendInteger(ChatFloodProtection); if (sendRoom == null) return; if (sendRoom.Value) { if (Azure.GetGame().GetRoomManager().GetRoom(Id) != null) Azure.GetGame().GetRoomManager().GetRoom(Id).SendMessage(message); } else session.SendMessage(message); }
/// <summary> /// Serializes the badge. /// </summary> /// <param name="badge">The badge.</param> /// <returns>ServerMessage.</returns> internal ServerMessage SerializeBadge(string badge) { var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("ReceiveBadgeMessageComposer")); serverMessage.AppendInteger(1); serverMessage.AppendString(badge); return serverMessage; }
internal bool MoveBall(RoomItem item, GameClient mover, int newX, int newY) { if (item == null || item.GetBaseItem() == null /*|| mover == null || mover.GetHabbo() == null*/) return false; if (!_room.GetGameMap().ItemCanBePlacedHere(newX, newY)) return false; var oldRoomCoord = item.Coordinate; var itemIsOnGameItem = GameItemOverlaps(item); double newZ = _room.GetGameMap().Model.SqFloorHeight[newX][newY]; var mMessage = new ServerMessage(); mMessage.Init(LibraryParser.OutgoingRequest("ItemAnimationMessageComposer")); // Cf mMessage.AppendInteger(item.Coordinate.X); mMessage.AppendInteger(item.Coordinate.Y); mMessage.AppendInteger(newX); mMessage.AppendInteger(newY); mMessage.AppendInteger(1); mMessage.AppendInteger(item.Id); mMessage.AppendString(TextHandling.GetString(item.Z)); mMessage.AppendString(TextHandling.GetString(newZ)); mMessage.AppendInteger(item.Id); _room.SendMessage(mMessage); if (oldRoomCoord.X == newX && oldRoomCoord.Y == newY) return false; item.SetState(newX, newY, item.Z, Gamemap.GetAffectedTiles(item.GetBaseItem().Length, item.GetBaseItem().Width, newX, newY, item.Rot)); if (itemIsOnGameItem || mover == null || mover.GetHabbo() == null) return false; HandleFootballGameItems(new Point(newX, newY), _room.GetRoomUserManager().GetRoomUserByHabbo(mover.GetHabbo().Id)); return false; }
private void PickUpPowerUp(RoomItem item, RoomUser user) { switch (item.FreezePowerUp) { case FreezePowerUp.BlueArrow: case FreezePowerUp.GreenArrow: case FreezePowerUp.OrangeSnowball: user.BanzaiPowerUp = item.FreezePowerUp; break; case FreezePowerUp.Shield: ActivateShield(user); break; case FreezePowerUp.Heart: if (user.FreezeLives < 5) { { ++user.FreezeLives; } _room.GetGameManager().AddPointToTeam(user.Team, 10, user); } var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("UpdateFreezeLivesMessageComposer")); serverMessage.AppendInteger(user.InternalRoomId); serverMessage.AppendInteger(user.FreezeLives); user.GetClient().SendMessage(serverMessage); break; } item.FreezePowerUp = FreezePowerUp.None; item.ExtraData = $"1{item.ExtraData}"; item.UpdateState(false, true); }
/// <summary> /// Updates the user on roller. /// </summary> /// <param name="user">The user.</param> /// <param name="nextCoord">The next coord.</param> /// <param name="rollerId">The roller identifier.</param> /// <param name="nextZ">The next z.</param> /// <returns>ServerMessage.</returns> internal ServerMessage UpdateUserOnRoller(RoomUser user, Point nextCoord, uint rollerId, double nextZ) { var serverMessage = new ServerMessage(0); serverMessage.Init(LibraryParser.OutgoingRequest("ItemAnimationMessageComposer")); serverMessage.AppendInteger(user.X); serverMessage.AppendInteger(user.Y); serverMessage.AppendInteger(nextCoord.X); serverMessage.AppendInteger(nextCoord.Y); serverMessage.AppendInteger(0); serverMessage.AppendInteger(rollerId); serverMessage.AppendInteger(2); serverMessage.AppendInteger(user.VirtualId); serverMessage.AppendString(TextHandling.GetString(user.Z)); serverMessage.AppendString(TextHandling.GetString(nextZ)); _room.GetGameMap() .UpdateUserMovement(new Point(user.X, user.Y), new Point(nextCoord.X, nextCoord.Y), user); _room.GetGameMap().GameMap[user.X, user.Y] = 1; user.X = nextCoord.X; user.Y = nextCoord.Y; user.Z = nextZ; _room.GetGameMap().GameMap[user.X, user.Y] = 0; return serverMessage; }
/// <summary> /// Serializes the club. /// </summary> internal void SerializeClub() { var client = GetClient(); var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("SubscriptionStatusMessageComposer")); serverMessage.AppendString("club_habbo"); if (client.GetHabbo().GetSubscriptionManager().HasSubscription) { double num = client.GetHabbo().GetSubscriptionManager().GetSubscription().ExpireTime; var num2 = num - AzureEmulator.GetUnixTimeStamp(); { var num3 = (int)Math.Ceiling(num2 / 86400.0); var i = (int) Math.Ceiling( ( AzureEmulator.GetUnixTimeStamp() - (double)client.GetHabbo().GetSubscriptionManager().GetSubscription().ActivateTime) / 86400.0); var num4 = num3 / 31; if (num4 >= 1) num4--; serverMessage.AppendInteger(num3 - num4 * 31); serverMessage.AppendInteger(1); serverMessage.AppendInteger(num4); serverMessage.AppendInteger(1); serverMessage.AppendBool(true); serverMessage.AppendBool(true); serverMessage.AppendInteger(i); serverMessage.AppendInteger(i); serverMessage.AppendInteger(10); } } else { serverMessage.AppendInteger(0); serverMessage.AppendInteger(0); serverMessage.AppendInteger(0); serverMessage.AppendInteger(0); serverMessage.AppendBool(false); serverMessage.AppendBool(false); serverMessage.AppendInteger(0); serverMessage.AppendInteger(0); serverMessage.AppendInteger(0); } client.SendMessage(serverMessage); var serverMessage2 = new ServerMessage(LibraryParser.OutgoingRequest("UserClubRightsMessageComposer")); serverMessage2.AppendInteger(GetSubscriptionManager().HasSubscription ? 2 : 0); serverMessage2.AppendInteger(Rank); serverMessage2.AppendBool(Rank >= Convert.ToUInt32(AzureEmulator.GetDbConfig().DbData["ambassador.minrank"])); client.SendMessage(serverMessage2); }
/// <summary> /// Serializes the badge reward. /// </summary> /// <param name="success">if set to <c>true</c> [success].</param> /// <returns>ServerMessage.</returns> internal ServerMessage SerializeBadgeReward(bool success) { var serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("WiredRewardAlertMessageComposer")); serverMessage.AppendInteger(success ? 7 : 1); return serverMessage; }
/// <summary> /// Serializes the room chatlog. /// </summary> /// <param name="roomId">The room identifier.</param> /// <returns>ServerMessage.</returns> /// <exception cref="System.NullReferenceException">No room found.</exception> internal static ServerMessage SerializeRoomChatlog(uint roomId) { var message = new ServerMessage(); var room = Azure.GetGame().GetRoomManager().LoadRoom(roomId); if (room?.RoomData != null) { message.Init(LibraryParser.OutgoingRequest("ModerationToolRoomChatlogMessageComposer")); message.AppendByte(1); message.AppendShort(2); message.AppendString("roomName"); message.AppendByte(2); message.AppendString(room.RoomData.Name); message.AppendString("roomId"); message.AppendByte(1); message.AppendInteger(room.RoomData.Id); var tempChatlogs = room.RoomData.RoomChat.Reverse() .Skip(Math.Max(0, room.RoomData.RoomChat.Count - 60)) .Take(60) .ToList(); message.AppendShort(tempChatlogs.Count); foreach (var chatLog in tempChatlogs) chatLog.Serialize(ref message); return message; } return null; }