*****Hallo!Und willkommen zu meinem Tutorial über Sections - Die Schritt-Für-Schritt Anleitung.
Nun, erst einmal sage ich, was Sections überhaupt sind.
Sections: "Section" (engl.) bedeutet so viel wie
Abschnitt. In Clonk ist damit folgendes gemeint: In einem Szenario ist normalerweiße
1ne Karte (Map). In einer Section ist eine
2te Karte (Map) gespeichert, mit allen Objekten. Man kann mit verschiedenen Befehlen im Script ein Objekt herstellen, welches die Karten
auf Knopfdruck wechselt. Aber dabei muss man verschiedes beachten.
Deshalb, nun zu...
SCHRITT 1Erst einmal müsst ihr
2 Szenarien erstellen. Ja, 2 Stück. Eine Karte für die Anfangsmap, eine für die Section. Wie ihr Szenarien erstellen könnt, kann man
hier nachlesen. Dann zeichnet ihr erstmal gemütlich eure beiden Maps. Und nicht vergessen abzuspeichern
. Seit ihr damit fertig, folgt...
SCHRITT 2Nun, eure beiden Szenarien sehen jetzt ungefähr so aus...
(nur so ungefähr)
So. Nun klickt ihr auf das Szenario mit der Karte, mit der ihr starten wollt und klickt dann oben rechts auf "Neu". Hier wählt ihr dann "Verzeichniss" aus - Dieses Verzeichniss nennt ihr so:
Sect***.c4g. Für die **** müsst ihr einen Namen einsetzen. Ich habe mein Verzeichniss z.B
SectWüste.c4g genannt. Danach kopiert ihr folgende Dateien aus dem 2ten Szenario in dieses Verzeichniss:
Objects.txt, Scenario.txt und die Map.png Alles andere ist überflüssig. Nun, jetzt sollte das schon so aussehen:
(kann auch hier abweichen)
So, jetzt haben wir 1 Szenario mit einer Section. Die nützt uns aber noch nichts, da man nicht zu ihr gelangen kann.
Wir brauchen also ein
Objekt, das uns auf die Section verfrachtet. Deshalb kommen wir nun zu...
SCHRITT 3Wir wollen jetzt also ein Objekt Scripten, das uns in eine Section verfrachtet. Daher klicken wir wieder auf unser Szenario, klicken anschließend auf "Neu" -> "Objekt". Jetzt haben wir ein Objekt im Szenario, wir nennen es z.B "Fernbedienung" oder sowas. Jetzt haben wir diese Fernbedienung, die Aussieht wie ein Stein... Nicht praktisch.
Deshalb nehmen wir erstmal eine neue Grafik... Wie wäre es denn mit dieser hier:
Zum verwenden in Clonk Rage Ordner ziehen und den Editor neustarten. Dann einfach die Grafik auf die Fernbedienung draufziehen, und schon haben wir die neue Grafik übernommen. Dabei müssen wir noch die
DefCore.txt bearbeiten. Deshalb macht ihr Doppel-Klick darauf. Bisher sieht eure Datei so aus:
- Zitat :
- [DefCore]
id=_NEW
Name=New Object
Version=4,9,5
Category=18960
MaxUserSelect=10
Width=6
Height=6
Offset=-3,-3
Value=10
Mass=10
Components=_NEW=1;
Picture=6,0,64,64
Vertices=1
VertexY=1
VertexFriction=20
Rebuy=1
Collectible=1
Also, wir ändern jetzt die ID des Objektes, und passen die Maße an die neue Grafik an. Das sieht dann so aus:
- Zitat :
- [DefCore]
id=SFBD
Name=Section Fernbedienung
Category=3600
Width=3
Height=7
Offset=-2,-4
Picture=3,7,35,35
Mass=10
Value=50
MaxUserSelect=5
Components=METL=1;
Vertices=3
VertexX=1,-2,2
VertexY=-4,4,4
VertexFriction=50,50,50
Collectible=1
Rebuy=1
Rotate=1
Gut. Jetzt wird das Objekt richtig angezeigt, aber wir haben noch ein Problem. Es macht nähmlich
absulut nichts, da das Script des Objektes leer ist. Deshalb kommen wir nun zum
letzten Schritt,...
SCHRITT 4Hier werden wir uns um das Script kümmern. Aber als erstest, eine
WARNUNG: Folgende Befehle sind undokumentiert, da sie nur begrenzt funktionieren bzw. unstabil sind. Ich gebe keine Garantie auf Erfolg.So, da wir das geklärt haben, öffnet doch mal den Script der Fernbedienung. Sie müsste so aussehen:
- Code:
-
/*-- Neues Objekt --*/
#strict
func Initialize() {
return(1);
}
Jetzt kommen wir zu den einzelnen Befehlen...
LoadScenarioSection(string szSection, int dwFlags)Also, für "sring szSection" muss der Name der Section rein. Und zwar OHNE das "Sect". Also wenn ihr euren Ordner "SectWüste.c4g" genannt habt, dann ist der Name eurer Section "Wüste". Alles andere nicht.
Und "dwFlags" bedeutet Folgendes. "dwFlags" kann entweder auf 0 oder 1 stehen. Dabei gibt die Zahl an, welche Teile ihr von der Landschaft speichern wollt. "0" Steht für "Landschaft". Grabt ihr ein Loch und kehrt dann wieder zurück, so ist das Loch immernoch da. "1" hingegen Speichert die Objekte. Habt ihr ein Haus gebaut, ist es nachher wieder da.
Nochmal im Klartext und mit Beispiel - Code:
-
#strict
public func Activate()
{
LoadScenarioSection("Wüste",1);
}
Dieser Script würde dich in die Section "Wüste" bringen, und die Objekte die du gemacht hast, speichern.
So, kopiert das mal in Fernbedienung. Ihr werdet 2 Sachen feststellen:
- 1.) Es hat die Section gewechselt.
- 2.) Du wurdest eliminiert.
So, das is doch schonmal etwas... Aber Verbessern heißt hier die Devise! Denn wir haben etwas wichtiges übersehen...
Wir müssen nähmlich noch den Clonk speichern, damit er nicht wie alles andere auf der Karte gelöscht wird. Das geht mit
SetObjectStatus()! Auch hierbei kurze Erklärung:
SetObjectStatus() hat zwei Parameter. Der 1te ist eine Zahl. Die kann entweder 1 oder 2 sein. Bei normalen Objekten ist es auf 1, damit man sich bewegen etc kann. Der 2te Parameter ist das Objekt, dessen Layer geändert werden soll. Will man hier seinen Menschen machen, nimmt man "GetCrew(iPlr)".
Nochmal im Klartext - Code:
-
public func StartChanging(int iPlr)
{
GetCrew(iPlr)->SetObjectStatus(2);
Message("DIE SECTION WIRD JETZT GEWECHSELT!");
return(1);
}
Das ist ein Code, der im Szenario-Script stehen kann. Es ändert den Layer vom Clonk des Spielers auf "2", heißt, dass er gespeichert wird und in die Section "mitgenommen" wird. Das Objekt kann diese Funktion später aufrufen. Mit GameCall(string Funktionsname). Wenn man daas also in den Szenario-Skript einfügen würde, und noch dazu im Objekt den Befehl mit dem GameCall macht, sähe dann so aus:
- Code:
-
#strict
public func Activate()
{
GameCall("StartChanging"); //ruft die Funktion auf, die die Clonks //speichert.
LoadScenarioSection("Wüste",2);
return(1);
}
Probiert das mal aus.
Ihr werdet 3 Dinge feststellen:
- 1.Die Section wurde gewechselt.
- 3. Ihr seht euren Clonk nicht mehr, könnt euch nicht bewegen.
Na das ist doch mal ein großer Fortschritt, nur wir haben eins wieder vergessen...
Und zwar die Clonk wieder zu
reaktivieren!. Durch "SetObjectStatus(2);" haben wir sie deaktiviert. Jetzt müssen wir sie wieder aktivieren, ihren Layer also auf normal "1" setzen. Das würde im Szenario-Script so aussehen:
- Code:
-
public func EndChanging(int iPlr)
{
GetCrew(iPlr)->SetObjectStatus(1);
Message("DIE SECTION WURDE GEWECHSELT UND DIE CLONKS REAKTIVIERET!");
return(1);
}
So, dieser Code würde die Clonks wieder reaktivieren. Jetzt muss diese Funktion nur noch von unserer Fernbedienung aufgerufen werden. Dazu in das Fernbedienungsobjekt schreiben:
- Code:
-
#strict
public func Activate()
{
GameCall("StartChanging");
LoadScenarioSection("Wüste",2);
GameCall("EndChanging");
}
So. Und jetzt sind wir fertig.
Dieser Skript da oben würde die Clonks deaktivieren, danach die Section laden und die Clonks wieder aktivieren. So schwer war das doch garnicht! Aber hier nochmal die gesamten Scripts am Ende:
- Code:
-
/*-- Szenario-Skript --*/
#strict
public func StartChanging(int iPlr)
{
GetCrew(iPlr)->SetObjectStatus(2);
Message("DIE SECTION WIRD JETZT GEWECHSELT!");
return(1);
}
public func EndChanging(int iPlr)
{
GetCrew(iPlr)->SetObjectStatus(1);
Message("DIE SECTION WURDE GEWECHSELT UND DIE CLONKS REAKTIVIERT!");
return(1);
}
Und die des Objektes:
- Code:
-
#strict
public func Activate()
{
GameCall("StartChanging");
LoadScenarioSection("Wüste",2);
GameCall("EndChanging");
return(1);
}
So, hier sind wir schon am Ende unserer Reise.Ich hoffe ich konnte euch das gut erkären. Fragen oder ähnliches dürfen gerne gepopstet werden!
MFG Gamer