Accueil › Documentation › Exports · origen_ilegalv2
Tous les exports sont enregistrés sous le nom de ressource origen_ilegalv2. Le tableau ci-dessous les répartit par côté d’exécution : utilise le bon côté, sinon l’appel sera ignoré sans avertissement.
GetPlayerGang(source) → string | nilRenvoie l’ID du gang du joueur donné, ou nil s’il n’en a aucun.
local gangId = exports['origen_ilegalv2']:GetPlayerGang(source)GetPlayerGangData(source) → { id, label } | nilRenvoie l’id du gang du joueur et son label affiché.
local data = exports['origen_ilegalv2']:GetPlayerGangData(source)
if data then
print(data.id, data.label)
endGetPlayerGangByCid(citizenid) → table | nilRecherche l’appartenance à un gang à partir de l’identifiant du citoyen. Utile pour les panneaux d’administration et les lectures entre ressources.
local info = exports['origen_ilegalv2']:GetPlayerGangByCid(citizenid)
-- { id, name, label, rankName, rankGrade, isLeader }GetGangInfo(gangId) → table | nilRenvoie un instantané consolidé d’un gang. C’est l’export recommandé pour les ressources externes qui ont besoin de plus que l’ID ou le nom : il agrège les données en mémoire et un seul comptage en base de données des territoires en un seul appel.
local info = exports['origen_ilegalv2']:GetGangInfo('vagos')
if not info then return end -- gang doesn't exist or isn't loadedChamps renvoyés :
| Champ | Type | Description |
|---|---|---|
id |
string | ID interne du gang |
label |
string | Nom affiché |
leader |
string | Identifiant du chef (citizenid / license) |
color |
string | Couleur hexadécimale (#rrggbb) |
is_active |
boolean | Indique si le gang est actuellement actif (points > 0) |
level |
number | Niveau du gang (1+) |
exp |
number | XP actuelle dans le niveau en cours |
points |
number | Points du gang (0–100). À 0, le gang est désactivé |
money |
number | Solde de la banque du gang |
member_count |
number | Nombre total de membres enregistrés |
online_count |
number | Membres actuellement connectés |
max_members |
number | Nombre maximal de membres autorisé (origen_gang_config) |
max_vehicles |
number | Nombre maximal de véhicules autorisé |
territory_count |
number | Territoires actuellement contrôlés (comptage en direct en base de données) |
base_territory |
string|nil | ID du territoire de base du gang |
created_at |
string|nil | Horodatage de création |
Exemple d’utilisation :
local info = exports['origen_ilegalv2']:GetGangInfo('vagos')
-- Gate by level
if info.level < 3 then
return cb({ success = false, reason = 'gang_level_too_low' })
end
-- Gate by territories
if info.territory_count < 2 then
return cb({ success = false, reason = 'not_enough_territories' })
end
-- Check capacity before inviting
if info.member_count >= info.max_members then
return cb({ success = false, reason = 'gang_full' })
end
print(string.format(
'[%s] Level %d | Members %d/%d | Territories %d | Bank $%d',
info.label,
info.level,
info.member_count, info.max_members,
info.territory_count,
info.money
))territory_count est le seul champ qui interroge la base de données ; tout le reste est lu directement depuis l’instance Gang en mémoire. La requête est un simple SELECT COUNT(*), on peut donc l’appeler sans risque à chaque requête.
GetGangById(gangId) → { id, label, name, money, level } | nillocal gang = exports['origen_ilegalv2']:GetGangById('vagos')GetGangByName(gangName) → { id, label, name, money } | nillocal gang = exports['origen_ilegalv2']:GetGangByName('vagos')GetGangs() → table<gangId, { id, label }>Renvoie toutes les instances de gangs actifs, indexées par ID.
local gangs = exports['origen_ilegalv2']:GetGangs()
for id, gang in pairs(gangs) do
print(id, gang.label)
endGetGangLevelById(gangId) → number | nilRenvoie le niveau actuel d’un gang. Renvoie nil si le gang n’existe pas.
local level = exports['origen_ilegalv2']:GetGangLevelById('vagos')
if level and level >= 5 then
-- unlock tier-2 content
endsetGang(identifier, gangName, rankId) → booleanExport de compatibilité. Affecte un joueur, par identifiant, à un gang nommé au grade indiqué, après l’avoir retiré de son gang actuel.
exports['origen_ilegalv2']:setGang(identifier, 'vagos', 1)OpenGangMenuBySource(source) → booleanOuvre la NUI du panneau de gang pour un joueur qui est déjà dans un gang.
exports['origen_ilegalv2']:OpenGangMenuBySource(source)OpenGangCreationBySource(source) → booleanOuvre l’assistant de création de gang pour un joueur. Le joueur doit avoir can_create_gang = 1 dans origen_gang_permissions.
exports['origen_ilegalv2']:OpenGangCreationBySource(source)GetPlayerLabState(source) → { lab_id, lab_type, bucket, world_exit } | nilRenvoie le laboratoire dans lequel se trouve actuellement un joueur. nil si le joueur n’est dans aucun laboratoire.
local state = exports['origen_ilegalv2']:GetPlayerLabState(source)
if state then
print(state.lab_id, state.lab_type)
endAdminLabsGetAll() → table[]Renvoie toutes les lignes de laboratoires de la base de données (en cache). Utilisé en interne pour les vérifications d’accès aux laboratoires.
local labs = exports['origen_ilegalv2']:AdminLabsGetAll()AdminLabsInvalidateCache()Vide le cache des laboratoires en mémoire, ce qui force le prochain appel à AdminLabsGetAll à interroger de nouveau la base de données.
exports['origen_ilegalv2']:AdminLabsInvalidateCache()MethLabResetPlayerState(source)Réinitialise de force l’état de production du laboratoire de meth d’un joueur (utile pour l’expulser en plein cycle).
exports['origen_ilegalv2']:MethLabResetPlayerState(source)CokeLabResetPlayerState(source)Réinitialise de force l’état de production du laboratoire de coke d’un joueur.
exports['origen_ilegalv2']:CokeLabResetPlayerState(source)WeedLabResetPlayerState(source)Réinitialise de force l’état du laboratoire de weed d’un joueur (libère les emplacements de séchage qu’il occupe).
exports['origen_ilegalv2']:WeedLabResetPlayerState(source)CraftingPointsGetAll() → table[]Renvoie tous les points de fabrication de base (définis par l’administrateur, hors instances de laboratoire) depuis le cache de la base de données.
local points = exports['origen_ilegalv2']:CraftingPointsGetAll()CraftingLabInstancesGetAll() → table[]Renvoie toutes les instances de points de fabrication achetées dans des laboratoires (uniquement à l’exécution, ce ne sont pas des points de base).
local instances = exports['origen_ilegalv2']:CraftingLabInstancesGetAll()CraftingPointsInvalidateCache()Invalide à la fois le cache des points de base et celui des instances de laboratoire.
exports['origen_ilegalv2']:CraftingPointsInvalidateCache()StoresGetAll() → table[]Renvoie toutes les boutiques de gangs depuis le cache de la base de données.
local stores = exports['origen_ilegalv2']:StoresGetAll()StoresInvalidateCache()Vide le cache des boutiques en mémoire.
SellStoresGetAll() → table[]Renvoie toutes les boutiques de revente de gangs depuis le cache de la base de données.
local sellStores = exports['origen_ilegalv2']:SellStoresGetAll()SellStoresInvalidateCache()Vide le cache des boutiques de revente en mémoire.
CaptureTerritory(territoryId, gangId) → booleanAttribue un territoire à un gang par code. Déclenche une mise à jour de la carte côté client pour tous les joueurs.
local ok = exports['origen_ilegalv2']:CaptureTerritory('davis', 'vagos')ReleaseTerritory(territoryId) → booleanRetire la propriété d’un gang sur un territoire (met gang_id = NULL). Déclenche une mise à jour de la carte côté client.
exports['origen_ilegalv2']:ReleaseTerritory('davis')AddTerritoryReputation(territoryId, gangId, amount) → { success, message? }Ajoute des points de réputation à un gang dans un territoire. Vérifie que le gang et le territoire existent et que les territoires de base sont protégés.
local result = exports['origen_ilegalv2']:AddTerritoryReputation('davis', 'vagos', 10.0)
if result.success then ... endRemoveTerritoryReputation(territoryId, gangId, amount) → { success, message? }Retire des points de réputation à un gang dans un territoire.
SetTerritoryReputation(territoryId, gangId, amount) → { success, message? }Fixe la réputation d’un gang dans un territoire à une valeur exacte (0–100).
GetGangTerritoryReputation(territoryId, gangId) → numberRenvoie la valeur actuelle de réputation d’un gang dans un territoire.
local rep = exports['origen_ilegalv2']:GetGangTerritoryReputation('davis', 'vagos')GetAllTerritoryReputations(territoryId) → table[]Renvoie toutes les lignes de réputation d’un territoire, triées par réputation décroissante.
ClearTerritoryReputations(territoryId) → { success, message? }Supprime toutes les données de réputation d’un territoire et libère la propriété du gang.
GetTerritoryStabilization(territoryId) → { active, remaining_seconds, remaining_minutes }Indique si un territoire se trouve dans sa fenêtre de stabilisation postérieure à la capture.
local stab = exports['origen_ilegalv2']:GetTerritoryStabilization('davis')
if stab.active then
print('Locked for', stab.remaining_minutes, 'more minutes')
endGetTerritoryCaptureBlock(territoryId) → { active, remaining_seconds, remaining_minutes, cooldown_days }Indique si le cooldown de capture propre à chaque territoire (champ capture_cooldown_until de la base de données) est toujours actif.
GetPlayersInTerritory(territoryId) → table[]Renvoie la liste des sources de joueurs actuellement suivis dans un territoire par le système de présence.
local players = exports['origen_ilegalv2']:GetPlayersInTerritory('davis')GetGangMembersInTerritory(territoryId, gangId) → table[]Renvoie uniquement les membres d’un gang précis qui se trouvent actuellement dans un territoire.
GetPlayerPresenceData(source) → table | nilRenvoie l’état de suivi de présence d’un joueur : dans quel territoire il se trouve, depuis combien de temps, etc.
IsPlayerInTerritory(source, territoryId) → booleanRenvoie true si, d’après le système de présence du serveur, un joueur se trouve actuellement dans le territoire donné.
local inside = exports['origen_ilegalv2']:IsPlayerInTerritory(source, 'davis')GetDrugSellLevel(source) → number (0–100)Renvoie le niveau de vente de rue d’un joueur (une valeur de progression de 0 à 100 qui augmente avec les ventes réussies).
local level = exports['origen_ilegalv2']:GetDrugSellLevel(source)ProcessDrugSaleReputation(source)Déclenche manuellement le traitement de la réputation de territoire pour une vente de drogue d’un joueur : la même logique que celle qui s’exécute sur origen_gang:drugSales:saleCompleted.
exports['origen_ilegalv2']:ProcessDrugSaleReputation(source)GetPlayerSalesInfo(source) → { salesThisHour, maxSalesPerHour, remainingSales, nextResetIn }Renvoie les statistiques de ventes de drogue de l’heure en cours d’un joueur par rapport à la limite de réputation du territoire.
local info = exports['origen_ilegalv2']:GetPlayerSalesInfo(source)
print(info.remainingSales, 'sales left this hour')GetGangVehicles(gangId) → table[]Renvoie toutes les lignes de véhicules de origen_gang_vehicles pour un gang.
local vehicles = exports['origen_ilegalv2']:GetGangVehicles('vagos')GetVehicleCatalog(gangId) → table[]Renvoie les entrées activées du catalogue de véhicules d’un gang depuis origen_gang_vehicle_catalog.
AddOrganizationTask(taskDef) → booleanEnregistre une tâche dans le catalogue global. Si task_key existe déjà, la ligne est mise à jour.
exports['origen_ilegalv2']:AddOrganizationTask({
task_key = 'deliver_supplies',
label = 'Deliver Supplies',
description = 'Complete 3 supply runs.',
category = 'supply',
is_repeatable = false,
meta = { reward = 5000 },
})Appelle-le dans AddEventHandler('onResourceStart', ...) : OrgPanels n’est pas prêt avant la fin du chargement de la ressource.
CompleteGangTask(gangId, taskKey, opts?) → { ok, error?, times_completed }local result = exports['origen_ilegalv2']:CompleteGangTask('vagos', 'deliver_supplies', {
completed_by = identifier,
})IsGangTaskCompleted(gangId, taskKey) → booleanlocal done = exports['origen_ilegalv2']:IsGangTaskCompleted('vagos', 'deliver_supplies')GetGangTasks(gangId) → table[]Renvoie le catalogue complet des tâches avec l’état d’accomplissement de chaque gang.
AddOrganizationUpgrade(upgradeDef) → booleanexports['origen_ilegalv2']:AddOrganizationUpgrade({
upgrade_key = 'tier2_robberies',
label = 'Tier 2 Robberies',
type = 'robbery_unlock',
required_tasks = { 'deliver_supplies' },
effect = { feature = 'robberies:tier2' },
})UnlockGangUpgrade(gangId, upgradeKey, opts?) → { ok, error?, missing_tasks? }Vérifie les dépendances de tâches avant de débloquer. error = 'missing_dependencies' inclut missing_tasks: [{ task_key, label }].
HasGangUpgrade(gangId, upgradeKey) → booleanIsGangFeatureUnlocked(gangId, featureKey) → booleanVérifie si une amélioration débloquée d’un gang a effect.feature == featureKey.
local ok = exports['origen_ilegalv2']:IsGangFeatureUnlocked('vagos', 'robberies:tier2')GetGangUpgrades(gangId) → table[]Renvoie le catalogue complet des améliorations avec l’état de déblocage de chaque gang et la résolution des dépendances.
GetRobberyRequestConfig() → table | nilRenvoie la configuration du module de demandes de braquage, indexée pour une recherche rapide par origen_police. Renvoie nil si le module est désactivé.
origen_police consomme cet export en interne pour valider les ID de demande, les cooldowns et les plages de participants sans dépendre de toute la table Config.
local cfg = exports['origen_ilegalv2']:GetRobberyRequestConfig()
if not cfg then return end -- module disabled
local entry = cfg.requestsById['paleto_bank']
-- entry = { id, label, image, requiredCops, minParticipants, maxParticipants, cooldownSeconds }Champs renvoyés :
| Champ | Type | Description |
|---|---|---|
enabled |
boolean |
Toujours true (nil est renvoyé quand le module est désactivé) |
pendingExpireMinutes |
number |
TTL des demandes pending, en minutes |
approvedExpireMinutes |
number |
TTL des demandes approved, en minutes |
requestsById |
table<robberyId, entry> |
Toutes les entrées de braquage actives indexées par id pour une recherche en O(1) |
GetRobberyRequestStatus(source, robberyId) → { ok, status, error? }Renvoie l’état normalisé de la demande de braquage du gang pour une source de joueur et un ID de braquage donnés. Résout le gang en interne : l’appelant n’a besoin que de la source du joueur.
local res = exports['origen_ilegalv2']:GetRobberyRequestStatus(source, 'paleto_bank')
if res.ok and res.status == 'approved' then
-- allow the robbery to start
endParamètres :
| Paramètre | Type | Description |
|---|---|---|
source |
number |
Source serveur du joueur |
robberyId |
string |
ID du braquage tel que défini dans Config.RobberyRequest.Requests |
Valeur renvoyée :
| Champ | Type | Description |
|---|---|---|
ok |
boolean |
false si la source ou le gang n’ont pas pu être résolus |
status |
string |
"pending" | "approved" | "rejected" | "not_requested" |
error |
string? |
Présent quand ok = false : "invalid_source" | "no_gang" |
Les états internes (cancelled, expired, started) sont normalisés en "not_requested", de sorte que les intégrateurs n’aient jamais à les gérer.
HasApprovedRobberyRequest(source, robberyId) → booleanRaccourci booléen pour la vérification la plus courante : renvoie true uniquement quand la demande du gang est à l’état approved. Idéal pour des conditions directes dans les scripts de braquage.
if exports['origen_ilegalv2']:HasApprovedRobberyRequest(source, 'paleto_bank') then
-- start the robbery flow
endRenvoie false si la source n’est pas valide, si le joueur n’a pas de gang ou si la demande est dans un état autre qu’approved.
GetPlayerGang() → table | nilRenvoie la table de données du gang actuel du joueur local (le même objet que celui utilisé par la NUI). nil s’il n’est pas dans un gang.
local gang = exports['origen_ilegalv2']:GetPlayerGang()
if gang then
print(gang.id, gang.label)
endOpenGangMenu()Ouvre la NUI du panneau de gang pour le joueur local.
exports['origen_ilegalv2']:OpenGangMenu()OpenGangCreation()Ouvre l’assistant de création de gang pour le joueur local.
exports['origen_ilegalv2']:OpenGangCreation()GetInsideLab() → { lab_id, lab_type, lab_name } | nilRenvoie le laboratoire dans lequel se trouve actuellement le joueur local, ou nil s’il n’est dans aucun. Utilisé par tous les scripts client de laboratoires pour protéger les interactions.
local lab = exports['origen_ilegalv2']:GetInsideLab()
if lab and lab.lab_type == 'meth' then ... endIsGangLabOpen() → booleanRenvoie true si le panneau NUI de l’ordinateur portable du laboratoire est ouvert.
if exports['origen_ilegalv2']:IsGangLabOpen() then
-- don't open another menu on top
endCloseGangLab()Ferme par code le panneau NUI de l’ordinateur portable du laboratoire.
MethLabResetProduction()Réinitialise l’état de production du laboratoire de meth côté client (efface l’étape en cours, les minuteurs et les modificateurs).
exports['origen_ilegalv2']:MethLabResetProduction()CokeLabResetProduction()Réinitialise l’état de production du laboratoire de coke côté client.
InitLabStashPoints(stashes)Initialise les zones d’interaction lib.points des points de stockage du laboratoire. Appelé en interne par le cycle de vie du laboratoire à l’entrée ; tu n’en as besoin que si tu construis une intégration de laboratoire personnalisée.
ClearLabStashPoints()Supprime tous les points d’interaction actifs des stockages du laboratoire et masque tout HelpText ouvert.
ApplyLabIplState(labType, iplModules)Applique l’état d’IPL des améliorations du laboratoire (changements de props de l’intérieur) pour le type de laboratoire et l’instantané de modules donnés. Appelé en interne quand un joueur entre dans un laboratoire ; tu n’en as besoin que pour des intégrations personnalisées.
GetTerritories() → table<territoryId, territory>Renvoie la carte complète des territoires actuellement chargée côté client.
local territories = exports['origen_ilegalv2']:GetTerritories()GetTerritoryById(territoryId) → table | nilRenvoie un seul territoire par ID depuis le cache client.
local t = exports['origen_ilegalv2']:GetTerritoryById('davis')IsPlayerInTerritory(territoryId) → booleanRenvoie true si la position actuelle du joueur local se trouve dans la zone du territoire donné.
local inside = exports['origen_ilegalv2']:IsPlayerInTerritory('davis')GetPlayerPresenceData() → tableRenvoie l’état de suivi de présence côté client : { isInTerritory, currentTerritory, timeInZone, ... }.
local presence = exports['origen_ilegalv2']:GetPlayerPresenceData()
if presence.isInTerritory then
print('In territory:', presence.currentTerritory)
endGetCurrentTerritory() → table | nilRenvoie l’objet du territoire dans lequel se trouve actuellement le joueur local, ou nil s’il est hors de toutes les zones.
local territory = exports['origen_ilegalv2']:GetCurrentTerritory()SellDrugToNearestPed(drugName)Déclenche par code une tentative de vente d’une drogue au ped éligible le plus proche : la même logique que le mode passif de vente de rue, mais appelable depuis l’extérieur.
exports['origen_ilegalv2']:SellDrugToNearestPed('packaged_weed')IsCraftingMenuOpen() → booleanRenvoie true si le panneau NUI de fabrication est ouvert.
CloseCraftingMenu()Ferme le panneau NUI de fabrication et efface l’état de surveillance côté serveur.
IsStoreMenuOpen() → booleanRenvoie true si la NUI de la boutique du gang est ouverte.
CloseStoreMenu()Ferme la NUI de la boutique du gang.
IsSellMenuOpen() → booleanRenvoie true si la NUI de la boutique de revente du gang est ouverte.
CloseSellMenu()Ferme la NUI de la boutique de revente du gang.
IsHandcuffed() → booleanRenvoie true si le joueur local est actuellement menotté par l’action de menottage du menu rapide du gang.
if exports['origen_ilegalv2']:IsHandcuffed() then
-- prevent certain actions
endRemoveHandCuff()Retire de force les menottes du joueur local (détache le prop, efface les tâches, réautorise le tir).
exports['origen_ilegalv2']:RemoveHandCuff()openManagement()Ouvre la NUI du panneau de gestion d’administration comme si elle était ouverte depuis un hub externe (active le flag openedFromHub pour que le panneau ignore son délai normal d’acquisition du focus).
exports['origen_ilegalv2']:openManagement()IsOpenedFromHub() → booleanIndique si le panneau d’administration a été ouvert en dernier via openManagement().
ResetHubFlag()Efface le flag openedFromHub.