Advertisement
Guest User

codigo

a guest
Jun 27th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.82 KB | None | 0 0
  1. [ltr]public bool SetFloorItem(GameClient Session, Item Item, int newX, int newY, int newRot, bool newItem, bool OnRoller, bool sendMessage, bool updateRoomUserStatuses = false)
  2. {
  3. // Questions -> Skype: keiz.er
  4. bool NeedsReAdd = false;
  5.  
  6.  
  7. if (newItem)
  8. if (Item.IsWired)
  9. if (Item.GetBaseItem().WiredType == WiredBoxType.EffectRegenerateMaps && _room.GetRoomItemHandler().GetFloor.Where(x => x.GetBaseItem().WiredType == WiredBoxType.EffectRegenerateMaps).Count() > 0)
  10. return false;
  11.  
  12.  
  13. List<Item> ItemsOnTile = GetFurniObjects(newX, newY);
  14. if (Item.GetBaseItem().InteractionType == InteractionType.ROLLER && ItemsOnTile.Where(x => x.GetBaseItem().InteractionType == InteractionType.ROLLER && x.Id != Item.Id).Count() > 0)
  15. return false;
  16.  
  17.  
  18. if (!newItem)
  19. NeedsReAdd = _room.GetGameMap().RemoveFromMap(Item);
  20.  
  21.  
  22. Dictionary<int, ThreeDCoord> AffectedTiles = Gamemap.GetAffectedTiles(Item.GetBaseItem().Length, Item.GetBaseItem().Width, newX, newY, newRot);
  23.  
  24.  
  25. if (!_room.GetGameMap().ValidTile(newX, newY) || _room.GetGameMap().SquareHasUsers(newX, newY) && !Item.GetBaseItem().IsSeat)
  26. {
  27. if (NeedsReAdd)
  28. _room.GetGameMap().AddToMap(Item);
  29. return false;
  30. }
  31.  
  32.  
  33. foreach (ThreeDCoord Tile in AffectedTiles.Values)
  34. {
  35. if (!_room.GetGameMap().ValidTile(Tile.X, Tile.Y) ||
  36. (_room.GetGameMap().SquareHasUsers(Tile.X, Tile.Y) && !Item.GetBaseItem().IsSeat))
  37. {
  38. if (NeedsReAdd)
  39. {
  40. _room.GetGameMap().AddToMap(Item);
  41. }
  42. return false;
  43. }
  44. }
  45.  
  46. Double newZ = _room.GetGameMap().Model.SqFloorHeight[newX, newY];
  47.  
  48.  
  49. if (!OnRoller)
  50. {
  51. if (_room.GetGameMap().Model.SqState[newX, newY] != SquareState.OPEN && !Item.GetBaseItem().IsSeat)
  52. {
  53. return false;
  54. }
  55.  
  56.  
  57. foreach (ThreeDCoord Tile in AffectedTiles.Values)
  58. {
  59. if (_room.GetGameMap().Model.SqState[Tile.X, Tile.Y] != SquareState.OPEN &&
  60. !Item.GetBaseItem().IsSeat)
  61. {
  62. if (NeedsReAdd)
  63. {
  64. //AddItem(Item);
  65. _room.GetGameMap().AddToMap(Item);
  66. }
  67. return false;
  68. }
  69. }
  70.  
  71. if (!Item.GetBaseItem().IsSeat && !Item.IsRoller)
  72. {
  73. foreach (ThreeDCoord Tile in AffectedTiles.Values)
  74. {
  75. if (_room.GetGameMap().GetRoomUsers(new Point(Tile.X, Tile.Y)).Count > 0)
  76. {
  77. if (NeedsReAdd)
  78. _room.GetGameMap().AddToMap(Item);
  79. return false;
  80. }
  81. }
  82. }
  83. }
  84.  
  85.  
  86. // Find affected objects
  87. var ItemsAffected = new List<Item>();
  88. var ItemsComplete = new List<Item>();
  89.  
  90.  
  91. foreach (ThreeDCoord Tile in AffectedTiles.Values.ToList())
  92. {
  93. List<Item> Temp = GetFurniObjects(Tile.X, Tile.Y);
  94.  
  95.  
  96. if (Temp != null)
  97. {
  98. ItemsAffected.AddRange(Temp);
  99. }
  100. }
  101.  
  102.  
  103.  
  104.  
  105. ItemsComplete.AddRange(ItemsOnTile);
  106. ItemsComplete.AddRange(ItemsAffected);
  107.  
  108.  
  109. if (!OnRoller)
  110. {
  111. foreach (Item I in ItemsComplete.ToList())
  112. {
  113. if (I == null)
  114. continue;
  115.  
  116.  
  117. if (I.Id == Item.Id)
  118. continue;
  119.  
  120.  
  121. if (I.GetBaseItem() == null)
  122. continue;
  123.  
  124.  
  125. }
  126. }
  127.  
  128. {
  129. if (Item.Rotation != newRot && Item.GetX == newX && Item.GetY == newY)
  130. newZ = Item.GetZ;
  131.  
  132. foreach (Item I in ItemsComplete.ToList())
  133. {
  134. if (I == null)
  135. continue;
  136. if (I.Id == Item.Id)
  137. continue;
  138.  
  139.  
  140. if (I.GetBaseItem().InteractionType == InteractionType.STACKTOOL)
  141. { // Basically the core of the fix
  142. // Questions -> Skype: keiz.er
  143. newZ = I.GetZ;
  144. break;
  145. }
  146.  
  147.  
  148. if (I.TotalHeight > newZ)
  149. {
  150. newZ = I.TotalHeight;
  151. }
  152.  
  153.  
  154. }
  155. }
  156.  
  157. if (newRot != 0 && newRot != 2 && newRot != 4 && newRot != 6 && newRot != 8 && !Item.GetBaseItem().ExtraRot)
  158. newRot = 0;
  159.  
  160.  
  161. Item.Rotation = newRot;
  162. int oldX = Item.GetX;
  163. int oldY = Item.GetY;
  164. Item.SetState(newX, newY, newZ, AffectedTiles);
  165.  
  166.  
  167. if (!OnRoller && Session != null)
  168. Item.Interactor.OnPlace(Session, Item);
  169.  
  170.  
  171.  
  172.  
  173. if (newItem)
  174. {
  175. if (_floorItems.ContainsKey(Item.Id))
  176. {
  177. if (Session != null)
  178. Session.SendNotification(PlusEnvironment.GetGame().GetLanguageLocale().TryGetValue("room_item_placed"));
  179. _room.GetGameMap().RemoveFromMap(Item);
  180. return true;
  181. }
  182.  
  183.  
  184. if (Item.IsFloorItem && !_floorItems.ContainsKey(Item.Id))
  185. _floorItems.TryAdd(Item.Id, Item);
  186. else if (Item.IsWallItem && !_wallItems.ContainsKey(Item.Id))
  187. _wallItems.TryAdd(Item.Id, Item);
  188.  
  189.  
  190. if (sendMessage)
  191. _room.SendMessage(new ObjectAddComposer(Item, _room));
  192. }
  193. else
  194. {
  195. UpdateItem(Item);
  196. if (!OnRoller && sendMessage)
  197. _room.SendMessage(new ObjectUpdateComposer(Item, _room.OwnerId));
  198. }
  199. _room.GetGameMap().AddToMap(Item);
  200.  
  201.  
  202. if (Item.GetBaseItem().IsSeat)
  203. updateRoomUserStatuses = true;
  204.  
  205.  
  206. if (updateRoomUserStatuses)
  207. _room.GetRoomUserManager().UpdateUserStatusses();
  208.  
  209.  
  210. if (Item.GetBaseItem().InteractionType == InteractionType.TENT || Item.GetBaseItem().InteractionType == InteractionType.TENT_SMALL)
  211. {
  212. _room.RemoveTent(Item.Id, Item);
  213. _room.AddTent(Item.Id);
  214. }
  215.  
  216.  
  217. using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor())
  218. {
  219. 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");
  220. }
  221. return true;
  222. }[/ltr]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement