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
| Ressource | Requise | Notes |
|---|---|---|
| vorp_core | Oui | Framework |
| vorp_inventory | Oui | Systeme d'inventaire |
| twinded_libs | Oui | Librairie partagee gratuite |
| oxmysql | Oui | Base 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_societyBase de donnees
Ce script lit depuis les tables de jobs existantes. Les noms de tables par defaut sont :
| Table | Description |
|---|---|
twinded_jobs | Jobs (name, label, balance, bosslocation, armorylocation, payCurrency, payInterval, ...) |
twinded_jobs_grades | Grades (job_name, grade, grade_label, salary, permissions JSON) |
twinded_jobs_salary_tracker | Suivi des salaires (charidentifier, job_name, elapsed_minutes) |
Vous pouvez changer ces noms dans Config.Tables (voir settings.lua).
Fichiers de configuration
| Fichier | Description |
|---|---|
settings.lua | Debug, tables de base de donnees, portees de prompts, inventaire, placement, salaire, chomage, marqueurs, webhook |
lang.lua | Toutes les chaines de traduction (prompts, menus, notifications, titres webhook) |
webhook.lua | Handler de webhook personnalise (quand Config.Webhook.type = 'custom') |
Consultez le guide de configuration pour savoir comment surcharger ces fichiers.
Reference de configuration
settings.lua
| Option | Type | Defaut | Description |
|---|---|---|---|
Config.Debug | boolean | false | Activer le logging de debug |
Config.Tables.Jobs | string | "twinded_jobs" | Table de base de donnees des jobs |
Config.Tables.Grades | string | "twinded_jobs_grades" | Table de base de donnees des grades |
Config.Tables.SalaryTracker | string | "twinded_jobs_salary_tracker" | Table de suivi des salaires |
Config.BossPromptRange | number | 2.0 | Distance (metres) pour interagir avec le bureau du patron |
Config.ArmoryPromptRange | number | 2.0 | Distance (metres) pour interagir avec le coffre/armurerie |
Config.MarkerRange | number | 10.0 | Distance (metres) a laquelle les marqueurs deviennent visibles |
Config.HireRange | number | 5.0 | Distance (metres) pour detecter les joueurs a proximite pour l'embauche |
Config.InventoryLimit | number | 0 | Slots max dans l'inventaire d'armurerie (0 = illimite) |
Config.AcceptWeapons | boolean | true | Autoriser les armes dans l'armurerie |
Config.PositionTimerDays | number | 1 | Cooldown (jours) entre les relocalisations de bureau/coffre |
Config.PlacementTimeout | number | 60 | Timeout (secondes) pour le mode placement |
Config.StaffGroups | table | {"admin", "dev", "superadmin"} | Groupes qui contournent le cooldown de placement |
Config.SalaryTrackerSaveInterval | number | 2 | Frequence (minutes) de sauvegarde de la progression salariale en BD |
Config.UnemployedMoney | number | 2 | Montant de l'allocation chomage |
Config.UnemployedPayInterval | number | 60 | Intervalle de paiement du chomage (minutes) |
Config.BossMarker | table | — | Couleur du marqueur du bureau du patron (defaut : or) |
Config.ArmoryMarker | table | — | Couleur du marqueur de l'armurerie (defaut : bleu) |
Config.Webhook.type | string | "discord" | 'discord' ou 'custom' |
Config.Webhook.url | string | "" | URL du webhook Discord |
Champs de permissions (JSON table grades)
Colonne JSON permissions de chaque grade dans la base de donnees :
| Permission | Type | Description |
|---|---|---|
isBoss | boolean | Acces complet a la gestion |
armoryAccess | boolean | Peut ouvrir l'armurerie/coffre |
depositBalance | boolean | Peut deposer de l'argent dans la caisse |
withDrawBalance | boolean | Peut retirer de l'argent de la caisse |
storeDepositItems | boolean | Peut deposer des items dans l'armurerie |
storeWithdrawItems | boolean | Peut 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 :
| Champ | Type | Description |
|---|---|---|
action | string | "deposit", "withdraw", "hire", "fire", "grade_change", "salary", "unemployment" |
job | string | Nom du job |
amount | number | Montant d'argent (quand applicable) |
currency | number | Type de devise (0 = dollars, 1 = or) |
newBalance | number | Solde de l'entreprise apres l'operation |
targetCharId | number | Identifiant du personnage cible |
newGrade | number | Nouveau numero de grade (pour les changements de grade) |
gradeLabel | string | Nouveau label de grade |
srcName | string | Nom de l'initiateur de l'action |
targetName | string | Nom 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
| Commande | Description |
|---|---|
/jobmenu | Ouvrir 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
| Evenement | Description |
|---|---|
twinded_lgw_society:cacheReady | Emis quand le cache est entierement charge |
twinded_lgw_society:employeeHire | Emis apres une embauche (src, jobName, charId) |
twinded_lgw_society:employeeFire | Emis apres un licenciement (src, jobName, charId) |
twinded_lgw_society:rcon:syncJob | RCON : recharger un job specifique (jobName) |
twinded_lgw_society:rcon:syncAllJobs | RCON : recharger tous les jobs |
Depannage
| Probleme | Solution |
|---|---|
| Le script ne demarre pas | Assurez-vous que twinded_libs est demarre avant |
| Pas de marqueurs/prompts | Verifiez que le job existe en BD avec bosslocation/armorylocation definis |
| Impossible d'acceder au bureau | Verifiez les permissions du grade dans le JSON twinded_jobs_grades.permissions |
| Le salaire ne se verse pas | Verifiez payInterval dans la table jobs et salary dans la table grades |
| Le coffre ne s'ouvre pas | Verifiez la permission armoryAccess ou isBoss pour le grade |
| Mauvais noms de tables | Mettez a jour Config.Tables dans settings.lua |

