VORP Core est le framework roleplay le plus utilisé sur RedM. Il gère les comptes, les personnages, l'argent (dollars et or), l'inventaire, les métiers, la banque, les écuries et bien plus. Ce guide explique comment l'installer, l'administrer et écrire des scripts qui l'utilisent.
Ce que contient VORP
| Ressource | Rôle |
|---|---|
vorp_core | Le cœur : comptes, personnages, argent, notifications, API |
vorp_character | Création et choix du personnage |
vorp_inventory | Inventaire, objets, armes |
vorp_menu | Menus utilisés par les autres ressources |
vorp_banking | Banques des villes |
vorp_stables ou équivalent | Écuries et chevaux possédés |
vorp_admin | Menu d'administration en jeu |
oxmysql | Lien avec la base de données |
Installer VORP avec txAdmin
C'est la méthode conseillée : txAdmin télécharge les versions compatibles de chaque ressource, crée les tables et écrit le server.cfg.
- Ouvrez txAdmin. Au premier lancement, l'assistant démarre seul. Sinon, créez un nouveau profil de serveur.
- Dans Popular Recipes, choisissez VORP Core.
- Gardez les identifiants de base de données proposés : sur EsoterHost, ils sont déjà remplis avec la base MariaDB de votre serveur.
- Collez votre clé de licence Cfx.re (
cfxk_…) et lancez le déploiement. - Démarrez le serveur, connectez-vous et créez votre personnage.
Le plus souvent, GitHub a limité les téléchargements. Attendez quelques minutes et relancez le déploiement. Si une ressource précise échoue, notez son nom dans le journal de txAdmin.
L'ordre des ressources
Si vous modifiez le server.cfg à la main, gardez cet ordre : les dépendances d'abord, le cœur ensuite, puis les modules.
ensure oxmysql
ensure vorp_core
ensure vorp_menu
ensure vorp_inputs
ensure vorp_character
ensure vorp_inventory
ensure [vorp]
ensure [scripts]Devenir administrateur
VORP utilise deux niveaux de droits.
1. Le groupe VORP, enregistré dans la table users :
-- Votre identifiant Steam ou license, visible dans la table users après votre première connexion
UPDATE users SET `group` = 'admin' WHERE identifier = 'steam:110000112345678';Reconnectez-vous ensuite. Le groupe admin donne accès aux commandes de VORP (/addmoney, /additem, /setjob…) et au menu d'administration.
2. Les droits ACE de FXServer, dans le server.cfg, pour les commandes de vos propres scripts :
add_ace group.admin command allow
add_ace group.admin command.quit deny
add_principal identifier.fivem:1234567 group.adminAjouter un objet
Les objets se déclarent dans la table items de la base de données. Les colonnes exactes varient selon la version de VORP : regardez une ligne existante et suivez son modèle.
INSERT INTO items (item, label, `limit`, can_remove, type, usable, `desc`) VALUES
('pain', 'Pain', 10, 1, 'item_standard', 1, 'Un pain frais du boulanger'),
('whisky', 'Whisky', 5, 1, 'item_standard', 1, 'Une bouteille de whisky du saloon'),
('peau_lapin', 'Peau de lapin', 20, 1, 'item_standard', 0, 'À vendre au trappeur');Ajoutez l'image de chaque objet dans vorp_inventory/html/img/items/ avec le même nom (pain.png), puis redémarrez le serveur.
Rendre un objet utilisable
local VORPcore = exports.vorp_core:GetCore()
exports.vorp_inventory:registerUsableItem('pain', function(data)
local src = data.source
exports.vorp_inventory:closeInventory(src)
exports.vorp_inventory:subItem(src, 'pain', 1)
TriggerClientEvent('mon-script:manger', src)
VORPcore.NotifyRightTip(src, 'Vous mangez un morceau de pain', 3000)
end)RegisterNetEvent('mon-script:manger', function()
local ped = PlayerPedId()
SetEntityHealth(ped, math.min(GetEntityHealth(ped) + 20, GetEntityMaxHealth(ped)))
end)L'API de VORP pour vos scripts
Récupérez l'objet principal une fois, en haut de vos fichiers serveur :
local VORPcore = exports.vorp_core:GetCore()Le joueur et son personnage
local user = VORPcore.getUser(source) -- le compte du joueur
if not user then return end
local perso = user.getUsedCharacter -- le personnage joué
print(perso.firstname, perso.lastname) -- nom du personnage
print(perso.money, perso.gold) -- dollars et or
print(perso.job, perso.jobGrade) -- métier et grade
print(perso.charIdentifier) -- identifiant unique du personnageL'argent
perso.addCurrency(0, 25.0) -- ajoute 25 $ (0 = dollars, 1 = or, 2 = points de rôle)
perso.removeCurrency(0, 10.0) -- retire 10 $
perso.addCurrency(1, 2) -- ajoute 2 lingots d'orL'inventaire
local nb = exports.vorp_inventory:getItemCount(source, nil, 'whisky')
exports.vorp_inventory:addItem(source, 'whisky', 1)
exports.vorp_inventory:subItem(source, 'whisky', 1)
-- Vérifier la place avant d'ajouter
local peut = exports.vorp_inventory:canCarryItem(source, 'whisky', 1)Les métiers
perso.setJob('sheriff') -- change le métier
perso.setJobGrade(2) -- change le gradeLes notifications
VORPcore.NotifyRightTip(source, 'Message à droite de l\'écran', 4000)
VORPcore.NotifyLeft(source, 'Titre', 'Message à gauche', 'menu_textures', 'stamp_locked_rank', 4000)
VORPcore.NotifyObjective(source, 'Objectif affiché en bas', 4000)Les callbacks
Un callback permet au client de demander une information au serveur et d'attendre la réponse.
VORPcore.Callback.Register('mon-script:solde', function(source, cb)
local user = VORPcore.getUser(source)
if not user then return cb(0) end
cb(user.getUsedCharacter.money)
end)local VORPcore = exports.vorp_core:GetCore()
RegisterCommand('solde', function()
local solde = VORPcore.Callback.TriggerAwait('mon-script:solde')
TriggerEvent('chat:addMessage', { args = { 'Banque', ('Vous avez %.2f $ sur vous'):format(solde) } })
end, false)VORP évolue régulièrement et certaines fonctions changent de nom entre les versions. Si une fonction de ce guide n'existe pas sur votre serveur, consultez la documentation officielle sur docs.vorp-core.com, ou ouvrez le fichier vorp_core/server/ de votre installation.
Exemple complet : vendre des peaux au trappeur
Un script VORP complet : le joueur approche du trappeur, appuie sur E, et vend toutes ses peaux de lapin.
Config = {}
Config.Trappeur = vector3(-334.3, 773.2, 116.25) -- Valentine
Config.Objet = 'peau_lapin'
Config.PrixUnitaire = 1.5local TOUCHE_E = 0xCEFD9220
local function texte3D(c, t)
local ok, x, y = GetScreenCoordFromWorldCoord(c.x, c.y, c.z)
if not ok then return end
SetTextScale(0.35, 0.35)
SetTextColor(255, 255, 255, 230)
SetTextCentre(true)
DisplayText(CreateVarString(10, 'LITERAL_STRING', t), x, y)
end
CreateThread(function()
while true do
local attente = 1000
local d = #(GetEntityCoords(PlayerPedId()) - Config.Trappeur)
if d < 2.0 then
attente = 0
texte3D(Config.Trappeur + vector3(0.0, 0.0, 1.0), 'E : vendre vos peaux')
if IsControlJustReleased(0, TOUCHE_E) then
TriggerServerEvent('trappeur:vendre')
Wait(1000)
end
end
Wait(attente)
end
end)local VORPcore = exports.vorp_core:GetCore()
RegisterNetEvent('trappeur:vendre', function()
local src = source
if #(GetEntityCoords(GetPlayerPed(src)) - Config.Trappeur) > 4.0 then return end
local user = VORPcore.getUser(src)
if not user then return end
local nb = exports.vorp_inventory:getItemCount(src, nil, Config.Objet)
if nb <= 0 then
return VORPcore.NotifyRightTip(src, "Vous n'avez rien à vendre", 3000)
end
exports.vorp_inventory:subItem(src, Config.Objet, nb)
local total = nb * Config.PrixUnitaire
user.getUsedCharacter.addCurrency(0, total)
VORPcore.NotifyRightTip(src, ('%d peaux vendues pour %.2f $'):format(nb, total), 4000)
end)fx_version 'cerulean'
game 'rdr3'
rdr3_warning 'I acknowledge that this is a prerelease build of RedM, and I am aware my resources *will* become incompatible once RedM ships.'
lua54 'yes'
dependencies { 'vorp_core', 'vorp_inventory' }
shared_script 'config.lua'
client_script 'client.lua'
server_script 'server.lua'Problèmes fréquents
| Symptôme | Cause probable | Solution |
|---|---|---|
| Écran noir après la création du personnage | vorp_character démarré avant vorp_core | Vérifiez l'ordre des ensure |
No such export GetCore in resource vorp_core | Ancienne version de VORP | Mettez VORP à jour, ou utilisez l'ancienne syntaxe de votre version |
| Objet invisible dans l'inventaire | Image manquante ou nom différent | Ajoutez nom.png dans vorp_inventory/html/img/items/ |
| Commandes d'administration refusées | Groupe VORP non défini | Passez votre compte en admin dans la table users et reconnectez-vous |
| Argent perdu au redémarrage | Arrêt brutal du serveur | Arrêtez toujours le serveur depuis txAdmin ou le panel |
Pour aller plus loin
- Les bases du Lua sur RedM : Créer un script RedM en Lua.
- Des scripts prêts à copier : bibliothèque de scripts RedM.
EsoterHost n'est ni approuvé, ni sponsorisé, ni affilié à Rockstar Games ou à Cfx.re. RedM et Red Dead Redemption 2 sont des marques de leurs propriétaires.
