Ich habe eine Notizkarte mit einem anderen Wort in jeder Zeile, und ich möchte in der Lage sein, aus den Zeilen zufällig auszuwählen. Wie kann ich das machen?Wie kann ich eine zufällige Zeile von einer Notecard in LSL lesen?
Antwort
Zuerst, wie Sie erwähnen, benötigen Sie eine Notecard. Für dieses Beispiel verwende ich eine mit dem Namen „Farben“ mit folgendem Inhalt:
red
blue
green
yellow
orange
purple
Mit dieser Notecard vorhanden ist, wird das folgende Skript jedes Mal eine zufällige Zeile aus der Karte gelesen und Chat die prim berührt werden.
Es ist nicht klar, warum Sie solche unnötige Mathe mit einem hinzufügen und dann später in der Antwort subtrahieren, die Sie sich selbst oben geben. Wenn Sie wollen sicherstellen, dass Sie eine Zufallszahl haben, da es bekannte Probleme mit der Zufälligkeit der llFrand
Sie tun können (ohne überprüfen, ob die Zahl gerade oder ungerade ist):
integer max;
integer random = llFrand((integer)(max/2)) + llFrand((integer)(max/2));
Das zweite Problem mit Ihrem Code oben ist, dass Sie nicht gegen CHANGED_INVENTORY
überprüfen und ich bin nicht ganz sicher, warum Sie das nicht tun würden. Im Anschluss an diese zweite Frage, warum stellst du eine Frage, um eine zufällige Notecard-Zeilennummer zu bekommen und eine Antwort zu geben, die eine zufällige innerhalb eines Bereichs liefert? Und was wirst du tun, wenn sich die Notecard ändert? Ändern Sie den Code und die Notecard? Dies scheint mir überflüssig zu sein.
NOTECARD namens colors
oder was auch immer Sie im Skript gesetzt:
blue
red
green
yellow
black
SCRIPT im selben prim:
// this script reads from a notecard which is named whatever you set in init
// in this example from a notecard named "colors"
string ncName;
key ncNumOfLinesReqId;
key ncReqId;
integer numOfLines;
init()
{
// Put the name of your notecard as in the prim's inventory here.
ncName = "colors";
}
default
{
changed(integer change)
{
// reset script to make sure you have the current number of lines
// CHANGED_OWNER has the integer value 0x80 (128)
// CHANGED_INVENTORY has the integer value 0x01 (1)
if (change & (CHANGED_OWNER | CHANGED_INVENTORY))
{
llResetScript();
}
}
state_entry()
{
init();
// get the number of notecard lines
ncNumOfLinesReqId = llGetNumberOfNotecardLines(ncName);
}
touch_start(integer num_detected)
{
// if the number of lines is 0
if (!numOfLines)
{
// PUBLIC_CHANNEL has the integer value 0
llSay(PUBLIC_CHANNEL, "~!~ Unconfigured, check notecard ~!~");
}
else // if number of lines not 0
{
ncReqId = llGetNotecardLine(ncName, (integer)llFrand(numOfLines));
}
}
dataserver(key reqId, string data)
{
if (reqId == ncNumOfLinesReqId)
{
// make sure you typecast!
numOfLines = (integer)data;
}
else if (reqId == ncReqId)
{
// PUBLIC_CHANNEL has the integer value 0
llSay(PUBLIC_CHANNEL, data);
}
}
}
Weitere Informationen:
Die Notecard Du bist das Lesen von muss nicht unbedingt im selben Prim sein. Wenn Sie die UUID
der Notecard kennen, können Sie davon lesen, solange es übertragbar (und nicht gelöscht) ist. Seien Sie gewarnt, dass das Ändern der Inhalte der Notecard und Speichern, speichert den neuen Inhalt unter anderenUUID
. Aber wenn Sie so geschickt sind, können Sie den Text auch auf einem Web-Service speichern und von dort die Anzahl der Text-Snippets und Text-Snippets abrufen.
Mehr unter the official Second Life wiki.
- 1. MySQL zufällige Zeile von einer Tabelle in eine andere verschieben
- 2. Wie bekomme ich eine zufällige Zeile in CakePHP 3.0?
- 3. MySQL: Wie eine zufällige Zeile oder mehrere zufällige Zeilen abrufen?
- 4. Wie fordere ich eine einzelne zufällige Zeile von einer force.com-Datenbank in SOQL an?
- 5. Wie wähle ich eine zufällige Zeile mit NHibernate ICriteria API?
- 6. Wie kann ich eine zufällige Zeile aus einer Datei zurückgeben? Interview Frage
- 7. LSL Kommunikation
- 8. zufällige Zeile in Datei
- 9. Eine Zeile von stdin lesen
- 10. Wie kann ich eine zufällige Anzahl von atmosphärischem Rauschen erhalten?
- 11. Android - Wie kann ich eine Textdatei von einer URL lesen?
- 12. Wie kann ich nur dritte Zeile aus einer Datei in eine Variable in Shell-Skript lesen
- 13. Ist es möglich, eine zufällige Spalte in einer Zeile auszuwählen?
- 14. Wie kann ich Strings Zeile für Zeile in einer Textdatei lesen und ersetzen?
- 15. Wie kombiniere ich eine zufällige Anzahl von Listen in Python
- 16. Kann ich Zeile von einem Heredoc in bash lesen?
- 17. Drucken Sie eine zufällige Zeile aus einer MySQL-Abfrage
- 18. Wie kann ich eine Zeile in einer WinForms-Anwendung erstellen?
- 19. So wählen Sie eine zufällige Zeile aus einer Textdatei
- 20. Eine zufällige Zeile mit LINQtoSQL abrufen
- 21. Wie kann ich in OpenCV von einer XML-Zeichenfolge lesen?
- 22. Wie kann ich Symbole in einer Zeile von VB
- 23. Lesen von einer Datei nicht Zeile für Zeile
- 24. Eine Zeile von Big XMl lesen Datei
- 25. Wie kann ich zufällige Zeichenfolgen aus einer TXT-Datei
- 26. Ich habe eine^Eine Datei begrenzt .. wie kann ich es Zeile für Zeile in der Karte lesen reduzieren und lesen Sie auch die^A von der Linie
- 27. Wie kann ich mit sscanf eine Zeichenfolge in Klammern lesen?
- 28. Wie eine CSV-Zeile mit „lesen?
- 29. Wie kann ich eine Liste von Dateinamen aus einer Datei in bash lesen?
- 30. Wie mache ich ein stationäres Bild aus Teilchen in LSL?
Dies ist eine Antwort auf eine Frage in der Script Academy-Gruppe. Posted hier, um es für die Nachwelt zu bewahren. – btubbs
Ich stimme das nur ab, weil es eine Frage über Linden Scripting Language für Second Life ist! :) –