twinded_lgw_npc
Un spawner de NPC non-networked pour RedM. Fait apparaitre les peds localement pour eviter de consommer des slots d'entites reseau, avec spawn/despawn base sur la distance, prompts natifs RedM, blips de carte, animations, scenarios, text3d et une API exports complete.
Dependances
| Ressource | Requise | Notes |
|---|---|---|
| twinded_libs | Oui | Librairie partagee gratuite |
Compatibilite
Independant du framework — ce script n'utilise aucun framework. Il necessite uniquement twinded_libs pour les modules utilitaires (prompts, blips, text3d, entities).
Installation
bash
ensure twinded_libs
ensure twinded_lgw_npcFichiers de configuration
| Fichier | Description |
|---|---|
settings.lua | Delai de spawn, intervalle de verification de distance, config text3d, toggle debug |
lang.lua | Chaines de traduction (messages de debug) |
text3d.lua | Handler text3d personnalise (quand Config.Text3D.type = 'custom') |
npcs/examples.lua | Exemples de definitions de NPC (marchand, garde, ambiance) |
Consultez le guide de configuration pour savoir comment surcharger ces fichiers.
Reference de configuration
settings.lua
| Option | Type | Defaut | Description |
|---|---|---|---|
Config.SpawnDelay | number | 200 | Delai (ms) entre les spawns de NPC echelonnes |
Config.DistanceCheckInterval | number | 2000 | Frequence (ms) de verification de la distance du joueur pour le spawn/despawn |
Config.Text3D.type | string | "default" | 'default' pour le text3d integre, 'custom' pour votre propre handler |
Config.Text3D.scale | number | 0.30 | Echelle du texte |
Config.Text3D.background_alpha | number | 180 | Opacite du fond (0-255) |
Config.Debug | boolean | false | Activer les commandes de debug |
Champs de definition de NPC
Chaque NPC dans Config.NpcList ou dans les fichiers npcs/*.lua :
| Champ | Type | Requis | Description |
|---|---|---|---|
id | string | Oui | Identifiant unique |
name | string | Oui | Nom d'affichage |
coords | table | Oui | {x, y, z, heading} |
look.model | string | Oui | Nom du modele de ped |
look.outfit | table | Non | Composants de tenue |
look.scale | number | Non | Echelle du ped |
spawn_radius_in_meters | number | Oui | Distance a laquelle le NPC apparait |
face_player | string ou nil | Non | "full" (corps) ou "head_only" |
prevent_place_on_ground | boolean | Non | Empecher le placement au sol (pour les NPC en interieur) |
weapon | string ou nil | Non | Nom du modele d'arme (ex: "WEAPON_REVOLVER_CATTLEMAN") |
scenario | string ou nil | Non | Nom du scenario RedM (ex: "WORLD_HUMAN_STAND_BAR") |
animations | table ou nil | Non | Tableau de {anim_dict, anim_name, loop, anim_only_upper_body, times, delay_in_ms} |
text3d | table ou nil | Non | {text, radius, offset_z} |
blip | table ou nil | Non | {icon, default_color, scale, title, modifiers, time_window_color} |
prompts | table ou nil | Non | Tableau de pages de prompts (voir ci-dessous) |
time_windows | table ou nil | Non | Tableau de {start_hour, start_minute, end_hour, end_minute} |
on_spawn | function ou nil | Non | Callback quand le NPC apparait |
on_despawn | function ou nil | Non | Callback quand le NPC disparait |
Champs des pages de prompts
| Champ | Type | Description |
|---|---|---|
page_label | string | Titre du groupe de prompts |
page_radius_in_meters | number | Distance pour afficher cette page de prompts |
page_prompts | table | Tableau de {label, key, hold, callback} |
text3d.lua
Handler text3d personnalise (quand Config.Text3D.type = 'custom') :
lua
function DrawNpcText3D(options)
-- options.x, options.y, options.z — coordonnees monde
-- options.text — texte a afficher
-- options.npc_id — identifiant du NPC
-- options.npc_name — nom d'affichage du NPC
endFonctionnalites
- Peds non-networked — Zero consommation d'entites reseau
- Spawn/despawn par distance — Les NPC apparaissent quand le joueur est dans le rayon
- Despawn anti-pop — Les NPC en ligne de vue ne sont pas despawn tant qu'ils ne sont pas caches
- Spawn echelonne — Un a la fois avec delai configurable
- Prompts natifs RedM — Systeme de prompts multi-pages avec support press/hold
- Blips de carte — Blips configurables avec changement de couleur par fenetre horaire
- Animations & scenarios — Animations en boucle, sequences multi-etapes, scenarios RedM
- Text3D — Texte flottant au-dessus des NPC
- Face au joueur — Rotation du corps entier ou de la tete uniquement
- Props attaches — Attacher des objets aux bones du NPC
- Fenetres horaires — NPC visibles uniquement pendant des heures de jeu specifiques
- API Exports — 10 exports pour l'integration inter-scripts
- NPC dynamiques — Enregistrer/desenregistrer dynamiquement depuis d'autres scripts
- Callbacks — Hooks
on_spawneton_despawnpar NPC
Commandes de debug
Definissez Config.Debug = true pour activer :
| Commande | Description |
|---|---|
/npc_debug | Lister tous les NPC avec etat, distance et statut d'animation |
/npc_debug <npc_id> | Informations detaillees pour un NPC specifique |
/npc_respawn <npc_id> | Forcer le respawn d'un NPC specifique |
/npc_respawn_all | Respawn de tous les NPC actuellement spawnes |
API Exports
Read
lua
-- Obtenir tous les NPC actuellement spawnes
local npcs = exports['twinded_lgw_npc']:GetSpawnedNpcs()
-- Obtenir le handle d'entite d'un NPC specifique
local entity = exports['twinded_lgw_npc']:GetNpcByID('my_npc')
-- Verifier si un NPC est actuellement spawne
local spawned = exports['twinded_lgw_npc']:IsNpcSpawned('my_npc')Actions
lua
-- Forcer le spawn/despawn independamment de la distance
exports['twinded_lgw_npc']:ForceSpawnNpc('my_npc')
exports['twinded_lgw_npc']:ForceDespawnNpc('my_npc')
-- Surcharger l'animation
exports['twinded_lgw_npc']:SetNpcAnimation('my_npc', 'anim_dict', 'anim_name', true, false)
-- Surcharger le scenario
exports['twinded_lgw_npc']:SetNpcScenario('my_npc', 'WORLD_HUMAN_STAND_BAR')
-- Activer/desactiver les prompts
exports['twinded_lgw_npc']:SetPromptEnabled('my_npc', false)NPC dynamiques
lua
-- Enregistrer un nouveau NPC au runtime
exports['twinded_lgw_npc']:RegisterNpc({
id = 'my_custom_npc',
name = 'Custom NPC',
coords = { x = 0.0, y = 0.0, z = 0.0, heading = 0.0 },
look = { model = "a_m_m_rancher_01" },
spawn_radius_in_meters = 100,
})
-- Desenregistrer et despawn
exports['twinded_lgw_npc']:UnregisterNpc('my_custom_npc')Depannage
| Probleme | Solution |
|---|---|
| Le script ne demarre pas | Assurez-vous que twinded_libs est demarre avant |
| Les NPC n'apparaissent pas | Verifiez spawn_radius_in_meters et votre distance au NPC |
| Les NPC sont bloques dans le sol | Definissez prevent_place_on_ground = true (courant dans les batiments personnalises) |
| Les prompts ne s'affichent pas | Verifiez que le NPC a un champ prompts et page_radius_in_meters |
| Les commandes de debug ne fonctionnent pas | Verifiez que Config.Debug est true |
| Le text3d n'est pas visible | Verifiez le champ text3d avec text et radius, et que vous etes a portee |

