it's been some time since I released something, so here we are.
Quite some people have requested me to make this fix. I didn't want money for such an easy fix, so once again here we are.
In Plus\HabboHotel\Rooms\RoomItemHandling.cs find
Code:
public bool SetFloorItem(GameClient Session, Item Item, int newX, int newY, int newRot, bool newItem, bool OnRoller, bool sendMessage, bool updateRoomUserStatuses = false)
Change the entire void to
Spoiler:
Code:
public bool SetFloorItem(GameClient Session, Item Item, int newX, int newY, int newRot, bool newItem, bool OnRoller, bool sendMessage, bool updateRoomUserStatuses = false)
{
// Questions -> Skype: keiz.er
bool NeedsReAdd = false;
if (newItem)
if (Item.IsWired)
if (Item.GetBaseItem().WiredType == WiredBoxType.EffectRegenerateMaps && _room.GetRoomItemHandler().GetFloor.Where(x => x.GetBaseItem().WiredType == WiredBoxType.EffectRegenerateMaps).Count() > 0)
return false;
Item.Rotation = 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 (_floorItems.ContainsKey(Item.Id))
{
if (Session != null)
Session.SendNotification(PlusEnvironment.GetGame().GetLanguageLocale().TryGetValue("room_item_placed"));
_room.GetGameMap().RemoveFromMap(Item);
return true;
}
if (Item.IsFloorItem && !_floorItems.ContainsKey(Item.Id))
_floorItems.TryAdd(Item.Id, Item);
else if (Item.IsWallItem && !_wallItems.ContainsKey(Item.Id))
_wallItems.TryAdd(Item.Id, Item);
if (sendMessage)
_room.SendMessage(new ObjectAddComposer(Item, _room));
}
else
{
UpdateItem(Item);
if (!OnRoller && sendMessage)
_room.SendMessage(new ObjectUpdateComposer(Item, _room.OwnerId));
}
_room.GetGameMap().AddToMap(Item);
if (Item.GetBaseItem().IsSeat)
updateRoomUserStatuses = true;
if (updateRoomUserStatuses)
_room.GetRoomUserManager().UpdateUserStatusses();
if (!_room.GetGameMap().ValidTile(newX, newY) || _room.GetGameMap().SquareHasUsers(newX, newY) && !Item.GetBaseItem().IsSeat)
{
if (NeedsReAdd)
_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)
{
_room.GetGameMap().AddToMap(Item);
}
return false;
}
}
// Start calculating new Z coordinate
Double newZ = _room.GetGameMap().Model.SqFloorHeight[newX, newY];
if (!OnRoller)
{
// Make sure this tile is open and there are no users here
if (_room.GetGameMap().Model.SqState[newX, newY] != SquareState.OPEN && !Item.GetBaseItem().IsSeat)
{
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().GetRoomUsers(new Point(Tile.X, Tile.Y)).Count > 0)
{
if (NeedsReAdd)
_room.GetGameMap().AddToMap(Item);
return false;
}
}
}
}
// Find affected objects
var ItemsAffected = new List<Item>();
var ItemsComplete = new List<Item>();
if (!OnRoller)
{
// Check for items in the stack that do not allow stacking on top of them
foreach (Item I in ItemsComplete.ToList())
{
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);
}
fail = true;
}
}
}
//if (!Item.IsRoller)
{
// If this is a rotating action, maintain item at current height
if (Item.Rotation != newRot && Item.GetX == newX && Item.GetY == newY)
newZ = Item.GetZ;
// Are there any higher objects in the stack!?
foreach (Item I in ItemsComplete.ToList())
{
if (I == null)
continue;
if (I.Id == Item.Id)
continue;
Item.Rotation = 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 (_floorItems.ContainsKey(Item.Id))
{
if (Session != null)
Session.SendNotification(PlusEnvironment.GetGame().GetLanguageLocale().TryGetValue("room_item_placed"));
_room.GetGameMap().RemoveFromMap(Item);
return true;
}
if (Item.IsFloorItem && !_floorItems.ContainsKey(Item.Id))
_floorItems.TryAdd(Item.Id, Item);
else if (Item.IsWallItem && !_wallItems.ContainsKey(Item.Id))
_wallItems.TryAdd(Item.Id, Item);
if (sendMessage)
_room.SendMessage(new ObjectAddComposer(Item, _room));
}
else
{
UpdateItem(Item);
if (!OnRoller && sendMessage)
_room.SendMessage(new ObjectUpdateComposer(Item, _room.OwnerId));
}
_room.GetGameMap().AddToMap(Item);
if (Item.GetBaseItem().IsSeat)
updateRoomUserStatuses = true;
if (updateRoomUserStatuses)
_room.GetRoomUserManager().UpdateUserStatusses();