Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Please correct my script because I don't know if it works?

Asked by 4 years ago

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

Answer this question