OSSLNPC/de

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
(Notes)
(NPC Automator)
 
(50 intermediate revisions by one user not shown)
Line 1: Line 1:
 
{{Quicklinks}}
 
{{Quicklinks}}
 
<br />
 
<br />
 +
 
=Einführung=
 
=Einführung=
  
Seit OpenSimulator 0.7.2 stehen eine Reihe von Funktionen zum Erstellen und Bearbeiten serverseitiger NPCs (Non Player Characters) zur Verfügung.
+
Im OpenSimulator stehen eine Reihe von Funktionen zum Erstellen und Bearbeiten serverseitiger NPCs (Non Player Characters) zur Verfügung.
  
 
NPCs werden über ein Skript gesteuert, das sich in derselben Region befinden muss wie der NPC. Dies könnte in einem Anhang untergebracht sein, der mit dem Avatar verbunden ist.
 
NPCs werden über ein Skript gesteuert, das sich in derselben Region befinden muss wie der NPC. Dies könnte in einem Anhang untergebracht sein, der mit dem Avatar verbunden ist.
Line 12: Line 13:
  
 
Das aktuelle Erscheinungsdatenformat (wie in Notecards, die durch das Anschein von Speichern erstellt wurden) ist das gleiche, das für das OpenSimulator-Kabelformat verwendet wird, und ist daher nicht für die direkte Bearbeitung gedacht. Mit größter Sorgfalt ist dies möglich. Weitere Informationen finden Sie unter [[Appearance Formats]] Es wird jedoch nicht empfohlen, es sei denn, Sie müssen es wirklich tun.
 
Das aktuelle Erscheinungsdatenformat (wie in Notecards, die durch das Anschein von Speichern erstellt wurden) ist das gleiche, das für das OpenSimulator-Kabelformat verwendet wird, und ist daher nicht für die direkte Bearbeitung gedacht. Mit größter Sorgfalt ist dies möglich. Weitere Informationen finden Sie unter [[Appearance Formats]] Es wird jedoch nicht empfohlen, es sei denn, Sie müssen es wirklich tun.
 +
 +
Weitere Einzelheiten zu OsIsNpc Funktionen finden sie hier: http://opensimulator.org/wiki/Category:OSSL_Functions
  
 
= Aktivieren =
 
= Aktivieren =
Line 26: Line 29:
  
 
Sie müssen möglicherweise auch die Rechte von osAgentSaveAppearance() prüfen.
 
Sie müssen möglicherweise auch die Rechte von osAgentSaveAppearance() prüfen.
 +
 +
Seit 0.9.2.0 ist die maximale Anzahl von NPCs pro Szene auf den Wert des MaxNumberNPCsPerScene Eintrags im Abschnitt [NPC] begrenzt.
  
 
Siehe [[Configuring Simulator Parameters#Getting information about parameters]] wenn Sie überprüfen müssen, ob diese Parameter richtig eingestellt wurden.
 
Siehe [[Configuring Simulator Parameters#Getting information about parameters]] wenn Sie überprüfen müssen, ob diese Parameter richtig eingestellt wurden.
Line 41: Line 46:
 
= Sensing =
 
= Sensing =
  
llAgentSensor() can be used to set up a sensor that will detected NPCs instead/of as well as other region entities.
+
llAgentSensor() kann verwendet werden, um einen Sensor einzurichten, der anstelle von oder von anderen Regionsentitäten NPCs erkennt.
  
In OpenSimulator 0.7.2, LSL sensors will detect NPCs as ordinary agents.
+
Im OpenSimulator werden NPCs, sofern nicht anders angegeben, nur mit dem OpenSimulator-spezifischen NPC-Flag erkannt.
 
+
In OpenSimulator 0.7.3-rc1 onwards, unless otherwise specified, NPCs will only be detected using the OpenSimulator-specific NPC flag, e.g.
+
  
 
<source lang="lsl">
 
<source lang="lsl">
Line 100: Line 103:
 
</source>
 
</source>
  
You can get NPCs to be detected as AGENTs again using the OS_NPC_SENSE_AS_AGENT option below in osNpcCreate().
+
Sie können NPCs dazu bringen, erneut als AGENTs erkannt zu werden, indem Sie die unten stehende Option OS_NPC_SENSE_AS_AGENT in osNpcCreate() verwenden.
  
The justification is that detecting NPCs as AGENTs by default may make some scripts unusable (e.g. radars that know nothing about NPCs). However, conversely other scripts may not behave as expected if NPCs aren't sensed as agents (e.g. doors that open automatically for avatars would not open for NPCs).
+
Die Begründung ist, dass die Erkennung von NPCs als AGENTs standardmäßig dazu führen kann, dass einige Skripts unbrauchbar werden (z. B. Radargeräte, die nichts über NPCs wissen). Umgekehrt verhalten sich andere Skripts jedoch möglicherweise nicht wie erwartet, wenn NPCs nicht als Agenten erkannt werden (z. B. öffnen sich automatisch geöffnete Türen für Avatare für NPCs nicht).
  
llGetDetectedType() will set the NPC flag if an NPC was detected. If the NPC was created with the OS_NPC_SENSE_AS_AGENT option then the AGENT flag will also be set.
+
llGetDetectedType() setzt das NPC-Flag, wenn ein NPC erkannt wurde. Wenn der NPC mit der Option OS_NPC_SENSE_AS_AGENT erstellt wurde, wird auch das Flag AGENT gesetzt.
  
= Data Formats =
+
= Datenformate =
For more information about the format used to store appearance information in notecards, see [[Appearance Formats]].
+
Weitere Informationen zum Format zum Speichern von Erscheinungsinformationen in Notecards finden Sie unter [[Appearance Formats]].
  
= Functions =
+
= Funktionen =
  
== Create and Remove ==
+
== Erstellen und entfernen ==
 
=== [[osNpcCreate]] ===
 
=== [[osNpcCreate]] ===
  
  osNpcCreate(string firstname, string lastname, vector position, string cloneFrom):key
+
  osNpcCreate(string Vorname, string Nachname, vector position, string cloneFrom):key
  
cloneFrom may be:
+
cloneFrom kann sein:
  
* Name of the notecard containing a serialized avatar appearance, or
+
* Name der Notecard, die ein serialisiertes Avatar-Erscheinungsbild enthält, oder
* Asset UUID of the Notecard, or
+
* Asset-UUID der Notecard oder
* UUID of an avatar logged into the same region. However, please note that this appearance will not be persisted unless osNpcSaveAppearance() is called.
+
* UUID eines Avatars, der in derselben Region angemeldet ist. Beachten Sie jedoch, dass dieses Erscheinungsbild nicht dauerhaft bleibt, wenn nicht osNpcSaveAppearance() aufgerufen wird.
  
If the NPC is successfully created, then its UUID is returned, which is required for all subsequent functions. Example is available at [[osNpcCreate]]
+
Wenn der NPC erfolgreich erstellt wurde, wird seine UUID zurückgegeben, die für alle nachfolgenden Funktionen erforderlich ist. Ein Beispiel ist bei [[osNpcCreate]] verfügbar.
  
(OpenSimulator 0.7.3-rc1 onwards only). This creates an NPC that is 'owned' by the creating script and sensed using the OpenSimulator-only NPC flag for sensors.
 
  
 
=== [[osNpcCreate]] ===
 
=== [[osNpcCreate]] ===
  
OpenSimulator 0.7.3-rc1 onwards.
+
osNpcCreate(string Vorname, string Nachname, vector position, string cloneFrom, integer optionen):key
  
osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, integer options):key
+
cloneFrom kann sein:
  
cloneFrom may be:
+
* Name der Notecard, die ein serialisiertes Avatar-Erscheinungsbild enthält, oder
 +
* Asset-UUID der Notecard oder
 +
* UUID eines Avatars, der in derselben Region angemeldet ist. Beachten Sie jedoch, dass dieses Erscheinungsbild nicht dauerhaft bleibt, wenn nicht osNpcSaveAppearance() aufgerufen wird.
  
* Name of the notecard containing a serialized avatar appearance, or
+
integer Ganzzahl ist eine Menge von Flags, die 0 oder eine oder mehrere sein können
* Asset UUID of the Notecard, or
+
* UUID of an avatar logged into the same region. However, please note that this appearance will not be persisted unless osNpcSaveAppearance() is called.
+
  
integer is a set of flags that may be 0 or one or more of
+
* OS_NPC_NOT_OWNED - Erstellen Sie einen nicht besetzten NPC.
 +
* OS_NPC_SENSE_AS_AGENT - Erstellen Sie einen NPC, der als AGENT mit LSL-Sensoren erfasst wird
 +
* OS_NPC_OBJECT_GROUP  - Erstellen Sie einen NPC mit der Gruppe des Objekts mit dem Skript, wenn der Eigentümer dieses Objekts Mitglied dieser Gruppe ist.
  
* OS_NPC_NOT_OWNED - create an unowned NPC.
+
Wenn der NPC erfolgreich erstellt wurde, wird seine UUID zurückgegeben, die für alle nachfolgenden Funktionen erforderlich ist. Ein Beispiel ist bei [[osNpcCreate]] verfügbar.
* OS_NPC_SENSE_AS_AGENT - create an NPC that is sensed as an AGENT with LSL sensors
+
* OS_NPC_OBJECT_GROUP  - create an NPC with the group of the object with the script, if that object owner is member of that group.
+
 
+
If the NPC is successfully created, then its UUID is returned, which is required for all subsequent functions. Example is available at [[osNpcCreate]]
+
  
 
=== [[osNpcRemove]] ===
 
=== [[osNpcRemove]] ===
Line 150: Line 150:
 
  osNpcRemove(key npc):void
 
  osNpcRemove(key npc):void
  
Remove the given avatar from the region. Example at [[osNpcRemove]].
+
Entfernt den angegebenen Avatar aus der Region. Beispiel bei [[osNpcRemove]].
  
 
== Get and Set ==
 
== Get and Set ==
 
=== [[osIsNpc]] ===
 
=== [[osIsNpc]] ===
 
OpenSimulator 0.7.3-rc1 onwards.
 
  
 
osIsNpc(key npc):integer
 
osIsNpc(key npc):integer
  
Returns TRUE if the given key is an NPC, false otherwise.
+
Gibt TRUE zurück, wenn der angegebene Schlüssel ein NPC ist, andernfalls false.
  
 
=== [[osNpcGetRot]] ===
 
=== [[osNpcGetRot]] ===
  
Gets the rotation of the avatar. Only the rotation around the Z plane in Euler rotation (horizontal rotation) has any meaning.
+
Ruft die Drehung des Avatars ab. Nur die Drehung um die Z-Ebene bei der Euler-Drehung (horizontale Drehung) hat eine Bedeutung.  
  
 
  osNpcGetRot(key npc):rotation
 
  osNpcGetRot(key npc):rotation
Line 171: Line 169:
 
  osNpcSetRot(key npc, rotation rot):void
 
  osNpcSetRot(key npc, rotation rot):void
  
Set the rotation of the avatar. Only setting the rotation in the Z plane in Euler rotation will have any meaningful effect (turning the avatar to point in one direction or another). Setting X or Y Euler values will result in the avatar rotating in an undefined manner.
+
Stellt die Drehung des Avatars ein. Nur das Einstellen der Rotation in der Z-Ebene in Euler-Rotation hat einen sinnvollen Effekt (den Avatar so drehen, dass er in die eine oder andere Richtung zeigt). Das Festlegen von X- oder Y-Euler-Werten führt dazu, dass sich der Avatar auf undefinierte Weise dreht.
  
 
=== [[osNpcGetPos]] ===
 
=== [[osNpcGetPos]] ===
Line 177: Line 175:
 
  osNpcGetPos(key npc):vector
 
  osNpcGetPos(key npc):vector
  
Return the current position of the NPC.
+
Gibt die aktuelle Position des NPC zurück.
  
 
=== [[osNpcGetOwner]] ===
 
=== [[osNpcGetOwner]] ===
 
OpenSimulator 0.7.3-rc1 onwards.
 
  
 
  osNpcGetOwner(key npc):key
 
  osNpcGetOwner(key npc):key
  
Return the owner of the given NPC (i.e. the owner of the script that created it). If the NPC is unowned or the input key does not belong to an NPC then returns NULL_KEY.
+
Gibt den Besitzer des angegebenen NPC zurück (d. h. den Besitzer des Skripts, das ihn erstellt hat). Wenn der NPC nicht im Besitz ist oder der Eingabeschlüssel keinem NPC gehört, wird NULL_KEY zurückgegeben.
  
 
== Movement ==
 
== Movement ==
Line 193: Line 189:
 
  osNpcMoveTo(key npc, vector position):void
 
  osNpcMoveTo(key npc, vector position):void
  
An older function that performs an osNpcMoveToTarget() by flying and landing at the target.
+
Eine ältere Funktion, die ein osNpcMoveToTarget() ausführt, indem sie auf dem Ziel fliegt und landet.
  
 
=== [[osNpcMoveToTarget]] ===
 
=== [[osNpcMoveToTarget]] ===
Line 199: Line 195:
 
  osNpcMoveToTarget(key npc, vector target, int options):void
 
  osNpcMoveToTarget(key npc, vector target, int options):void
  
Move the avatar to a given target over time. How the avatar will get there depends on the following options.
 
  
 
* OS_NPC_FLY - Fly the avatar to the given position. The avatar will not land unless the OS_NPC_LAND_AT_TARGET option is also given.
 
* OS_NPC_FLY - Fly the avatar to the given position. The avatar will not land unless the OS_NPC_LAND_AT_TARGET option is also given.
Line 207: Line 202:
  
 
OS_NPC_FLY and OS_NPC_NO_FLY are options that cannot be combined - the avatar will end up doing one or the other. If you want the avatar to fly and land at the target, then OS_NPC_LAND_AT_TARGET must be combined with OS_NPC_FLY. For instance,
 
OS_NPC_FLY and OS_NPC_NO_FLY are options that cannot be combined - the avatar will end up doing one or the other. If you want the avatar to fly and land at the target, then OS_NPC_LAND_AT_TARGET must be combined with OS_NPC_FLY. For instance,
 +
 +
Bewegt den Avatar im Laufe der Zeit zu einem bestimmten Ziel. Wie der Avatar dorthin gelangt, hängt von den folgenden Optionen ab.
 +
 +
* OS_NPC_FLY - Fliege den Avatar zur angegebenen Position. Der Avatar wird nicht landen, es sei denn, die Option OS_NPC_LAND_AT_TARGET ist ebenfalls angegeben.
 +
* OS_NPC_NO_FLY - Fliege nicht zum Ziel. Der NPC wird versuchen, zu dem Ort zu gehen. Wenn es in der Luft ist, hüpft der Avatar hoffnungslos weiter, bis ein anderes Bewegungsziel gegeben oder die Bewegung gestoppt wird
 +
* OS_NPC_LAND_AT_TARGET - Wenn angegeben und der Avatar fliegt, landet er, wenn er das Ziel erreicht. Wenn OS_NPC_NO_FLY angegeben ist, hat diese Option keine Auswirkung.
 +
* OS_NPC_RUNNING - falls angegeben, bewegt sich der NPC-Avatar mit Lauf-/Schnellfluggeschwindigkeit, ansonsten mit walking/slow flying speed.
 +
 +
OS_NPC_FLY und OS_NPC_NO_FLY sind Optionen, die nicht kombiniert werden können – der Avatar wird am Ende entweder das eine oder das andere tun. Wenn Sie möchten, dass der Avatar auf dem Ziel fliegt und landet, muss OS_NPC_LAND_AT_TARGET mit OS_NPC_FLY kombiniert werden. Zum Beispiel:
  
 
  osNpcMoveToTarget(npc, llGetPos() + <9,9,5>, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);
 
  osNpcMoveToTarget(npc, llGetPos() + <9,9,5>, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);
Line 214: Line 218:
 
  osNpcStopMoveToTarget(key npc):void
 
  osNpcStopMoveToTarget(key npc):void
  
Stop a current move to a target.
+
Stoppt eine aktuelle Bewegung zu einem Ziel.
  
 
== Sitting and standing ==
 
== Sitting and standing ==
Line 220: Line 224:
 
=== [[osNpcSit]] ===
 
=== [[osNpcSit]] ===
  
OpenSimulator 0.7.3-rc1 onwards.
 
  
 
  osNpcSit(key npc, key target, int options):void
 
  osNpcSit(key npc, key target, int options):void
  
Sit an NPC on a prim target.
+
Setzt einen NPC auf ein Ziel.
  
 
=== [[osNpcStand]] ===
 
=== [[osNpcStand]] ===
  
OpenSimulator 0.7.3-rc1 onwards.
 
  
 
  osNpcStand(key npc):void
 
  osNpcStand(key npc):void
  
Make an npc stand up.
+
Einen NPC aufstehen lassen.
  
 
== Communication ==
 
== Communication ==
Line 241: Line 243:
 
  osNpcSay(key npc, int channel, string message):void
 
  osNpcSay(key npc, int channel, string message):void
  
Get the NPC to say the given message.  
+
Bringt einen NPC dazu, die angegebene Nachricht zu sagen.
  
If channel is specified then the chat is said on the given channel.  The channel parameter is only available in OpenSimulator 0.7.4 development code at this time.
+
Wenn ein Kanal angegeben ist, wird der Chat auf dem angegebenen Kanal gesprochen.
  
 
=== [[osNpcShout]] ===
 
=== [[osNpcShout]] ===
  
Only in OpenSimulator 0.7.4 development code at this time.
 
  
 
  osNpcShout(key npc, int channel, string message):void
 
  osNpcShout(key npc, int channel, string message):void
  
Get the NPC to shout the given message on the given channel.
+
Bringt einen NPC dazu, die angegebene Nachricht auf dem angegebenen Kanal zu rufen.
  
 
=== [[osNpcWhisper]] ===
 
=== [[osNpcWhisper]] ===
 
Only in OpenSimulator 0.7.4 development code at this time.
 
  
 
  osNpcWhisper(key npc, int channel, string message):void
 
  osNpcWhisper(key npc, int channel, string message):void
  
Get the NPC to whisper the given message on the given channel.
+
Bringt einen NPC dazu, die angegebene Nachricht auf dem angegebenen Kanal zu flüstern.  
  
 
== Animations ==
 
== Animations ==
Line 265: Line 264:
 
=== [[osNpcPlayAnimation]] ===
 
=== [[osNpcPlayAnimation]] ===
  
OpenSimulator 0.7.3-rc1 onwards.
 
  
 
  osNpcPlayAnimation(key npc, string animation):void
 
  osNpcPlayAnimation(key npc, string animation):void
  
Get an NPC to play an animation. The animation can either be a key or the name of an animation in the same inventory as the script.
+
Bringt einen NPC dazu, eine Animation abzuspielen. Die Animation kann entweder ein Schlüssel oder der Name einer Animation im selben Inventar wie das Skript sein.  
  
 
=== [[osNpcStopAnimation]] ===
 
=== [[osNpcStopAnimation]] ===
  
In OpenSimulator 0.7.3-rc1 there is a bug which makes this play the animation instead. This will be corrected for the final release but in the mean time please use osAvatarStopAnimation() instead.
 
  
 
  osNpcStopAnimation(key npc, string animation):void
 
  osNpcStopAnimation(key npc, string animation):void
  
Get an NPC to stop playing an animation. The animation can either be a key or the name of an animation in the same inventory as the script.
+
Bringt einen NPC dazu, das Abspielen einer Animation zu beenden. Die Animation kann entweder ein Schlüssel oder der Name einer Animation im selben Inventar wie das Skript sein.  
  
 
== Appearance ==
 
== Appearance ==
  
NPC appearance is manipulated by saving and loading appearance data to notecards from the same inventory as the invoking script.
+
Das Erscheinungsbild von NPCs wird durch Speichern und Laden von Erscheinungsbilddaten aus Notizkarten aus demselben Inventar wie das aufrufende Skript manipuliert.  
  
 
=== [[osOwnerSaveAppearance]] ===
 
=== [[osOwnerSaveAppearance]] ===
Line 287: Line 284:
 
  osOwnerSaveAppearance(string notecard):key
 
  osOwnerSaveAppearance(string notecard):key
  
Save the owner's current appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The owner must be present in the region when this function is invoked. The baked textures for the owner (necessary to recreate appearance on the NPC) are saved permanently.
+
Speichert das aktuelle Erscheinungsbild des Besitzers in einer Notizkarte im Inventar des Prims. Dazu gehören Körperteildaten, Kleidungsstücke und Anhänge. Wenn bereits eine Notizkarte mit demselben Namen vorhanden ist, wird sie ersetzt. Der Besitzer muss in der Region anwesend sein, wenn diese Funktion aufgerufen wird. Die gebackenen Texturen für den Besitzer (notwendig, um das Aussehen auf dem NPC nachzubilden) werden dauerhaft gespeichert.
  
 
=== [[osAgentSaveAppearance]] ===
 
=== [[osAgentSaveAppearance]] ===
Line 293: Line 290:
 
  osAgentSaveAppearance(key agentId, string notecard):key
 
  osAgentSaveAppearance(key agentId, string notecard):key
  
Save an arbitrary avatar's appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The avatar must be present in the region when this function is invoked. The baked textures for the avatar (necessary to recreate appearance on the NPC) are saved permanently.
+
Speichert das Aussehen eines beliebigen Avatars in einer Notizkarte im Inventar des Prims. Dazu gehören Körperteildaten, Kleidungsstücke und Anhänge. Wenn bereits eine Notizkarte mit demselben Namen vorhanden ist, wird sie ersetzt. Der Avatar muss in der Region vorhanden sein, wenn diese Funktion aufgerufen wird. Die gebackenen Texturen für den Avatar (erforderlich, um das Aussehen auf dem NPC nachzubilden) werden dauerhaft gespeichert.
  
 
=== [[osNpcSaveAppearance]] ===
 
=== [[osNpcSaveAppearance]] ===
Line 299: Line 296:
 
  osNpcSaveAppearance(key npc, string notecard):key
 
  osNpcSaveAppearance(key npc, string notecard):key
  
Save the NPC's current appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The avatar must be present in the region when this function is invoked. The baked textures for the avatar (necessary to recreate appearance) are saved permanently.
+
Speichert das aktuelle Aussehen eines NPCs in einer Notizkarte im Inventar des Prims. Dazu gehören Körperteildaten, Kleidungsstücke und Anhänge. Wenn bereits eine Notizkarte mit demselben Namen vorhanden ist, wird diese ersetzt. Der Avatar muss in der Region vorhanden sein, wenn diese Funktion aufgerufen wird. Die gebackenen Texturen für den Avatar (erforderlich, um das Erscheinungsbild anzuzeigen) werden dauerhaft gespeichert.
  
 
=== [[osNpcLoadAppearance]] ===
 
=== [[osNpcLoadAppearance]] ===
Line 305: Line 302:
 
  osNpcLoadAppearance(key npc, string notecard):void
 
  osNpcLoadAppearance(key npc, string notecard):void
  
Load appearance from a notecard. This notecard must contain appearance data created with one of the save appearance functions.
+
NPC Erscheinungsbild von einer Notecard laden. Diese Notizkarte muss Aussehensdaten enthalten, die mit einer der Funktionen zum Speichern des Aussehens erstellt wurden.
 
+
  
 
== Touch ==
 
== Touch ==
 
=== [[osNpcTouch]] ===
 
=== [[osNpcTouch]] ===
 
OpenSimulator 0.7.4 development code at this time.
 
  
 
  osNpcTouch(key npc, key objectKey, integer linkNum)
 
  osNpcTouch(key npc, key objectKey, integer linkNum)
  
Allows the NPC to touch objects.
+
Ermöglicht es einem NPC, Objekte zu berühren.
  
 
= Examples =
 
= Examples =
Line 323: Line 317:
 
*[[NPC Automator 2.0]]
 
*[[NPC Automator 2.0]]
  
This is a rough example script for most of the current NPC functionality. One of its major current deficiencies is that it doesn't track more than one created avatar at a time. Please feel free to improve it.
+
Dies ist ein grobes Beispielskript für die meisten aktuellen NPC-Funktionen. Einer der größten aktuellen Mängel ist, dass es nicht mehr als einen erstellten Avatar gleichzeitig verfolgt. Bitte fühlen Sie sich frei, es zu verbessern.
  
 
<source lang = "lsl">
 
<source lang = "lsl">
 
key npc;
 
key npc;
 
integer listenChannel = 10;
 
integer listenChannel = 10;
 +
// NPC Name:
 +
string firstname = "Jane";
 +
string lastname = "Doe";
 +
  
 +
 
default
 
default
 
{
 
{
     // NPC manipulator adapted by justincc 0.0.3 released 20121025
+
     // NPC-Manipulator angepasst von justincc 0.0.3 veröffentlicht 25.10.2012
 
     state_entry()
 
     state_entry()
 
     {
 
     {
 
         llListen(listenChannel,"",NULL_KEY,"");
 
         llListen(listenChannel,"",NULL_KEY,"");
 
         llSetText("Listening on " + listenChannel, <0, 255, 0>, 1);
 
         llSetText("Listening on " + listenChannel, <0, 255, 0>, 1);
         llOwnerSay("Say /" + (string)listenChannel + " help for commands");
+
         llOwnerSay("Sage /" + (string)listenChannel + " hilfe für Befehle.");
 
     }   
 
     }   
   
+
 
     listen(integer channel, string name, key id, string msg)
 
     listen(integer channel, string name, key id, string msg)
 
     {
 
     {
Line 348: Line 347:
 
             string msg2 = llList2String(commands, 2);
 
             string msg2 = llList2String(commands, 2);
 
             string msg3 = llList2String(commands, 3);
 
             string msg3 = llList2String(commands, 3);
       
+
 
             if (msg0 == "create")
 
             if (msg0 == "create")
 
             {
 
             {
Line 354: Line 353:
 
                 {
 
                 {
 
                     string notecardName = msg1;
 
                     string notecardName = msg1;
               
+
                     npc = osNpcCreate("Jane", "Doe", llGetPos() + <5, 5, 0>, notecardName);
+
                     npc = osNpcCreate(firstname, lastname, llGetPos() + <5, 5, 0>, notecardName);
               
+
 
                     llOwnerSay("Created npc from notecard " + notecardName);
 
                     llOwnerSay("Created npc from notecard " + notecardName);
 
                 }
 
                 }
 
                 else
 
                 else
 
                 {
 
                 {
                     llOwnerSay("Usage: create <notecard-name>");
+
                     llOwnerSay("Usage: create <Name-der-Notizkarte>");
 
                 }
 
                 }
 
             }   
 
             }   
Line 389: Line 388:
 
                 {                 
 
                 {                 
 
                     vector delta = <(integer)msg1, (integer)msg2, 0>;
 
                     vector delta = <(integer)msg1, (integer)msg2, 0>;
                   
+
 
                     if (msg3 != "")
 
                     if (msg3 != "")
 
                     {
 
                     {
 
                         delta.z = (integer)msg3;
 
                         delta.z = (integer)msg3;
 
                     }
 
                     }
                   
+
 
                     osNpcMoveTo(npc, osNpcGetPos(npc) + delta);                     
 
                     osNpcMoveTo(npc, osNpcGetPos(npc) + delta);                     
 
                 }                             
 
                 }                             
Line 407: Line 406:
 
                 {                 
 
                 {                 
 
                     vector pos = <(integer)msg1, (integer)msg2, 0>;
 
                     vector pos = <(integer)msg1, (integer)msg2, 0>;
                   
+
 
                     if (msg3 != "")
 
                     if (msg3 != "")
 
                     {
 
                     {
 
                         pos.z = (integer)msg3;
 
                         pos.z = (integer)msg3;
 
                     }
 
                     }
                   
+
 
                     osNpcMoveTo(npc, pos);                     
 
                     osNpcMoveTo(npc, pos);                     
 
                 }                             
 
                 }                             
Line 487: Line 486:
 
                 osNpcStand(npc);
 
                 osNpcStand(npc);
 
             }
 
             }
             else if (msg0 == "help")
+
             else if (msg0 == "hilfe")
 
             {
 
             {
                 llOwnerSay("Commands are:");
+
                 llOwnerSay("Die Befehle sind:");
                 llOwnerSay("create <notecard-name> - Create NPC from a stored notecard");
+
                 llOwnerSay("create <Name-der-Notizkarte> - Erstelle einen NPC aus einer gespeicherten Notizkarte.");
                 llOwnerSay("createm");       
+
                 llOwnerSay("createm - Aussehen des Besitzers speichern.");       
                 llOwnerSay("remove - Remove current NPC");     
+
                 llOwnerSay("remove - Aktuellen NPC entfernen.");     
                 llOwnerSay("clone <notecard-name> - Clone own appearance to a notecard");
+
                 llOwnerSay("clone <Name-der-Notizkarte> - Klonen Sie das eigene Erscheinungsbild in eine Notizkarte.");
                 llOwnerSay("load <notecard-name>  - Load appearance on notecard to current npc");
+
                 llOwnerSay("load <Name-der-Notizkarte>  - Lade das Erscheinungsbild der Notizkarte in den aktuellen NPC.");
                 llOwnerSay("save <notecard-name>  - Save appearance of current NPC to notecard");
+
                 llOwnerSay("save <Name-der-Notizkarte>  - Aussehen des aktuellen NPCs in eine Notizkarte speichern.");
                 llOwnerSay("animate");
+
                 llOwnerSay("animate - Avatar Animation abspielen.");
                 llOwnerSay("move");
+
                 llOwnerSay("move - Gehe zu Pos und Delta.");
                 llOwnerSay("moveto <x> <y> <z> - move to absolute position");
+
                 llOwnerSay("moveto <x> <y> <z> - zur absoluten Position bewegen.");
                 llOwnerSay("movetarget");
+
                 llOwnerSay("movetarget - Springe zum Ziel.");
                 llOwnerSay("movetargetnoland");
+
                 llOwnerSay("movetargetnoland - Fliege zur Position.");
                 llOwnerSay("movetargetwalk");
+
                 llOwnerSay("movetargetwalk - Gehe zum Ziel.");
                 llOwnerSay("rot");
+
                 llOwnerSay("rot - Wechseln Sie zu einer Rotation.");
                 llOwnerSay("say");
+
                 llOwnerSay("say - Sage.");
                 llOwnerSay("sit <target-uuid>");
+
                 llOwnerSay("sit <target-uuid> - Setze dich auf ein Objekt.");
                 llOwnerSay("stop");
+
                 llOwnerSay("stop - Stopp.");
                 llOwnerSay("stand");
+
                 llOwnerSay("stand - Stehen.");
 
             }
 
             }
 
             else
 
             else
 
             {
 
             {
                 llOwnerSay("I don't understand [" + msg + "]");
+
                 llOwnerSay("Ich verstehe folgendes nicht: [" + msg + "]");
 
             }
 
             }
 
         }   
 
         }   
Line 517: Line 516:
 
</source>
 
</source>
  
== Wandering and Puppeteer ==
+
== Wandering und Puppeteer ==
  
[http://was.fm Wizardry and Steamworks] provides free-to-use NPC extendable set of scripts, published under the GPLv3 license, that implements most of the NPC functions and allows you to conveniently create NPCs. There are several several scripts available at the time of writing:
+
[http://grimore.org Wizardry and Steamworks] (Bitte drücken sie auf SHOW INDEX) bietet einen kostenlosen, erweiterbaren NPC-Satz von Skripten, veröffentlicht unter der GPLv3-Lizenz, der die meisten NPC-Funktionen implementiert und es Ihnen ermöglicht, bequem NPCs zu erstellen. Zum Zeitpunkt des Schreibens sind mehrere Skripte verfügbar:  
  
* [http://was.fm/opensim:npc:wandering Wandering NPCs] is a script that just makes a non-interative NPC wander around in a given area.
+
* [http://grimore.org/opensim/npc/wandering Wandering NPCs] ist ein Skript, das einen nicht interaktiven NPC einfach in einem bestimmten Gebiet herumwandern lässt.
* [http://was.fm/opensim:npc:puppeteer NPC Puppeteer] is a system that will allow you to playwright NPCs without too much knowledge of either LSL or OSSL.
+
* [http://grimore.org/opensim/npc/puppeteer NPC Puppeteer] ist ein System, das es Ihnen erleichtert, NPCs ohne allzu viel Wissen über LSL oder OSSL zu erstellen.
  
 +
Die Besten Tools für den OpenSimulator - NPC maker, Recorder und Controller für den OpenSimulator auf den Outworldz Seiten [https://www.outworldz.com/Opensim/posts/NPC/Notes.htm NPC Recorder und Controller]
  
 
== OSW NPCs Controller==
 
== OSW NPCs Controller==
  
OpenSimWorld provides an NPC controller that supports interactive NPCs. The system allows you to give commands to
+
OpenSimWorld bietet einen NPC-Controller, der interaktive NPCs unterstützt. Das System ermöglicht es Ihnen, NPCs über den lokalen Chat Befehle zu erteilen und komplexe Verhaltensweisen durch einfach zu schreibende Notizkarten aufzubauen. Außerdem können Sie eine "Karte" Ihrer Region angeben, damit die NPCs gezielt gehen können.
NPCs through the local chat and to build complex behaviors through easy-to-write notecards. It also allows you to specify a "map"
+
of your region so that the NPCs can walk through it.  
+
  
 
[https://github.com/opensimworld/active-npcs More information]
 
[https://github.com/opensimworld/active-npcs More information]
  
= Questions/Comments =
+
= Fragen/Kommentare =
  
Please leave your questions and comments on [[Talk:OSSLNPC|this article's talk page]].
+
Bitte hinterlassen Sie Ihre Fragen und Kommentare hier: [[Talk:OSSLNPC|this article's talk page]].
  
 +
[[Category:OSSL]]
 
[[Category:OSSL Functions]]
 
[[Category:OSSL Functions]]
 
[[Category:Scripting]]
 
[[Category:Scripting]]
 
[[Category:German Translations]]
 
[[Category:German Translations]]

Latest revision as of 06:10, 8 March 2022


Contents

[edit] Einführung

Im OpenSimulator stehen eine Reihe von Funktionen zum Erstellen und Bearbeiten serverseitiger NPCs (Non Player Characters) zur Verfügung.

NPCs werden über ein Skript gesteuert, das sich in derselben Region befinden muss wie der NPC. Dies könnte in einem Anhang untergebracht sein, der mit dem Avatar verbunden ist.

Serverseitige NPCs können die Region, in der sie geboren wurden, nicht verlassen.

Das serverseitige NPC-Erscheinungsbild wird gespeichert und geladen, indem die Erscheinungsdatenstruktur mit einer Notecard serialisiert wird, die sich im selben Prim wie das Skript befindet. Die erforderlichen Texturen bleiben erhalten, wenn ein OAR gespeichert und geladen wird.

Das aktuelle Erscheinungsdatenformat (wie in Notecards, die durch das Anschein von Speichern erstellt wurden) ist das gleiche, das für das OpenSimulator-Kabelformat verwendet wird, und ist daher nicht für die direkte Bearbeitung gedacht. Mit größter Sorgfalt ist dies möglich. Weitere Informationen finden Sie unter Appearance Formats Es wird jedoch nicht empfohlen, es sei denn, Sie müssen es wirklich tun.

Weitere Einzelheiten zu OsIsNpc Funktionen finden sie hier: http://opensimulator.org/wiki/Category:OSSL_Functions

[edit] Aktivieren

Um diese Funktionen nutzen zu können, benötigen Sie in der Datei OpenSim.ini die folgende Konfiguration

  1. Enabled = true, eingestellt im Abschnitt [NPC].
  2. Aktivieren der Skript-Engine

in config-include/osslEnable.ini

  1. AllowOSFunctions = true
  2. Überprüfen Sie den Wert von osslNPC, um die Rechte der meisten NPC-Funktionen festzulegen.

Sie müssen möglicherweise auch die Rechte von osAgentSaveAppearance() prüfen.

Seit 0.9.2.0 ist die maximale Anzahl von NPCs pro Szene auf den Wert des MaxNumberNPCsPerScene Eintrags im Abschnitt [NPC] begrenzt.

Siehe Configuring Simulator Parameters#Getting information about parameters wenn Sie überprüfen müssen, ob diese Parameter richtig eingestellt wurden.

[edit] Anmerkungen

  • Wenn Sie Ihren Avatar vor dem Speichern für die Modelldarstellung verwenden, müssen Sie einige Sekunden warten, bevor Sie einen Befehl zum Speichern der Darstellung aufrufen. Dies liegt daran, dass das Speichern des Erscheinungsbilds derzeit für einen Timer ausgeführt wird, um mehrere Erscheinungsaktualisierungen vom Viewer aus zu verwalten.
  • Wenn Sie Ihren Avatar zum Erscheinungsbild des Modells verwenden, müssen Sie Anhänge auf dem NPC neu positionieren
  1. Positionieren Sie es auf sich selbst
  2. Trennen Sie sie zum Inventar
  3. Bringen Sie sie wieder an
  4. Speichern Sie das Erscheinungsbild

Dies liegt daran, dass das Speichern von Erscheinungsdaten nicht das Speichern aktueller Anlagenpositionen auslöst.

[edit] Sensing

llAgentSensor() kann verwendet werden, um einen Sensor einzurichten, der anstelle von oder von anderen Regionsentitäten NPCs erkennt.

Im OpenSimulator werden NPCs, sofern nicht anders angegeben, nur mit dem OpenSimulator-spezifischen NPC-Flag erkannt.

//Author: mewtwo0641
 
list keys = []; 
key npc;
string toucher;
key toucherkey;
vector toucherPos;
integer npc_on = FALSE;
 
default
{ 
    touch_start(integer x)
    {   
        toucherkey = llDetectedKey(0);
        toucherPos = llDetectedPos(0);
        vector npcPos = llGetPos() + <1,1,1>;
 
        if(npc_on == FALSE)
        {    
            npc = osNpcCreate("Fred", "Flintstone", npcPos, toucherkey);
            npc_on = TRUE;
            llSensor("", "", AGENT | NPC, 96.0, PI); //Will always return NPC key regardless of npc create option
            return;
        }   
 
        if(npc_on == TRUE)
        {   
            osNpcRemove(npc);
            llResetScript();
        }   
    }   
 
    sensor(integer num)
    {   
        keys = []; 
        integer i = 0;
 
        for(i; i < num; i++)
        {   
            keys += llDetectedKey(i); 
        }   
 
        llOwnerSay(llDumpList2String(keys, "\n"));
    }   
 
    no_sensor()
    {   
        keys = [];   
    }   
}

Sie können NPCs dazu bringen, erneut als AGENTs erkannt zu werden, indem Sie die unten stehende Option OS_NPC_SENSE_AS_AGENT in osNpcCreate() verwenden.

Die Begründung ist, dass die Erkennung von NPCs als AGENTs standardmäßig dazu führen kann, dass einige Skripts unbrauchbar werden (z. B. Radargeräte, die nichts über NPCs wissen). Umgekehrt verhalten sich andere Skripts jedoch möglicherweise nicht wie erwartet, wenn NPCs nicht als Agenten erkannt werden (z. B. öffnen sich automatisch geöffnete Türen für Avatare für NPCs nicht).

llGetDetectedType() setzt das NPC-Flag, wenn ein NPC erkannt wurde. Wenn der NPC mit der Option OS_NPC_SENSE_AS_AGENT erstellt wurde, wird auch das Flag AGENT gesetzt.

[edit] Datenformate

Weitere Informationen zum Format zum Speichern von Erscheinungsinformationen in Notecards finden Sie unter Appearance Formats.

[edit] Funktionen

[edit] Erstellen und entfernen

[edit] osNpcCreate

osNpcCreate(string Vorname, string Nachname, vector position, string cloneFrom):key

cloneFrom kann sein:

  • Name der Notecard, die ein serialisiertes Avatar-Erscheinungsbild enthält, oder
  • Asset-UUID der Notecard oder
  • UUID eines Avatars, der in derselben Region angemeldet ist. Beachten Sie jedoch, dass dieses Erscheinungsbild nicht dauerhaft bleibt, wenn nicht osNpcSaveAppearance() aufgerufen wird.

Wenn der NPC erfolgreich erstellt wurde, wird seine UUID zurückgegeben, die für alle nachfolgenden Funktionen erforderlich ist. Ein Beispiel ist bei osNpcCreate verfügbar.


[edit] osNpcCreate

osNpcCreate(string Vorname, string Nachname, vector position, string cloneFrom, integer optionen):key

cloneFrom kann sein:

  • Name der Notecard, die ein serialisiertes Avatar-Erscheinungsbild enthält, oder
  • Asset-UUID der Notecard oder
  • UUID eines Avatars, der in derselben Region angemeldet ist. Beachten Sie jedoch, dass dieses Erscheinungsbild nicht dauerhaft bleibt, wenn nicht osNpcSaveAppearance() aufgerufen wird.

integer Ganzzahl ist eine Menge von Flags, die 0 oder eine oder mehrere sein können

  • OS_NPC_NOT_OWNED - Erstellen Sie einen nicht besetzten NPC.
  • OS_NPC_SENSE_AS_AGENT - Erstellen Sie einen NPC, der als AGENT mit LSL-Sensoren erfasst wird
  • OS_NPC_OBJECT_GROUP - Erstellen Sie einen NPC mit der Gruppe des Objekts mit dem Skript, wenn der Eigentümer dieses Objekts Mitglied dieser Gruppe ist.

Wenn der NPC erfolgreich erstellt wurde, wird seine UUID zurückgegeben, die für alle nachfolgenden Funktionen erforderlich ist. Ein Beispiel ist bei osNpcCreate verfügbar.

[edit] osNpcRemove

osNpcRemove(key npc):void

Entfernt den angegebenen Avatar aus der Region. Beispiel bei osNpcRemove.

[edit] Get and Set

[edit] osIsNpc

osIsNpc(key npc):integer

Gibt TRUE zurück, wenn der angegebene Schlüssel ein NPC ist, andernfalls false.

[edit] osNpcGetRot

Ruft die Drehung des Avatars ab. Nur die Drehung um die Z-Ebene bei der Euler-Drehung (horizontale Drehung) hat eine Bedeutung.

osNpcGetRot(key npc):rotation

[edit] osNpcSetRot

osNpcSetRot(key npc, rotation rot):void

Stellt die Drehung des Avatars ein. Nur das Einstellen der Rotation in der Z-Ebene in Euler-Rotation hat einen sinnvollen Effekt (den Avatar so drehen, dass er in die eine oder andere Richtung zeigt). Das Festlegen von X- oder Y-Euler-Werten führt dazu, dass sich der Avatar auf undefinierte Weise dreht.

[edit] osNpcGetPos

osNpcGetPos(key npc):vector

Gibt die aktuelle Position des NPC zurück.

[edit] osNpcGetOwner

osNpcGetOwner(key npc):key

Gibt den Besitzer des angegebenen NPC zurück (d. h. den Besitzer des Skripts, das ihn erstellt hat). Wenn der NPC nicht im Besitz ist oder der Eingabeschlüssel keinem NPC gehört, wird NULL_KEY zurückgegeben.

[edit] Movement

[edit] osNpcMoveTo

osNpcMoveTo(key npc, vector position):void

Eine ältere Funktion, die ein osNpcMoveToTarget() ausführt, indem sie auf dem Ziel fliegt und landet.

[edit] osNpcMoveToTarget

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


  • OS_NPC_FLY - Fly the avatar to the given position. The avatar will not land unless the OS_NPC_LAND_AT_TARGET option is also given.
  • OS_NPC_NO_FLY - Do not fly to the target. The NPC will attempt to walk to the location. If it's up in the air then the avatar will keep bouncing hopeless until another move target is given or the move is stopped
  • OS_NPC_LAND_AT_TARGET - If given and the avatar is flying, then it will land when it reaches the target. If OS_NPC_NO_FLY is given then this option has no effect.
  • OS_NPC_RUNNING - if given, NPC avatar moves at running/fast flying speed, otherwise moves at walking/slow flying speed.

OS_NPC_FLY and OS_NPC_NO_FLY are options that cannot be combined - the avatar will end up doing one or the other. If you want the avatar to fly and land at the target, then OS_NPC_LAND_AT_TARGET must be combined with OS_NPC_FLY. For instance,

Bewegt den Avatar im Laufe der Zeit zu einem bestimmten Ziel. Wie der Avatar dorthin gelangt, hängt von den folgenden Optionen ab.

  • OS_NPC_FLY - Fliege den Avatar zur angegebenen Position. Der Avatar wird nicht landen, es sei denn, die Option OS_NPC_LAND_AT_TARGET ist ebenfalls angegeben.
  • OS_NPC_NO_FLY - Fliege nicht zum Ziel. Der NPC wird versuchen, zu dem Ort zu gehen. Wenn es in der Luft ist, hüpft der Avatar hoffnungslos weiter, bis ein anderes Bewegungsziel gegeben oder die Bewegung gestoppt wird
  • OS_NPC_LAND_AT_TARGET - Wenn angegeben und der Avatar fliegt, landet er, wenn er das Ziel erreicht. Wenn OS_NPC_NO_FLY angegeben ist, hat diese Option keine Auswirkung.
  • OS_NPC_RUNNING - falls angegeben, bewegt sich der NPC-Avatar mit Lauf-/Schnellfluggeschwindigkeit, ansonsten mit walking/slow flying speed.

OS_NPC_FLY und OS_NPC_NO_FLY sind Optionen, die nicht kombiniert werden können – der Avatar wird am Ende entweder das eine oder das andere tun. Wenn Sie möchten, dass der Avatar auf dem Ziel fliegt und landet, muss OS_NPC_LAND_AT_TARGET mit OS_NPC_FLY kombiniert werden. Zum Beispiel:

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

[edit] osNpcStopMoveToTarget

osNpcStopMoveToTarget(key npc):void

Stoppt eine aktuelle Bewegung zu einem Ziel.

[edit] Sitting and standing

[edit] osNpcSit

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

Setzt einen NPC auf ein Ziel.

[edit] osNpcStand

osNpcStand(key npc):void

Einen NPC aufstehen lassen.

[edit] Communication

[edit] osNpcSay

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

Bringt einen NPC dazu, die angegebene Nachricht zu sagen.

Wenn ein Kanal angegeben ist, wird der Chat auf dem angegebenen Kanal gesprochen.

[edit] osNpcShout

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

Bringt einen NPC dazu, die angegebene Nachricht auf dem angegebenen Kanal zu rufen.

[edit] osNpcWhisper

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

Bringt einen NPC dazu, die angegebene Nachricht auf dem angegebenen Kanal zu flüstern.

[edit] Animations

[edit] osNpcPlayAnimation

osNpcPlayAnimation(key npc, string animation):void

Bringt einen NPC dazu, eine Animation abzuspielen. Die Animation kann entweder ein Schlüssel oder der Name einer Animation im selben Inventar wie das Skript sein.

[edit] osNpcStopAnimation

osNpcStopAnimation(key npc, string animation):void

Bringt einen NPC dazu, das Abspielen einer Animation zu beenden. Die Animation kann entweder ein Schlüssel oder der Name einer Animation im selben Inventar wie das Skript sein.

[edit] Appearance

Das Erscheinungsbild von NPCs wird durch Speichern und Laden von Erscheinungsbilddaten aus Notizkarten aus demselben Inventar wie das aufrufende Skript manipuliert.

[edit] osOwnerSaveAppearance

osOwnerSaveAppearance(string notecard):key

Speichert das aktuelle Erscheinungsbild des Besitzers in einer Notizkarte im Inventar des Prims. Dazu gehören Körperteildaten, Kleidungsstücke und Anhänge. Wenn bereits eine Notizkarte mit demselben Namen vorhanden ist, wird sie ersetzt. Der Besitzer muss in der Region anwesend sein, wenn diese Funktion aufgerufen wird. Die gebackenen Texturen für den Besitzer (notwendig, um das Aussehen auf dem NPC nachzubilden) werden dauerhaft gespeichert.

[edit] osAgentSaveAppearance

osAgentSaveAppearance(key agentId, string notecard):key

Speichert das Aussehen eines beliebigen Avatars in einer Notizkarte im Inventar des Prims. Dazu gehören Körperteildaten, Kleidungsstücke und Anhänge. Wenn bereits eine Notizkarte mit demselben Namen vorhanden ist, wird sie ersetzt. Der Avatar muss in der Region vorhanden sein, wenn diese Funktion aufgerufen wird. Die gebackenen Texturen für den Avatar (erforderlich, um das Aussehen auf dem NPC nachzubilden) werden dauerhaft gespeichert.

[edit] osNpcSaveAppearance

osNpcSaveAppearance(key npc, string notecard):key

Speichert das aktuelle Aussehen eines NPCs in einer Notizkarte im Inventar des Prims. Dazu gehören Körperteildaten, Kleidungsstücke und Anhänge. Wenn bereits eine Notizkarte mit demselben Namen vorhanden ist, wird diese ersetzt. Der Avatar muss in der Region vorhanden sein, wenn diese Funktion aufgerufen wird. Die gebackenen Texturen für den Avatar (erforderlich, um das Erscheinungsbild anzuzeigen) werden dauerhaft gespeichert.

[edit] osNpcLoadAppearance

osNpcLoadAppearance(key npc, string notecard):void

NPC Erscheinungsbild von einer Notecard laden. Diese Notizkarte muss Aussehensdaten enthalten, die mit einer der Funktionen zum Speichern des Aussehens erstellt wurden.

[edit] Touch

[edit] osNpcTouch

osNpcTouch(key npc, key objectKey, integer linkNum)

Ermöglicht es einem NPC, Objekte zu berühren.

[edit] Examples

[edit] NPC Automator

Dies ist ein grobes Beispielskript für die meisten aktuellen NPC-Funktionen. Einer der größten aktuellen Mängel ist, dass es nicht mehr als einen erstellten Avatar gleichzeitig verfolgt. Bitte fühlen Sie sich frei, es zu verbessern.

key npc;
integer listenChannel = 10;
// NPC Name:
string firstname = "Jane";
string lastname = "Doe";
 
 
 
default
{
    // NPC-Manipulator angepasst von justincc 0.0.3 veröffentlicht 25.10.2012
    state_entry()
    {
        llListen(listenChannel,"",NULL_KEY,"");
        llSetText("Listening on " + listenChannel, <0, 255, 0>, 1);
        llOwnerSay("Sage /" + (string)listenChannel + " hilfe für Befehle.");
    }  
 
    listen(integer channel, string name, key id, string msg)
    {
        if (msg != "")
        {
            list commands = llParseString2List(msg, [ " " ], []);
            string msg0 = llList2String(commands, 0);
            string msg1 = llList2String(commands, 1);            
            string msg2 = llList2String(commands, 2);
            string msg3 = llList2String(commands, 3);
 
            if (msg0 == "create")
            {
                if (msg1 != "")
                {
                    string notecardName = msg1;
 
                    npc = osNpcCreate(firstname, lastname, llGetPos() + <5, 5, 0>, notecardName);
 
                    llOwnerSay("Created npc from notecard " + notecardName);
                }
                else
                {
                    llOwnerSay("Usage: create <Name-der-Notizkarte>");
                }
            }  
            else if (msg0 =="createm" && msg1 != "")
            {
                osOwnerSaveAppearance("appearance");
                vector pos = llGetPos();
                integer i;
                for (i = 0; i < (integer)msg1; i++)
                {
                    osNpcCreate("John", "Doe", pos + <8, 0, 0>, "appearance");
                    llSleep(1);
                }
            }
            else if (msg0 == "remove" && npc != NULL_KEY)
            {
                osNpcSay(npc, "You will pay for this with your liiiiiivvveeessss!!!.....");
                osNpcRemove(npc);
            }   
            else if (msg0 == "say" && npc != NULL_KEY)
            {
                osNpcSay(npc, "I am your worst Nightmare!!!!");
            }   
            else if (msg0 == "move")
            {
                if (msg1 != "" && msg2 != "" && npc != NULL_KEY)
                {                
                    vector delta = <(integer)msg1, (integer)msg2, 0>;
 
                    if (msg3 != "")
                    {
                        delta.z = (integer)msg3;
                    }
 
                    osNpcMoveTo(npc, osNpcGetPos(npc) + delta);                    
                }                            
                else
                {
                    llOwnerSay("Usage: move <x> <y> [<z>]");
                }
            }   
            else if (msg0 == "moveto")
            {
                if (msg1 != "" && msg2 != "" && npc != NULL_KEY)
                {                
                    vector pos = <(integer)msg1, (integer)msg2, 0>;
 
                    if (msg3 != "")
                    {
                        pos.z = (integer)msg3;
                    }
 
                    osNpcMoveTo(npc, pos);                    
                }                            
                else
                {
                    llOwnerSay("Usage: move <x> <y> [<z>]");
                }
            }            
            else if (msg0 == "movetarget" && npc != NULL_KEY)
            {
                osNpcMoveToTarget(npc, llGetPos() + <9,9,5>, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);
            }
            else if (msg0 == "movetargetnoland" && npc != NULL_KEY)
            {
                osNpcMoveToTarget(npc, llGetPos() + <9,9,5>, OS_NPC_FLY);
            }            
            else if (msg0 == "movetargetwalk" && npc != NULL_KEY)
            {
                osNpcMoveToTarget(npc, llGetPos() + <9,9,0>, OS_NPC_NO_FLY);                
            }
            else if (msg0 == "rot" && npc != NULL_KEY)
            {
                vector xyz_angles = <0,0,90>; // This is to define a 1 degree change
                vector angles_in_radians = xyz_angles * DEG_TO_RAD; // Change to Radians
                rotation rot_xyzq = llEuler2Rot(angles_in_radians); // Change to a Rotation                
                rotation rot = osNpcGetRot(npc);
                osNpcSetRot(npc, rot * rot_xyzq);
            }
            else if (msg0 == "rotabs" && msg1 != "")
            {
                vector xyz_angles = <0, 0, (integer)msg1>;
                vector angles_in_radians = xyz_angles * DEG_TO_RAD; // Change to Radians
                rotation rot_xyzq = llEuler2Rot(angles_in_radians); // Change to a Rotation                
                osNpcSetRot(npc, rot_xyzq);                
            }
            else if (msg0 == "animate" && npc != NULL_KEY)
            {
                osAvatarPlayAnimation(npc, "stabbed+die_2");
                llSleep(3);
                osAvatarStopAnimation(npc, "stabbed+die_2");
            }   
            else if (msg0 == "save" && msg1 != "" && npc != NULL_KEY)
            {
                osNpcSaveAppearance(npc, msg1);
                llOwnerSay("Saved appearance " + msg1 + " to " + npc);                
            }
            else if (msg0 == "load" && msg1 != "" && npc != NULL_KEY)
            {
                osNpcLoadAppearance(npc, msg1);
                llOwnerSay("Loaded appearance " + msg1 + " to " + npc);
            }
            else if (msg0 == "clone")
            {
                if (msg1 != "")
                {
                    osOwnerSaveAppearance(msg1);
                    llOwnerSay("Cloned your appearance to " + msg1);
                }
                else
                {
                    llOwnerSay("Usage: clone <notecard-name-to-save>");
                }
            }
            else if (msg0 == "stop" && npc != NULL_KEY)
            {
                osNpcStopMoveToTarget(npc);
            }
            else if (msg0 == "sit" && msg1 != "" && npc != NULL_KEY)
            {
                osNpcSit(npc, msg1, OS_NPC_SIT_NOW);
            }
            else if (msg0 == "stand" && npc != NULL_KEY)
            {
                osNpcStand(npc);
            }
            else if (msg0 == "hilfe")
            {
                llOwnerSay("Die Befehle sind:");
                llOwnerSay("create <Name-der-Notizkarte> - Erstelle einen NPC aus einer gespeicherten Notizkarte.");
                llOwnerSay("createm - Aussehen des Besitzers speichern.");       
                llOwnerSay("remove - Aktuellen NPC entfernen.");     
                llOwnerSay("clone <Name-der-Notizkarte> - Klonen Sie das eigene Erscheinungsbild in eine Notizkarte.");
                llOwnerSay("load <Name-der-Notizkarte>  - Lade das Erscheinungsbild der Notizkarte in den aktuellen NPC.");
                llOwnerSay("save <Name-der-Notizkarte>  - Aussehen des aktuellen NPCs in eine Notizkarte speichern.");
                llOwnerSay("animate - Avatar Animation abspielen.");
                llOwnerSay("move - Gehe zu Pos und Delta.");
                llOwnerSay("moveto <x> <y> <z> - zur absoluten Position bewegen.");
                llOwnerSay("movetarget - Springe zum Ziel.");
                llOwnerSay("movetargetnoland - Fliege zur Position.");
                llOwnerSay("movetargetwalk - Gehe zum Ziel.");
                llOwnerSay("rot - Wechseln Sie zu einer Rotation.");
                llOwnerSay("say - Sage.");
                llOwnerSay("sit <target-uuid> - Setze dich auf ein Objekt.");
                llOwnerSay("stop - Stopp.");
                llOwnerSay("stand - Stehen.");
            }
            else
            {
                llOwnerSay("Ich verstehe folgendes nicht: [" + msg + "]");
            }
        }   
    }   
}

[edit] Wandering und Puppeteer

Wizardry and Steamworks (Bitte drücken sie auf SHOW INDEX) bietet einen kostenlosen, erweiterbaren NPC-Satz von Skripten, veröffentlicht unter der GPLv3-Lizenz, der die meisten NPC-Funktionen implementiert und es Ihnen ermöglicht, bequem NPCs zu erstellen. Zum Zeitpunkt des Schreibens sind mehrere Skripte verfügbar:

  • Wandering NPCs ist ein Skript, das einen nicht interaktiven NPC einfach in einem bestimmten Gebiet herumwandern lässt.
  • NPC Puppeteer ist ein System, das es Ihnen erleichtert, NPCs ohne allzu viel Wissen über LSL oder OSSL zu erstellen.

Die Besten Tools für den OpenSimulator - NPC maker, Recorder und Controller für den OpenSimulator auf den Outworldz Seiten NPC Recorder und Controller

[edit] OSW NPCs Controller

OpenSimWorld bietet einen NPC-Controller, der interaktive NPCs unterstützt. Das System ermöglicht es Ihnen, NPCs über den lokalen Chat Befehle zu erteilen und komplexe Verhaltensweisen durch einfach zu schreibende Notizkarten aufzubauen. Außerdem können Sie eine "Karte" Ihrer Region angeben, damit die NPCs gezielt gehen können.

More information

[edit] Fragen/Kommentare

Bitte hinterlassen Sie Ihre Fragen und Kommentare hier: this article's talk page.

Personal tools
General
About This Wiki