**Système d'embuscades aléatoires de PNJ hostiles. Des PNJ armés (à pied ou à cheval) attaquent les joueurs de façon imprévisible, sans compte à rebours ni indice visible, pour créer une tension permanente en monde ouvert.
**
Points forts
- Timer 100% invisible et imprévisible : le joueur ne voit jamais venir l'attaque. Le délai entre deux tentatives d'embuscade est tiré aléatoirement dans une plage configurable, et même une fois le délai écoulé, un tirage de probabilité décide si l'embuscade a réellement lieu.
- Groupes d'embuscade multiples et pondérés : plusieurs archétypes possibles (hors-la-loi à cheval, bandits à pied, tireur isolé...), chacun avec son propre nombre de PNJ, ses armes, sa précision, sa vie, et un poids de tirage pour ajuster la fréquence relative de chaque scénario.
- Support des PNJ montés : les PNJ peuvent apparaître déjà à cheval et engager le combat monté.
- Protection des zones habitées : aucune embuscade ne se déclenche à proximité des grandes villes, avec un rayon configurable par ville. Vérifiée à la fois côté serveur (avant l'ordre de spawn) et côté client (sécurité redondante).
- Anti-spam de groupe : une embuscade ne se déclenche pas si trop de joueurs sont regroupés à proximité (seuil configurable), pour éviter de transformer une session de groupe en carnage systématique.
- Nettoyage automatique et robuste : les PNJ et chevaux sont supprimés automatiquement dès que le combat est gagné, que le joueur s'éloigne trop, ou après un délai de sécurité (timeout) si le combat s'éternise. Aucun PNJ ne reste en mémoire indéfiniment.
-
Diagnostics intégrés : messages de debug en console pour les modèles invalides, les échecs de spawn, les timeouts de chargement, et l'application des tenues — pensé pour être facilement dépannable sans avoir à ajouter ses propres
print. -
Compatibilité PNJ "story" et gangs "MP_" : gère aussi bien les modèles PNJ classiques que les modèles de gangs multijoueur (
MP_...), qui nécessitent une gestion de tenue spécifique (outfitPreset) pour ne pas apparaître invisibles. -
Commande de test admin (
/testambush) : permet de déclencher une embuscade à la demande (groupe aléatoire ou choisi, avec ou sans ignorer la protection des villes), pour tester et régler la config sans attendre le timer. -
Entièrement configurable dans un seul fichier (
config.lua) : délais, probabilité, distances de spawn, groupes d'ennemis, villes protégées, message de notification, comportement de combat — rien n'est en dur dans le code.
Dépendances
Dépendance
Rôle
Obligatoire
RSG-Core (rsg-core)
Framework de base : récupération des joueurs connectés, gestion des permissions, event RSGCore:Server:PlayerLoaded
Oui
rNotify
Affichage des notifications (message d'ambiance à l'embuscade, retours de la commande /testambush)
Oui
Ce qui est configurable (config.lua)
-
Timer :
MinDelay/MaxDelay(plage du délai aléatoire),ChancePerCheck(probabilité de déclenchement une fois le délai écoulé) -
Conditions de déclenchement :
MinPlayersAlone(nb max de joueurs proches autorisés),CheckRadiusForGroup -
Spawn :
SpawnDistanceMin/Max(distance d'apparition),DespawnDistance,FightTimeout -
Groupes d'embuscade (
AmbushGroups) : nombre de PNJ, modèles, armes, précision, vie, monture ou non, poids de tirage, preset de tenue si nécessaire - Comportement au combat : agressivité, mouvement, distance de combat des PNJ
-
Zones protégées (
Towns) : liste de villes avec coordonnées et rayon de sécurité, activable/désactivable globalement - Message d'ambiance : texte et activation de la notification au moment de l'attaque
Limites connues / points d'attention
- Les coordonnées des villes sont approximatives et méritent d'être affinées en jeu (rayon parfois trop large ou trop étroit selon la topographie réelle).
- Les modèles de PNJ préfixés
MP_(gangs freemode) nécessitent de trouver manuellement le bonoutfitPresetpar essai-erreur — ce ne sont pas des PNJ "story" avec tenue par défaut. - Le système ne gère aucune récompense/butin sur les PNJ tués : c'est un système d'ambiance/danger pur, à combiner avec un autre script si tu veux du loot.