Basically I've asked a question about how to make a membership that can expire. Racoonyz answered, "You would need to use a mix of os.time(), DataStores, and the MarketplaceService in order to do this." So I did it. I've made a script that uses a mix of os.time(), DataStores, and MarketplaceService.I didn't know if my script works because I made three developer products in a group and the script assures if the player has one of those developer products then it where the script rewards the player until a certain amount of time has passed since the player has bought one of those developer products. But since those three developer products are made in a group place instead of my place I don't own it so I can't really know if my script worked? Please correct my script!
local Subscriptions = { VIP15Days = { ID = 966297383, Seconds = 1296000 }, VIP1Month = { ID = 966297523, Seconds = 2629746 }, VIPForever = { ID = 966297617, } } local DataStore = game:GetService("DataStoreService"):GetDataStore("Subscription") local MarketPlaceService = game:GetService("MarketplaceService") function VIPRewards(Player) local Nametag = game.ReplicatedStorage.VIPNametag:Clone() Nametag.Parent = Player.Character:WaitForChild("Head") Nametag.Adornee = Player.Character:WaitForChild("Head") Player:WaitForChild("PlayerGui").Reward.LocalScript.Disabled = false end game.Players.PlayerAdded:Connect(function(Player) SubscriptionTimeLimit = Instance.new("NumberValue",Player) SubscriptionTimeLimit.Name = "SubscriptionTimeLimit" SubscriptionTimeLimit.Value = TimeSinceLastPurchase local TimeNow = os.time() local Data = 0 pcall(function() Data = DataStore:GetAsync(Player.UserId.."-Subscription") TimeSinceLastPurchase = TimeNow - Data end) if MarketPlaceService:UserOwnsGamePassAsync(Player,Subscriptions.VIP15Days.ID) and Player:WaitForChild("SubscriptionTimeLimit").Value > 0 then SubscriptionTimeLimit.Value = Subscriptions.VIP15Days.Seconds VIPRewards(Player) elseif MarketPlaceService:UserOwnsGamePassAsync(Player,Subscriptions.VIP1Month.ID) and Player:WaitForChild("SubscriptionTimeLimit").Value > 0 then SubscriptionTimeLimit.Value = Subscriptions.VIP1Month.Seconds VIPRewards(Player) elseif MarketPlaceService:UserOwnsGamePassAsync(Player,Subscriptions.VIPForever.ID) then -- It wont add the value of SubscritiontimeLimit, It would just give the player the rewards. VIPRewards(Player) end end) game.Players.PlayerRemoving:Connect(function(Player) DataStore:SetAsync(Player.UserId.."-Subscription",Player:WaitForChild("SubscriptionTimeLimit").Value) end) while wait(1) do if SubscriptionTimeLimit.Value > 0 then SubscriptionTimeLimit.Value = SubscriptionTimeLimit.Value - 1 end end