Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 57.96 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. using prjMango.Game.Rooms;
  7. using prjMango.Game.Items;
  8. using prjMango.Utilities;
  9. using prjMango.Storage.MySql;
  10. using prjMango.Game.Navigators;
  11. using prjMango.Game.Pathfinding;
  12. using prjMango.Game.Users.Badges;
  13. using prjMango.Game.Sessions;
  14.  
  15. namespace prjMango.Messages
  16. {
  17.     partial class MessageHandler
  18.     {
  19.         private void GetAdvertisement()
  20.         {
  21.             GetResponse().Init(258);
  22.             GetResponse().AppendStringWithBreak("");
  23.             GetResponse().AppendStringWithBreak("");
  24.             SendResponse();
  25.         }
  26.  
  27.         private void GetPub()
  28.         {
  29.             int Id = Request.PopWiredInt32();
  30.  
  31.             RoomData Data = MangoServer.GetGame().GetRoomManager().GenerateRoomData(Id);
  32.  
  33.             if (Data == null || Data.Type != "public")
  34.             {
  35.                 return;
  36.             }
  37.  
  38.             GetResponse().Init(453);
  39.             GetResponse().AppendInt32(Data.Id);
  40.             GetResponse().AppendStringWithBreak(Data.CCTs);
  41.             GetResponse().AppendInt32(Data.Id);
  42.             SendResponse();
  43.         }
  44.  
  45.         private void OpenFlat()
  46.         {
  47.             int Id = Request.PopWiredInt32();
  48.             string Password = Request.PopFixedString();
  49.             int Junk = Request.PopWiredInt32();
  50.  
  51.             RoomData Data = MangoServer.GetGame().GetRoomManager().GenerateRoomData(Id);
  52.  
  53.             if (Data == null || Data.Type != "private")
  54.             {
  55.                 return;
  56.             }
  57.  
  58.             PrepareRoomForUser(Id, Password);
  59.         }
  60.  
  61.         private void OpenPub()
  62.         {
  63.             int Junk = Request.PopWiredInt32();
  64.             int Id = Request.PopWiredInt32();
  65.             int Junk2 = Request.PopWiredInt32();
  66.  
  67.             RoomData Data = MangoServer.GetGame().GetRoomManager().GenerateRoomData(Id);
  68.  
  69.             if (Data == null || Data.Type != "public")
  70.             {
  71.                 return;
  72.             }
  73.  
  74.             PrepareRoomForUser(Data.Id, "");
  75.         }
  76.  
  77.         private void GetGroupBadges()
  78.         {
  79.             /*GetResponse().Init(309);
  80.             GetResponse().AppendStringWithBreak("IcIrDs43103s19014d5a1dc291574a508bc80a64663e61a00");
  81.             SendResponse();*/
  82.         }
  83.  
  84.         private void GetRoomData1()
  85.         {
  86.             GetResponse().Init(297);
  87.             GetResponse().AppendInt32(0);
  88.             SendResponse();
  89.         }
  90.  
  91.         private void GetRoomData2()
  92.         {
  93.             if (Session.GetPlayer().LoadingRoom == null)
  94.             {
  95.                 return;
  96.             }
  97.  
  98.             RoomData Data = new RoomData();
  99.             Data.Fill(Session.GetPlayer().LoadingRoom);
  100.  
  101.             if (Data == null)
  102.             {
  103.                 return;
  104.             }
  105.  
  106.             if (Data.Model == null)
  107.             {
  108.                 Session.SendNotif("Sorry, model data is missing from this room and therefore cannot be loaded.");
  109.                 Session.SendMessage(new ServerMessage(18));
  110.                 ClearRoomLoading();
  111.                 return;
  112.             }
  113.  
  114.             Session.SendMessage(Data.Model.SerializeHeightmap());
  115.             Session.SendMessage(Data.Model.SerializeRelativeHeightmap());
  116.         }
  117.  
  118.         private void GetRoomData3()
  119.         {
  120.             if (Session.GetPlayer().LoadingRoom == null || !Session.GetPlayer().LoadingChecksPassed)
  121.             {
  122.                 return;
  123.             }
  124.  
  125.             Room Room = Session.GetPlayer().LoadingRoom;
  126.  
  127.             if (Room == null)
  128.             {
  129.                 return;
  130.             }
  131.  
  132.             ClearRoomLoading();
  133.  
  134.             GetResponse().Init(30);
  135.  
  136.             if (Room.Model.StaticFurniMap != "")
  137.             {
  138.                 GetResponse().AppendStringWithBreak(Room.Model.StaticFurniMap);
  139.             }
  140.             else
  141.             {
  142.                 GetResponse().AppendInt32(0);
  143.             }
  144.  
  145.             SendResponse();
  146.  
  147.             if (Room.Type == "private")
  148.             {
  149.                 List<RoomItem> FloorItems = Room.FloorItems;
  150.                 List<RoomItem> WallItems = Room.WallItems;
  151.  
  152.                 GetResponse().Init(32);
  153.                 GetResponse().AppendInt32(FloorItems.Count);
  154.  
  155.                 foreach (RoomItem Item in FloorItems)
  156.                 {
  157.                     Item.Serialize(GetResponse());
  158.                 }
  159.  
  160.                 SendResponse();
  161.  
  162.                 GetResponse().Init(45);
  163.                 GetResponse().AppendInt32(WallItems.Count);
  164.  
  165.                 foreach (RoomItem Item in WallItems)
  166.                 {
  167.                     Item.Serialize(GetResponse());
  168.                 }
  169.  
  170.                 SendResponse();
  171.             }
  172.  
  173.             Room.AddUserToRoom(Session, Session.GetPlayer().SpectatorMode);
  174.  
  175.             List<RoomUser> UsersToDisplay = new List<RoomUser>();
  176.  
  177.                 foreach (RoomUser User in Room.GetUsers)
  178.                 {
  179.                     if (User.IsSpectator)
  180.                     {
  181.                         continue;
  182.                     }
  183.  
  184.                     UsersToDisplay.Add(User);
  185.                 }
  186.  
  187.             GetResponse().Init(28);
  188.             GetResponse().AppendInt32(UsersToDisplay.Count);
  189.  
  190.             foreach (RoomUser User in UsersToDisplay)
  191.             {
  192.                 User.Serialize(GetResponse());
  193.             }
  194.  
  195.             SendResponse();
  196.  
  197.             if (Room.Type == "public")
  198.             {
  199.                 GetResponse().Init(471);
  200.                 GetResponse().AppendBoolean(false);
  201.                 GetResponse().AppendStringWithBreak(Room.ModelName);
  202.                 GetResponse().AppendBoolean(false);
  203.                 SendResponse();
  204.             }
  205.             else if (Room.Type == "private")
  206.             {
  207.                 GetResponse().Init(471);
  208.                 GetResponse().AppendBoolean(true);
  209.                 GetResponse().AppendInt32(Room.RoomId);
  210.  
  211.                 if (Room.CheckRights(Session, true))
  212.                 {
  213.                     GetResponse().AppendBoolean(true);
  214.                 }
  215.                 else
  216.                 {
  217.                     GetResponse().AppendBoolean(false);
  218.                 }
  219.  
  220.                 SendResponse();
  221.  
  222.                 // GQhntX]uberEmu PacketloggingDescriptionHQMSCQFJtag1tag2Ika^SMqurbIHH
  223.  
  224.                 GetResponse().Init(454);
  225.                 GetResponse().AppendInt32(1);
  226.                 GetResponse().AppendInt32(Room.RoomId);
  227.                 GetResponse().AppendInt32(0);
  228.                 GetResponse().AppendStringWithBreak(Room.Name);
  229.                 GetResponse().AppendStringWithBreak(Room.Owner);
  230.                 GetResponse().AppendInt32(Room.State);
  231.                 GetResponse().AppendInt32(0);
  232.                 GetResponse().AppendInt32(25);
  233.                 GetResponse().AppendStringWithBreak(Room.Description);
  234.                 GetResponse().AppendInt32(0);
  235.                 GetResponse().AppendInt32(1);
  236.                 GetResponse().AppendInt32(8228);
  237.                 GetResponse().AppendInt32(Room.Category);
  238.                 GetResponse().AppendStringWithBreak("");
  239.                 GetResponse().AppendInt32(Room.TagCount);
  240.  
  241.                 foreach (string Tag in Room.Tags) // TODO: Review tags and possibility thread-safe?
  242.                 {
  243.                     GetResponse().AppendStringWithBreak(Tag);
  244.                 }
  245.  
  246.                 Room.Icon.Serialize(GetResponse());
  247.                 GetResponse().AppendBoolean(false);
  248.                 SendResponse();
  249.             }
  250.  
  251.             ServerMessage Updates = Room.SerializeStatusUpdates(true);
  252.  
  253.             if (Updates != null)
  254.             {
  255.                 Session.SendMessage(Updates);
  256.             }
  257.  
  258.             foreach (RoomUser User in Room.GetUsers)
  259.             {
  260.                 if (User.IsSpectator)
  261.                 {
  262.                     continue;
  263.                 }
  264.  
  265.                 if (User.IsDancing)
  266.                 {
  267.                     GetResponse().Init(480);
  268.                     GetResponse().AppendInt32(User.VirtualId);
  269.                     GetResponse().AppendInt32(User.DanceId);
  270.                     SendResponse();
  271.                 }
  272.  
  273.                 if (User.IsAsleep)
  274.                 {
  275.                     GetResponse().Init(486);
  276.                     GetResponse().AppendInt32(User.VirtualId);
  277.                     GetResponse().AppendBoolean(true);
  278.                     SendResponse();
  279.                 }
  280.  
  281.                 if (User.CarryItemID > 0 && User.CarryTimer > 0)
  282.                 {
  283.                     GetResponse().Init(482);
  284.                     GetResponse().AppendInt32(User.VirtualId);
  285.                     GetResponse().AppendInt32(User.CarryTimer);
  286.                     SendResponse();
  287.                 }
  288.  
  289.                 if (!User.IsBot)
  290.                 {
  291.                     if (User.GetSession().GetPlayer() != null && User.GetSession().GetPlayer().GetEffectsComponent() != null && User.GetSession().GetPlayer().GetEffectsComponent().CurrentEffect >= 1)
  292.                     {
  293.                         GetResponse().Init(485);
  294.                         GetResponse().AppendInt32(User.VirtualId);
  295.                         GetResponse().AppendInt32(User.GetSession().GetPlayer().GetEffectsComponent().CurrentEffect);
  296.                         SendResponse();
  297.                     }
  298.                 }
  299.             }
  300.         }
  301.  
  302.         public void PrepareRoomForUser(int Id, string Password)
  303.         {
  304.             ClearRoomLoading();
  305.  
  306.             if (Session.GetPlayer().InRoom)
  307.             {
  308.                 Room OldRoom = MangoServer.GetGame().GetRoomManager().GetRoom(Session.GetPlayer().CurrentRoomId);
  309.  
  310.                 if (OldRoom != null)
  311.                 {
  312.                     OldRoom.RemoveUserFromRoom(Session, false, false);
  313.                 }
  314.             }
  315.  
  316.             if (MangoServer.GetGame().GetRoomManager().IsRoomLoaded(Id))
  317.             {
  318.                 MangoServer.GetGame().GetRoomManager().LoadRoom(Id);
  319.             }
  320.  
  321.             Room Room = MangoServer.GetGame().GetRoomManager().GetRoom(Id);
  322.  
  323.             if (Room == null)
  324.             {
  325.                 return;
  326.             }
  327.  
  328.             Session.GetPlayer().LoadingRoom = Room;
  329.  
  330.             if (Room.UserIsBanned(Session.GetPlayer().Id))
  331.             {
  332.                 if (Room.HasBanExpired(Session.GetPlayer().Id))
  333.                 {
  334.                     Room.RemoveBan(Session.GetPlayer().Id);
  335.                 }
  336.                 else
  337.                 {
  338.                     // C`PA
  339.                     GetResponse().Init(224);
  340.                     GetResponse().AppendInt32(4);
  341.                     SendResponse();
  342.  
  343.                     GetResponse().Init(18);
  344.                     SendResponse();
  345.  
  346.                     return;
  347.                 }
  348.             }
  349.  
  350.             if (Room.UsersNow >= Room.UsersMax) // TODO: Admin ranks to allow access when room is full
  351.             {
  352.                 GetResponse().Init(224);
  353.                 GetResponse().AppendInt32(1);
  354.                 SendResponse();
  355.  
  356.                 GetResponse().Init(18);
  357.                 SendResponse();
  358.  
  359.                 return;
  360.             }
  361.  
  362.             if (Room.Type == "public")
  363.             {
  364.                 if (Room.State > 0) // TODO: Admin ranks to allow access
  365.                 {
  366.                     Session.SendNotif("This public room is accessible to staff only.");
  367.  
  368.                     GetResponse().Init(18);
  369.                     SendResponse();
  370.  
  371.                     return;
  372.                 }
  373.  
  374.                 GetResponse().Init(166);
  375.                 GetResponse().AppendStringWithBreak("/client/public/" + Room.ModelName + "/0");
  376.                 SendResponse();
  377.             }
  378.             else if (Room.Type == "private")
  379.             {
  380.                 GetResponse().Init(19);
  381.                 SendResponse();
  382.  
  383.                 if (!Room.CheckRights(Session, true) && !Session.GetPlayer().IsTeleporting) // TODO: Admin ranks to allow access
  384.                 {
  385.                     if (Room.State == 1)
  386.                     {
  387.                         if (Room.UserCount == 0)
  388.                         {
  389.                             GetResponse().Init(131);
  390.                             SendResponse();
  391.                         }
  392.                         else
  393.                         {
  394.                             GetResponse().Init(91);
  395.                             GetResponse().AppendStringWithBreak("");
  396.                             SendResponse();
  397.  
  398.                             ServerMessage RingMessage = new ServerMessage(91);
  399.                             RingMessage.AppendStringWithBreak(Session.GetPlayer().Username);
  400.                             Room.SendMessageToUsersWithRights(RingMessage);
  401.                         }
  402.  
  403.                         return;
  404.                     }
  405.                     else if (Room.State == 2)
  406.                     {
  407.                         if (Password.ToLower() != Room.Password.ToLower())
  408.                         {
  409.                             GetResponse().Init(33);
  410.                             GetResponse().AppendInt32(-100002);
  411.                             SendResponse();
  412.  
  413.                             GetResponse().Init(18);
  414.                             SendResponse();
  415.  
  416.                             return;
  417.                         }
  418.                     }
  419.                 }
  420.  
  421.                 GetResponse().Init(166);
  422.                 GetResponse().AppendStringWithBreak("/client/private/" + Room.RoomId + "/id");
  423.                 SendResponse();
  424.             }
  425.  
  426.             Session.GetPlayer().LoadingChecksPassed = true;
  427.  
  428.             LoadRoomForUser();
  429.         }
  430.  
  431.         private void ReqLoadRoomForUser()
  432.         {
  433.             LoadRoomForUser();
  434.         }
  435.  
  436.         public void LoadRoomForUser()
  437.         {
  438.             Room Room = Session.GetPlayer().LoadingRoom;
  439.  
  440.             if (Room == null || !Session.GetPlayer().LoadingChecksPassed)
  441.             {
  442.                 return;
  443.             }
  444.  
  445.             // todo: Room.SerializeGroupBadges()
  446.             /*GetResponse().Init(309);
  447.             GetResponse().AppendStringWithBreak("IcIrDs43103s19014d5a1dc291574a508bc80a64663e61a00"); // GROUP BADGES!
  448.             SendResponse();*/
  449.  
  450.             GetResponse().Init(69);
  451.             GetResponse().AppendStringWithBreak(Room.ModelName);
  452.             GetResponse().AppendInt32(Room.RoomId);
  453.             SendResponse();
  454.  
  455.             if (Session.GetPlayer().SpectatorMode)
  456.             {
  457.                 GetResponse().Init(254);
  458.                 SendResponse();
  459.             }
  460.  
  461.             if (Room.Type == "private")
  462.             {
  463.                 if (Room.Wallpaper != "0.0")
  464.                 {
  465.                     GetResponse().Init(46);
  466.                     GetResponse().AppendStringWithBreak("wallpaper");
  467.                     GetResponse().AppendStringWithBreak(Room.Wallpaper);
  468.                     SendResponse();
  469.                 }
  470.  
  471.                 if (Room.Floor != "0.0")
  472.                 {
  473.                     GetResponse().Init(46);
  474.                     GetResponse().AppendStringWithBreak("floor");
  475.                     GetResponse().AppendStringWithBreak(Room.Floor);
  476.                     SendResponse();
  477.                 }
  478.  
  479.                 GetResponse().Init(46);
  480.                 GetResponse().AppendStringWithBreak("landscape");
  481.                 GetResponse().AppendStringWithBreak(Room.Landscape);
  482.                 SendResponse();
  483.  
  484.                 if (Room.CheckRights(Session, true))
  485.                 {
  486.                     GetResponse().Init(42);
  487.                     SendResponse();
  488.  
  489.                     GetResponse().Init(47);
  490.                     SendResponse();
  491.                 }
  492.                 else if (Room.CheckRights(Session))
  493.                 {
  494.                     GetResponse().Init(42);
  495.                     SendResponse();
  496.                 }
  497.  
  498.                 GetResponse().Init(345);
  499.  
  500.                 if (Session.GetPlayer().RatedRooms.Contains(Room.RoomId) || Room.CheckRights(Session, true))
  501.                 {
  502.                     GetResponse().AppendInt32(Room.Score);
  503.                 }
  504.                 else
  505.                 {
  506.                     GetResponse().AppendInt32(-1);
  507.                 }
  508.  
  509.                 SendResponse();
  510.  
  511.                 if (Room.HasOngoingEvent)
  512.                 {
  513.                     Session.SendMessage(Room.Event.Serialize(Session));
  514.                 }
  515.                 else
  516.                 {
  517.                     GetResponse().Init(370);
  518.                     GetResponse().AppendStringWithBreak("-1");
  519.                     SendResponse();
  520.                 }
  521.             }
  522.         }
  523.  
  524.         public void ClearRoomLoading()
  525.         {
  526.             Session.GetPlayer().LoadingRoom = null;
  527.             Session.GetPlayer().LoadingChecksPassed = false;
  528.         }
  529.  
  530.         private void Talk()
  531.         {
  532.             Room Room = Session.GetPlayer().GetRoom();
  533.  
  534.             if (Room == null)
  535.             {
  536.                 return;
  537.             }
  538.  
  539.             RoomUser User = Room.GetRoomUserByPlayer(Session.GetPlayer().Id);
  540.  
  541.             if (User == null)
  542.             {
  543.                 return;
  544.             }
  545.  
  546.             User.Chat(Session, Filtering.FilterInjectionChars(Request.PopFixedString()), false);
  547.         }
  548.  
  549.         private void Shout()
  550.         {
  551.             Room Room = Session.GetPlayer().GetRoom();
  552.  
  553.             if (Room == null)
  554.             {
  555.                 return;
  556.             }
  557.  
  558.             RoomUser User = Room.GetRoomUserByPlayer(Session.GetPlayer().Id);
  559.  
  560.             if (User == null)
  561.             {
  562.                 return;
  563.             }
  564.  
  565.             User.Chat(Session, Filtering.FilterInjectionChars(Request.PopFixedString()), true);
  566.         }
  567.  
  568.         private void Whisper()
  569.         {
  570.             Room Room = Session.GetPlayer().GetRoom();
  571.  
  572.             if (Room == null)
  573.             {
  574.                 return;
  575.             }
  576.  
  577.             if (Session.GetPlayer().Muted)
  578.             {
  579.                 Session.SendNotif("You are muted.");
  580.                 return;
  581.             }
  582.  
  583.             string Params = Filtering.FilterInjectionChars(Request.PopFixedString());
  584.             string ToUser = Params.Split(' ')[0];
  585.             string Message = Params.Substring(ToUser.Length + 1);
  586.  
  587.             RoomUser User = Room.GetRoomUserByPlayer(Session.GetPlayer().Id);
  588.             RoomUser User2 = Room.GetRoomUserByPlayer(ToUser);
  589.  
  590.             ServerMessage TellMsg = new ServerMessage();
  591.             TellMsg.Init(25);
  592.             TellMsg.AppendInt32(User.VirtualId);
  593.             TellMsg.AppendStringWithBreak(Message);
  594.             TellMsg.AppendBoolean(false);
  595.  
  596.             if (User != null && !User.IsBot)
  597.             {
  598.                 User.GetSession().SendMessage(TellMsg);
  599.             }
  600.  
  601.             User.Unidle();
  602.  
  603.             if (User2 != null && !User2.IsBot)
  604.             {
  605.                 if (!User2.GetSession().GetPlayer().MutedUsers.Contains(Session.GetPlayer().Id))
  606.                 {
  607.                     User2.GetSession().SendMessage(TellMsg);
  608.                 }
  609.  
  610.                 // TODO: WHISPER CHAT LOGS
  611.             }
  612.         }
  613.  
  614.         private void Move()
  615.         {
  616.             Room Room = Session.GetPlayer().GetRoom();
  617.  
  618.             if (Room == null)
  619.             {
  620.                 return;
  621.             }
  622.  
  623.             RoomUser User = Room.GetRoomUserByPlayer(Session.GetPlayer().Id);
  624.  
  625.             if (User == null || !User.CanWalk)
  626.             {
  627.                 return;
  628.             }
  629.  
  630.             int MoveX = Request.PopWiredInt32();
  631.             int MoveY = Request.PopWiredInt32();
  632.  
  633.             if (MoveX == User.X && MoveY == User.Y)
  634.             {
  635.                 return;
  636.             }
  637.  
  638.             User.MoveTo(MoveX, MoveY);
  639.         }
  640.  
  641.         private void CanCreateRoom()
  642.         {
  643.             GetResponse().Init(512);
  644.             GetResponse().AppendBoolean(false); // true = show error with number below
  645.             GetResponse().AppendInt32(99999);
  646.             SendResponse();
  647.  
  648.             // todo: room limit
  649.         }
  650.  
  651.         private void CreateRoom()
  652.         {
  653.             string RoomName = Filtering.FilterInjectionChars(Request.PopFixedString());
  654.             string ModelName = Request.PopFixedString();
  655.             string RoomState = Request.PopFixedString(); // unused, room open by default on creation. may be added in later build of Habbo?
  656.  
  657.             RoomData NewRoom = MangoServer.GetGame().GetRoomManager().CreateRoom(Session, RoomName, ModelName);
  658.  
  659.             if (NewRoom != null)
  660.             {
  661.                 GetResponse().Init(59);
  662.                 GetResponse().AppendInt32(NewRoom.Id);
  663.                 GetResponse().AppendStringWithBreak(NewRoom.Name);
  664.                 SendResponse();
  665.             }
  666.         }
  667.  
  668.         private void GetRoomEditData()
  669.         {
  670.             Room Room = Session.GetPlayer().GetRoom();
  671.  
  672.             if (Room == null || !Room.CheckRights(Session, true))
  673.             {
  674.                 return;
  675.             }
  676.  
  677.             GetResponse().Init(465);
  678.             GetResponse().AppendInt32(Room.RoomId);
  679.             GetResponse().AppendStringWithBreak(Room.Name);
  680.             GetResponse().AppendStringWithBreak(Room.Description);
  681.             GetResponse().AppendInt32(Room.State);
  682.             GetResponse().AppendInt32(Room.Category);
  683.             GetResponse().AppendInt32(Room.UsersMax);
  684.             GetResponse().AppendInt32(25);
  685.             GetResponse().AppendInt32(Room.TagCount);
  686.  
  687.             foreach (string Tag in Room.Tags)
  688.             {
  689.                 GetResponse().AppendStringWithBreak(Tag);
  690.             }
  691.  
  692.             GetResponse().AppendInt32(Room.UsersWithRights.Count); // users /w rights count
  693.  
  694.             foreach (int UserId in Room.UsersWithRights)
  695.             {
  696.                 GetResponse().AppendInt32(UserId);
  697.                 GetResponse().AppendStringWithBreak(MangoServer.GetGame().GetSessionManager().GetNameById(UserId));
  698.             }
  699.  
  700.             GetResponse().AppendInt32(Room.UsersWithRights.Count); // users /w rights count
  701.  
  702.             GetResponse().AppendBoolean(Room.AllowPets); // allows pets in room - pet system lacking, so always off
  703.             GetResponse().AppendBoolean(Room.AllowPetsEating); // allows pets to eat your food - pet system lacking, so always off
  704.             GetResponse().AppendBoolean(Room.AllowWalkthrough);
  705.             SendResponse();
  706.         }
  707.  
  708.         private void SaveRoomIcon()
  709.         {
  710.             Room Room = Session.GetPlayer().GetRoom();
  711.  
  712.             if (Room == null || !Room.CheckRights(Session, true))
  713.             {
  714.                 return;
  715.             }
  716.  
  717.             int Junk = Request.PopWiredInt32(); // always 3
  718.  
  719.             Dictionary<int, int> Items = new Dictionary<int, int>();
  720.  
  721.             int Background = Request.PopWiredInt32();
  722.             int TopLayer = Request.PopWiredInt32();
  723.             int AmountOfItems = Request.PopWiredInt32();
  724.  
  725.             for (int i = 0; i < AmountOfItems; i++)
  726.             {
  727.                 int Pos = Request.PopWiredInt32();
  728.                 int Item = Request.PopWiredInt32();
  729.  
  730.                 if (Pos < 0 || Pos > 10)
  731.                 {
  732.                     return;
  733.                 }
  734.  
  735.                 if (Item < 1 || Item > 27)
  736.                 {
  737.                     return;
  738.                 }
  739.  
  740.                 if (Items.ContainsKey(Pos))
  741.                 {
  742.                     return;
  743.                 }
  744.  
  745.                 Items.Add(Pos, Item);
  746.             }
  747.  
  748.             if (Background < 1 || Background > 24)
  749.             {
  750.                 return;
  751.             }
  752.  
  753.             if (TopLayer < 0 || TopLayer > 11)
  754.             {
  755.                 return;
  756.             }
  757.  
  758.             StringBuilder FormattedItems = new StringBuilder();
  759.             int j = 0;
  760.  
  761.             foreach (KeyValuePair<int, int> Item in Items)
  762.             {
  763.                 if (j > 0)
  764.                 {
  765.                     FormattedItems.Append("|");
  766.                 }
  767.  
  768.                 FormattedItems.Append(Item.Key + "," + Item.Value);
  769.  
  770.                 j++;
  771.             }
  772.  
  773.             using (SqlConnection SqlClient = MangoServer.GetSqlManager().GetConnection())
  774.             {
  775.                 SqlClient.RunQuery("UPDATE rooms SET icon_bg = '" + Background + "', icon_fg = '" + TopLayer + "', icon_items = '" + FormattedItems.ToString() + "' WHERE id = '" + Room.RoomId + "' LIMIT 1");
  776.             }
  777.  
  778.             Room.Icon = new RoomIcon(Background, TopLayer, Items);
  779.  
  780.             GetResponse().Init(457);
  781.             GetResponse().AppendInt32(Room.RoomId);
  782.             GetResponse().AppendBoolean(true);
  783.             SendResponse();
  784.  
  785.             GetResponse().Init(456);
  786.             GetResponse().AppendInt32(Room.RoomId);
  787.             SendResponse();
  788.  
  789.             RoomData Data = new RoomData();
  790.             Data.Fill(Room);
  791.  
  792.             GetResponse().Init(454);
  793.             GetResponse().AppendBoolean(false);
  794.             Data.Serialize(GetResponse(), false);
  795.             SendResponse();
  796.         }
  797.  
  798.         private void SaveRoomData()
  799.         {
  800.             Room Room = Session.GetPlayer().GetRoom();
  801.  
  802.             if (Room == null || !Room.CheckRights(Session, true))
  803.             {
  804.                 return;
  805.             }
  806.  
  807.             int Id = Request.PopWiredInt32();
  808.             string Name = Filtering.FilterInjectionChars(Request.PopFixedString());
  809.             string Description = Filtering.FilterInjectionChars(Request.PopFixedString());
  810.             int State = Request.PopWiredInt32();
  811.             string Password = Filtering.FilterInjectionChars(Request.PopFixedString());
  812.             int MaxUsers = Request.PopWiredInt32();
  813.             int CategoryId = Request.PopWiredInt32();
  814.             int TagCount = Request.PopWiredInt32();
  815.  
  816.             List<string> Tags = new List<string>();
  817.             StringBuilder formattedTags = new StringBuilder();
  818.  
  819.             for (int i = 0; i < TagCount; i++)
  820.             {
  821.                 if (i > 0)
  822.                 {
  823.                     formattedTags.Append(",");
  824.                 }
  825.  
  826.                 string tag = Filtering.FilterInjectionChars(Request.PopFixedString().ToLower());
  827.  
  828.                 Tags.Add(tag);
  829.                 formattedTags.Append(tag);
  830.             }
  831.  
  832.             int AllowPets = 0;
  833.             int AllowPetsEat = 0;
  834.             int AllowWalkthrough = 0;
  835.  
  836.             string _AllowPets = Request.PlainReadBytes(1)[0].ToString();
  837.             Request.AdvanceCursor(1);
  838.  
  839.             string _AllowPetsEat = Request.PlainReadBytes(1)[0].ToString();
  840.             Request.AdvanceCursor(1);
  841.  
  842.             string _AllowWalkthrough = Request.PlainReadBytes(1)[0].ToString();
  843.             Request.AdvanceCursor(1);
  844.  
  845.             if (Name.Length < 1)
  846.             {
  847.                 return;
  848.             }
  849.  
  850.             if (State < 0 || State > 2)
  851.             {
  852.                 return;
  853.             }
  854.  
  855.             if (MaxUsers != 10 && MaxUsers != 15 && MaxUsers != 20 && MaxUsers != 25)
  856.             {
  857.                 return;
  858.             }
  859.  
  860.             FlatCat FlatCat = MangoServer.GetGame().GetNavigator().GetFlatCat(CategoryId);
  861.  
  862.             if (FlatCat == null)
  863.             {
  864.                 return;
  865.             }
  866.  
  867.             if (FlatCat.MinRank > Session.GetPlayer().Rank)
  868.             {
  869.                 Session.SendNotif("You are not allowed to use this category. Your room has been moved to no category instead.");
  870.                 CategoryId = 0;
  871.             }
  872.  
  873.             if (TagCount > 2)
  874.             {
  875.                 return;
  876.             }
  877.  
  878.             if (State < 0 || State > 2)
  879.             {
  880.                 return;
  881.             }
  882.  
  883.             if (_AllowPets == "65")
  884.             {
  885.                 AllowPets = 1;
  886.                 Room.AllowPets = true;
  887.             }
  888.             else
  889.             {
  890.                 Room.AllowPets = false;
  891.             }
  892.  
  893.             if (_AllowPetsEat == "65")
  894.             {
  895.                 AllowPetsEat = 1;
  896.                 Room.AllowPetsEating = true;
  897.             }
  898.             else
  899.             {
  900.                 Room.AllowPetsEating = false;
  901.             }
  902.  
  903.             if (_AllowWalkthrough == "65")
  904.             {
  905.                 AllowWalkthrough = 1;
  906.                 Room.AllowWalkthrough = true;
  907.             }
  908.             else
  909.             {
  910.                 Room.AllowWalkthrough = false;
  911.             }
  912.  
  913.             Room.Name = Name;
  914.             Room.State = State;
  915.             Room.Description = Description;
  916.             Room.Category = CategoryId;
  917.             Room.Password = Password;
  918.             Room.Tags = Tags;
  919.             Room.UsersMax = MaxUsers;
  920.  
  921.             string formattedState = "open";
  922.  
  923.             if (Room.State == 1)
  924.             {
  925.                 formattedState = "locked";
  926.             }
  927.             else if (Room.State > 1)
  928.             {
  929.                 formattedState = "password";
  930.             }
  931.  
  932.             using (SqlConnection SqlClient = MangoServer.GetSqlManager().GetConnection())
  933.             {
  934.                 SqlClient.AddParamWithValue("caption", Room.Name);
  935.                 SqlClient.AddParamWithValue("description", Room.Description);
  936.                 SqlClient.AddParamWithValue("password", Room.Password);
  937.                 SqlClient.AddParamWithValue("tags", formattedTags.ToString());
  938.                 SqlClient.RunQuery("UPDATE rooms SET caption = @caption, description = @description, password = @password, category = '" + CategoryId + "', state = '" + formattedState + "', tags = @tags, users_max = '" + MaxUsers + "', allow_pets = '" + AllowPets + "', allow_pets_eat = '" + AllowPetsEat + "', allow_walkthrough = '" + AllowWalkthrough + "' WHERE id = '" + Room.RoomId + "' LIMIT 1");
  939.             }
  940.  
  941.             GetResponse().Init(467);
  942.             GetResponse().AppendInt32(Room.RoomId);
  943.             SendResponse();
  944.  
  945.             GetResponse().Init(456);
  946.             GetResponse().AppendInt32(Room.RoomId);
  947.             SendResponse();
  948.  
  949.             RoomData Data = new RoomData();
  950.             Data.Fill(Room);
  951.  
  952.             GetResponse().Init(454);
  953.             GetResponse().AppendBoolean(false);
  954.             Data.Serialize(GetResponse(), false);
  955.             SendResponse();
  956.         }
  957.  
  958.         private void GiveRights()
  959.         {
  960.             int UserId = Request.PopWiredInt32();
  961.  
  962.             Room Room = Session.GetPlayer().GetRoom();
  963.             RoomUser RoomUser = Room.GetRoomUserByPlayer(UserId);
  964.  
  965.             if (Room == null || !Room.CheckRights(Session, true) || RoomUser == null || RoomUser.IsBot)
  966.             {
  967.                 return;
  968.             }
  969.  
  970.             if (Room.UsersWithRights.Contains(UserId))
  971.             {
  972.                 // todo: fix silly bug
  973.                 Session.SendNotif("User already has rights! (There appears to be a bug with the rights button, we are looking into it - for now rely on 'Advanced settings')");
  974.                 return;
  975.             }
  976.  
  977.             Room.UsersWithRights.Add(UserId);
  978.  
  979.             using (SqlConnection SqlClient = MangoServer.GetSqlManager().GetConnection())
  980.             {
  981.                 SqlClient.RunQuery("INSERT INTO rooms_rights (room_id,user_id) VALUES ('" + Room.RoomId + "','" + UserId + "')");
  982.             }
  983.  
  984.             GetResponse().Init(510);
  985.             GetResponse().AppendInt32(Room.RoomId);
  986.             GetResponse().AppendInt32(UserId);
  987.             GetResponse().AppendStringWithBreak(RoomUser.GetSession().GetPlayer().Username);
  988.             SendResponse();
  989.  
  990.             RoomUser.AddStatus("flatcrtl", "");
  991.             RoomUser.UpdateNeeded = true;
  992.  
  993.             RoomUser.GetSession().SendMessage(new ServerMessage(42));
  994.  
  995.             // G~hntX]h_u@UMeth0d9
  996.         }
  997.  
  998.         private void TakeRights()
  999.         {
  1000.             Room Room = Session.GetPlayer().GetRoom();
  1001.  
  1002.             if (Room == null || !Room.CheckRights(Session, true))
  1003.             {
  1004.                 return;
  1005.             }
  1006.  
  1007.             StringBuilder DeleteParams = new StringBuilder();
  1008.  
  1009.             int Amount = Request.PopWiredInt32();
  1010.  
  1011.             for (int i = 0; i < Amount; i++)
  1012.             {
  1013.                 if (i > 0)
  1014.                 {
  1015.                     DeleteParams.Append(" OR ");
  1016.                 }
  1017.  
  1018.                 int UserId = Request.PopWiredInt32();
  1019.                 Room.UsersWithRights.Remove(UserId);
  1020.                 DeleteParams.Append("room_id = '" + Room.RoomId + "' AND user_id = '" + UserId + "'");
  1021.  
  1022.                 RoomUser User = Room.GetRoomUserByPlayer(UserId);
  1023.  
  1024.                 if (User != null && !User.IsBot)
  1025.                 {
  1026.                     User.GetSession().SendMessage(new ServerMessage(43));
  1027.                 }
  1028.  
  1029.                 // GhntX]hqu@U
  1030.                 GetResponse().Init(511);
  1031.                 GetResponse().AppendInt32(Room.RoomId);
  1032.                 GetResponse().AppendInt32(UserId);
  1033.                 SendResponse();
  1034.             }
  1035.  
  1036.             using (SqlConnection SqlClient = MangoServer.GetSqlManager().GetConnection())
  1037.             {
  1038.                 SqlClient.RunQuery("DELETE FROM rooms_rights WHERE " + DeleteParams.ToString());
  1039.             }
  1040.         }
  1041.  
  1042.         private void TakeAllRights()
  1043.         {
  1044.             Room Room = Session.GetPlayer().GetRoom();
  1045.  
  1046.             if (Room == null || !Room.CheckRights(Session, true))
  1047.             {
  1048.                 return;
  1049.             }
  1050.  
  1051.             foreach (int UserId in Room.UsersWithRights)
  1052.             {
  1053.                 RoomUser User = Room.GetRoomUserByPlayer(UserId);
  1054.  
  1055.                 if (User != null && !User.IsBot)
  1056.                 {
  1057.                     User.GetSession().SendMessage(new ServerMessage(43));
  1058.                 }
  1059.  
  1060.                 GetResponse().Init(511);
  1061.                 GetResponse().AppendInt32(Room.RoomId);
  1062.                 GetResponse().AppendInt32(UserId);
  1063.                 SendResponse();
  1064.             }
  1065.  
  1066.             using (SqlConnection SqlClient = MangoServer.GetSqlManager().GetConnection())
  1067.             {
  1068.                 SqlClient.RunQuery("DELETE FROM rooms_rights WHERE room_id = '" + Room.RoomId + "'");
  1069.             }
  1070.  
  1071.             Room.UsersWithRights.Clear();
  1072.         }
  1073.  
  1074.         private void KickUser()
  1075.         {
  1076.             Room Room = Session.GetPlayer().GetRoom();
  1077.  
  1078.             if (Room == null)
  1079.             {
  1080.                 return;
  1081.             }
  1082.  
  1083.             if (!Room.CheckRights(Session))
  1084.             {
  1085.                 return; // insufficient permissions
  1086.             }
  1087.  
  1088.             int UserId = Request.PopWiredInt32();
  1089.             RoomUser User = Room.GetRoomUserByPlayer(UserId);
  1090.  
  1091.             if (User == null || User.IsBot)
  1092.             {
  1093.                 return;
  1094.             }
  1095.  
  1096.             if (Room.CheckRights(User.GetSession(), true)) // TODO: fuse_mod
  1097.             {
  1098.                 return; // can't kick room owner or mods!
  1099.             }
  1100.  
  1101.             Room.RemoveUserFromRoom(User.GetSession(), true, true);
  1102.         }
  1103.  
  1104.         private void BanUser()
  1105.         {
  1106.             Room Room = Session.GetPlayer().GetRoom();
  1107.  
  1108.             if (Room == null || !Room.CheckRights(Session, true))
  1109.             {
  1110.                 return; // insufficient permissions
  1111.             }
  1112.  
  1113.             int UserId = Request.PopWiredInt32();
  1114.             RoomUser User = Room.GetRoomUserByPlayer(UserId);
  1115.  
  1116.             if (User == null || User.IsBot)
  1117.             {
  1118.                 return;
  1119.             }
  1120.  
  1121.             /*if (User.GetSession().GetHabbo().HasFuse("fuse_mod"))
  1122.             {
  1123.                 return;
  1124.             }*/
  1125.  
  1126.             Room.AddBan(UserId);
  1127.             Room.RemoveUserFromRoom(User.GetSession(), true, true);
  1128.         }
  1129.  
  1130.         private void SetHomeRoom()
  1131.         {
  1132.             int RoomId = Request.PopWiredInt32();
  1133.             RoomData Data = MangoServer.GetGame().GetRoomManager().GenerateRoomData(RoomId);
  1134.  
  1135.             if (RoomId != 0)
  1136.             {
  1137.                 if (Data == null || Data.Owner.ToLower() != Session.GetPlayer().Username.ToLower())
  1138.                 {
  1139.                     return;
  1140.                 }
  1141.             }
  1142.  
  1143.             Session.GetPlayer().HomeRoomId = RoomId;
  1144.  
  1145.             using (SqlConnection SqlClient = MangoServer.GetSqlManager().GetConnection())
  1146.             {
  1147.                 SqlClient.RunQuery("UPDATE users SET home_room = '" + RoomId + "' WHERE id = '" + Session.GetPlayer().Id + "' LIMIT 1");
  1148.             }
  1149.  
  1150.             GetResponse().Init(455);
  1151.             GetResponse().AppendInt32(RoomId);
  1152.             SendResponse();
  1153.         }
  1154.  
  1155.         private void DeleteRoom()
  1156.         {
  1157.             int RoomId = Request.PopWiredInt32();
  1158.             RoomData Data = MangoServer.GetGame().GetRoomManager().GenerateRoomData(RoomId);
  1159.  
  1160.             if (Data == null || Data.Owner.ToLower() != Session.GetPlayer().Username.ToLower())
  1161.             {
  1162.                 return;
  1163.             }
  1164.  
  1165.             using (SqlConnection SqlClient = MangoServer.GetSqlManager().GetConnection())
  1166.             {
  1167.                 SqlClient.RunQuery("DELETE FROM rooms WHERE id = '" + Data.Id + "' LIMIT 1");
  1168.                 SqlClient.RunQuery("DELETE FROM users_favorites WHERE room_id = '" + Data.Id + "'");
  1169.                 SqlClient.RunQuery("DELETE FROM rooms_items WHERE room_id = '" + Data.Id + "'");
  1170.                 SqlClient.RunQuery("DELETE FROM rooms_rights WHERE room_id = '" + Data.Id + "'");
  1171.                 SqlClient.RunQuery("UPDATE users SET home_room = '0' WHERE home_room = '" + Data.Id + "'");
  1172.                 // todo: delete room stuff
  1173.             }
  1174.  
  1175.             Room Room = MangoServer.GetGame().GetRoomManager().GetRoom(Data.Id);
  1176.  
  1177.             if (Room != null)
  1178.             {
  1179.                 foreach (RoomUser User in Room.GetUsers)
  1180.                 {
  1181.                     if (User.IsBot)
  1182.                     {
  1183.                         continue;
  1184.                     }
  1185.  
  1186.                     User.GetSession().SendMessage(new ServerMessage(18));
  1187.                     User.GetSession().GetPlayer().OnLeaveRoom();
  1188.                 }
  1189.  
  1190.                 MangoServer.GetGame().GetRoomManager().UnloadRoom(Data.Id);
  1191.             }
  1192.  
  1193.             GetResponse().Init(101);
  1194.             SendResponse();
  1195.  
  1196.             Session.SendMessage(MangoServer.GetGame().GetNavigator().SerializeRoomListing(Session, -3));
  1197.         }
  1198.  
  1199.         private void LookAt()
  1200.         {
  1201.             Room Room = Session.GetPlayer().GetRoom();
  1202.  
  1203.             if (Room == null)
  1204.             {
  1205.                 return;
  1206.             }
  1207.  
  1208.             RoomUser User = Room.GetRoomUserByPlayer(Session.GetPlayer().Id);
  1209.  
  1210.             if (User == null)
  1211.             {
  1212.                 return;
  1213.             }
  1214.  
  1215.             User.Unidle();
  1216.  
  1217.             int X = Request.PopWiredInt32();
  1218.             int Y = Request.PopWiredInt32();
  1219.  
  1220.             if (X == User.X && Y == User.Y)
  1221.             {
  1222.                 return;
  1223.             }
  1224.  
  1225.             int Rot = Rotation.Calculate(User.X, User.Y, X, Y);
  1226.  
  1227.             User.SetRot(Rot);
  1228.         }
  1229.  
  1230.         private void StartTyping()
  1231.         {
  1232.             Room Room = Session.GetPlayer().GetRoom();
  1233.  
  1234.             if (Room == null)
  1235.             {
  1236.                 return;
  1237.             }
  1238.  
  1239.             RoomUser User = Room.GetRoomUserByPlayer(Session.GetPlayer().Id);
  1240.  
  1241.             if (User == null)
  1242.             {
  1243.                 return;
  1244.             }
  1245.  
  1246.             ServerMessage Message = new ServerMessage(361);
  1247.             Message.AppendInt32(User.VirtualId);
  1248.             Message.AppendBoolean(true);
  1249.             Room.SendMessage(Message);
  1250.         }
  1251.  
  1252.         private void StopTyping()
  1253.         {
  1254.             Room Room = Session.GetPlayer().GetRoom();
  1255.  
  1256.             if (Room == null)
  1257.             {
  1258.                 return;
  1259.             }
  1260.  
  1261.             RoomUser User = Room.GetRoomUserByPlayer(Session.GetPlayer().Id);
  1262.  
  1263.             if (User == null)
  1264.             {
  1265.                 return;
  1266.             }
  1267.  
  1268.             ServerMessage Message = new ServerMessage(361);
  1269.             Message.AppendInt32(User.VirtualId);
  1270.             Message.AppendBoolean(false);
  1271.             Room.SendMessage(Message);
  1272.         }
  1273.  
  1274.         private void IgnoreUser()
  1275.         {
  1276.             /*Room Room = UberEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoom);
  1277.  
  1278.             if (Room == null)
  1279.             {
  1280.                 return;
  1281.             }
  1282.  
  1283.             uint Id = Request.PopWiredUInt();
  1284.  
  1285.             if (Session.GetHabbo().MutedUsers.Contains(Id))
  1286.             {
  1287.                 return;
  1288.             }
  1289.  
  1290.             Session.GetHabbo().MutedUsers.Add(Id);
  1291.  
  1292.             GetResponse().Init(419);
  1293.             GetResponse().AppendInt32(1);
  1294.             SendResponse();*/
  1295.         }
  1296.  
  1297.         private void UnignoreUser()
  1298.         {
  1299.             /*Room Room = UberEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoom);
  1300.  
  1301.             if (Room == null)
  1302.             {
  1303.                 return;
  1304.             }
  1305.  
  1306.             uint Id = Request.PopWiredUInt();
  1307.  
  1308.             if (!Session.GetHabbo().MutedUsers.Contains(Id))
  1309.             {
  1310.                 return;
  1311.             }
  1312.  
  1313.             Session.GetHabbo().MutedUsers.Remove(Id);
  1314.  
  1315.             GetResponse().Init(419);
  1316.             GetResponse().AppendInt32(3);
  1317.             SendResponse();*/
  1318.         }
  1319.  
  1320.         private void CanCreateRoomEvent()
  1321.         {
  1322.             Room Room = Session.GetPlayer().GetRoom();
  1323.  
  1324.             if (Room == null || !Room.CheckRights(Session, true))
  1325.             {
  1326.                 return;
  1327.             }
  1328.  
  1329.             Boolean Allow = true;
  1330.             int ErrorCode = 0;
  1331.  
  1332.             if (Room.State != 0)
  1333.             {
  1334.                 Allow = false;
  1335.                 ErrorCode = 3;
  1336.             }
  1337.  
  1338.             GetResponse().Init(367);
  1339.             GetResponse().AppendBoolean(Allow);
  1340.             GetResponse().AppendInt32(ErrorCode);
  1341.             SendResponse();
  1342.         }
  1343.  
  1344.         private void StartEvent()
  1345.         {
  1346.             Room Room = Session.GetPlayer().GetRoom();
  1347.  
  1348.             if (Room == null || !Room.CheckRights(Session, true) || Room.Event != null || Room.State != 0)
  1349.             {
  1350.                 return;
  1351.             }
  1352.  
  1353.             int category = Request.PopWiredInt32();
  1354.             string name = Filtering.FilterInjectionChars(Request.PopFixedString());
  1355.             string descr = Filtering.FilterInjectionChars(Request.PopFixedString());
  1356.             int tagCount = Request.PopWiredInt32();
  1357.  
  1358.             Room.Event = new RoomEvent(Room.RoomId, name, descr, category, null);
  1359.             Room.Event.Tags = new List<string>();
  1360.  
  1361.             for (int i = 0; i < tagCount; i++)
  1362.             {
  1363.                 Room.Event.Tags.Add(Filtering.FilterInjectionChars(Request.PopFixedString()));
  1364.             }
  1365.  
  1366.             Room.SendMessage(Room.Event.Serialize(Session));
  1367.         }
  1368.  
  1369.         private void StopEvent()
  1370.         {
  1371.             Room Room = Session.GetPlayer().GetRoom();
  1372.  
  1373.             if (Room == null || !Room.CheckRights(Session, true) || Room.Event == null)
  1374.             {
  1375.                 return;
  1376.             }
  1377.  
  1378.             Room.Event = null;
  1379.  
  1380.             ServerMessage Message = new ServerMessage(370);
  1381.             Message.AppendStringWithBreak("-1");
  1382.             Room.SendMessage(Message);
  1383.         }
  1384.  
  1385.         private void EditEvent()
  1386.         {
  1387.             Room Room = Session.GetPlayer().GetRoom();
  1388.  
  1389.             if (Room == null || !Room.CheckRights(Session, true) || Room.Event == null)
  1390.             {
  1391.                 return;
  1392.             }
  1393.  
  1394.             int category = Request.PopWiredInt32();
  1395.             string name = Filtering.FilterInjectionChars(Request.PopFixedString());
  1396.             string descr = Filtering.FilterInjectionChars(Request.PopFixedString());
  1397.             int tagCount = Request.PopWiredInt32();
  1398.  
  1399.             Room.Event.Category = category;
  1400.             Room.Event.Name = name;
  1401.             Room.Event.Description = descr;
  1402.             Room.Event.Tags = new List<string>();
  1403.  
  1404.             for (int i = 0; i < tagCount; i++)
  1405.             {
  1406.                 Room.Event.Tags.Add(Filtering.FilterInjectionChars(Request.PopFixedString()));
  1407.             }
  1408.  
  1409.             Room.SendMessage(Room.Event.Serialize(Session));
  1410.         }
  1411.  
  1412.         private void Wave()
  1413.         {
  1414.             Room Room = Session.GetPlayer().GetRoom();
  1415.  
  1416.             if (Room == null)
  1417.             {
  1418.                 return;
  1419.             }
  1420.  
  1421.             RoomUser User = Room.GetRoomUserByPlayer(Session.GetPlayer().Id);
  1422.  
  1423.             if (User == null)
  1424.             {
  1425.                 return;
  1426.             }
  1427.  
  1428.             User.Unidle();
  1429.  
  1430.             User.DanceId = 0;
  1431.  
  1432.             ServerMessage Message = new ServerMessage(481);
  1433.             Message.AppendInt32(User.VirtualId);
  1434.             Room.SendMessage(Message);
  1435.         }
  1436.  
  1437.         private void GetUserTags()
  1438.         {
  1439.             Room Room = Session.GetPlayer().GetRoom();
  1440.  
  1441.             if (Room == null)
  1442.             {
  1443.                 return;
  1444.             }
  1445.  
  1446.             RoomUser User = Room.GetRoomUserByPlayer(Request.PopWiredInt32());
  1447.  
  1448.             if (User == null || User.IsBot)
  1449.             {
  1450.                 return;
  1451.             }
  1452.  
  1453.             List<string> Tags = new List<string>(User.GetSession().GetPlayer().Tags);
  1454.  
  1455.             GetResponse().Init(350);
  1456.             GetResponse().AppendInt32(User.GetSession().GetPlayer().Id);
  1457.             GetResponse().AppendInt32(Tags.Count);
  1458.  
  1459.             foreach (string Tag in Tags)
  1460.             {
  1461.                 GetResponse().AppendStringWithBreak(Tag);
  1462.             }
  1463.  
  1464.             SendResponse();
  1465.         }
  1466.  
  1467.         private void GetUserBadges()
  1468.         {
  1469.             Room Room = Session.GetPlayer().GetRoom();
  1470.  
  1471.             if (Room == null)
  1472.             {
  1473.                 return;
  1474.             }
  1475.  
  1476.             RoomUser User = Room.GetRoomUserByPlayer(Request.PopWiredInt32());
  1477.  
  1478.             if (User == null || User.IsBot)
  1479.             {
  1480.                 return;
  1481.             }
  1482.  
  1483.             // CdjUzYZJIACH_RespectEarned1JACH_EmailVerification1E^jUzYZH
  1484.  
  1485.             List<Badge> Badges = new List<Badge>(); // Initialise an empty badge list
  1486.  
  1487.             foreach (Badge Badge in User.GetSession().GetPlayer().GetBadgeComponent().GetBadges()) // Get all equipped badges to display
  1488.             {
  1489.                 if (Badge.Slot <= 0)
  1490.                 {
  1491.                     continue;
  1492.                 }
  1493.  
  1494.                 Badges.Add(Badge);
  1495.             }
  1496.  
  1497.             GetResponse().Init(228);
  1498.             GetResponse().AppendInt32(User.GetSession().GetPlayer().Id);
  1499.             GetResponse().AppendInt32(Badges.Count); // Set the amount of badges to serialize
  1500.  
  1501.             foreach (Badge Badge in Badges) // Serialize all badges
  1502.             {
  1503.                 GetResponse().AppendInt32(Badge.Slot);
  1504.                 GetResponse().AppendStringWithBreak(Badge.Code);
  1505.             }
  1506.  
  1507.             SendResponse();
  1508.         }
  1509.  
  1510.         private void RateRoom()
  1511.         {
  1512.             Room Room = Session.GetPlayer().GetRoom();
  1513.  
  1514.             if (Room == null || Session.GetPlayer().RatedRooms.Contains(Room.RoomId) || Room.CheckRights(Session, true))
  1515.             {
  1516.                 return;
  1517.             }
  1518.  
  1519.             int Rating = Request.PopWiredInt32();
  1520.  
  1521.             switch (Rating)
  1522.             {
  1523.                 case -1:
  1524.  
  1525.                     Room.Score--;
  1526.                     break;
  1527.  
  1528.                 case 1:
  1529.  
  1530.                     Room.Score++;
  1531.                     break;
  1532.  
  1533.                 default:
  1534.  
  1535.                     return;
  1536.             }
  1537.  
  1538.             using (SqlConnection SqlClient = MangoServer.GetSqlManager().GetConnection())
  1539.             {
  1540.                 SqlClient.RunQuery("UPDATE rooms SET score = '" + Room.Score + "' WHERE id = '" + Room.RoomId + "' LIMIT 1");
  1541.             }
  1542.  
  1543.             Session.GetPlayer().RatedRooms.Add(Room.RoomId);
  1544.  
  1545.             GetResponse().Init(345);
  1546.             GetResponse().AppendInt32(Room.Score);
  1547.             SendResponse();
  1548.         }
  1549.  
  1550.         private void Dance()
  1551.         {
  1552.             Room Room = Session.GetPlayer().GetRoom();
  1553.  
  1554.             if (Room == null)
  1555.             {
  1556.                 return;
  1557.             }
  1558.  
  1559.             RoomUser User = Room.GetRoomUserByPlayer(Session.GetPlayer().Id);
  1560.  
  1561.             if (User == null)
  1562.             {
  1563.                 return;
  1564.             }
  1565.  
  1566.             User.Unidle();
  1567.  
  1568.             int DanceId = Request.PopWiredInt32();
  1569.  
  1570.             if (DanceId < 0 || DanceId > 4 || (!Session.GetPlayer().GetSubscriptionManager().HasSubscription("habbo_club") && DanceId > 1))
  1571.             {
  1572.                 DanceId = 0;
  1573.             }
  1574.  
  1575.             if (DanceId > 0 && User.CarryItemID > 0)
  1576.             {
  1577.                 User.CarryItem(0);
  1578.             }
  1579.  
  1580.             User.DanceId = DanceId;
  1581.  
  1582.             ServerMessage DanceMessage = new ServerMessage(480);
  1583.             DanceMessage.AppendInt32(User.VirtualId);
  1584.             DanceMessage.AppendInt32(DanceId);
  1585.             Room.SendMessage(DanceMessage);
  1586.         }
  1587.  
  1588.         private void AnswerDoorbell()
  1589.         {
  1590.             Room Room = Session.GetPlayer().GetRoom();
  1591.  
  1592.             if (Room == null || !Room.CheckRights(Session))
  1593.             {
  1594.                 return;
  1595.             }
  1596.  
  1597.             string Name = Request.PopFixedString();
  1598.             byte[] Result = Request.ReadBytes(1);
  1599.  
  1600.             Session Client = MangoServer.GetGame().GetSessionManager().GetSessionByPlayer(Name);
  1601.  
  1602.             if (Client == null)
  1603.             {
  1604.                 return;
  1605.             }
  1606.  
  1607.             if (Result[0] == Convert.ToByte(65))
  1608.             {
  1609.                 Client.GetPlayer().LoadingChecksPassed = true;
  1610.  
  1611.                 Client.GetMessageHandler().GetResponse().Init(41);
  1612.                 Client.GetMessageHandler().SendResponse();
  1613.             }
  1614.             else
  1615.             {
  1616.                 Client.GetMessageHandler().GetResponse().Init(131);
  1617.                 Client.GetMessageHandler().SendResponse();
  1618.             }
  1619.         }
  1620.  
  1621.         private void ApplyRoomEffect()
  1622.         {
  1623.             Room Room = Session.GetPlayer().GetRoom();
  1624.  
  1625.             if (Room == null || !Room.CheckRights(Session, true))
  1626.             {
  1627.                 return;
  1628.             }
  1629.  
  1630.             UserItem Item = Session.GetPlayer().GetInventoryComponent().GetItem(Request.PopWiredInt32());
  1631.  
  1632.             if (Item == null)
  1633.             {
  1634.                 return;
  1635.             }
  1636.  
  1637.             string type = "floor";
  1638.  
  1639.             if (Item.GetBaseItem().Name.ToLower().Contains("wallpaper"))
  1640.             {
  1641.                 type = "wallpaper";
  1642.             }
  1643.             else if (Item.GetBaseItem().Name.ToLower().Contains("landscape"))
  1644.             {
  1645.                 type = "landscape";
  1646.             }
  1647.  
  1648.             switch (type)
  1649.             {
  1650.                 case "floor":
  1651.  
  1652.                     Room.Floor = Item.ExtraData;
  1653.                     break;
  1654.  
  1655.                 case "wallpaper":
  1656.  
  1657.                     Room.Wallpaper = Item.ExtraData;
  1658.                     break;
  1659.  
  1660.                 case "landscape":
  1661.  
  1662.                     Room.Landscape = Item.ExtraData;
  1663.                     break;
  1664.             }
  1665.  
  1666.             using (SqlConnection SqlClient = MangoServer.GetSqlManager().GetConnection())
  1667.             {
  1668.                 SqlClient.RunQuery("UPDATE rooms SET " + type + " = '" + Item.ExtraData + "' WHERE id = '" + Room.RoomId + "' LIMIT 1");
  1669.             }
  1670.  
  1671.             Session.GetPlayer().GetInventoryComponent().RemoveItem(Item.Id);
  1672.  
  1673.             ServerMessage Message = new ServerMessage(46);
  1674.             Message.AppendStringWithBreak(type);
  1675.             Message.AppendStringWithBreak(Item.ExtraData);
  1676.             Room.SendMessage(Message);
  1677.         }
  1678.  
  1679.         private void PlaceItem()
  1680.         {
  1681.             // AZ@J16 10 10 0
  1682.  
  1683.             Room Room = Session.GetPlayer().GetRoom();
  1684.  
  1685.             if (Room == null || !Room.CheckRights(Session))
  1686.             {
  1687.                 return;
  1688.             }
  1689.  
  1690.             string PlacementData = Request.PopFixedString();
  1691.             string[] DataBits = PlacementData.Split(' ');
  1692.             int ItemId = int.Parse(DataBits[0]);
  1693.  
  1694.             UserItem Item = Session.GetPlayer().GetInventoryComponent().GetItem(ItemId);
  1695.  
  1696.             if (Item == null)
  1697.             {
  1698.                 return;
  1699.             }
  1700.  
  1701.             switch (Item.GetBaseItem().InteractionType.ToLower())
  1702.             {
  1703.                 case "dimmer":
  1704.  
  1705.                     if (Room.ItemCountByType("dimmer") >= 1)
  1706.                     {
  1707.                         Session.SendNotif("You can only have one moodlight in a room.");
  1708.                         return;
  1709.                     }
  1710.  
  1711.                     break;
  1712.             }
  1713.  
  1714.             // Wall Item
  1715.             if (DataBits[1].StartsWith(":"))
  1716.             {
  1717.                 string WallPos = Room.WallPositionCheck(":" + PlacementData.Split(':')[1]);
  1718.  
  1719.                 if (WallPos == null)
  1720.                 {
  1721.                     GetResponse().Init(516);
  1722.                     GetResponse().AppendInt32(11);
  1723.                     SendResponse();
  1724.  
  1725.                     return;
  1726.                 }
  1727.  
  1728.                 RoomItem RoomItem = new RoomItem(Item.Id, Item.BaseItem, Item.ExtraData, 0, 0, 0.0, 0, WallPos, Room);
  1729.  
  1730.                 if (Room.SetWallItem(Session, RoomItem))
  1731.                 {
  1732.                     Session.GetPlayer().GetInventoryComponent().RemoveItem(ItemId);
  1733.                 }
  1734.             }
  1735.             // Floor Item
  1736.             else
  1737.             {
  1738.                 int X = int.Parse(DataBits[1]);
  1739.                 int Y = int.Parse(DataBits[2]);
  1740.                 int Rot = int.Parse(DataBits[3]);
  1741.  
  1742.                 RoomItem RoomItem = new RoomItem(Item.Id, Item.BaseItem, Item.ExtraData, 0, 0, 0, 0, "", Room);
  1743.  
  1744.                 if (Room.SetFloorItem(Session, RoomItem, X, Y, Rot, true))
  1745.                 {
  1746.                     Session.GetPlayer().GetInventoryComponent().RemoveItem(ItemId);
  1747.                 }
  1748.             }
  1749.         }
  1750.  
  1751.         private void TakeItem()
  1752.         {
  1753.             int junk = Request.PopWiredInt32();
  1754.  
  1755.             Room Room = Session.GetPlayer().GetRoom();
  1756.  
  1757.             if (Room == null || !Room.CheckRights(Session, true))
  1758.             {
  1759.                 return;
  1760.             }
  1761.  
  1762.             RoomItem Item = Room.GetItem(Request.PopWiredInt32());
  1763.  
  1764.             if (Item == null)
  1765.             {
  1766.                 return;
  1767.             }
  1768.  
  1769.             switch (Item.GetBaseItem().InteractionType.ToLower())
  1770.             {
  1771.                 case "postit":
  1772.  
  1773.                     return; // not allowed to pick up post.its
  1774.             }
  1775.  
  1776.             Room.RemoveFurniture(Session, Item.Id);
  1777.             Session.GetPlayer().GetInventoryComponent().AddItem(Item.Id, Item.BaseItem, Item.ExtraData);
  1778.             Session.GetPlayer().GetInventoryComponent().UpdateItems(false);
  1779.         }
  1780.  
  1781.         private void MoveItem()
  1782.         {
  1783.             Room Room = Session.GetPlayer().GetRoom();
  1784.  
  1785.             if (Room == null || !Room.CheckRights(Session))
  1786.             {
  1787.                 return;
  1788.             }
  1789.  
  1790.             RoomItem Item = Room.GetItem(Request.PopWiredInt32());
  1791.  
  1792.             if (Item == null)
  1793.             {
  1794.                 return;
  1795.             }
  1796.  
  1797.             int x = Request.PopWiredInt32();
  1798.             int y = Request.PopWiredInt32();
  1799.             int Rotation = Request.PopWiredInt32();
  1800.             int Junk = Request.PopWiredInt32();
  1801.  
  1802.             Room.SetFloorItem(Session, Item, x, y, Rotation, false);
  1803.         }
  1804.  
  1805.         private void TriggerItem()
  1806.         {
  1807.             Room Room = Session.GetPlayer().GetRoom();
  1808.  
  1809.             if (Room == null)
  1810.             {
  1811.                 return;
  1812.             }
  1813.  
  1814.             RoomItem Item = Room.GetItem(Request.PopWiredInt32());
  1815.  
  1816.             if (Item == null)
  1817.             {
  1818.                 return;
  1819.             }
  1820.  
  1821.             Boolean hasRights = false;
  1822.  
  1823.             if (Room.CheckRights(Session))
  1824.             {
  1825.                 hasRights = true;
  1826.             }
  1827.  
  1828.             Item.Interactor.OnTrigger(Session, Item, Request.PopWiredInt32(), hasRights);
  1829.         }
  1830.  
  1831.         private void TriggerItemDiceSpecial()
  1832.         {
  1833.             Room Room = Session.GetPlayer().GetRoom();
  1834.  
  1835.             if (Room == null)
  1836.             {
  1837.                 return;
  1838.             }
  1839.  
  1840.             RoomItem Item = Room.GetItem(Request.PopWiredInt32());
  1841.  
  1842.             if (Item == null)
  1843.             {
  1844.                 return;
  1845.             }
  1846.  
  1847.             bool hasRights = false;
  1848.  
  1849.             if (Room.CheckRights(Session))
  1850.             {
  1851.                 hasRights = true;
  1852.             }
  1853.  
  1854.             Item.Interactor.OnTrigger(Session, Item, -1, hasRights);
  1855.         }
  1856.  
  1857.         private void OpenPostit()
  1858.         {
  1859.             Room Room = Session.GetPlayer().GetRoom();
  1860.  
  1861.             if (Room == null)
  1862.             {
  1863.                 return;
  1864.             }
  1865.  
  1866.             RoomItem Item = Room.GetItem(Request.PopWiredInt32());
  1867.  
  1868.             if (Item == null || Item.GetBaseItem().InteractionType.ToLower() != "postit")
  1869.             {
  1870.                 return;
  1871.             }
  1872.  
  1873.             // @p181855059CFF9C stickynotemsg
  1874.             GetResponse().Init(48);
  1875.             GetResponse().AppendStringWithBreak(Item.Id.ToString());
  1876.             GetResponse().AppendStringWithBreak(Item.ExtraData);
  1877.             SendResponse();
  1878.         }
  1879.  
  1880.         private void SavePostit()
  1881.         {
  1882.             Room Room = Session.GetPlayer().GetRoom();
  1883.  
  1884.             if (Room == null)
  1885.             {
  1886.                 return;
  1887.             }
  1888.  
  1889.             RoomItem Item = Room.GetItem(Request.PopWiredInt32());
  1890.  
  1891.             if (Item == null || Item.GetBaseItem().InteractionType.ToLower() != "postit")
  1892.             {
  1893.                 return;
  1894.             }
  1895.  
  1896.             String Data = Request.PopFixedString();
  1897.             String Color = Data.Split(' ')[0];
  1898.             String Text = Filtering.FilterInjectionChars(Data.Substring(Color.Length + 1), true);
  1899.  
  1900.             if (!Room.CheckRights(Session))
  1901.             {
  1902.                 if (!Data.StartsWith(Item.ExtraData))
  1903.                 {
  1904.                     return; // we can only ADD stuff! older stuff changed, this is not allowed
  1905.                 }
  1906.             }
  1907.  
  1908.             switch (Color)
  1909.             {
  1910.                 case "FFFF33":
  1911.                 case "FF9CFF":
  1912.                 case "9CCEFF":
  1913.                 case "9CFF9C":
  1914.  
  1915.                     break;
  1916.  
  1917.                 default:
  1918.  
  1919.                     return; // invalid color
  1920.             }
  1921.  
  1922.             Item.ExtraData = Color + " " + Text;
  1923.             Item.UpdateState(true, true);
  1924.         }
  1925.     }
  1926. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement