Erstellen eines NPC, der Regionsneustarts überlebt

mmetzmac
mmetzmac
 Member edited October 2014 in Create & Objects
Anbei die Beschreibung, wie man einen NPC erstellt, der auch den Neustart einer Region überlebt. Diese Anleitung ist freundlicherweise von einer Studentin der Uni Augsburg erstellt worden, und wurde von mir nur noch um die Servereinstellungen sowie den LSL Scripts erweitert.

Viel Spaß und Gruß
Markus

Comments

  • Akira Sonoda
    Akira Sonoda
     Member edited 9:49PM
    Das Dokument ist nicht schlecht, aber die Erklärung auf der ersten Seite ist verwirrend.
    Damit das funktioniert, muss der ThreadLevel auf VeryHigh gestellt warden. Grund hierfür ist, dass im obrigen Beispiel die dringend benötigten Funktionen osGetNoteCard, osGetNoteCardLine, etc. in der Sektion ‚VeryHigh‘ angesiedelt sind. Mann kann die Benötigten Funktionen natürlich auch in den Level High anlegen.

    ich bin mir da nicht sicher von welchem TreatLevel gesprochen wird. Der generelle Eintrag für die OS Functions heisst OSFunctionThreatLevel. Diesen auf "VeryHigh" zu setzen wäre nicht so schlau denn da wird gleichzeitig all das andere das nicht explizit angegeben ist auch noch erlaubt. Also OSFunctionThreatLevel=VeryLow
    und dann mit Allow_osXXX die entsprechenden Funktionen freigeben. Allow_oxXXXX heisst ja nix anderes als dass bei den entsprechenden Funktionen der ThreatLevel-Check übersteuert wird. Deshalb fahre ich sehr gut mit folgenden Einstellungen ( Aus der ini von Close Encounter ):
    [XEngine]
    AllowedCompilers="lsl"
    AllowLightShareFunctions=true
    AllowMODFunctions=false
    AllowOSFunctions=true
    Allow_osGetNotecard=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osGetNotecardLine=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osGetNumberOfNotecardLines=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osGetSimulatorVersion=PARCEL_OWNER
    Allow_osTeleportAgent=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osGetAgents=true
    Allow_osGetAvatarList=true
    Allow_osIsNpc=true
    Allow_osNpcGetOwner=true
    Allow_osMessageObject=true
    Allow_osNpcStopMoveToTarget=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osKey2Name=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osOwnerSaveAppearance=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osGetLinkPrimitiveParams=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osGetPrimitiveParams=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osMakeNotecard=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcCreate=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcGetPos=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcGetRot=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcLoadAppearance=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcMoveTo=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcMoveToTarget=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcPlayAnimation=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcRemove=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcSaveAppearance=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcSay=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcSetRot=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcSit=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcStand=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcStopAnimation=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osNpcTouch=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osSetPrimitiveParams=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osAvatarPlayAnimation=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osAvatarStopAnimation=ESTATE_OWNER, ESTATE_MANAGER
    Allow_osAgentSaveAppearance=ESTATE_OWNER, ESTATE_MANAGER
    AppDomainLoading=false
    AsyncLLCommandLoopms=500
    CompileWithDebugInformation=true
    DefaultCompileLanguage="lsl"
    DeleteScriptsOnStartup=false
    DisableUndergroundMovement=true
    Enabled=true
    EventLimit=30
    IdleTimeout=60
    KillTimedOutScripts=true
    MaintenanceInterval=10
    MaxScriptEventQueue=350
    MaxThreads=300
    MinThreads=2
    MinTimerInterval=0.2
    NotecardLineReadCharsMax=255
    OSFunctionThreatLevel=VeryLow
    Priority="Lowest"
    SaveInterval=120
    ScriptDelayFactor=1.0
    ScriptDistanceLimitFactor=1.0
    ScriptEnginesPath="ScriptEngines"
    ScriptStopStrategy=co-op
    SensorMaxRange=96.0
    SensorMaxResults=16
    ThreadStackSize=262144
    WaitForEventCompletionOnScriptStop=1000
    WriteScriptSourceToDebugFile=false
    

    Mein Puls steigt immer um recht viele Schläge wenn in einer Anleitung steht dass man den OSFunctionThreatLevel auf "VeryHigh" stellen MUSS! Nein muss man nicht!

    LG Akira
  • Gubbly
    Gubbly
     Member edited 9:49PM
    Hmmm...

    Grad mal getestet, da scheinst du ja recht zu haben.
    Nur anscheinend hatte es hier nicht so geklappt.

    Hab bei mir mal "OSFunctionThreatLevel = VeryLow" gesetzt und npcs funktionieren.
    Gut zu wissen. Sollte in dieser fall allerding nicht so wild sein weil ja jede funktion mit rechten ausgestattet wird.
  • Akira Sonoda
    Akira Sonoda
     Member edited 9:49PM
    Gubbly wrote:
    Hmmm...
    Hab bei mir mal "OSFunctionThreatLevel = VeryLow" gesetzt und npcs funktionieren.
    Gut zu wissen. Sollte in dieser fall allerding nicht so wild sein weil ja jede funktion mit rechten ausgestattet wird.

    Das wäre mal spannend zu testen ob die Allow_osXXXX Funktionen auch einschränkenden Charakter haben.
    Wenn man beispielsweise:

    Allow_osOwnerSaveAppearance = ESTATE_OWNER, ESTATE_MANAGER, PARCEL_OWNER, PARCEL_GROUP_MEMBER

    setzen und den OSFunctionThreatLevel auf "VeryHigh" stellen würde, ob dann auch Leute die NICHT die entsprechenden Rechte haben Scripts mit osOwnerSaveAppearance aufrufen können ...

    Was das Problem im erwähnten Fall war, kann ich von aussen schwer sagen. Wenn beispielsweise gegeben ist, dass:
    • OSFunctionThreatLevel = VeryLow
    • Allow_osOwnerSaveAppearance = ESTATE_OWNER, ESTATE_MANAGER, PARCEL_OWNER, PARCEL_GROUP_MEMBER
    • der entsprechende Bewohner in der entsprechenden Parcel Gruppe eingetragen ist, oder Parcel Owner ist
    • und die Fehlermeldung erscheint...

    ... dann müsste man vielleicht genauer nachschauen. Es spielen halt schon einige Faktoren mit und ob da wirklich alles fehlerfrei implementiert ist ... who knows.
    Ich habe in meiner INI ja nur ESTATE_OWNER oder ESTATE_MANAGER drin und da scheint es zu funktionieren es. Mit den Parcel Dingens hab ich noch nichts rumgemacht, müsste aber eigentlich auch, ansonsten ist das ganze ( doch relativ komplizierte ) OSSL Berechtigungsgedönse für die Katz.

    LG Akira
  • mmetzmac
    mmetzmac
     Member edited 9:49PM
    Denke, jede Funktion lässt sich in jedem Level freischalten. Insofern hat Akira absolut recht. Und es ist auch richtig, dass VeryHigh gefährlich ist. Der Nachteil ist aber auf jeden Fall, dass jede freizugeben Funktion im richtigen Level dediziert anzugeben ist.

    In der Art, wie in der Anleitung NPC's erzeugt werden, müssen zum Beispiel Funktionen, die Standardmäßig für 'normale User' gesperrt sind - wie die benannten OsGetNoteCart, etc. entweder in das eingestellte Level geschoben werden (und auch dort nur für die entsprechende Usergruppe freigegeben werden), oder man setzt das Level auf das Niveau, in dem die Funktion normalerweise zu finden ist und schränkt dort auf die entsprechende Gruppe ein. Akira hat in sofern recht, dass ich definitiv mit VeryHigh ebenfalls Funktionen ermögliche(n) könnte, die in der OpenSim.ini nicht explizit angegeben sind. Genau dort ist die Gefahr begründet.

    Quintessenz: Bewege alles nach VeryLow, was Du wirklich benötigst und schränke die Rechte auf die maximal nötige UserGruppe ein.

    Ich habe es halt so gemacht, wie im Attachment beschrieben, um ERST EINMAL schnell zum Erfolg zu kommen.

    Also Akira hat recht - und ich habe die schnelle Lösung gemacht. Gepostet habe ich den Weg, wie man grundsätzlich NPC's erzeugt, die auch nach dem Regionsstart wieder gerezzt werden.

    Gruß
    Markus
  • Gubbly
    Gubbly
     Member edited 9:49PM
    Also ich hab mal getestet, anscheinend werden die rechte dadurch auch eingeschränkt.
    Aber noch etwas habe ich gemerkt was auch recht wichtig ist zu wissen.
    Anscheinend wird PARCEL_GROUP_MEMBER anders behandelt als ESTATE_OWNER, ESTATE_MANAGER, PARCEL_OWNER.
    Es ist anscheinend nur wichtig welche Gruppe der Prim hat, nicht in welchen Gruppen der Avatar ist.

    Sprich:
    Reze ich einen NPC creator mit der richtige Gruppe funktioniert er.
    Änder ich die Gruppe über das Baumenü funktioniert er nicht mehr solange nicht wieder die richtige Gruppe eingestellt ist.
  • Akira Sonoda
    Akira Sonoda
     Member edited 9:49PM
    Gubbly wrote:
    Es ist anscheinend nur wichtig welche Gruppe der Prim hat, nicht in welchen Gruppen der Avatar ist.

    Kann ich mir durchaus vorstellen. Das macht das ganze zusätzlich verwirrend. Genau so wie die 8 Threat-Levels ... da hat sich wohl ein Entwickler selbst verwirklicht.

    Gut zu wissen. Insbesondere wenn Mall Betreiber plötzlich den eingemieteten Shop-Ownern, denen man ja vielleicht nicht ne eigene Parzelle geben will ermöglichen will, dass sie Püppchen in ihre Schaufenster stellen können.

    Vom technischen her ist es auch einfacher zu implementieren und wahrscheinlich auch performanter. Die Szene kennt ja die Parzellen das Script kennt sein Prim und die Scene kennt auch das Prim, also ist ein Vergleich recht einfach. Ansonsten müssten ja zuerst die Gruppen Informationen des Script/Prim Owners herangezogen werden, die typischwerweise irgendwo zentral im grid liegen und nur durch einen potentiell instabilen Service Aufruf ermittelt werden können um den Berechtigung-Check zu machen.

    Vielen Dank für die Abklärungen!

    LG Akira
Sign In or Register to comment.

Welcome

It looks like you're new here. If you want to get involved, click one of these buttons!

Discussions

© Copyright 2019 - Metropolis Metaversum
All times are GMT