internal void UpdateFurniture() { List <ServerMessage> list = new List <ServerMessage>(); RoomItem[] array = this.GetRoomItemHandler().mFloorItems.Values.ToArray <RoomItem>(); RoomItem[] array2 = array; for (int i = 0; i < array2.Length; i++) { RoomItem roomItem = array2[i]; ServerMessage serverMessage = new ServerMessage(Outgoing.UpdateRoomItemMessageComposer); roomItem.Serialize(serverMessage); list.Add(serverMessage); } Array.Clear(array, 0, array.Length); RoomItem[] array3 = this.GetRoomItemHandler().mWallItems.Values.ToArray <RoomItem>(); RoomItem[] array4 = array3; for (int j = 0; j < array4.Length; j++) { RoomItem roomItem2 = array4[j]; ServerMessage serverMessage2 = new ServerMessage(Outgoing.UpdateRoomWallItemMessageComposer); roomItem2.Serialize(serverMessage2); list.Add(serverMessage2); } Array.Clear(array3, 0, array3.Length); this.SendMessage(list); }
internal bool SetWallItem(GameClient Session, RoomItem Item) { if (!Item.IsWallItem || mWallItems.ContainsKey(Item.Id)) { return(false); } if (mFloorItems.ContainsKey(Item.Id)) { Session.SendNotif(LanguageLocale.GetValue("room.itemplaced")); return(true); } Item.Interactor.OnPlace(Session, Item); if (Item.GetBaseItem().InteractionType == InteractionType.dimmer) { if (room.MoodlightData == null) { room.MoodlightData = new MoodlightData(Item.Id); ((StringData)Item.data).Data = room.MoodlightData.GenerateExtraData(); } } mWallItems.Add(Item.Id, Item); AddItem(Item); ServerMessage Message = new ServerMessage(Outgoing.AddWallItemToRoom); Item.Serialize(Message, room.OwnerId); Message.AppendString(room.Owner); // TODO room.SendMessage(Message); return(true); }
internal bool PlayVideoInRoom(Rooms.Room Room, string Video) { Video = Video.Replace("http://www.youtube.", ""); Video = Video.Replace("www.youtube.", ""); try { Video = Video.Split('=')[1]; } catch { return(false); } if (Video == "") { return(false); } foreach (PlayerTV Tv in LoadedTVs.Values) { if (Tv.RoomId == Room.RoomId) { Tv.CustomVideo = Video; RoomItem Item = Room.GetRoomItemHandler().GetItem(Tv.Item); if (Item != null) { Item.ExtraData = Video; var ServerMessage = new ServerMessage(Outgoing.UpdateRoomItemMessageComposer); Item.Serialize(ServerMessage); Room.SendMessage(ServerMessage); } } } return(true); }
public ServerMessage Handle(ValueHolder valueHolder = null) { RoomItem item = valueHolder.GetValue<RoomItem>("Item"); ServerMessage updateRoomWallItem = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_35255_34886_201108111108); updateRoomWallItem.Init(r63aOutgoing.UpdateRoomWallItem); item.Serialize(updateRoomWallItem); return updateRoomWallItem; }
public ServerMessage Handle(ValueHolder valueHolder = null) { RoomItem item = valueHolder.GetValue <RoomItem>("Item"); ServerMessage updateRoomWallItem = BasicUtilies.GetRevisionServerMessage(Revision.PRODUCTION_201601012205_226667486); updateRoomWallItem.Init(r63cOutgoing.UpdateWallItem); item.Serialize(updateRoomWallItem); return(updateRoomWallItem); }
public ServerMessage Handle(ValueHolder valueHolder = null) { RoomItem item = valueHolder.GetValue <RoomItem>("Item"); ServerMessage Message = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_35255_34886_201108111108); Message.Init(r63aOutgoing.RoomFloorItemMoved); item.Serialize(Message); return(Message); }
public ServerMessage Handle(ValueHolder valueHolder = null) { RoomItem item = valueHolder.GetValue <RoomItem>("Item"); ServerMessage message = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_201211141113_913728051); message.Init(r63bOutgoing.AddFloorItemToRoom); item.Serialize(message); message.AppendString(Skylight.GetGame().GetGameClientManager().GetUsernameByID(item.UserID)); return(message); }
public ServerMessage Handle(ValueHolder valueHolder = null) { RoomItem item = valueHolder.GetValue <RoomItem>("Item"); ServerMessage AddWallItemToRoom = BasicUtilies.GetRevisionServerMessage(Revision.PRODUCTION_201601012205_226667486); AddWallItemToRoom.Init(r63cOutgoing.AddWallItemToRoom); item.Serialize(AddWallItemToRoom); AddWallItemToRoom.AppendString(Skylight.GetGame().GetGameClientManager().GetUsernameByID(item.UserID)); return(AddWallItemToRoom); }
void IFurniTrigger.OnTrigger(GameClient Session, RoomItem Item, int Request, bool UserHasRights) { if (UserHasRights && Item.GetRoom() != null) { string[] ExtradataSplat = Item.ExtraData.Split(Convert.ToChar(5)); if (ExtradataSplat.Length == 4) { if (ExtradataSplat[0] == "0") Item.ExtraData = "1" + ExtradataSplat[1] + ExtradataSplat[2] + ExtradataSplat[3]; else Item.ExtraData = "0" + ExtradataSplat[1] + ExtradataSplat[2] + ExtradataSplat[3]; ServerMessage Message = PacketHandelingManager.GetRecycledItem(OutputCode.ObjectUpdateMessageEvent); Item.Serialize(Message); Item.GetRoom().SendMessage(Message); Item.UpdateState(true, false); } } }
internal void DeliverRandomPinataItem(RoomUser User, Room Room, RoomItem Item) { if (Room == null || Item == null || Item.GetBaseItem().InteractionType != InteractionType.pinata || !this.Pinatas.ContainsKey(Item.GetBaseItem().ItemId)) { return; } PinataItem pinataItem; this.Pinatas.TryGetValue(Item.GetBaseItem().ItemId, out pinataItem); if (pinataItem == null || pinataItem.Rewards.Count < 1) { return; } int getX = Item.GetX; int getY = Item.GetY; double getZ = Item.GetZ; Thread.Sleep(900); Item.refreshItem(); Item.BaseItem = pinataItem.Rewards[new Random().Next(checked (pinataItem.Rewards.Count - 1))]; Item.ExtraData = ""; Room.GetRoomItemHandler().RemoveFurniture(User.GetClient(), Item.Id, false); using (IQueryAdapter queryreactor = CyberEnvironment.GetDatabaseManager().getQueryReactor()) { queryreactor.runFastQuery(string.Concat(new object[] { "UPDATE items SET base_item = '", Item.BaseItem, "', extra_data = '' WHERE id = ", Item.Id })); queryreactor.runQuery(); } Room.GetRoomItemHandler().SetFloorItem(Item, getX, getY, getZ, 0, false); ServerMessage serverMessage = new ServerMessage(Outgoing.AddFloorItemMessageComposer); Item.Serialize(serverMessage); serverMessage.AppendString(Room.Owner); Room.SendMessage(serverMessage); Room.GetRoomItemHandler().SetFloorItem(User.GetClient(), Item, Item.GetX, Item.GetY, 0, true, false, true); }
internal void DeliverRandomPinataItem(RoomUser User, Room Room, RoomItem Item) { if (Room == null || Item == null || Item.GetBaseItem().InteractionType != InteractionType.pinata || !this.Pinatas.ContainsKey(Item.GetBaseItem().ItemId)) { return; } PinataItem pinataItem; this.Pinatas.TryGetValue(Item.GetBaseItem().ItemId, out pinataItem); if (pinataItem == null || pinataItem.Rewards.Count < 1) { return; } int getX = Item.GetX; int getY = Item.GetY; double getZ = Item.GetZ; Thread.Sleep(900); Item.refreshItem(); Item.BaseItem = pinataItem.Rewards[new Random().Next(checked(pinataItem.Rewards.Count - 1))]; Item.ExtraData = ""; Room.GetRoomItemHandler().RemoveFurniture(User.GetClient(), Item.Id, false); using (IQueryAdapter queryreactor = CyberEnvironment.GetDatabaseManager().getQueryReactor()) { queryreactor.runFastQuery(string.Concat(new object[] { "UPDATE items SET base_item = '", Item.BaseItem, "', extra_data = '' WHERE id = ", Item.Id })); queryreactor.runQuery(); } Room.GetRoomItemHandler().SetFloorItem(Item, getX, getY, getZ, 0, false); ServerMessage serverMessage = new ServerMessage(Outgoing.AddFloorItemMessageComposer); Item.Serialize(serverMessage); serverMessage.AppendString(Room.Owner); Room.SendMessage(serverMessage); Room.GetRoomItemHandler().SetFloorItem(User.GetClient(), Item, Item.GetX, Item.GetY, 0, true, false, true); }
/// <summary> /// Sets the floor item. /// </summary> /// <param name="session">The session.</param> /// <param name="item">The item.</param> /// <param name="newX">The new x.</param> /// <param name="newY">The new y.</param> /// <param name="newRot">The new rot.</param> /// <param name="newItem">if set to <c>true</c> [new item].</param> /// <param name="onRoller">if set to <c>true</c> [on roller].</param> /// <param name="sendMessage">if set to <c>true</c> [send message].</param> /// <param name="updateRoomUserStatuses">if set to <c>true</c> [update room user statuses].</param> /// <param name="specialMove"></param> /// <param name="customHeight"></param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> internal bool SetFloorItem(GameClient session, RoomItem item, int newX, int newY, int newRot, bool newItem, bool onRoller, bool sendMessage, bool updateRoomUserStatuses, bool specialMove, double? customHeight = null) { var flag = false; if (!newItem) flag = _room.GetGameMap().RemoveFromMap(item); var affectedTiles = Gamemap.GetAffectedTiles(item.GetBaseItem().Length, item.GetBaseItem().Width, newX, newY, newRot); var oldCoord = item.Coordinate; if (!_room.GetGameMap().ValidTile(newX, newY) || (_room.GetGameMap().SquareHasUsers(newX, newY) && !item.GetBaseItem().IsSeat)) { if (!flag) return false; AddOrUpdateItem(item.Id); _room.GetGameMap().AddToMap(item); return false; } if ( affectedTiles.Values.Any( current => !_room.GetGameMap().ValidTile(current.X, current.Y) || (_room.GetGameMap().SquareHasUsers(current.X, current.Y) && !item.GetBaseItem().IsSeat))) { if (!flag) return false; AddOrUpdateItem(item.Id); _room.GetGameMap().AddToMap(item); return false; } var height = customHeight == null ? _room.GetGameMap().Model.SqFloorHeight[newX][newY] : customHeight.Value; if (!onRoller) { if (_room.GetGameMap().Model.SqState[newX][newY] != SquareState.Open && !item.GetBaseItem().IsSeat) { if (!flag) return false; AddOrUpdateItem(item.Id); return false; } if ( affectedTiles.Values.Any( current2 => !item.GetBaseItem().IsSeat && _room.GetGameMap().Model.SqState[current2.X][current2.Y] != SquareState.Open)) { if (!flag) return false; AddOrUpdateItem(item.Id); _room.GetGameMap().AddToMap(item); return false; } if (!item.GetBaseItem().IsSeat && !item.IsRoller) if ( affectedTiles.Values.Any( current3 => _room.GetGameMap().GetRoomUsers(new Point(current3.X, current3.Y)).Any())) { if (!flag) return false; AddOrUpdateItem(item.Id); _room.GetGameMap().AddToMap(item); return false; } } var furniObjects = GetFurniObjects(newX, newY); var list = new List<RoomItem>(); var list2 = new List<RoomItem>(); foreach ( var furniObjects2 in affectedTiles.Values .Select(current4 => GetFurniObjects(current4.X, current4.Y)) .Where(furniObjects2 => furniObjects2 != null)) list.AddRange(furniObjects2); list2.AddRange(furniObjects); list2.AddRange(list); var stackMagic = list2.FirstOrDefault( roomItem => roomItem != null && roomItem.GetBaseItem() != null && roomItem.GetBaseItem().InteractionType == Interaction.TileStackMagic); if (stackMagic != null) { height = stackMagic.Z; } else if (!onRoller && item.GetBaseItem().InteractionType != Interaction.TileStackMagic) { if (list2.Any( current5 => current5 != null && current5.Id != item.Id && current5.GetBaseItem() != null && !current5.GetBaseItem().Stackable)) { if (!flag) return false; AddOrUpdateItem(item.Id); _room.GetGameMap().AddToMap(item); return false; } if (item.Rot != newRot && item.X == newX && item.Y == newY) height = item.Z; foreach (var current6 in list2) if (current6.Id != item.Id && current6.TotalHeight > height) height = current6.TotalHeight; } if (item.GetBaseItem().Name == "boutique_mannequin1" || item.GetBaseItem().Name == "gld_wall_tall") { if (newRot < 0 || newRot > 12) { newRot = 0; } } else if (item.GetBaseItem().Name == "pirate_stage2" || item.GetBaseItem().Name == "pirate_stage2_g") { if (newRot < 0 || newRot > 7) { newRot = 0; } } else if (item.GetBaseItem().Name == "gh_div_cor" || item.GetBaseItem().Name == "hblooza14_duckcrn" || item.GetBaseItem().Name == "hween13_dwarfcrn") { if (newRot != 1 && newRot != 3 && newRot != 5 && newRot != 7) { newRot = 0; } } else if (item.GetBaseItem().Name == "val14_b_roof" || item.GetBaseItem().Name == "val14_g_roof" || item.GetBaseItem().Name == "val14_y_roof") { if (newRot != 2 && newRot != 3 && newRot != 4 && newRot != 7) { newRot = 0; } } else if (item.GetBaseItem().Name == "val13_div_1") { if (newRot < 0 || newRot > 6) { newRot = 0; } } else if (item.GetBaseItem().Name == "room_info15_shrub1") { if (newRot != 0 && newRot != 2 && newRot != 3 && newRot != 4 && newRot != 6) { newRot = 0; } } else if (item.GetBaseItem().Name == "room_info15_div") { if (newRot < 0 || newRot > 5) { newRot = 0; } } else { if (newRot != 0 && newRot != 2 && newRot != 4 && newRot != 6 && newRot != 8) { newRot = 0; } } item.Rot = newRot; item.SetState(newX, newY, height, affectedTiles); if (!onRoller && session != null) item.Interactor.OnPlace(session, item); if (newItem) { if (FloorItems.ContainsKey(item.Id)) return true; if (item.IsFloorItem) FloorItems.TryAdd(item.Id, item); else if (item.IsWallItem) WallItems.TryAdd(item.Id, item); AddOrUpdateItem(item.Id); if (sendMessage) { var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AddFloorItemMessageComposer")); item.Serialize(serverMessage); serverMessage.AppendString(_room.RoomData.Group != null ? session.GetHabbo().UserName : _room.RoomData.Owner); _room.SendMessage(serverMessage); } } else { AddOrUpdateItem(item.Id); if (!onRoller && sendMessage) { if (specialMove) { var message = new ServerMessage(LibraryParser.OutgoingRequest("ItemAnimationMessageComposer")); message.AppendInteger(oldCoord.X); message.AppendInteger(oldCoord.Y); message.AppendInteger(newX); message.AppendInteger(newY); message.AppendInteger(1); message.AppendInteger(item.Id); message.AppendString(TextHandling.GetString(item.Z)); message.AppendString(TextHandling.GetString(item.Z)); message.AppendInteger(-1); _room.SendMessage(message); } else { var message = new ServerMessage(LibraryParser.OutgoingRequest("UpdateRoomItemMessageComposer")); item.Serialize(message); _room.SendMessage(message); } } if (item.IsWired) _room.GetWiredHandler().MoveWired(item); } _room.GetGameMap().AddToMap(item); if (item.GetBaseItem().IsSeat) updateRoomUserStatuses = true; if (updateRoomUserStatuses) { _room.GetRoomUserManager().OnUserUpdateStatus(oldCoord.X, oldCoord.Y); _room.GetRoomUserManager().OnUserUpdateStatus(item.X, item.Y); } if (newItem) OnHeightMapUpdate(affectedTiles); return true; }
/// <summary> /// Sets the wall item. /// </summary> /// <param name="session">The session.</param> /// <param name="item">The item.</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> internal bool SetWallItem(GameClient session, RoomItem item) { if (!item.IsWallItem || WallItems.ContainsKey(item.Id)) return false; if (FloorItems.ContainsKey(item.Id)) return true; item.Interactor.OnPlace(session, item); if (item.GetBaseItem().InteractionType == Interaction.Dimmer && _room.MoodlightData == null) { _room.MoodlightData = new MoodlightData(item.Id); item.ExtraData = _room.MoodlightData.GenerateExtraData(); } WallItems.TryAdd(item.Id, item); AddOrUpdateItem(item.Id); var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AddWallItemMessageComposer")); item.Serialize(serverMessage); serverMessage.AppendString(_room.RoomData.Owner); _room.SendMessage(serverMessage); return true; }
/// <summary> /// Sets the floor item. /// </summary> /// <param name="item">The item.</param> /// <param name="newX">The new x.</param> /// <param name="newY">The new y.</param> /// <param name="newZ">The new z.</param> /// <param name="rot">The rot.</param> /// <param name="sendUpdate">if set to <c>true</c> [sendupdate].</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> internal bool SetFloorItem(RoomItem item, int newX, int newY, double newZ, int rot, bool sendUpdate) { _room.GetGameMap().RemoveFromMap(item); item.SetState(newX, newY, newZ, Gamemap.GetAffectedTiles(item.GetBaseItem().Length, item.GetBaseItem().Width, newX, newY, rot)); if (item.GetBaseItem().InteractionType == Interaction.RoomBg && _room.TonerData == null) _room.TonerData = new TonerData(item.Id); AddOrUpdateItem(item.Id); _room.GetGameMap().AddItemToMap(item); if (!sendUpdate) return true; var message = new ServerMessage(LibraryParser.OutgoingRequest("UpdateRoomItemMessageComposer")); item.Serialize(message); _room.SendMessage(message); return true; }
public WebSocketServerManager(string SocketURL) { FleckLog.Level = LogLevel.Error; FleckLog.LogAction = LogWebsocketException; allSockets = new List <IWebSocketConnection>(); socketbyName = new Dictionary <string, IWebSocketConnection>(); namebySocket = new Dictionary <IWebSocketConnection, string>(); server = new WebSocketServer(SocketURL); if (SocketURL.StartsWith("wss://")) { server.Certificate = new System.Security.Cryptography.X509Certificates.X509Certificate2("client.habbo.tl.cert.cer"); } server.Start(socket => { socket.OnOpen = () => { if (allSockets.Contains(socket)) { allSockets.Remove(socket); } allSockets.Add(socket); }; socket.OnClose = () => { string name = ""; if (namebySocket.ContainsKey(socket)) { name = namebySocket[socket].ToString(); namebySocket.Remove(socket); } if (socketbyName.ContainsKey(name) && name != "") { socketbyName.Remove(name); } if (allSockets.Contains(socket)) { allSockets.Remove(socket); } if (name != "") { using (DatabaseClient dbClient = Essential.GetDatabase().GetClient()) { dbClient.AddParamWithValue("name", name); dbClient.ExecuteQuery("UPDATE users SET websocket='0' WHERE username=@name"); } } }; socket.OnMessage = message => { var msg = message; int pId = 0; if (!int.TryParse(msg.Split('|')[0], out pId)) { return; } if (msg.Length > 1024) { return; } if (msg.StartsWith("1|")) { using (DatabaseClient dbClient = Essential.GetDatabase().GetClient()) { dbClient.AddParamWithValue("auth", msg.Substring(2)); DataRow drow = null; drow = dbClient.ReadDataRow("SELECT username FROM users WHERE auth_ticket= @auth LIMIT 1"); if (drow == null) { socket.Close(); } else { if (socketbyName.ContainsKey((string)drow["username"])) { socketbyName.Remove((string)drow["username"]); } socketbyName.Add(drow["username"].ToString(), socket); if (namebySocket.ContainsKey(socket)) { namebySocket.Remove(socket); } namebySocket.Add(socket, drow["username"].ToString()); dbClient.AddParamWithValue("name", drow["username"].ToString()); dbClient.ExecuteQuery("UPDATE users SET websocket='1' WHERE username=@name"); } } } else { GameClient Session = Essential.GetGame().GetClientManager().GetClientByHabbo(GetNameByWebSocket(socket)); Room room = null; string[] args = msg.Split('|'); switch (int.Parse(args[0])) { case 6: { try { room = Essential.GetGame().GetRoomManager().GetRoom(uint.Parse(args[1])); if (Session != null && room != null) { ServerMessage Message = new ServerMessage(Outgoing.RoomForward); Message.AppendBoolean(false); Message.AppendUInt(room.Id); Session.SendMessage(Message); } } catch { } break; } case 7: { try { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, false)) { int ItemId = int.Parse(args[1]); double newZ = double.Parse(args[2]); RoomItem ri = Session.GetHabbo().CurrentRoom.method_28((uint)ItemId); if (ri != null && ri.GetBaseItem().InteractionType == "stackfield") { ri.setHeight(newZ); ServerMessage smg = new ServerMessage(Outgoing.ObjectUpdate); ri.Serialize(smg); Session.GetHabbo().CurrentRoom.SendMessage(smg, null); } } } catch { } break; } case 10: { try { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, false)) { uint itemid = uint.Parse(args[1]); int handitemId = int.Parse(args[2]); RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(itemid); if (ri != null && ri.GetBaseItem().InteractionType == "wf_cnd_has_handitem") { ri.string_2 = handitemId.ToString(); ri.UpdateState(true, false); } } } catch { } break; } case 12: { try { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, false)) { uint itemid = uint.Parse(args[1]); string team = args[2]; RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(itemid); if (ri != null && (ri.GetBaseItem().InteractionType == "wf_cnd_actor_in_team" || ri.GetBaseItem().InteractionType == "wf_cnd_not_in_team") && Session.GetHabbo().CurrentRoom.IsValidTeam(team)) { ri.string_2 = team; ri.UpdateState(true, false); } } } catch { } break; } case 14: { try { Session.GetHabbo().CurrentRoom.method_56(Session.GetHabbo().Username).CarryItem(int.Parse(args[1])); } catch { } break; } case 18: { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true)) { try { RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1])); string BrandData = "state" + Convert.ToChar(9) + "0"; if (ri == null || ri.GetBaseItem().InteractionType != "background") { break; } BrandData = BrandData + Convert.ToChar(9) + "imageUrl" + Convert.ToChar(9) + args[2]; BrandData = BrandData + Convert.ToChar(9) + "offsetX" + Convert.ToChar(9) + int.Parse(args[3]); BrandData = BrandData + Convert.ToChar(9) + "offsetY" + Convert.ToChar(9) + int.Parse(args[4]); BrandData = BrandData + Convert.ToChar(9) + "offsetZ" + Convert.ToChar(9) + int.Parse(args[5]); using (DatabaseClient class2 = Essential.GetDatabase().GetClient()) { class2.AddParamWithValue("extradata", BrandData); class2.ExecuteQuery("UPDATE items_extra_data SET extra_data = @extradata WHERE item_id = '" + uint.Parse(args[1]) + "' LIMIT 1"); } ri.ExtraData = BrandData; Session.GetHabbo().CurrentRoom.method_79(Session, ri, ri.GetX, ri.Int32_1, ri.int_3, false, false, true); ri.UpdateState(true, false, true); } catch (Exception ex) { Core.Logging.LogException(ex.ToString()); } } break; } case 19: { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true)) { try { RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1])); if (ri != null && ri.GetBaseItem().InteractionType == "badge_display") { string Badge = Session.GetHabbo().GetBadgeComponent().HasBadge(args[2]) ? args[2] : "null"; ri.ExtraData = Badge; using (DatabaseClient class2 = Essential.GetDatabase().GetClient()) { class2.AddParamWithValue("extradata", Badge); class2.ExecuteQuery("UPDATE items_extra_data SET extra_data = @extradata WHERE item_id = '" + uint.Parse(args[1]) + "' LIMIT 1"); } Session.GetHabbo().CurrentRoom.method_79(Session, ri, ri.GetX, ri.Int32_1, ri.int_3, false, false, true); ri.UpdateState(true, false, true); } } catch { } } break; } case 21: { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true)) { try { RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1])); if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_bot_follow_avatar") { string username = args[2]; int timeinseconds = 30; if (int.TryParse(args[3], out timeinseconds)) { RoomUser bot = null; foreach (RoomUser ru in Session.GetHabbo().CurrentRoom.RoomUsers) { if (ru != null && ru.IsBot && !ru.IsPet && ru.RoomBot.Name == username) { bot = ru; } } if (bot != null) { ri.string_2 = username + ";" + timeinseconds; } ri.UpdateState(true, false); } } } catch { } } break; } case 23: { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true)) { try { RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1])); if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_bot_give_handitem") { int itemId = 0; if (int.TryParse(args[2], out itemId)) { string username = args[3]; RoomUser bot = null; foreach (RoomUser ru in Session.GetHabbo().CurrentRoom.RoomUsers) { if (ru != null && ru.IsBot && !ru.IsPet && ru.RoomBot.Name == username) { bot = ru; } } if (bot != null) { ri.string_2 = itemId + ";" + username; } ri.UpdateState(true, false); } } } catch { } } break; } case 25: { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true)) { try { RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1])); if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_bot_talk" && args[4].Length < 200) { string username = args[2]; string type = (args[3] == "shout" || args[3] == "say") ? args[3] : "say"; string text = args[4]; RoomUser bot = null; foreach (RoomUser ru in Session.GetHabbo().CurrentRoom.RoomUsers) { if (ru != null && ru.IsBot && !ru.IsPet && ru.RoomBot.Name == username) { bot = ru; } } if (bot != null) { ri.string_2 = username + ";" + type + ";" + text; } ri.UpdateState(true, false); } } catch (Exception ex) { Logging.LogException(ex.ToString()); } } break; } case 26: { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true)) { try { RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1])); if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_bot_talk_to_avatar" && args[4].Length < 200) { string username = args[2]; string type = (args[3] == "whisper" || args[3] == "say") ? args[3] : "say"; string text = args[4]; RoomUser bot = null; foreach (RoomUser ru in Session.GetHabbo().CurrentRoom.RoomUsers) { if (ru != null && ru.IsBot && !ru.IsPet && ru.RoomBot.Name == username) { bot = ru; } } if (bot != null) { ri.string_2 = username + ";" + type + ";" + text; } ri.UpdateState(true, false); } } catch (Exception ex) { Logging.LogException(ex.ToString()); } } break; } case 28: { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true)) { try { RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1])); if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_bot_clothes") { string username = args[2]; string newlook = args[3]; string gender = args[4]; RoomUser bot = null; foreach (RoomUser ru in Session.GetHabbo().CurrentRoom.RoomUsers) { if (ru != null && ru.IsBot && !ru.IsPet && ru.RoomBot.Name == username) { bot = ru; } } if (bot != null && AntiMutant.ValidateLook(newlook, gender)) { ri.string_2 = username + ";" + newlook + ";" + gender; } ri.UpdateState(true, false); } } catch { } } break; } case 32: { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true)) { try { RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1])); if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_yt") { string ytlink = args[2].Split('=')[1]; ri.string_2 = ytlink; ri.UpdateState(true, false); } } catch { } } break; } case 35: { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true)) { try { RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1])); if (ri != null && (ri.GetBaseItem().InteractionType == "wf_cnd_has_purse" || ri.GetBaseItem().InteractionType == "wf_cnd_hasnot_purse")) { string currency = Session.GetHabbo().CurrentRoom.IsValidCurrency(args[2]) ? args[2] : "credits"; int number = 1337; int.TryParse(args[3], out number); ri.string_2 = currency + ";" + number; ri.UpdateState(true, false); } } catch { } } break; } case 36: { if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true)) { try { RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1])); if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_img" && IsValidFile(args[2])) { ri.string_2 = args[2]; ri.UpdateState(true, false); } } catch { } } break; } } } }; }); }
internal bool SetFloorItem(RoomItem Item, int newX, int newY, double newZ, int rot, bool sendupdate) { this.room.GetGameMap().RemoveFromMap(Item); Item.SetState(newX, newY, newZ, Gamemap.GetAffectedTiles(Item.GetBaseItem().InteractionType, Item.GetBaseItem().Length, Item.GetBaseItem().Width, newX, newY, rot)); if (Item.GetBaseItem().InteractionType == InteractionType.roombg && this.room.TonerData == null) { this.room.TonerData = new TonerData(Item.Id); } this.UpdateItem(Item); this.room.GetGameMap().AddItemToMap(Item, true); if (sendupdate) { ServerMessage message = new ServerMessage(Outgoing.UpdateRoomItemMessageComposer); Item.Serialize(message); this.room.SendMessage(message); } return true; }
internal bool SetFloorItem(GameClient Session, RoomItem Item, int newX, int newY, int newRot, bool newItem, bool OnRoller, bool sendMessage, bool updateRoomUserStatuses) { bool NeedsReAdd = false; if (!newItem) { NeedsReAdd = room.GetGameMap().RemoveFromMap(Item); } Dictionary <int, ThreeDCoord> AffectedTiles = GameMap.GetAffectedTiles(Item.GetBaseItem().Length, Item.GetBaseItem().Width, newX, newY, newRot); if (!room.GetGameMap().ValidTile(newX, newY) || room.GetGameMap().SquareHasUsers(newX, newY) && !Item.GetBaseItem().IsSeat) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return(false); } foreach (ThreeDCoord Tile in AffectedTiles.Values) { if (!room.GetGameMap().ValidTile(Tile.X, Tile.Y) || (room.GetGameMap().SquareHasUsers(Tile.X, Tile.Y) && !Item.GetBaseItem().IsSeat)) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return(false); } } // Start calculating new Z coordinate Double newZ = room.GetGameMap().Model.SqFloorHeight[newX, newY]; if (!OnRoller) { // Is the item trying to stack on itself!? //if (Item.Rot == newRot && Item.GetX == newX && Item.GetY == newY && Item.GetZ != newZ) //{ // if (NeedsReAdd) // AddItem(Item); // return false; //} // Make sure this tile is open and there are no users here if (room.GetGameMap().Model.SqState[newX, newY] != SquareState.OPEN && !Item.GetBaseItem().IsSeat) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return(false); } foreach (ThreeDCoord Tile in AffectedTiles.Values) { if (room.GetGameMap().Model.SqState[Tile.X, Tile.Y] != SquareState.OPEN && !Item.GetBaseItem().IsSeat) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return(false); } } // And that we have no users if (!Item.GetBaseItem().IsSeat&& !Item.IsRoller) { foreach (ThreeDCoord Tile in AffectedTiles.Values) { if (room.GetGameMap().GetRoomUnits(new Point(Tile.X, Tile.Y)).Count > 0) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return(false); } } } } // Find affected objects List <RoomItem> ItemsOnTile = GetFurniObjects(newX, newY); List <RoomItem> ItemsAffected = new List <RoomItem>(); List <RoomItem> ItemsComplete = new List <RoomItem>(); foreach (ThreeDCoord Tile in AffectedTiles.Values) { List <RoomItem> Temp = GetFurniObjects(Tile.X, Tile.Y); if (Temp != null) { ItemsAffected.AddRange(Temp); } } ItemsComplete.AddRange(ItemsOnTile); ItemsComplete.AddRange(ItemsAffected); if (!OnRoller) { // Check for items in the stack that do not allow stacking on top of them foreach (RoomItem I in ItemsComplete) { if (I == null) { continue; } if (I.Id == Item.Id) { continue; } if (I.GetBaseItem() == null) { continue; } if (!I.GetBaseItem().Stackable) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return(false); } } } //if (!Item.IsRoller) { // If this is a rotating action, maintain item at current height if (Item.Rot != newRot && Item.GetX == newX && Item.GetY == newY) { newZ = Item.GetZ; } // Are there any higher objects in the stack!? foreach (RoomItem I in ItemsComplete) { if (I.Id == Item.Id) { continue; // cannot stack on self } if (I.TotalHeight > newZ) { newZ = I.TotalHeight; } } } // Verify the rotation is correct //if (newRot != 0 && newRot != 2 && newRot != 4 && newRot != 6 && newRot != 8) //{ // newRot = 0; //} //Item.GetX = newX; //Item.GetY = newY; //Item.GetZ = newZ; Item.Rot = newRot; int oldX = Item.GetX; int oldY = Item.GetY; Item.SetState(newX, newY, newZ, AffectedTiles); if (!OnRoller && Session != null) { Item.Interactor.OnPlace(Session, Item); } if (newItem) { if (mFloorItems.ContainsKey(Item.Id)) { if (Session != null) { Session.SendNotif(LanguageLocale.GetValue("room.itemplaced")); } //Remove from map!!! return(true); } /*else if (mFloorItems.ContainsKey(Item.Id) && Item.MagicRemove) * { * RemoveFurniture(Session, Item.Id); * if (mFloorItems.ContainsKey(Item.Id)) * { * Logging.WriteLine("lul?"); * mFloorItems.Remove(Item.Id); * } * }*/ //using (DatabaseClient dbClient = FirewindEnvironment.GetDatabase().GetClient()) //{ // dbClient.addParameter("extra_data", ((StringData)Item.data).Data); // dbClient.runFastQuery("INSERT INTO room_items (id,room_id,base_item,extra_data,x,y,z,rot,wall_pos) VALUES ('" + Item.Id + "','" + RoomId + "','" + Item.BaseItem + "',@extra_data,'" + Item.GetX + "','" + Item.GetY + "','" + Item.GetZ + "','" + Item.Rot + "','')"); //} //if (mRemovedItems.ContainsKey(Item.Id)) // mRemovedItems.Remove(Item.Id); //if (mAddedItems.ContainsKey(Item.Id)) // return false; //mAddedItems.Add(Item.Id, Item); if (Item.IsFloorItem && !mFloorItems.ContainsKey(Item.Id)) { mFloorItems.Add(Item.Id, Item); } else if (Item.IsWallItem && !mWallItems.ContainsKey(Item.Id)) { mWallItems.Add(Item.Id, Item); } AddItem(Item); if (sendMessage) { ServerMessage Message = new ServerMessage(Outgoing.ObjectAdd); Item.Serialize(Message, room.OwnerId); Message.AppendString(room.Owner); room.SendMessage(Message); } } else { //using (DatabaseClient dbClient = FirewindEnvironment.GetDatabase().GetClient()) //{ // dbClient.runFastQuery("UPDATE room_items SET x = '" + Item.GetX + "', y = '" + Item.GetY + "', z = '" + Item.GetZ + "', rot = '" + Item.Rot + "', wall_pos = '' WHERE id = '" + Item.Id + "' LIMIT 1"); //} UpdateItem(Item); if (!OnRoller && sendMessage) { ServerMessage Message = new ServerMessage(Outgoing.ObjectUpdate); Item.Serialize(Message, room.OwnerId); //Message.AppendString(room.Owner); room.SendMessage(Message); } } if (!newItem) { room.GetWiredHandler().RemoveWiredItem(new System.Drawing.Point(oldX, oldY)); if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType)) { room.GetWiredHandler().AddWire(Item, new System.Drawing.Point(newX, newY), newRot, Item.GetBaseItem().InteractionType); } } else { if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType)) { room.GetWiredHandler().AddWire(Item, Item.Coordinate, newRot, Item.GetBaseItem().InteractionType); } } //GenerateMaps(false); room.GetGameMap().AddToMap(Item); if (Item.GetBaseItem().IsSeat) { updateRoomUserStatuses = true; } if (updateRoomUserStatuses) { room.GetRoomUserManager().UpdateUserStatuses(); } return(true); }
internal bool SetFloorItem(GameClient Session, RoomItem Item, int newX, int newY, int newRot, bool newItem, bool OnRoller, bool sendMessage, bool updateRoomUserStatuses) { bool NeedsReAdd = false; if (!newItem) NeedsReAdd = room.GetGameMap().RemoveFromMap(Item); Dictionary<int, ThreeDCoord> AffectedTiles = Gamemap.GetAffectedTiles(Item.GetBaseItem().Length, Item.GetBaseItem().Width, newX, newY, newRot); if (!room.GetGameMap().ValidTile(newX, newY) || (room.GetGameMap().SquareHasUsers(newX, newY) && !(Item.GetBaseItem().IsSeat || Item.GetBaseItem().Walkable))) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } foreach (ThreeDCoord Tile in AffectedTiles.Values) { if (!room.GetGameMap().ValidTile(Tile.X, Tile.Y) || (room.GetGameMap().SquareHasUsers(newX, newY) && !(Item.GetBaseItem().IsSeat || Item.GetBaseItem().Walkable))) //|| room.GetGameMap().SquareHasUsers(Tile.X, Tile.Y) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } } // Start calculating new Z coordinate Double newZ = room.GetGameMap().Model.SqFloorHeight[newX, newY]; if (!OnRoller) { // Is the item trying to stack on itself!? //if (Item.Rot == newRot && Item.GetX == newX && Item.GetY == newY && Item.GetZ != newZ) //{ // if (NeedsReAdd) // AddItem(Item); // return false; //} // Make sure this tile is open and there are no users here if (room.GetGameMap().Model.SqState[newX, newY] != SquareState.OPEN) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } foreach (ThreeDCoord Tile in AffectedTiles.Values) { if (room.GetGameMap().Model.SqState[Tile.X, Tile.Y] != SquareState.OPEN) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } } // And that we have no users if (!Item.GetBaseItem().IsSeat && !Item.IsRoller) { int coord; foreach (ThreeDCoord Tile in AffectedTiles.Values) { coord = TextHandling.CombineXYCoord(Tile.X, Tile.Y); if (room.GetGameMap().GetRoomUsers(ref coord).Count > 0) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } } } } // Find affected objects List<RoomItem> ItemsOnTile = GetFurniObjects(newX, newY); List<RoomItem> ItemsAffected = new List<RoomItem>(); List<RoomItem> ItemsComplete = new List<RoomItem>(); foreach (ThreeDCoord Tile in AffectedTiles.Values) { List<RoomItem> Temp = GetFurniObjects(Tile.X, Tile.Y); if (Temp != null) { ItemsAffected.AddRange(Temp); } } ItemsComplete.AddRange(ItemsOnTile); ItemsComplete.AddRange(ItemsAffected); bool containsstacktitle = false; bool isnotstackble = false; if (!OnRoller) { // Check for items in the stack that do not allow stacking on top of them foreach (RoomItem I in ItemsComplete) { if (I == null) continue; if (I.Id == Item.Id) { continue; } if (I.GetBaseItem() == null) continue; if (I.GetBaseItem().InteractionType == InteractionType.magictile) containsstacktitle = true; if (!I.GetBaseItem().Stackable) { isnotstackble = true; } } } if (isnotstackble && !containsstacktitle && Item.GetBaseItem().InteractionType != InteractionType.magictile) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } //if (!Item.IsRoller) { // If this is a rotating action, maintain item at current height if (Item.Rot != newRot && Item.GetX == newX && Item.GetY == newY) { newZ = Item.GetZ; } double StacktitleZ = 99998; // Are there any higher objects in the stack!? foreach (RoomItem I in ItemsComplete) { if (I.Id == Item.Id) { continue; // cannot stack on self } if (I.TotalHeight > newZ) { newZ = I.TotalHeight; } if (I.GetBaseItem().InteractionType == InteractionType.magictile) { StacktitleZ = I.TotalHeight; } } if (StacktitleZ != 99998) newZ = StacktitleZ; } // Verify the rotation is valid if (Item.GetBaseItem().InteractionType == InteractionType.mannequin) { if (newRot < 0 || newRot > 12) newRot = 0; } else { if (newRot < 0 || newRot > 12 || newRot % 2 != 0) newRot = 0; } //Item.GetX = newX; //Item.GetY = newY; //Item.GetZ = newZ; Item.Rot = newRot; int oldX = Item.GetX; int oldY = Item.GetY; Item.SetState(newX, newY, newZ, AffectedTiles); if (!OnRoller && Session != null) Item.Interactor.OnPlace(Session, Item); if (newItem) { if (mFloorItems.ContainsKey(Item.Id)) { if (Session != null) Session.SendNotif("Oeps! Er is iets mis gegaan, probeer het opnieuw!\r\r<b>Beschrijving:</b>\rJe hebt dit Meubi al eerder in je kamer geplaatst."); return true; } if (Item.IsFloorItem && !mFloorItems.ContainsKey(Item.Id)) mFloorItems.Add(Item.Id, Item); else if (Item.IsWallItem && !mWallItems.ContainsKey(Item.Id)) mWallItems.Add(Item.Id, Item); AddItem(Item); if (sendMessage) { ServerMessage Message = PacketHandelingManager.GetRecycledItem(OutputCode.ObjectAddMessageEvent); Item.Serialize(Message); Message.AddString(room.Owner); room.SendMessage(Message); } } else { UpdateItem(Item); if (!OnRoller && sendMessage) { ServerMessage Message = PacketHandelingManager.GetRecycledItem(OutputCode.ObjectUpdateMessageEvent); Item.Serialize(Message); room.SendMessage(Message); } } if (Item.wiredCondition != null) { room.GetWiredHandler().conditionHandler.AddOrIgnoreRefferance(Item); } if (!newItem) { room.GetWiredHandler().RemoveWiredItem(new Point(oldX, oldY)); if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType)) { room.GetWiredHandler().AddWire(Item, new Point(newX, newY), newRot, Item.GetBaseItem().InteractionType); } } else { if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType)) { room.GetWiredHandler().AddWire(Item, Item.Coordinate, newRot, Item.GetBaseItem().InteractionType); } } //GenerateMaps(false); room.GetGameMap().AddToMap(Item); if (updateRoomUserStatuses) room.GetRoomUserManager().UpdateUserStatusses(); return true; }
internal void PlaceBuildersFurniture() { Request.GetInteger(); var itemId = Convert.ToUInt32(Request.GetInteger()); var extradata = Request.GetString(); var x = Request.GetInteger(); var y = Request.GetInteger(); var dir = Request.GetInteger(); var actualRoom = Session.GetHabbo().CurrentRoom; var item = AzureEmulator.GetGame().GetCatalog().GetItem(itemId); if (actualRoom == null || item == null) return; Session.GetHabbo().BuildersItemsUsed++; BuildersClubUpdateFurniCount(); var z = actualRoom.GetGameMap().SqAbsoluteHeight(x, y); using (var adapter = AzureEmulator.GetDatabaseManager().GetQueryReactor()) { adapter.SetQuery( "INSERT INTO items_rooms (user_id,room_id,base_item,x,y,z,rot,builders) VALUES (@userId,@roomId,@baseItem,@x,@y,@z,@rot,'1')"); adapter.AddParameter("userId", Session.GetHabbo().Id); adapter.AddParameter("roomId", actualRoom.RoomId); adapter.AddParameter("baseItem", item.BaseId); adapter.AddParameter("x", x); adapter.AddParameter("y", y); adapter.AddParameter("z", z); adapter.AddParameter("rot", dir); var insertId = (uint)adapter.InsertQuery(); var newItem = new RoomItem(insertId, actualRoom.RoomId, item.BaseId, extradata, x, y, z, dir, actualRoom, Session.GetHabbo().Id, 0, item.GetFirstBaseItem().FlatId, "", true); Session.GetHabbo().BuildersItemsUsed++; actualRoom.GetRoomItemHandler().FloorItems.TryAdd(newItem.Id, newItem); var message = new ServerMessage(LibraryParser.OutgoingRequest("AddFloorItemMessageComposer")); newItem.Serialize(message); message.AppendString(Session.GetHabbo().UserName); actualRoom.SendMessage(message); actualRoom.GetGameMap().AddItemToMap(newItem); } }
internal bool SetFloorItem(GameClient Session, RoomItem Item, int newX, int newY, int newRot, bool newItem, bool OnRoller, bool sendMessage, bool updateRoomUserStatuses) { bool NeedsReAdd = false; if (!newItem) NeedsReAdd = room.GetGameMap().RemoveFromMap(Item); Dictionary<int, ThreeDCoord> AffectedTiles = Gamemap.GetAffectedTiles(Item.GetBaseItem().Length, Item.GetBaseItem().Width, newX, newY, newRot); if (!room.GetGameMap().ValidTile(newX, newY) || room.GetGameMap().SquareHasUsers(newX, newY)) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } foreach (ThreeDCoord Tile in AffectedTiles.Values) { if (!room.GetGameMap().ValidTile(Tile.X, Tile.Y) || room.GetGameMap().SquareHasUsers(Tile.X, Tile.Y)) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } } // Start calculating new Z coordinate Double newZ = room.GetGameMap().Model.SqFloorHeight[newX, newY]; if (!OnRoller) { // Is the item trying to stack on itself!? //if (Item.Rot == newRot && Item.GetX == newX && Item.GetY == newY && Item.GetZ != newZ) //{ // if (NeedsReAdd) // AddItem(Item); // return false; //} // Make sure this tile is open and there are no users here if (room.GetGameMap().Model.SqState[newX, newY] != SquareState.OPEN) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } foreach (ThreeDCoord Tile in AffectedTiles.Values) { if (room.GetGameMap().Model.SqState[Tile.X, Tile.Y] != SquareState.OPEN) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } } // And that we have no users if (!Item.GetBaseItem().IsSeat && !Item.IsRoller) { foreach (ThreeDCoord Tile in AffectedTiles.Values) { if (room.GetGameMap().GetRoomUsers(new Point(Tile.X, Tile.Y)).Count > 0) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } } } } // Find affected objects List<RoomItem> ItemsOnTile = GetFurniObjects(newX, newY); List<RoomItem> ItemsAffected = new List<RoomItem>(); List<RoomItem> ItemsComplete = new List<RoomItem>(); foreach (ThreeDCoord Tile in AffectedTiles.Values) { List<RoomItem> Temp = GetFurniObjects(Tile.X, Tile.Y); if (Temp != null) { ItemsAffected.AddRange(Temp); } } ItemsComplete.AddRange(ItemsOnTile); ItemsComplete.AddRange(ItemsAffected); if (!OnRoller) { // Check for items in the stack that do not allow stacking on top of them foreach (RoomItem I in ItemsComplete) { if (I == null) continue; if (I.Id == Item.Id) { continue; } if (I.GetBaseItem() == null) continue; if (!I.GetBaseItem().Stackable) { if (NeedsReAdd) { AddItem(Item); room.GetGameMap().AddToMap(Item); } return false; } } } //if (!Item.IsRoller) { // If this is a rotating action, maintain item at current height if (Item.Rot != newRot && Item.GetX == newX && Item.GetY == newY) { newZ = Item.GetZ; } // Are there any higher objects in the stack!? foreach (RoomItem I in ItemsComplete) { if (I.Id == Item.Id) { continue; // cannot stack on self } if (I.TotalHeight > newZ) { newZ = I.TotalHeight; } } } // Verify the rotation is correct if (newRot != 0 && newRot != 2 && newRot != 4 && newRot != 6 && newRot != 8) { newRot = 0; } //Item.GetX = newX; //Item.GetY = newY; //Item.GetZ = newZ; Item.Rot = newRot; int oldX = Item.GetX; int oldY = Item.GetY; Item.SetState(newX, newY, newZ, AffectedTiles); if (!OnRoller && Session != null) Item.Interactor.OnPlace(Session, Item); if (newItem) { if (mFloorItems.ContainsKey(Item.Id)) { if (Session != null) Session.SendNotif(LanguageLocale.GetValue("room.itemplaced")); //Remove from map!!! return true; } //using (DatabaseClient dbClient = PiciEnvironment.GetDatabase().GetClient()) //{ // dbClient.addParameter("extra_data", Item.ExtraData); // dbClient.runFastQuery("INSERT INTO room_items (id,room_id,base_item,extra_data,x,y,z,rot,wall_pos) VALUES ('" + Item.Id + "','" + RoomId + "','" + Item.BaseItem + "',@extra_data,'" + Item.GetX + "','" + Item.GetY + "','" + Item.GetZ + "','" + Item.Rot + "','')"); //} //if (mRemovedItems.ContainsKey(Item.Id)) // mRemovedItems.Remove(Item.Id); //if (mAddedItems.ContainsKey(Item.Id)) // return false; //mAddedItems.Add(Item.Id, Item); if (Item.IsFloorItem && !mFloorItems.ContainsKey(Item.Id)) mFloorItems.Add(Item.Id, Item); else if (Item.IsWallItem && !mWallItems.ContainsKey(Item.Id)) mWallItems.Add(Item.Id, Item); AddItem(Item); if (sendMessage) { ServerMessage Message = new ServerMessage(93); Item.Serialize(Message); room.SendMessage(Message); } } else { //using (DatabaseClient dbClient = PiciEnvironment.GetDatabase().GetClient()) //{ // dbClient.runFastQuery("UPDATE room_items SET x = '" + Item.GetX + "', y = '" + Item.GetY + "', z = '" + Item.GetZ + "', rot = '" + Item.Rot + "', wall_pos = '' WHERE id = '" + Item.Id + "' LIMIT 1"); //} UpdateItem(Item); if (!OnRoller && sendMessage) { ServerMessage Message = new ServerMessage(95); Item.Serialize(Message); room.SendMessage(Message); } } if (!newItem) { room.GetWiredHandler().RemoveWiredItem(new System.Drawing.Point(oldX, oldY)); if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType)) { room.GetWiredHandler().AddWire(Item, new System.Drawing.Point(newX, newY), newRot, Item.GetBaseItem().InteractionType); } } else { if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType)) { room.GetWiredHandler().AddWire(Item, Item.Coordinate, newRot, Item.GetBaseItem().InteractionType); } } //GenerateMaps(false); room.GetGameMap().AddToMap(Item); if (updateRoomUserStatuses) room.GetRoomUserManager().UpdateUserStatusses(); return true; }
internal void PlaceBuildersFurniture() { Request.GetInteger(); uint itemId = Convert.ToUInt32(Request.GetInteger()); string extradata = Request.GetString(); int x = Request.GetInteger(); int y = Request.GetInteger(); int dir = Request.GetInteger(); Room actualRoom = Session.GetHabbo().CurrentRoom; CatalogItem item = Yupi.GetGame().GetCatalog().GetItem(itemId); if (actualRoom == null || item == null) return; Session.GetHabbo().BuildersItemsUsed++; BuildersClubUpdateFurniCount(); double z = actualRoom.GetGameMap().SqAbsoluteHeight(x, y); using (IQueryAdapter adapter = Yupi.GetDatabaseManager().GetQueryReactor()) { adapter.SetQuery( "INSERT INTO items_rooms (user_id,room_id,item_name,x,y,z,rot,builders) VALUES (@userId,@roomId,@itemName,@x,@y,@z,@rot,'1')"); adapter.AddParameter("userId", Session.GetHabbo().Id); adapter.AddParameter("roomId", actualRoom.RoomId); adapter.AddParameter("itemName", item.BaseName); adapter.AddParameter("x", x); adapter.AddParameter("y", y); adapter.AddParameter("z", z); adapter.AddParameter("rot", dir); uint insertId = (uint) adapter.InsertQuery(); RoomItem newItem = new RoomItem(insertId, actualRoom.RoomId, item.BaseName, extradata, x, y, z, dir, actualRoom, Session.GetHabbo().Id, 0, string.Empty, true); Session.GetHabbo().BuildersItemsUsed++; actualRoom.GetRoomItemHandler().FloorItems.TryAdd(newItem.Id, newItem); ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("AddFloorItemMessageComposer")); newItem.Serialize(message); message.AppendString(Session.GetHabbo().UserName); actualRoom.SendMessage(message); actualRoom.GetGameMap().AddItemToMap(newItem); } }
internal void PlaceItem() { // AZ@J16 10 10 0 Room Room = FirewindEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId); if (Room == null || !Room.CheckRights(Session)) { return; } string PlacementData = Request.ReadString(); string[] DataBits = PlacementData.Split(' '); uint ItemId = uint.Parse(DataBits[0].Replace("-","")); UserItem Item = Session.GetHabbo().GetInventoryComponent().GetItem(ItemId); if (Item == null) { return; } //bool UpdateNeeded = false; switch (Item.GetBaseItem().InteractionType) { case Firewind.HabboHotel.Items.InteractionType.dimmer: { MoodlightData moodData = Room.MoodlightData; if (moodData != null && Room.GetRoomItemHandler().GetItem(moodData.ItemId) != null) Session.SendNotif(LanguageLocale.GetValue("user.maxmoodlightsreached")); break; } } // Wall Item if (DataBits[1].StartsWith(":")) { try { WallCoordinate coordinate = new WallCoordinate(":" + PlacementData.Split(':')[1]); RoomItem RoomItem = new RoomItem(Item.Id, Room.RoomId, Item.BaseItem, Item.Data, Item.Extra, coordinate, Room); if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId, true); } } catch { // Invalid wallitem /* Response.Init(516); Response.AppendInt32(11); SendResponse();*/ return; } } // Floor Item else { int X = int.Parse(DataBits[1]); int Y = int.Parse(DataBits[2]); int Rot = int.Parse(DataBits[3]); if (Session.GetHabbo().forceRot > -1) Rot = Session.GetHabbo().forceRot; RoomItem RoomItem = new RoomItem(Item.Id, Room.RoomId, Item.BaseItem, Item.Data, Item.Extra, X, Y, 0, Rot, Room); if (Room.GetRoomItemHandler().SetFloorItem(Session, RoomItem, X, Y, Rot, true, false, true)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId, true); } else // Placing failed, tell client to put item back { Response.Init(Outgoing.ObjectUpdate); RoomItem.Serialize(Response, Room.OwnerId); SendResponse(); return; } if (WiredUtillity.TypeIsWired(Item.GetBaseItem().InteractionType)) { WiredSaver.HandleDefaultSave(Item.Id, Room); } FirewindEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.FURNI_PLACE); } //if (UpdateNeeded) // Room.SaveFurniture(); }
internal bool SetWallItem(GameClient Session, RoomItem Item) { if (!Item.IsWallItem || mWallItems.ContainsKey(Item.Id)) return false; if (mFloorItems.ContainsKey(Item.Id)) { Session.SendNotif("Oeps! Er is iets mis gegaan, probeer het opnieuw!\r\r<b>Beschrijving:</b>\rJe hebt dit Meubi al eerder in je kamer geplaatst."); return true; } Item.Interactor.OnPlace(Session, Item); if (Item.GetBaseItem().InteractionType == InteractionType.dimmer) { if (room.MoodlightData == null) { room.MoodlightData = new MoodlightData(Item.Id); Item.ExtraData = room.MoodlightData.GenerateExtraData(); } } mWallItems.Add(Item.Id, Item); AddItem(Item); ServerMessage Message = PacketHandelingManager.GetRecycledItem(OutputCode.ItemWallAddMessageEvent); Item.Serialize(Message); Message.AddString(room.Owner); room.SendMessage(Message); return true; }
internal bool SetWallItem(GameClient Session, RoomItem Item) { if (!Item.IsWallItem || this.mWallItems.ContainsKey(Item.Id)) { return false; } if (this.mFloorItems.ContainsKey(Item.Id)) { return true; } Item.Interactor.OnPlace(Session, Item); if (Item.GetBaseItem().InteractionType == InteractionType.dimmer && this.room.MoodlightData == null) { this.room.MoodlightData = new MoodlightData(Item.Id); Item.ExtraData = this.room.MoodlightData.GenerateExtraData(); } this.mWallItems.Add(Item.Id, Item); this.AddItem(Item); ServerMessage serverMessage = new ServerMessage(Outgoing.AddWallItemMessageComposer); Item.Serialize(serverMessage); serverMessage.AppendString(this.room.Owner); this.room.SendMessage(serverMessage); return true; }
internal void DeveloperSetFloorItem(GameClient session, RoomItem item) { if (FloorItems.ContainsKey(item.Id)) return; FloorItems.TryAdd(item.Id, item); AddOrUpdateItem(item.Id); var affectedTiles = Gamemap.GetAffectedTiles(item.GetBaseItem().Length, item.GetBaseItem().Width, item.X, item.Y, item.Rot); item.SetState(item.X, item.Y, item.Z, affectedTiles); var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AddFloorItemMessageComposer")); item.Serialize(serverMessage); serverMessage.AppendString(_room.RoomData.Group != null ? session.GetHabbo().UserName : _room.RoomData.Owner); _room.SendMessage(serverMessage); _room.GetGameMap().AddToMap(item); }
internal void PlaceBuildersWallItem() { /*var pageId = */ Request.GetInteger(); var itemId = Request.GetUInteger(); var extradata = Request.GetString(); var wallcoords = Request.GetString(); var actualRoom = Session.GetHabbo().CurrentRoom; var item = AzureEmulator.GetGame().GetCatalog().GetItem(itemId); if (actualRoom == null || item == null) return; Session.GetHabbo().BuildersItemsUsed++; BuildersClubUpdateFurniCount(); using (var adapter = AzureEmulator.GetDatabaseManager().GetQueryReactor()) { adapter.SetQuery( "INSERT INTO items_rooms (user_id,room_id,base_item,wall_pos,builders) VALUES (@userId,@roomId,@baseItem,@wallpos,'1')"); adapter.AddParameter("userId", Session.GetHabbo().Id); adapter.AddParameter("roomId", actualRoom.RoomId); adapter.AddParameter("baseItem", item.BaseId); adapter.AddParameter("wallpos", wallcoords); var insertId = (uint)adapter.InsertQuery(); var newItem = new RoomItem(insertId, actualRoom.RoomId, item.BaseId, extradata, new WallCoordinate(wallcoords), actualRoom, Session.GetHabbo().Id, 0, item.GetFirstBaseItem().FlatId, true); actualRoom.GetRoomItemHandler().WallItems.TryAdd(newItem.Id, newItem); var message = new ServerMessage(LibraryParser.OutgoingRequest("AddWallItemMessageComposer")); newItem.Serialize(message); message.AppendString(Session.GetHabbo().UserName); Session.SendMessage(message); actualRoom.GetGameMap().AddItemToMap(newItem); } }
internal bool SetWallItem(GameClient Session, RoomItem Item) { if (!Item.IsWallItem || mWallItems.ContainsKey(Item.Id)) return false; if (mFloorItems.ContainsKey(Item.Id)) { Session.SendNotif(LanguageLocale.GetValue("room.itemplaced")); return true; } Item.Interactor.OnPlace(Session, Item); if (Item.GetBaseItem().InteractionType == InteractionType.dimmer) { if (room.MoodlightData == null) { room.MoodlightData = new MoodlightData(Item.Id); Item.ExtraData = room.MoodlightData.GenerateExtraData(); } } mWallItems.Add(Item.Id, Item); AddItem(Item); ServerMessage Message = new ServerMessage(83); Item.Serialize(Message); room.SendMessage(Message); return true; }
internal bool SetFloorItem(GameClient Session, RoomItem Item, int newX, int newY, int newRot, bool newItem, bool OnRoller, bool sendMessage, bool updateRoomUserStatuses) { bool flag = false; if (!newItem) { flag = this.room.GetGameMap().RemoveFromMap(Item); } Dictionary<int, ThreeDCoord> affectedTiles = Gamemap.GetAffectedTiles(Item.GetBaseItem().InteractionType, Item.GetBaseItem().Length, Item.GetBaseItem().Width, newX, newY, newRot); if (!this.room.GetGameMap().ValidTile(newX, newY) || (this.room.GetGameMap().SquareHasUsers(newX, newY) && !Item.GetBaseItem().IsSeat)) { if (flag) { this.AddItem(Item); this.room.GetGameMap().AddToMap(Item); } return false; } foreach (ThreeDCoord current in affectedTiles.Values) { if (!this.room.GetGameMap().ValidTile(current.X, current.Y) || (this.room.GetGameMap().SquareHasUsers(current.X, current.Y) && !Item.GetBaseItem().IsSeat)) { if (flag) { this.AddItem(Item); this.room.GetGameMap().AddToMap(Item); } bool result = false; return result; } } double num = (double)this.room.GetGameMap().Model.SqFloorHeight[newX, newY]; if (!OnRoller) { if (this.room.GetGameMap().Model.SqState[newX, newY] != SquareState.OPEN && !Item.GetBaseItem().IsSeat) { if (flag) { this.AddItem(Item); if (newItem) { this.room.GetGameMap().AddToMap(Item); } } return false; } foreach (ThreeDCoord current2 in affectedTiles.Values) { if (this.room.GetGameMap().Model.SqState[current2.X, current2.Y] != SquareState.OPEN && !Item.GetBaseItem().IsSeat) { if (flag) { this.AddItem(Item); this.room.GetGameMap().AddToMap(Item); } bool result = false; return result; } } if (!Item.GetBaseItem().IsSeat && !Item.IsRoller) { foreach (ThreeDCoord current3 in affectedTiles.Values) { if (this.room.GetGameMap().GetRoomUsers(new Point(current3.X, current3.Y)).Count > 0) { if (flag) { this.AddItem(Item); this.room.GetGameMap().AddToMap(Item); } bool result = false; return result; } } } } List<RoomItem> furniObjects = this.GetFurniObjects(newX, newY); List<RoomItem> list = new List<RoomItem>(); List<RoomItem> list2 = new List<RoomItem>(); foreach (ThreeDCoord current4 in affectedTiles.Values) { List<RoomItem> furniObjects2 = this.GetFurniObjects(current4.X, current4.Y); if (furniObjects2 != null) { list.AddRange(furniObjects2); } } list2.AddRange(furniObjects); list2.AddRange(list); if (!OnRoller) { foreach (RoomItem current5 in list2) { if (current5 != null && current5.Id != Item.Id && current5.GetBaseItem() != null && !current5.GetBaseItem().Stackable) { if (flag) { this.AddItem(Item); this.room.GetGameMap().AddToMap(Item); } bool result = false; return result; } } } if (Item.Rot != newRot && Item.GetX == newX && Item.GetY == newY) { num = Item.GetZ; } foreach (RoomItem current6 in list2) { if (current6.Id != Item.Id && current6.TotalHeight > num) { num = current6.TotalHeight; } } if (newRot != 0 && newRot != 2 && newRot != 4 && newRot != 6 && newRot != 8 && Item.GetBaseItem().InteractionType != InteractionType.mannequin) { newRot = 0; } Item.Rot = newRot; int arg_47A_0 = Item.GetX; int arg_481_0 = Item.GetY; Item.SetState(newX, newY, num, affectedTiles); if (!OnRoller && Session != null) { Item.Interactor.OnPlace(Session, Item); } if (newItem) { if (this.mFloorItems.ContainsKey(Item.Id)) { return true; } if (Item.IsFloorItem && !this.mFloorItems.ContainsKey(Item.Id)) { this.mFloorItems.Add(Item.Id, Item); } else { if (Item.IsWallItem && !this.mWallItems.ContainsKey(Item.Id)) { this.mWallItems.Add(Item.Id, Item); } } this.AddItem(Item); if (sendMessage) { ServerMessage serverMessage = new ServerMessage(Outgoing.AddFloorItemMessageComposer); Item.Serialize(serverMessage); if (this.room.Group != null) { serverMessage.AppendString(Session.GetHabbo().Username); } else { serverMessage.AppendString(this.room.Owner); } this.room.SendMessage(serverMessage); } } else { this.UpdateItem(Item); if (!OnRoller && sendMessage) { ServerMessage message = new ServerMessage(Outgoing.UpdateRoomItemMessageComposer); Item.Serialize(message); this.room.SendMessage(message); } if (Item.IsWired) { this.room.GetWiredHandler().MoveWired(Item); } } this.room.GetGameMap().AddToMap(Item); if (Item.GetBaseItem().IsSeat) { updateRoomUserStatuses = true; } if (updateRoomUserStatuses) { this.room.GetRoomUserManager().UpdateUserStatusses(); } if (newItem) { this.OnHeightmapUpdate(affectedTiles); } return true; }