Portails faits par les scripts
Un portail du monde emmène chaque joueur de la salle vers un autre monde. Seuls les scripts du monde sur le serveur font les portails, avec Portals.Spawn, Portals.Update et Portals.Despawn : sur l'appareil d'un joueur, ces appels renvoient false. Le script d'un joueur qui veut un portail envoie un événement réseau au même script sur le serveur, qui l'ouvre.
Ouvrir un portail sur le serveur
using NodeWorld.Flux;
public class HomePortal : FluxScript
{
public string targetServer = ""; // identifiant du serveur du monde visé
public string targetWorld = "HomeWorld";
protected override void Start()
{
if (!World.isServer) return;
Portals.Spawn("home", new PortalOptions
{
targetServer = targetServer,
targetWorld = targetWorld,
instanceCode = "", // vide : l'API centrale choisit l'instance
label = "Home", // vide : le nom du monde visé
position = transform.position,
rotation = transform.rotation,
});
}
protected override void OnDestroy()
{
if (World.isServer) Portals.Despawn("home");
}
}- L'identifiant du portail (
"home") est celui du monde, unique dans la salle.Spawnrenvoiefalsesi le serveur l'a refusé (une cible vide, un identifiant déjà pris). Portals.Updatele déplace ou change où il mène ;Portals.Despawnle ferme.- Les portails d'un monde n'expirent pas ; ils se ferment avec la salle, ou quand le script les ferme.
Un portail demandé par un joueur
Envoie un événement réseau au serveur avec NetworkEventTarget.Server : il lance OnNetworkEvent du même script, sur le même objet, sur le serveur, avec l'identifiant du joueur qui l'a envoyé. L'objet a besoin d'un identifiant réseau (son composant FL# Script), et le script doit tourner sur le serveur (pas [ClientOnly]).
public class PortalKiosk : FluxScript
{
public string targetServer = "";
public string targetWorld = "HomeWorld";
protected override void Start()
{
if (!World.isServer) Interaction.SetInteractable(gameObject, true);
}
// Sur l'appareil du joueur : demande au serveur.
protected override void OnInteract() => SendNetworkEvent(NetworkEventTarget.Server, "Open");
// Sur le serveur : ouvre le portail devant la borne.
protected override void OnNetworkEvent(string name, NetReader arguments, int senderId)
{
if (!World.isServer || name != "Open") return;
Portals.Spawn("kiosk", new PortalOptions
{
targetServer = targetServer,
targetWorld = targetWorld,
position = transform.position + transform.forward * 2f,
rotation = transform.rotation,
});
}
}Un événement vers NetworkEventTarget.Server n'atteint que le serveur : ni le joueur qui l'envoie ni les autres joueurs ne le lancent. Il compte dans les 120 messages par seconde que chaque joueur peut envoyer au réseau des scripts.
