Skip to content

twinded_lgw_society

Un systeme complet de gestion de societes/entreprises pour RedM. Gerez les caisses enregistreuses, employes, salaires, coffres (inventaires d'armurerie), bureaux de patron et permissions — le tout pilote par des jobs et grades stockes en base de donnees.

Dependances

RessourceRequiseNotes
vorp_coreOuiFramework
vorp_inventoryOuiSysteme d'inventaire
twinded_libsOuiLibrairie partagee gratuite
oxmysqlOuiBase de donnees

Compatibilite

VORP Framework uniquement — ce script utilise l'API VORP Core et vorp_inventory directement.

Installation

bash
ensure twinded_libs
ensure twinded_lgw_society

Base de donnees

Ce script lit depuis les tables de jobs existantes. Les noms de tables par defaut sont :

TableDescription
twinded_jobsJobs (name, label, balance, bosslocation, armorylocation, payCurrency, payInterval, ...)
twinded_jobs_gradesGrades (job_name, grade, grade_label, salary, permissions JSON)
twinded_jobs_salary_trackerSuivi des salaires (charidentifier, job_name, elapsed_minutes)

Vous pouvez changer ces noms dans Config.Tables (voir settings.lua).

Fichiers de configuration

FichierDescription
settings.luaDebug, tables de base de donnees, portees de prompts, inventaire, placement, salaire, chomage, marqueurs, webhook
lang.luaToutes les chaines de traduction (prompts, menus, notifications, titres webhook)
webhook.luaHandler de webhook personnalise (quand Config.Webhook.type = 'custom')

Consultez le guide de configuration pour savoir comment surcharger ces fichiers.

Reference de configuration

settings.lua

OptionTypeDefautDescription
Config.DebugbooleanfalseActiver le logging de debug
Config.Tables.Jobsstring"twinded_jobs"Table de base de donnees des jobs
Config.Tables.Gradesstring"twinded_jobs_grades"Table de base de donnees des grades
Config.Tables.SalaryTrackerstring"twinded_jobs_salary_tracker"Table de suivi des salaires
Config.BossPromptRangenumber2.0Distance (metres) pour interagir avec le bureau du patron
Config.ArmoryPromptRangenumber2.0Distance (metres) pour interagir avec le coffre/armurerie
Config.MarkerRangenumber10.0Distance (metres) a laquelle les marqueurs deviennent visibles
Config.HireRangenumber5.0Distance (metres) pour detecter les joueurs a proximite pour l'embauche
Config.InventoryLimitnumber0Slots max dans l'inventaire d'armurerie (0 = illimite)
Config.AcceptWeaponsbooleantrueAutoriser les armes dans l'armurerie
Config.PositionTimerDaysnumber1Cooldown (jours) entre les relocalisations de bureau/coffre
Config.PlacementTimeoutnumber60Timeout (secondes) pour le mode placement
Config.StaffGroupstable{"admin", "dev", "superadmin"}Groupes qui contournent le cooldown de placement
Config.SalaryTrackerSaveIntervalnumber2Frequence (minutes) de sauvegarde de la progression salariale en BD
Config.UnemployedMoneynumber2Montant de l'allocation chomage
Config.UnemployedPayIntervalnumber60Intervalle de paiement du chomage (minutes)
Config.BossMarkertableCouleur du marqueur du bureau du patron (defaut : or)
Config.ArmoryMarkertableCouleur du marqueur de l'armurerie (defaut : bleu)
Config.Webhook.typestring"discord"'discord' ou 'custom'
Config.Webhook.urlstring""URL du webhook Discord

Champs de permissions (JSON table grades)

Colonne JSON permissions de chaque grade dans la base de donnees :

PermissionTypeDescription
isBossbooleanAcces complet a la gestion
armoryAccessbooleanPeut ouvrir l'armurerie/coffre
depositBalancebooleanPeut deposer de l'argent dans la caisse
withDrawBalancebooleanPeut retirer de l'argent de la caisse
storeDepositItemsbooleanPeut deposer des items dans l'armurerie
storeWithdrawItemsbooleanPeut retirer des items de l'armurerie

webhook.lua — Champs de donnees personnalises

Lors de l'utilisation de Config.Webhook.type = 'custom', l'objet data._meta contient :

ChampTypeDescription
actionstring"deposit", "withdraw", "hire", "fire", "grade_change", "salary", "unemployment"
jobstringNom du job
amountnumberMontant d'argent (quand applicable)
currencynumberType de devise (0 = dollars, 1 = or)
newBalancenumberSolde de l'entreprise apres l'operation
targetCharIdnumberIdentifiant du personnage cible
newGradenumberNouveau numero de grade (pour les changements de grade)
gradeLabelstringNouveau label de grade
srcNamestringNom de l'initiateur de l'action
targetNamestringNom de la cible de l'action

Fonctionnalites

  • Bureau du patron — Prompt de proximite pour ouvrir le menu de gestion
  • Caisse enregistreuse — Deposer et retirer de l'argent (base sur les permissions)
  • Gestion des employes — Consulter, embaucher, promouvoir, retrograder, licencier
  • Coffre (armurerie) — Inventaire partage accessible par les employes autorises
  • Systeme de salaire — Paiements automatiques a intervalles configurables, persistes entre reconnexions
  • Allocation chomage — Paiements periodiques aux joueurs sans emploi/hors service
  • Relocalisation bureau/coffre — Le patron peut deplacer le bureau et le coffre (avec cooldown)
  • Systeme de permissions — Permissions par grade stockees en JSON
  • Synchronisation en temps reel — Les marqueurs et prompts se mettent a jour instantanement lors de changements de job ou permissions
  • Support multi-job — Integration multi-job complete
  • Support hot restart — Re-pousse toutes les donnees joueur au redemarrage de la ressource
  • Evenements RCON sync — Integration de panneau externe
  • Logging webhook — Discord ou handler personnalise
  • Rate limiting — Verrouillage par source et par job

Commande

CommandeDescription
/jobmenuOuvrir le menu de placement (patron uniquement, pas de proximite requise)

Server Exports

Money

lua
-- Obtenir le solde de l'entreprise
local balance = exports['twinded_lgw_society']:getSocietyMoney(jobName)

-- Ajouter de l'argent (SQL atomique)
exports['twinded_lgw_society']:addSocietyMoney(jobName, amount)

-- Retirer de l'argent (plancher a 0)
exports['twinded_lgw_society']:removeSocietyMoney(jobName, amount)

Player Status

lua
local isBoss    = exports['twinded_lgw_society']:getPlayerBossStatus(src)
local hasArmory = exports['twinded_lgw_society']:getPlayerArmoryStatus(src)
local canDraw   = exports['twinded_lgw_society']:getPlayerWithDrawStatus(src)
local perms     = exports['twinded_lgw_society']:getPlayerStorePermissions(src)

Job Data

lua
local grades    = exports['twinded_lgw_society']:getJobGrades(jobName)
local jobData   = exports['twinded_lgw_society']:getJobData(jobName)
local allJobs   = exports['twinded_lgw_society']:getAllJobs()
local labels    = exports['twinded_lgw_society']:getGradesForClient(jobName)

-- Async
exports['twinded_lgw_society']:getJobEmployees(jobName, function(employees)
    -- ...
end)

Salary

lua
-- Supprimer l'entree de suivi de salaire
exports['twinded_lgw_society']:deleteSalaryTrackerForJob(charId, jobName)

-- Obtenir le temps restant par job (async)
exports['twinded_lgw_society']:getSalaryInfoForJobs(charId, jobNames, function(info)
    -- ...
end)

Server Events

EvenementDescription
twinded_lgw_society:cacheReadyEmis quand le cache est entierement charge
twinded_lgw_society:employeeHireEmis apres une embauche (src, jobName, charId)
twinded_lgw_society:employeeFireEmis apres un licenciement (src, jobName, charId)
twinded_lgw_society:rcon:syncJobRCON : recharger un job specifique (jobName)
twinded_lgw_society:rcon:syncAllJobsRCON : recharger tous les jobs

Depannage

ProblemeSolution
Le script ne demarre pasAssurez-vous que twinded_libs est demarre avant
Pas de marqueurs/promptsVerifiez que le job existe en BD avec bosslocation/armorylocation definis
Impossible d'acceder au bureauVerifiez les permissions du grade dans le JSON twinded_jobs_grades.permissions
Le salaire ne se verse pasVerifiez payInterval dans la table jobs et salary dans la table grades
Le coffre ne s'ouvre pasVerifiez la permission armoryAccess ou isBoss pour le grade
Mauvais noms de tablesMettez a jour Config.Tables dans settings.lua

Premium RedM Scripts — Multi-Framework