Inside·Rockstar Preuve 0
Dossier complet · série « Le moteur vous ment »

Vous n'êtes jamais seul dans votre bunker

Quand vous rentrez dans votre bunker de GTA Online, vous pensez être chez vous, seul. En réalité, d'autres joueurs de votre session sont peut-être dans la même pièce, au même endroit, à quelques centimètres de vous. Le jeu les cache. Cinq preuves, et une carte où toutes les portes mènent au même bunker.

Lecture : 8 min Sources : doc des natives FiveM + NativeDB + wiki RAGE MP
Preuve 1 / 5

Tous les bunkers sont le même bunker

Il existe 11 bunkers à acheter dans GTA Online, de Chumash à la forêt de Paleto. Pourtant, il n'y a qu'un seul intérieur de bunker dans tout le jeu. Les 11 portes mènent à la même pièce, rangée au même endroit sous la carte.

C'est pareil pour les boîtes de nuit : 10 adresses, un seul club. Et pour les complexes de Doomsday : 9 entrées, une seule base.

Prendre la porte, c'est un écran noir et une téléportation. Vous ne descendez pas sous votre bunker : vous partez sous le port de Los Santos, là où le dossier Intérieurs a trouvé les boîtes qui flottent sous le sol. La boîte de nuit, elle, est rangée sous l'aéroport, à 78 mètres sous le niveau de la mer.

Dehors, chaque bunker n'est qu'une porte posée dans le décor : un calque de carte numéroté, de gr_case0 à gr_case11.

La preuvenatives GTA V
GET_ENTITY_COORDS(PLAYER_PED_ID(), true)
// entrée Chumash → 899.55, -3246.04, -98.05
// entrée Paleto  → 899.55, -3246.04, -98.05
GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID())
// le même intérieur, quelle que soit la porte
// boîte de nuit → -1604.66, -3012.58, -78.00
// complexe      →   345.00,  4842.00, -60.00
Coordonnées de la communauté (wiki RAGE MP)
11 entrées → 1 intérieur
    Glissez pour tourner autour de la carte. Bunkers : positions relevées par la communauté. Boîtes de nuit et complexes : positions approximatives. Profondeur exagérée.
    Preuve 2 / 5

    Trente joueurs, une seule pièce

    Une session publique de GTA Online accueille jusqu'à 30 joueurs. Si plusieurs d'entre eux rentrent chez eux en même temps, ils arrivent tous aux mêmes coordonnées, dans la même pièce, devant les mêmes machines.

    Sans protection, vous verriez des inconnus marcher dans votre bunker, se coincer dans vos murs et se tenir à cinq sur votre poste de recherche. Dans la démo, retirez les instances et regardez.

    Et si la pièce est la même pour tous, comment chacun retrouve-t-il ses achats ? Les améliorations sont des « entity sets » : des morceaux de décor rangés dans l'intérieur, que le script allume ou éteint. Dans la boîte de nuit du casino, la sécurité renforcée, le matériel ou le DJ de la soirée en sont.

    La preuvenatives GTA V
    NETWORK_GET_NUM_CONNECTED_PLAYERS()
    // jusqu'à 30 dans une session publique
    GET_ENTITY_COORDS(PLAYER_PED_ID(), true)
    // chaque joueur dans son bunker : la même position
    ACTIVATE_INTERIOR_ENTITY_SET(intérieur, "int01_ba_security_upgrade")
    // un morceau de décor allumé dans l'intérieur
    —
    Preuve 3 / 5

    Le jeu vous cache les autres

    Les autres joueurs ne disparaissent pas vraiment. Ils sont toujours connectés à votre session, et le réseau continue de suivre leur position. Le jeu les « cache » simplement de votre point de vue.

    Un joueur caché n'est pas dessiné, et il n'a plus de collision : vous passez à travers lui, et vos balles aussi.

    La documentation de FiveM le dit en toutes lettres : c'est la fonction que Rockstar utilise pour cacher les joueurs dans les intérieurs de GTA Online.

    Dans la démo, passez en vue moteur pour voir les joueurs cachés, puis cliquez dans la pièce pour tirer.

    La preuvenatives GTA V
    NETWORK_CONCEAL_PLAYER(joueur, toggle, p2)
    NETWORK_IS_PLAYER_CONCEALED(joueur)
    // « ce que R* utilise pour cacher les joueurs
    //   dans les intérieurs MP » (doc FiveM)
    // caché : ni dessiné, ni touchable,
    // mais toujours dans la session
    // p2 : 3e paramètre non documenté
    Cliquez pour tirer
    JoueurOùÉtat
    Preuve 4 / 5

    Une instance est un monde à part

    Le moteur sait aussi ranger des joueurs dans des « sessions tutoriel » numérotées : des instances, jusqu'à 64. Deux joueurs dans des instances différentes ne se voient plus, même s'ils sont au même endroit.

    Inviter quelqu'un chez vous revient à le faire entrer dans votre instance. Dans la démo, glissez les joueurs d'une bulle à l'autre, ou invitez Kenny, et regardez qui voit qui.

    Ces fonctions existent dans le jeu. Pour les intérieurs comme le bunker, la documentation de FiveM pointe vers la cachette de la preuve 3 ; les sessions tutoriel sont l'autre outil du moteur pour séparer les joueurs.

    La preuvenatives GTA V
    NETWORK_START_SOLO_TUTORIAL_SESSION()
    NETWORK_ALLOW_GANG_TO_JOIN_TUTORIAL_SESSION(équipe, instance)
    // équipe < 3, instance < 64
    NETWORK_GET_PLAYER_TUTORIAL_SESSION_INSTANCE(joueur)
    NETWORK_ARE_PLAYERS_IN_SAME_TUTORIAL_SESSION(joueur, index)
    NETWORK_END_TUTORIAL_SESSION()
    // noms de NativeDB ; deux d'entre elles
    // n'ont pas de nom sur docs.fivem.net
    Natives réelles
    —
    Glissez un joueur dans une autre bulle. Le tableau dit qui voit qui.
    Preuve 5 / 5

    Sur FiveM, on dit « routing bucket »

    Sur un serveur FiveM, ce sont les créateurs du serveur qui gèrent les instances. FiveM leur donne un outil pour ça : les « routing buckets ». Chaque joueur et chaque objet appartient à un monde numéroté.

    Le monde 0 est celui de tout le monde. Placez un joueur dans le monde 1, et il ne voit plus personne du monde 0, même à un mètre. Chaque monde peut même avoir ses propres passants, ou aucun.

    Chaque monde a aussi son niveau de verrouillage : en mode « strict », les joueurs ne peuvent plus rien y faire apparaître eux-mêmes, seul le serveur crée les objets.

    C'est comme ça que les serveurs RP font les appartements, les courses privées et les zones d'attente. Dans la démo, déplacez le joueur et la voiture d'un monde à l'autre.

    La preuvenatives serveur FiveM
    SetPlayerRoutingBucket(source, 1)
    SetEntityRoutingBucket(voiture, 1)
    SetRoutingBucketPopulationEnabled(1, false)
    SetRoutingBucketEntityLockdownMode(1, 'strict')
    -- strict · relaxed · inactive
    GetPlayerRoutingBucket(source)
    -- 0 = le monde de tout le monde
    Natives FiveM documentées
    Joueur Voiture
    —
    Le bouton « Passants » règle le monde où se trouve le joueur.
    Avant-première

    Le prochain dossier est déjà sur le Discord

    Les membres lisent chaque dossier avant sa publication, avec les fichiers de tournage complets.

    Rejoindre le Discord
    Dossier suivant

    En mission, la circulation est un film

    Les voitures que vous croisez rejouent un trajet enregistré par un développeur.