Advertisement
Aquarius_Raverus

Party Module that may or may not work

Aug 22nd, 2020
2,524
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.63 KB | None | 0 0
  1. -- PartySystem.lua
  2.  
  3. local module = {}
  4. local parties = {}
  5.  
  6. local pendingInvites = {}
  7. local serverCooldowns = {}
  8.  
  9. local event = game:GetService("ReplicatedStorage"):WaitForChild('Events').Party
  10.  
  11. function module:create(plr)
  12.     if parties[plr.Name] then return end
  13.     if serverCooldowns[plr.Name] then return end
  14.    
  15.     --// Checking if player is in party.
  16.    
  17.     for i,v in pairs(parties) do
  18.         if v.Members then
  19.            
  20.             for name,v2 in pairs(v.Members) do
  21.                 if name == plr.Name then return end
  22.             end
  23.            
  24.         end
  25.     end
  26.  
  27.     --
  28.    
  29.     parties[plr.Name] = {
  30.        
  31.         Owner = plr.Name,
  32.         Members = {},
  33.        
  34.     };
  35.    
  36.     event:InvokeClient(plr, 'Create')
  37.    
  38.    
  39. end
  40.  
  41. function module:disband(plr)
  42.     if not parties[plr.Name] then return end
  43.     if serverCooldowns[plr.Name] then return end
  44.    
  45.     coroutine.wrap(function()
  46.         serverCooldowns[plr.Name] = true
  47.         wait(3)
  48.         serverCooldowns[plr.Name] = nil
  49.     end)()
  50.    
  51.    
  52.     --// Checking if player is in party.
  53.    
  54.     for i,v in pairs(parties) do
  55.         if v.Members then
  56.            
  57.             for name,v2 in pairs(v.Members) do
  58.                 if name == plr.Name then return end
  59.             end
  60.            
  61.         end
  62.     end
  63.  
  64.    
  65.     --[[
  66.         Remove markers later for party members via fire client.
  67.     ]]
  68.    
  69.     parties[plr.Name] = nil
  70.     event:InvokeClient(plr, 'Disband')
  71.    
  72.    
  73. end
  74.  
  75. function module:recruit(plr, target)
  76.     if serverCooldowns[plr.Name] then return end
  77.     if pendingInvites[target.Name] then return end
  78.    
  79.     --[[
  80.         Add invitiation message later.
  81.     ]]
  82.    
  83.     coroutine.wrap(function()
  84.         serverCooldowns[plr.Name] = true
  85.         wait(3)
  86.         serverCooldowns[plr.Name] = nil
  87.     end)()
  88.    
  89.     if target.Name == plr.Name then return end
  90.    
  91.     if parties[target.Name] then return end
  92.     if not parties[plr.Name] then return end
  93.    
  94.     --// Checking if player is in party.
  95.    
  96.         for i,v in pairs(parties) do
  97.         if v.Members then
  98.            
  99.             for name,v2 in pairs(v.Members) do
  100.                 if name == plr.Name then return end
  101.             end
  102.            
  103.         end
  104.     end
  105.  
  106.         --// Checking if player is in party.
  107.    
  108.     for i,v in pairs(parties) do
  109.         if v.Members then
  110.            
  111.             for name,v2 in pairs(v.Members) do
  112.                 if name == target.Name then return end
  113.             end
  114.            
  115.         end
  116.     end
  117.  
  118.    
  119.     -- Target has to be player instance.
  120.    
  121.     event:InvokeClient(target, 'SendRecruit', plr)
  122.    
  123.     pendingInvites[target.Name] = {
  124.         From = plr.Name,
  125.         To = target.Name,
  126.     };
  127.    
  128.    
  129. end
  130.  
  131. function module:recruitAction(plr, action)
  132.     if action == 'Accept' then
  133.        
  134.         if pendingInvites[plr.Name] then
  135.            
  136.             -- Accept
  137.            
  138.            
  139.             event:InvokeClient(game.Players[pendingInvites[plr.Name].From], 'Accept',game.Players[pendingInvites[plr.Name].To])
  140.            
  141.             local PlayerName = game.Players[pendingInvites[plr.Name].From].Name
  142.            
  143.             parties[PlayerName].Members[plr.Name] = true;
  144.            
  145.             pendingInvites[plr.Name] = nil
  146.            
  147.         end
  148.        
  149.     end
  150.    
  151.     if action == 'Decline' then
  152.        
  153.         if pendingInvites[plr.Name] then
  154.            
  155.             -- Decline
  156.                    
  157.             event:InvokeClient(game.Players[pendingInvites[plr.Name].From], 'Decline',game.Players[pendingInvites[plr.Name].To])
  158.            
  159.             pendingInvites[plr.Name] = nil
  160.         end
  161.        
  162.     end
  163.    
  164. end
  165.  
  166. function module:leave(plr)
  167.     if parties[plr.Name] then return end
  168.     if serverCooldowns[plr.Name] then return end
  169.     if pendingInvites[plr.Name] then return end
  170.    
  171.     coroutine.wrap(function()
  172.         serverCooldowns[plr.Name] = true
  173.         wait(3)
  174.         serverCooldowns[plr.Name] = nil
  175.     end)()
  176.    
  177.     for i,v in pairs(parties) do
  178.         if v.Members then
  179.            
  180.             for name,v2 in pairs(v.Members) do
  181.                 if name == plr.Name then
  182.                     v.Members[name] = nil
  183.                    
  184.                     local owner = game.Players[v.Owner]
  185.                    
  186.                     event:InvokeClient(owner, 'Leave', plr)
  187.                    
  188.                     break
  189.                 else
  190.                    
  191.                 end
  192.             end
  193.            
  194.         end
  195.     end
  196.    
  197.    
  198.    
  199. end
  200.  
  201.  
  202.  
  203. return module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement