Guest User

Untitled

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