This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

OSSL BEFEHLE zu NPC GENERIERUNG und MANAGEMENT
#1
OSSL BEFEHLE zu NPC GENERIERUNG und MANAGEMENT

Dieser Artikel ist Teil einer Serie von OSSL Befehlen zur NPC Nutzung in Openim.
Ich habe die Befehle Thematisch gegliedert: 

Hier die Befehle zur NPC Generierung und Management von NPCs

osAgentSaveAppearance, osNpcSaveAppearance, osNpcLoadAppearance, 
osNpcCreate, osNpcSetProfileImage, osNpcSetProfileAbout, 
osIsNpc, osGetNPCList, osNpcRemove




Erstellung von NPC Notecards von einem AVATAR.

key osAgentSaveAppearance(key agentId, string notecard)
key osAgentSaveAppearance(key agentId, string notecard, integer includeHuds)
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.
The first variant will include HUDs, the second variant allows control that. incluceHuds 1 (TRUE) will include 0(FALSE) will not
Threat Level VeryHigh
Permissions ESTATE_MANAGER,ESTATE_OWNER
Extra Delay 0 seconds

Die Funktion erstellt von einem Avatar (repräsentiert durch seine UUID im Feld agentid) eine Notecard und speichert diese in das Prim das dieses Script enthält. 

Der erste Befehl speichert keine HUDS mit ab, der Zweite hingegen schon.

key result = osAgentSaveAppearance(toucher, notecardname);

Das Ergebnis „result“ ist ein NullKey wenn die Erstellung der Notecard schief ging.
Was das Ergebnis im Erfolgsfall bedeutet ist nicht dokumentiert.



Abspeichern der aktuellen NPC Erscheinung in einer Notecard im Inventar des Prims das das Script enthält.


key osNpcSaveAppearance(key npc, string notecard)
key osNpcSaveAppearance(key npc, string notecard, integer includeHuds)
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.
first variant will include huds on the save appearence. Second variant alloes control of that. incluceHuds 1 (TRUE) will include 0(FALSE) will not
Threat Level High
Permissions ${OSSL|osslNPC}
Extra Delay 0 seconds

Parameter Beschreibung: Das Ergebnis der Funktion ist eine Notecard die den NPC beschreibt.
Die Aufruf Parameter sind:
- UUID des NPCs der in die Notecard geschrieben werden soll.
- Name der Notecard die erstellt werden soll

Die Funktion soll nicht verwechselt werden mit: osAgentSaveAppearance, die eine NPC Notecard von einem Avatar erstellt.

Ein Sinn dieser Funktion erschließt sich mir absolut nicht, da man im Normalfall ja die gleiche Notecard schon hat um den NPC zu rezzen. Folglich kann sie nur nutzbar sein um eine Notecard eines unbekannten fremden NPCs zu erstellen.
Es macht also als Gridbesitzer Sinn diese Funktion zu sperren damit NPCs nicht geklaut werden können.



Umziehen eines NPCs.

Der Npc muss bereits gerezzt sein. Mit diesem Befehl wird eine andere Notecard aus dem Inventar geladen um den NPC zu verändern.

osNpcLoadAppearance(key npc, string notecard)
Load appearance from a notecard. This notecard must contain appearance data created with one of the save appearance functions.
Threat Level High
Permissions ${OSSL|osslNPC}
Extra Delay 0 seconds

Parameter:
key npc : Key des bereits gerezzten NPC der umgezogen werden soll.
string notecard: Name einer anderen vorhandenen NPC Notecard die geladen werden soll

Anwendungs Beispiele:
- Umziehen eines Tänzer NPCs für einen neuen Tanz,
- Austausch der Tänzerin auf einen Poledance,
- Hinzufügen eines Besens zum Hof Fegen (da NPCs keine vom Poser hinzugefügten Addons annehmen können)



Erstellen (Rezzen) eines NPCs.

key osNpcCreate(string firstname, string lastname, vector position, string cloneFrom)
key osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, integer options)
Creates an NPC named firstname lastname at position from avatar appearance resource cloneFrom
Threat Level High
Permissions ${OSSL|osslNPC}
Extra Delay 0 seconds

Es gibt 2 Befehle die sich an dem Zusatzparameter Options unterscheiden.
Als minimale Parameter werden der gewünschte Vorname und Name  des NPCs angegeben,
die absolute Position wo der gerezzt werden soll, sowie der Name der Notecard („CloneForm“) die die XML Beschreibung des NPCs enthält.

Als Ergebnis wird der Key (UUID) des neu erstellten NPCs zurückgeliefert. Dieser wird benötigt um den NPC zu steuern und zu löschen,

Optionale Parameter sind möglich:

Wenn verwednet beeinflussen sie das Verhalten des NPCs.

Standardaufruf ohne Parameter:

npc = osNpcCreate("ImYour", "Clone", npcPos, "appearance");


- Aufruf mit Parameter „OS_NPC_SENSE_AS_AGENT“ bewirkt das der NPC als „Agent“ gerezzt weden soll und nicht als NPC.
Vermutlich ist Avatar ähnlich gemeint, aber es gibt keine Hinweise was das zur Folge hat.

(It Needs the setting AllowSenseAsAvatar on true in section [NPC] of your OpenSim.ini)

npc = osNpcCreate("ImYour", "Clone", npcPos, "appearance", OS_NPC_SENSE_AS_AGENT);

WICHTIG:
- Aufruf mit Paramater „OS_NPC_OBJECT_GROUP“ überträgt die Gruppenmitgliedschaft des rezzPrims auf den NPC.
Damit ermöglicht man NPCs auf gesperrten Sims zu rezzen die nur der genannten Gruppe zugänglich sind.
Ohne die Gruppe gelten für den NPC die Regeln unbekannter User auf der Sim. Das führt bei gesperrter Sim dazu das die NPCs in die SimGrenze herausgekickt werden. Kritisch ist dieses Verhalten wenn der Poser feststellt das sich kein NPC auf ihn gesetzt hat und fleissig neue NPCs generiert bis die Sim unbrauchbar wird. Diese NPCs werden dann im Pulk an die Simgrenze verfrachtet.

Abhilfe: Region herunterfahren und mit abgeschaltenen Scripten wieder starten. Dann Land Zugangsrechte freigeben, oder NPC Rezzer ins Inventar nehmen.

Da keinerlei negative Nebenwirkungen bisher bekannt sind, sollen NPCS immer mit der Option OS_NPC_OBJECT_GROUP gerezzt werden.

(It Needs the setting NoNPCGroup on false in section [NPC] of your OpenSim.ini)

npc = osNpcCreate("ImYour", "Clone", npcPos, "appearance", OS_NPC_OBJECT_GROUP);


- Aufruf mit Parameter „OS_NPC_CREATOR_OWNED“ bewirkt das der NPC dem Besitzer des rezz Prims gehört, und nur auf Befehle dessen Befehle hört.

OS_NPC_CREATOR_OWNED will create an 'owned' NPC that will only respond to osNpc* commands issued from scripts that have the same owner as the one that created the NPC.

Damit wird außerdem die Abfrages des NPC Besitzers ermöglicht: key osNpcGetOwner(key npc)

npc = osNpcCreate("ImYour", "Clone", npcPos, "appearance", OS_NPC_CREATOR_OWNED);


- Aufruf mit Parameter „OS_NPC_NOT_OWNED“ bewirkt das der NPC „unversklavt“ ist, und jeder dem NPC Befehle erteilen darf.

OS_NPC_NOT_OWNED will create an 'unowned' NPC that will respond to any script that has OSSL permissions to call osNpc* commands.

npc = osNpcCreate("ImYour", "Clone", npcPos, "appearance", OS_NPC_NOT_OWNED);



Profilbild eines NPCs ins Profil laden.

osNpcSetProfileImage(key npc, string image)
Set image in created NPC's profile.
One can use UUID of the texture or name of texture included in prim's inventory.
Threat Level Low
Permissions ${OSSL|osslNPC}
Extra Delay No function delay specified

Damit kann man ein Bild das sich im rezzprim des NPCs befindet als Profilbild des NPCs laden.

Beispiel:
    key npctorez = osNpcCreate(npc_name, "" , npcPos, npcnotecard, 8 | OS_NPC_NOT_OWNED | OS_NPC_SENSE_AS_AGENT | OS_NPC_OBJECT_GROUP );
    osNpcSetProfileImage(npctorez, llGetInventoryName(INVENTORY_TEXTURE,0)); 

Das erste Bild im Priminhalt wird als Profilbild für den NPC eingetragen.



Profileintrag im "Info Feld" englisch „About“ eines NPCs ins Profil laden.

osNpcSetProfileAbout(key npc, string about)

Set about in created NPC's profile.
Threat Level Low
Permissions ${OSSL|osslNPC}
Extra Delay 0 seconds

Damit läst sich im Profil des NPCs das "Info" Feld setzten. (About Feld bei englischer Oberfläche)

Beispiel:
    key npctorez = osNpcCreate(npc_name, "" , npcPos, npcnotecard, 8 | OS_NPC_NOT_OWNED | OS_NPC_SENSE_AS_AGENT | OS_NPC_OBJECT_GROUP );
    osNpcSetProfileAbout(npctorez, "Ich mag Männer die mir den Rücken eincremen");



Abfrage ob der „Ava“ unter der UUID ein NPC ist- oder nicht.

integer osIsNpc(key npc)
Returns NPC status on the provided key
Returns TRUE (1) / FALSE (0) if key provided is an NPC
Returns FALSE (0) if the key provided doesn't exist in the scene.
Threat Level This function does not do a threat level check
Permissions Use of this function is always allowed by default
Extra Delay 0 seconds

Sinnvolle Anwendung: Wenn auf der Sim Scripte in Pause geschickt werden wenn sich kein AVA auf der Sim befindet, 
frägt man typischerweise nach der AVA Liste des Sim und testet ob die 0 Länge hat.
Sind auf der Sim aber NPC gerezzt würden diese Pause nie eintreten. Daher muss die Ava Liste auf NPCs abgesucht werden.

Man könnte das gleiche aber auch erreichen wenn man AVA Liste und die nachfolgende NPC Liste auf Gleichheit abcheckt.



Liste alles NPCs der Sim erhalten

list osGetNPCList()
Returns a strided list of the UUID, position, and name of each NPC in the region. Only available after 0.9 Commit # e53f43, July 26,2017
This function is similar to OsGetAvatarList.
Threat Level None
Permissions ${OSSL|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
Extra Delay 0 seconds

Als Ergebnis wird einen Liste aller NPCs auf der Sim zurück geliefert.

Sinnvolle Anwendung: Testen ob sich noch NPCs auf der Sim befinden. Zum Beispiel um einen NPC Killer zu realisieren.
list npcs = osGetNPCList();



Besitzer eines NPCs ermitteln

Geht natürlich nur bei NPCs die mit „OS_NPC_CREATOR_OWNED“ erstellt wurden.

key osNpcGetOwner(key npc)
Gets the NPC's owner's UUID
Threat Level None
Permissions ${OSSL|osslNPC}
Extra Delay 0 seconds

Als Ergebnis wird der Key (UUID) des Besitzers zurück geliefert.



NPC löschen

osNpcRemove(key npc)
Removes the NPC specified by key npc.
Threat Level High
Permissions ${OSSL
Extra Delay 0 seconds

Schickt den NPC mit der angegeben UUID in die ewigen Jagdgründe.




Weitere Befehle sind in anderen Artikeln behandelt um die Übersichtlichkeit zu wahren.
Die Original Infos in Englisch findet ihr hier:

http://opensimulator.org/wiki/Scripting_Documentation
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste