Zehn Skripte, und welche davon laufen
Ein Avatar kann zehn Skripte behalten. Jedes hat einen Namen und eine Nummer, jedes hat eine eigene Ausgabe, und jedes kann von selbst starten.
Auswählen, welches du ansiehst
Die Auswahlliste oben im Python Runner enthält alle Skripte dieses Avatars. Eines auszuwählen zeigt dessen Code und dessen Ausgabe und ändert sonst nichts: jedes andere laufende Skript läuft weiter und sammelt weiter seine eigene Ausgabe, während du dieses ansiehst.
Skript hinzufügen erzeugt eines aus der Vorlage. Löschen entfernt das angezeigte und fragt vorher, weil sein Code mitgeht.
Namen und Nummern
Jedes Skript hat einen Namen, den du wählst, und eine Nummer, die NeuraCore vergibt. Der Name ist für dich, die Nummer benutzen Befehle und Protokollzeilen.
Eine Nummer wird nie einem zweiten Skript gegeben. Lösche Skript 2, und das nächste hinzugefügte ist die 4, nicht die 2: Nummern, die nach einer Löschung nachrücken, würden dazu führen, dass der Befehl für Skript 4 eines Tages ein anderes Skript startet, ohne dass es dir jemand sagt.
Startpriorität
Die Priorität entscheidet die Reihenfolge, wenn mehrere Skripte im selben Moment starten: die kleinste Zahl zuerst. Startet nur eines, tut sie gar nichts.
Danach laufen sie nebeneinander. Die Priorität ist die Startreihenfolge und keine Warteschlange: ein Skript, das ewig läuft, hält die folgenden nicht auf.
Von selbst starten
Setze den Haken bei „automatisch starten, sobald der Avatar online ist“, und das Skript startet bei jeder Verbindung dieses Avatars von selbst, in Prioritätsreihenfolge mit den anderen angehakten. Zu Beginn ist er bei jedem Skript leer.
Die andere Hälfte: jedes laufende Skript hält an, wenn sein Avatar offline geht. Ein Skript, dessen Avatar weg ist, kann nur noch abgewiesen werden, und es weiterlaufen zu lassen würde die Ausführungshistorie mit Fehlschlägen füllen, die niemand wollte.
Starten und anhalten
Run startet das angezeigte Skript, Stop beendet es. Ein bereits laufendes Skript wird in Ruhe gelassen statt ein zweites Mal gestartet, ein weiterer Klick auf Run ist also harmlos und tut nichts.
Stop erreicht ein wartendes wie ein schleifendes Skript: es wird dort unterbrochen, wo es steht. Wenn es lieber ordentlich zu Ende gehen soll, lass es nachfragen.
import time
while not avatar.stop_requested():
for person in avatar.get_nearby_avatars():
print(person["name"])
time.sleep(30)
print("Asked to stop, so stopping.")- stop_requested antwortet wahr, sobald jemand dieses Skript anhalten wollte.
- Es bei jedem Schleifendurchlauf zu prüfen lässt das Skript an einer Stelle enden, die du gewählt hast.
- Ein Skript, das nie prüft, wird trotzdem angehalten. Dies entscheidet nur, wo.
Die Bibliothek aus einem Skript lesen
Ein Skript sieht dieselbe Liste wie die Auswahlliste.
for script in avatar.list_scripts():
print(script["id"], script["name"], script["priority"], script["running"])- Jeder Eintrag trägt die Nummer des Skripts, seinen Namen, seine Priorität, ob es von selbst startet und ob es gerade läuft.
Ein Skript startet ein anderes
Ein Skript kann die anderen starten und anhalten, nach Nummer oder nach Namen.
print(avatar.run_script("Greeter"))
print(avatar.kill_script(2))- run_script antwortet started oder already_running, was kein Fehler ist und genau das heißt.
- kill_script antwortet killed oder not_running.
- Run Script ist in den Action Permissions zu Beginn aus, weil ein Skript zu starten nicht eine Fähigkeit ist, sondern jede, die seine Zeilen erreichen. Schalte es ein, wenn Skripte, die KI oder eine Sofortnachricht eines starten können sollen.
Eines per Sofortnachricht starten
Der Master kann run gefolgt von Nummer oder Namen eines Skripts senden, und kill genauso. Der Avatar antwortet, ob er es gestartet hat, ob es schon lief, ob er es angehalten hat oder ob es nicht lief.
Ein autorisierter Bewohner kann dasselbe, aber nur bei einem Skript, dessen Kästchen „autorisierte Bewohner dürfen es per IM starten“ gesetzt ist. Es ist bei jedem Skript zu Beginn leer, und das ist bei allem gut so, wofür du niemandem den Schlüssel geben würdest: ein Skript ist nicht eine Aktion, es ist alles, was seine Zeilen tun.