• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

script in objekt automatisch updaten

carly Carami

Aktiver Nutzer
hat jemand eine idee wie ich ein script das in einem teil der prims eines objekts steckt, durch ein anderes ersetzen kann?

1. das script heisst zum beispiel script_xy
2. es ist in einem teil (zum beispiel 15 von 30) der prims vorhanden
3. es soll durch script_yz ersetzt werden

meine idee war, ein script durch llGiveInventory in alle prims einzuschleusen.
nach reset fragt dieses script dann ab, ob das script xy im prim vorhanden ist.
wenn ja löscht es das alte und importiert das neue.
aber wie kann ich das neue importieren? gibt es da eine funktion?
 

carly Carami

Aktiver Nutzer
hab ich schon selina, aber wie soll das gehen?
der pin ist ja in dem objekt nicht gesetzt, und ohne dass der gesetzt ist geht es ja nicht
 

thinkangel McAlpine

Aktiver Nutzer
moin,

meine idee war, ein script durch llGiveInventory in alle prims einzuschleusen.
nach reset fragt dieses script dann ab, ob das script xy im prim vorhanden ist.
wenn ja löscht es das alte und importiert das neue.
Deine Idee ist machbar.
1. bis zum Löschen des alten Scriptes alles ok
2. mit Hilfe des gleichen eingeschleusten Scriptes, setzt du mit " llSetRemoteScriptAccessPin( integer pin) " einen beliebigen PIN.
3. Nun meldest Du deiner "Basis" in deren Inventory das neue Script ist, dass dieser Prim mit dem Key "xyz" bereit für das neue Script ist.
4. Deine "Basis" lädt nun das neue Script mit " llRemoteLoadScriptPin( key ziel, string name, integer pin, integer running, integer start_param) " in den gewünschten Prim. Dabei ist "string name" der Name des neuen Scriptes und "integer pin" der PIN den Du selbst zuvor im Schritt 2 gesetzt hast.

gruss thinkangel
 

carly Carami

Aktiver Nutzer
@thinkangel

das würde so funktionieren wenn ich das script in allen prims des linksets tauschen will. es soll aber nur in einem teil getauscht werden. der pin wird da gesetzt, wo vorher das alte script war. wie melde ich jetzt der basis, dass da ein pin gesetzt ist? oder andersrum, woher weiss die basis ob der pin gesetzt ist oder nicht?
kann man vom root aus abfragen in welchem child der pin gesetzt ist?
 

carly Carami

Aktiver Nutzer
danke archon.
ich habe festgestellt, daß das eingeschleuste script, das abfragt ob das zu tauschende script im child vorhanden ist, und es dann löscht erst neu kompiliert werden muss, um arbeiten zu können. das bedeutet ja dass das script in manchen fällen 200 mal zusammen mit allen anderen scripten des objekts neu kompiliert werden muss. wenn ich vorher schon abfragen könnte ob das zu tauschende script im child ist, könnte man viel zeit sparen. fällt da vielleicht jemand ein anderer weg ein?
 

Archon Short

Forumsgott/göttin
Also ich lasse z.B. mir die Strings der Objektbeschreibung immer codieren.
Die kann man ganz leicht abfragen, auswerten und dann weiter machen ;)
 

carly Carami

Aktiver Nutzer
@archon
klingt interessant und wie meinst du das im detail?

hat vielleicht noch jemand ne idee, wie man das neukomplilieren umgehen kann, oder vom root aus das inventory der childs abfragen kann?
 

thinkangel McAlpine

Aktiver Nutzer
moin,

wenn Du Objekte auswählst, kannst Du über das Menü des Viewers alle Scripte in der Auswahl neu kompilieren. Im offiziellen Client geht das über das Menu "BAUEN->Scripts->Scripte rekompilieren".
Damit das nur einmal gemacht werden muss; Einfach das script in alle Prims einschleusen und dann Rekompilieren. Da alle Scripte nun nahezu Zeitgleich starten sollte eine Zeitverzögerung in abhängigkeit von der jeweiligen Primnummer berücksichtigt werden. Sonst wird deine Basis mit zuvielen Anfragen auf einmal getriggert und es fehlen Dir updates ;)

Ein Script kann nur das Inventar im gleichen Prim abfragen, schön wenn also dein altes Script selbst der Basis meldet in welchem Prim(Keynummer) es sitzt und den PIN setzt :))
 

carly Carami

Aktiver Nutzer
mal ne dumme frage zwischendurch.
was ist der unterschied zwischen reset und neu kompilieren? technisch gesehen erzeugt kompilieren neuen code. aber ein reset ist doch auch ein zurücksetzen auf den punkt o wie nach dem kompilieren. was ist dann anders?
 

thinkangel McAlpine

Aktiver Nutzer
Für die Ausführung des Scriptes ist es egal. Das "Kompilieren" ermöglicht uns ein Script in Mono oder LSL ausführen zu lassen.
Der Reset setzt "nur" alle Script - Variablen auf dem Server zurück und startet im "state default".
Was ich nun nicht beantworten kann ist, ob ein Script bei beiden Funktionen auch gleich ausgeführt wird, wenn es angehalten wurde oder aufgrund eines Fehlers gestoppt hatte.
 
Ok, mangels Computer mit SL Fähigkeit kann ich jetzt nicht 100% dafür garantieren, das die Reihenfolge funktioniert, aber ich probier es mal:

Zuerst muß man wissen, wenn man ein Script mit llGiveInventory übergibt, wird es im empfangenden Objekt auf Inaktiv gesetzt (der Haken im Editor womit man ein Script anhalten kann).
D.h. damit das jeweilige Script irgendwas machen kann, muß man entweder alle Scripte im Linkset neu compilieren, oder man geht folgendermaßen vor.

1. Scripte per llGiveInventory übergeben
2. Gesamtes Objekt ins Inventar nehmen
3. Objekt neu rezzen
4. Über das Baumenü alle scripte auf running /laufend umschalten

Die Scripte können dann laufen.

Was die Load Script Pin angeht, das ist eine Primeinstellung genau wie Partikel oder Größe des Prims.
Man richtet die also einmalig ein, und solange sie nicht auf 0 zurückgesetzt wird funktioniert das dauerhaft.
Also würde ich mit dem Verteilten script vorsorglich alle Prims mit einer einheitlichen Pin versehen. Dann kannst du zukünftig Scriptupdates direkt durchführen, und mußt nicht den Umweg über LLGiveInventory gehen.

Ansonsten kannst du natürlich vorgehen wie es hier im Thread besprochen wurde.

Achja, ich würde in die einzelnen Scripte eine Funktion einbauen, mit denen die Scriptversion per Linkmessage abgefragt werden kann, dann kannst du die einzelnen Prims nacheinander abfragen, und bei Bedarf updaten (in Zukunft).

MfG
Hannibal
 

carly Carami

Aktiver Nutzer
vielen dank hannibal für deine ausführliche hilfe. ich werde das alles mal komplett durchtesten, aber so wie es aussieht reicht es nicht die scripte auf running zu setzen. sobald ich mehr weiß melde ich mich wieder.

auch allen anderen die sich hier beteiligt haben vielen dank. viele einzelhinweise bringen einen halt doch weiter, danke sehr.
 

Aktive User in diesem Thread

Oben Unten