Advertisement
Guest User

Untitled

a guest
Sep 29th, 2020
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.72 KB | None | 0 0
  1. --SETTINGS
  2. DataVersion = 1
  3. SaveSpeed = 6
  4. --SETTINGS
  5.  
  6. local players = game.Players
  7. local HttpService = game:GetService("HttpService")
  8. print("Darkness PlayerDataScript launched!")
  9.  
  10. gamemain = workspace.GameMain
  11. gamedata = gamemain.GameData
  12. resources = game.ServerStorage.Resources
  13. playerstats = gamemain.PlayerStats
  14. playerstats:ClearAllChildren()
  15.  
  16. local debug_mode = game:findFirstChild("NetworkServer") == nil--) or true
  17.  
  18. local ds_dp = game:GetService("DataStoreService"):GetDataStore("DarknessProducts")
  19. local LoadLibrary = game.ReplicatedStorage.LoadLibrary
  20. local RbxUtility = LoadLibrary.RbxUtility
  21.  
  22.  
  23. local Utils = require(RbxUtility)
  24.  
  25. _G["GameDatabase"] = {
  26.     pinfo = {},
  27.     action = {},
  28.     ready = false,
  29. }
  30.  
  31. _G["GameDatabase"].action["CanPlay"] = function(player_name)
  32.     if _G["GameDatabase"].pinfo[player_name] == nil then return false end
  33.     return _G["GameDatabase"].pinfo[player_name].ready and not _G["GameDatabase"].pinfo[player_name].afk
  34. end
  35.  
  36. _G["GameDatabase"].action["SetData"] = function(player_name, data_name, value)
  37.     pcall(function()
  38.         _G["GameDatabase"].pinfo[player_name].stats[data_name] = value
  39.         _G["GameDatabase"].pinfo[player_name].changed:Fire()
  40.     end)
  41. end
  42.  
  43. _G["GameDatabase"].action["UpdateData"] = function(player_name, data_name, value)
  44.     pcall(function()
  45.         _G["GameDatabase"].pinfo[player_name].stats[data_name] = _G["GameDatabase"].pinfo[player_name].stats[data_name] + value
  46.         _G["GameDatabase"].pinfo[player_name].changed:Fire()
  47.     end)
  48. end
  49.  
  50. _G["GameDatabase"].action["GetData"] = function(player_name, data_name)
  51.     if _G["GameDatabase"].pinfo[player_name] == nil then return 0 end
  52.     return _G["GameDatabase"].pinfo[player_name].stats[data_name]
  53. end
  54.  
  55. _G["GameDatabase"].action["AddBought"] = function(player_name, bought_name)
  56.     if _G["GameDatabase"].pinfo[player_name] == nil then return false end
  57.     local ch = _G["GameDatabase"].pinfo[player_name].stats.bought
  58.     for i = 1, #ch do
  59.         if ch[i] == bought_name then
  60.             return
  61.         end
  62.     end
  63.     _G["GameDatabase"].pinfo[player_name].stats.bought[#ch + 1] = bought_name
  64.     _G["GameDatabase"].pinfo[player_name].changed:Fire()
  65. end
  66.  
  67. _G["GameDatabase"].action["CheckBought"] = function(player_name, bought_name)
  68.     if _G["GameDatabase"].pinfo[player_name] == nil then return false end
  69.     local ch = _G["GameDatabase"].pinfo[player_name].stats.bought
  70.     for i = 1, #ch do
  71.         if ch[i] == bought_name then
  72.             return true
  73.         end
  74.     end
  75.     return false
  76. end
  77.  
  78. _G["GameDatabase"].action["UseBought"] = function(player_name, bought_name)
  79.     if _G["GameDatabase"].pinfo[player_name] == nil then return false end
  80.     local ch = _G["GameDatabase"].pinfo[player_name].stats.bought
  81.     local result = {}
  82.     local used = false
  83.     for i = 1, #ch do
  84.         if ch[i] == bought_name and not used then
  85.             used = true
  86.         else
  87.             result[#result + 1] = ch[i]
  88.         end
  89.     end
  90.     _G["GameDatabase"].pinfo[player_name].stats.bought = result
  91.     _G["GameDatabase"].pinfo[player_name].changed:Fire()
  92.     return used
  93. end
  94.  
  95. _G["GameDatabase"].action["GetWait"] = function(player_name)
  96.     if _G["GameDatabase"].pinfo[player_name] == nil then return 0 end
  97.     return _G["GameDatabase"].pinfo[player_name].play_wait
  98. end
  99.  
  100. _G["GameDatabase"].action["AddWait"] = function(player_name)
  101.     if _G["GameDatabase"].pinfo[player_name] == nil then return end
  102.     _G["GameDatabase"].pinfo[player_name].play_wait = _G["GameDatabase"].pinfo[player_name].play_wait + 1
  103. end
  104.  
  105. _G["GameDatabase"].action["ClearWait"] = function(player_name)
  106.     if _G["GameDatabase"].pinfo[player_name] == nil then return end
  107.     _G["GameDatabase"].pinfo[player_name].play_wait = 0
  108. end
  109.  
  110. _G["GameDatabase"].action["TempBeast"] = function(player_name)
  111.     if _G["GameDatabase"].pinfo[player_name] == nil then return false end
  112.     return _G["GameDatabase"].pinfo[player_name].temp_beast
  113. end
  114.  
  115. local GamePassService = game:GetService('MarketplaceService')
  116. function CheckGamePass(plr, gamepass_id)
  117.     return GamePassService:UserOwnsGamePassAsync(plr.UserId, gamepass_id)
  118. end
  119.  
  120. function PlayerAdded(newPlayer)
  121.     print("Loading",newPlayer)
  122.     local pname = newPlayer.Name
  123.     local pid = newPlayer.userId
  124.     _G["GameDatabase"].pinfo[pname] = {
  125.         player = newPlayer,
  126.         changed = Instance.new("BindableEvent"),
  127.         stats = {
  128.             points = 0,
  129.             survivor_wins = 0,
  130.             beast_wins = 0,
  131.             games_played = 0,
  132.             bought = {},
  133.             version = DataVersion
  134.         },
  135.         play_wait = 0,
  136.         ready = false,
  137.         afk = false,
  138.         temp_beast = false,
  139.     }
  140.    
  141.     newPlayer.CharacterAdded:connect(function()
  142.         pcall(function()
  143.             wait()
  144.             local tt = Instance.new("Tool")
  145.             tt.Parent = newPlayer.Backpack
  146.             wait(0.1)
  147.             tt.Parent = nil
  148.         end)
  149.         wait()
  150.         pcall(function()
  151.             if _G["GameDatabase"].pinfo[pname].ready then
  152.                 local g = resources.MenuGui:clone()
  153.                 pcall(function()
  154.                     if gamedata.GameRunning.Value then
  155.                         g.MainFrame.GuiWall1.desc.Text = ""
  156.                         g.MainFrame.GuiWall2.desc.Text = ""
  157.                     else
  158.                         g.MainFrame.GuiWall1.desc.Text = "GAME END"
  159.                         g.MainFrame.GuiWall2.desc.Text = "NEXT ROUND WILL BEGIN SHORTLY"
  160.                     end
  161.                 end)
  162.                 g.Parent = newPlayer.PlayerGui
  163.             else
  164.                 local g = resources.IntroGui:clone()
  165.                 g.Parent = newPlayer.PlayerGui
  166.             end
  167.         end)
  168.     end)
  169.  
  170.     if ds_dp:GetAsync("TempBeast" .. pid) == true then
  171.         _G["GameDatabase"].pinfo[pname].temp_beast = true
  172.     end
  173.     ds_dp:OnUpdate("TempBeast" .. pid, function(val)
  174.         if val == true then
  175.             _G["GameDatabase"].pinfo[pname].temp_beast = true
  176.             _G["GameDatabase"].pinfo[pname].changed:Fire()
  177.         else
  178.             _G["GameDatabase"].pinfo[pname].temp_beast = false
  179.             _G["GameDatabase"].pinfo[pname].changed:Fire()
  180.         end
  181.     end)
  182.  
  183.     local last_save = 0
  184.     local save_issued = false
  185.     coroutine.resume(coroutine.create(function()
  186.         while newPlayer.Parent == players do
  187.             wait(0.05)
  188.             if save_issued then
  189.                 while (tick() - last_save) <= 60 / SaveSpeed do
  190.                     wait(0.05)
  191.                 end
  192.                 if _G["GameDatabase"].pinfo[pname] ~= nil and newPlayer.Parent == players then
  193.                     ds_dp:SetAsync("DATA" .. pid, HttpService:EncodeJSON(_G["GameDatabase"].pinfo[pname].stats))
  194.                 end
  195.             end
  196.         end
  197.     end))
  198.  
  199.     local function SavePlayerData()
  200.         if debug_mode then return end
  201.         save_issued = true
  202.         --newPlayer:SaveString("GameData", Utils.EncodeJSON(_G["GameDatabase"].pinfo[pname].stats))
  203.     end
  204.    
  205.  
  206.     local dat_ver, get_dat
  207.     if not debug_mode then
  208.         get_dat = ds_dp:GetAsync("DATA" .. pid) --newPlayer:LoadString("GameData")
  209.         if type(get_dat) ~= "string" then
  210.             newPlayer:WaitForDataReady()
  211.             local old_dat = newPlayer:LoadString("GameData")
  212.             if old_dat ~= nil then
  213.                 if DataVersion == 1 then
  214.                     get_dat = old_dat
  215.                     dat_ver = 1
  216.                 end
  217.             end
  218.         else
  219.             pcall(function()
  220.                 local test = HttpService:DecodeJSON(get_dat)
  221.                 dat_ver = test.version
  222.             end)
  223.         end
  224.     end
  225.     if not debug_mode and dat_ver == DataVersion then
  226.         pcall(function()
  227.             local test = HttpService:DecodeJSON(get_dat)
  228.             if type(test) == "table" then
  229.                 if type(test["points"]) == "number" and type(test["survivor_wins"]) == "number" and type(test["beast_wins"]) == "number" and type(test["games_played"]) == "number" and type(test["bought"]) == "table" then
  230.                     _G["GameDatabase"].pinfo[pname].stats.points = test.points
  231.                     _G["GameDatabase"].pinfo[pname].stats.survivor_wins = test.survivor_wins
  232.                     _G["GameDatabase"].pinfo[pname].stats.beast_wins = test.beast_wins
  233.                     _G["GameDatabase"].pinfo[pname].stats.games_played = test.games_played
  234.                     _G["GameDatabase"].pinfo[pname].stats.bought = test.bought
  235.                 end
  236.             end
  237.         end)
  238.     end
  239.     SavePlayerData()
  240.    
  241.     local ldc = newPlayer:findFirstChild("leaderstats")
  242.     if ldc then ldc:remove() end
  243.    
  244.     local leaderboard = Instance.new("IntValue")
  245.     leaderboard.Name = "leaderstats"
  246.    
  247.     local point_val = Instance.new("IntValue")
  248.     point_val.Name = "Points"
  249.     point_val.Parent = leaderboard
  250.    
  251.     local function UpdatePoints()
  252.         point_val.Value = _G["GameDatabase"].pinfo[pname].stats.points
  253.     end
  254.     UpdatePoints()
  255.     _G["GameDatabase"].pinfo[pname].changed.Event:connect(UpdatePoints)
  256.    
  257.     leaderboard.Parent = newPlayer
  258.     local stats_val = Instance.new("StringValue")
  259.     stats_val.Name = pname
  260.     local function UpdatePStats()
  261.         stats_val.Value = HttpService:EncodeJSON(_G["GameDatabase"].pinfo[pname].stats)
  262.     end
  263.     UpdatePStats()
  264.     _G["GameDatabase"].pinfo[pname].changed.Event:connect(UpdatePStats)
  265.     _G["GameDatabase"].pinfo[pname].changed.Event:connect(SavePlayerData)
  266.     stats_val.Parent = playerstats
  267.  
  268.     --GAME PASSES---------------------------------------------------------------------------
  269.     if game:findFirstChild("NetworkServer") ~= nil then
  270.         if CheckGamePass(newPlayer, 11127214) then --Darkness 2 VIP
  271.             _G["GameDatabase"].action["AddBought"](pname, "PassVIP")
  272.         end
  273.         if CheckGamePass(newPlayer, 11126779) then --Darkness 2 Two more bullets
  274.             _G["GameDatabase"].action["AddBought"](pname, "PassTwoMore")
  275.         end
  276.         if CheckGamePass(newPlayer, 146152895) then --Darkness 2 Juggernaut x3
  277.             _G["GameDatabase"].action["AddBought"](pname, "PassJuggernaut")
  278.         end
  279.         if CheckGamePass(newPlayer, 11127288) then --Darkness 2 nickname monitor
  280.             _G["GameDatabase"].action["AddBought"](pname, "PassNicknames")
  281.         end
  282.         if CheckGamePass(newPlayer, 11127315) then --Darkness 2 x10 chance beast
  283.             _G["GameDatabase"].action["AddBought"](pname, "Pass10Beast")
  284.         end
  285.         if CheckGamePass(newPlayer, 11127342) then --Darkness 2 x10 chance beast
  286.             _G["GameDatabase"].action["AddBought"](pname, "PassX2Points")
  287.         end
  288.     end
  289.     --GAME PASSES
  290. end
  291.  
  292. local pids = {11127214, 11126779, 146152895, 11127288, 11127315, 11127342}
  293. local pnms = {"PassVIP", "PassTwoMore", "PassJuggernaut", "PassNicknames", "Pass10Beast", "PassX2Points"}
  294. local MarketplaceService = game:GetService("MarketplaceService")
  295. MarketplaceService.PromptPurchaseFinished:connect(function(player, assetId, isPurchased)
  296.     if isPurchased then
  297.         for i = 1, #pids do
  298.             if pids[i] == assetId then
  299.                 _G["GameDatabase"].action["AddBought"](player.Name, pnms[i])
  300.                 break
  301.             end
  302.         end
  303.     end
  304. end)
  305.  
  306. local MarketplaceService = Game:GetService("MarketplaceService")
  307.  
  308. MarketplaceService.ProcessReceipt = function(receiptInfo)
  309.     local plr_id = receiptInfo.PlayerId
  310.     local prod_id = receiptInfo.ProductId
  311.  
  312.     if prod_id .. "" == 19179198 .. "" then
  313.         ds_dp:SetAsync("TempBeast" .. plr_id, true)
  314.     end
  315.  
  316.     return Enum.ProductPurchaseDecision.PurchaseGranted    
  317. end
  318.  
  319. game.Players.PlayerRemoving:connect(function(player)
  320.     local pname = player.Name
  321.     local pid = player.userId
  322.     if _G["GameDatabase"].pinfo[pname] ~= nil then
  323.         ds_dp:SetAsync("DATA" .. pid, HttpService:EncodeJSON(_G["GameDatabase"].pinfo[pname].stats))
  324.         _G["GameDatabase"].pinfo[pname] = nil
  325.     end
  326.     local stc = playerstats:findFirstChild(pname)
  327.     if stc ~= nil then
  328.         stc:remove()
  329.     end
  330. end)
  331.  
  332. _G["GameDatabase"].ready = true
  333.  
  334. game.Players.PlayerAdded:connect(PlayerAdded)
  335. local pl = game.Players:GetPlayers()
  336. for i = 1, #pl do
  337.     PlayerAdded(pl[i])
  338. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement