Chatlog vom 28.07.13 Skript-Kurs

* Schedules and informations about training seminars
* Termine und Informationen über Schulungs-Seminare

Chatlog vom 28.07.13 Skript-Kurs

Beitragvon Anette » So 28. Jul 2013, 22:08

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Das Chat-Log wurde etwas überarbeitet und einige Zeilen wurden gelöscht oder in der Reihenfolge umgestellt, um das Durchlesen zu erleichtern.
Der zweite Teil des Logs wurde in's deutsche übersetzt, dabei bin ich eher sinngemäß als wortgetreu vorgegangen. Ich hoffe, es ist gut lesbar.

[04:05] Fuu Barr: Okay - genug mit dem Vorgeplänkel, fangen wir mal an :)
[04:05] Fuu Barr: Zuerst werde ich mal kurz uber die Ideen vom letzten mal reden
[04:06] Fuu Barr: Zuerst haben wir gesagt, dass ein Skript an ein Prim gebunden ist: ohne Prim kein Skript
[04:07] Fuu Barr: Dann haben wir gesehen, dass ein Skipt in 'states' unterteilt ist.
[04:07] Fuu Barr: Oft gibt es nur einen state: den 'default' state
[04:08] Fuu Barr: Danach haben wir gesehehn wie ein Prim mit einem Skript auf 'Events' wartet
[04:09] Fuu Barr: Es gibt eine Menge Events, so wie Touching, Listening, usw.
[04:09] Fuu Barr: und das Skript muss auf jedes der _relevanten_ Events vorbereitet sein.
[04:10] Fuu Barr: Also wenn mein Prim auf Touching reagieren muss, muss ich in meinem Skript einen "Event handler" haben für den Event Touching
[04:11] Fuu Barr: der Code sieht dann etwa so aus:
[04:11] Fuu Barr: touch_end(integer touches) { blabla; }
[04:12] Fuu Barr: Wir sehen, dass es die geschweiften klammern gibt, zwischen denen der Code 'lebt' und jede Zeile wird beendet mit einem Semikolon.
[04:13] Fuu Barr: Zuletzt haben wir noch über Funktionen und Datentypen gesprochen.
[04:13] Fuu Barr: Funktionen sind die 'Zaubersprüche' die man mit Parametern anruft und damit dem Skript mitteilt was zu tun ist. WAS zu tun, nicht WANN :)
[04:14] Fuu Barr: und Datentypen sind die Art der Daten die wir benutzen. Die Programmiersprache LSL, mit der wir arbeiten, muss wissen um welchen Datentyp es sich handelt.
[04:15] Fuu Barr: Das ist technisch bedingt.
[04:15] Fuu Barr: Bis jetzt haben wir zwei Typen gesehen:
[04:15] Fuu Barr: echte Ziffern wie 1, 2, 3, 456, -9876
[04:15] Fuu Barr: integer genannt
[04:16] Fuu Barr: und 'Text' wie: "Hello stupid summer, why are you so hot?"
[04:16] Fuu Barr: und das heißt ein string
[04:16] Fuu Barr: merken sie sich, dass ein string IMMER die doppelten Anführungszeichen "" (qoutation marks) benutzt
[04:17] Fuu Barr: Das war eine kurze Zusammenfassung des Stoffs der letzten Woche. gibt es noch Fragen dazu?

[04:19] Fuu Barr: Also heute werden wir folgendes sehen:
[04:19] Fuu Barr: 1. einige Hinweise zum Thema Programmieren
[04:19] Fuu Barr: 2. Nutzung von Events: touching and listening
[04:20] Fuu Barr: 3. Funktionen zur detection, giving, instant messaging, listening und string manipulations
[04:20] Fuu Barr: und
[04:20] Fuu Barr: 4. den Datentyp: key
[04:21] Fuu Barr: ein Hinweis noch, ich nutze das English für diese Sachen, denn LSL - unsere sprache hier - ist auch auf english und ich denke es ist besser auch auf english über diese Konzepte zu sprechen.
[04:22] Fuu Barr: also 'talking' und 'listening' statt 'sprechen' und 'zuhören'
[04:22] Fuu Barr: Okay - fangen wir an!
[04:22] Fuu Barr: bitte rezzen sie einen Würfel.
[04:23] Fuu Barr: Öffnen sie das Skript in dem 'Inhalt' Tab
[04:23] Fuu Barr: und löschen sie den Code in den state_entry Eventhandler
[04:24] Fuu Barr: Was wir haben wollen ist ein leeres Skript als Baugerüst
[04:25] Fuu Barr: nur den Code für die Behandlung von 'state' und einen leeren state_entry Event Handler
[04:25] Fuu Barr: gut.
[04:25] Fuu Barr: nur zur Sicherheit.... so sieht das aus:
[04:26] Fuu Barr:
default {

state_entry() {


}
}
[04:27] Fuu Barr: Okay. wir wollen probieren ein 'giver' Skript zu schreiben
[04:27] Fuu Barr: und damit wir ein Idee haben wie man das macht, müssen wir uns fragen, welche Daten brauchen wir?
[04:28] Fuu Barr: also... offene Frage an alle: welche Informationen werden benötigt?
[04:28] Sheera Khan: Wer klickt das objekt an
[04:28] Scarlett Earp: Was will ich geben
[04:28] Fuu Barr: gut: 1. wer?
[04:28] Fuu Barr: get: 2. was?
[04:29] Fuu Barr: sonst etwas?
[04:29] Gerd Moorlord: wann?
[04:29] Scarlett Earp: Meldung im chat?
[04:29] Fuu Barr: wann - gut zu wissen aber nicht unbedingt notwendig
[04:29] Gerd Moorlord: wo?
[04:29] Sheera Khan: an wen?
[04:29] Spike Sol: warum? was ist der Auslöser?
[04:29] Spike Sol (de -> en): Why? What is the catalyst?
[04:30] Sheera Khan: welches Event
[04:30] Scarlett Earp: wie?
[04:30] Fuu Barr: heh - alles gute Beispiele, aber ich denke, wir sollten uns auch selber eine Mitteilung machen, wenn der Giver aktiv wurde. Also müssen wir wissen, wer wir selber sind :)
[04:30] Fuu Barr: also 3. 'Eigentümer'
[04:31] Fuu Barr: Okay - jetzt wissen wir im grossen welche Daten wir benötigen.
[04:32] Fuu Barr: also können wir das im Skript scheiben: mit dem Datentyp
[04:32] Fuu Barr: string inv_item
[04:32] Fuu Barr: string msg
[04:32] Fuu Barr: key owner
[04:32] Fuu Barr: den Datentyp 'key' haben wir bisher noch nicht gesehen
[04:33] Fuu Barr: key ist ein Art Ziffer
[04:33] Fuu Barr: es handelt sich um UUID's Universal Unique Identifiers.
[04:34] Fuu Barr: JEDES ding, ob es Skript, Avatar, Object usw. ist, ALLESS in opensim hat eine UUID
[04:34] Fuu Barr: Um in dem Skript unsere eigene Kennung zu speichern, brauchen wir den Datentyp 'key'
[04:34] Fuu Barr: und diese Art der Speicherung geht mit einer VARIABLEN
[04:35] Fuu Barr: also:
[04:35] Fuu Barr: key (type) owner (variable name)
[04:35] Fuu Barr: key owner
[04:35] Fuu Barr: owner ist die Variable, key ist der Typ
[04:38] Fuu Barr: Okay - so wir haben unsere Variablen und ihre Typen
[04:38] Fuu Barr: Als nächstes müssen wir den 'touching' Event behandlen:
[04:39] Fuu Barr: touch_end(integer touches) { }
[04:39] Fuu Barr: Okay - wo gehen diese Zeilen hin?
[04:40] Fuu Barr: Zuerst mal... wir müssen an die Struktur des Skriptes denken:
[04:40] Fuu Barr: state->events->functions
[04:40] Fuu Barr: also es muss innerhalb der Klammern von default stehen.
[04:41] Fuu Barr: Und dann sind da die Event Handler - also muss es innerhalb der Klammern der Event Handler liegen: touch_end(integer touches) { }
(Anm. d. Red.: aus technischen Gründen verwenden wir das Event touch_end() und ignorieren touch_start(), sonst bekommt man viele Kopiene des Objektes...)
[04:49] Fuu Barr: Okay... wir haben den Grund-state 'default' und wir haben unsere 'Variablen' fur die Daten
[04:49] Fuu Barr: und wir haben unsere 'touching' Event Handler
[04:49] Fuu Barr: Was ist unser nächster Schritt?
[04:50] Fuu Barr: bitte 'kaufen' sie das Baugerüst-Skript von dem roten Würfel :)
[04:50] Fuu Barr: so... Ideen zum nächsten Schritt?
[04:51] Sheera Khan: wir müssten den Variablen Inhalte, also Werte zuweisen
[04:51] Fuu Barr: genau
[04:52] Fuu Barr: also... 1. wir wollen eine Notecard geben... also müssen wie in unseren eigenem Würfel in dem Inhalts-Tab etwas reinstecken, und den Namen der Notecard tragen wir in die Variable inv_item ein.
[04:53] Fuu Barr: Erstellen sie eine neue Notecard, geben sie ihr einen Namen, und legen sie sie in den Inhalt ihres Würfels
[04:53] Fuu Barr: Den Namen der neuen Notecard schreiben sie zwischen die Anführungszeichen der Variablen:
[04:54] Fuu Barr: inv_item="Der Name steht hier"
[04:54] Fuu Barr: Danach müssen wir unsere eigene UUID herausfinden, und dazu gibt es eine Funktion: llGetOwner()
[04:55] Fuu Barr: llGetOwner() gibt uns unsere UUID
[04:55] Fuu Barr: die UUID von unserem Avatar
[04:55] Fuu Barr: oder genauer gesagt von unserem 'Agenten'
[04:56] Fuu Barr: aber das ist egal, Avatar = Agent für alle praktischen Belange :)
[04:56] Fuu Barr: so:
[04:56] Fuu Barr: innerhalb des state_entry Handlers schreiben wir folgendes:
[04:56] Fuu Barr: owner = llGetOwner();
[04:57] Fuu Barr: Die Variable die wir am Kopf unseres Skripts deklariert haben, wird jetzt gefüllt mit der UUID die llGetOwner() findet
[04:58] Fuu Barr: key owner = ""; deklariert die Variable als leer, owner = llGetOwner() füllt sie mit den wirklichen Daten
[04:58] ChapTer Kronfeld: ? muß der Item name immer gleiche große und kleine Buchstaben haben, im Skript, genau wie im content des Würfels ?
[04:58] Fuu Barr: sicher
[04:59] Fuu Barr: LSL ist SEHR empfindlich fÜr Buchstaben und Rechtschreibung usw.
[04:59] Fuu Barr: es muss immer EXAKT das gleiche sein
[04:59] Fuu Barr: zum Beispiel:
[05:00] Fuu Barr: my_variable, myvariable, MyVariable, myVariable
[05:00] Fuu Barr: derselbe Name für uns Menschen, aber 4 verschiedene Variablen für die Programmiersprache
[05:01] Fuu Barr: Ich glaube, ich sollte auf englisch weitermachen - es dauert einfachzu lange, es auf deutsch zu erklären - LOL
(Anm. d. Red.: ab hier wurde nachträglich übersetzt)
[05:03] Fuu Barr: Unsere Variablen wurden am Beginn des Skriptes deklariert.
[05:03] Fuu Barr: Wir haben zwei Event Handler in unserem default-State.
[05:03] Fuu Barr: jetzt müssen wir die Funktionen hinzufügen, die wir benötigen, um das Skript zum funktionieren zu bringen.
[05:04] Fuu Barr: die Funktionen, die wir brauchen ist eine, die etwas aus dem Inhalt des Prims an einen Avatar übergibt
[05:04] Fuu Barr: und eine, die dem Avatar, der auf das Objekt geklickt hat, mitteilt dass er etwas erhalten hat.
[05:05] Fuu Barr: diese Funktionen sind:
[05:05] Fuu Barr: llGiveInventory() und
[05:05] Fuu Barr: llInstantMessage()
[05:06] Fuu Barr: offensichtlich benötigen diese Funktionen einige Parameter
[05:07] Fuu Barr: und ich merke gerade, dass diese Methode etwas zu vermitteln nicht richtig klappt... Es ist besser etwas zu zeigen, als es zu erklären. Moment bitte, ich packe mal das fertige Script in den roten Würfel...
[05:09] Fuu Barr: endlich... bitte kaufen sie den Inhalt des Würfels wieder
[05:09] Fuu Barr: lol - nun geht aber auch alles schief.... mal sehen, was los ist
[05:10] Fuu Barr: ah aber sicher - Das Skript sucht nach einer Notecard
[05:10] Fuu Barr: wenn die Notecard in ihrem Prim nicht 'note' heißt...
[05:11] Fuu Barr: dann kann das Skript sie nicht finden :)
[05:11] Fuu Barr: also bitte tragen sie in der Variablen inv_notecard den name ihrer Notecard ein.
[05:13] Fuu Barr: nutzen sie bitte llOwnerSay() anstelle von llSay() :)
[05:13] Arielle Popstar: soll ich diese Zeile ändern?
[05:13] Arielle Popstar: string inv_notecard = "note";
[05:13] Fuu Barr: jepp!
[05:15] Arielle Popstar: was bedeutet das: Primitive: Runtime error:
(0): Invalid Guid format:
[05:16] Fuu Barr: okay, es scheint so, als ob es noch Probleme mit dem Skript gäbe. sGehen wir es also noch mal langsam von Anfang an durch. sonst ist das zu frustrierend ...
[05:16] Fuu Barr: 1. Schreiben Sie eine Notecard und packen sie sie in den Prim
[05:16] Fuu Barr: 2. benennen sie die Notecard in ihrem Würfel um in 'note'
[05:17] Fuu Barr: (nur der Name, ohne die Anführungszeichen)
[05:17] Fuu Barr: 3. ziehen sie das "gekaufte" Skript aus dem Inventar in den Inhalt des Prims
[05:17] Fuu Barr: 4. cross your fingers
[05:17] Fuu Barr: und klicken sie auf den Würfel
[05:18] Spike Sol: ich habe einen Runtime Error
[05:18] Spike Sol: Runtime error:
(0): Invalid Guid format:
[05:18] Spike Sol: was ist da falsch?
[05:18] Fuu Barr: wow....
[05:19] Fuu Barr: Moment mal ..
[05:20] Fuu Barr: okay - löschen sie bitte mal alle ihre Würfel
[05:21] Fuu Barr: ich sehe immer noch einige Würfel, die nicht blau oder rot sind ...
[05:21] Fuu Barr: löschen sie sie bitte oder nehmen sie sie in's Inventar
[05:22] Fuu Barr: bitte 'kaufen' sie den blauen Würfel
[05:23] Fuu Barr: ich habe es jetzt selber probiert... und es funktioniert für mich ohne weitere Probleme
[05:23] Fuu Barr: bekommt jeder eine leere Notecard vom Würfel?
[05:24] Fuu Barr: na, wenigstens funktioniert der Teil mit der Notecard.
[05:27] Fuu Barr: Bitte nochmal das Skript öffnen
[05:27] Fuu Barr: und von oben nach unten durchgehen
[05:29] Fuu Barr: okay das müssen wir tun, um den Fehler zu beheben:
[05:29] Fuu Barr: in state_entry
[05:29] Fuu Barr: bitte die folgende Zeile ergänzen:
[05:30] Fuu Barr: owner= llGetOwner();
[05:31] Fuu Barr: der blaue Würfel enthält jetzt die korrigierte Fassung.
[05:32] Fuu Barr: Ich entschuldige mich für die Verzögerung :(
[05:32] Zak Spot: np - so ist das beim Skripten ^^
[05:33] Fuu Barr: okay- bevor wir nun alle nach Hause gehen... ich würde gerne das Skript noch mit ihnen durchgehen - es wäre sonst verschenkte Zeit....
[05:34] Fuu Barr: Ich kenne das nämlich schon, sie sind glücklich, dass es funktioniert, ohne zu wissen warum. Dann werden sie immer nur Skripte mit Copy und Paste bearbeiten, aber nie eigene schreiben.
[05:34] Fuu Barr: lassen sie e suns nochmal von Anfang an durchgehen
[05:34] Fuu Barr: 1. Deklaration von drei Variablen die die Daten des Programms aufnehmen
[05:35] Fuu Barr: inv_notecard, Name der Notecard, die der Giver verteilt
[05:35] Fuu Barr: msg die Nachricht, die derjenige bekommt, der das Objekt anklickt
[05:35] Fuu Barr: owner UUID des Eigentümers um ihm mitzuteilen, dass eine Notecard verschickt wurde
[05:35] Fuu Barr: dann....
[05:35] Fuu Barr: 2. wir brauchen nur einen Zustand
[05:36] Fuu Barr: daher brauchen wir nur default {}
[05:36] Fuu Barr: ein so einfaches Skript benötigt keine weiteren states
[05:36] Fuu Barr: 3. In dem state default gibt es zwei Event Handler
[05:36] Fuu Barr: warum?
[05:37] Fuu Barr: Wir wollen wissen, wer der Eigentümer ist um ihm eine Nachricht zuschicken zu können
[05:37] Fuu Barr: und zweitens um dem Benutzer die Notecard übergeben zu können
[05:37] Fuu Barr: so: state_entry() ist die Stelle, wo wir den Eigentümer ermitteln
[05:37] Fuu Barr: und in touch_end() geben wir die Notecard an einen Avatar
[05:38] Fuu Barr: also wird in state_entry die Variable owner, die wir zu Beginn des Skripts deklariert haben via llGetOwner() function belegt.
[05:38] Fuu Barr: und in dem touch_entry... Handler
[05:38] Fuu Barr: belegen wir zwei weitere Variable... eine bekommt den Namen des Avatars zugewiesen (name), der das Objekt angeklickt hat
[05:39] Fuu Barr: und in der zweiten (avvy) wird die UUID dieses Avatars gespeichert
[05:39] Fuu Barr: wichtig ist dabei: der '0' Parameter in beiden Funktionen:
[05:39] Fuu Barr: llDetectedName(0) and llDetectedKey(0)
[05:40] Fuu Barr: die '0' bedeutet: der erste entdeckte Klick (falls mehrere Avatare fast gleichzeitig auf das Objekt klicken)
[05:40] Fuu Barr: wie in vielen Dingen beginnt LSL die Zählung mit 0
[05:40] Fuu Barr: Wir Menschen beginnen meist mit 1, die Computer starten dagegen bei 0
[05:41] Fuu Barr: wenn ich mit den Fingern zähle... dann so: 1,2,3,4,5
[05:41] Fuu Barr: ein Computer zählt dagegen: 0,1,2,3,4
[05:41] Fuu Barr: wie auch immer - der '0' Parameter der Funktion ist wichtig
[05:42] Fuu Barr: nun, da die Variablen die benötigten Daten enthalten... kann ich weitermachen mit dem Geben und Mitteilen
[05:42] Fuu Barr: llGiveInventory() gibt das genannte Inventar-Objekt... an den Avatar mit der UUID
[05:43] Fuu Barr: Ich habe die Variablen so benannt, dass sie für mich einen Sinn ergeben. Das ist sehr wichtig und darüber wollte ich gerade sprechen, als die Probleme mit dem Skript begannen.
[05:43] Fuu Barr: Bitte verwenden sie keine Variablennamen wie yu, e, cv, jyu
[05:44] Fuu Barr: wenn sie sich nach zwei Wochen ihr Skript nochmal anschauen - sie werden ihren eigenen Code nicht mehr verstehen.
[05:44] Fuu Barr: verwenden sie AUSSAGEKRÄFTIGE Namen
[05:45] Fuu Barr: In der nächsten Woche werden wir jedoch eine Ausnahme von dieser Regel kennenlernen.
[05:46] Fuu Barr: wie auch immer, nachdem wir mit llGiveInventory() ausgeteilt haben, sollten wir dem Benutzer das mitteilen - einfach, weil es höflicher ist, das zu tun
[05:46] Fuu Barr: daher benutzen wir llInstantMessage() um dem Benutzer eine IM zu schicken
[05:46] Fuu Barr: und abschließend schicken wir dem Eigentümer des Prims eine Nachricht, dass jemand den Prim angeklickt hat
[05:47] Fuu Barr: Ein Kommentar zum Abschluss des heutigen Tages:
[05:48] Fuu Barr: In der letzten llInstantMessage() Funktionverwende ich + und eine weitere Funktion in der Parameter Liste.... wie sie sehen, kann man allerhand lustige Dinge mit Zeichenketten anstellen - die ich ihnen hoffentlich während der nächsten Sitzung alle vorstellen kann.
[05:48] Fuu Barr: Das wär's also... ein giver-Skript, das ihnen Zustände, Events und Funktionen zeigt. Wir haben heute nicht alles geschafft, aber den Rest machen wir beim nächsten Mal
[05:48] Zak Spot: Danke vielmals Fu. Nächste Woche wieder hier um dieselbe Zeit?
[05:49] Fuu Barr: Derselbe Ort, dieselbe Zeit.
[05:49] Fuu Barr: Und ich werde in Zukunft auf englisch unterrichten, da das Übersetzen ins deutsche zuviel Zeit kostet.
[05:49] Sheera Khan: Thank you for this class I enjoyed it very much - and it was a valuable lesson in debugging too :-)
Benutzeravatar
Anette
 
Beiträge: 400
Registriert: So 17. Apr 2011, 08:32

Re: Chatlog vom 28.07.13 Skript-Kurs

Beitragvon Anette » Mo 29. Jul 2013, 19:42

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Hallo,
das Script noch dafür, damit es jeder besser nach vollziehen kann.
Code: Alles auswählen
string  inv_notecard = "note";
string  msg = "You'll find the notecard in your Notecards folder.";

key     owner = "";


default {
   
    state_entry() {
       
        owner=llGetOwner();
    }

    touch_end(integer count) {

        string  name=llDetectedName(0);
        key     avvy=llDetectedKey(0);

        llGiveInventory(avvy, inv_notecard);
        llInstantMessage(avvy, msg);
       
        llInstantMessage(owner, inv_notecard + " notecard given to " + name + " on " + llGetRegionName());
    }
}

Gruß
Anette
Benutzeravatar
Anette
 
Beiträge: 400
Registriert: So 17. Apr 2011, 08:32


Zurück zu MetroAcademy

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast



Powered by phpBB

Deutsche Übersetzung durch phpBB.de
.

Style designed by Artodia.