OSSLNPC/fr

=Introduction=

Depuis OpenSimulator 0.7.2, un certain nombre de fonctions sont fournies pour créer et manipuler des NPC côté serveur.

Les NPC sont contrôlés par un script qui doit être dans la même région que le NPC. Il peut être hébergé dans un attachement qui est attaché au maître.

Les NPC ne peuvent pas quitter la région dans laquelle ils sont nés.

L'apparence des NPC est sauvée et chargée en sérialisant la structure de données de l'apparence dans une notecard présente dans le même objet que le script. Les textures requises doivent être préservées quand un OAR est sauvegardé puis chargé.

Malheureusement, le format de données de l'apparence (tel que vu dans les notecards créées par la sauvegarde de l'apparence) est actuellement le même que celui utilisé pour la liaison avec OpenSimulator donc n'est pas prévu pour être édité directement. Cependant en y prenant bien attention, ceci peut être possible, voir Appearance Formats pour plus de détails mais ce n'est pas recommandé, sauf si vous avez vraiment, vraiment besoin de le faire.

= Activer =

Pour utiliser ces fonctions, vous avez besoin de des configurations suivantes dans votre fichier OpenSim.ini


 * 1) Enabled = true défini dans la section [NPC].
 * 2) Activer un moteur de script.

Dans config-include/osslEnable.ini Vous vérifiez également les droits de la fonction osAgentSaveAppearance.
 * 1) AllowOSFunctions = true
 * 2) Vérifier la valeur de osslNPC pour définir les droits de la plupart des fonctions NPC.

Voir Configuring Simulator Parameters si vous avez besoin de confirmer que ces paramètres sont correctement définis.

= Notes =

En effet, actuellement, la sauvegarde des données d'apparence ne déclenche pas la sauvegarde des positions d'attachement.
 * Quand vous utilisez votre avatar pour modéliser l'apparence avant la sauvegarde, vous devez attendre quelques secondes avant d'invoquer une commande de changement d'apparence. C'est ainsi car la sauvegarde d'apparence opère actuellement avec un délai afin de gérer de multiples mises à jour de l'apparence depuis le client.
 * Lorsque vous utilisez votre avatar pour modéliser l'apparence du NPC et si vous souhaitez repositionner les pièces jointes sur le NPC, vous devrez :
 * 1) les repositionnez sur vous-même
 * 2) puis les détachez depuis l'inventaire
 * 3) les attacher à nouveau
 * et, enfin, sauvegarder l'apparence

= Détection =

llAgentSensor peut être utilisé pour définir un capteur qui va détecter les NPC au même titre que les autres entités de région.

Dans OpenSimulator 0.7.2, les capteurs LSL détecteront les NPC comme des agents originaires.

Dans OpenSimulator 0.7.3-rc1 et supérieur, tant que le contraire n'est pas précisé, les NPC ne seront seulement détectés qu'en utilisant le drapeau OpenSimulator-specific.

Vous pouvez faire en sorte à ce que les NPC soient détectables de nouveau en tant qu' AGENT en utilisant l'option OS_NPC_SENSE_AS_AGENT dans osNpcCreate.

Cette précision sert à corriger le problème que certains scripts, détectant les NPC comme des AGENTS par défaut, peuvent être rendus inutilisables. (ex: les radars qui ne savent rien sur les NPC). Cependant la conversion d'autres scripts peuvent ne pas répondre comme prévu si les avatars ne sont pas détectés comme des agents (ex: les portes qui s'ouvrent automatiquement pour les avatars pourraient ne pas s'ouvrir pour les NPC).

Depuis OpenSimulator git master commit ecf7bb26 (Fri Jul 20 21:36:33 2012), llGetDetectedType définit le drapeau OS_NPC si un NPC a été détecté. Si le NPC a été créé avec l'option OS_NPC_SENSE_AS_AGENT alors le drapeau AGENT sera aussi défini.

= Formats de données = Pour plus d'informations sur le format utilisé pour stocker les informations relatives à l'apparence dans les notecards, voir Formats d'apparence.

= Fonctions =

osNpcCreate
osNpcCreate(string firstname, string lastname, vector position, string cloneFrom):key

cloneFrom peut être:


 * Le nom d'une notecard contenant une apparence d'avatar sérialisée, ou
 * L'UUID de l'asset de la notecard, ou
 * L'UUID d'un avatar connecté sur la même région. Cependant, notez que cette apparence ne sera pas persistante tant que osNpcSaveAppearance n'est pas appellé.

Si le NPC est créé avec succès, alors son UUID est retourné, ce qui est nécessaire pour toutes les fonctions subséquentes. Un exemple est disponible dans osNpcCreate

(seulement depuis OpenSimulator 0.7.3-rc1). Ceci crée un NPC qui est "possédé" par le script de création et détecté en utilisant le drapeau OpenSimulator-only pour les capteurs.

osNpcCreate
Depuis OpenSimulator 0.7.3-rc1.

osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, integer options):key

cloneFrom peut être:


 * Le nom de la notecard contenant une apparence sérialisée d'avatar, ou
 * L'UUID d'asset de la notecard, ou
 * L'UUID d'un avatar actuellement connecté sur la même région. Cependant notez bien que cette apparence ne sera pas persistante tant que osNpcSaveAppearance n'est pas appellé.

integer est un ensemble de drapeaux qui peut être 0 ou un de ceux ci


 * OS_NPC_NOT_OWNED - crée un "unowned" NPC.
 * OS_NPC_SENSE_AS_AGENT - crée un NPC qui est détecté en tant que AGENT par les capteurs LSL
 * OS_NPC_OBJECT_GROUP - crée un NPC avec le groupe de l'objet du script, si le propriétaire de l'objet est membre de ce groupe.

Si le NPC est créé avec succès, alors son UUID est retourné, ce qui est nécessaire pour toutes les fonctions subséquentes. Un exemple est disponible dans osNpcCreate

osNpcRemove
osNpcRemove(key npc):void

Retire l'avatar donné depuis la région. Exemple à osNpcRemove.

osIsNpc
Depuis OpenSimulator 0.7.3-rc1.

osIsNpc(key npc):integer

Retourne TRUE si la clef donnée est un NPC, FALSE dans les autres cas.

osNpcGetRot
Récupère la rotation de l'avatar. Seulement la rotation autour du plan Z en coordonnées Euler (rotation horizontale) aura une signification.

osNpcGetRot(key npc):rotation

osNpcSetRot
osNpcSetRot(key npc, rotation rot):void

Définit la rotation de l'avatar. Seulement la rotation sur le plan Z en coordonnées Euler aura une signification (faire tourner l'avatar pour le faire pointer dans une direction ou une autre). Définir les valeurs Euler X ou Y résultera en une rotation d'une manière indéfinie.

osNpcGetPos
osNpcGetPos(key npc):vector

Retourne la position actuelle du NPC.

osNpcGetOwner
Depuis OpenSimulator 0.7.3-rc1.

osNpcGetOwner(key npc):key

Retourne le propriétaire du NPC donné. (ex: le propriétaire du script qui l'a créé). Si le NPC est unowned ou la clef fournie n'appartient pas à un NPC, il sera retourné NULL_KEY.

osNpcMoveTo
osNpcMoveTo(key npc, vector position):void

Fonction plus ancienne qui effectue un osNpcMoveToTarget en volant et atterrissant sur la cible.

osNpcMoveToTarget
osNpcMoveToTarget(key npc, vector target, int options):void

Déplace l'avatar à une cible donnée durant un certain temps. La façon dont l'avatar va rejoindre sa cible dépendra des options suivantes.


 * OS_NPC_FLY - Fait voler l'avatar à la position donnée. L'avatar n'atterrira pas tant que l'option OS_NPC_LAND_AT_TARGET n'est pas aussi définie.
 * OS_NPC_NO_FLY - Ne fait pas voler vers la cible. Le NPC va tenter de marcher vers la destination. Si elle est en hauteur dans les airs, alors l'avatar va rebondir sans cesse jusqu'à ce qu'un autre move to target lui soit donné ou que le déplacement soit interrompu.
 * OS_NPC_LAND_AT_TARGET - Si défini et que l'avatar donné est en train de voler, alors il va atterrir quand il atteindra la cible. Si OS_NPC_NO_FLY est donné, alors cette option n'aura pas d'effet.
 * OS_NPC_RUNNING - Si défini, le NPC se déplacera à vitesse rapide ou lente, sinon à vitesse normale.

OS_NPC_FLY et OS_NPC_NO_FLY sont des options qui ne peuvent être combinées - l'avatar va finir par utiliser soit l'une soit l'autre. Si vous voulez que l'avatar vole et atterrisse sur la cible, alors OS_NPC_LAND_AT_TARGET doit être combiné avec OS_NPC_FLY. Par exemple,

osNpcMoveToTarget(npc, llGetPos + <9,9,5>, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);

osNpcStopMoveToTarget
osNpcStopMoveToTarget(key npc):void

Arrête le déplacement actuel vers une cible.

osNpcSit
Depuis OpenSimulator 0.7.3-rc1.

osNpcSit(key npc, key target, int options):void

Assied un NPC sur la primitive cible.

osNpcStand
Depuis OpenSimulator 0.7.3-rc1.

osNpcStand(key npc):void

Mettre debout le NPC.

osNpcSay
osNpcSay(key npc, string message):void osNpcSay(key npc, int channel, string message):void

Faire dire le message donné au NPC.

Si le canal est spécifié, alors le texte est dit sur le canal donné. Le parametre de canal est seulement disponible dans les versions supérieures à 0.7.4.

osNpcSayTo
osNpcSayTo(key npc, key target, integer channel, string message):void

Demande au NPC de dire le message donné sur le canal donné à la cible spécifiée.

Cette fonction est basée sur llRegionSayTo, elle n'a donc pas de limitation de portée à l'intérieur de la région.

Ajouté dans OpenSimulator 0.9.1.0 Dev

osNpcShout
Depuis OpenSimulator 0.7.4.

osNpcShout(key npc, int channel, string message):void

Faire crier le message donné au NPC sur le canal donné.

osNpcWhisper
Depuis OpenSimulator 0.7.4.

osNpcWhisper(key npc, int channel, string message):void

Faire chuchotter le message donné au NPC sur le canal donné.

osNpcPlayAnimation
Depuis OpenSimulator 0.7.3-rc1.

osNpcPlayAnimation(key npc, string animation):void

Faire jouer une animation au NPC. L'animation peut être soit une clef, soit le nom d'une animation contenue dans le même inventaire que le script.

osNpcStopAnimation
Dans OpenSimulator 0.7.3-rc1 il y a un bug qui fait jouer l'animation à la place. Ceci sera corrigé dans la version finale mais en attendant, utilisez osAvatarStopAnimation à la place.

osNpcStopAnimation(key npc, string animation):void

Faire stopper une animation jouée par le NPC. L'animation peut être soit une clef, soit le nom d'une animation contenue dans le même inventaire que le script.

Appearance
L'apparence d'un NPC est manipulée en sauvegardant puis chargeant les données d'apparence dans une notecard contenue dans le même inventaire que le script invoqué.

osOwnerSaveAppearance
osOwnerSaveAppearance(string notecard):key

Sauvegarde l'apparence actuelle du propriétaire vers une notecard dans l'inventaire de la primitive. Ceci inclut les données du corps, les vêtements et attachements. Si une notecard ayant le même nom existe déjà, elle sera alors remplacée. Le propriétaire doit être présent sur la région quand la fonction est invoquée. Les texture rendues pour le propriétaire (nécessaires pour recréer l'apparence du NPC) sont sauvées définitivement.

osAgentSaveAppearance
osAgentSaveAppearance(key agentId, string notecard):key

Sauvegarde l'apparence actuelle d'un avatar vers une notecard dans l'inventaire de la primitive. Ceci inclut les données du corps, les vêtements et attachements. Si une notecard ayant le même nom existe déjà, elle sera alors remplacée. L'avatar doit être présent sur la région quand la fonction est invoquée. Les texture rendues pour l'avatar (nécessaires pour recréer l'apparence du NPC) sont sauvées définitivement.

osNpcSaveAppearance
osNpcSaveAppearance(key npc, string notecard):key

Sauvegarde l'apparence actuelle du NPC vers une notecard dans l'inventaire de la primitive. Ceci inclut les données du corps, les vêtements et attachements. Si une notecard ayant le même nom existe déjà, elle sera alors remplacée. L'avatar doit être présent sur la région quand la fonction est invoquée. Les texture rendues pour l'avatar (nécessaires pour recréer l'apparence du NPC) sont sauvées définitivement.

osNpcLoadAppearance
osNpcLoadAppearance(key npc, string notecard):void

Charge l'apparence depuis une notecard. Cette notecard doit contenir des données d'apparence crées avec une des fonctions de sauvegarde d'apparence.

osNpcTouch
Depuis OpenSimulator 0.7.4.

osNpcTouch(key npc, key objectKey, integer linkNum)

Autorise le NPC à toucher des objets.

= Exemples =

NPC Automator

 * NPC Automator 2.0

Ceci est un exemple brut pour la plupart des fonctionnalités des NPC. Une de ses déficiences majeures est qu'il ne suit pas plus d'un avatar créé à la fois. Bien sûr, n'hesitez pas à l'améliorer.

OSW NPCs Controller
OpenSimWorld fournit un contrôleur de NPCs qui supporte les NPCs interactifs. Le système vous permet de donner des commandes aux NPCs à travers le chat local et de construire des comportements complexes à travers des notecards faciles à écrire. Il vous permet également de spécifier une "carte" de votre région afin que le NPC puisse la parcourir.

Plus d'informations

= Questions/Commentaires =

S'il vous plait, laissez vos questions et commentaires sur la page de discussion de cet article.