Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [ltr]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;
- List<Item> ItemsOnTile = GetFurniObjects(newX, newY);
- if (Item.GetBaseItem().InteractionType == InteractionType.ROLLER && ItemsOnTile.Where(x => x.GetBaseItem().InteractionType == InteractionType.ROLLER && x.Id != Item.Id).Count() > 0)
- return 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)
- _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;
- }
- }
- Double newZ = _room.GetGameMap().Model.SqFloorHeight[newX, newY];
- if (!OnRoller)
- {
- 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;
- }
- }
- 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>();
- foreach (ThreeDCoord Tile in AffectedTiles.Values.ToList())
- {
- List<Item> Temp = GetFurniObjects(Tile.X, Tile.Y);
- if (Temp != null)
- {
- ItemsAffected.AddRange(Temp);
- }
- }
- ItemsComplete.AddRange(ItemsOnTile);
- ItemsComplete.AddRange(ItemsAffected);
- if (!OnRoller)
- {
- foreach (Item I in ItemsComplete.ToList())
- {
- if (I == null)
- continue;
- if (I.Id == Item.Id)
- continue;
- if (I.GetBaseItem() == null)
- continue;
- }
- }
- {
- if (Item.Rotation != newRot && Item.GetX == newX && Item.GetY == newY)
- newZ = Item.GetZ;
- foreach (Item I in ItemsComplete.ToList())
- {
- if (I == null)
- continue;
- if (I.Id == Item.Id)
- continue;
- if (I.GetBaseItem().InteractionType == InteractionType.STACKTOOL)
- { // Basically the core of the fix
- // Questions -> Skype: keiz.er
- newZ = I.GetZ;
- break;
- }
- if (I.TotalHeight > newZ)
- {
- newZ = I.TotalHeight;
- }
- }
- }
- if (newRot != 0 && newRot != 2 && newRot != 4 && newRot != 6 && newRot != 8 && !Item.GetBaseItem().ExtraRot)
- newRot = 0;
- 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 (Item.GetBaseItem().InteractionType == InteractionType.TENT || Item.GetBaseItem().InteractionType == InteractionType.TENT_SMALL)
- {
- _room.RemoveTent(Item.Id, Item);
- _room.AddTent(Item.Id);
- }
- using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor())
- {
- dbClient.RunQuery("UPDATE `items` SET `room_id` = '" + _room.RoomId + "', `x` = '" + Item.GetX + "', `y` = '" + Item.GetY + "', `z` = '" + Item.GetZ + "', `rot` = '" + Item.Rotation + "' WHERE `id` = '" + Item.Id + "' LIMIT 1");
- }
- return true;
- }[/ltr]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement