Skip to main content

Exports et événements

MasterLadder expose des exports et des événements pour que vos autres scripts (dispatch, HUD, scripts de feu, métiers…) sachent ce qui se passe sur les échelles. Le nom de la ressource doit rester MasterLadder.

Unités : angles en degrés, distances en mètres. Une échelle est identifiée par le netId de son véhicule.

Places

Code Place
seat Poste de commande (tourelle)
b1, b2, b3 Places de la nacelle
c1, c2 Sur l'échelle (montée à pied)

État d'une échelle (GetLadderState)

Les deux côtés renvoient la même table (ou nil si l'échelle n'est pas déployée) :

Champ Contenu
netId, model, label Véhicule, clé dans Config.Ladders, nom affiché
phase calage automatique : "deploy" (calage), "ready" (manœuvrable), "pack" (repli) · calage manuel : "setup" (stabilisateurs au pupitre), "unfold" (dépliage), "ready", "fold" (repli de la nacelle), "abort" (abandon, rangement automatique)
calage "full", "reduced", "left" (gauche réduit) ou "right" (droit réduit)
rotation, elevation, length, arm Position de l'échelle (°, °, m de longueur totale, °)
basket Position de la nacelle (vector3)
reach, maxReach Déport actuel et déport maximal de l'abaque (m)
load Personnes comptées dans la charge
occupants { seat = id, b1 = id, … } (0 = libre)
operator ID serveur de l'opérateur aux commandes (0 = personne)
basketLocked, spotlight Verrou de nacelle, projecteur
monitor { holder, flowing, yaw, pitch } (+ impact côté client)

Côté client s'ajoutent vehicle (entité) et height (hauteur de la nacelle au-dessus du sol).

Exports client

local ml = exports['MasterLadder']
Export Retour
ml:GetPlace() netId, place du joueur, ou nil
ml:IsInLadder() Le joueur occupe une place
ml:IsInBasket() / ml:IsClimbing() / ml:IsAtSeat() Nacelle / sur l'échelle / au poste
ml:IsOperator() Le joueur a les commandes
ml:IsHoldingMonitor() Le joueur tient la lance
ml:IsLadderVehicle(veh) Ce véhicule est une échelle configurée
ml:IsDeployed(veh) Cette échelle est déployée
ml:GetLadderState(netId) Table d'état (échelles affichées chez ce joueur)
ml:GetBasketCoords(netId) Position de la nacelle
ml:IsWaterFlowing(netId) La lance débite
ml:GetWaterImpact(netId) Point d'impact du jet (vector3)
ml:GetNearestLadder(range) netId, distance de l'échelle déployée la plus proche (défaut 50 m)
ml:GetVisibleLadders() Liste des netId des échelles affichées

Exemple : couper un HUD de vitesse dans la nacelle.

CreateThread(function()
    while true do
        Wait(500)
        local inBasket = exports['MasterLadder']:IsInBasket()
        -- masquer / afficher votre HUD ici
    end
end)

Exports serveur

Export Retour
IsDeployed(netId) L'échelle est déployée
GetLadderState(netId) Table d'état
GetDeployedLadders() Liste des netId déployés
GetBasketCoords(netId) Position de la nacelle
GetPlayerPlace(src) netId, place du joueur, ou nil
GetOccupants(netId) { place = src } des places occupées
IsWaterFlowing(netId) La lance débite
EjectPlayer(src) Fait descendre le joueur de sa place (true si fait)
EvictLadder(netId) Vide toutes les places et rend les commandes
StopWater(netId) Ferme le jet (le porteur peut le rouvrir)

Événements serveur

À écouter avec AddEventHandler dans une ressource serveur :

Événement Paramètres Quand
masterladder:deployed netId, src, calage Déploiement lancé ("full" / "reduced" ; "manual" au début d'un calage manuel)
masterladder:ready netId Calage terminé
masterladder:packing netId, src Repli lancé
masterladder:packed netId Échelle rangée
masterladder:ptoChanged netId, src, engagée Prise de force engagée / désengagée
masterladder:placeChanged netId, src, place Place prise, ou quittée (place = nil)
masterladder:controlChanged netId, src Opérateur aux commandes (0 = personne)
masterladder:monitorChanged netId, src Porteur de la lance (0 = personne)
masterladder:waterChanged netId, src, ouvert Jet ouvert / fermé
masterladder:waterImpact netId, src, coords Impact du jet, 2 fois par seconde

Brancher un script de feu

-- server.lua de votre script de feu
AddEventHandler('masterladder:waterImpact', function(netId, src, coords)
    -- éteindre / affaiblir vos feux autour de coords (rayon ~3 m)
    MonScriptDeFeu.DamageAt(coords, 3.0, 25.0, src)
end)

Événements client

Événement Paramètres Quand
masterladder:client:placeChanged netId, place Ma place change (nil, nil quand je descends)
masterladder:client:waterImpact coords, rayon Impact du jet près de moi (feux éteints localement)