Comment fonctionne une boutique de serveur FiveM sur Skalp : paiement, livraison en jeu et remboursements
Une boutique de serveur sur Skalp vend du VIP, des grades, des objets et des véhicules aux joueurs de votre serveur FiveM. Le joueur paie sur la page de votre boutique, la ressource skalp installée sur votre serveur récupère l'achat en une dizaine de secondes environ et le livre en jeu, ou directement dans son personnage s'il est hors ligne. Skalp est le vendeur : la TVA, les factures, les remboursements et les rétrofacturations sont gérés de notre côté.
Ce que les joueurs peuvent acheter
Tout ce que votre serveur peut donner à un joueur avec une commande ou un script. Les objets et les véhicules fonctionnent directement sur les frameworks courants. Un métier, un grade, une place en whitelist ou une priorité dans la file d'attente passent par les commandes de votre propre serveur. Un VIP mensuel peut être un abonnement livré à nouveau chaque mois payé, et les joueurs peuvent offrir n'importe quel produit à un ami.
La boutique reçoit sa propre adresse, votrenom.skalp.gg, ou votre propre domaine. Elle est listée sur la marketplace Skalp dans l'onglet Boutiques de serveur, avec le nombre de joueurs en ligne si vous renseignez l'adresse de votre serveur. Les produits à l'unité, comme un grade VIP, n'apparaissent pas dans la liste des produits de la marketplace, car ils n'ont de sens que pour les joueurs de votre serveur.
- Avant d'acheter, le joueur lie son compte Steam. C'est ainsi que votre serveur sait qui a acheté quoi. Il paie par carte, Apple Pay, Google Pay ou un moyen de paiement local.
- La ressource skalp demande à Skalp les nouveaux achats environ toutes les dix secondes. Elle enregistre chacun dans la table
skalp_deliveries avant de le confirmer : si le serveur plante entre-temps, l'achat est récupéré à nouveau et rien n'est perdu.
- Un joueur connecté en jeu reçoit son achat tout de suite. S'il est hors ligne, les récompenses intégrées vont directement dans son personnage, dans votre base de données, et tout est là à sa prochaine connexion. Skalp choisit le dernier personnage qu'il a joué : ox_core et vRP le relient eux-mêmes à Steam, et sur ESX, QBCore et Qbox la ressource l'apprend la première fois que le joueur charge un personnage avec la ressource 3.2 ou plus récente. Jusque-là, et pour tout ce qui ne peut pas être écrit sans risque pendant que le joueur est absent, la livraison attend qu'il se connecte.
- La commande dans votre tableau de bord indique si elle a été livrée, si elle est en attente ou si elle a échoué, et pourquoi.
Connecter votre serveur
Dans le tableau de bord de votre boutique, ouvrez Serveur de jeu et cliquez sur Connecter le serveur. Téléchargez la ressource, déposez le dossier skalp dans resources et collez dans server.cfg les trois lignes affichées dans le tableau de bord :
ensure skalp
set skalp_key "la clé du tableau de bord"
add_ace resource.skalp command allow
Après un redémarrage, la console affiche Connected to Skalp et le tableau de bord montre le serveur comme connecté. La clé n'apparaît qu'une seule fois. Si vous la perdez, générez-en une nouvelle : l'ancienne cesse de fonctionner immédiatement.
Les joueurs sont identifiés par Steam, le serveur a donc besoin d'une clé Steam Web API (steam_webApiKey dans server.cfg). La ressource fonctionne avec ESX et ses forks, QBCore, Qbox, ox_core et vRP, avec ox_inventory ou l'inventaire du framework. Un serveur sans framework peut quand même livrer avec des commandes et ses propres scripts. oxmysql est facultatif : avec lui, les livraisons sont conservées dans votre base de données, et sans lui dans le stockage propre à la ressource.
Rien ne se connecte à votre serveur : il n'y a aucun port à ouvrir ni d'URL à renseigner. C'est votre serveur qui demande les achats à Skalp, et tout ce qui circule dans les deux sens est chiffré et signé avec votre clé. La clé elle-même ne quitte jamais le serveur, donc une fausse API ou une connexion interceptée ne peut rien lui faire livrer.
Ce que donne un produit
Sur chaque produit, vous écrivez ce qu'il donne sous la forme d'une commande. La ressource fournit des commandes qui fonctionnent de la même façon sur tous les frameworks, par exemple :
| Commande | Ce qu'elle fait |
skalp_item {playerId} bread 5 | Ajoute un objet via ox_inventory, qb-inventory ou le framework. |
skalp_vehicle {playerId} sultanrs | Enregistre le véhicule avec une plaque libre dans le garage du joueur. |
Toute autre commande enregistrée par une ressource de votre serveur fonctionne aussi, par exemple setjob {playerId} police 0. Séparez plusieurs étapes par ;. Skalp renseigne {playerId}, {steamhex}, {steamid}, {quantity}, {orderId}, {productSlug} et {buyerName}. Une commande qui utilise {citizenid}, {charId} ou {license} à la place de {playerId} s'exécute aussi quand le joueur est hors ligne. Vous pouvez aussi poser à l'acheteur jusqu'à dix questions au paiement, comme le texte d'une plaque personnalisée, et utiliser la réponse sous la forme {field_plate}. Les réponses saisies par l'acheteur sont réduites aux lettres, aux chiffres et à _.:-[], personne ne peut donc glisser une seconde commande.
Les commandes s'exécutent comme la console du serveur, et seules les commandes enregistrées par une ressource de jeu peuvent s'exécuter. Les commandes propres à la console du serveur, comme quit, exec ou add_ace, ainsi que celles de txAdmin ne s'exécutent jamais, quoi que dise un produit, et vous pouvez en bloquer d'autres dans Config.BlockedCommands. Une commande qui n'existe pas sur votre serveur fait échouer la livraison en indiquant son nom : une faute de frappe se voit donc sur la commande.
Systèmes personnalisés : votre propre garage, VIP ou script de boutique
Si votre serveur donne les choses via son propre script, par exemple un garage ou un système VIP maison sans commande console, enregistrez un handler dans votre propre ressource. Un handler prend le relais de la commande du produit :
local function register()
exports.skalp:RegisterHandler('sultan-rs', function(ctx)
local ok, err = exports.my_garage:GiveCar(ctx.playerId, 'sultanrs')
if not ok then return false, err end
return true
end)
end
AddEventHandler('onResourceStart', function(name)
if name == 'skalp' then register() end
end)
if GetResourceState('skalp') == 'started' then register() end
La clé est le slug ou l'id du produit. Renvoyez true quand l'achat est livré, false, 'raison' s'il a échoué (la raison s'affiche sur la commande), ou nil, 'raison' pour le garder en attente et réessayer plus tard. ctx contient l'id du joueur, son identifiant, la quantité, le numéro de commande, le produit et les réponses de l'acheteur à vos questions.
La ressource exporte aussi GiveItem et GiveVehicle pour vos propres scripts, et son dossier examples contient des fichiers prêts à l'emploi pour ESX, QBCore et les serveurs sans framework. Les handlers vivent dans votre ressource, donc une mise à jour de skalp ne les écrase jamais.
Les handlers s'exécutent quand le joueur est en jeu. Si votre serveur garde les personnages, les inventaires ou les garages dans ses propres tables, enregistrez des handlers hors ligne avec exports.skalp:RegisterOfflineHandler et la livraison hors ligne fonctionne aussi avec votre configuration.
Abonnements, remboursements et rétrofacturations
- Un abonnement est livré à nouveau pour chaque période payée. Quand il est réellement terminé, la commande de retrait du produit s'exécute. Un handler enregistré avec
RegisterSubscriptionHandler reçoit ctx.active et peut accorder ou retirer l'avantage lui-même.
- Un remboursement complet annule tout ce qui est encore en attente et exécute la commande de retrait pour ce que le serveur a déjà livré. Un joueur hors ligne le perd à sa prochaine connexion.
- Skalp conteste les rétrofacturations auprès de la banque. Une rétrofacturation perdue fonctionne comme un remboursement et bannit aussi l'acheteur de votre serveur ; si elle est gagnée plus tard, le bannissement est levé. Un joueur qui a reçu l'achat en cadeau n'est pas banni pour la rétrofacturation de la personne qui l'a offert.
Ce que votre serveur envoie à Skalp
L'id de connexion, la version de la ressource, le nom du framework, l'état de l'exécution des commandes et de la connexion Steam, et le résultat de chaque livraison. Il n'envoie ni liste de joueurs, ni identifiants de joueurs qui n'ont rien acheté, ni rien de votre base de données. De son côté, Skalp n'envoie au serveur que ce dont une livraison a besoin, sans l'e-mail de l'acheteur, le montant payé ni les autres détails de la commande.
Paiements, taxes et versements
Skalp vend au joueur en tant que marchand officiel (merchant of record). La TVA du pays de l'acheteur est ajoutée au paiement et Skalp émet la facture. La commission est de 10 % du prix de vente net, ou de 7 % dès que vos ventes des 30 derniers jours atteignent 20 000 $. Le traitement des paiements est inclus et il n'y a pas d'abonnement mensuel. Les commandes sont compensées 7 jours après leur finalisation, et à partir de 20 USD vous pouvez demander un versement depuis le tableau de bord, vers un compte bancaire à votre nom ou à celui de votre société.
C'est vous qui choisissez ce que vous vendez
Vous décidez des produits que vend votre boutique. Vérifiez que chacun respecte les règles du jeu et de la plateforme sur laquelle tourne votre serveur.
Questions fréquentes
Dois-je ouvrir un port ou configurer un webhook ?
Non. Votre serveur demande à Skalp les nouveaux achats, rien n'a donc besoin de s'y connecter depuis l'extérieur.
Avec quels frameworks est-ce que ça fonctionne ?
ESX et ses forks, QBCore, Qbox, ox_core et vRP. Un serveur sans framework peut livrer avec des commandes et ses propres handlers.
Que se passe-t-il quand le joueur est hors ligne ou que son inventaire est plein ?
Les récompenses intégrées vont tout de suite dans le personnage, à condition que Skalp sache de quel personnage il s'agit et que le joueur ne soit pas sur le serveur et ne l'ait pas quitté dans les deux dernières minutes. Les objets qui reçoivent leurs propres données à la création, comme les armes, attendent que le joueur se connecte, tout comme le reste quand l'inventaire est plein. Les livraisons en attente restent dans la table skalp_deliveries, s'exécutent quand le joueur se connecte et sont retentées toutes les 30 secondes pendant qu'il joue. Si le joueur ne se connecte pas dans les 30 jours, elles expirent. Avec Config.OfflineDelivery = false, elles attendent toujours le joueur.
Un achat peut-il être livré deux fois ?
Non. Chaque produit d'une commande a sa propre ligne, et une livraison en plusieurs étapes retient celles qui ont déjà été exécutées.
Comment tester avant de vendre ?
Cliquez sur Envoyer un test dans le tableau de bord : le serveur l'affiche dans sa console à sa prochaine vérification. Les commandes de récompense fonctionnent aussi dans la console du serveur, par exemple skalp_item 1 bread 5, et skalp status indique la connexion, le framework et le nombre de livraisons en attente ou échouées.
Puis-je aussi vendre mes scripts à d'autres serveurs ?
Oui, depuis une boutique de scripts, qui est un autre type de boutique. Skalp protège les fichiers et les lie à une licence. Comment fonctionne la vente de scripts FiveM.
Skalp est-il affilié à Rockstar Games ou à une plateforme de jeu ?
Non. Skalp est une boutique indépendante de produits numériques.