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.

Celles ci remplacent les fonctions précédentes qui ont arrêté de fonctionner depuis OpenSimulator 0.7.1.1 (probablement cassées depuis OpenSimulator 0.6.9).

La philosophie générale dans la création de ces nouvelles fonctions est de:


 * 1) Donner aux auteurs de scripts des outils simples pour créer des comportements plus sophistiqués.
 * 2) Eviter de dupliquer les fonctions existantes en LSL et OSSL. Par exemple, trouver l'état dans lequel se trouve un agent peut être effectué avec travers la fonction llGetAgentInfo plutôt qu'en créant une fonction spéciale pour NPC.

Les NPC sont contrôlés par un script qui peut ê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 utilisateurs créés en NPC ne peuvent pas quitter la région dans laquelle ils sont nés. Si vous voulez un comportement de franchissement de région, regardez les options sur la page wiki concernant les NPC.

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 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.

= 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) Enabled = true défini dans la section [XEngine].
 * 3) AllowOSFunctions = true défini dans la section [XEngine].
 * 4) OSFunctionThreatLevel = VeryHigh défini dans la section [XEngine]. Les fonctions osAgentSaveAppearance, osAvatarPlayAnimation et osAvatarStopAnimation ont besoin de ce niveau. Si vous n'avez pas besoin de ces fonctions, alors un niveau "High" sera suffisant.

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

= Notes =


 * 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.
 * OpenSimulator 0.7.3-rc1 introduit le concept de "owned" et "unowned" NPC. Un NPC "owned" ne peut être manipulé seulement par les scripts ayant le même "owner" que celui ayant créé le NPC. Un NPC "unowned" peut être manipulé par n'importe quel script ayant les bonnes permissions (comme défini dans la section de configuration de [XEngine]). Dans OpenSimulator 0.7.3, tous les avatars sont "owned" par défaut tant que le contraire n'est pas spécifié dans l'appel à osNpcCreate.

= 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.

Avec la version git master bcfc392 (Fri Jul 20 21:08:04 2012), la constante OS_NPC devrait maintenant être utilisée à la place de NPC, afin d'éviter de futurs problèmes si LL décide d'utiliser des NPC eux-mêmes dans d'autres directions. La constante NPC sera déconseillée à partir de la version 0.7.4 mais restera utilisable.

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.

= 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

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. Actuellement il n'y a aucune option donc donnez lui toujours 0.

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.

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 =

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.

= Questions/Commentaires =

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