#Problem buying a gamepass

1 messages · Page 1 of 1 (latest)

unborn plank
#

Good evening,
I am trying to implement a gamepass as an in-app purchase. When I test it to buy it, it tells me “Purchase successful,” but my hasPass variable never changes to true. I don't understand. Can someone help me out? Thank you.

#

my script local :

#
local player = game.Players.LocalPlayer


purchaseButton.MouseButton1Click:connect(function()
    if player then
        print("je clique")
        game:GetService("MarketplaceService"):PromptGamePassPurchase(player, selectedItem.GamePassId)
    end
end)
#

my script server:

#
local Players = game:GetService("Players")
local MarketplaceService = game:GetService("MarketplaceService")
local PlayerLocal = Players.LocalPlayer
local gamepassId = 1352476550
game.Players.PlayerAdded:Connect(function(player)
    player.CharacterAdded:Connect(function(character)
        local success, hasPass = pcall(function()
            return MarketplaceService:UserOwnsGamePassAsync(player.UserId, gamepassId)
        end)
        print("success" .. tostring(success))
        print("hasPass" .. tostring(hasPass))
        if success and hasPass then
            local staminaBoost = Instance.new("BoolValue")
            staminaBoost.Name = "HasStaminaBoost"
            staminaBoost.Value = true
            staminaBoost.Parent = player
            print("je crée la variable a true")
        end
    end)
end)
#

I should point out that it's normal for me to only check when the character spawns because I buy the game pass in a lobby.

unborn plank
brave ferry
#

oh

#

french

#

@frozen obsidian

frozen obsidian
#

😭

unborn plank
#

And hasFalse is False constantly

brave ferry
#

i would not run the async function every time

#

you should save it once

frozen obsidian
#

local PlayerLocal = Players.LocalPlayer

unborn plank
brave ferry
#

and then overwrite it on purchase

frozen obsidian
unborn plank
frozen obsidian
#

serverscript where you use localplayer

unborn plank
#

Oh yes mb

#

Yes I put it in a server script

frozen obsidian
#

yeah well it doesn't work

unborn plank
#

I will try

#

Thanks

frozen obsidian
#

can't detect localplayer on server

#

however you use game.playersadded

#

which is used on server to detect player

unborn plank
#

Yes and my variable PlayerLocal is not used I think finally

frozen obsidian
#

yeah but you get an error i think

#

and so the rest of the code stops

unborn plank
#

Ok ill try

frozen obsidian
#

check the output

unborn plank
#

Ok i Check in 5min thanks you for your time

unborn plank
plush turretBOT
#

studio** You are now Level 6! **studio

unborn plank
#

and after spawning the character

#

hasPass is at False statement

frozen obsidian
#

c'est a cause de ça

#

tu utilises CharacterAdded

#

qui est executé a chaque fois que tu spawn

unborn plank
#

yes

frozen obsidian
#

donc si tu meurs

#

ça réexecute

#

mais c'est pas comme ça que tu devrais le faire

unborn plank
#

tu me conseillerai comment?

#

(quand jachete le gamepass je precise que mon character n'a pas encore spawn)

frozen obsidian
#

déjà

unborn plank
frozen obsidian
#

Déjà elle est où la fonction qui permet de process le paiement ?

unborn plank
#

elle est dans un localScript qui écoute le bouton

#

je te l'envoie

frozen obsidian
#

le mieux c'est de faire un remoteevent

#

c'est au server de faire le prompt

#

pas au client

unborn plank
#

ok je vais essayer

frozen obsidian
#

Le mieux:

#

utilise un remote event

#

Qui envoie le player uniquement

#

donc en local y'a juste RemoteEvent:FireServer()

#

juste ça

#

du serveur tu reçois

#

RemoteEvent.OnServerEvent:Connect(function(player)

#

de la

unborn plank
#

yes logique

frozen obsidian
#

MarketplaceService:PromptGamePassPurchase(player, productId)

#

tu fais ça

#

att

#

c'est aps la bonne fonction

#

Voilà

#

tu prompt le gamepass

#

mais une fois que t'as fait ça

#

roblox te permet de savoir si quelqu'un à acheter ou non

unborn plank
#

ok je vais essayer

frozen obsidian
unborn plank
#

je te remercie

frozen obsidian
#

PromptGamePassPurchaseFinished est triggered quand le joueur à soit appuyer sur le bouton d'achat soit le bouton cancel

unborn plank
#

je te tiens au jus je te remercie

frozen obsidian
#

donc avec le wasPurchased qui est un bool tu sais si oui ou non l'achat a été effectué

unborn plank
#

ok merci

frozen obsidian
#

et c'est ce que tu dois faire

#

du client tu ne devrais jamais avoir a touché des trucs sensibles

unborn plank
#

voici ce que j'ai fait

#

ça marche par contre

#

PromptGamePassFinished ca marche uniquement sur un script local

#

et non pas serveur

unborn plank
frozen obsidian
#

j'ai pas compris

#

ah

#

le gamepassId c'est l'id du gamepass qui a été utilise pour acheter

#

donc ut peux pas tricher là dessus

#

c'est roblox lui meme qui sort le gamepassid

unborn plank
#

ok et dernier question

#

et c'est une bonne méthode comment je veux proceder?

frozen obsidian
#

si tu fais tout côté serveur il devrait pas y avoir de problème

#

et oui

unborn plank
#

et la vu que je suis en "test" j'ai pas de pop-up qui me dit que j'ai deja acheter

#

je peux racheter a l'infini

frozen obsidian
unborn plank
#

c'est celle-ci non "MarketplaceService:UserOwnsGamePassAsync(player.UserId, gamePassId)"

#

que je dois utiliser

frozen obsidian
#

elle vérifie si tu possède le gamepass dans ton inventaire oui

#

et ça marchera pas sur studio

unborn plank
#

pour verifier que j'ai deja acheter je le mets içi dans mon print ? "local Players = game:GetService("Players")
local MarketplaceService = game:GetService("MarketplaceService")
local purchaseEvent = game.ReplicatedStorage:FindFirstChild("PurchaseEvent")

purchaseEvent.OnServerEvent:Connect(function(player,gamepassId)
print("je le mets içi ")
MarketplaceService:PromptGamePassPurchase(player, gamepassId)
end)"

frozen obsidian
#

car il faut vraiment le posséder

unborn plank
#

ah donc j'ai meme pas besoins de faire la verif avec ca enfaite " "MarketplaceService:UserOwnsGamePassAsync(player.UserId, gamePassId)""

frozen obsidian
#

bah si le joueur le possède déjà tu veux pas lui faire apparaitre la popup

#

donc tu test

unborn plank
#

ah ok j'ai compris

#

grosso modo, elle sert juste a ne pas faire le pop-up mais si je la mets pas yaura quand même le pop-up mais roblox va m'empecher de l'acheter?

frozen obsidian
#

roblox dira juste "vous posséder déjà le gamepass"

unborn plank
#

je vois

frozen obsidian
#

donc ça va afficher pour rien

unborn plank
#

je te remercie.

frozen obsidian
#

de rien

unborn plank
#

je peux t'ajouter en ami si jamais j'ai encore besoins d'aide sur une autre fonctionnalité?

frozen obsidian
#

mes dms sont ouvert

unborn plank
#

ca marche merci