4bcuy

hb2

May 1st, 2023
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.34 KB | None | 0 0
  1. --//Const
  2. local TableUtil = require(script.Parent.TableUtil);
  3. local TradeSystem = game.ReplicatedStorage.TradeSystem;
  4. local TradeInfo = TradeSystem.TradeInfo;
  5. local Events = TradeSystem.Events;
  6. local PetsFolder = game.ReplicatedStorage.Pets;
  7.  
  8. --//State
  9. local CurrentId = 0;
  10. local Requests = {};
  11. local InTrade = {};
  12.  
  13. --//Functions
  14. local function CreateTrade(TradeId, Player1, Player2)
  15. local TradeFolder = Instance.new("Folder");
  16. TradeFolder.Name = tostring(TradeId);
  17.  
  18. local Player1Deposit = Instance.new("Folder");
  19. Player1Deposit.Name = Player1.Name;
  20. Player1Deposit.Parent = TradeFolder;
  21.  
  22. local Player2Deposit = Instance.new("Folder");
  23. Player2Deposit.Name = Player2.Name;
  24. Player2Deposit.Parent = TradeFolder;
  25.  
  26. local Player1Accept = Instance.new("BoolValue");
  27. Player1Accept.Name = Player1.Name.."Accept";
  28. Player1Accept.Parent = TradeFolder;
  29.  
  30. local Player2Accept = Instance.new("BoolValue");
  31. Player2Accept.Name = Player2.Name.."Accept";
  32. Player2Accept.Parent = TradeFolder;
  33.  
  34. TradeFolder.Parent = TradeInfo;
  35. return TradeFolder;
  36. end
  37.  
  38. local function EndTrade(TradeObj)
  39. local Players = TableUtil.Map(TradeObj:GetChildren(), function(Item)
  40. local plr = game.Players:FindFirstChild(Item.Name);
  41.  
  42. if (plr) then
  43. return plr;
  44. end
  45. end)
  46.  
  47. for i,v in pairs(Players) do
  48. InTrade[v] = nil;
  49. Events.EndTrade:FireClient(v);
  50. end
  51.  
  52. TradeObj:Destroy();
  53. end
  54.  
  55. local function FinishTrade(TradeObj)
  56. local Owner, GiveTo;
  57. local Containers = TableUtil.Filter(TradeObj:GetChildren(), function(Item)
  58. return game.Players:FindFirstChild(Item.Name)
  59. end)
  60.  
  61. table.foreach(Containers, print);
  62.  
  63. Owner = game.Players:FindFirstChild(Containers[1].Name);
  64. GiveTo = game.Players:FindFirstChild(Containers[2].Name);
  65. for i,v in pairs(Containers[1]:GetChildren()) do
  66. Owner.PetInventory:FindFirstChild(v.Name).Parent = GiveTo.PetInventory;
  67. end
  68.  
  69. Owner = game.Players:FindFirstChild(Containers[2].Name);
  70. GiveTo = game.Players:FindFirstChild(Containers[1].Name);
  71. for i,v in pairs(Containers[2]:GetChildren()) do
  72. Owner.PetInventory:FindFirstChild(v.Name).Parent = GiveTo.PetInventory;
  73. end
  74.  
  75. EndTrade(TradeObj)
  76. end
  77.  
  78. --//Events
  79. Events.SendRequest.OnServerEvent:Connect(function(plr, Target)
  80. print("Linx", Target);
  81. if (Target and not Requests[Target] and not InTrade[Target] and not InTrade[plr]) and Target.TradeRequests.Value then
  82. Requests[Target] = plr;
  83. Events.SendRequest:FireClient(Target, plr);
  84.  
  85. wait(10)
  86.  
  87. if (Requests[Target]) then
  88. Requests[Target] = nil;
  89. end
  90. end
  91. end)
  92.  
  93. Events.StartTrade.OnServerEvent:Connect(function(plr)
  94. local Partner = Requests[plr];
  95.  
  96. if (Partner) then
  97. local Trade = CreateTrade(CurrentId, Partner, plr);
  98.  
  99. InTrade[plr] = true;
  100. InTrade[Partner] = true;
  101.  
  102. Events.StartTrade:FireClient(plr, Trade);
  103. Events.StartTrade:FireClient(Partner, Trade);
  104. CurrentId = CurrentId + 1;
  105. end
  106. end)
  107.  
  108. Events.AddItem.OnServerInvoke = function(plr, TradeId, ItemName, IsRainbow)
  109. local Trade = TradeInfo:FindFirstChild(tostring(TradeId));
  110.  
  111. if (Trade and Trade:FindFirstChild(plr.Name) and plr.PetInventory:FindFirstChild(ItemName)) then
  112.  
  113. local Item = PetsFolder:FindFirstChild(ItemName);
  114.  
  115. if (Item) then
  116. local OtherPlr;
  117.  
  118. TableUtil.Filter(Trade:GetChildren(), function(v)
  119. if (v.Name ~= plr.Name and game.Players:FindFirstChild(v.Name)) then
  120. OtherPlr = game.Players:FindFirstChild(v.Name);
  121. end
  122. return v.Name ~= plr.Name.."Accept" and v.Name:find("Accept");
  123. end)
  124.  
  125. local Owned = TableUtil.Filter(plr:WaitForChild("PetInventory"):GetChildren(), function(item)
  126. return item.Name == Item.Name and item.Rainbow.Value == IsRainbow;
  127. end)
  128. local Placed = TableUtil.Filter(Trade:FindFirstChild(plr.Name):GetChildren(), function(item)
  129. return item.Name == Item.Name and item.Rainbow.Value == IsRainbow;
  130. end)
  131.  
  132.  
  133. if (#Owned > #Placed) then
  134. local Item = Item:Clone()
  135. Item.Rainbow.Value = IsRainbow;
  136. Item.Parent = Trade:FindFirstChild(plr.Name);
  137. Trade:FindFirstChild(plr.Name.."Accept").Value = false;
  138. Events.UpdateTrade:FireClient(plr)
  139. Events.UpdateTrade:FireClient(OtherPlr)
  140. end
  141. end
  142. end
  143. end
  144.  
  145. Events.RemoveItem.OnServerInvoke = function(plr, TradeId, ItemName, IsRainbow)
  146. local Trade = TradeInfo:FindFirstChild(tostring(TradeId));
  147.  
  148. if (Trade) then
  149. local OtherPlr
  150. local PlayerFolder = Trade:FindFirstChild(plr.Name);
  151.  
  152. TableUtil.Filter(Trade:GetChildren(), function(v)
  153. if (v.Name ~= plr.Name and game.Players:FindFirstChild(v.Name)) then
  154. OtherPlr = game.Players:FindFirstChild(v.Name);
  155. end
  156. return v.Name ~= plr.Name.."Accept" and v.Name:find("Accept");
  157. end)
  158.  
  159. if (PlayerFolder) then
  160. --local Item = PlayerFolder:FindFirstChild(ItemName);
  161. local Items = TableUtil.Filter(PlayerFolder:GetChildren(), function(Item)
  162. return Item.Name == ItemName and Item.Rainbow.Value == IsRainbow
  163. end)
  164. local Item = Items[1];
  165.  
  166. if (Item) then
  167. Trade:FindFirstChild(plr.Name.."Accept").Value = false;
  168. Trade:FindFirstChild(OtherPlr.Name.."Accept").Value = false;
  169. Item:Destroy();
  170. Events.UpdateTrade:FireClient(plr)
  171. Events.UpdateTrade:FireClient(OtherPlr)
  172. end
  173. end
  174. end
  175. end
  176.  
  177. Events.AcceptTrade.OnServerInvoke = function(plr, TradeId)
  178. local Trade = TradeInfo:FindFirstChild(tostring(TradeId));
  179.  
  180. if (Trade) then
  181. local OtherPlr;
  182. local AcceptBool = Trade:FindFirstChild(plr.Name.."Accept");
  183. local OtherBoolTbl = TableUtil.Filter(Trade:GetChildren(), function(v)
  184. if (v.Name ~= plr.Name and game.Players:FindFirstChild(v.Name)) then
  185. OtherPlr = game.Players:FindFirstChild(v.Name);
  186. end
  187. return v.Name ~= plr.Name.."Accept" and v.Name:find("Accept");
  188. end)
  189.  
  190. if (AcceptBool) then
  191. AcceptBool.Value = not AcceptBool.Value;
  192.  
  193. if (AcceptBool.Value and OtherBoolTbl[1].Value) then
  194. FinishTrade(Trade);
  195. end
  196. Events.UpdateTrade:FireClient(plr)
  197. Events.UpdateTrade:FireClient(OtherPlr)
  198. end
  199. end
  200. end
  201.  
  202. Events.EndTrade.OnServerEvent:Connect(function(plr, TradeId)
  203. local TradeObj = TradeInfo:FindFirstChild(tostring(TradeId));
  204.  
  205. if (TradeObj) then
  206. if (TradeObj:FindFirstChild(plr.Name)) then
  207. EndTrade(TradeObj);
  208. end
  209. end
  210. end)
  211.  
  212. game.Players.PlayerRemoving:Connect(function(plr)
  213. for i,v in pairs(TradeInfo:GetDescendants()) do
  214. if (v.Name == plr.Name) then
  215. EndTrade(v.Parent);
  216. end
  217. end
  218. end)
  219.  
  220.  
  221.  
Advertisement
Add Comment
Please, Sign In to add comment