Die letzten Tage habe ich fleißig weitergearbeitet und ich bin wieder mal so weit dass ich gerne meine Fortschritte präsentieren würde.
Ich habe diesmal beschlossen, keine Screenshots hinzuzufügen, da man sowieso alles viel besser sehen kann wenn man einfach auf die Seite geht. hier nochmal der Link:
http://neidro.lima-city.de/myindex.php Solltet ihr Screenshots wollen mach ich noch gerne welche.
Im großen und ganzen gibt es zwei Neuerungen:
Variablen
Um tatsächlich eine interaktive Welt gestalten zu können, kommt man um Variablen nicht herum. Es ist nun möglich, beliebigen Variablen Werte zuzuweisen. Und nachher kann man sie sogar wieder auslesen
. Weiters wurde eine einfache Möglichkeit hinzugefügt, mithilfe von Variablen Abläufe zu steuern. Wie das funktioniert folgt im nächsten Kapitel
Momentan werden Variablen noch in der Session gespeichert. Als Variablenname darf jede Buchstabenfolge (englisches alphabet) inklusive dem Unterstrich gewählt werden. Wird eine Variable ausgelesen, bevor sie angelegt bzw gesetzt worden ist, ist der zurückgegebene Wert einfach 0.
Bestandteile
Es ist nun möglich, einem Ort zusätzlich zu der verpflichtenden Beschreibung weitere Bestandteile hinzuzufügen. Das zugehörige Formular ist ganz unten vor den Nachbarn. Als ID ist entweder eine neue ID zu wählen (der Bestandteil wird automatisch in der Datanbank angelegt) oder eine bereits vorhandene (der Bestandteil wird geladen). So ein Bestandteil kann alles mögliche sein. Bisher implementierte Bestandteile sind:
- Beschreibung - die von der Funktion her ident mit der schon bekannten verpflichtenden Beschreibung ist. Quasi ein neuer Absatz. Aber das wird uns noch nützlich werden.
- Kontroller - der (von mir erfundenen) scriptcode ausführen kann
Als Nächstes arbeite ich an einem dritten Bestandteil -
NPC - der es einem einfach machen soll, eben Interaktionen mit NPCs einzubauen.
Es ist übrigens möglich, ein und denselben Bestandteil beliebig oft in beliebig viele Orte einzufügen.
Jeder dieser Bestandteile hat zusätzlich eine
Bedingung, unter der er ausgeführt ist. Ergibt die Bedingung
false wird er solange ignoriert. Hier kommen die Variablen ins Spiel. ZB kann man mit der Bedingung "licht == 1" eine Beschreibung nur anzeigen wenn vorher das virtuelle Licht durch einen Kontroller-befehl angeschaltet, die variable
licht also auf 1 gesetzt wurde (
set licht 1).
Als so eine Bedingung sind sämtliche einfachen mathematischen ausdrücke möglich, und zwar in php syntax (also die Operatoren: +-*/() && || und == ! < > etc)
Außerdem habe ich für jeden Bestandteil noch 3 Knöpfe eingeführt. Mit dem x kann man ihn wieder von dem Platz entfernen, mit den beiden Pfeilen kann man ihn in der Reihenfolge rauf und runter verschieben.
Soweit so gut. Falls sich jemand mit dem scriptcode spielen möchte (Tester sind mir immer willkommen
) erklär ich noch kurz wies geht.
Der Scriptcode
Eigentlich ist es eh selbsterklärend. Schaut einfach die bereits vorhandenen Skripte an. Falls sie alle von irgendwelchen testern gelöscht werden beschreib ichs nochmal kurz:
Die einzelnen Anweisungen werden durch Zeilenumbrüche (Enter) getrennt. Alle sonstigen whitespaces werden ignoriert, bzw eine Gruppe von whitespaces in ein leerzeichen umgewandelt. Leerzeichen trennen einzelne Token voneinander.
Das erste Token einer Zeile ist der Befehl. Die restlichen token die Argumente. Dies sind die bereits implementierten Befehle:
- set: bsp: set licht 1
weiteres bsp: set licht !licht
weiteres bsp: set ergebnis (5-var*3) / 17
wie man sieht, werden Variablen automatisch ausgelesen.
- echo: bsp: echo Hallo Welt!
man beachte: Hier werden variablen NICHT automatisch ausgelesen - der String wird 1:1 ausgegeben
- space: gibt ein Leerzeichen (  aus. Nimmt keine Argumente
- newline: Zeilenumbruch (<br/>). Nimmt keine Argumente
- echovar: bsp: echovar ergebnis
um das Ergebnis der obigen Rechnung auszugeben - button: bsp: button WOHNZIMMER_1_LICHTSCHALTER Lichtschalter betätigen
erzeugt einen Link "Lichtschalter betätigen", der den Ort neu läd, jedoch am Anfang (nach der verpflichtenden Beschreibung, vor allen anderen Bestandteilen) den Bestandteil mit der ID WOHNZIMMER_1_LICHTSCHALTER ausführt/anzeigt. Das kann also einfach code sein oder auch eine Beschreibung, die angezeigt wird.
Die Quest
Und um das Ganze zu demonstrieren, habe ich eine (einfache) Quest erstellt, in der es darum geht, die Fernbedienung zu finden. Viel spaß! Bitte diese Quest nicht bearbeiten, außer ihr seid euch sicher, eine bessere Demoquest erstellen zu können
Geplant
- Ist jetzt eben der NPC. Wie ich das genau mache ist noch nicht fix.
- Dann würde ich es gerne irgendwie schaffen, den automatischen Zeilenumbruch in der Textarea des Kontrollers auszuschalten, da ich Zeilenumbrüche gerne als fixen bestandteil des scripts beibehalten würde.
- Verzweigungen und vlt sogar Schleifen im script ermöglichen
- Irgendwann in ferner Zukunft kommt dann auch mal die Userverwaltung dran, aber bevor ich damit beginne gibts sicher noch ein weiteres Update von mir.